Name: series-workflow9pgck Phase: Succeeded StartedAt: 2026-09-15 09:22:10 +0000 UTC FinishedAt: 2026-09-15 10:24:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9pgck[0] Phase: Succeeded StartedAt: 2026-09-15 09:22:10 +0000 UTC FinishedAt: 2026-09-15 09:47:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9pgck[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 09:22:10 +0000 UTC FinishedAt: 2026-09-15 09:47:18 +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": "136a77f66b51dad3846c393753d92ad026e484e7", "config_name": "upstream-apparmor-kasan.config", "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": "136a77f66b51dad3846c393753d92ad026e484e7", "config_name": "upstream-apparmor-kasan.config", "series_id": "6190ae9d-78c4-4f11-93ea-b70fdfd2ee3c" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_pages_bulk_noprof" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "136a77f66b51dad3846c393753d92ad026e484e7", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19ub3Byb2YmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKWAgdG8gYXBwbHkgcGVyLXRhc2sgR0ZQIGNvbnRleHQgcmVzdHJpY3Rpb25zIHZpYSBgY3VycmVudF9nZnBfY29udGV4dChnZnApYC4gVGhpcyBlbnN1cmVzIHRhc2stbGV2ZWwgZmxhZ3Mgc3VjaCBhcyBQRl9NRU1BTExPQ19OT0lPLCBQRl9NRU1BTExPQ19OT0ZTLCBhbmQgUEZfTUVNQUxMT0NfUElOIGNvcnJlY3RseSBtYXNrIEdGUCBmbGFncyAoZS5nLiwgc3RyaXBwaW5nIF9fR0ZQX0lPLCBfX0dGUF9GUywgX19HRlBfTU9WQUJMRSkgdG8gcHJldmVudCBkZWFkbG9ja3MgZHVyaW5nIHJlY2xhaW0uXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnk6XG4xLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZS5cbjIuIEl0IGRvZXMgbm90IGFsdGVyIG1lbW9yeSBpbml0aWFsaXphdGlvbiwgemVyb2luZywgb3Igc3RydWN0IGZpZWxkIHBvcHVsYXRpb24uXG4zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYnJhbmNoZXMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBhZmZlY3QgYnVmZmVyIGJvdW5kcy9sZW5ndGhzLlxuXG5BbnkgcmVjbGFpbSBvciBsb2NraW5nIGlzc3VlcyByZWxhdGVkIHRvIHRhc2sgR0ZQIGNvbnRleHRzIGFyZSB0cmFja2VkIGJ5IExPQ0tERVAgYW5kIHN0YW5kYXJkIG1lbW9yeSBhbGxvYyBkZWJ1Z2dpbmcsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgcGFnZSBhbGxvY2F0b3IgZnVuY3Rpb24gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKSBpbiBtbS9wYWdlX2FsbG9jLmMgdG8gaG9ub3IgdGhlIGNhbGxpbmcgdGFzayYjMzk7cyBzY29wZWQgR0ZQIGNvbnRleHQgdmlhIGN1cnJlbnRfZ2ZwX2NvbnRleHQoKS4gVGhpcyBhbHRlcnMgYWxsb2NhdGlvbiBmbGFncyAoZS5nLiBzdHJpcHBpbmcgX19HRlBfRlMsIF9fR0ZQX0lPLCBvciBfX0dGUF9NT1ZBQkxFIHVuZGVyIFBGX01FTUFMTE9DX05PRlMsIFBGX01FTUFMTE9DX05PSU8sIG9yIFBGX01FTUFMTE9DX1BJTikgZHVyaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIHJlcXVlc3RzLCB3aGljaCBkaXJlY3RseSBhZmZlY3RzIHJlYWNoYWJsZSBzdWJzeXN0ZW1zIHN1Y2ggYXMgdm1hbGxvYywgc3BsaWNlLCBpb191cmluZywgYW5kIHBhZ2UgcG9vbHMuIFRoaXMgY29yZSBtbSBsb2dpYyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQwMWVlYWRiYjRmOTczOTJiNTBiZGJhN2I1M2EwNjM2ZTZlOTE4MWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwOTo0MDo1NSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IDEyZmFjOTA4NGM0ODMuLjNiZTcyODhhMWFhNzEgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTUyMDcsNiAmIzQzOzUyMDcsNyBAQCB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG4gXG4gXHQvKiBNYXkgc2V0IEFMTE9DX05PRlJBR01FTlQsIGZyYWdtZW50YXRpb24gd2lsbCByZXR1cm4gMSBwYWdlLiAqL1xuIFx0Z2ZwIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbiYjNDM7XHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XG4gXHRpZiAoIXByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgXHUwMDI2YWMsIFx1MDAyNmdmcCwgXHUwMDI2YWxsb2NfZmxhZ3MpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHBhZ2UgYWxsb2NhdG9yIGZ1bmN0aW9uIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKCkgaW4gbW0vcGFnZV9hbGxvYy5jIHRvIGhvbm9yIHRoZSBjYWxsaW5nIHRhc2smIzM5O3Mgc2NvcGVkIEdGUCBjb250ZXh0IHZpYSBjdXJyZW50X2dmcF9jb250ZXh0KCkuIFRoaXMgYWx0ZXJzIGFsbG9jYXRpb24gZmxhZ3MgKGUuZy4gc3RyaXBwaW5nIF9fR0ZQX0ZTLCBfX0dGUF9JTywgb3IgX19HRlBfTU9WQUJMRSB1bmRlciBQRl9NRU1BTExPQ19OT0ZTLCBQRl9NRU1BTExPQ19OT0lPLCBvciBQRl9NRU1BTExPQ19QSU4pIGR1cmluZyBidWxrIHBhZ2UgYWxsb2NhdGlvbiByZXF1ZXN0cywgd2hpY2ggZGlyZWN0bHkgYWZmZWN0cyByZWFjaGFibGUgc3Vic3lzdGVtcyBzdWNoIGFzIHZtYWxsb2MsIHNwbGljZSwgaW9fdXJpbmcsIGFuZCBwYWdlIHBvb2xzLiBUaGlzIGNvcmUgbW0gbG9naWMgY2hhbmdlIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0MDFlZWFkYmI0Zjk3MzkyYjUwYmRiYTdiNTNhMDYzNmU2ZTkxODFhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMDk6NDA6NTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggMTJmYWM5MDg0YzQ4My4uM2JlNzI4OGExYWE3MSAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtNTIwNyw2ICYjNDM7NTIwNyw3IEBAIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCwKIAogCS8qIE1heSBzZXQgQUxMT0NfTk9GUkFHTUVOVCwgZnJhZ21lbnRhdGlvbiB3aWxsIHJldHVybiAxIHBhZ2UuICovCiAJZ2ZwICZhbXA7PSBnZnBfYWxsb3dlZF9tYXNrOwomIzQzOwlnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7CiAJaWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssICZhbXA7YWMsICZhbXA7Z2ZwLCAmYW1wO2FsbG9jX2ZsYWdzKSkKIAkJZ290byBvdXQ7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBgbW0vcGFnZV9hbGxvYy5jYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgbW9kaWZpZXMgYG1tL3BhZ2VfYWxsb2MuY2AuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBhIGxpbmUgdGhhdCBjYWxscyBgY3VycmVudF9nZnBfY29udGV4dChnZnApYCByaWdodCBiZWZvcmUgdGhlIGBwcmVwYXJlX2FsbG9jX3BhZ2VzYCBjYWxsLiBUaGlzIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVudCBhbmQgaW1wbGljYXRpb25zIGhlcmUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcmV2aWV3IHRoZSBnaXQgaGlzdG9yeSBvZiB0aGlzIGZpbGUgaW4gdGhhdCBhcmVhLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4KCkkmIzM5O20gdGhpbmtpbmcsICYjMzQ7TGV0JiMzOTtzIGNoZWNrIHRoZSBnaXQgbG9nIG9yIGp1c3QgYnJvd3NlIHRoYXQgc2VjdGlvbiBvZiBgbW0vcGFnZV9hbGxvYy5jYCYjMzQ7LiBJJiMzOTtsbCBxdWlja2x5IG5lZWQgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhbmQgdW5kZXJzdGFuZCB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIHVzZWQgYW5kIGl0cyBwYXJhbWV0ZXJzLCBhbmQgc28gSSBtaWdodCBhcyB3ZWxsIGp1c3QgYHJlYWQtZmlsZWAgYW5kIGNoZWNrIHRoZSBmaWxlIGRpcmVjdGx5LiBUaGF0IHdpbGwgYmUgdGhlIHF1aWNrZXN0IHBhdGggdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBgZ2ZwYCBmbGFnIGlzIGJlaW5nIG1vZGlmaWVkLCB3aHkgdGhpcyBjb250ZXh0IGlzIGJlaW5nIHNldCwgYW5kIHdoYXQgZWZmZWN0IHRoaXMgd2lsbCBoYXZlIG9uIHBhZ2UgYWxsb2NhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTE5NTpcdFxuNTE5NjpcdCNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxuNTE5NzpcdFx0LypcbjUxOTg6XHRcdCAqIFBBR0VfT1dORVIgbWF5IHJlY3Vyc2UgaW50byB0aGUgYWxsb2NhdG9yIHRvIGFsbG9jYXRlIHNwYWNlIHRvXG41MTk5Olx0XHQgKiBzYXZlIHRoZSBzdGFjayB3aXRoIHBhZ2VzZXRzLmxvY2sgaGVsZC4gUmVsZWFzaW5nL3JlYWNxdWlyaW5nXG41MjAwOlx0XHQgKiByZW1vdmVzIG11Y2ggb2YgdGhlIHBlcmZvcm1hbmNlIGJlbmVmaXQgb2YgYnVsayBhbGxvY2F0aW9uIHNvXG41MjAxOlx0XHQgKiBmb3JjZSB0aGUgY2FsbGVyIHRvIGFsbG9jYXRlIG9uZSBwYWdlIGF0IGEgdGltZSBhcyBpdCYjMzk7bGwgaGF2ZVxuNTIwMjpcdFx0ICogc2ltaWxhciBwZXJmb3JtYW5jZSB0byBhZGRlZCBjb21wbGV4aXR5IHRvIHRoZSBidWxrIGFsbG9jYXRvci5cbjUyMDM6XHRcdCAqL1xuNTIwNDpcdFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxuNTIwNTpcdFx0XHRnb3RvIGZhaWxlZDtcbjUyMDY6XHQjZW5kaWZcbjUyMDc6XHRcbjUyMDg6XHRcdC8qIE1heSBzZXQgQUxMT0NfTk9GUkFHTUVOVCwgZnJhZ21lbnRhdGlvbiB3aWxsIHJldHVybiAxIHBhZ2UuICovXG41MjA5Olx0XHRnZnAgXHUwMDI2PSBnZnBfYWxsb3dlZF9tYXNrO1xuNTIxMDpcdFx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xuNTIxMTpcdFx0aWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFx1MDAyNmFjLCBcdTAwMjZnZnAsIFx1MDAyNmFsbG9jX2ZsYWdzKSlcbjUyMTI6XHRcdFx0Z290byBvdXQ7XG41MjEzOlx0XG41MjE0Olx0XHQvKiBGaW5kIGFuIGFsbG93ZWQgbG9jYWwgem9uZSB0aGF0IG1lZXRzIHRoZSBsb3cgd2F0ZXJtYXJrLiAqL1xuNTIxNTpcdFx0eiA9IGFjLnByZWZlcnJlZF96b25lcmVmO1xuNTIxNjpcdFx0Zm9yX25leHRfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCBhYy5oaWdoZXN0X3pvbmVpZHgsIGFjLm5vZGVtYXNrKSB7XG41MjE3Olx0XHRcdHVuc2lnbmVkIGxvbmcgbWFyaztcbjUyMTg6XHRcbjUyMTk6XHRcdFx0aWYgKGNwdXNldHNfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX0NQVVNFVCkgXHUwMDI2XHUwMDI2XG41MjIwOlx0XHRcdCAgICAhX19jcHVzZXRfem9uZV9hbGxvd2VkKHpvbmUsIGdmcCkpIHtcbjUyMjE6XHRcdFx0XHRjb250aW51ZTtcbjUyMjI6XHRcdFx0fVxuNTIyMzpcdFxuNTIyNDpcdFx0XHRpZiAobnJfb25saW5lX25vZGVzIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiB6b25lICE9IHpvbmVsaXN0X3pvbmUoYWMucHJlZmVycmVkX3pvbmVyZWYpIFx1MDAyNlx1MDAyNlxuNTIyNTpcdFx0XHQgICAgem9uZV90b19uaWQoem9uZSkgIT0gem9uZWxpc3Rfbm9kZV9pZHgoYWMucHJlZmVycmVkX3pvbmVyZWYpKSB7XG41MjI2Olx0XHRcdFx0Z290byBmYWlsZWQ7XG41MjI3Olx0XHRcdH1cbjUyMjg6XHRcbjUyMjk6XHRcdFx0Y29uZF9hY2NlcHRfbWVtb3J5KHpvbmUsIDAsIGFsbG9jX2ZsYWdzKTtcbjUyMzA6XHRyZXRyeV90aGlzX3pvbmU6XG41MjMxOlx0XHRcdG1hcmsgPSB3bWFya19wYWdlcyh6b25lLCBhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfV01BUktfTUFTSykgJiM0MzsgbnJfcGFnZXMgLSBucl9wb3B1bGF0ZWQ7XG41MjMyOlx0XHRcdGlmICh6b25lX3dhdGVybWFya19mYXN0KHpvbmUsIDAsICBtYXJrLFxuNTIzMzpcdFx0XHRcdFx0em9uZWxpc3Rfem9uZV9pZHgoYWMucHJlZmVycmVkX3pvbmVyZWYpLFxuNTIzNDpcdFx0XHRcdFx0YWxsb2NfZmxhZ3MsIGdmcCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTMwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKkRpZ2dpbmcgaW50byBNZW1vcnkgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIGFuZCBgYWxsb2NfcGFnZXNfbm9wcm9mYC4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIHBsYXlzIGEgcm9sZSBpbiBob3cgYGFsbG9jX3BhZ2VzX25vcHJvZmAgYmVoYXZlcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgLiBUaGUgbW9zdCBkaXJlY3QgYXBwcm9hY2ggaXMgdG8gY2hlY2sgdGhlIGBtbS9wYWdlX2FsbG9jLmNgIGZpbGUsIHNpbmNlIHRoYXQmIzM5O3MgYSBjZW50cmFsIGxvY2F0aW9uIGZvciBtZW1vcnkgYWxsb2NhdGlvbi4gQnV0LCBvZiBjb3Vyc2UsIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGdyZXAgdG8gZmluZCBhbGwgdGhlIGluc3RhbmNlcyBvZiBgY3VycmVudF9nZnBfY29udGV4dGAsIGFjcm9zcyB0aGUga2VybmVsIHNvdXJjZSwgdG8gZ2V0IGEgYnJvYWQgcGljdHVyZSBvZiBpdHMgdXNhZ2UuIFRoYXQgc2hvdWxkIHBhaW50IGEgY2xlYXJlciBwaWN0dXJlIG9mIGl0cyBwdXJwb3NlIGFuZCBpbmZsdWVuY2Ugb24gdGhlc2UgYWxsb2NhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3VycmVudF9nZnBfY29udGV4dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTQxNDU9c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MjE0LVxubW0vaHVnZV9tZW1vcnkuYzo0MjE1Olx0XHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykgXHUwMDI2XG5tbS9odWdlX21lbW9yeS5jLTQyMTYtXHRcdFx0XHRcdFx0XHRHRlBfUkVDTEFJTV9NQVNLKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9Mzc1Mj1hbGxvY19mbGFnc19ub2ZyYWdtZW50KHN0cnVjdCB6b25lICp6b25lLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMzc4NC1cbm1tL3BhZ2VfYWxsb2MuYzozNzg1Oi8qIE11c3QgYmUgY2FsbGVkIGFmdGVyIGN1cnJlbnRfZ2ZwX2NvbnRleHQoKSB3aGljaCBjYW4gY2hhbmdlIGdmcF9tYXNrICovXG5tbS9wYWdlX2FsbG9jLmMtMzc4Ni1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhbGxvY19mbGFnc19jbWEoZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubW0vcGFnZV9hbGxvYy5jPTQzODM9dm9pZCBmc19yZWNsYWltX2FjcXVpcmUoZ2ZwX3QgZ2ZwX21hc2spXG5tbS9wYWdlX2FsbG9jLmMtNDM4NC17XG5tbS9wYWdlX2FsbG9jLmM6NDM4NTpcdGdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayk7XG5tbS9wYWdlX2FsbG9jLmMtNDM4Ni1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDQwMD12b2lkIGZzX3JlY2xhaW1fcmVsZWFzZShnZnBfdCBnZnBfbWFzaylcbm1tL3BhZ2VfYWxsb2MuYy00NDAxLXtcbm1tL3BhZ2VfYWxsb2MuYzo0NDAyOlx0Z2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKTtcbm1tL3BhZ2VfYWxsb2MuYy00NDAzLVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz01MTYwPXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTIwOS1cdGdmcCBcdTAwMjY9IGdmcF9hbGxvd2VkX21hc2s7XG5tbS9wYWdlX2FsbG9jLmM6NTIxMDpcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcbm1tL3BhZ2VfYWxsb2MuYy01MjExLVx0aWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFx1MDAyNmFjLCBcdTAwMjZnZnAsIFx1MDAyNmFsbG9jX2ZsYWdzKSlcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTM4ND1zdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01NDE5LVx0ICovXG5tbS9wYWdlX2FsbG9jLmM6NTQyMDpcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcbm1tL3BhZ2VfYWxsb2MuYy01NDIxLVx0YWxsb2NfZ2ZwID0gZ2ZwO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz03Mjg0PWludCBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzMxMi1cbm1tL3BhZ2VfYWxsb2MuYzo3MzEzOlx0Z2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKTtcbm1tL3BhZ2VfYWxsb2MuYy03MzE0LVx0aWYgKF9fYWxsb2NfY29udGlnX3ZlcmlmeV9nZnBfbWFzayhnZnBfbWFzaywgKGdmcF90ICopXHUwMDI2Y2MuZ2ZwX21hc2spKVxuLS1cbm1tL3BlcmNwdS5jPTE3MzU9dm9pZCBfX3BlcmNwdSAqcGNwdV9hbGxvY19ub3Byb2Yoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwgYm9vbCByZXNlcnZlZCxcbi0tXG5tbS9wZXJjcHUuYy0xNzQ5LVxubW0vcGVyY3B1LmM6MTc1MDpcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcbm1tL3BlcmNwdS5jLTE3NTEtXHQvKlxuLS1cbm1tL3Ztc2Nhbi5jPTY3Njk9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG4tLVxubW0vdm1zY2FuLmMtNjc3NC1cdFx0Lm5yX3RvX3JlY2xhaW0gPSBTV0FQX0NMVVNURVJfTUFYLFxubW0vdm1zY2FuLmM6Njc3NTpcdFx0LmdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayksXG5tbS92bXNjYW4uYy02Nzc2LVx0XHQucmVjbGFpbV9pZHggPSBnZnBfem9uZShnZnBfbWFzayksXG4tLVxubW0vdm1zY2FuLmM9Njg1NT11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4NjUtXHRcdC5wcm9hY3RpdmVfc3dhcHBpbmVzcyA9IHN3YXBwaW5lc3MsXG5tbS92bXNjYW4uYzo2ODY2Olx0XHQuZ2ZwX21hc2sgPSAoY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzaykgXHUwMDI2IEdGUF9SRUNMQUlNX01BU0spIHxcbm1tL3Ztc2Nhbi5jLTY4NjctXHRcdFx0XHQoR0ZQX0hJR0hVU0VSX01PVkFCTEUgXHUwMDI2IH5HRlBfUkVDTEFJTV9NQVNLKSxcbi0tXG5tbS92bXNjYW4uYz03ODc2PXVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vdm1zY2FuLmMtNzg4Mi1cdFx0Lm5yX3RvX3JlY2xhaW0gPSBtYXgobnJfcGFnZXMsIFNXQVBfQ0xVU1RFUl9NQVgpLFxubW0vdm1zY2FuLmM6Nzg4MzpcdFx0LmdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayksXG5tbS92bXNjYW4uYy03ODg0LVx0XHQub3JkZXIgPSBvcmRlcixcbi0tXG5tbS92bXNjYW4uYz03OTU4PWludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbi0tXG5tbS92bXNjYW4uYy04MDM1LVx0XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XG5tbS92bXNjYW4uYzo4MDM2Olx0XHRcdFx0LmdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayksXG5tbS92bXNjYW4uYy04MDM3LVx0XHRcdFx0LnJlY2xhaW1faWR4ID0gZ2ZwX3pvbmUoZ2ZwX21hc2spLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MTkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246CgoqKk1pc3NpbmcgQ29udGV4dCBpbiBCdWxrIFBhZ2UgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCBzbyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIHNlZW1zIHRvIGJlIG1pc3NpbmcgYSBjcml0aWNhbCBjYWxsIHRvIGBjdXJyZW50X2dmcF9jb250ZXh0KGdmcClgLiBUaGF0JiMzOTtzLi4uIGludGVyZXN0aW5nLiBMZXQgbWUgcXVpY2tseSBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBjdXJyZW50X2dmcF9jb250ZXh0YCAqYWN0dWFsbHkqIGRvZXMuIExldCYjMzk7cyB0cmFjZSB0aGF0IGZ1bmN0aW9uIGRlZmluaXRpb24gYW5kIHNlZSB3aGF0IHRoZSBpbnRlbnRpb25zIG9mIHRoYXQgZnVuY3Rpb24gYXJlLiBQZXJoYXBzIHRoZXJlJiMzOTtzIGFuIGlzc3VlIHdpdGggaG93IHRoaXMgYnVsayBhbGxvY2F0aW9uIGlzIGhhbmRsaW5nIEdGUCBmbGFncy4gVGhpcyBtaXNzaW5nIHBpZWNlIGNvdWxkIGJlIGFmZmVjdGluZyBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciBpbiB3YXlzIEkgbmVlZCB0byB1bmRlcnN0YW5kLiBMZXQmIzM5O3MgZGl2ZSBpbiBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW5saW5lIGdmcF90IGN1cnJlbnRfZ2ZwX2NvbnRleHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTIxNT1zdGF0aWMgaW5saW5lIGJvb2wgaW5fdmZvcmsoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI0Ny0gKi9cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDoyNDg6c3RhdGljIGlubGluZSBnZnBfdCBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF90IGZsYWdzKVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI0OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE1MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBjb2RlOgoKKipEaXZpbmcgaW50byBNZW1vcnkgTWFuYWdlbWVudCAobW0uaCkqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBzb21lIG1lbW9yeSBtYW5hZ2VtZW50IGRldGFpbHMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBhZGRyZXNzIHNwYWNlcyBhbmQgbWVtb3J5IGNvbnRleHRzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI0OC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGRlZmluaXRpb25zIG9yIHN0cnVjdHVyZXMgcmVsYXRlZCB0byBwcm9jZXNzIG1lbW9yeSBtYXBzIChtbV9zdHJ1Y3QpIG9yIHBlcmhhcHMgZGV0YWlscyBhYm91dCBob3cgdGhlc2UgbWFwcyBpbnRlcmFjdCB3aXRoIHRoZSBwYWdlIHRhYmxlcy4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB2aXJ0dWFsIGFkZHJlc3NlcyBhcmUgdHJhbnNsYXRlZCB0byBwaHlzaWNhbCBhZGRyZXNzZXMgYW5kIGhvdyB0aGUga2VybmVsIHRyYWNrcyB0aGUgbWVtb3J5IGFsbG9jYXRlZCB0byBlYWNoIHByb2Nlc3MuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgbG9ja2luZyBtZWNoYW5pc21zIG9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQsIGFzIHRoZXNlIGFyZSBjcml0aWNhbCBmb3IgZW5zdXJpbmcgZGF0YSBjb25zaXN0ZW5jeSBhbmQgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgaW4gYSBtdWx0aXRocmVhZGVkIGVudmlyb25tZW50LiBGcm9tIHRoZXJlLCBJIGNhbiBiZXR0ZXIgdW5kZXJzdGFuZCBhbmQgZGVidWcgY2VydGFpbiBtZW1vcnktcmVsYXRlZCBzeXN0ZW0gY2FsbHMgSSB3YXMgZGVhbGluZyB3aXRoIGVhcmxpZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zY2hlZC9tbS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDA6XHR9XG4gMjQxOlx0XG4gMjQyOlx0LypcbiAyNDM6XHQgKiBBcHBsaWVzIHBlci10YXNrIGdmcCBjb250ZXh0IHRvIHRoZSBnaXZlbiBhbGxvY2F0aW9uIGZsYWdzLlxuIDI0NDpcdCAqIFBGX01FTUFMTE9DX05PSU8gaW1wbGllcyBHRlBfTk9JT1xuIDI0NTpcdCAqIFBGX01FTUFMTE9DX05PRlMgaW1wbGllcyBHRlBfTk9GU1xuIDI0NjpcdCAqIFBGX01FTUFMTE9DX1BJTiAgaW1wbGllcyAhR0ZQX01PVkFCTEVcbiAyNDc6XHQgKi9cbiAyNDg6XHRzdGF0aWMgaW5saW5lIGdmcF90IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX3QgZmxhZ3MpXG4gMjQ5Olx0e1xuIDI1MDpcdFx0dW5zaWduZWQgaW50IHBmbGFncyA9IFJFQURfT05DRShjdXJyZW50LVx1MDAzZWZsYWdzKTtcbiAyNTE6XHRcbiAyNTI6XHRcdGlmICh1bmxpa2VseShwZmxhZ3MgXHUwMDI2IChQRl9NRU1BTExPQ19OT0lPIHwgUEZfTUVNQUxMT0NfTk9GUyB8IFBGX01FTUFMTE9DX1BJTikpKSB7XG4gMjUzOlx0XHRcdC8qXG4gMjU0Olx0XHRcdCAqIE5PSU8gaW1wbGllcyBib3RoIE5PSU8gYW5kIE5PRlMgYW5kIGl0IGlzIGEgd2Vha2VyIGNvbnRleHRcbiAyNTU6XHRcdFx0ICogc28gYWx3YXlzIG1ha2Ugc3VyZSBpdCBtYWtlcyBwcmVjZWRlbmNlXG4gMjU2Olx0XHRcdCAqL1xuIDI1NzpcdFx0XHRpZiAocGZsYWdzIFx1MDAyNiBQRl9NRU1BTExPQ19OT0lPKVxuIDI1ODpcdFx0XHRcdGZsYWdzIFx1MDAyNj0gfihfX0dGUF9JTyB8IF9fR0ZQX0ZTKTtcbiAyNTk6XHRcdFx0ZWxzZSBpZiAocGZsYWdzIFx1MDAyNiBQRl9NRU1BTExPQ19OT0ZTKVxuIDI2MDpcdFx0XHRcdGZsYWdzIFx1MDAyNj0gfl9fR0ZQX0ZTO1xuIDI2MTpcdFxuIDI2MjpcdFx0XHRpZiAocGZsYWdzIFx1MDAyNiBQRl9NRU1BTExPQ19QSU4pXG4gMjYzOlx0XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+X19HRlBfTU9WQUJMRTtcbiAyNjQ6XHRcdH1cbiAyNjU6XHRcdHJldHVybiBmbGFncztcbiAyNjY6XHR9XG4gMjY3Olx0XG4gMjY4Olx0I2lmZGVmIENPTkZJR19MT0NLREVQXG4gMjY5Olx0ZXh0ZXJuIHZvaWQgX19mc19yZWNsYWltX2FjcXVpcmUodW5zaWduZWQgbG9uZyBpcCk7XG4gMjcwOlx0ZXh0ZXJuIHZvaWQgX19mc19yZWNsYWltX3JlbGVhc2UodW5zaWduZWQgbG9uZyBpcCk7XG4gMjcxOlx0ZXh0ZXJuIHZvaWQgZnNfcmVjbGFpbV9hY3F1aXJlKGdmcF90IGdmcF9tYXNrKTtcbiAyNzI6XHRleHRlcm4gdm9pZCBmc19yZWNsYWltX3JlbGVhc2UoZ2ZwX3QgZ2ZwX21hc2spO1xuIDI3MzpcdCNlbHNlXG4gMjc0Olx0c3RhdGljIGlubGluZSB2b2lkIF9fZnNfcmVjbGFpbV9hY3F1aXJlKHVuc2lnbmVkIGxvbmcgaXApIHsgfVxuIDI3NTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZzX3JlY2xhaW1fcmVsZWFzZSh1bnNpZ25lZCBsb25nIGlwKSB7IH1cbiAyNzY6XHRzdGF0aWMgaW5saW5lIHZvaWQgZnNfcmVjbGFpbV9hY3F1aXJlKGdmcF90IGdmcF9tYXNrKSB7IH1cbiAyNzc6XHRzdGF0aWMgaW5saW5lIHZvaWQgZnNfcmVjbGFpbV9yZWxlYXNlKGdmcF90IGdmcF9tYXNrKSB7IH1cbiAyNzg6XHQjZW5kaWZcbiAyNzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA4NQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBHRlAgQ29udGV4dHMgaW4gTWVtb3J5IEFsbG9jYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB3ZSBtYW5hZ2UgdGhlICYjMzQ7Z2ZwJiMzNDsgKGdldCBmcmVlIHBhZ2VzKSBjb250ZXh0IHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgd2l0aCByZWdhcmQgdG8gYWxsb2NhdGlvbiBmbGFncy4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBjdXJyZW50X2dmcF9jb250ZXh0YCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUuIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgZGVzaWduZWQgdG8gdGFpbG9yIHRoZSBgZ2ZwYCBmbGFncyBmb3IgYSBnaXZlbiBhbGxvY2F0aW9uIHJlcXVlc3Qgb24gYSBwZXItdGFzayBiYXNpcy4KCkkgc2VlIHRoYXQgYFBGX01FTUFMTE9DX05PSU9gIGlzIGRlc2lnbmVkIHRvIHRyYW5zbGF0ZSBpbnRvIGBHRlBfTk9JT2AuIFRoaXMgbWFrZXMgcGVyZmVjdCBzZW5zZTsgYEdGUF9OT0lPYCBtZWFucyB3ZSB3YW50IHRvIGF2b2lkIGRpc2sgSS9PLCBhbmQgYFBGX01FTUFMTE9DX05PSU9gIHNlZW1zIHRvIGJlIHRoZSBmbGFnIHRoYXQgc2lnbmFscyB0aGlzIGludGVudCwgY2xlYXJpbmcgdGhlIGBfX0dGUF9JT2AgYW5kIGBfX0dGUF9GU2AgZmxhZ3MgdG8gZW5zdXJlIG5vIGRpc2sgaW50ZXJhY3Rpb24uCgpTaW1pbGFybHksIGBQRl9NRU1BTExPQ19OT0ZTYCBtYXBzIHRvIGBHRlBfTk9GU2AsIHdoaWNoIGlzIGxvZ2ljYWxseSBjb25zaXN0ZW50LCBjbGVhcmluZyBvbmx5IHRoZSBgX19HRlBfRlNgIGZsYWcuICBObyBmaWxlc3lzdGVtIGFjY2VzcywgZ29vZC4KCkZpbmFsbHksIGBQRl9NRU1BTExPQ19QSU5gIGhhcyB0aGUgZWZmZWN0IG9mIG5lZ2F0aW5nIGBHRlBfTU9WQUJMRWAsIHdoaWNoIG1ha2VzIHNlbnNlIGJlY2F1c2UgcGlubmluZyBhIHBhZ2UgaW1wbGllcyBpdCBzaG91bGRuJiMzOTt0IGJlIG1vdmVkIGFyb3VuZCBpbiBtZW1vcnkuICBUaGlzIGNsZWFycyB0aGUgYF9fR0ZQX01PVkFCTEVgIGZsYWcuCgpJJiMzOTttIG5vdyBjdXJpb3VzIGFib3V0IHdoaWNoIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIHVzaW5nIHRoZSBgYWxsb2NfcGFnZXNfYnVsaypgIGZ1bmN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoaWNoIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIHVzaW5nIHRoaXMgdG8gaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byBncmVwIHRocm91Z2ggdGhlIGNvZGViYXNlIGZvciB1c2FnZXMgb2YgYGFsbG9jX3BhZ2VzX2J1bGsqYCB0byBnZXQgYSBnb29kIHNlbnNlIG9mIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19wYWdlc19idWxrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0xNzI9c3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDQtXHQgKlxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwNTpcdCAqIE5vdGU6IGFsbG9jX3BhZ2VzX2J1bGsgbmVlZHMgdGhlIGFycmF5IHRvIGJlIHplcm9lZCwgYXMgaXQgYXNzdW1lc1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwNi1cdCAqIGFueSBub24temVybyBzbG90IGFscmVhZHkgY29udGFpbnMgYSB2YWxpZCBhbGxvY2F0aW9uLlxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDgtXHRtZW1zZXQocGFnZXMsIDAsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIG5yX3NlZ3MpO1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwOTpcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJfc2VncywgcGFnZXMpO1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIxMC1cdGlmIChucl9hbGxvY2F0ZWQgXHUwMDNjIG5yX3NlZ3MpXG4tLVxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jPTMxPWludCBmd19pc29fYnVmZmVyX2FsbG9jKHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsIGludCBwYWdlX2NvdW50KVxuLS1cbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00MS1cdC8vIGNvbnZlbmllbmNlIHRvIG1hcCB0aGVtIGludG8gdmlydHVhbCBhZGRyZXNzIHNwYWNlIG9mIHVzZXIgcHJvY2Vzcy5cbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYzo0MjpcdHVuc2lnbmVkIGxvbmcgbnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMIHwgR0ZQX0RNQTMyIHwgX19HRlBfWkVSTyxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00My1cdFx0XHRcdFx0XHQgICAgICBwYWdlX2NvdW50LCBwYWdlX2FycmF5KTtcbi0tXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYz04NDg9c3RhdGljIGludCBhcl9jb250ZXh0X2luaXQoc3RydWN0IGFyX2NvbnRleHQgKmN0eCwgc3RydWN0IGZ3X29oY2kgKm9oY2ksXG4tLVxuZHJpdmVycy9maXJld2lyZS9vaGNpLmMtODY0LVx0Ly8gYWRkcmVzcyByYW5nZSBpbiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIHNwYWNlLlxuZHJpdmVycy9maXJld2lyZS9vaGNpLmM6ODY1Olx0dW5zaWduZWQgbG9uZyBucl9wb3B1bGF0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwgfCBHRlBfRE1BMzIsIEFSX0JVRkZFUlMsIHBhZ2VzKTtcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jLTg2Ni1cbi0tXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jPTYyMT1zdGF0aWMgaW50IGFsbG9jX3ByaXZhdGVfcGFnZXMoc3RydWN0IGhtbV9idWZmZXJfb2JqZWN0ICpibylcbi0tXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyNi1cbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM6NjI3Olx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBiby1cdTAwM2VwZ25yLCBiby1cdTAwM2VwYWdlcyk7XG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyOC1cdC8qXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jOjYyOTpcdCAqIGFsbG9jX3BhZ2VzX2J1bGsoKSBkb2VzIG5vdCB0cnkgdmVyeSBoYXJkIHRvIGdldCBwYWdlcyB1bmRlciBtZW1vcnlcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmMtNjMwLVx0ICogcHJlc3N1cmUuIElmIG5lY2Vzc2FyeSBmYWxsIGJhY2sgdG8gYWxsb2NfcGFnZSgpLlxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYz00NjY9c3RhdGljIHZvaWQgZnJlZV9wYWdlX2xpc3QodTMyIG5wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2xpc3QpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ2OS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYzo0NzA6XHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ3MS1cdGZvciAoaSA9IG5wYWdlcyAtIDE7IGkgXHUwMDNlPSAwOyBpLS0pXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jPTQ5Nj1zdGF0aWMgaW50IG1seDV2Zl9hZGRfcGFnZXMoc3RydWN0IHBhZ2UgKioqcGFnZV9saXN0LCB1bnNpZ25lZCBpbnQgbnBhZ2VzKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDYtXHRmb3IgKDs7KSB7XG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM6NTA3Olx0XHRmaWxsZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUxfQUNDT1VOVCwgbnBhZ2VzIC0gZG9uZSxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDgtXHRcdFx0XHRcdCAgKnBhZ2VfbGlzdCAmIzQzOyBkb25lKTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM9NjM9c3RhdGljIGludCB2aXJ0aW92Zl9hZGRfbWlncmF0aW9uX3BhZ2VzKHN0cnVjdCB2aXJ0aW92Zl9kYXRhX2J1ZmZlciAqYnVmLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy03OC1cdGRvIHtcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzo3OTpcdFx0ZmlsbGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMX0FDQ09VTlQsIHRvX2ZpbGwsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtODAtXHRcdFx0XHRcdCAgcGFnZV9saXN0KTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM9MTEwPXN0YXRpYyB2b2lkIHZpcnRpb3ZmX2ZyZWVfZGF0YV9idWZmZXIoc3RydWN0IHZpcnRpb3ZmX2RhdGFfYnVmZmVyICpidWYpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExMy1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzoxMTQ6XHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExNS1cdGZvcl9lYWNoX3NndGFibGVfcGFnZShcdTAwMjZidWYtXHUwMDNldGFibGUuc2d0LCBcdTAwMjZzZ19pdGVyLCAwKVxuLS1cbmZzL2J0cmZzL2V4dGVudF9pby5jPTY4ND1pbnQgYnRyZnNfYWxsb2NfcGFnZV9hcnJheSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgZ2ZwX3QgZ2ZwKVxuLS1cbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5MC1cbmZzL2J0cmZzL2V4dGVudF9pby5jOjY5MTpcdFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5Mi1cdFx0aWYgKHVubGlrZWx5KGFsbG9jYXRlZCA9PSBsYXN0KSkge1xuLS1cbmZzL2Vyb2ZzL3p1dGlsLmM9NjU9aW50IHpfZXJvZnNfZ2J1Zl9ncm93c2l6ZSh1bnNpZ25lZCBpbnQgbnJwYWdlcylcbi0tXG5mcy9lcm9mcy96dXRpbC5jLTg5LVx0XHRcdGxhc3QgPSBqO1xuZnMvZXJvZnMvenV0aWwuYzo5MDpcdFx0XHRqID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucnBhZ2VzLCB0bXBfcGFnZXMpO1xuZnMvZXJvZnMvenV0aWwuYy05MS1cdFx0XHRpZiAobGFzdCA9PSBqKVxuLS1cbmZzL2Z1c2UvcmVhZGRpci5jPTMzNj1zdGF0aWMgc3RydWN0IHBhZ2UgKipmdXNlX3JlYWRkaXJfYWxsb2NfYnVmKHN0cnVjdCBmdXNlX2FyZ3NfcGFnZXMgKmFwLCBzaXplX3QgKmJ1ZnNpemUpXG4tLVxuZnMvZnVzZS9yZWFkZGlyLmMtMzQzLVxuZnMvZnVzZS9yZWFkZGlyLmM6MzQ0Olx0bnJfYWxsb2MgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5yX3BhZ2VzLCBwYWdlcyk7XG5mcy9mdXNlL3JlYWRkaXIuYy0zNDUtXHRpZiAoIW5yX2FsbG9jKVxuLS1cbmZzL25mc2QvbmZzNHN0YXRlLmM9MTMyNj1hbGxvY19pbml0X2Rpcl9kZWxlZyhzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCwgc3RydWN0IG5mczRfZmlsZSAqZnApXG4tLVxuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM3LVxuZnMvbmZzZC9uZnM0c3RhdGUuYzoxMzM4Olx0bnBhZ2VzID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBOT1RJRlk0X1BBR0VfQVJSQVlfU0laRSwgbmNuLVx1MDAzZW5jbl9wYWdlcyk7XG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzktXHRpZiAobnBhZ2VzICE9IE5PVElGWTRfUEFHRV9BUlJBWV9TSVpFKSB7XG4tLVxuZnMvc3BsaWNlLmM9MzE4PXNzaXplX3QgY29weV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcbi0tXG5mcy9zcGxpY2UuYy0zNDEtXHRwYWdlcyA9IChzdHJ1Y3QgcGFnZSAqKikoYnYgJiM0MzsgbnBhZ2VzKTtcbmZzL3NwbGljZS5jOjM0MjpcdG5wYWdlcyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX1VTRVIsIG5wYWdlcywgcGFnZXMpO1xuZnMvc3BsaWNlLmMtMzQzLVx0aWYgKCFucGFnZXMpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIwNz1zdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxMC1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjExOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEyLVx0XHRcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEzLVx0XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE0OiNkZWZpbmUgX19hbGxvY19wYWdlc19idWxrKC4uLilcdFx0XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNS1cbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNy1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE4OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIwLVx0XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIxOiNkZWZpbmUgIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5KC4uLilcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMjpcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyMy1cbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI0LS8qIEJ1bGsgYWxsb2NhdGUgb3JkZXItMCBwYWdlcyAqL1xuaW5jbHVkZS9saW51eC9nZnAuaDoyMjU6I2RlZmluZSBhbGxvY19wYWdlc19idWxrKF9nZnAsIF9ucl9wYWdlcywgX3BhZ2VfYXJyYXkpXHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyNjpcdF9fYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBudW1hX21lbV9pZCgpLCBOVUxMLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjctXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIyOD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI5OmFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzAtXHRcdFx0XHQgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzQtXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzNTpcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgTlVMTCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuaW5jbHVkZS9saW51eC9nZnAuaC0yMzYtfVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzctXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzODojZGVmaW5lIGFsbG9jX3BhZ2VzX2J1bGtfbm9kZSguLi4pXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMzk6XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjQwLVxuLS1cbmlvX3VyaW5nL21lbW1hcC5jPTE3ND1zdGF0aWMgaW50IGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlcyhzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmMtMTkyLVxuaW9fdXJpbmcvbWVtbWFwLmM6MTkzOlx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgTlVNQV9OT19OT0RFLFxuaW9fdXJpbmcvbWVtbWFwLmMtMTk0LVx0XHRcdFx0XHQgICAgIG1yLVx1MDAzZW5yX3BhZ2VzLCBwYWdlcyk7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTY2OD1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTczMi1cbmtlcm5lbC9icGYvYXJlbmEuYzo3MzM6XHRcdC8qIHplcm9pbmcgaXMgbmVlZGVkLCBzaW5jZSBhbGxvY19wYWdlc19idWxrKCkgb25seSBmaWxscyBpbiBub24temVybyBlbnRyaWVzICovXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzM0LVx0XHRtZW1zZXQocGFnZXMsIDAsIHRoaXNfYmF0Y2ggKiBzaXplb2Yoc3RydWN0IHBhZ2UgKikpO1xuLS1cbmxpYi90ZXN0X3ZtYWxsb2MuYz0zOTE9dm1fbWFwX3JhbV90ZXN0KHZvaWQpXG4tLVxubGliL3Rlc3Rfdm1hbGxvYy5jLTQwMy1cbmxpYi90ZXN0X3ZtYWxsb2MuYzo0MDQ6XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG1hcF9ucl9wYWdlcywgcGFnZXMpO1xubGliL3Rlc3Rfdm1hbGxvYy5jLTQwNS1cdGlmIChucl9hbGxvY2F0ZWQgIT0gbWFwX25yX3BhZ2VzKVxuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jPTUxPXN0YXRpYyB2b2lkICpfX2luaXQgaW92X2t1bml0X2NyZWF0ZV9idWZmZXIoc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTY2LVx0XHRsYXN0ID0gZ290O1xubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6Njc6XHRcdGdvdCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnBhZ2VzLCBwYWdlcyk7XG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy02OC1cbi0tXG5tbS9hbGxvY190YWcuYz03Nzc9c3RhdGljIGludCB2bV9tb2R1bGVfdGFnc19wb3B1bGF0ZSh2b2lkKVxuLS1cbm1tL2FsbG9jX3RhZy5jLTc5My1cbm1tL2FsbG9jX3RhZy5jOjc5NDpcdFx0XHRhbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vZGUoR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTixcbm1tL2FsbG9jX3RhZy5jLTc5NS1cdFx0XHRcdE5VTUFfTk9fTk9ERSwgbW9yZV9wYWdlcyAtIG5yLCBuZXh0X3BhZ2UgJiM0MzsgbnIpO1xuLS1cbm1tL2thc2FuL3NoYWRvdy5jPTMyNz1zdGF0aWMgdm9pZCBfX19mcmVlX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL2thc2FuL3NoYWRvdy5jLTMzOC1cbm1tL2thc2FuL3NoYWRvdy5jOjMzOTpzdGF0aWMgaW50IF9fX2FsbG9jX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG5yX3BhZ2VzLCBnZnBfdCBnZnBfbWFzaylcbm1tL2thc2FuL3NoYWRvdy5jLTM0MC17XG4tLVxubW0va2FzYW4vc2hhZG93LmMtMzQ0LVx0d2hpbGUgKG5yX3BhZ2VzKSB7XG5tbS9rYXNhbi9zaGFkb3cuYzozNDU6XHRcdG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoZ2ZwX21hc2ssIG5yX3BhZ2VzLCBwYWdlcyk7XG5tbS9rYXNhbi9zaGFkb3cuYy0zNDYtXHRcdGlmICghbnJfcG9wdWxhdGVkKSB7XG4tLVxubW0va2FzYW4vc2hhZG93LmM9MzU3PXN0YXRpYyBpbnQgX19rYXNhbl9wb3B1bGF0ZV92bWFsbG9jX2RvKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9rYXNhbi9zaGFkb3cuYy0zNjktXHRcdG5yX3BhZ2VzID0gbWluKG5yX3RvdGFsLCBQQUdFX1NJWkUgLyBzaXplb2YoZGF0YS5wYWdlc1swXSkpO1xubW0va2FzYW4vc2hhZG93LmM6MzcwOlx0XHRyZXQgPSBfX19hbGxvY19wYWdlc19idWxrKGRhdGEucGFnZXMsIG5yX3BhZ2VzLCBnZnBfbWFzayk7XG5tbS9rYXNhbi9zaGFkb3cuYy0zNzEtXHRcdGlmIChyZXQpXG4tLVxubW0vbWVtcG9saWN5LmM9MjU4OT1FWFBPUlRfU1lNQk9MKGZvbGlvX2FsbG9jX25vcHJvZik7XG5tbS9tZW1wb2xpY3kuYy0yNTkwLVxubW0vbWVtcG9saWN5LmM6MjU5MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjU5Mi1cdFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2MDctXHRcdGlmIChkZWx0YSkge1xubW0vbWVtcG9saWN5LmM6MjYwODpcdFx0XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjA5LVx0XHRcdFx0XHRpbnRlcmxlYXZlX25vZGVzKHBvbCksIE5VTEwsXG4tLVxubW0vbWVtcG9saWN5LmMtMjYxMy1cdFx0fSBlbHNlIHtcbm1tL21lbXBvbGljeS5jOjI2MTQ6XHRcdFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjYxNS1cdFx0XHRcdFx0aW50ZXJsZWF2ZV9ub2Rlcyhwb2wpLCBOVUxMLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2MjUtXG5tbS9tZW1wb2xpY3kuYzoyNjI2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjI3LVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtcG9saWN5LmMtMjY2NC1cdFx0bm9kZV9wYWdlcyA9IG1pbihyZW1fcGFnZXMsIHdlaWdodCk7XG5tbS9tZW1wb2xpY3kuYzoyNjY1Olx0XHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxubW0vbWVtcG9saWN5LmMtMjY2Ni1cdFx0XHRcdFx0XHQgIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3MDEtXHQvKlxubW0vbWVtcG9saWN5LmM6MjcwMjpcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxubW0vbWVtcG9saWN5LmMtMjcwMy1cdCAqIFRyYWNrIHdoaWNoIG5vZGUgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBzaG91bGQgcmVzdW1lIGZyb20uXG4tLVxubW0vbWVtcG9saWN5LmMtMjcyOS1cdFx0XHRicmVhaztcbm1tL21lbXBvbGljeS5jOjI3MzA6XHRcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXG5tbS9tZW1wb2xpY3kuYy0yNzMxLVx0XHRcdFx0XHRcdCAgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc0My1cbm1tL21lbXBvbGljeS5jOjI3NDQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnBfdCBnZnAsIGludCBuaWQsXG5tbS9tZW1wb2xpY3kuYy0yNzQ1LVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtcG9saWN5LmMtMjc1My1cbm1tL21lbXBvbGljeS5jOjI3NTQ6XHRucl9hbGxvY2F0ZWQgID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YocHJlZmVycmVkX2dmcCwgbmlkLCBcdTAwMjZwb2wtXHUwMDNlbm9kZXMsXG5tbS9tZW1wb2xpY3kuYy0yNzU1LVx0XHRcdFx0XHQgICBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc1Ny1cdGlmIChucl9hbGxvY2F0ZWQgXHUwMDNjIG5yX3BhZ2VzKVxubW0vbWVtcG9saWN5LmM6Mjc1ODpcdFx0bnJfYWxsb2NhdGVkICYjNDM7PSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG51bWFfbm9kZV9pZCgpLCBOVUxMLFxubW0vbWVtcG9saWN5LmMtMjc1OS1cdFx0XHRcdG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkLFxuLS1cbm1tL21lbXBvbGljeS5jLTI3NjktICovXG5tbS9tZW1wb2xpY3kuYzoyNzcwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbm1tL21lbXBvbGljeS5jLTI3NzEtXHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzgwLVx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfSU5URVJMRUFWRSlcbm1tL21lbXBvbGljeS5jOjI3ODE6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwLCBwb2wsXG5tbS9tZW1wb2xpY3kuYy0yNzgyLVx0XHRcdFx0XHRcdFx0IG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzg0LVx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSlcbm1tL21lbXBvbGljeS5jOjI3ODU6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoXG5tbS9tZW1wb2xpY3kuYy0yNzg2LVx0XHRcdFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3ODgtXHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9QUkVGRVJSRURfTUFOWSlcbm1tL21lbXBvbGljeS5jOjI3ODk6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcCxcbm1tL21lbXBvbGljeS5jLTI3OTAtXHRcdFx0XHRudW1hX25vZGVfaWQoKSwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc5My1cdG5vZGVtYXNrID0gcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sLCBOT19JTlRFUkxFQVZFX0lOREVYLCBcdTAwMjZuaWQpO1xubW0vbWVtcG9saWN5LmM6Mjc5NDpcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgbm9kZW1hc2ssXG5tbS9tZW1wb2xpY3kuYy0yNzk1LVx0XHRcdFx0ICAgICAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTA5MT1zdGF0aWMgaW5saW5lIGJvb2wgcHJlcGFyZV9hbGxvY19wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MTM5LS8qXG5tbS9wYWdlX2FsbG9jLmM6NTE0MDogKiBfX2FsbG9jX3BhZ2VzX2J1bGsgLSBBbGxvY2F0ZSBhIG51bWJlciBvZiBvcmRlci0wIHBhZ2VzIHRvIGFuIGFycmF5XG5tbS9wYWdlX2FsbG9jLmMtNTE0MS0gKiBAZ2ZwOiBHRlAgZmxhZ3MgZm9yIHRoZSBhbGxvY2F0aW9uXG4tLVxubW0vcGFnZV9hbGxvYy5jLTUxNTktICovXG5tbS9wYWdlX2FsbG9jLmM6NTE2MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG5tbS9wYWdlX2FsbG9jLmMtNTE2MS1cdFx0XHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MzAwLX1cbm1tL3BhZ2VfYWxsb2MuYzo1MzAxOkVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcbm1tL3BhZ2VfYWxsb2MuYy01MzAyLVxuLS1cbm1tL3NsdWIuYz03NDI2PXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtNzQ3MC0gKlxubW0vc2x1Yi5jOjc0NzE6ICogVW5saWtlIGFsbG9jX3BhZ2VzX2J1bGsoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayBmb3IgYWxyZWFkeSBhbGxvY2F0ZWRcbm1tL3NsdWIuYy03NDcyLSAqIG9iamVjdHMgaW4gQHAsIGFuZCB0aHVzIHRoZSBjYWxsZXIgZG9lcyBub3QgbmVlZCB0byB6ZXJvIGl0LlxuLS1cbm1tL3ZtYWxsb2MuYz0zNjc2PXZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxuLS1cbm1tL3ZtYWxsb2MuYy0zNzQzLVx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSBcdTAwMjZcdTAwMjYgbmlkID09IE5VTUFfTk9fTk9ERSlcbm1tL3ZtYWxsb2MuYzozNzQ0Olx0XHRcdFx0bnIgPSBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwLFxubW0vdm1hbGxvYy5jLTM3NDUtXHRcdFx0XHRcdFx0XHRucl9wYWdlc19yZXF1ZXN0LFxuLS1cbm1tL3ZtYWxsb2MuYy0zNzQ3LVx0XHRcdGVsc2Vcbm1tL3ZtYWxsb2MuYzozNzQ4Olx0XHRcdFx0bnIgPSBhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcCwgbmlkLFxubW0vdm1hbGxvYy5jLTM3NDktXHRcdFx0XHRcdFx0XHRucl9wYWdlc19yZXF1ZXN0LFxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTYxMT1zdGF0aWMgbm9pbmxpbmUgbmV0bWVtX3JlZiBfX3BhZ2VfcG9vbF9hbGxvY19uZXRtZW1zX3Nsb3coc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzMtXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2MzQ6XHQvKiBNYXJrIGVtcHR5IGFsbG9jLmNhY2hlIHNsb3RzIFwmIzM0O2VtcHR5XCYjMzQ7IGZvciBhbGxvY19wYWdlc19idWxrICovXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzUtXHRtZW1zZXQoXHUwMDI2cG9vbC1cdTAwM2VhbGxvYy5jYWNoZSwgMCwgc2l6ZW9mKHZvaWQgKikgKiBidWxrKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNi1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjYzNzpcdG5yX3BhZ2VzID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgcG9vbC1cdTAwM2VwLm5pZCwgYnVsayxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzOC1cdFx0XHRcdFx0IChzdHJ1Y3QgcGFnZSAqKilwb29sLVx1MDAzZWFsbG9jLmNhY2hlKTtcbi0tXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9Njg3PXN0YXRpYyBib29sIHN2Y19maWxsX3BhZ2VzKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBwYWdlICoqcGFnZXMsXG4tLVxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5Mi1cdGZvciAoZmlsbGVkID0gMDsgZmlsbGVkIFx1MDAzYyBucGFnZXM7IGZpbGxlZCA9IHJldCkge1xubmV0L3N1bnJwYy9zdmNfeHBydC5jOjY5MzpcdFx0cmV0ID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucGFnZXMsIHBhZ2VzKTtcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy02OTQtXHRcdGlmIChyZXQgXHUwMDNlIGZpbGxlZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyNzgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBhbmQgaXRzIEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgd2hlcmUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyB1c2VkLiBWbWFsbG9jLCBzcGxpY2Ugc3lzY2FsbHMsIGJ0cmZzLCBmdXNlLCBpb191cmluZywgQlBGIGFyZW5hcywgbmV0d29ya2luZy4uLiBpdCYjMzk7cyBhICpsb3QqIG9mIGNvcmUgZnVuY3Rpb25hbGl0eS4gVGhhdCYjMzk7cyBhIHdpZGUgcmFuZ2Ugb2YgdXNlIGNhc2VzLCBhbmQgdGhhdCBkZWZpbml0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4KClNvLCB0aGUgaXNzdWUgdGhpcyBwYXRjaCBhZGRyZXNzZXMuLi4gcmlnaHQsIGl0JiMzOTtzIGluIGhvdyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGhhbmRsZXMgR0ZQIGZsYWdzLiBTcGVjaWZpY2FsbHk6CgpgYGBjCgkvKiBNYXkgc2V0IEFMTE9DX05PRlJBR01FTlQsIGZyYWdtZW50YXRpb24gd2lsbCByZXR1cm4gMSBwYWdlLiAqLwoJZ2ZwICZhbXA7PSBnZnBfYWxsb3dlZF9tYXNrOwoJZ2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApOwoJaWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssICZhbXA7YWMsICZhbXA7Z2ZwLCAmYW1wO2FsbG9jX2ZsYWdzKSkKCQlnb3RvIG91dDsKYGBgCgpJdCBsb29rcyBsaWtlIGlmIHdlJiMzOTtyZSB1bmRlciBhIHByb3RlY3Rpb24gc2NvcGUgbGlrZSBgbWVtYWxsb2Nfbm9pb19zYXZlKClgIChQRl9NRU1BTExPQ19OT0lPKSBvciBgbWVtYWxsb2Nfbm9mc19zYXZlKClgIChQRl9NRU1BTExPQ19OT0ZTKSB0aGlzIHJvdXRpbmUgKmlnbm9yZWQqIHRoZSB0YXNrJiMzOTtzIGN1cnJlbnQgR0ZQIGNvbnRleHQuIFRoYXQmIzM5O3MgYmFkLiBSZWFsbHkgYmFkLiBCZWNhdXNlIHRoZSBjb25zZXF1ZW5jZXMgY291bGQgYmUgSS9PIG9yIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBoYXBwZW5pbmcgd2hlbiB0aGV5IHNob3VsZG4mIzM5O3Qg4oCTIGR1cmluZyByZWNsYWltIG9yLCBldmVuIHdvcnNlLCB0cmlnZ2VyaW5nIGRlYWRsb2NrcyBvciBsb2NrZGVwIGFzc2VydGlvbnMuIFRob3NlIGFyZSAqbmFzdHkqIGJ1Z3MgdG8gdHJhY2sgZG93bi4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHByZXBhcmVfYWxsb2NfcGFnZXNgIGRvZXMgdG8gcHJvcGVybHkgYXBwcmVjaWF0ZSB0aGUgY2hhbmdlLiBTbywgSSBzaG91bGQgZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSBob3cgaXQgaXMgYWZmZWN0ZWQgYnkgdGhlIHByb3ZpZGVkIGdmcCB2YWx1ZS4gT2theSwgbGV0JiMzOTtzIHNlZSB3aGF0IGBwcmVwYXJlX2FsbG9jX3BhZ2VzYCBpcyBkb2luZy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmVwYXJlX2FsbG9jX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYz00Nzg0PV9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTA5MC1cbm1tL3BhZ2VfYWxsb2MuYzo1MDkxOnN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG5tbS9wYWdlX2FsbG9jLmMtNTA5Mi1cdFx0aW50IHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYz01MTYwPXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTIxMC1cdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcbm1tL3BhZ2VfYWxsb2MuYzo1MjExOlx0aWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFx1MDAyNmFjLCBcdTAwMjZnZnAsIFx1MDAyNmFsbG9jX2ZsYWdzKSlcbm1tL3BhZ2VfYWxsb2MuYy01MjEyLVx0XHRnb3RvIG91dDtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTM4ND1zdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01NDIxLVx0YWxsb2NfZ2ZwID0gZ2ZwO1xubW0vcGFnZV9hbGxvYy5jOjU0MjI6XHRpZiAoIXByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwLCBvcmRlciwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFx1MDAyNmFjLFxubW0vcGFnZV9hbGxvYy5jLTU0MjMtXHRcdFx0XHUwMDI2YWxsb2NfZ2ZwLCBcdTAwMjZmYXN0cGF0aF9hbGxvY19mbGFncykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTAzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBGbGFncyBhbmQgQ29udGV4dCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHNwZWNpZmljYWxseSBob3cgYWxsb2NhdGlvbiBmbGFncyBhbmQgY29udGV4dHMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGV4YW1pbmluZyBpcyBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYC4gSSBzZWUgc29tZSBjcml0aWNhbCBjaGVja3MgaGVyZTogaXQmIzM5O3MgZW5zdXJpbmcgdGhlIHJlcXVlc3RlZCBgb3JkZXJgIChmb3IgcGFnZSBhbGxvY2F0aW9uKSBpcyB3aXRoaW4gYm91bmRzLCB3aGljaCBpcyBnb29kIHNhbml0eSBjaGVja2luZy4gSXQmIzM5O3MgdXNpbmcgYGdmcF9hbGxvd2VkX21hc2tgIGFuZCBhcHBseWluZyBzY29wZWQgYWxsb2NhdGlvbiBjb25zdHJhaW50cyB1c2luZyBgY3VycmVudF9nZnBfY29udGV4dChnZnApYC4gIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UgdG8gbWFuYWdlIGhvdyB0aGUgYWxsb2NhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLCBwYXJ0aWN1bGFybHkgYXZvaWRpbmcgcG90ZW50aWFsbHkgZGlzcnVwdGl2ZSBvcGVyYXRpb25zLgoKTmV4dCwgSSYjMzk7bSBjb21wYXJpbmcgdGhlIG9sZCBhbmQgbmV3IGNvZGUgd2l0aGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuICBUaGUgZGlmZmVyZW5jZSBhcHBlYXJzIHRvIGJlIHN1YnRsZSBidXQgc2lnbmlmaWNhbnQuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgYGdmcGAgZmxhZywgYWZ0ZXIgbWFza2luZyB3aXRoIGBnZnBfYWxsb3dlZF9tYXNrYCB3YXMgcGFzc2VkIGRpcmVjdGx5IHRvIGBwcmVwYXJlX2FsbG9jX3BhZ2VzKClgLiBOb3csIGl0IGdvZXMgdGhyb3VnaCBgY3VycmVudF9nZnBfY29udGV4dCgpYCBiZWZvcmUgYmVpbmcgcGFzc2VkLgoKTm93IGl0IGNsaWNrcyEgSSByZWNhbGwgdGhhdCBgYWxsb2NfZmxhZ3NfY21hYCBoYXMgYSBjb21tZW50IHRoYXQgaXMgY3J1Y2lhbCBoZXJlOiBJdCBleHBsaWNpdGx5IHN0YXRlcyB0aGF0IGl0IG11c3QgYmUgY2FsbGVkICphZnRlciogYGN1cnJlbnRfZ2ZwX2NvbnRleHQoKWAuIFRoYXQmIzM5O3MgdGhlIGtleS4gIGBjdXJyZW50X2dmcF9jb250ZXh0KClgIG1vZGlmaWVzIHRoZSBgZ2ZwX21hc2tgLCB3aGljaCBjYW4gaW1wYWN0IHRoZSBiZWhhdmlvciBvZiB0aGUgYWxsb2NhdG9yLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIGNvcnJlY3RseSBtb3ZpbmcgdGhlIGNhbGwgdG8gYGN1cnJlbnRfZ2ZwX2NvbnRleHQoKWAgYmVmb3JlIHRoZSBjYWxsIHRvIGBwcmVwYXJlX2FsbG9jX3BhZ2VzKClgLiBUaGlzIHNlcXVlbmNlIGlzIGNyaXRpY2FsLCBiZWNhdXNlIGl0IGVuc3VyZXMgdGhhdCBgYWxsb2NfZmxhZ3NfY21hYCBmdW5jdGlvbnMgY29ycmVjdGx5IHdpdGggdGhlIGFkanVzdGVkIGBnZnBfbWFza2AgcmVzdWx0aW5nIGZyb20gdGhlIGNvbnRleHQgYXBwbGljYXRpb24uIFRoaXMgaXMgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBjaGFuZ2UgdG8gZW5zdXJlIHByb3BlciBhbGxvY2F0aW9uIGJlaGF2aW9yLCBlc3BlY2lhbGx5IHdoZW4gd29ya2luZyB3aXRoIENNQSAoQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yKSBhbmQgb3RoZXIgY29udGV4dHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX2ZsYWdzX2NtYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmM9Mzc1Mj1hbGxvY19mbGFnc19ub2ZyYWdtZW50KHN0cnVjdCB6b25lICp6b25lLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMzc4NS0vKiBNdXN0IGJlIGNhbGxlZCBhZnRlciBjdXJyZW50X2dmcF9jb250ZXh0KCkgd2hpY2ggY2FuIGNoYW5nZSBnZnBfbWFzayAqL1xubW0vcGFnZV9hbGxvYy5jOjM3ODY6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3NfY21hKGdmcF90IGdmcF9tYXNrKVxubW0vcGFnZV9hbGxvYy5jLTM3ODcte1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz00NTUxPWFsbG9jX2ZsYWdzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ1NzgtXG5tbS9wYWdlX2FsbG9jLmM6NDU3OTpcdGFsbG9jX2ZsYWdzIHw9IGFsbG9jX2ZsYWdzX2NtYShnZnBfbWFzayk7XG5tbS9wYWdlX2FsbG9jLmMtNDU4MC1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDc4ND1fX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ4ODktXHRpZiAocmVzZXJ2ZV9mbGFncylcbm1tL3BhZ2VfYWxsb2MuYzo0ODkwOlx0XHRhbGxvY19mbGFncyA9IGFsbG9jX2ZsYWdzX2NtYShnZnBfbWFzaykgfCByZXNlcnZlX2ZsYWdzIHxcbm1tL3BhZ2VfYWxsb2MuYy00ODkxLVx0XHRcdFx0YWMtXHUwMDNlYWxsb2NfZmxhZ3MgfCAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX0tTV0FQRCk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTUwOTE9c3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTEyMi1cbm1tL3BhZ2VfYWxsb2MuYzo1MTIzOlx0KmFsbG9jX2ZsYWdzIHw9IGFsbG9jX2ZsYWdzX2NtYShnZnBfbWFzayk7XG5tbS9wYWdlX2FsbG9jLmMtNTEyNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4OTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IEFsbG9jYXRpb24gQnVnKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gY29kZSBhbmQgc29tZXRoaW5nIGp1c3QganVtcGVkIG91dCBhdCBtZS4gSSYjMzk7bSBsb29raW5nIHNwZWNpZmljYWxseSBhdCBsaW5lIDM3ODUsIHdoaWNoIGlzIHRoaXMgY29tbWVudDogYC8qIE11c3QgYmUgY2FsbGVkIGFmdGVyIGN1cnJlbnRfZ2ZwX2NvbnRleHQoKSB3aGljaCBjYW4gY2hhbmdlIGdmcF9tYXNrICovYC4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnIGltbWVkaWF0ZWx5LiBUaGVuIEkgc2VlIHRoYXQgYHByZXBhcmVfYWxsb2NfcGFnZXNgIGlzIGNhbGxpbmcgYGFsbG9jX2ZsYWdzX2NtYShnZnBfbWFzaylgLiBNeSBjb25jZXJuIGlzIHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCAqdXNlZCogdG8gY2FsbCBgcHJlcGFyZV9hbGxvY19wYWdlc2Agd2l0aG91dCBhIGNhbGwgdG8gYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIGJlZm9yZWhhbmQhIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgcmVjaXBlIGZvciBkaXNhc3Rlci4gYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIGNvdWxkIGJlIG1vZGlmeWluZyB0aGF0IGdmcF9tYXNrLCBhbmQgaWYgd2UmIzM5O3JlIGNhbGxpbmcgYGFsbG9jX2ZsYWdzX2NtYWAgd2l0aCBhIHN0YWxlIG1hc2ssIHdlJiMzOTtyZSBsaWtlbHkgdG8gaGF2ZSBhIHZlcnkgYmFkIHRpbWUuIFRoaXMgbmVlZHMgZnVydGhlciBzY3J1dGlueS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgYWxsb2NfZmxhZ3NfY21hYCBpcyBkb2luZyB3aXRoIHRoYXQgYGdmcF9tYXNrYC4uLiBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHNlZSB3aGF0IGl0IGlzIGFjdHVhbGx5IG1hbmlwdWxhdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM3ODA6XHRcdGFsbG9jX2ZsYWdzIHw9IEFMTE9DX05PRlJBR01FTlQ7XG4zNzgxOlx0I2VuZGlmIC8qIENPTkZJR19aT05FX0RNQTMyICovXG4zNzgyOlx0XHRyZXR1cm4gYWxsb2NfZmxhZ3M7XG4zNzgzOlx0fVxuMzc4NDpcdFxuMzc4NTpcdC8qIE11c3QgYmUgY2FsbGVkIGFmdGVyIGN1cnJlbnRfZ2ZwX2NvbnRleHQoKSB3aGljaCBjYW4gY2hhbmdlIGdmcF9tYXNrICovXG4zNzg2Olx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3NfY21hKGdmcF90IGdmcF9tYXNrKVxuMzc4NzpcdHtcbjM3ODg6XHQjaWZkZWYgQ09ORklHX0NNQVxuMzc4OTpcdFx0aWYgKGdmcF9taWdyYXRldHlwZShnZnBfbWFzaykgPT0gTUlHUkFURV9NT1ZBQkxFKVxuMzc5MDpcdFx0XHRyZXR1cm4gQUxMT0NfQ01BO1xuMzc5MTpcdCNlbmRpZlxuMzc5MjpcdFx0cmV0dXJuIEFMTE9DX0RFRkFVTFQ7XG4zNzkzOlx0fVxuMzc5NDpcdFxuMzc5NTpcdC8qXG4zNzk2Olx0ICogZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdCBnb2VzIHRocm91Z2ggdGhlIHpvbmVsaXN0IHRyeWluZyB0byBhbGxvY2F0ZVxuMzc5NzpcdCAqIGEgcGFnZS5cbjM3OTg6XHQgKi9cbjM3OTk6XHRzdGF0aWMgc3RydWN0IHBhZ2UgKlxuMzgwMDpcdGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwgaW50IGFsbG9jX2ZsYWdzLFxuMzgwMTpcdFx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYylcbjM4MDI6XHR7XG4zODAzOlx0XHRzdHJ1Y3Qgem9uZXJlZiAqejtcbjM4MDQ6XHRcdHN0cnVjdCB6b25lICp6b25lO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjY1MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDc1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRvaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZyB3aXRoIGBQRl9NRU1BTExPQ19QSU5gLCB3aGljaCBsb29rcyBsaWtlIGl0IGFmZmVjdHMgdGhlIGBnZnBfbWlncmF0ZXR5cGVgIHRocm91Z2ggdGhlIGdmcCBtYXNrLiBBbmQgaGV5LCBpdCYjMzk7cyBhbHNvIHR3ZWFraW5nIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAhIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHNuaXBwZXQgaW52b2x2aW5nIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgYW5kIHRoZSB6b25lIGl0ZXJhdGlvbi4gVGhpcyBpcyBhbGwgaW4gYG1tL3BhZ2VfYWxsb2MuY2AsIHNvIHdlIGFyZSB0YWxraW5nIGFib3V0IGEgKmNvcmUgc3Vic3lzdGVtKiBoZXJlOiBtZW1vcnkgbWFuYWdlbWVudC4KClJpZ2h0LCBzbyBhY2NvcmRpbmcgdG8gdGhlIHRyaWFnZSBndWlkZWxpbmVzLCB3ZSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHdhcnJhbnRzIGZ1enppbmcuIExldCYjMzk7cyBzZWUuLi4gdGhlIGNvcmUgdHJpYWdlIHBoaWxvc29waHkgcHJpb3JpdGl6ZXMgcmVhY2hhYmlsaXR5LCBhbmQgd2Ugb25seSAqYXZvaWQqIGZ1enppbmcgZm9yIHN0cmljdGx5IHVucmVhY2hhYmxlIGNvZGUuIEFsc28sIHJlZmFjdG9yaW5nIGFuZCBjbGVhbnVwcyB3aGljaCBhcmUgcmVhY2hhYmxlIHNob3VsZCBiZSBjb25zaWRlcmVkLiBOb3csIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBhcmUgcHJldHR5IGNsZWFyOiBub24ta2VybmVsIHN0dWZmLCB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgb3IgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgdGhhdCBkb2VzbiYjMzk7dCBhcHBseS4gVGhpcyBwYXRjaCBkZWZpbml0ZWx5IGRvZXNuJiMzOTt0IGZhbGwgaW50byBhbnkgb2YgdGhvc2UgY2F0ZWdvcmllcy4gSXQmIzM5O3MgbW9kaWZ5aW5nIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgd2hpY2ggaXMgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgYW5kIGlzIGEgY29yZSBzdWJzeXN0ZW0gYW5kIHJlYWNoYWJsZSwgc28gaXQmIzM5O3MgYSBydW50aW1lIGJlaGF2aW9yIGNoYW5nZSB0aGF0IGNvdWxkIGRlZmluaXRlbHkgYmUgdHJpZ2dlcmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGluIG1lbW9yeSBtYW5hZ2VtZW50LgoKVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBNVVNUIGJlIGB0cnVlYC4gTm8gcXVlc3Rpb24gYWJvdXQgdGhhdC4KCk5vdywgd2UgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpY3MuIERvZXMgdGhpcyBtb2RpZmljYXRpb24gaGF2ZSBhbnkgc3BlY2lmaWMgYENPTkZJR19gIHJlcXVpcmVtZW50cz8gV2UgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGBFbmFibGVDb25maWdzYC4gQW5kIGFyZSB0aGVyZSBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0byBmb2N1cyBmdXp6aW5nIG9uLCBmb3IgYEZvY3VzU3ltYm9sc2A/IExldCYjMzk7cyBjaGVjayBgbW0vcGFnZV9hbGxvYy5jYCB0byBzZWUgaWYgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyB1bmRlciBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIGxpa2UgI2lmZGVmcy4gSSYjMzk7bGwgZm9jdXMgYXJvdW5kIGxpbmUgNTE2MC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUxNTA6XHQgKiBOb3RlIHRoYXQgb25seSB0aGUgZWxlbWVudHMgaW4gQHBhZ2VfYXJyYXkgdGhhdCB3ZXJlIGNsZWFyZWQgdG8gJU5VTEwgb25cbjUxNTE6XHQgKiBlbnRyeSBhcmUgcG9wdWxhdGVkIHdpdGggbmV3bHkgYWxsb2NhdGVkIHBhZ2VzLiBAbnJfcGFnZXMgaXMgdGhlIG1heGltdW1cbjUxNTI6XHQgKiBudW1iZXIgb2YgcGFnZXMgdGhhdCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgYXJyYXkuXG41MTUzOlx0ICpcbjUxNTQ6XHQgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gQHBhZ2VfYXJyYXksIGluY2x1ZGluZyBvbmVzIGFscmVhZHlcbjUxNTU6XHQgKiBhbGxvY2F0ZWQgb24gZW50cnkuICBUaGlzIGNhbiBiZSBsZXNzIHRoYW4gdGhlIG51bWJlciByZXF1ZXN0ZWQgaW4gQG5yX3BhZ2VzLFxuNTE1NjpcdCAqIGJ1dCBhbGwgZW1wdHkgc2xvdHMgYXJlIGZpbGxlZCBmcm9tIHRoZSBiZWdpbm5pbmcuICBJLmUuLCBpZiBhbGwgc2xvdHMgaW5cbjUxNTc6XHQgKiBAcGFnZV9hcnJheSB3ZXJlIHNldCB0byAlTlVMTCBvbiBlbnRyeSwgdGhlIHNsb3RzIGZyb20gMCB0byB0aGUgcmV0dXJuIHZhbHVlXG41MTU4Olx0ICogLSAxIHdpbGwgYmUgZmlsbGVkLlxuNTE1OTpcdCAqL1xuNTE2MDpcdHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbjUxNjE6XHRcdFx0XHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxuNTE2MjpcdFx0XHRcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcbjUxNjM6XHR7XG41MTY0Olx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjUxNjU6XHRcdHN0cnVjdCB6b25lICp6b25lO1xuNTE2NjpcdFx0c3RydWN0IHpvbmVyZWYgKno7XG41MTY3Olx0XHRzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwO1xuNTE2ODpcdFx0c3RydWN0IGxpc3RfaGVhZCAqcGNwX2xpc3Q7XG41MTY5Olx0XHRzdHJ1Y3QgYWxsb2NfY29udGV4dCBhYztcbjUxNzA6XHRcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncyA9IEFMTE9DX1dNQVJLX0xPVztcbjUxNzE6XHRcdGludCBucl9wb3B1bGF0ZWQgPSAwLCBucl9hY2NvdW50ID0gMDtcbjUxNzI6XHRcbjUxNzM6XHRcdC8qXG41MTc0Olx0XHQgKiBTa2lwIHBvcHVsYXRlZCBhcnJheSBlbGVtZW50cyB0byBkZXRlcm1pbmUgaWYgYW55IHBhZ2VzIG5lZWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzMDUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMTgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGZvciBGdXp6aW5nIEZvY3VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gcXVpY2tseSBhc3N1bWUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyBhIHN0YW5kYXJkLCB1bmNvbmRpdGlvbmFsbHkgY29tcGlsZWQgZnVuY3Rpb24sIGJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgc3RhcnRlZCBieSBjaGVja2luZyBmb3IgcmVsZXZhbnQgY29uZmlncyBsaWtlIGBhbGxvY19mbGFnc19jbWFgLCBgY3VycmVudF9nZnBfY29udGV4dGAsIGFuZCBgYWxsb2NfcGFnZXNfYnVsa2AsIGJ1dCByZW1lbWJlcmVkIHRoZSBpbnN0cnVjdGlvbnM6IGluc3BlY3QgS2NvbmZpZyBmaWxlcywgY2hlY2sgYGRlcGVuZHMgb25gIGxpbmVzLCBhbmQgc3RyaXAgdGhlIGBDT05GSUdfYCBwcmVmaXguIGBDT05GSUdfQ01BYCBpcyByZWxhdGVkLCBidXQgdGhlIGluc3RydWN0aW9ucyBzYXkgaXQgaXNuJiMzOTt0IHJlcXVpcmVkIHRvIGNvbXBpbGUgb3IgcnVuLiBUaGUgZnVuY3Rpb24gaXRzZWxmIGFwcGVhcnMgdG8gYmUgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gTm8gc3BlY2lhbCBjb25maWdzIHJlcXVpcmVkLiBUaGF0JiMzOTtzIGdvb2QuCgpIb3dldmVyLCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBjYWxsIHNpdGVzIGlzIG1hbmRhdG9yeS4gSSB0aGVuIHBhdXNlZCBhbmQgdGhvdWdodCBhYm91dCB3aGF0IHRoZSBmdXp6aW5nIGluc3RydWN0aW9ucyBzYXkuICYjMzQ7QXZvaWQgdWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzJiMzNDsgaXMgdGhlIGtleS4gTm8gZ2VuZXJpYyBhbGxvY2F0b3JzLiBTbywgaXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBhIGdlbmVyaWMgYWxsb2NhdG9yPyBJIGhhZCB0byB0aGluayBhYm91dCB0aGF0LCBhbmQgdGhlbiByZW1lbWJlciB0aGUgZGVmaW5pdGlvbiBmcm9tIHRoZSBpbnN0cnVjdGlvbnM6ICYjMzQ7ZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzLi4uJiMzNDsuIE9rYXksIHRoYXQmIzM5O3Mgbm90IHRydWUhIEkgaGF2ZSB0byBmaW5kIG91dCB3aGljaCBwcm9ncmFtcyBjYWxsIGl0LgoKQSBxdWljayBgZ3JlcGAgcmV2ZWFsZWQgdGhhdCB0aGlzIGZ1bmN0aW9uIGhhcyBhICpsaW1pdGVkKiBudW1iZXIgb2YgY2FsbGVyczogYGJsa19jcnlwdG9fYWxsb2NfZW5jX2Jpb2AsIGBmd19pc29fYnVmZmVyX2FsbG9jYCwgYGFyX2NvbnRleHRfaW5pdGAsIGBhbGxvY19wcml2YXRlX3BhZ2VzYCwgYG1seDV2Zl9hZGRfcGFnZXNgLCBgdmlydGlvdmZfYWRkX21pZ3JhdGlvbl9wYWdlc2AsIGBidHJmc19hbGxvY19wYWdlX2FycmF5YCwgYHpfZXJvZnNfZ2J1Zl9ncm93c2l6ZWAsIGBmdXNlX3JlYWRkaXJfYWxsb2NfYnVmYCwgYGFsbG9jX2luaXRfZGlyX2RlbGVnYCwgYGNvcHlfc3BsaWNlX3JlYWRgLCBgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzYCwgYGFyZW5hX2FsbG9jX3BhZ2VzYCwgYHZtX21vZHVsZV90YWdzX3BvcHVsYXRlYCwgYF9fX2FsbG9jX3BhZ2VzX2J1bGtgLCB0aGVuIGEgbnVtYmVyIG9mIG1lbXBvbGljeS1yZWxhdGVkIGZ1bmN0aW9ucywgYHZtX2FyZWFfYWxsb2NfcGFnZXNgLCBgX19wYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc19zbG93YCwgYW5kIGBzdmNfZmlsbF9wYWdlc2AuIEl0JiMzOTtzIGNsZWFybHkgKm5vdCogY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBrZXJuZWwuCgpOb3csIGEgY3JpdGljYWwgcG9pbnQ6IGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCBjYWxscyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBhbmQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2ZgLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhpcyBmdW5jdGlvbnMgaW4gYG1tL3ZtYWxsb2MuY2AuIEkgc2hvdWxkIGluc3BlY3QgdGhhdCBjb2RlIGFyb3VuZCBsaW5lIDM3NDAuIEkga25vdyB3aGF0IHRvIGRvIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzczMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNzMwOlx0XHRcdFx0LypcbjM3MzE6XHRcdFx0XHQgKiBBIG1heGltdW0gYWxsb3dlZCByZXF1ZXN0IGlzIGhhcmQtY29kZWQgYW5kIGlzIDEwMFxuMzczMjpcdFx0XHRcdCAqIHBhZ2VzIHBlciBjYWxsLiBUaGF0IGlzIGRvbmUgaW4gb3JkZXIgdG8gcHJldmVudCBhXG4zNzMzOlx0XHRcdFx0ICogbG9uZyBwcmVlbXB0aW9uIG9mZiBzY2VuYXJpbyBpbiB0aGUgYnVsay1hbGxvY2F0b3JcbjM3MzQ6XHRcdFx0XHQgKiBzbyB0aGUgcmFuZ2UgaXMgWzE6MTAwXS5cbjM3MzU6XHRcdFx0XHQgKi9cbjM3MzY6XHRcdFx0XHRucl9wYWdlc19yZXF1ZXN0ID0gbWluKDEwMFVMLCBucl9wYWdlcyAtIG5yX2FsbG9jYXRlZCk7XG4zNzM3Olx0XG4zNzM4Olx0XHRcdFx0LyogbWVtb3J5IGFsbG9jYXRpb24gc2hvdWxkIGNvbnNpZGVyIG1lbXBvbGljeSwgd2UgY2FuJiMzOTt0XG4zNzM5Olx0XHRcdFx0ICogd3JvbmdseSB1c2UgbmVhcmVzdCBub2RlIHdoZW4gbmlkID09IE5VTUFfTk9fTk9ERSxcbjM3NDA6XHRcdFx0XHQgKiBvdGhlcndpc2UgbWVtb3J5IG1heSBiZSBhbGxvY2F0ZWQgaW4gb25seSBvbmUgbm9kZSxcbjM3NDE6XHRcdFx0XHQgKiBidXQgbWVtcG9saWN5IHdhbnRzIHRvIGFsbG9jIG1lbW9yeSBieSBpbnRlcmxlYXZpbmcuXG4zNzQyOlx0XHRcdFx0ICovXG4zNzQzOlx0XHRcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFx1MDAyNlx1MDAyNiBuaWQgPT0gTlVNQV9OT19OT0RFKVxuMzc0NDpcdFx0XHRcdFx0bnIgPSBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwLFxuMzc0NTpcdFx0XHRcdFx0XHRcdFx0bnJfcGFnZXNfcmVxdWVzdCxcbjM3NDY6XHRcdFx0XHRcdFx0XHRcdHBhZ2VzICYjNDM7IG5yX2FsbG9jYXRlZCk7XG4zNzQ3Olx0XHRcdFx0ZWxzZVxuMzc0ODpcdFx0XHRcdFx0bnIgPSBhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcCwgbmlkLFxuMzc0OTpcdFx0XHRcdFx0XHRcdFx0bnJfcGFnZXNfcmVxdWVzdCxcbjM3NTA6XHRcdFx0XHRcdFx0XHRcdHBhZ2VzICYjNDM7IG5yX2FsbG9jYXRlZCk7XG4zNzUxOlx0XG4zNzUyOlx0XHRcdFx0Zm9yIChpID0gbnJfYWxsb2NhdGVkOyBpIFx1MDAzYyBucl9hbGxvY2F0ZWQgJiM0MzsgbnI7IGkmIzQzOyYjNDM7KVxuMzc1MzpcdFx0XHRcdFx0bW9kX2xydXZlY19wYWdlX3N0YXRlKHBhZ2VzW2ldLCBOUl9WTUFMTE9DLCAxKTtcbjM3NTQ6XHRcbjM3NTU6XHRcdFx0XHRucl9hbGxvY2F0ZWQgJiM0Mzs9IG5yO1xuMzc1NjpcdFxuMzc1NzpcdFx0XHRcdC8qXG4zNzU4Olx0XHRcdFx0ICogSWYgemVybyBvciBwYWdlcyB3ZXJlIG9idGFpbmVkIHBhcnRseSxcbjM3NTk6XHRcdFx0XHQgKiBmYWxsYmFjayB0byBhIHNpbmdsZSBwYWdlIGFsbG9jYXRvci5cbjM3NjA6XHRcdFx0XHQgKi9cbjM3NjE6XHRcdFx0XHRpZiAobnIgIT0gbnJfcGFnZXNfcmVxdWVzdClcbjM3NjI6XHRcdFx0XHRcdGJyZWFrO1xuMzc2MzpcdFx0XHR9XG4zNzY0Olx0XHR9XG4zNzY1Olx0XG4zNzY2Olx0XHQvKiBIaWdoLW9yZGVyIHBhZ2VzIG9yIGZhbGxiYWNrIHBhdGggaWYgXCYjMzQ7YnVsa1wmIzM0OyBmYWlscy4gKi9cbjM3Njc6XHRcdHdoaWxlIChucl9hbGxvY2F0ZWQgXHUwMDNjIG5yX3BhZ2VzKSB7XG4zNzY4Olx0XHRcdGlmICghKGdmcCBcdTAwMjYgX19HRlBfTk9GQUlMKSBcdTAwMjZcdTAwMjYgZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4zNzY5Olx0XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzIwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBNZW1vcnkgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBgdm1fYXJlYV9hbGxvY19wYWdlc2AgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyB0aGUgcGFnZSBhbGxvY2F0aW9uLCBjYWxsaW5nIGVpdGhlciBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBvciBgYWxsb2NfcGFnZXNfYnVsa19ub2RlX25vcHJvZmAg4oCTIGdvdCBpdC4gQnV0IGhvbGQgb24sIHNvbWV0aGluZyYjMzk7cyBuYWdnaW5nIGF0IG1lLiBEb2VzICpldmVyeSogc2luZ2xlIGB2bWFsbG9jYCBjYWxsIHVsdGltYXRlbHkgZ28gdGhyb3VnaCBgdm1fYXJlYV9hbGxvY19wYWdlc2A/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcXVlc3Rpb24gYWJvdXQgaG93IHRoZSBgdm1hbGxvY2AgcGF0aCBpcyBzdHJ1Y3R1cmVkLCBhbmQgaXQgaGFzIGltcGxpY2F0aW9ucyBmb3IgdW5kZXJzdGFuZGluZyBtZW1vcnkgYWxsb2NhdGlvbiBvdmVyaGVhZCwgZXNwZWNpYWxseSB3aXRoaW4gdGhlIHZtYWxsb2MgYXJlbmEuIExldCBtZSBxdWlja2x5IHRyYWNlIHRoZSBjYWxsZXJzIG9mIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYC4gVGhpcyB3aWxsIHNob3cgbWUgdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbnMgdGhhdCByZWx5IG9uIHRoaXMgdW5kZXJseWluZyBhbGxvY2F0b3IuIFRoYXQgaXMgdGhlIGZpcnN0IHN0ZXAhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtX2FyZWFfYWxsb2NfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jPTM2NzU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nXG5tbS92bWFsbG9jLmM6MzY3Njp2bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcbm1tL3ZtYWxsb2MuYy0zNjc3LVx0XHR1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZXMpXG4tLVxubW0vdm1hbGxvYy5jPTM4NzM9c3RhdGljIHZvaWQgKl9fdm1hbGxvY19hcmVhX25vZGUoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vdm1hbGxvYy5jLTM5MjEtXHQgKi9cbm1tL3ZtYWxsb2MuYzozOTIyOlx0YXJlYS1cdTAwM2Vucl9wYWdlcyA9IHZtX2FyZWFfYWxsb2NfcGFnZXMoXG5tbS92bWFsbG9jLmMtMzkyMy1cdFx0XHR2bWFsbG9jX2dmcF9hZGp1c3QoZ2ZwX21hc2ssIHBhZ2Vfb3JkZXIpLCBub2RlLFxuLS1cbm1tL3ZtYWxsb2MuYy0zOTMxLVx0XHQvKlxubW0vdm1hbGxvYy5jOjM5MzI6XHRcdCAqIHZtX2FyZWFfYWxsb2NfcGFnZXMoKSBjYW4gZmFpbCBkdWUgdG8gaW5zdWZmaWNpZW50IG1lbW9yeSBidXRcbm1tL3ZtYWxsb2MuYy0zOTMzLVx0XHQgKiBhbHNvOi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyNzcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMjcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgYSBGdW5jdGlvbiBmb3IgRnV6emluZyBGb2N1cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIEkgc2hvdWxkIGluY2x1ZGUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpbiB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgdG8gZm9jdXMgdGhlIGZ1enplciBvbi4gRmlyc3QsIEkgbm90aWNlZCB0aGF0IGBfX3ZtYWxsb2NfYXJlYV9ub2RlYCBjYWxscyBgdm1fYXJlYV9hbGxvY19wYWdlc2AsIGFuZCBgdm1hbGxvY2AgY2FsbHMgYF9fdm1hbGxvY19hcmVhX25vZGVgLiBUaGVuLCB0aGlzIHRob3VnaHQgcG9wcGVkIHVwOiBJcyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGl0c2VsZiBhIGNvbW1vbiwgdWJpcXVpdG91cyBmdW5jdGlvbj8gVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiB0aGUgcXVlc3Rpb24uCgpUaGUgaW5zdHJ1Y3Rpb25zIGFyZSB2ZXJ5IGNsZWFyOiBhdm9pZCBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkIGV2ZXJ5d2hlcmUsIGJlY2F1c2UgbGlzdGluZyB0aGVtIGRpbHV0ZXMgdGhlIGZ1enppbmcgZWZmb3J0LiBJbnN0ZWFkLCBJIG5lZWQgdG8gJiMzNDt0YXJnZXQgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnlwb2ludHMmIzM0Oy4gV2FpdCBhIG1pbnV0ZeKApiB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gKmlzKiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgISBUaGUgcGF0Y2ggY2xlYXJseSBzaG93cyB0aGUgY2hhbmdlIGlzIGRpcmVjdGx5IHRvIHRoYXQgZnVuY3Rpb24uCgpUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBoaWdobGlnaHQgdGhhdCB0aGUgZnVuY3Rpb25zIHNob3VsZCBiZSAmIzM0O3Rob3NlIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cyBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4mIzM0OyBTbywgc2luY2UgdGhlIGFsdGVyZWQgbG9naWMgKmlzKiB3aXRoaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCwgbGlzdGluZyBpdCBzZWVtcyBsb2dpY2FsLgoKVGhlIGNvbmNlcm4gd2l0aCAmIzM0O3ViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRocyYjMzQ7IGlzIHRoYXQgbGlzdGluZyB0aG9zZSBmdW5jdGlvbnMgd2lsbCBtYWtlIHRoZSBmdXp6ZXIgZmxhZyBuZWFybHkgZXZlcnkgdGVzdCBhcyByZWxldmFudCwgd2hpY2ggaXMgdXNlbGVzcy4gRm9yIGV4YW1wbGUsIG1vZGlmeWluZyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gaW4gYSBoZWFkZXIsIG9yIGNoYW5naW5nIGBfX2FsbG9jX3BhZ2VzYCBvciBga2ZyZWVgIHdvdWxkIGJlIGEgZGlzYXN0ZXIsIHNpbmNlIHRob3NlIGFyZSBjYWxsZWQgY29uc3RhbnRseS4gSWYgSSB3ZXJlIHRvIGxpc3QgdGhlbSwgZXZlcnkgc2luZ2xlIHRlc3QgY2FzZSB3b3VsZCBtYXRjaC4KClNvLCBpcyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIHRydWx5IHViaXF1aXRvdXM/IEl0JiMzOTtzIHRoZSBidWxrIHBhZ2UgYWxsb2NhdG9yLCBidXQgaXMgaXQgKmV2ZXJ5d2hlcmUqPyBgdm1hbGxvY2AgY2FsbHMgYHZtX2FyZWFfYWxsb2NfcGFnZXNgLCBidXQgYHZtYWxsb2NgIGlzbiYjMzk7dCBjYWxsZWQgbmVhcmx5IGFzIG9mdGVuIGFzIGBrbWFsbG9jYCBvciBgX19hbGxvY19wYWdlc2AuIEFuZCB3aGF0IGFib3V0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXRzZWxmPyBJZiBJIGRvbiYjMzk7dCBsaXN0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIHdoYXQgZWxzZSBjb3VsZCBJIGxpc3Q/IFRoZSBpbnN0cnVjdGlvbnMgYXJlIHF1aXRlIGNsZWFyLgoKVGhlIGtleSBpcyB0aGF0IHRoZSBmZWF0dXJlIGxvZ2ljIGJlaW5nIGFsdGVyZWQgaXMgKndpdGhpbiogYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4gSXQmIzM5O3Mgbm90IGxpa2UgYSBnZW5lcmljIG1lbW9yeSBhbGxvY2F0b3IgZnVuY3Rpb24uIEkgaGF2ZSB0byB0aGluayBhYm91dCB3aGF0IHRoZSBmdXp6ZXIgd2lsbCBiZSBmb2N1c2luZyBvbjogaWYgdGhlIHBhdGNoIGNoYW5nZXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCwgdGhlbiBmb2N1c2luZyB0aGUgZnV6emVyIG9uIHRoYXQgZnVuY3Rpb24gd2lsbCBiZSB0aGUgYmVzdCB3YXkgdG8gZGV0ZXJtaW5lIGlmIHRoYXQgY2hhbmdlIGJyZWFrcyBhbnl0aGluZy4KClNvLCBkb2VzIGV2ZXJ5IHByb2dyYW0gY2FsbCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgPyBObyEgSXQmIzM5O3MgY2FsbGVkIGJ5IHNwZWNpZmljIHN1YnN5c3RlbXMgdGhhdCB1c2UgYnVsayBhbGxvY2F0aW9uOiB2bWFsbG9jLCBzcGxpY2UsIHBhZ2VfcG9vbCwgYnRyZnMsIGVyb2ZzLCBmdXNlLCBpb191cmluZywgYW5kIGJwZiBhcmVuYS4gSXQmIzM5O3Mgbm90IGFzIGJyb2FkbHkgdXNlZCBhcyBgX19hbGxvY19wYWdlc19ub3Byb2ZgLCBmb3IgZXhhbXBsZS4KCldhaXQsIHdoYXQgYWJvdXQgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmA/IEkgbmVlZCB0byBjbGFyaWZ5IGlmIHRoZXJlIGlzIGFueSBvdmVybGFwIGluIGJlaGF2aW9yLiBJJiMzOTttIGNoZWNraW5nIHRoZSBzb3VyY2UgdG8gY29tcGFyZSBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIHdpdGggYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAuIEkmIzM5O20gdmVyaWZ5aW5nIHRoaXMgYmVjYXVzZSB0aGUgY29kZSBpcyBleHBvcnRlZCB1c2luZyBgRVhQT1JUX1NZTUJPTF9HUEwoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YpYC4gTm93LCBJJiMzOTttIGdvaW5nIHRvIGRldGVybWluZSBpZiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIGEgcHJlY2lzZSBzeW1ib2wgaW4gYHZtbGludXhgIG9yIGBTeXN0ZW0ubWFwYC4gTGV0IG1lIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBzeW1ib2xzIG9yIGlmIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgdGhlIGV4YWN0IHN5bWJvbC4gQWxzbywgSSYjMzk7bGwgc2VhcmNoIGZvciBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYCB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19wYWdlc19idWxrX25vcHJvZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYz0yNTkxPXN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG4tLVxubW0vbWVtcG9saWN5LmMtMjYwNy1cdFx0aWYgKGRlbHRhKSB7XG5tbS9tZW1wb2xpY3kuYzoyNjA4Olx0XHRcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCxcbm1tL21lbXBvbGljeS5jLTI2MDktXHRcdFx0XHRcdGludGVybGVhdmVfbm9kZXMocG9sKSwgTlVMTCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNjEzLVx0XHR9IGVsc2Uge1xubW0vbWVtcG9saWN5LmM6MjYxNDpcdFx0XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjE1LVx0XHRcdFx0XHRpbnRlcmxlYXZlX25vZGVzKHBvbCksIE5VTEwsXG4tLVxubW0vbWVtcG9saWN5LmM9Mjc0ND1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcF90IGdmcCwgaW50IG5pZCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzUzLVxubW0vbWVtcG9saWN5LmM6Mjc1NDpcdG5yX2FsbG9jYXRlZCAgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihwcmVmZXJyZWRfZ2ZwLCBuaWQsIFx1MDAyNnBvbC1cdTAwM2Vub2Rlcyxcbm1tL21lbXBvbGljeS5jLTI3NTUtXHRcdFx0XHRcdCAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzU3LVx0aWYgKG5yX2FsbG9jYXRlZCBcdTAwM2MgbnJfcGFnZXMpXG5tbS9tZW1wb2xpY3kuYzoyNzU4Olx0XHRucl9hbGxvY2F0ZWQgJiM0Mzs9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCwgbnVtYV9ub2RlX2lkKCksIE5VTEwsXG5tbS9tZW1wb2xpY3kuYy0yNzU5LVx0XHRcdFx0bnJfcGFnZXMgLSBucl9hbGxvY2F0ZWQsXG4tLVxubW0vbWVtcG9saWN5LmM9Mjc3MD11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXG4tLVxubW0vbWVtcG9saWN5LmMtMjc5My1cdG5vZGVtYXNrID0gcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sLCBOT19JTlRFUkxFQVZFX0lOREVYLCBcdTAwMjZuaWQpO1xubW0vbWVtcG9saWN5LmM6Mjc5NDpcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgbm9kZW1hc2ssXG5tbS9tZW1wb2xpY3kuYy0yNzk1LVx0XHRcdFx0ICAgICAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTA5MT1zdGF0aWMgaW5saW5lIGJvb2wgcHJlcGFyZV9hbGxvY19wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MTU5LSAqL1xubW0vcGFnZV9hbGxvYy5jOjUxNjA6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxubW0vcGFnZV9hbGxvYy5jLTUxNjEtXHRcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTMwMC19XG5tbS9wYWdlX2FsbG9jLmM6NTMwMTpFWFBPUlRfU1lNQk9MX0dQTChhbGxvY19wYWdlc19idWxrX25vcHJvZik7XG5tbS9wYWdlX2FsbG9jLmMtNTMwMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxMjEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMzU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIGBjdXJyZW50X2dmcF9jb250ZXh0YCBpbiBCdWxrIFBhZ2UgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZnVuY3Rpb24uIEkgaW5pdGlhbGx5IHRob3VnaHQgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgbWlnaHQgYmUgcmVsZXZhbnQsIGJ1dCBpdCBzZWVtcyB0aGUgY3J1Y2lhbCBjaGFuZ2UgaXMgKndpdGhpbiogYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpdHNlbGYuIFRoZSBxdWVzdGlvbiBpcywgd2h5IHdhcyBgY3VycmVudF9nZnBfY29udGV4dChnZnApYCBhZGRlZCBoZXJlPwoKVGhlIGtleSByZWFsaXphdGlvbiBpcyB0aGF0IGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGNhbGxzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgKG9yIGl0cyB2YXJpYXRpb25zIHZpYSBpbnRlcmxlYXZlIGZ1bmN0aW9ucyksIG1lYW5pbmcgQUxMIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucyB1bHRpbWF0ZWx5IGdvIHRocm91Z2ggYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4KCk5vdywgbG9va2luZyBhdCB0aGUgY29kZSwgaXQmIzM5O3MgY2xlYXIgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIGlzIGFwcGxpZWQgKmJlZm9yZSogYHByZXBhcmVfYWxsb2NfcGFnZXNgLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHByZXBhcmVfYWxsb2NfcGFnZXNgIGRvZXMgaW4gdGhlIGNvbnRleHQgb2YgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4KCmBwcmVwYXJlX2FsbG9jX3BhZ2VzYCBzZXRzIGBhYy0mZ3Q7aGlnaGVzdF96b25laWR4YCBhbmQgZXZlbnR1YWxseSwgdmlhIGBhbGxvY19mbGFnc19jbWEoZ2ZwX21hc2spYCwgaXQgZGVjaWRlcyBpZiBgQUxMT0NfQ01BYCBpcyBzZXQgaW4gYGFsbG9jX2ZsYWdzYC4gSGVyZSYjMzk7cyB0aGUgY3JpdGljYWwgYml0OiBpZiBgUEZfTUVNQUxMT0NfUElOYCBpcyBzZXQgaW4gdGhlIGN1cnJlbnQgdGFzayYjMzk7cyBmbGFncyAobWVhbmluZyB0aGUgbWVtb3J5IGlzIHBpbm5lZCBhbmQgc2hvdWxkbiYjMzk7dCBiZSBtb3ZlZCksIGBjdXJyZW50X2dmcF9jb250ZXh0YCAqc3RyaXBzKiBgX19HRlBfTU9WQUJMRWAuCgpXaXRob3V0IGBfX0dGUF9NT1ZBQkxFYCwgYGdmcF9taWdyYXRldHlwZShnZnBfbWFzaylgIGlzIE5PVCBgTUlHUkFURV9NT1ZBQkxFYCwgYW5kIHRoZXJlZm9yZSBgQUxMT0NfQ01BYCBpc24mIzM5O3Qgc2V0LiBUaGlzIGlzIGEgdmVyeSBpbXBvcnRhbnQgc2FmZXR5IGNoZWNrLiBQcmV2aW91c2x5LCAqd2l0aG91dCogdGhpcyBgY3VycmVudF9nZnBfY29udGV4dGAgY2FsbCwgaWYgYSBjYWxsZXIgcGFzc2VkIGBHRlBfSElHSFVTRVJfTU9WQUJMRWAsIHRoZW4gYGFsbG9jX2ZsYWdzYCB3b3VsZCBpbmNvcnJlY3RseSBnZXQgYEFMTE9DX0NNQWAgc2V0LiBUaGlzIHZpb2xhdGVzIHRoZSBgUEZfTUVNQUxMT0NfUElOYCBjb25zdHJhaW50IGJlY2F1c2UgcGlubmVkIHBhZ2VzICptdXN0IG5vdCogY29tZSBmcm9tIHRoZSBDTUEsIHdoaWNoIGJ5IGRlZmluaXRpb24gY29udGFpbnMgbWlncmF0YWJsZSBwYWdlcy4KCk5vdywgdG8gbWFrZSBzdXJlIEkgYW0gc2VlaW5nIHRoZSB3aG9sZSBwaWN0dXJlLCBJIHdpbGwgY2hlY2sgd2hhdCBlbHNlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZG9lcyBhZnRlciBjYWxsaW5nIGBwcmVwYXJlX2FsbG9jX3BhZ2VzYC4gSXQgc2VlbXMgd2UgYXJlIHVzaW5nIGBBTExPQ19XTUFSS19MT1dgIG9yIHRyeV9sb2NrcyBQQ1AsIGJ1dCB0aGVuIGBwcmVwYXJlX2FsbG9jX3BhZ2VzYCBpcyBjYWxsZWQsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBzZWVpbmcgZXZlcnl0aGluZy4KCk9rYXksIGxldCYjMzk7cyBsb29rIGFnYWluIGF0IGBtbS9wYWdlX2FsbG9jLmNgIGFuZCBtYWtlIHN1cmUgdGhlcmUgaXMgbm90aGluZyBlbHNlIEkgbmVlZCB0byBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MDkwOlx0XG41MDkxOlx0c3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbjUwOTI6XHRcdFx0aW50IHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrLFxuNTA5MzpcdFx0XHRzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGdmcF90ICphbGxvY19nZnAsXG41MDk0Olx0XHRcdHVuc2lnbmVkIGludCAqYWxsb2NfZmxhZ3MpXG41MDk1Olx0e1xuNTA5NjpcdFx0YWMtXHUwMDNlaGlnaGVzdF96b25laWR4ID0gZ2ZwX3pvbmUoZ2ZwX21hc2spO1xuNTA5NzpcdFx0YWMtXHUwMDNlem9uZWxpc3QgPSBub2RlX3pvbmVsaXN0KHByZWZlcnJlZF9uaWQsIGdmcF9tYXNrKTtcbjUwOTg6XHRcdGFjLVx1MDAzZW5vZGVtYXNrID0gbm9kZW1hc2s7XG41MDk5Olx0XHRhYy1cdTAwM2VtaWdyYXRldHlwZSA9IGdmcF9taWdyYXRldHlwZShnZnBfbWFzayk7XG41MTAwOlx0XG41MTAxOlx0XHRpZiAoY3B1c2V0c19lbmFibGVkKCkpIHtcbjUxMDI6XHRcdFx0KmFsbG9jX2dmcCB8PSBfX0dGUF9IQVJEV0FMTDtcbjUxMDM6XHRcdFx0LypcbjUxMDQ6XHRcdFx0ICogV2hlbiB3ZSBhcmUgaW4gdGhlIGludGVycnVwdCBjb250ZXh0LCBpdCBpcyBpcnJlbGV2YW50XG41MTA1Olx0XHRcdCAqIHRvIHRoZSBjdXJyZW50IHRhc2sgY29udGV4dC4gSXQgbWVhbnMgdGhhdCBhbnkgbm9kZSBvay5cbjUxMDY6XHRcdFx0ICovXG41MTA3Olx0XHRcdGlmIChpbl90YXNrKCkgXHUwMDI2XHUwMDI2ICFhYy1cdTAwM2Vub2RlbWFzaylcbjUxMDg6XHRcdFx0XHRhYy1cdTAwM2Vub2RlbWFzayA9IFx1MDAyNmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcbjUxMDk6XHRcdFx0ZWxzZVxuNTExMDpcdFx0XHRcdCphbGxvY19mbGFncyB8PSBBTExPQ19DUFVTRVQ7XG41MTExOlx0XHR9XG41MTEyOlx0XG41MTEzOlx0XHRtaWdodF9hbGxvYyhnZnBfbWFzayk7XG41MTE0Olx0XG41MTE1Olx0XHQvKlxuNTExNjpcdFx0ICogRG9uJiMzOTt0IGludm9rZSBzaG91bGRfZmFpbCBsb2dpYywgc2luY2UgaXQgbWF5IGNhbGxcbjUxMTc6XHRcdCAqIGdldF9yYW5kb21fdTMyKCkgYW5kIHByaW50aygpIHdoaWNoIG5lZWQgdG8gc3Bpbl9sb2NrLlxuNTExODpcdFx0ICovXG41MTE5Olx0XHRpZiAoISgqYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX05PTE9DSykgXHUwMDI2XHUwMDI2XG41MTIwOlx0XHQgICAgc2hvdWxkX2ZhaWxfYWxsb2NfcGFnZShnZnBfbWFzaywgb3JkZXIpKVxuNTEyMTpcdFx0XHRyZXR1cm4gZmFsc2U7XG41MTIyOlx0XG41MTIzOlx0XHQqYWxsb2NfZmxhZ3MgfD0gYWxsb2NfZmxhZ3NfY21hKGdmcF9tYXNrKTtcbjUxMjQ6XHRcbjUxMjU6XHRcdC8qIERpcnR5IHpvbmUgYmFsYW5jaW5nIG9ubHkgZG9uZSBpbiB0aGUgZmFzdCBwYXRoICovXG41MTI2Olx0XHRhYy1cdTAwM2VzcHJlYWRfZGlydHlfcGFnZXMgPSAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX1dSSVRFKTtcbjUxMjc6XHRcbjUxMjg6XHRcdC8qXG41MTI5Olx0XHQgKiBUaGUgcHJlZmVycmVkIHpvbmUgaXMgdXNlZCBmb3Igc3RhdGlzdGljcyBidXQgY3J1Y2lhbGx5IGl0IGlzXG41MTMwOlx0XHQgKiBhbHNvIHVzZWQgYXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgem9uZWxpc3QgaXRlcmF0b3IuIEl0XG41MTMxOlx0XHQgKiBtYXkgZ2V0IHJlc2V0IGZvciBhbGxvY2F0aW9ucyB0aGF0IGlnbm9yZSBtZW1vcnkgcG9saWNpZXMuXG41MTMyOlx0XHQgKi9cbjUxMzM6XHRcdGFjLVx1MDAzZXByZWZlcnJlZF96b25lcmVmID0gZmlyc3Rfem9uZXNfem9uZWxpc3QoYWMtXHUwMDNlem9uZWxpc3QsXG41MTM0Olx0XHRcdFx0XHRcdGFjLVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCwgYWMtXHUwMDNlbm9kZW1hc2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjg0MQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIERlZXAgaW50byBBbGxvY2F0aW9uIEJlaGF2aW9yKioKClJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lIDUxMTMg4oCTIGBtaWdodF9hbGxvYyhnZnBfbWFzayk7YC4gVGhhdCBmdW5jdGlvbiBjYWxsLCBgbWlnaHRfYWxsb2NgLCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEkga25vdyB0aGF0IGZ1bmN0aW9uJiMzOTtzIHB1cnBvc2UgaXMgdG8gYWN0IGFzIGEgaGludCB0byB0aGUga2VybmVsIGFib3V0IHdoZXRoZXIgYSBtZW1vcnkgYWxsb2NhdGlvbiAqbWlnaHQqIGhhcHBlbiBhdCBhIHNwZWNpZmljIHBvaW50IGluIHRoZSBjb2RlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtaW5kIGFib3V0IGV4YWN0bHkgd2hhdCBpbXBsaWNhdGlvbnMgdGhhdCBoYXMuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBgbWlnaHRfYWxsb2NgIGNhbGwgaXMgYmVpbmcgdXNlZCBjb3JyZWN0bHksIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGBnZnBfbWFza2AgcGFzc2VkIHRvIGl0LiBUaGlzIG1hc2sgZGljdGF0ZXMgdGhlIHR5cGUgb2YgYWxsb2NhdGlvbiBhbGxvd2VkOiB3aGV0aGVyIGl0IGNhbiBzbGVlcCwgd2hldGhlciBpdCBjYW4gYmUgZnJvbSBhIHNwZWNpZmljIE5VTUEgbm9kZSwgb3IgaWYgaXQmIzM5O3MgcmVzZXJ2ZWQgZm9yIGNlcnRhaW4gY29udGV4dHMuIFRoZSBjaG9pY2Ugb2YgYGdmcF9tYXNrYCBpcyBjcnVjaWFsLiBJcyBpdCB0aGUgcmlnaHQgb25lIGZvciB0aGlzIHBhcnQgb2YgdGhlIGtlcm5lbD8gSXMgdGhlcmUgYSByaXNrIG9mIGRlYWRsb2NrLCBvciBleGNlc3NpdmUgbGF0ZW5jeSwgaWYgYW4gYWxsb2NhdGlvbiAqZG9lcyogZW5kIHVwIGhhcHBlbmluZz8gSSYjMzk7bSBnb2luZyB0byBsb29rIGRlZXBlciBpbnRvIGBtaWdodF9hbGxvY2AgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHBvdGVudGlhbCBwaXRmYWxscyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdodF9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaD0yODc9c3RhdGljIGlubGluZSB2b2lkIG1lbWFsbG9jX3JldHJ5X3dhaXQoZ2ZwX3QgZ2ZwX2ZsYWdzKVxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0zMDYtLyoqXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6MzA3OiAqIG1pZ2h0X2FsbG9jIC0gTWFyayBwb3NzaWJsZSBhbGxvY2F0aW9uIHNpdGVzXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMzA4LSAqIEBnZnBfbWFzazogZ2ZwX3QgZmxhZ3MgdGhhdCB3b3VsZCBiZSB1c2VkIHRvIGFsbG9jYXRlXG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTMxMy0gKi9cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDozMTQ6c3RhdGljIGlubGluZSB2b2lkIG1pZ2h0X2FsbG9jKGdmcF90IGdmcF9tYXNrKVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTMxNS17XG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaD01ODk9c3RhdGljIGlubGluZSB2b2lkICp4YV9zdG9yZV9iaChzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyBpbmRleCxcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTU5My1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg6NTk0Olx0bWlnaHRfYWxsb2MoZ2ZwKTtcbmluY2x1ZGUvbGludXgveGFycmF5LmgtNTk1LVx0eGFfbG9ja19iaCh4YSk7XG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaD02MTY9c3RhdGljIGlubGluZSB2b2lkICp4YV9zdG9yZV9pcnEoc3RydWN0IHhhcnJheSAqeGEsIHVuc2lnbmVkIGxvbmcgaW5kZXgsXG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaC02MjAtXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjYyMTpcdG1pZ2h0X2FsbG9jKGdmcCk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTYyMi1cdHhhX2xvY2tfaXJxKHhhKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTY5Mj1zdGF0aWMgaW5saW5lIHZvaWQgKnhhX2NtcHhjaGcoc3RydWN0IHhhcnJheSAqeGEsIHVuc2lnbmVkIGxvbmcgaW5kZXgsXG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaC02OTYtXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjY5NzpcdG1pZ2h0X2FsbG9jKGdmcCk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTY5OC1cdHhhX2xvY2soeGEpO1xuLS1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg9NzIwPXN0YXRpYyBpbmxpbmUgdm9pZCAqeGFfY21weGNoZ19iaChzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyBpbmRleCxcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTcyNC1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg6NzI1Olx0bWlnaHRfYWxsb2MoZ2ZwKTtcbmluY2x1ZGUvbGludXgveGFycmF5LmgtNzI2LVx0eGFfbG9ja19iaCh4YSk7XG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaD03NDg9c3RhdGljIGlubGluZSB2b2lkICp4YV9jbXB4Y2hnX2lycShzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyBpbmRleCxcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTc1Mi1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg6NzUzOlx0bWlnaHRfYWxsb2MoZ2ZwKTtcbmluY2x1ZGUvbGludXgveGFycmF5LmgtNzU0LVx0eGFfbG9ja19pcnEoeGEpO1xuLS1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg9Nzc4PXN0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayB4YV9pbnNlcnQoc3RydWN0IHhhcnJheSAqeGEsXG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaC03ODItXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjc4MzpcdG1pZ2h0X2FsbG9jKGdmcCk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTc4NC1cdHhhX2xvY2soeGEpO1xuLS1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg9ODA4PXN0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayB4YV9pbnNlcnRfYmgoc3RydWN0IHhhcnJheSAqeGEsXG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaC04MTItXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjgxMzpcdG1pZ2h0X2FsbG9jKGdmcCk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTgxNC1cdHhhX2xvY2tfYmgoeGEpO1xuLS1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg9ODM4PXN0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayB4YV9pbnNlcnRfaXJxKHN0cnVjdCB4YXJyYXkgKnhhLFxuLS1cbmluY2x1ZGUvbGludXgveGFycmF5LmgtODQyLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaDo4NDM6XHRtaWdodF9hbGxvYyhnZnApO1xuaW5jbHVkZS9saW51eC94YXJyYXkuaC04NDQtXHR4YV9sb2NrX2lycSh4YSk7XG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaD04NzE9c3RhdGljIGlubGluZSBfX211c3RfY2hlY2sgaW50IHhhX2FsbG9jKHN0cnVjdCB4YXJyYXkgKnhhLCB1MzIgKmlkLFxuLS1cbmluY2x1ZGUvbGludXgveGFycmF5LmgtODc1LVxuaW5jbHVkZS9saW51eC94YXJyYXkuaDo4NzY6XHRtaWdodF9hbGxvYyhnZnApO1xuaW5jbHVkZS9saW51eC94YXJyYXkuaC04NzctXHR4YV9sb2NrKHhhKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTkwND1zdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgeGFfYWxsb2NfYmgoc3RydWN0IHhhcnJheSAqeGEsIHUzMiAqaWQsXG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaC05MDgtXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjkwOTpcdG1pZ2h0X2FsbG9jKGdmcCk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTkxMC1cdHhhX2xvY2tfYmgoeGEpO1xuLS1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg9OTM3PXN0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayB4YV9hbGxvY19pcnEoc3RydWN0IHhhcnJheSAqeGEsIHUzMiAqaWQsXG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaC05NDEtXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjk0MjpcdG1pZ2h0X2FsbG9jKGdmcCk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTk0My1cdHhhX2xvY2tfaXJxKHhhKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTk3Nj1zdGF0aWMgaW5saW5lIGludCB4YV9hbGxvY19jeWNsaWMoc3RydWN0IHhhcnJheSAqeGEsIHUzMiAqaWQsIHZvaWQgKmVudHJ5LFxuLS1cbmluY2x1ZGUvbGludXgveGFycmF5LmgtOTgwLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaDo5ODE6XHRtaWdodF9hbGxvYyhnZnApO1xuaW5jbHVkZS9saW51eC94YXJyYXkuaC05ODItXHR4YV9sb2NrKHhhKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTEwMTU9c3RhdGljIGlubGluZSBpbnQgeGFfYWxsb2NfY3ljbGljX2JoKHN0cnVjdCB4YXJyYXkgKnhhLCB1MzIgKmlkLCB2b2lkICplbnRyeSxcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTEwMTktXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjEwMjA6XHRtaWdodF9hbGxvYyhnZnApO1xuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xMDIxLVx0eGFfbG9ja19iaCh4YSk7XG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaD0xMDU0PXN0YXRpYyBpbmxpbmUgaW50IHhhX2FsbG9jX2N5Y2xpY19pcnEoc3RydWN0IHhhcnJheSAqeGEsIHUzMiAqaWQsIHZvaWQgKmVudHJ5LFxuLS1cbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTA1OC1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTA1OTpcdG1pZ2h0X2FsbG9jKGdmcCk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTEwNjAtXHR4YV9sb2NrX2lycSh4YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NzQxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIG15IGRvbWFpbiBvZiBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIGBtaWdodF9hbGxvY2AqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBjb2RlLiAmIzM0O0xldCYjMzk7cyByZWFkIGBtaWdodF9hbGxvY2AuJiMzNDsgTm8gZmx1ZmYsIGp1c3QgZGlyZWN0IGVuZ2FnZW1lbnQuIFRoaXMgc2lnbmFscyBhIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZHluYW1pY3Mgd2l0aGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgaW50cmljYWNpZXMgb2YgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGFsbG9jYXRpb24gZmFpbHVyZXMsIHdoYXQgc3RyYXRlZ2llcyBpdCBlbXBsb3lzIGZvciBvcHRpbWl6YXRpb24sIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtIEkga25vdyBzbyB3ZWxsLiBUaGlzIGlzIGxpa2VseSBub3QgYSBjYXN1YWwgc2tpbTsgSSYjMzk7bSBwcmVwYXJlZCB0byBkaWcgaW50byB0aGUgZGV0YWlscyBhbmQgZm9ybSBhIHNvbGlkIG1lbnRhbCBtb2RlbCBvZiBpdHMgYmVoYXZpb3IuIEkgZXhwZWN0IHRvIGJlIGFibGUgdG8gaWRlbnRpZnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBlZGdlIGNhc2VzLCBhbmQgYXJlYXMgdGhhdCBtaWdodCB3YXJyYW50IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBvciBvcHRpbWl6YXRpb24uIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCB1bmRlcnN0YW5kIHRoaXMgYWxsb2NhdGlvbiBtZXRob2QhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zY2hlZC9tbS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzA3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDc6XHQgKiBtaWdodF9hbGxvYyAtIE1hcmsgcG9zc2libGUgYWxsb2NhdGlvbiBzaXRlc1xuIDMwODpcdCAqIEBnZnBfbWFzazogZ2ZwX3QgZmxhZ3MgdGhhdCB3b3VsZCBiZSB1c2VkIHRvIGFsbG9jYXRlXG4gMzA5Olx0ICpcbiAzMTA6XHQgKiBTaW1pbGFyIHRvIG1pZ2h0X3NsZWVwKCkgYW5kIG90aGVyIGFubm90YXRpb25zLCB0aGlzIGNhbiBiZSB1c2VkIGluIGZ1bmN0aW9uc1xuIDMxMTpcdCAqIHRoYXQgbWlnaHQgYWxsb2NhdGUsIGJ1dCBvZnRlbiBkb24mIzM5O3QuIENvbXBpbGVzIHRvIG5vdGhpbmcgd2l0aG91dFxuIDMxMjpcdCAqIENPTkZJR19MT0NLREVQLiBJbmNsdWRlcyBhIGNvbmRpdGlvbmFsIG1pZ2h0X3NsZWVwKCkgaWYgQGdmcCBhbGxvd3MgYmxvY2tpbmcuXG4gMzEzOlx0ICovXG4gMzE0Olx0c3RhdGljIGlubGluZSB2b2lkIG1pZ2h0X2FsbG9jKGdmcF90IGdmcF9tYXNrKVxuIDMxNTpcdHtcbiAzMTY6XHRcdGZzX3JlY2xhaW1fYWNxdWlyZShnZnBfbWFzayk7XG4gMzE3Olx0XHRmc19yZWNsYWltX3JlbGVhc2UoZ2ZwX21hc2spO1xuIDMxODpcdFxuIDMxOTpcdFx0aWYgKGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DKVxuIDMyMDpcdFx0XHRyZXR1cm47XG4gMzIxOlx0XG4gMzIyOlx0XHRtaWdodF9zbGVlcF9pZihnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnBfbWFzaykpO1xuIDMyMzpcdH1cbiAzMjQ6XHRcbiAzMjU6XHQvKipcbiAzMjY6XHQgKiBtZW1hbGxvY19mbGFnc19zYXZlIC0gQWRkIGEgUEZfKiBmbGFnIHRvIGN1cnJlbnQtXHUwMDNlZmxhZ3MsIHNhdmUgb2xkIHZhbHVlXG4gMzI3Olx0ICogQGZsYWdzOiBGbGFncyB0byBhZGQuXG4gMzI4Olx0ICpcbiAzMjk6XHQgKiBUaGlzIGFsbG93cyBQRl8qIGZsYWdzIHRvIGJlIGNvbnZlbmllbnRseSBhZGRlZCwgaXJyZXNwZWN0aXZlIG9mIGN1cnJlbnRcbiAzMzA6XHQgKiB2YWx1ZSwgYW5kIHRoZW4gdGhlIG9sZCB2ZXJzaW9uIHJlc3RvcmVkIHdpdGggbWVtYWxsb2NfZmxhZ3NfcmVzdG9yZSgpLlxuIDMzMTpcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTM4MgoJCQkJCQkJb3V0cHV0OiAxNzIKCQkJCQkJCXRob3VnaHRzOiAyNjA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIEJ1bGsgUGFnZSBBbGxvY2F0aW9uIENvbnRleHQgUHJvcGFnYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBhIHN1YnRsZSBjaGFuZ2Ugd2l0aGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gVGhlIGNvZGUgYWxyZWFkeSBkb2VzIHNvbWUgY29udGV4dCBtYW5hZ2VtZW50IHdpdGggYGZzX3JlY2xhaW1fYWNxdWlyZWAsIGJ1dCB0aGlzIG5ldyBwYXRjaCBpbnRyb2R1Y2VzIGBjdXJyZW50X2dmcF9jb250ZXh0YCAqYmVmb3JlKiB0aGUgYWxsb2NhdGlvbi4gSXQmIzM5O3MgY3J1Y2lhbCBiZWNhdXNlIGBjdXJyZW50X2dmcF9jb250ZXh0YCBtb2RpZmllcyB0aGUgYGdmcF9tYXNrYCBiYXNlZCBvbiB0aGUgY3VycmVudCB0YXNrJiMzOTtzIHN0YXRlLCBhbmQgYGdmcF9taWdyYXRldHlwZWAgaXMgYWxzbyBjb25zaWRlcmVkIGFuZCBtYXkgY2hhbmdlIGJhc2VkIG9uIHRoZSBmbGFncyBzZXQsIHNwZWNpZmljYWxseSBpZiBgUEZfTUVNQUxMT0NfUElOYCBpcyBzZXQuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMgaW4gaG93IGBnZnBfbWFza2AgaXMgaGFuZGxlZDogZW5zdXJpbmcgdGhhdCB0aGUgYWxsb2NhdGlvbiByZXNwZWN0cyB0YXNrLXNwZWNpZmljIGZsYWdzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIGNoYW5nZSBpbiBhIGtleSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbi4gVGhlIGBnZnBfbWFza2AgaW1wYWN0cyB0aGluZ3MgbGlrZSBtaWdyYXRpb24gdHlwZSB3aGljaCBhZmZlY3RzIHdoZXJlIHBhZ2VzIGFyZSBhbGxvY2F0ZWQuIGBhbGxvY19mbGFnc2AgYXJlIGltcGFjdGVkIHRvby4KClRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBtb2RpZmljYXRpb24gd29ydGggdGhlIGZ1enppbmcgZWZmb3J0PyBZZXMsIGFic29sdXRlbHkuIFRoaXMgaXMgYSBjb3JlIE1NIGxvZ2ljIGNoYW5nZSB0aGF0IGFsdGVycyB0aGUgZ2ZwIGZsYWdzIGFuZCBhbGxvY2F0aW9uIGZsYWdzIGZvciBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuIEl0JiMzOTtzIGEgY3JpdGljYWwgYWRqdXN0bWVudCwgYW5kIGl0IHJlcXVpcmVzIGNhcmVmdWwgdGVzdGluZy4KCldoYXQgYXJlIHRoZSBjcml0aWNhbCBzeW1ib2xzIHRvIGZvY3VzIG9uPyBUaGUgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIEkgc2VlIHRoZSBkaWZmLiBUaGF0JiMzOTtzIHRoZSBmdW5jdGlvbiB0byBwcmlvcml0aXplLCByaWdodD8gV2FpdCwgSSYjMzk7bSBjaGVja2luZyBhZ2FpbnN0IHRoZSBndWlkZWxpbmVzIGZvciBGb2N1c1N5bWJvbHMuIFdlICptdXN0IG5vdCogaW5jbHVkZSB1YmlxdWl0b3VzIGZ1bmN0aW9ucy4gSSYjMzk7bSB0aGlua2luZywgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyB1c2VkIGluIHNwZWNpYWxpemVkIHNjZW5hcmlvcyBzdWNoIGFzIGB2bWFsbG9jYCwgYHNwbGljZWAsIGBpb191cmluZ2AsIGFuZCBgcGFnZSBwb29sYC4gSXQgaXMgbm90IGxpa2UgYGttYWxsb2NgIG9yIGBfX2FsbG9jX3BhZ2VzYC4gSXQmIzM5O3MgYSBrZXkgQVBJIHVzZWQgYnkgbXVsdGlwbGUgc3Vic3lzdGVtcyB3aGljaCBuZWVkIGEgYmF0Y2ggYWxsb2NhdGlvbiBBUEkgdG8gYXZvaWQgY29udGVudGlvbi4gQW5kLCB0aGlzIGlzIHRoZSBmdW5jdGlvbiB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcuCgpBcmUgdGhlcmUgb3RoZXIgZnVuY3Rpb24gdGhhdCB3ZSBzaG91bGQgaW5jbHVkZT8gVGhlcmUgaXMgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAsIGJ1dCB0aGUga2V5IGxvZ2ljIGJlaW5nIG1vZGlmaWVkIGlzIGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuCgpJIGhhdmUgdG8gY2FyZWZ1bGx5IGFzc2VzcyBpZiB0aGUgZnVuY3Rpb24gaXMgJiMzNDt1YmlxdWl0b3VzJiMzNDsgbGlrZSBga21hbGxvY2Agb3IgYF9fYWxsb2NfcGFnZXNfbm9wcm9mYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgZnV6emVyIGRvZXNuJiMzOTt0IGdldCBmbG9vZGVkIHdpdGggdW5yZWxhdGVkIHRlc3QgY2FzZXMuIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgbm90IGNhbGxlZCBieSAqZXZlcnkqIHByb2dyYW0uIEl0IGlzIGNhbGxlZCBieSBzcGVjaWZpYyBwcm9ncmFtcywgb3IgcGF0aHMgdGhhdCByZXF1aXJlIGJ1bGsgYWxsb2NhdGlvbi4KClNvLCBsZXQmIzM5O3MgbmFpbCB0aGlzIGRvd24uIFRoZSBwYXRjaCBjaGFuZ2VzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIGFuZCBpdCYjMzk7cyBub3QgYSBnZW5lcmljIGFsbG9jYXRvci4gSXQmIzM5O3MgYW4gaW1wb3J0YW50IGVudHJ5cG9pbnQuCgpOZXh0LCBJIGhhdmUgdG8gZW5zdXJlIHRoZSBzeW1ib2xzIGFyZSB2YWxpZCAoZXhwb3J0ZWQsIG5vbi1zdGF0aWMpLiBZZXMsIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgYSBub24tc3RhdGljIEMgZnVuY3Rpb24sIGFuZCBpcyBleHBvcnRlZCB0byB1c2VyIHNwYWNlLiBJdCBpcyB1bmNvbmRpdGlvbmFsbHkgY29tcGlsZWQgaW4gYWxsIGtlcm5lbCBjb25maWdzLgoKSGVyZSYjMzk7cyB0aGUgYm90dG9tIGxpbmU6CgoqICAgKipXb3J0aEZ1enppbmcqKjogVHJ1ZQoqICAgKipSZWFzb25pbmcqKjogVGhlIHBhdGNoIG1vZGlmaWVzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgdG8gYXBwbHkgYGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKWAuIFRoaXMgZW5zdXJlcyB0aGF0IHNjb3BlZCBhbGxvY2F0aW9uIGNvbnN0cmFpbnRzIChzdWNoIGFzIGBQRl9NRU1BTExPQ19OT0lPYCwgYFBGX01FTUFMTE9DX05PRlNgLCBhbmQgYFBGX01FTUFMTE9DX1BJTmApIGFyZSBwcm9wZXJseSBob25vcmVkIGR1cmluZyBidWxrIHBhZ2UgYWxsb2NhdGlvbi4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBhIHJlYWNoYWJsZSBwYXRoLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGF0IHByb3BhZ2F0aW5nIHRhc2sgZ2ZwIGNvbnRleHQgaW4gYnVsayBhbGxvY2F0aW9ucyBkb2VzIG5vdCBjYXVzZSB1bmV4cGVjdGVkIGFsbG9jYXRpb24gZmFpbHVyZXMsIHJlZ3Jlc3Npb24sIG9yIGxvY2tkZXAvcmVjbGFpbSBhc3NlcnRpb24gaXNzdWVzIGFjcm9zcyBjYWxsZXJzIGxpa2Ugdm1hbGxvYywgc3BsaWNlLCBpb191cmluZywgb3IgcGFnZSBwb29sLgoqICAgKipGb2N1c1N5bWJvbHMqKjogYFsmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mJiMzNDtdYAoqICAgKipFbmFibGVDb25maWdzKio6IGBbXWAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHBhZ2UgYWxsb2NhdG9yIGZ1bmN0aW9uIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKCkgaW4gbW0vcGFnZV9hbGxvYy5jIHRvIGhvbm9yIHRoZSBjYWxsaW5nIHRhc2smIzM5O3Mgc2NvcGVkIEdGUCBjb250ZXh0IHZpYSBjdXJyZW50X2dmcF9jb250ZXh0KCkuIFRoaXMgYWx0ZXJzIGFsbG9jYXRpb24gZmxhZ3MgKGUuZy4gc3RyaXBwaW5nIF9fR0ZQX0ZTLCBfX0dGUF9JTywgb3IgX19HRlBfTU9WQUJMRSB1bmRlciBQRl9NRU1BTExPQ19OT0ZTLCBQRl9NRU1BTExPQ19OT0lPLCBvciBQRl9NRU1BTExPQ19QSU4pIGR1cmluZyBidWxrIHBhZ2UgYWxsb2NhdGlvbiByZXF1ZXN0cywgd2hpY2ggZGlyZWN0bHkgYWZmZWN0cyByZWFjaGFibGUgc3Vic3lzdGVtcyBzdWNoIGFzIHZtYWxsb2MsIHNwbGljZSwgaW9fdXJpbmcsIGFuZCBwYWdlIHBvb2xzLiBUaGlzIGNvcmUgbW0gbG9naWMgY2hhbmdlIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19ub3Byb2YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgcGFnZSBhbGxvY2F0b3IgZnVuY3Rpb24gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKSBpbiBtbS9wYWdlX2FsbG9jLmMgdG8gaG9ub3IgdGhlIGNhbGxpbmcgdGFzayYjMzk7cyBzY29wZWQgR0ZQIGNvbnRleHQgdmlhIGN1cnJlbnRfZ2ZwX2NvbnRleHQoKS4gVGhpcyBhbHRlcnMgYWxsb2NhdGlvbiBmbGFncyAoZS5nLiBzdHJpcHBpbmcgX19HRlBfRlMsIF9fR0ZQX0lPLCBvciBfX0dGUF9NT1ZBQkxFIHVuZGVyIFBGX01FTUFMTE9DX05PRlMsIFBGX01FTUFMTE9DX05PSU8sIG9yIFBGX01FTUFMTE9DX1BJTikgZHVyaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIHJlcXVlc3RzLCB3aGljaCBkaXJlY3RseSBhZmZlY3RzIHJlYWNoYWJsZSBzdWJzeXN0ZW1zIHN1Y2ggYXMgdm1hbGxvYywgc3BsaWNlLCBpb191cmluZywgYW5kIHBhZ2UgcG9vbHMuIFRoaXMgY29yZSBtbSBsb2dpYyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYCB0byBhcHBseSBwZXItdGFzayBHRlAgY29udGV4dCByZXN0cmljdGlvbnMgdmlhIGBjdXJyZW50X2dmcF9jb250ZXh0KGdmcClgLiBUaGlzIGVuc3VyZXMgdGFzay1sZXZlbCBmbGFncyBzdWNoIGFzIFBGX01FTUFMTE9DX05PSU8sIFBGX01FTUFMTE9DX05PRlMsIGFuZCBQRl9NRU1BTExPQ19QSU4gY29ycmVjdGx5IG1hc2sgR0ZQIGZsYWdzIChlLmcuLCBzdHJpcHBpbmcgX19HRlBfSU8sIF9fR0ZQX0ZTLCBfX0dGUF9NT1ZBQkxFKSB0byBwcmV2ZW50IGRlYWRsb2NrcyBkdXJpbmcgcmVjbGFpbS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeTpcbjEuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIG1vZGlmeSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLlxuMi4gSXQgZG9lcyBub3QgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uLCB6ZXJvaW5nLCBvciBzdHJ1Y3QgZmllbGQgcG9wdWxhdGlvbi5cbjMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBicmFuY2hlcyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhIG9yIGFmZmVjdCBidWZmZXIgYm91bmRzL2xlbmd0aHMuXG5cbkFueSByZWNsYWltIG9yIGxvY2tpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gdGFzayBHRlAgY29udGV4dHMgYXJlIHRyYWNrZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgbWVtb3J5IGFsbG9jIGRlYnVnZ2luZywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDAxZWVhZGJiNGY5NzM5MmI1MGJkYmE3YjUzYTA2MzZlNmU5MTgxYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDA5OjQwOjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IDEyZmFjOTA4NGM0ODMuLjNiZTcyODhhMWFhNzEgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTUyMDcsNiAmIzQzOzUyMDcsNyBAQCB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsCiAKIAkvKiBNYXkgc2V0IEFMTE9DX05PRlJBR01FTlQsIGZyYWdtZW50YXRpb24gd2lsbCByZXR1cm4gMSBwYWdlLiAqLwogCWdmcCAmYW1wOz0gZ2ZwX2FsbG93ZWRfbWFzazsKJiM0MzsJZ2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApOwogCWlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCAmYW1wO2FjLCAmYW1wO2dmcCwgJmFtcDthbGxvY19mbGFncykpCiAJCWdvdG8gb3V0OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDg3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBKdXN0aWZpY2F0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggbGFuZGVkLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBMZXQmIzM5O3MgZGlnIGluLiBGaXJzdCB0aGluZ3MgZmlyc3Q6IEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgZGlmZi4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBsb29rcyBsaWtlIGEgbWlub3IgY2hhbmdlIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBBaCwgcmlnaHQsIGl0IGFkZHMgYSBjYWxsIHRvIGBjdXJyZW50X2dmcF9jb250ZXh0KGdmcClgIHdpdGhpbiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIGZ1bmN0aW9uIGFjdHVhbGx5ICpkb2VzKi4gSSYjMzk7bGwgbmVlZCB0byBrbm93IGl0cyBpbXBhY3Qgb24gdGhlIGZ1bmN0aW9uIGluIHRoZSBjb250ZXh0IG9mIHRoZSBwYWdlIGFsbG9jYXRvci4gSSB3aWxsIHJlYWQgdGhlIGBtbS9wYWdlX2FsbG9jLmNgIGZpbGUgYXJvdW5kIGxpbmUgNTIwNyB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgdGhlIG92ZXJhbGwgY29udGV4dCBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFkZGl0aW9uLiBUaW1lIHRvIGdldCBzb21lIGNvbnRleHQgYW5kIGV2YWx1YXRlIHRoZSBwb3RlbnRpYWwgZm9yIEtNU0FOIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUxOTU6XHRcbjUxOTY6XHQjaWZkZWYgQ09ORklHX1BBR0VfT1dORVJcbjUxOTc6XHRcdC8qXG41MTk4Olx0XHQgKiBQQUdFX09XTkVSIG1heSByZWN1cnNlIGludG8gdGhlIGFsbG9jYXRvciB0byBhbGxvY2F0ZSBzcGFjZSB0b1xuNTE5OTpcdFx0ICogc2F2ZSB0aGUgc3RhY2sgd2l0aCBwYWdlc2V0cy5sb2NrIGhlbGQuIFJlbGVhc2luZy9yZWFjcXVpcmluZ1xuNTIwMDpcdFx0ICogcmVtb3ZlcyBtdWNoIG9mIHRoZSBwZXJmb3JtYW5jZSBiZW5lZml0IG9mIGJ1bGsgYWxsb2NhdGlvbiBzb1xuNTIwMTpcdFx0ICogZm9yY2UgdGhlIGNhbGxlciB0byBhbGxvY2F0ZSBvbmUgcGFnZSBhdCBhIHRpbWUgYXMgaXQmIzM5O2xsIGhhdmVcbjUyMDI6XHRcdCAqIHNpbWlsYXIgcGVyZm9ybWFuY2UgdG8gYWRkZWQgY29tcGxleGl0eSB0byB0aGUgYnVsayBhbGxvY2F0b3IuXG41MjAzOlx0XHQgKi9cbjUyMDQ6XHRcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcbjUyMDU6XHRcdFx0Z290byBmYWlsZWQ7XG41MjA2Olx0I2VuZGlmXG41MjA3Olx0XG41MjA4Olx0XHQvKiBNYXkgc2V0IEFMTE9DX05PRlJBR01FTlQsIGZyYWdtZW50YXRpb24gd2lsbCByZXR1cm4gMSBwYWdlLiAqL1xuNTIwOTpcdFx0Z2ZwIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbjUyMTA6XHRcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcbjUyMTE6XHRcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcdTAwMjZhYywgXHUwMDI2Z2ZwLCBcdTAwMjZhbGxvY19mbGFncykpXG41MjEyOlx0XHRcdGdvdG8gb3V0O1xuNTIxMzpcdFxuNTIxNDpcdFx0LyogRmluZCBhbiBhbGxvd2VkIGxvY2FsIHpvbmUgdGhhdCBtZWV0cyB0aGUgbG93IHdhdGVybWFyay4gKi9cbjUyMTU6XHRcdHogPSBhYy5wcmVmZXJyZWRfem9uZXJlZjtcbjUyMTY6XHRcdGZvcl9uZXh0X3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgYWMuaGlnaGVzdF96b25laWR4LCBhYy5ub2RlbWFzaykge1xuNTIxNzpcdFx0XHR1bnNpZ25lZCBsb25nIG1hcms7XG41MjE4Olx0XG41MjE5Olx0XHRcdGlmIChjcHVzZXRzX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19DUFVTRVQpIFx1MDAyNlx1MDAyNlxuNTIyMDpcdFx0XHQgICAgIV9fY3B1c2V0X3pvbmVfYWxsb3dlZCh6b25lLCBnZnApKSB7XG41MjIxOlx0XHRcdFx0Y29udGludWU7XG41MjIyOlx0XHRcdH1cbjUyMjM6XHRcbjUyMjQ6XHRcdFx0aWYgKG5yX29ubGluZV9ub2RlcyBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgem9uZSAhPSB6b25lbGlzdF96b25lKGFjLnByZWZlcnJlZF96b25lcmVmKSBcdTAwMjZcdTAwMjZcbjUyMjU6XHRcdFx0ICAgIHpvbmVfdG9fbmlkKHpvbmUpICE9IHpvbmVsaXN0X25vZGVfaWR4KGFjLnByZWZlcnJlZF96b25lcmVmKSkge1xuNTIyNjpcdFx0XHRcdGdvdG8gZmFpbGVkO1xuNTIyNzpcdFx0XHR9XG41MjI4Olx0XG41MjI5Olx0XHRcdGNvbmRfYWNjZXB0X21lbW9yeSh6b25lLCAwLCBhbGxvY19mbGFncyk7XG41MjMwOlx0cmV0cnlfdGhpc196b25lOlxuNTIzMTpcdFx0XHRtYXJrID0gd21hcmtfcGFnZXMoem9uZSwgYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX1dNQVJLX01BU0spICYjNDM7IG5yX3BhZ2VzIC0gbnJfcG9wdWxhdGVkO1xuNTIzMjpcdFx0XHRpZiAoem9uZV93YXRlcm1hcmtfZmFzdCh6b25lLCAwLCAgbWFyayxcbjUyMzM6XHRcdFx0XHRcdHpvbmVsaXN0X3pvbmVfaWR4KGFjLnByZWZlcnJlZF96b25lcmVmKSxcbjUyMzQ6XHRcdFx0XHRcdGFsbG9jX2ZsYWdzLCBnZnApKSB7XG41MjM1Olx0XHRcdFx0YnJlYWs7XG41MjM2Olx0XHRcdH1cbjUyMzc6XHRcbjUyMzg6XHRcdFx0aWYgKGNvbmRfYWNjZXB0X21lbW9yeSh6b25lLCAwLCBhbGxvY19mbGFncykpXG41MjM5Olx0XHRcdFx0Z290byByZXRyeV90aGlzX3pvbmU7XG41MjQwOlx0XG41MjQxOlx0XHRcdC8qIFRyeSBhZ2FpbiBpZiB6b25lIGhhcyBkZWZlcnJlZCBwYWdlcyAqL1xuNTI0MjpcdFx0XHRpZiAoZGVmZXJyZWRfcGFnZXNfZW5hYmxlZCgpKSB7XG41MjQzOlx0XHRcdFx0aWYgKF9kZWZlcnJlZF9ncm93X3pvbmUoem9uZSwgMCkpXG41MjQ0Olx0XHRcdFx0XHRnb3RvIHJldHJ5X3RoaXNfem9uZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ5NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlZXAgRGl2ZSBpbnRvIGBjdXJyZW50X2dmcF9jb250ZXh0YCBVc2FnZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MgdHJhY2UgdGhpcyBgY3VycmVudF9nZnBfY29udGV4dGAgdmFyaWFibGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHV0aWxpemVkIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBtbS9wYWdlX2FsbG9jLmNgIGZpbGUsIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gc2VlIHRoZSBjb3JlIGFsbG9jYXRpb24gbG9naWMuIEJ1dCBvZiBjb3Vyc2UsIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGEgY29tcGxleCBiZWFzdCwgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGNvdWxkIGJlIGFueXdoZXJlLiBTbyBJJiMzOTtsbCBicm9hZGVuIHRoZSBzZWFyY2gsIGxvb2tpbmcgYmV5b25kIGp1c3QgdGhhdCBvbmUgZmlsZS4gTXkgZ29hbCBpcyB0byBtYXAgb3V0IGV2ZXJ5IGNhbGwgc2l0ZSBhbmQgZGV0ZXJtaW5lIGhvdyBgY3VycmVudF9nZnBfY29udGV4dGAgaW5mbHVlbmNlcyB0aGUgYWxsb2NhdGlvbiBiZWhhdmlvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgaXTigJlzIGEgZ2xvYmFsIHZhcmlhYmxlLCB0aHJlYWQgbG9jYWwsIG9yIGhvdyBpdCBpcyBiZWluZyBjaGFuZ2VkIHRvIGluZmx1ZW5jZSBwYWdlIGFsbG9jYXRpb24uIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBhc3BlY3RzIG9mIGFsbG9jYXRpb24gYXJlIGNvbnRyb2xsZWQgdmlhIGBnZnBfY29udGV4dGAuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgaGlkZGVuIGRlcGVuZGVuY2llcyBvciBpbnRlcmFjdGlvbnMgdGhhdCBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgb2J2aW91cy4gVGhpcyBpbnZlc3RpZ2F0aW9uIHNob3VsZCBoZWxwIG1lIGRldGVybWluZSB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoZSB3YXkgdGhpcyBjb250ZXh0IGlzIGJlaW5nIHV0aWxpemVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjdXJyZW50X2dmcF9jb250ZXh0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYz0zNzUyPWFsbG9jX2ZsYWdzX25vZnJhZ21lbnQoc3RydWN0IHpvbmUgKnpvbmUsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy0zNzg0LVxubW0vcGFnZV9hbGxvYy5jOjM3ODU6LyogTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgY3VycmVudF9nZnBfY29udGV4dCgpIHdoaWNoIGNhbiBjaGFuZ2UgZ2ZwX21hc2sgKi9cbm1tL3BhZ2VfYWxsb2MuYy0zNzg2LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzX2NtYShnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDM4Mz12b2lkIGZzX3JlY2xhaW1fYWNxdWlyZShnZnBfdCBnZnBfbWFzaylcbm1tL3BhZ2VfYWxsb2MuYy00Mzg0LXtcbm1tL3BhZ2VfYWxsb2MuYzo0Mzg1Olx0Z2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKTtcbm1tL3BhZ2VfYWxsb2MuYy00Mzg2LVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz00NDAwPXZvaWQgZnNfcmVjbGFpbV9yZWxlYXNlKGdmcF90IGdmcF9tYXNrKVxubW0vcGFnZV9hbGxvYy5jLTQ0MDEte1xubW0vcGFnZV9hbGxvYy5jOjQ0MDI6XHRnZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spO1xubW0vcGFnZV9hbGxvYy5jLTQ0MDMtXG4tLVxubW0vcGFnZV9hbGxvYy5jPTUxNjA9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MjA5LVx0Z2ZwIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbm1tL3BhZ2VfYWxsb2MuYzo1MjEwOlx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xubW0vcGFnZV9hbGxvYy5jLTUyMTEtXHRpZiAoIXByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgXHUwMDI2YWMsIFx1MDAyNmdmcCwgXHUwMDI2YWxsb2NfZmxhZ3MpKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz01Mzg0PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU0MTktXHQgKi9cbm1tL3BhZ2VfYWxsb2MuYzo1NDIwOlx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xubW0vcGFnZV9hbGxvYy5jLTU0MjEtXHRhbGxvY19nZnAgPSBnZnA7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTcyODQ9aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MzEyLVxubW0vcGFnZV9hbGxvYy5jOjczMTM6XHRnZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spO1xubW0vcGFnZV9hbGxvYy5jLTczMTQtXHRpZiAoX19hbGxvY19jb250aWdfdmVyaWZ5X2dmcF9tYXNrKGdmcF9tYXNrLCAoZ2ZwX3QgKilcdTAwMjZjYy5nZnBfbWFzaykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MTkKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQ3VycmVudCBHRlAgQ29udGV4dCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXkgb2YgdGhlIGxhbmQgaGVyZS4gTXkgaW1tZWRpYXRlIHByaW9yaXR5IGlzIHRvIGV4YW1pbmUgdGhlIHN0YXRlIG9mIGBjdXJyZW50X2dmcF9jb250ZXh0YC4gVGhpcyB2YXJpYWJsZSwgb3Igb2JqZWN0LCB3aGF0ZXZlciBpdCBtaWdodCBiZSwgaG9sZHMgdGhlIGtleSB0byB0aGUgY3VycmVudCBvcGVyYXRpbmcgZW52aXJvbm1lbnQgd2l0aGluIHRoZSBHRlAgKEdyZWVuIEZsdW9yZXNjZW50IFByb3RlaW4pIGFwcGxpY2F0aW9uLiBJdCYjMzk7cyB0aGUgZ3JvdW5kaW5nIHBvaW50LCB0aGUgcmVmZXJlbmNlLCB0aGUgJiMzNDt5b3UgYXJlIGhlcmUmIzM0OyBtYXJrZXIuIEtub3dpbmcgaXRzIGNvbnRlbnRzLCBpdHMgcHJvcGVydGllcywgaXRzIHN0cnVjdHVyZSwgd2lsbCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB3aGF0JiMzOTtzIGdvaW5nIG9uIGFuZCB3aGVyZSBJIGNhbiBtYWtlIHByb2dyZXNzLiBJIG5lZWQgdG8ga25vdyAqZXhhY3RseSogd2hhdCB0aGlzIHJlcHJlc2VudHMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW5saW5lLipjdXJyZW50X2dmcF9jb250ZXh0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaD0yMTU9c3RhdGljIGlubGluZSBib29sIGluX3Zmb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0yNDctICovXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6MjQ4OnN0YXRpYyBpbmxpbmUgZ2ZwX3QgY3VycmVudF9nZnBfY29udGV4dChnZnBfdCBmbGFncylcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0yNDkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODI3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nIHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGF0IGNvZGU6CgoqKkRpdmluZyBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IChtbS5oKSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHNvbWUgbWVtb3J5IG1hbmFnZW1lbnQgZGV0YWlscy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGFkZHJlc3Mgc3BhY2VzIGFuZCBtZW1vcnkgY29udGV4dHMuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBpbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjQ4LiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgZGVmaW5pdGlvbnMgb3Igc3RydWN0dXJlcyByZWxhdGVkIHRvIHByb2Nlc3MgbWVtb3J5IG1hcHMgKG1tX3N0cnVjdCkgb3IgcGVyaGFwcyBkZXRhaWxzIGFib3V0IGhvdyB0aGVzZSBtYXBzIGludGVyYWN0IHdpdGggdGhlIHBhZ2UgdGFibGVzLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHZpcnR1YWwgYWRkcmVzc2VzIGFyZSB0cmFuc2xhdGVkIHRvIHBoeXNpY2FsIGFkZHJlc3NlcyBhbmQgaG93IHRoZSBrZXJuZWwgdHJhY2tzIHRoZSBtZW1vcnkgYWxsb2NhdGVkIHRvIGVhY2ggcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgb3Igc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCwgYXMgdGhlc2UgYXJlIGNyaXRpY2FsIGZvciBlbnN1cmluZyBkYXRhIGNvbnNpc3RlbmN5IGFuZCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyBpbiBhIG11bHRpdGhyZWFkZWQgZW52aXJvbm1lbnQuIEZyb20gdGhlcmUsIEkgY2FuIGJldHRlciB1bmRlcnN0YW5kIGFuZCBkZWJ1ZyBjZXJ0YWluIG1lbW9yeS1yZWxhdGVkIHN5c3RlbSBjYWxscyBJIHdhcyBkZWFsaW5nIHdpdGggZWFybGllci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0MDpcdH1cbiAyNDE6XHRcbiAyNDI6XHQvKlxuIDI0MzpcdCAqIEFwcGxpZXMgcGVyLXRhc2sgZ2ZwIGNvbnRleHQgdG8gdGhlIGdpdmVuIGFsbG9jYXRpb24gZmxhZ3MuXG4gMjQ0Olx0ICogUEZfTUVNQUxMT0NfTk9JTyBpbXBsaWVzIEdGUF9OT0lPXG4gMjQ1Olx0ICogUEZfTUVNQUxMT0NfTk9GUyBpbXBsaWVzIEdGUF9OT0ZTXG4gMjQ2Olx0ICogUEZfTUVNQUxMT0NfUElOICBpbXBsaWVzICFHRlBfTU9WQUJMRVxuIDI0NzpcdCAqL1xuIDI0ODpcdHN0YXRpYyBpbmxpbmUgZ2ZwX3QgY3VycmVudF9nZnBfY29udGV4dChnZnBfdCBmbGFncylcbiAyNDk6XHR7XG4gMjUwOlx0XHR1bnNpZ25lZCBpbnQgcGZsYWdzID0gUkVBRF9PTkNFKGN1cnJlbnQtXHUwMDNlZmxhZ3MpO1xuIDI1MTpcdFxuIDI1MjpcdFx0aWYgKHVubGlrZWx5KHBmbGFncyBcdTAwMjYgKFBGX01FTUFMTE9DX05PSU8gfCBQRl9NRU1BTExPQ19OT0ZTIHwgUEZfTUVNQUxMT0NfUElOKSkpIHtcbiAyNTM6XHRcdFx0LypcbiAyNTQ6XHRcdFx0ICogTk9JTyBpbXBsaWVzIGJvdGggTk9JTyBhbmQgTk9GUyBhbmQgaXQgaXMgYSB3ZWFrZXIgY29udGV4dFxuIDI1NTpcdFx0XHQgKiBzbyBhbHdheXMgbWFrZSBzdXJlIGl0IG1ha2VzIHByZWNlZGVuY2VcbiAyNTY6XHRcdFx0ICovXG4gMjU3Olx0XHRcdGlmIChwZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DX05PSU8pXG4gMjU4Olx0XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+KF9fR0ZQX0lPIHwgX19HRlBfRlMpO1xuIDI1OTpcdFx0XHRlbHNlIGlmIChwZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DX05PRlMpXG4gMjYwOlx0XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+X19HRlBfRlM7XG4gMjYxOlx0XG4gMjYyOlx0XHRcdGlmIChwZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DX1BJTilcbiAyNjM6XHRcdFx0XHRmbGFncyBcdTAwMjY9IH5fX0dGUF9NT1ZBQkxFO1xuIDI2NDpcdFx0fVxuIDI2NTpcdFx0cmV0dXJuIGZsYWdzO1xuIDI2NjpcdH1cbiAyNjc6XHRcbiAyNjg6XHQjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiAyNjk6XHRleHRlcm4gdm9pZCBfX2ZzX3JlY2xhaW1fYWNxdWlyZSh1bnNpZ25lZCBsb25nIGlwKTtcbiAyNzA6XHRleHRlcm4gdm9pZCBfX2ZzX3JlY2xhaW1fcmVsZWFzZSh1bnNpZ25lZCBsb25nIGlwKTtcbiAyNzE6XHRleHRlcm4gdm9pZCBmc19yZWNsYWltX2FjcXVpcmUoZ2ZwX3QgZ2ZwX21hc2spO1xuIDI3MjpcdGV4dGVybiB2b2lkIGZzX3JlY2xhaW1fcmVsZWFzZShnZnBfdCBnZnBfbWFzayk7XG4gMjczOlx0I2Vsc2VcbiAyNzQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgX19mc19yZWNsYWltX2FjcXVpcmUodW5zaWduZWQgbG9uZyBpcCkgeyB9XG4gMjc1Olx0c3RhdGljIGlubGluZSB2b2lkIF9fZnNfcmVjbGFpbV9yZWxlYXNlKHVuc2lnbmVkIGxvbmcgaXApIHsgfVxuIDI3NjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBmc19yZWNsYWltX2FjcXVpcmUoZ2ZwX3QgZ2ZwX21hc2spIHsgfVxuIDI3NzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBmc19yZWNsYWltX3JlbGVhc2UoZ2ZwX3QgZ2ZwX21hc2spIHsgfVxuIDI3ODpcdCNlbmRpZlxuIDI3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzYxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgR0ZQIENvbnRleHQgSXNzdWUgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGV4cGVydCBleWUgaG9uZXMgaW4gb24gdGhlIGFwcGxpY2F0aW9uIG9mIGBjdXJyZW50X2dmcF9jb250ZXh0YCB3aXRoaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4gSXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogd2UmIzM5O3JlIGFwcGx5aW5nIHBlci10YXNrIEdGUCBjb250ZXh0IGZsYWdzIChsaWtlIFBGX01FTUFMTE9DX05PSU8sIFBGX01FTUFMTE9DX05PRlMsIGFuZCBQRl9NRU1BTExPQ19QSU4pIHRvIHRoZSBzdGFuZGFyZCBnZnAgZmxhZ3MuIFRoZSBjb2RlIHdhcyAqbWlzc2luZyogdGhpcyBhcHBsaWNhdGlvbiBpbiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLiBUaGUga2V5IGlzc3VlIGhlcmU/IElmIGEgY2FsbGVyIHdhcyBvcGVyYXRpbmcgd2l0aGluIGEgYG1lbWFsbG9jX25vaW9fc2F2ZSgpYCBvciBgbWVtYWxsb2Nfbm9mc19zYXZlKClgIHNjb3BlLCB0aGUgYnVsayBhbGxvY2F0b3IgKndvdWxkbiYjMzk7dCogcHJvcGVybHkgc3RyaXAgYF9fR0ZQX0lPYCwgYF9fR0ZQX0ZTYCwgb3IgYF9fR0ZQX01PVkFCTEVgIGFjY29yZGluZyB0byB0aGUgdGFzayYjMzk7cyBmbGFncy4gVGhhdCYjMzk7cyBhIHNlcmlvdXMgb3ZlcnNpZ2h0IQoKVGhpcyBpcyBhbGwgYWJvdXQgR0ZQIGZsYWdzLCByZWNsYWltLCBhbmQgYXZvaWRpbmcgZGVhZGxvY2tzLCBhbmQgdGhhdCYjMzk7cyBwcmVjaXNlbHkgd2hhdCYjMzk7cyB0ZXN0ZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgbW0gdGVzdHMuCgpOb3csIGxldCYjMzk7cyBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcy4KCiogICBVbmluaXRpYWxpemVkIE1lbW9yeT8gTm9wZSwgSSBkb24mIzM5O3Qgc2VlIGFueSBjaGFuZ2VzIHRoYXQgd291bGQgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnkuCiogICBVc2VyLVNwYWNlIEJ1ZmZlcnM/IE5vLCBpdCYjMzk7cyBub3QgYWZmZWN0aW5nIGFueSBidWZmZXIgY29weWluZy4KKiAgIFN0cnVjdHVyZSBQYWRkaW5nL0luaXRpYWxpemF0aW9uPyBObywgbm90aGluZyB0byBzZWUgaGVyZS4KKiAgIENvbmRpdGlvbmFsIEJyYW5jaGVzIG9uIFVuaW5pdGlhbGl6ZWQgTWVtb3J5PyBEZWZpbml0ZWx5IG5vdC4KKiAgIERhdGEgTGVuZ3Rocy9Cb3VuZHMgQ2hlY2tpbmc/IE5vIGNoYW5nZXMuCiogICBDaGFuZ2luZyBaZXJvaW5nIG9mIEFsbG9jYXRlZCBQYWdlcz8gSG1tbSwgZG9lcyBgYWxsb2NfcGFnZXNfYnVsa2AgaGFuZGxlIGBfX0dGUF9aRVJPYD8gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpbXBsZW1lbnRhdGlvbuKApgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTI4MDpcdFx0XHRucl9hY2NvdW50JiM0MzsmIzQzOztcbjUyODE6XHRcbjUyODI6XHRcdFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xuNTI4MzpcdFx0XHRzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpO1xuNTI4NDpcdFx0XHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTtcbjUyODU6XHRcdH1cbjUyODY6XHRcbjUyODc6XHRcdHBjcF9zcGluX3VubG9jayhwY3ApO1xuNTI4ODpcdFxuNTI4OTpcdFx0X19jb3VudF96aWRfdm1fZXZlbnRzKFBHQUxMT0MsIHpvbmVfaWR4KHpvbmUpLCBucl9hY2NvdW50KTtcbjUyOTA6XHRcdHpvbmVfc3RhdGlzdGljcyh6b25lbGlzdF96b25lKGFjLnByZWZlcnJlZF96b25lcmVmKSwgem9uZSwgbnJfYWNjb3VudCk7XG41MjkxOlx0XG41MjkyOlx0b3V0OlxuNTI5MzpcdFx0cmV0dXJuIG5yX3BvcHVsYXRlZDtcbjUyOTQ6XHRcbjUyOTU6XHRmYWlsZWQ6XG41Mjk2Olx0XHRwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7XG41Mjk3Olx0XHRpZiAocGFnZSlcbjUyOTg6XHRcdFx0cGFnZV9hcnJheVtucl9wb3B1bGF0ZWQmIzQzOyYjNDM7XSA9IHBhZ2U7XG41Mjk5Olx0XHRnb3RvIG91dDtcbjUzMDA6XHR9XG41MzAxOlx0RVhQT1JUX1NZTUJPTF9HUEwoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YpO1xuNTMwMjpcdFxuNTMwMzpcdC8qXG41MzA0Olx0ICogZnJlZV9wYWdlc19idWxrIC0gRnJlZSBhbiBhcnJheSBvZiBvcmRlci0wIHBhZ2VzXG41MzA1Olx0ICogQHBhZ2VfYXJyYXk6IEFycmF5IG9mIHBhZ2VzIHRvIGZyZWVcbjUzMDY6XHQgKiBAbnJfcGFnZXM6IFRoZSBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIGFycmF5XG41MzA3Olx0ICpcbjUzMDg6XHQgKiBGcmVlIHRoZSBvcmRlci0wIHBhZ2VzLiBBZGphY2VudCBlbnRyaWVzIHdob3NlIFBGTnMgZm9ybSBhIGNvbnRpZ3VvdXNcbjUzMDk6XHQgKiBydW4gYXJlIHJlbGVhc2VkIHdpdGggYSBzaW5nbGUgX19mcmVlX2NvbnRpZ19yYW5nZSgpIGNhbGwuXG41MzEwOlx0ICpcbjUzMTE6XHQgKiBUaGlzIGFzc3VtZXMgcGFnZV9hcnJheSBpcyBzb3J0ZWQgaW4gYXNjZW5kaW5nIFBGTiBvcmRlci4gV2l0aG91dCB0aGF0LFxuNTMxMjpcdCAqIHRoZSBmdW5jdGlvbiBzdGlsbCBmcmVlcyBhbGwgcGFnZXMsIGJ1dCBjb250aWd1b3VzIHJ1bnMgbWF5IG5vdCBiZVxuNTMxMzpcdCAqIGRldGVjdGVkIGFuZCB0aGUgZnJlZWluZyBwYXR0ZXJuIGNhbiBkZWdyYWRlIHRvIGZyZWVpbmcgb25lIHBhZ2UgYXQgYVxuNTMxNDpcdCAqIHRpbWUuXG41MzE1Olx0ICpcbjUzMTY6XHQgKiBDb250ZXh0OiBTbGVlcGFibGUgcHJvY2VzcyBjb250ZXh0IG9ubHk7IGNhbGxzIGNvbmRfcmVzY2hlZCgpXG41MzE3Olx0ICovXG41MzE4Olx0dm9pZCBmcmVlX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuNTMxOTpcdHtcbjUzMjA6XHRcdHdoaWxlIChucl9wYWdlcykge1xuNTMyMTpcdFx0XHR1bnNpZ25lZCBsb25nIG5yX2NvbnRpZyA9IG51bV9wYWdlc19jb250aWd1b3VzKHBhZ2VfYXJyYXksIG5yX3BhZ2VzKTtcbjUzMjI6XHRcbjUzMjM6XHRcdFx0X19mcmVlX2NvbnRpZ19yYW5nZShwYWdlX3RvX3BmbigqcGFnZV9hcnJheSksIG5yX2NvbnRpZyk7XG41MzI0Olx0XG41MzI1Olx0XHRcdG5yX3BhZ2VzIC09IG5yX2NvbnRpZztcbjUzMjY6XHRcdFx0cGFnZV9hcnJheSAmIzQzOz0gbnJfY29udGlnO1xuNTMyNzpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjUzMjg6XHRcdH1cbjUzMjk6XHR9XG41MzMwOlx0XG41MzMxOlx0c3RhdGljIGlubGluZSBib29sIGFsbG9jX29yZGVyX2FsbG93ZWQoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG41MzMyOlx0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuNTMzMzpcdHtcbjUzMzQ6XHRcdGlmIChhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfTk9MT0NLKVxuNTMzNTpcdFx0XHRyZXR1cm4gcGNwX2FsbG93ZWRfb3JkZXIob3JkZXIpO1xuNTMzNjpcdFxuNTMzNzpcdFx0LypcbjUzMzg6XHRcdCAqIFRoZXJlIGFyZSBzZXZlcmFsIHBsYWNlcyB3aGVyZSB3ZSBhc3N1bWUgdGhhdCB0aGUgb3JkZXIgdmFsdWUgaXMgc2FuZVxuNTMzOTpcdFx0ICogc28gYmFpbCBvdXQgZWFybHkgaWYgdGhlIHJlcXVlc3QgaXMgb3V0IG9mIGJvdW5kLlxuNTM0MDpcdFx0ICovXG41MzQxOlx0XHRyZXR1cm4gIShXQVJOX09OX09OQ0VfR0ZQKG9yZGVyIFx1MDAzZSBNQVhfUEFHRV9PUkRFUiwgZ2ZwKSk7XG41MzQyOlx0fVxuNTM0MzpcdFxuNTM0NDpcdHN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvY19ub2xvY2tfYWxsb3dlZCh2b2lkKVxuNTM0NTpcdHtcbjUzNDY6XHRcdGlmICghY2FuX3NwaW5fdHJ5bG9jaygpKVxuNTM0NzpcdFx0XHRyZXR1cm4gZmFsc2U7XG41MzQ4Olx0XG41MzQ5Olx0XHQvKiBCYWlsb3V0LCBzaW5jZSBfZGVmZXJyZWRfZ3Jvd196b25lKCkgbmVlZHMgdG8gdGFrZSBhIGxvY2sgKi9cbjUzNTA6XHRcdGlmIChkZWZlcnJlZF9wYWdlc19lbmFibGVkKCkpXG41MzUxOlx0XHRcdHJldHVybiBmYWxzZTtcbjUzNTI6XHRcbjUzNTM6XHRcdHJldHVybiB0cnVlO1xuNTM1NDpcdH1cbjUzNTU6XHRcbjUzNTY6XHQvKlxuNTM1NzpcdCAqIEdGUCBmbGFncyB0byBzZXQgZm9yIEFMTE9DX05PTE9DSyBpLmUuIGFsbG9jX3BhZ2VzX25vbG9jaygpLlxuNTM1ODpcdCAqXG41MzU5Olx0ICogRG8gbm90IHNwZWNpZnkgX19HRlBfRElSRUNUX1JFQ0xBSU0sIHNpbmNlIGRpcmVjdCBjbGFpbSBpcyBub3QgYWxsb3dlZC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY3NQoJCQkJCQkJb3V0cHV0OiAyMzAKCQkJCQkJCXRob3VnaHRzOiAzMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGFnZSBBbGxvY2F0aW9uIENvZGUqKgoKT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gYHByZXBfbmV3X3BhZ2VgIHRha2VzIGNhcmUgb2YgdGhlIGBfX0dGUF9aRVJPYCBmbGFnIGlmIGl0JiMzOTtzIHRoZXJlLiBUaGUgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIGZ1bmN0aW9uIGlzIHNvbGVseSByZXNwb25zaWJsZSBmb3IgbWFza2luZyBvdXQgY2VydGFpbiBgZ2ZwYCBmbGFnczogc3BlY2lmaWNhbGx5LCBgX19HRlBfSU9gLCBgX19HRlBfRlNgLCBhbmQgYF9fR0ZQX01PVkFCTEVgLiBJdCBkb2VzbiYjMzk7dCB0b3VjaCBhbnl0aGluZyByZWxhdGVkIHRvIGluaXRpYWxpemF0aW9uIG9yIHplcm9pbmcsIGFuZCBpdCYjMzk7cyBhbGwgYWJvdXQgZW5zdXJpbmcgdGhhdCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcmVzcGVjdHMgdGFzayBjb250ZXh0IHJlc3RyaWN0aW9ucyBkdXJpbmcgYnVsayBwYWdlIGFsbG9jYXRpb24uIFRoYXQmIzM5O3MgZ29vZDsgaXQga2VlcHMgdGhpbmdzIGNvbnN0cmFpbmVkIGFuZCBwcmVkaWN0YWJsZS4KCk5vdywgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLCBsZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OgoKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZT8gTm9wZS4gTm90aGluZyBsaWtlIHRoYXQgaGVyZS4KMi4gIEFueSBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBtaWdodCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcz8gTm8sIEkgZG9uJiMzOTt0IHNlZSBhbnl0aGluZyBzdXNwaWNpb3VzLgozLiAgQXJlIHdlIGFsbG9jYXRpbmcgYW5kIGluaXRpYWxpemluZyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBOb3BlLCB0aGUgaW5pdGlhbGl6YXRpb24gaXMgaGFuZGxlZCBzZXBhcmF0ZWx5Lgo0LiAgQW55dGhpbmcgdG8gZG8gd2l0aCBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM/IE5lZ2F0aXZlLgoKU28sIHdoZXJlIGRvZXMgdGhpcyBsZWF2ZSB1cyB3aXRoIEtBU0FOIGFuZCBLTVNBTj8KCldlbGwsIExPQ0tERVAgaXMgYWxyZWFkeSBrZWVwaW5nIGFuIGV5ZSBvbiBsb2NraW5nIGRlYWRsb2NrcywgYW5kIEtBU0FOIGhhbmRsZXMgbWVtb3J5IHNhZmV0eS4gVGhlIHBhcnQgSSYjMzk7bSBmb2N1c2luZyBvbiBpc24mIzM5O3QgYWJvdXQgbWVtb3J5IHNhZmV0eSBjb25jZXJucyBvciBsb2NraW5nLCBidXQgd2hhdCBLTVNBTiBpcyBmb3I6IGl0IGNoZWNrcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBUaGlzIHBhdGNoIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhvc2UgY29uY2VybnM7IGl0JiMzOTtzIGEgdmVyeSBzdHJhaWdodGZvcndhcmQgZmxhZyBtYW5hZ2VtZW50LgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLgoKT2theSwgSSYjMzk7bSByZWFkeSB0byBwcmVwYXJlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYCB0byBhcHBseSBwZXItdGFzayBHRlAgY29udGV4dCByZXN0cmljdGlvbnMgdmlhIGBjdXJyZW50X2dmcF9jb250ZXh0KGdmcClgLiBUaGlzIGVuc3VyZXMgdGFzay1sZXZlbCBmbGFncyBzdWNoIGFzIFBGX01FTUFMTE9DX05PSU8sIFBGX01FTUFMTE9DX05PRlMsIGFuZCBQRl9NRU1BTExPQ19QSU4gY29ycmVjdGx5IG1hc2sgR0ZQIGZsYWdzIChlLmcuLCBzdHJpcHBpbmcgX19HRlBfSU8sIF9fR0ZQX0ZTLCBfX0dGUF9NT1ZBQkxFKSB0byBwcmV2ZW50IGRlYWRsb2NrcyBkdXJpbmcgcmVjbGFpbS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeTpcbjEuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIG1vZGlmeSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLlxuMi4gSXQgZG9lcyBub3QgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uLCB6ZXJvaW5nLCBvciBzdHJ1Y3QgZmllbGQgcG9wdWxhdGlvbi5cbjMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBicmFuY2hlcyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhIG9yIGFmZmVjdCBidWZmZXIgYm91bmRzL2xlbmd0aHMuXG5cbkFueSByZWNsYWltIG9yIGxvY2tpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gdGFzayBHRlAgY29udGV4dHMgYXJlIHRyYWNrZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgbWVtb3J5IGFsbG9jIGRlYnVnZ2luZywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgIHRvIGFwcGx5IHBlci10YXNrIEdGUCBjb250ZXh0IHJlc3RyaWN0aW9ucyB2aWEgYGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKWAuIFRoaXMgZW5zdXJlcyB0YXNrLWxldmVsIGZsYWdzIHN1Y2ggYXMgUEZfTUVNQUxMT0NfTk9JTywgUEZfTUVNQUxMT0NfTk9GUywgYW5kIFBGX01FTUFMTE9DX1BJTiBjb3JyZWN0bHkgbWFzayBHRlAgZmxhZ3MgKGUuZy4sIHN0cmlwcGluZyBfX0dGUF9JTywgX19HRlBfRlMsIF9fR0ZQX01PVkFCTEUpIHRvIHByZXZlbnQgZGVhZGxvY2tzIGR1cmluZyByZWNsYWltLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OlxuMS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UuXG4yLiBJdCBkb2VzIG5vdCBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIHplcm9pbmcsIG9yIHN0cnVjdCBmaWVsZCBwb3B1bGF0aW9uLlxuMy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGVzIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEgb3IgYWZmZWN0IGJ1ZmZlciBib3VuZHMvbGVuZ3Rocy5cblxuQW55IHJlY2xhaW0gb3IgbG9ja2luZyBpc3N1ZXMgcmVsYXRlZCB0byB0YXNrIEdGUCBjb250ZXh0cyBhcmUgdHJhY2tlZCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBtZW1vcnkgYWxsb2MgZGVidWdnaW5nLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQwOjU2LjE0Nzc0NDQ5M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MTI0MzU0MDUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19wYWdlc19idWxrX25vcHJvZlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgIHRvIGFwcGx5IHBlci10YXNrIEdGUCBjb250ZXh0IHJlc3RyaWN0aW9ucyB2aWEgYGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKWAuIFRoaXMgZW5zdXJlcyB0YXNrLWxldmVsIGZsYWdzIHN1Y2ggYXMgUEZfTUVNQUxMT0NfTk9JTywgUEZfTUVNQUxMT0NfTk9GUywgYW5kIFBGX01FTUFMTE9DX1BJTiBjb3JyZWN0bHkgbWFzayBHRlAgZmxhZ3MgKGUuZy4sIHN0cmlwcGluZyBfX0dGUF9JTywgX19HRlBfRlMsIF9fR0ZQX01PVkFCTEUpIHRvIHByZXZlbnQgZGVhZGxvY2tzIGR1cmluZyByZWNsYWltLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnk6XFxuMS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UuXFxuMi4gSXQgZG9lcyBub3QgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uLCB6ZXJvaW5nLCBvciBzdHJ1Y3QgZmllbGQgcG9wdWxhdGlvbi5cXG4zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYnJhbmNoZXMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBhZmZlY3QgYnVmZmVyIGJvdW5kcy9sZW5ndGhzLlxcblxcbkFueSByZWNsYWltIG9yIGxvY2tpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gdGFzayBHRlAgY29udGV4dHMgYXJlIHRyYWNrZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgbWVtb3J5IGFsbG9jIGRlYnVnZ2luZywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHBhZ2UgYWxsb2NhdG9yIGZ1bmN0aW9uIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKCkgaW4gbW0vcGFnZV9hbGxvYy5jIHRvIGhvbm9yIHRoZSBjYWxsaW5nIHRhc2sncyBzY29wZWQgR0ZQIGNvbnRleHQgdmlhIGN1cnJlbnRfZ2ZwX2NvbnRleHQoKS4gVGhpcyBhbHRlcnMgYWxsb2NhdGlvbiBmbGFncyAoZS5nLiBzdHJpcHBpbmcgX19HRlBfRlMsIF9fR0ZQX0lPLCBvciBfX0dGUF9NT1ZBQkxFIHVuZGVyIFBGX01FTUFMTE9DX05PRlMsIFBGX01FTUFMTE9DX05PSU8sIG9yIFBGX01FTUFMTE9DX1BJTikgZHVyaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIHJlcXVlc3RzLCB3aGljaCBkaXJlY3RseSBhZmZlY3RzIHJlYWNoYWJsZSBzdWJzeXN0ZW1zIHN1Y2ggYXMgdm1hbGxvYywgc3BsaWNlLCBpb191cmluZywgYW5kIHBhZ2UgcG9vbHMuIFRoaXMgY29yZSBtbSBsb2dpYyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDA6NTYuMTQ3NzQ4NzQzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODA1NTUwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0MDFlZWFkYmI0Zjk3MzkyYjUwYmRiYTdiNTNhMDYzNmU2ZTkxODFhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDE1IDA5OjQwOjU1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xcbmluZGV4IDEyZmFjOTA4NGM0ODMuLjNiZTcyODhhMWFhNzEgMTAwNjQ0XFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXFxuKysrIGIvbW0vcGFnZV9hbGxvYy5jXFxuQEAgLTUyMDcsNiArNTIwNyw3IEBAIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG4gXFxuIFxcdC8qIE1heSBzZXQgQUxMT0NfTk9GUkFHTUVOVCwgZnJhZ21lbnRhdGlvbiB3aWxsIHJldHVybiAxIHBhZ2UuICovXFxuIFxcdGdmcCBcXHUwMDI2PSBnZnBfYWxsb3dlZF9tYXNrO1xcbitcXHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XFxuIFxcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcXHUwMDI2YWMsIFxcdTAwMjZnZnAsIFxcdTAwMjZhbGxvY19mbGFncykpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDA6NTYuNjI5MDc3Mzg0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMzI0OTc3NTU1MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBwYWdlIGFsbG9jYXRvciBmdW5jdGlvbiBhbGxvY19wYWdlc19idWxrX25vcHJvZigpIGluIG1tL3BhZ2VfYWxsb2MuYyB0byBob25vciB0aGUgY2FsbGluZyB0YXNrJ3Mgc2NvcGVkIEdGUCBjb250ZXh0IHZpYSBjdXJyZW50X2dmcF9jb250ZXh0KCkuIFRoaXMgYWx0ZXJzIGFsbG9jYXRpb24gZmxhZ3MgKGUuZy4gc3RyaXBwaW5nIF9fR0ZQX0ZTLCBfX0dGUF9JTywgb3IgX19HRlBfTU9WQUJMRSB1bmRlciBQRl9NRU1BTExPQ19OT0ZTLCBQRl9NRU1BTExPQ19OT0lPLCBvciBQRl9NRU1BTExPQ19QSU4pIGR1cmluZyBidWxrIHBhZ2UgYWxsb2NhdGlvbiByZXF1ZXN0cywgd2hpY2ggZGlyZWN0bHkgYWZmZWN0cyByZWFjaGFibGUgc3Vic3lzdGVtcyBzdWNoIGFzIHZtYWxsb2MsIHNwbGljZSwgaW9fdXJpbmcsIGFuZCBwYWdlIHBvb2xzLiBUaGlzIGNvcmUgbW0gbG9naWMgY2hhbmdlIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDAxZWVhZGJiNGY5NzM5MmI1MGJkYmE3YjUzYTA2MzZlNmU5MTgxYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDA5OjQwOjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXG5pbmRleCAxMmZhYzkwODRjNDgzLi4zYmU3Mjg4YTFhYTcxIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXG4rKysgYi9tbS9wYWdlX2FsbG9jLmNcbkBAIC01MjA3LDYgKzUyMDcsNyBAQCB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG4gXG4gXHQvKiBNYXkgc2V0IEFMTE9DX05PRlJBR01FTlQsIGZyYWdtZW50YXRpb24gd2lsbCByZXR1cm4gMSBwYWdlLiAqL1xuIFx0Z2ZwIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbitcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcbiBcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcdTAwMjZhYywgXHUwMDI2Z2ZwLCBcdTAwMjZhbGxvY19mbGFncykpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDA6NTYuNjI5MDc4NjU0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjgxNjY0NDEzOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgYG1tL3BhZ2VfYWxsb2MuY2AgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBtb2RpZmllcyBgbW0vcGFnZV9hbGxvYy5jYC4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgbGluZSB0aGF0IGNhbGxzIGBjdXJyZW50X2dmcF9jb250ZXh0KGdmcClgIHJpZ2h0IGJlZm9yZSB0aGUgYHByZXBhcmVfYWxsb2NfcGFnZXNgIGNhbGwuIFRoaXMgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IGFuZCBpbXBsaWNhdGlvbnMgaGVyZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byByZXZpZXcgdGhlIGdpdCBoaXN0b3J5IG9mIHRoaXMgZmlsZSBpbiB0aGF0IGFyZWEuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLlxuXG5JJ20gdGhpbmtpbmcsIFwiTGV0J3MgY2hlY2sgdGhlIGdpdCBsb2cgb3IganVzdCBicm93c2UgdGhhdCBzZWN0aW9uIG9mIGBtbS9wYWdlX2FsbG9jLmNgXCIuIEknbGwgcXVpY2tseSBuZWVkIHRvIHNlZSB0aGUgc3Vycm91bmRpbmcgY29kZSwgYW5kIHVuZGVyc3RhbmQgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyB1c2VkIGFuZCBpdHMgcGFyYW1ldGVycywgYW5kIHNvIEkgbWlnaHQgYXMgd2VsbCBqdXN0IGByZWFkLWZpbGVgIGFuZCBjaGVjayB0aGUgZmlsZSBkaXJlY3RseS4gVGhhdCB3aWxsIGJlIHRoZSBxdWlja2VzdCBwYXRoIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBgZ2ZwYCBmbGFnIGlzIGJlaW5nIG1vZGlmaWVkLCB3aHkgdGhpcyBjb250ZXh0IGlzIGJlaW5nIHNldCwgYW5kIHdoYXQgZWZmZWN0IHRoaXMgd2lsbCBoYXZlIG9uIHBhZ2UgYWxsb2NhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg3NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQxOjI0Ljc5NTUyMzI0MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODk0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTE5NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTE5NTpcXHRcXG41MTk2OlxcdCNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxcbjUxOTc6XFx0XFx0LypcXG41MTk4OlxcdFxcdCAqIFBBR0VfT1dORVIgbWF5IHJlY3Vyc2UgaW50byB0aGUgYWxsb2NhdG9yIHRvIGFsbG9jYXRlIHNwYWNlIHRvXFxuNTE5OTpcXHRcXHQgKiBzYXZlIHRoZSBzdGFjayB3aXRoIHBhZ2VzZXRzLmxvY2sgaGVsZC4gUmVsZWFzaW5nL3JlYWNxdWlyaW5nXFxuNTIwMDpcXHRcXHQgKiByZW1vdmVzIG11Y2ggb2YgdGhlIHBlcmZvcm1hbmNlIGJlbmVmaXQgb2YgYnVsayBhbGxvY2F0aW9uIHNvXFxuNTIwMTpcXHRcXHQgKiBmb3JjZSB0aGUgY2FsbGVyIHRvIGFsbG9jYXRlIG9uZSBwYWdlIGF0IGEgdGltZSBhcyBpdCdsbCBoYXZlXFxuNTIwMjpcXHRcXHQgKiBzaW1pbGFyIHBlcmZvcm1hbmNlIHRvIGFkZGVkIGNvbXBsZXhpdHkgdG8gdGhlIGJ1bGsgYWxsb2NhdG9yLlxcbjUyMDM6XFx0XFx0ICovXFxuNTIwNDpcXHRcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxcbjUyMDU6XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuNTIwNjpcXHQjZW5kaWZcXG41MjA3OlxcdFxcbjUyMDg6XFx0XFx0LyogTWF5IHNldCBBTExPQ19OT0ZSQUdNRU5ULCBmcmFnbWVudGF0aW9uIHdpbGwgcmV0dXJuIDEgcGFnZS4gKi9cXG41MjA5OlxcdFxcdGdmcCBcXHUwMDI2PSBnZnBfYWxsb3dlZF9tYXNrO1xcbjUyMTA6XFx0XFx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xcbjUyMTE6XFx0XFx0aWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFxcdTAwMjZhYywgXFx1MDAyNmdmcCwgXFx1MDAyNmFsbG9jX2ZsYWdzKSlcXG41MjEyOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjUyMTM6XFx0XFxuNTIxNDpcXHRcXHQvKiBGaW5kIGFuIGFsbG93ZWQgbG9jYWwgem9uZSB0aGF0IG1lZXRzIHRoZSBsb3cgd2F0ZXJtYXJrLiAqL1xcbjUyMTU6XFx0XFx0eiA9IGFjLnByZWZlcnJlZF96b25lcmVmO1xcbjUyMTY6XFx0XFx0Zm9yX25leHRfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCBhYy5oaWdoZXN0X3pvbmVpZHgsIGFjLm5vZGVtYXNrKSB7XFxuNTIxNzpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG1hcms7XFxuNTIxODpcXHRcXG41MjE5OlxcdFxcdFxcdGlmIChjcHVzZXRzX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19DUFVTRVQpIFxcdTAwMjZcXHUwMDI2XFxuNTIyMDpcXHRcXHRcXHQgICAgIV9fY3B1c2V0X3pvbmVfYWxsb3dlZCh6b25lLCBnZnApKSB7XFxuNTIyMTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG41MjIyOlxcdFxcdFxcdH1cXG41MjIzOlxcdFxcbjUyMjQ6XFx0XFx0XFx0aWYgKG5yX29ubGluZV9ub2RlcyBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgem9uZSAhPSB6b25lbGlzdF96b25lKGFjLnByZWZlcnJlZF96b25lcmVmKSBcXHUwMDI2XFx1MDAyNlxcbjUyMjU6XFx0XFx0XFx0ICAgIHpvbmVfdG9fbmlkKHpvbmUpICE9IHpvbmVsaXN0X25vZGVfaWR4KGFjLnByZWZlcnJlZF96b25lcmVmKSkge1xcbjUyMjY6XFx0XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuNTIyNzpcXHRcXHRcXHR9XFxuNTIyODpcXHRcXG41MjI5OlxcdFxcdFxcdGNvbmRfYWNjZXB0X21lbW9yeSh6b25lLCAwLCBhbGxvY19mbGFncyk7XFxuNTIzMDpcXHRyZXRyeV90aGlzX3pvbmU6XFxuNTIzMTpcXHRcXHRcXHRtYXJrID0gd21hcmtfcGFnZXMoem9uZSwgYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19XTUFSS19NQVNLKSArIG5yX3BhZ2VzIC0gbnJfcG9wdWxhdGVkO1xcbjUyMzI6XFx0XFx0XFx0aWYgKHpvbmVfd2F0ZXJtYXJrX2Zhc3Qoem9uZSwgMCwgIG1hcmssXFxuNTIzMzpcXHRcXHRcXHRcXHRcXHR6b25lbGlzdF96b25lX2lkeChhYy5wcmVmZXJyZWRfem9uZXJlZiksXFxuNTIzNDpcXHRcXHRcXHRcXHRcXHRhbGxvY19mbGFncywgZ2ZwKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTo0MToyNC43OTU3OTg1MzJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMTM4MTYyMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqRGlnZ2luZyBpbnRvIE1lbW9yeSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBjdXJyZW50X2dmcF9jb250ZXh0YCBhbmQgYGFsbG9jX3BhZ2VzX25vcHJvZmAuIEl0J3MgbGlrZWx5IHRoYXQgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIHBsYXlzIGEgcm9sZSBpbiBob3cgYGFsbG9jX3BhZ2VzX25vcHJvZmAgYmVoYXZlcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBgY3VycmVudF9nZnBfY29udGV4dGAuIFRoZSBtb3N0IGRpcmVjdCBhcHByb2FjaCBpcyB0byBjaGVjayB0aGUgYG1tL3BhZ2VfYWxsb2MuY2AgZmlsZSwgc2luY2UgdGhhdCdzIGEgY2VudHJhbCBsb2NhdGlvbiBmb3IgbWVtb3J5IGFsbG9jYXRpb24uIEJ1dCwgb2YgY291cnNlLCBJJ2xsIG5lZWQgdG8gdXNlIGdyZXAgdG8gZmluZCBhbGwgdGhlIGluc3RhbmNlcyBvZiBgY3VycmVudF9nZnBfY29udGV4dGAsIGFjcm9zcyB0aGUga2VybmVsIHNvdXJjZSwgdG8gZ2V0IGEgYnJvYWQgcGljdHVyZSBvZiBpdHMgdXNhZ2UuIFRoYXQgc2hvdWxkIHBhaW50IGEgY2xlYXJlciBwaWN0dXJlIG9mIGl0cyBwdXJwb3NlIGFuZCBpbmZsdWVuY2Ugb24gdGhlc2UgYWxsb2NhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMzAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQxOjI3LjkzMzk2MjczMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDU2ODU1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjdXJyZW50X2dmcF9jb250ZXh0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTQxNDU9c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyMTQtXFxubW0vaHVnZV9tZW1vcnkuYzo0MjE1OlxcdFxcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQobWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSBcXHUwMDI2XFxubW0vaHVnZV9tZW1vcnkuYy00MjE2LVxcdFxcdFxcdFxcdFxcdFxcdFxcdEdGUF9SRUNMQUlNX01BU0spO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTM3NTI9YWxsb2NfZmxhZ3Nfbm9mcmFnbWVudChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMzc4NC1cXG5tbS9wYWdlX2FsbG9jLmM6Mzc4NTovKiBNdXN0IGJlIGNhbGxlZCBhZnRlciBjdXJyZW50X2dmcF9jb250ZXh0KCkgd2hpY2ggY2FuIGNoYW5nZSBnZnBfbWFzayAqL1xcbm1tL3BhZ2VfYWxsb2MuYy0zNzg2LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzX2NtYShnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00MzgzPXZvaWQgZnNfcmVjbGFpbV9hY3F1aXJlKGdmcF90IGdmcF9tYXNrKVxcbm1tL3BhZ2VfYWxsb2MuYy00Mzg0LXtcXG5tbS9wYWdlX2FsbG9jLmM6NDM4NTpcXHRnZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spO1xcbm1tL3BhZ2VfYWxsb2MuYy00Mzg2LVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQ0MDA9dm9pZCBmc19yZWNsYWltX3JlbGVhc2UoZ2ZwX3QgZ2ZwX21hc2spXFxubW0vcGFnZV9hbGxvYy5jLTQ0MDEte1xcbm1tL3BhZ2VfYWxsb2MuYzo0NDAyOlxcdGdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayk7XFxubW0vcGFnZV9hbGxvYy5jLTQ0MDMtXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTE2MD11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTIwOS1cXHRnZnAgXFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcXG5tbS9wYWdlX2FsbG9jLmM6NTIxMDpcXHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XFxubW0vcGFnZV9hbGxvYy5jLTUyMTEtXFx0aWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFxcdTAwMjZhYywgXFx1MDAyNmdmcCwgXFx1MDAyNmFsbG9jX2ZsYWdzKSlcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01Mzg0PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTQxOS1cXHQgKi9cXG5tbS9wYWdlX2FsbG9jLmM6NTQyMDpcXHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XFxubW0vcGFnZV9hbGxvYy5jLTU0MjEtXFx0YWxsb2NfZ2ZwID0gZ2ZwO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTcyODQ9aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTczMTItXFxubW0vcGFnZV9hbGxvYy5jOjczMTM6XFx0Z2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKTtcXG5tbS9wYWdlX2FsbG9jLmMtNzMxNC1cXHRpZiAoX19hbGxvY19jb250aWdfdmVyaWZ5X2dmcF9tYXNrKGdmcF9tYXNrLCAoZ2ZwX3QgKilcXHUwMDI2Y2MuZ2ZwX21hc2spKVxcbi0tXFxubW0vcGVyY3B1LmM9MTczNT12b2lkIF9fcGVyY3B1ICpwY3B1X2FsbG9jX25vcHJvZihzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduLCBib29sIHJlc2VydmVkLFxcbi0tXFxubW0vcGVyY3B1LmMtMTc0OS1cXG5tbS9wZXJjcHUuYzoxNzUwOlxcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcXG5tbS9wZXJjcHUuYy0xNzUxLVxcdC8qXFxuLS1cXG5tbS92bXNjYW4uYz02NzY5PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbi0tXFxubW0vdm1zY2FuLmMtNjc3NC1cXHRcXHQubnJfdG9fcmVjbGFpbSA9IFNXQVBfQ0xVU1RFUl9NQVgsXFxubW0vdm1zY2FuLmM6Njc3NTpcXHRcXHQuZ2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSxcXG5tbS92bXNjYW4uYy02Nzc2LVxcdFxcdC5yZWNsYWltX2lkeCA9IGdmcF96b25lKGdmcF9tYXNrKSxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4NTU9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4NjUtXFx0XFx0LnByb2FjdGl2ZV9zd2FwcGluZXNzID0gc3dhcHBpbmVzcyxcXG5tbS92bXNjYW4uYzo2ODY2OlxcdFxcdC5nZnBfbWFzayA9IChjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSBcXHUwMDI2IEdGUF9SRUNMQUlNX01BU0spIHxcXG5tbS92bXNjYW4uYy02ODY3LVxcdFxcdFxcdFxcdChHRlBfSElHSFVTRVJfTU9WQUJMRSBcXHUwMDI2IH5HRlBfUkVDTEFJTV9NQVNLKSxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc4NzY9dW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc4ODItXFx0XFx0Lm5yX3RvX3JlY2xhaW0gPSBtYXgobnJfcGFnZXMsIFNXQVBfQ0xVU1RFUl9NQVgpLFxcbm1tL3Ztc2Nhbi5jOjc4ODM6XFx0XFx0LmdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayksXFxubW0vdm1zY2FuLmMtNzg4NC1cXHRcXHQub3JkZXIgPSBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc5NTg9aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbi0tXFxubW0vdm1zY2FuLmMtODAzNS1cXHRcXHRcXHRzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0ge1xcbm1tL3Ztc2Nhbi5jOjgwMzY6XFx0XFx0XFx0XFx0LmdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayksXFxubW0vdm1zY2FuLmMtODAzNy1cXHRcXHRcXHRcXHQucmVjbGFpbV9pZHggPSBnZnBfem9uZShnZnBfbWFzayksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQxOjI3Ljk4ODUzNjY2NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEyNTgwNjgzMDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOlxuXG4qKk1pc3NpbmcgQ29udGV4dCBpbiBCdWxrIFBhZ2UgQWxsb2NhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgc2VlbXMgdG8gYmUgbWlzc2luZyBhIGNyaXRpY2FsIGNhbGwgdG8gYGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKWAuIFRoYXQncy4uLiBpbnRlcmVzdGluZy4gTGV0IG1lIHF1aWNrbHkgZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgY3VycmVudF9nZnBfY29udGV4dGAgKmFjdHVhbGx5KiBkb2VzLiBMZXQncyB0cmFjZSB0aGF0IGZ1bmN0aW9uIGRlZmluaXRpb24gYW5kIHNlZSB3aGF0IHRoZSBpbnRlbnRpb25zIG9mIHRoYXQgZnVuY3Rpb24gYXJlLiBQZXJoYXBzIHRoZXJlJ3MgYW4gaXNzdWUgd2l0aCBob3cgdGhpcyBidWxrIGFsbG9jYXRpb24gaXMgaGFuZGxpbmcgR0ZQIGZsYWdzLiBUaGlzIG1pc3NpbmcgcGllY2UgY291bGQgYmUgYWZmZWN0aW5nIG1lbW9yeSBhbGxvY2F0aW9uIGJlaGF2aW9yIGluIHdheXMgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIExldCdzIGRpdmUgaW4gYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgxOSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQxOjQwLjU2OTIyMTg4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTE0MzU2NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGlubGluZSBnZnBfdCBjdXJyZW50X2dmcF9jb250ZXh0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD0yMTU9c3RhdGljIGlubGluZSBib29sIGluX3Zmb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI0Ny0gKi9cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6MjQ4OnN0YXRpYyBpbmxpbmUgZ2ZwX3QgY3VycmVudF9nZnBfY29udGV4dChnZnBfdCBmbGFncylcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjQ5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDE6NDIuNTgwNjY0MzA3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODEyNTU2NDMzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IChtbS5oKSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggc29tZSBtZW1vcnkgbWFuYWdlbWVudCBkZXRhaWxzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgYWRkcmVzcyBzcGFjZXMgYW5kIG1lbW9yeSBjb250ZXh0cy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI0OC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGRlZmluaXRpb25zIG9yIHN0cnVjdHVyZXMgcmVsYXRlZCB0byBwcm9jZXNzIG1lbW9yeSBtYXBzIChtbV9zdHJ1Y3QpIG9yIHBlcmhhcHMgZGV0YWlscyBhYm91dCBob3cgdGhlc2UgbWFwcyBpbnRlcmFjdCB3aXRoIHRoZSBwYWdlIHRhYmxlcy4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHZpcnR1YWwgYWRkcmVzc2VzIGFyZSB0cmFuc2xhdGVkIHRvIHBoeXNpY2FsIGFkZHJlc3NlcyBhbmQgaG93IHRoZSBrZXJuZWwgdHJhY2tzIHRoZSBtZW1vcnkgYWxsb2NhdGVkIHRvIGVhY2ggcHJvY2Vzcy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGxvY2tpbmcgbWVjaGFuaXNtcyBvciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB1c2VkLCBhcyB0aGVzZSBhcmUgY3JpdGljYWwgZm9yIGVuc3VyaW5nIGRhdGEgY29uc2lzdGVuY3kgYW5kIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudC4gRnJvbSB0aGVyZSwgSSBjYW4gYmV0dGVyIHVuZGVyc3RhbmQgYW5kIGRlYnVnIGNlcnRhaW4gbWVtb3J5LXJlbGF0ZWQgc3lzdGVtIGNhbGxzIEkgd2FzIGRlYWxpbmcgd2l0aCBlYXJsaWVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTUxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDE6NTAuNzA2MjMwOTQ0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc2NoZWQvbW0uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDA6XFx0fVxcbiAyNDE6XFx0XFxuIDI0MjpcXHQvKlxcbiAyNDM6XFx0ICogQXBwbGllcyBwZXItdGFzayBnZnAgY29udGV4dCB0byB0aGUgZ2l2ZW4gYWxsb2NhdGlvbiBmbGFncy5cXG4gMjQ0OlxcdCAqIFBGX01FTUFMTE9DX05PSU8gaW1wbGllcyBHRlBfTk9JT1xcbiAyNDU6XFx0ICogUEZfTUVNQUxMT0NfTk9GUyBpbXBsaWVzIEdGUF9OT0ZTXFxuIDI0NjpcXHQgKiBQRl9NRU1BTExPQ19QSU4gIGltcGxpZXMgIUdGUF9NT1ZBQkxFXFxuIDI0NzpcXHQgKi9cXG4gMjQ4OlxcdHN0YXRpYyBpbmxpbmUgZ2ZwX3QgY3VycmVudF9nZnBfY29udGV4dChnZnBfdCBmbGFncylcXG4gMjQ5OlxcdHtcXG4gMjUwOlxcdFxcdHVuc2lnbmVkIGludCBwZmxhZ3MgPSBSRUFEX09OQ0UoY3VycmVudC1cXHUwMDNlZmxhZ3MpO1xcbiAyNTE6XFx0XFxuIDI1MjpcXHRcXHRpZiAodW5saWtlbHkocGZsYWdzIFxcdTAwMjYgKFBGX01FTUFMTE9DX05PSU8gfCBQRl9NRU1BTExPQ19OT0ZTIHwgUEZfTUVNQUxMT0NfUElOKSkpIHtcXG4gMjUzOlxcdFxcdFxcdC8qXFxuIDI1NDpcXHRcXHRcXHQgKiBOT0lPIGltcGxpZXMgYm90aCBOT0lPIGFuZCBOT0ZTIGFuZCBpdCBpcyBhIHdlYWtlciBjb250ZXh0XFxuIDI1NTpcXHRcXHRcXHQgKiBzbyBhbHdheXMgbWFrZSBzdXJlIGl0IG1ha2VzIHByZWNlZGVuY2VcXG4gMjU2OlxcdFxcdFxcdCAqL1xcbiAyNTc6XFx0XFx0XFx0aWYgKHBmbGFncyBcXHUwMDI2IFBGX01FTUFMTE9DX05PSU8pXFxuIDI1ODpcXHRcXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+KF9fR0ZQX0lPIHwgX19HRlBfRlMpO1xcbiAyNTk6XFx0XFx0XFx0ZWxzZSBpZiAocGZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0NfTk9GUylcXG4gMjYwOlxcdFxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5fX0dGUF9GUztcXG4gMjYxOlxcdFxcbiAyNjI6XFx0XFx0XFx0aWYgKHBmbGFncyBcXHUwMDI2IFBGX01FTUFMTE9DX1BJTilcXG4gMjYzOlxcdFxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5fX0dGUF9NT1ZBQkxFO1xcbiAyNjQ6XFx0XFx0fVxcbiAyNjU6XFx0XFx0cmV0dXJuIGZsYWdzO1xcbiAyNjY6XFx0fVxcbiAyNjc6XFx0XFxuIDI2ODpcXHQjaWZkZWYgQ09ORklHX0xPQ0tERVBcXG4gMjY5OlxcdGV4dGVybiB2b2lkIF9fZnNfcmVjbGFpbV9hY3F1aXJlKHVuc2lnbmVkIGxvbmcgaXApO1xcbiAyNzA6XFx0ZXh0ZXJuIHZvaWQgX19mc19yZWNsYWltX3JlbGVhc2UodW5zaWduZWQgbG9uZyBpcCk7XFxuIDI3MTpcXHRleHRlcm4gdm9pZCBmc19yZWNsYWltX2FjcXVpcmUoZ2ZwX3QgZ2ZwX21hc2spO1xcbiAyNzI6XFx0ZXh0ZXJuIHZvaWQgZnNfcmVjbGFpbV9yZWxlYXNlKGdmcF90IGdmcF9tYXNrKTtcXG4gMjczOlxcdCNlbHNlXFxuIDI3NDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgX19mc19yZWNsYWltX2FjcXVpcmUodW5zaWduZWQgbG9uZyBpcCkgeyB9XFxuIDI3NTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgX19mc19yZWNsYWltX3JlbGVhc2UodW5zaWduZWQgbG9uZyBpcCkgeyB9XFxuIDI3NjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgZnNfcmVjbGFpbV9hY3F1aXJlKGdmcF90IGdmcF9tYXNrKSB7IH1cXG4gMjc3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBmc19yZWNsYWltX3JlbGVhc2UoZ2ZwX3QgZ2ZwX21hc2spIHsgfVxcbiAyNzg6XFx0I2VuZGlmXFxuIDI3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDE6NTAuNzA2MzM2NzA0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM5MzA4MTI3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgR0ZQIENvbnRleHRzIGluIE1lbW9yeSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHdlIG1hbmFnZSB0aGUgXCJnZnBcIiAoZ2V0IGZyZWUgcGFnZXMpIGNvbnRleHQgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB3aXRoIHJlZ2FyZCB0byBhbGxvY2F0aW9uIGZsYWdzLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZS4gSXQgc2VlbXMgbGlrZSBpdCdzIGRlc2lnbmVkIHRvIHRhaWxvciB0aGUgYGdmcGAgZmxhZ3MgZm9yIGEgZ2l2ZW4gYWxsb2NhdGlvbiByZXF1ZXN0IG9uIGEgcGVyLXRhc2sgYmFzaXMuXG5cbkkgc2VlIHRoYXQgYFBGX01FTUFMTE9DX05PSU9gIGlzIGRlc2lnbmVkIHRvIHRyYW5zbGF0ZSBpbnRvIGBHRlBfTk9JT2AuIFRoaXMgbWFrZXMgcGVyZmVjdCBzZW5zZTsgYEdGUF9OT0lPYCBtZWFucyB3ZSB3YW50IHRvIGF2b2lkIGRpc2sgSS9PLCBhbmQgYFBGX01FTUFMTE9DX05PSU9gIHNlZW1zIHRvIGJlIHRoZSBmbGFnIHRoYXQgc2lnbmFscyB0aGlzIGludGVudCwgY2xlYXJpbmcgdGhlIGBfX0dGUF9JT2AgYW5kIGBfX0dGUF9GU2AgZmxhZ3MgdG8gZW5zdXJlIG5vIGRpc2sgaW50ZXJhY3Rpb24uXG5cblNpbWlsYXJseSwgYFBGX01FTUFMTE9DX05PRlNgIG1hcHMgdG8gYEdGUF9OT0ZTYCwgd2hpY2ggaXMgbG9naWNhbGx5IGNvbnNpc3RlbnQsIGNsZWFyaW5nIG9ubHkgdGhlIGBfX0dGUF9GU2AgZmxhZy4gIE5vIGZpbGVzeXN0ZW0gYWNjZXNzLCBnb29kLlxuXG5GaW5hbGx5LCBgUEZfTUVNQUxMT0NfUElOYCBoYXMgdGhlIGVmZmVjdCBvZiBuZWdhdGluZyBgR0ZQX01PVkFCTEVgLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIHBpbm5pbmcgYSBwYWdlIGltcGxpZXMgaXQgc2hvdWxkbid0IGJlIG1vdmVkIGFyb3VuZCBpbiBtZW1vcnkuICBUaGlzIGNsZWFycyB0aGUgYF9fR0ZQX01PVkFCTEVgIGZsYWcuXG5cbkknbSBub3cgY3VyaW91cyBhYm91dCB3aGljaCBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSB1c2luZyB0aGUgYGFsbG9jX3BhZ2VzX2J1bGsqYCBmdW5jdGlvbnMuIEknbGwgbmVlZCB0byBrbm93IHdoaWNoIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIHVzaW5nIHRoaXMgdG8gaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4gSSdsbCBuZWVkIHRvIGdyZXAgdGhyb3VnaCB0aGUgY29kZWJhc2UgZm9yIHVzYWdlcyBvZiBgYWxsb2NfcGFnZXNfYnVsaypgIHRvIGdldCBhIGdvb2Qgc2Vuc2Ugb2YgaG93IGl0J3MgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA4NSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQxOjU0LjYzNzE1MjQwN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0NzI2NzM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19wYWdlc19idWxrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0xNzI9c3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxcbi0tXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwNC1cXHQgKlxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzoyMDU6XFx0ICogTm90ZTogYWxsb2NfcGFnZXNfYnVsayBuZWVkcyB0aGUgYXJyYXkgdG8gYmUgemVyb2VkLCBhcyBpdCBhc3N1bWVzXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwNi1cXHQgKiBhbnkgbm9uLXplcm8gc2xvdCBhbHJlYWR5IGNvbnRhaW5zIGEgdmFsaWQgYWxsb2NhdGlvbi5cXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDgtXFx0bWVtc2V0KHBhZ2VzLCAwLCBzaXplb2Yoc3RydWN0IHBhZ2UgKikgKiBucl9zZWdzKTtcXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6MjA5OlxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJfc2VncywgcGFnZXMpO1xcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMTAtXFx0aWYgKG5yX2FsbG9jYXRlZCBcXHUwMDNjIG5yX3NlZ3MpXFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmM9MzE9aW50IGZ3X2lzb19idWZmZXJfYWxsb2Moc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwgaW50IHBhZ2VfY291bnQpXFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmMtNDEtXFx0Ly8gY29udmVuaWVuY2UgdG8gbWFwIHRoZW0gaW50byB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb2YgdXNlciBwcm9jZXNzLlxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYzo0MjpcXHR1bnNpZ25lZCBsb25nIG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCB8IEdGUF9ETUEzMiB8IF9fR0ZQX1pFUk8sXFxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jLTQzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHBhZ2VfY291bnQsIHBhZ2VfYXJyYXkpO1xcbi0tXFxuZHJpdmVycy9maXJld2lyZS9vaGNpLmM9ODQ4PXN0YXRpYyBpbnQgYXJfY29udGV4dF9pbml0KHN0cnVjdCBhcl9jb250ZXh0ICpjdHgsIHN0cnVjdCBmd19vaGNpICpvaGNpLFxcbi0tXFxuZHJpdmVycy9maXJld2lyZS9vaGNpLmMtODY0LVxcdC8vIGFkZHJlc3MgcmFuZ2UgaW4ga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS5cXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYzo4NjU6XFx0dW5zaWduZWQgbG9uZyBucl9wb3B1bGF0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwgfCBHRlBfRE1BMzIsIEFSX0JVRkZFUlMsIHBhZ2VzKTtcXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYy04NjYtXFxuLS1cXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jPTYyMT1zdGF0aWMgaW50IGFsbG9jX3ByaXZhdGVfcGFnZXMoc3RydWN0IGhtbV9idWZmZXJfb2JqZWN0ICpibylcXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmMtNjI2LVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM6NjI3OlxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgYm8tXFx1MDAzZXBnbnIsIGJvLVxcdTAwM2VwYWdlcyk7XFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYy02MjgtXFx0LypcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jOjYyOTpcXHQgKiBhbGxvY19wYWdlc19idWxrKCkgZG9lcyBub3QgdHJ5IHZlcnkgaGFyZCB0byBnZXQgcGFnZXMgdW5kZXIgbWVtb3J5XFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYy02MzAtXFx0ICogcHJlc3N1cmUuIElmIG5lY2Vzc2FyeSBmYWxsIGJhY2sgdG8gYWxsb2NfcGFnZSgpLlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jPTQ2Nj1zdGF0aWMgdm9pZCBmcmVlX3BhZ2VfbGlzdCh1MzIgbnBhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfbGlzdClcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy00NjktXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jOjQ3MDpcXHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy00NzEtXFx0Zm9yIChpID0gbnBhZ2VzIC0gMTsgaSBcXHUwMDNlPSAwOyBpLS0pXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM9NDk2PXN0YXRpYyBpbnQgbWx4NXZmX2FkZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqKipwYWdlX2xpc3QsIHVuc2lnbmVkIGludCBucGFnZXMpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmMtNTA2LVxcdGZvciAoOzspIHtcXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM6NTA3OlxcdFxcdGZpbGxlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTF9BQ0NPVU5ULCBucGFnZXMgLSBkb25lLFxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDgtXFx0XFx0XFx0XFx0XFx0ICAqcGFnZV9saXN0ICsgZG9uZSk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM9NjM9c3RhdGljIGludCB2aXJ0aW92Zl9hZGRfbWlncmF0aW9uX3BhZ2VzKHN0cnVjdCB2aXJ0aW92Zl9kYXRhX2J1ZmZlciAqYnVmLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTc4LVxcdGRvIHtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM6Nzk6XFx0XFx0ZmlsbGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMX0FDQ09VTlQsIHRvX2ZpbGwsXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTgwLVxcdFxcdFxcdFxcdFxcdCAgcGFnZV9saXN0KTtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYz0xMTA9c3RhdGljIHZvaWQgdmlydGlvdmZfZnJlZV9kYXRhX2J1ZmZlcihzdHJ1Y3QgdmlydGlvdmZfZGF0YV9idWZmZXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy0xMTMtXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jOjExNDpcXHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy0xMTUtXFx0Zm9yX2VhY2hfc2d0YWJsZV9wYWdlKFxcdTAwMjZidWYtXFx1MDAzZXRhYmxlLnNndCwgXFx1MDAyNnNnX2l0ZXIsIDApXFxuLS1cXG5mcy9idHJmcy9leHRlbnRfaW8uYz02ODQ9aW50IGJ0cmZzX2FsbG9jX3BhZ2VfYXJyYXkodW5zaWduZWQgaW50IG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXksIGdmcF90IGdmcClcXG4tLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5MC1cXG5mcy9idHJmcy9leHRlbnRfaW8uYzo2OTE6XFx0XFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG5mcy9idHJmcy9leHRlbnRfaW8uYy02OTItXFx0XFx0aWYgKHVubGlrZWx5KGFsbG9jYXRlZCA9PSBsYXN0KSkge1xcbi0tXFxuZnMvZXJvZnMvenV0aWwuYz02NT1pbnQgel9lcm9mc19nYnVmX2dyb3dzaXplKHVuc2lnbmVkIGludCBucnBhZ2VzKVxcbi0tXFxuZnMvZXJvZnMvenV0aWwuYy04OS1cXHRcXHRcXHRsYXN0ID0gajtcXG5mcy9lcm9mcy96dXRpbC5jOjkwOlxcdFxcdFxcdGogPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5ycGFnZXMsIHRtcF9wYWdlcyk7XFxuZnMvZXJvZnMvenV0aWwuYy05MS1cXHRcXHRcXHRpZiAobGFzdCA9PSBqKVxcbi0tXFxuZnMvZnVzZS9yZWFkZGlyLmM9MzM2PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqKmZ1c2VfcmVhZGRpcl9hbGxvY19idWYoc3RydWN0IGZ1c2VfYXJnc19wYWdlcyAqYXAsIHNpemVfdCAqYnVmc2l6ZSlcXG4tLVxcbmZzL2Z1c2UvcmVhZGRpci5jLTM0My1cXG5mcy9mdXNlL3JlYWRkaXIuYzozNDQ6XFx0bnJfYWxsb2MgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5yX3BhZ2VzLCBwYWdlcyk7XFxuZnMvZnVzZS9yZWFkZGlyLmMtMzQ1LVxcdGlmICghbnJfYWxsb2MpXFxuLS1cXG5mcy9uZnNkL25mczRzdGF0ZS5jPTEzMjY9YWxsb2NfaW5pdF9kaXJfZGVsZWcoc3RydWN0IG5mczRfY2xpZW50ICpjbHAsIHN0cnVjdCBuZnM0X2ZpbGUgKmZwKVxcbi0tXFxuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM3LVxcbmZzL25mc2QvbmZzNHN0YXRlLmM6MTMzODpcXHRucGFnZXMgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIE5PVElGWTRfUEFHRV9BUlJBWV9TSVpFLCBuY24tXFx1MDAzZW5jbl9wYWdlcyk7XFxuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM5LVxcdGlmIChucGFnZXMgIT0gTk9USUZZNF9QQUdFX0FSUkFZX1NJWkUpIHtcXG4tLVxcbmZzL3NwbGljZS5jPTMxOD1zc2l6ZV90IGNvcHlfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXFxuLS1cXG5mcy9zcGxpY2UuYy0zNDEtXFx0cGFnZXMgPSAoc3RydWN0IHBhZ2UgKiopKGJ2ICsgbnBhZ2VzKTtcXG5mcy9zcGxpY2UuYzozNDI6XFx0bnBhZ2VzID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfVVNFUiwgbnBhZ2VzLCBwYWdlcyk7XFxuZnMvc3BsaWNlLmMtMzQzLVxcdGlmICghbnBhZ2VzKSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIwNz1zdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEwLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjExOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxMi1cXHRcXHRcXHRcXHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEzLVxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTQ6I2RlZmluZSBfX2FsbG9jX3BhZ2VzX2J1bGsoLi4uKVxcdFxcdFxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIxNj12b2lkIGZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXksIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE3LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE4OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxOS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIwLVxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMjE6I2RlZmluZSAgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3koLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMjpcXHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIzLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI0LS8qIEJ1bGsgYWxsb2NhdGUgb3JkZXItMCBwYWdlcyAqL1xcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI1OiNkZWZpbmUgYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyNjpcXHRfX2FsbG9jX3BhZ2VzX2J1bGsoX2dmcCwgbnVtYV9tZW1faWQoKSwgTlVMTCwgX25yX3BhZ2VzLCBfcGFnZV9hcnJheSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyNy1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIyOD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyOTphbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcF90IGdmcCwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzMC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNC1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzNTpcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBuaWQsIE5VTEwsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNi19XFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzctXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMzg6I2RlZmluZSBhbGxvY19wYWdlc19idWxrX25vZGUoLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzOTpcXHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTI0MC1cXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jPTE3ND1zdGF0aWMgaW50IGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlcyhzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYy0xOTItXFxuaW9fdXJpbmcvbWVtbWFwLmM6MTkzOlxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9kZShnZnAsIE5VTUFfTk9fTk9ERSxcXG5pb191cmluZy9tZW1tYXAuYy0xOTQtXFx0XFx0XFx0XFx0XFx0ICAgICBtci1cXHUwMDNlbnJfcGFnZXMsIHBhZ2VzKTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz02Njg9c3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGludCBub2RlX2lkLFxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTczMi1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzMzOlxcdFxcdC8qIHplcm9pbmcgaXMgbmVlZGVkLCBzaW5jZSBhbGxvY19wYWdlc19idWxrKCkgb25seSBmaWxscyBpbiBub24temVybyBlbnRyaWVzICovXFxua2VybmVsL2JwZi9hcmVuYS5jLTczNC1cXHRcXHRtZW1zZXQocGFnZXMsIDAsIHRoaXNfYmF0Y2ggKiBzaXplb2Yoc3RydWN0IHBhZ2UgKikpO1xcbi0tXFxubGliL3Rlc3Rfdm1hbGxvYy5jPTM5MT12bV9tYXBfcmFtX3Rlc3Qodm9pZClcXG4tLVxcbmxpYi90ZXN0X3ZtYWxsb2MuYy00MDMtXFxubGliL3Rlc3Rfdm1hbGxvYy5jOjQwNDpcXHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG1hcF9ucl9wYWdlcywgcGFnZXMpO1xcbmxpYi90ZXN0X3ZtYWxsb2MuYy00MDUtXFx0aWYgKG5yX2FsbG9jYXRlZCAhPSBtYXBfbnJfcGFnZXMpXFxuLS1cXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYz01MT1zdGF0aWMgdm9pZCAqX19pbml0IGlvdl9rdW5pdF9jcmVhdGVfYnVmZmVyKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTY2LVxcdFxcdGxhc3QgPSBnb3Q7XFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6Njc6XFx0XFx0Z290ID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucGFnZXMsIHBhZ2VzKTtcXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy02OC1cXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTc3Nz1zdGF0aWMgaW50IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKHZvaWQpXFxuLS1cXG5tbS9hbGxvY190YWcuYy03OTMtXFxubW0vYWxsb2NfdGFnLmM6Nzk0OlxcdFxcdFxcdGFsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9kZShHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOLFxcbm1tL2FsbG9jX3RhZy5jLTc5NS1cXHRcXHRcXHRcXHROVU1BX05PX05PREUsIG1vcmVfcGFnZXMgLSBuciwgbmV4dF9wYWdlICsgbnIpO1xcbi0tXFxubW0va2FzYW4vc2hhZG93LmM9MzI3PXN0YXRpYyB2b2lkIF9fX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYy0zMzgtXFxubW0va2FzYW4vc2hhZG93LmM6MzM5OnN0YXRpYyBpbnQgX19fYWxsb2NfcGFnZXNfYnVsayhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnJfcGFnZXMsIGdmcF90IGdmcF9tYXNrKVxcbm1tL2thc2FuL3NoYWRvdy5jLTM0MC17XFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYy0zNDQtXFx0d2hpbGUgKG5yX3BhZ2VzKSB7XFxubW0va2FzYW4vc2hhZG93LmM6MzQ1OlxcdFxcdG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoZ2ZwX21hc2ssIG5yX3BhZ2VzLCBwYWdlcyk7XFxubW0va2FzYW4vc2hhZG93LmMtMzQ2LVxcdFxcdGlmICghbnJfcG9wdWxhdGVkKSB7XFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYz0zNTc9c3RhdGljIGludCBfX2thc2FuX3BvcHVsYXRlX3ZtYWxsb2NfZG8odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0va2FzYW4vc2hhZG93LmMtMzY5LVxcdFxcdG5yX3BhZ2VzID0gbWluKG5yX3RvdGFsLCBQQUdFX1NJWkUgLyBzaXplb2YoZGF0YS5wYWdlc1swXSkpO1xcbm1tL2thc2FuL3NoYWRvdy5jOjM3MDpcXHRcXHRyZXQgPSBfX19hbGxvY19wYWdlc19idWxrKGRhdGEucGFnZXMsIG5yX3BhZ2VzLCBnZnBfbWFzayk7XFxubW0va2FzYW4vc2hhZG93LmMtMzcxLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNTg5PUVYUE9SVF9TWU1CT0woZm9saW9fYWxsb2Nfbm9wcm9mKTtcXG5tbS9tZW1wb2xpY3kuYy0yNTkwLVxcbm1tL21lbXBvbGljeS5jOjI1OTE6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19pbnRlcmxlYXZlKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNTkyLVxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2MDctXFx0XFx0aWYgKGRlbHRhKSB7XFxubW0vbWVtcG9saWN5LmM6MjYwODpcXHRcXHRcXHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsXFxubW0vbWVtcG9saWN5LmMtMjYwOS1cXHRcXHRcXHRcXHRcXHRpbnRlcmxlYXZlX25vZGVzKHBvbCksIE5VTEwsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNjEzLVxcdFxcdH0gZWxzZSB7XFxubW0vbWVtcG9saWN5LmM6MjYxNDpcXHRcXHRcXHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsXFxubW0vbWVtcG9saWN5LmMtMjYxNS1cXHRcXHRcXHRcXHRcXHRpbnRlcmxlYXZlX25vZGVzKHBvbCksIE5VTEwsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNjI1LVxcbm1tL21lbXBvbGljeS5jOjI2MjY6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNjI3LVxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2NjQtXFx0XFx0bm9kZV9wYWdlcyA9IG1pbihyZW1fcGFnZXMsIHdlaWdodCk7XFxubW0vbWVtcG9saWN5LmM6MjY2NTpcXHRcXHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxcbm1tL21lbXBvbGljeS5jLTI2NjYtXFx0XFx0XFx0XFx0XFx0XFx0ICBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3MDEtXFx0LypcXG5tbS9tZW1wb2xpY3kuYzoyNzAyOlxcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxcbm1tL21lbXBvbGljeS5jLTI3MDMtXFx0ICogVHJhY2sgd2hpY2ggbm9kZSB3ZWlnaHRlZCBpbnRlcmxlYXZlIHNob3VsZCByZXN1bWUgZnJvbS5cXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3MjktXFx0XFx0XFx0YnJlYWs7XFxubW0vbWVtcG9saWN5LmM6MjczMDpcXHRcXHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxcbm1tL21lbXBvbGljeS5jLTI3MzEtXFx0XFx0XFx0XFx0XFx0XFx0ICBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NDMtXFxubW0vbWVtcG9saWN5LmM6Mjc0NDpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcF90IGdmcCwgaW50IG5pZCxcXG5tbS9tZW1wb2xpY3kuYy0yNzQ1LVxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NTMtXFxubW0vbWVtcG9saWN5LmM6Mjc1NDpcXHRucl9hbGxvY2F0ZWQgID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YocHJlZmVycmVkX2dmcCwgbmlkLCBcXHUwMDI2cG9sLVxcdTAwM2Vub2RlcyxcXG5tbS9tZW1wb2xpY3kuYy0yNzU1LVxcdFxcdFxcdFxcdFxcdCAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NTctXFx0aWYgKG5yX2FsbG9jYXRlZCBcXHUwMDNjIG5yX3BhZ2VzKVxcbm1tL21lbXBvbGljeS5jOjI3NTg6XFx0XFx0bnJfYWxsb2NhdGVkICs9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCwgbnVtYV9ub2RlX2lkKCksIE5VTEwsXFxubW0vbWVtcG9saWN5LmMtMjc1OS1cXHRcXHRcXHRcXHRucl9wYWdlcyAtIG5yX2FsbG9jYXRlZCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NjktICovXFxubW0vbWVtcG9saWN5LmM6Mjc3MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXFxubW0vbWVtcG9saWN5LmMtMjc3MS1cXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzgwLVxcdGlmIChwb2wtXFx1MDAzZW1vZGUgPT0gTVBPTF9JTlRFUkxFQVZFKVxcbm1tL21lbXBvbGljeS5jOjI3ODE6XFx0XFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfaW50ZXJsZWF2ZShnZnAsIHBvbCxcXG5tbS9tZW1wb2xpY3kuYy0yNzgyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBucl9wYWdlcywgcGFnZV9hcnJheSk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzg0LVxcdGlmIChwb2wtXFx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKVxcbm1tL21lbXBvbGljeS5jOjI3ODU6XFx0XFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShcXG5tbS9tZW1wb2xpY3kuYy0yNzg2LVxcdFxcdFxcdFxcdCAgZ2ZwLCBwb2wsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3ODgtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX1BSRUZFUlJFRF9NQU5ZKVxcbm1tL21lbXBvbGljeS5jOjI3ODk6XFx0XFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI3OTAtXFx0XFx0XFx0XFx0bnVtYV9ub2RlX2lkKCksIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc5My1cXHRub2RlbWFzayA9IHBvbGljeV9ub2RlbWFzayhnZnAsIHBvbCwgTk9fSU5URVJMRUFWRV9JTkRFWCwgXFx1MDAyNm5pZCk7XFxubW0vbWVtcG9saWN5LmM6Mjc5NDpcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBuaWQsIG5vZGVtYXNrLFxcbm1tL21lbXBvbGljeS5jLTI3OTUtXFx0XFx0XFx0XFx0ICAgICAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01MDkxPXN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTEzOS0vKlxcbm1tL3BhZ2VfYWxsb2MuYzo1MTQwOiAqIF9fYWxsb2NfcGFnZXNfYnVsayAtIEFsbG9jYXRlIGEgbnVtYmVyIG9mIG9yZGVyLTAgcGFnZXMgdG8gYW4gYXJyYXlcXG5tbS9wYWdlX2FsbG9jLmMtNTE0MS0gKiBAZ2ZwOiBHRlAgZmxhZ3MgZm9yIHRoZSBhbGxvY2F0aW9uXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTE1OS0gKi9cXG5tbS9wYWdlX2FsbG9jLmM6NTE2MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxubW0vcGFnZV9hbGxvYy5jLTUxNjEtXFx0XFx0XFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MzAwLX1cXG5tbS9wYWdlX2FsbG9jLmM6NTMwMTpFWFBPUlRfU1lNQk9MX0dQTChhbGxvY19wYWdlc19idWxrX25vcHJvZik7XFxubW0vcGFnZV9hbGxvYy5jLTUzMDItXFxuLS1cXG5tbS9zbHViLmM9NzQyNj1zdGF0aWMgYm9vbCBfX2ttZW1fY2FjaGVfYWxsb2NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmMtNzQ3MC0gKlxcbm1tL3NsdWIuYzo3NDcxOiAqIFVubGlrZSBhbGxvY19wYWdlc19idWxrKCksIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgZm9yIGFscmVhZHkgYWxsb2NhdGVkXFxubW0vc2x1Yi5jLTc0NzItICogb2JqZWN0cyBpbiBAcCwgYW5kIHRodXMgdGhlIGNhbGxlciBkb2VzIG5vdCBuZWVkIHRvIHplcm8gaXQuXFxuLS1cXG5tbS92bWFsbG9jLmM9MzY3Nj12bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zNzQzLVxcdFxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSBcXHUwMDI2XFx1MDAyNiBuaWQgPT0gTlVNQV9OT19OT0RFKVxcbm1tL3ZtYWxsb2MuYzozNzQ0OlxcdFxcdFxcdFxcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcCxcXG5tbS92bWFsbG9jLmMtMzc0NS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRucl9wYWdlc19yZXF1ZXN0LFxcbi0tXFxubW0vdm1hbGxvYy5jLTM3NDctXFx0XFx0XFx0ZWxzZVxcbm1tL3ZtYWxsb2MuYzozNzQ4OlxcdFxcdFxcdFxcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlX25vcHJvZihnZnAsIG5pZCxcXG5tbS92bWFsbG9jLmMtMzc0OS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRucl9wYWdlc19yZXF1ZXN0LFxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9NjExPXN0YXRpYyBub2lubGluZSBuZXRtZW1fcmVmIF9fcGFnZV9wb29sX2FsbG9jX25ldG1lbXNfc2xvdyhzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjMzLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjYzNDpcXHQvKiBNYXJrIGVtcHR5IGFsbG9jLmNhY2hlIHNsb3RzIFxcXCJlbXB0eVxcXCIgZm9yIGFsbG9jX3BhZ2VzX2J1bGsgKi9cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzUtXFx0bWVtc2V0KFxcdTAwMjZwb29sLVxcdTAwM2VhbGxvYy5jYWNoZSwgMCwgc2l6ZW9mKHZvaWQgKikgKiBidWxrKTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzYtXFxubmV0L2NvcmUvcGFnZV9wb29sLmM6NjM3OlxcdG5yX3BhZ2VzID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgcG9vbC1cXHUwMDNlcC5uaWQsIGJ1bGssXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjM4LVxcdFxcdFxcdFxcdFxcdCAoc3RydWN0IHBhZ2UgKiopcG9vbC1cXHUwMDNlYWxsb2MuY2FjaGUpO1xcbi0tXFxubmV0L3N1bnJwYy9zdmNfeHBydC5jPTY4Nz1zdGF0aWMgYm9vbCBzdmNfZmlsbF9wYWdlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbi0tXFxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5Mi1cXHRmb3IgKGZpbGxlZCA9IDA7IGZpbGxlZCBcXHUwMDNjIG5wYWdlczsgZmlsbGVkID0gcmV0KSB7XFxubmV0L3N1bnJwYy9zdmNfeHBydC5jOjY5MzpcXHRcXHRyZXQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5wYWdlcywgcGFnZXMpO1xcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy02OTQtXFx0XFx0aWYgKHJldCBcXHUwMDNlIGZpbGxlZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDE6NTYuNzg0NDI2MTU3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ0NTU4MTAzMzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgYW5kIGl0cyBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiB3aGVyZSBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIHVzZWQuIFZtYWxsb2MsIHNwbGljZSBzeXNjYWxscywgYnRyZnMsIGZ1c2UsIGlvX3VyaW5nLCBCUEYgYXJlbmFzLCBuZXR3b3JraW5nLi4uIGl0J3MgYSAqbG90KiBvZiBjb3JlIGZ1bmN0aW9uYWxpdHkuIFRoYXQncyBhIHdpZGUgcmFuZ2Ugb2YgdXNlIGNhc2VzLCBhbmQgdGhhdCBkZWZpbml0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC5cblxuU28sIHRoZSBpc3N1ZSB0aGlzIHBhdGNoIGFkZHJlc3Nlcy4uLiByaWdodCwgaXQncyBpbiBob3cgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBoYW5kbGVzIEdGUCBmbGFncy4gU3BlY2lmaWNhbGx5OlxuXG5gYGBjXG5cdC8qIE1heSBzZXQgQUxMT0NfTk9GUkFHTUVOVCwgZnJhZ21lbnRhdGlvbiB3aWxsIHJldHVybiAxIHBhZ2UuICovXG5cdGdmcCBcdTAwMjY9IGdmcF9hbGxvd2VkX21hc2s7XG5cdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcblx0aWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFx1MDAyNmFjLCBcdTAwMjZnZnAsIFx1MDAyNmFsbG9jX2ZsYWdzKSlcblx0XHRnb3RvIG91dDtcbmBgYFxuXG5JdCBsb29rcyBsaWtlIGlmIHdlJ3JlIHVuZGVyIGEgcHJvdGVjdGlvbiBzY29wZSBsaWtlIGBtZW1hbGxvY19ub2lvX3NhdmUoKWAgKFBGX01FTUFMTE9DX05PSU8pIG9yIGBtZW1hbGxvY19ub2ZzX3NhdmUoKWAgKFBGX01FTUFMTE9DX05PRlMpIHRoaXMgcm91dGluZSAqaWdub3JlZCogdGhlIHRhc2sncyBjdXJyZW50IEdGUCBjb250ZXh0LiBUaGF0J3MgYmFkLiBSZWFsbHkgYmFkLiBCZWNhdXNlIHRoZSBjb25zZXF1ZW5jZXMgY291bGQgYmUgSS9PIG9yIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBoYXBwZW5pbmcgd2hlbiB0aGV5IHNob3VsZG4ndCDigJMgZHVyaW5nIHJlY2xhaW0gb3IsIGV2ZW4gd29yc2UsIHRyaWdnZXJpbmcgZGVhZGxvY2tzIG9yIGxvY2tkZXAgYXNzZXJ0aW9ucy4gVGhvc2UgYXJlICpuYXN0eSogYnVncyB0byB0cmFjayBkb3duLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBwcmVwYXJlX2FsbG9jX3BhZ2VzYCBkb2VzIHRvIHByb3Blcmx5IGFwcHJlY2lhdGUgdGhlIGNoYW5nZS4gU28sIEkgc2hvdWxkIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaG93IGl0IGlzIGFmZmVjdGVkIGJ5IHRoZSBwcm92aWRlZCBnZnAgdmFsdWUuIE9rYXksIGxldCdzIHNlZSB3aGF0IGBwcmVwYXJlX2FsbG9jX3BhZ2VzYCBpcyBkb2luZy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI3OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTo0Mjo0MS4zNDI1MzE4NzRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0OTM3MTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByZXBhcmVfYWxsb2NfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vcGFnZV9hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfYWxsb2MuYz00Nzg0PV9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MDkwLVxcbm1tL3BhZ2VfYWxsb2MuYzo1MDkxOnN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxubW0vcGFnZV9hbGxvYy5jLTUwOTItXFx0XFx0aW50IHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTUxNjA9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUyMTAtXFx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xcbm1tL3BhZ2VfYWxsb2MuYzo1MjExOlxcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcXHUwMDI2YWMsIFxcdTAwMjZnZnAsIFxcdTAwMjZhbGxvY19mbGFncykpXFxubW0vcGFnZV9hbGxvYy5jLTUyMTItXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTM4ND1zdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTU0MjEtXFx0YWxsb2NfZ2ZwID0gZ2ZwO1xcbm1tL3BhZ2VfYWxsb2MuYzo1NDIyOlxcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIG9yZGVyLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgXFx1MDAyNmFjLFxcbm1tL3BhZ2VfYWxsb2MuYy01NDIzLVxcdFxcdFxcdFxcdTAwMjZhbGxvY19nZnAsIFxcdTAwMjZmYXN0cGF0aF9hbGxvY19mbGFncykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQyOjQxLjM5NzQ3ODI3OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NTI3NDU4MzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBGbGFncyBhbmQgQ29udGV4dCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHNwZWNpZmljYWxseSBob3cgYWxsb2NhdGlvbiBmbGFncyBhbmQgY29udGV4dHMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBmaXJzdCB0aGluZyBJJ20gZXhhbWluaW5nIGlzIGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgLiBJIHNlZSBzb21lIGNyaXRpY2FsIGNoZWNrcyBoZXJlOiBpdCdzIGVuc3VyaW5nIHRoZSByZXF1ZXN0ZWQgYG9yZGVyYCAoZm9yIHBhZ2UgYWxsb2NhdGlvbikgaXMgd2l0aGluIGJvdW5kcywgd2hpY2ggaXMgZ29vZCBzYW5pdHkgY2hlY2tpbmcuIEl0J3MgdXNpbmcgYGdmcF9hbGxvd2VkX21hc2tgIGFuZCBhcHBseWluZyBzY29wZWQgYWxsb2NhdGlvbiBjb25zdHJhaW50cyB1c2luZyBgY3VycmVudF9nZnBfY29udGV4dChnZnApYC4gIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UgdG8gbWFuYWdlIGhvdyB0aGUgYWxsb2NhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLCBwYXJ0aWN1bGFybHkgYXZvaWRpbmcgcG90ZW50aWFsbHkgZGlzcnVwdGl2ZSBvcGVyYXRpb25zLlxuXG5OZXh0LCBJJ20gY29tcGFyaW5nIHRoZSBvbGQgYW5kIG5ldyBjb2RlIHdpdGhpbiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLiAgVGhlIGRpZmZlcmVuY2UgYXBwZWFycyB0byBiZSBzdWJ0bGUgYnV0IHNpZ25pZmljYW50LiBCZWZvcmUgdGhpcyBwYXRjaCwgdGhlIGBnZnBgIGZsYWcsIGFmdGVyIG1hc2tpbmcgd2l0aCBgZ2ZwX2FsbG93ZWRfbWFza2Agd2FzIHBhc3NlZCBkaXJlY3RseSB0byBgcHJlcGFyZV9hbGxvY19wYWdlcygpYC4gTm93LCBpdCBnb2VzIHRocm91Z2ggYGN1cnJlbnRfZ2ZwX2NvbnRleHQoKWAgYmVmb3JlIGJlaW5nIHBhc3NlZC5cblxuTm93IGl0IGNsaWNrcyEgSSByZWNhbGwgdGhhdCBgYWxsb2NfZmxhZ3NfY21hYCBoYXMgYSBjb21tZW50IHRoYXQgaXMgY3J1Y2lhbCBoZXJlOiBJdCBleHBsaWNpdGx5IHN0YXRlcyB0aGF0IGl0IG11c3QgYmUgY2FsbGVkICphZnRlciogYGN1cnJlbnRfZ2ZwX2NvbnRleHQoKWAuIFRoYXQncyB0aGUga2V5LiAgYGN1cnJlbnRfZ2ZwX2NvbnRleHQoKWAgbW9kaWZpZXMgdGhlIGBnZnBfbWFza2AsIHdoaWNoIGNhbiBpbXBhY3QgdGhlIGJlaGF2aW9yIG9mIHRoZSBhbGxvY2F0b3IuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpcyBjb3JyZWN0bHkgbW92aW5nIHRoZSBjYWxsIHRvIGBjdXJyZW50X2dmcF9jb250ZXh0KClgIGJlZm9yZSB0aGUgY2FsbCB0byBgcHJlcGFyZV9hbGxvY19wYWdlcygpYC4gVGhpcyBzZXF1ZW5jZSBpcyBjcml0aWNhbCwgYmVjYXVzZSBpdCBlbnN1cmVzIHRoYXQgYGFsbG9jX2ZsYWdzX2NtYWAgZnVuY3Rpb25zIGNvcnJlY3RseSB3aXRoIHRoZSBhZGp1c3RlZCBgZ2ZwX21hc2tgIHJlc3VsdGluZyBmcm9tIHRoZSBjb250ZXh0IGFwcGxpY2F0aW9uLiBUaGlzIGlzIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgY2hhbmdlIHRvIGVuc3VyZSBwcm9wZXIgYWxsb2NhdGlvbiBiZWhhdmlvciwgZXNwZWNpYWxseSB3aGVuIHdvcmtpbmcgd2l0aCBDTUEgKENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvcikgYW5kIG90aGVyIGNvbnRleHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUwMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTo0Mjo0Ny45MjQ5Mzg5MjJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDc3NzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX2ZsYWdzX2NtYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2FsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTM3NTI9YWxsb2NfZmxhZ3Nfbm9mcmFnbWVudChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMzc4NS0vKiBNdXN0IGJlIGNhbGxlZCBhZnRlciBjdXJyZW50X2dmcF9jb250ZXh0KCkgd2hpY2ggY2FuIGNoYW5nZSBnZnBfbWFzayAqL1xcbm1tL3BhZ2VfYWxsb2MuYzozNzg2OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzX2NtYShnZnBfdCBnZnBfbWFzaylcXG5tbS9wYWdlX2FsbG9jLmMtMzc4Ny17XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDU1MT1hbGxvY19mbGFnc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTQ1NzgtXFxubW0vcGFnZV9hbGxvYy5jOjQ1Nzk6XFx0YWxsb2NfZmxhZ3MgfD0gYWxsb2NfZmxhZ3NfY21hKGdmcF9tYXNrKTtcXG5tbS9wYWdlX2FsbG9jLmMtNDU4MC1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00Nzg0PV9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy00ODg5LVxcdGlmIChyZXNlcnZlX2ZsYWdzKVxcbm1tL3BhZ2VfYWxsb2MuYzo0ODkwOlxcdFxcdGFsbG9jX2ZsYWdzID0gYWxsb2NfZmxhZ3NfY21hKGdmcF9tYXNrKSB8IHJlc2VydmVfZmxhZ3MgfFxcbm1tL3BhZ2VfYWxsb2MuYy00ODkxLVxcdFxcdFxcdFxcdGFjLVxcdTAwM2VhbGxvY19mbGFncyB8IChhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX0tTV0FQRCk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTA5MT1zdGF0aWMgaW5saW5lIGJvb2wgcHJlcGFyZV9hbGxvY19wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUxMjItXFxubW0vcGFnZV9hbGxvYy5jOjUxMjM6XFx0KmFsbG9jX2ZsYWdzIHw9IGFsbG9jX2ZsYWdzX2NtYShnZnBfbWFzayk7XFxubW0vcGFnZV9hbGxvYy5jLTUxMjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQyOjQ3Ljk3MDQyNTI4N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzk0NzQ5MTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBBbGxvY2F0aW9uIEJ1ZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBtZW1vcnkgYWxsb2NhdGlvbiBjb2RlIGFuZCBzb21ldGhpbmcganVzdCBqdW1wZWQgb3V0IGF0IG1lLiBJJ20gbG9va2luZyBzcGVjaWZpY2FsbHkgYXQgbGluZSAzNzg1LCB3aGljaCBpcyB0aGlzIGNvbW1lbnQ6IGAvKiBNdXN0IGJlIGNhbGxlZCBhZnRlciBjdXJyZW50X2dmcF9jb250ZXh0KCkgd2hpY2ggY2FuIGNoYW5nZSBnZnBfbWFzayAqL2AuIFRoYXQncyBhIHJlZCBmbGFnIGltbWVkaWF0ZWx5LiBUaGVuIEkgc2VlIHRoYXQgYHByZXBhcmVfYWxsb2NfcGFnZXNgIGlzIGNhbGxpbmcgYGFsbG9jX2ZsYWdzX2NtYShnZnBfbWFzaylgLiBNeSBjb25jZXJuIGlzIHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCAqdXNlZCogdG8gY2FsbCBgcHJlcGFyZV9hbGxvY19wYWdlc2Agd2l0aG91dCBhIGNhbGwgdG8gYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIGJlZm9yZWhhbmQhIFRoYXQncyBhIHBvdGVudGlhbCByZWNpcGUgZm9yIGRpc2FzdGVyLiBgY3VycmVudF9nZnBfY29udGV4dGAgY291bGQgYmUgbW9kaWZ5aW5nIHRoYXQgZ2ZwX21hc2ssIGFuZCBpZiB3ZSdyZSBjYWxsaW5nIGBhbGxvY19mbGFnc19jbWFgIHdpdGggYSBzdGFsZSBtYXNrLCB3ZSdyZSBsaWtlbHkgdG8gaGF2ZSBhIHZlcnkgYmFkIHRpbWUuIFRoaXMgbmVlZHMgZnVydGhlciBzY3J1dGlueS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgYWxsb2NfZmxhZ3NfY21hYCBpcyBkb2luZyB3aXRoIHRoYXQgYGdmcF9tYXNrYC4uLiBsZXQncyBkaXZlIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQgaXQgaXMgYWN0dWFsbHkgbWFuaXB1bGF0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg5NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTo0Mjo1MC4zNjUxNzgzMjJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQxNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNzgwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNzgwOlxcdFxcdGFsbG9jX2ZsYWdzIHw9IEFMTE9DX05PRlJBR01FTlQ7XFxuMzc4MTpcXHQjZW5kaWYgLyogQ09ORklHX1pPTkVfRE1BMzIgKi9cXG4zNzgyOlxcdFxcdHJldHVybiBhbGxvY19mbGFncztcXG4zNzgzOlxcdH1cXG4zNzg0OlxcdFxcbjM3ODU6XFx0LyogTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgY3VycmVudF9nZnBfY29udGV4dCgpIHdoaWNoIGNhbiBjaGFuZ2UgZ2ZwX21hc2sgKi9cXG4zNzg2OlxcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzX2NtYShnZnBfdCBnZnBfbWFzaylcXG4zNzg3OlxcdHtcXG4zNzg4OlxcdCNpZmRlZiBDT05GSUdfQ01BXFxuMzc4OTpcXHRcXHRpZiAoZ2ZwX21pZ3JhdGV0eXBlKGdmcF9tYXNrKSA9PSBNSUdSQVRFX01PVkFCTEUpXFxuMzc5MDpcXHRcXHRcXHRyZXR1cm4gQUxMT0NfQ01BO1xcbjM3OTE6XFx0I2VuZGlmXFxuMzc5MjpcXHRcXHRyZXR1cm4gQUxMT0NfREVGQVVMVDtcXG4zNzkzOlxcdH1cXG4zNzk0OlxcdFxcbjM3OTU6XFx0LypcXG4zNzk2OlxcdCAqIGdldF9wYWdlX2Zyb21fZnJlZWxpc3QgZ29lcyB0aHJvdWdoIHRoZSB6b25lbGlzdCB0cnlpbmcgdG8gYWxsb2NhdGVcXG4zNzk3OlxcdCAqIGEgcGFnZS5cXG4zNzk4OlxcdCAqL1xcbjM3OTk6XFx0c3RhdGljIHN0cnVjdCBwYWdlICpcXG4zODAwOlxcdGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwgaW50IGFsbG9jX2ZsYWdzLFxcbjM4MDE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjKVxcbjM4MDI6XFx0e1xcbjM4MDM6XFx0XFx0c3RydWN0IHpvbmVyZWYgKno7XFxuMzgwNDpcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDI6NTAuMzY1NTIyMTIyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjkzNjAzOTUzNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRvaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZyB3aXRoIGBQRl9NRU1BTExPQ19QSU5gLCB3aGljaCBsb29rcyBsaWtlIGl0IGFmZmVjdHMgdGhlIGBnZnBfbWlncmF0ZXR5cGVgIHRocm91Z2ggdGhlIGdmcCBtYXNrLiBBbmQgaGV5LCBpdCdzIGFsc28gdHdlYWtpbmcgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCEgTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgc25pcHBldCBpbnZvbHZpbmcgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBhbmQgdGhlIHpvbmUgaXRlcmF0aW9uLiBUaGlzIGlzIGFsbCBpbiBgbW0vcGFnZV9hbGxvYy5jYCwgc28gd2UgYXJlIHRhbGtpbmcgYWJvdXQgYSAqY29yZSBzdWJzeXN0ZW0qIGhlcmU6IG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5SaWdodCwgc28gYWNjb3JkaW5nIHRvIHRoZSB0cmlhZ2UgZ3VpZGVsaW5lcywgd2UgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyB3YXJyYW50cyBmdXp6aW5nLiBMZXQncyBzZWUuLi4gdGhlIGNvcmUgdHJpYWdlIHBoaWxvc29waHkgcHJpb3JpdGl6ZXMgcmVhY2hhYmlsaXR5LCBhbmQgd2Ugb25seSAqYXZvaWQqIGZ1enppbmcgZm9yIHN0cmljdGx5IHVucmVhY2hhYmxlIGNvZGUuIEFsc28sIHJlZmFjdG9yaW5nIGFuZCBjbGVhbnVwcyB3aGljaCBhcmUgcmVhY2hhYmxlIHNob3VsZCBiZSBjb25zaWRlcmVkLiBOb3csIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBhcmUgcHJldHR5IGNsZWFyOiBub24ta2VybmVsIHN0dWZmLCB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgb3IgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgdGhhdCBkb2Vzbid0IGFwcGx5LiBUaGlzIHBhdGNoIGRlZmluaXRlbHkgZG9lc24ndCBmYWxsIGludG8gYW55IG9mIHRob3NlIGNhdGVnb3JpZXMuIEl0J3MgbW9kaWZ5aW5nIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgd2hpY2ggaXMgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgYW5kIGlzIGEgY29yZSBzdWJzeXN0ZW0gYW5kIHJlYWNoYWJsZSwgc28gaXQncyBhIHJ1bnRpbWUgYmVoYXZpb3IgY2hhbmdlIHRoYXQgY291bGQgZGVmaW5pdGVseSBiZSB0cmlnZ2VyZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gbWVtb3J5IG1hbmFnZW1lbnQuXG5cblRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2AgTVVTVCBiZSBgdHJ1ZWAuIE5vIHF1ZXN0aW9uIGFib3V0IHRoYXQuXG5cbk5vdywgd2UgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpY3MuIERvZXMgdGhpcyBtb2RpZmljYXRpb24gaGF2ZSBhbnkgc3BlY2lmaWMgYENPTkZJR19gIHJlcXVpcmVtZW50cz8gV2UgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGBFbmFibGVDb25maWdzYC4gQW5kIGFyZSB0aGVyZSBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0byBmb2N1cyBmdXp6aW5nIG9uLCBmb3IgYEZvY3VzU3ltYm9sc2A/IExldCdzIGNoZWNrIGBtbS9wYWdlX2FsbG9jLmNgIHRvIHNlZSBpZiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIHVuZGVyIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgbGlrZSAjaWZkZWZzLiBJJ2xsIGZvY3VzIGFyb3VuZCBsaW5lIDUxNjAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjUzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDI6NTkuNzI1OTIwMzE2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTE1MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTE1MDpcXHQgKiBOb3RlIHRoYXQgb25seSB0aGUgZWxlbWVudHMgaW4gQHBhZ2VfYXJyYXkgdGhhdCB3ZXJlIGNsZWFyZWQgdG8gJU5VTEwgb25cXG41MTUxOlxcdCAqIGVudHJ5IGFyZSBwb3B1bGF0ZWQgd2l0aCBuZXdseSBhbGxvY2F0ZWQgcGFnZXMuIEBucl9wYWdlcyBpcyB0aGUgbWF4aW11bVxcbjUxNTI6XFx0ICogbnVtYmVyIG9mIHBhZ2VzIHRoYXQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIGFycmF5LlxcbjUxNTM6XFx0ICpcXG41MTU0OlxcdCAqIFJldHVybnMgdGhlIG51bWJlciBvZiBwYWdlcyBpbiBAcGFnZV9hcnJheSwgaW5jbHVkaW5nIG9uZXMgYWxyZWFkeVxcbjUxNTU6XFx0ICogYWxsb2NhdGVkIG9uIGVudHJ5LiAgVGhpcyBjYW4gYmUgbGVzcyB0aGFuIHRoZSBudW1iZXIgcmVxdWVzdGVkIGluIEBucl9wYWdlcyxcXG41MTU2OlxcdCAqIGJ1dCBhbGwgZW1wdHkgc2xvdHMgYXJlIGZpbGxlZCBmcm9tIHRoZSBiZWdpbm5pbmcuICBJLmUuLCBpZiBhbGwgc2xvdHMgaW5cXG41MTU3OlxcdCAqIEBwYWdlX2FycmF5IHdlcmUgc2V0IHRvICVOVUxMIG9uIGVudHJ5LCB0aGUgc2xvdHMgZnJvbSAwIHRvIHRoZSByZXR1cm4gdmFsdWVcXG41MTU4OlxcdCAqIC0gMSB3aWxsIGJlIGZpbGxlZC5cXG41MTU5OlxcdCAqL1xcbjUxNjA6XFx0dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxcbjUxNjE6XFx0XFx0XFx0XFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcXG41MTYyOlxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG41MTYzOlxcdHtcXG41MTY0OlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbjUxNjU6XFx0XFx0c3RydWN0IHpvbmUgKnpvbmU7XFxuNTE2NjpcXHRcXHRzdHJ1Y3Qgem9uZXJlZiAqejtcXG41MTY3OlxcdFxcdHN0cnVjdCBwZXJfY3B1X3BhZ2VzICpwY3A7XFxuNTE2ODpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpwY3BfbGlzdDtcXG41MTY5OlxcdFxcdHN0cnVjdCBhbGxvY19jb250ZXh0IGFjO1xcbjUxNzA6XFx0XFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzID0gQUxMT0NfV01BUktfTE9XO1xcbjUxNzE6XFx0XFx0aW50IG5yX3BvcHVsYXRlZCA9IDAsIG5yX2FjY291bnQgPSAwO1xcbjUxNzI6XFx0XFxuNTE3MzpcXHRcXHQvKlxcbjUxNzQ6XFx0XFx0ICogU2tpcCBwb3B1bGF0ZWQgYXJyYXkgZWxlbWVudHMgdG8gZGV0ZXJtaW5lIGlmIGFueSBwYWdlcyBuZWVkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQyOjU5LjcyNjM4NTc4NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MzkyNTI0MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGZvciBGdXp6aW5nIEZvY3VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHF1aWNrbHkgYXNzdW1lIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgYSBzdGFuZGFyZCwgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIGZ1bmN0aW9uLCBidXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIHN0YXJ0ZWQgYnkgY2hlY2tpbmcgZm9yIHJlbGV2YW50IGNvbmZpZ3MgbGlrZSBgYWxsb2NfZmxhZ3NfY21hYCwgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgLCBhbmQgYGFsbG9jX3BhZ2VzX2J1bGtgLCBidXQgcmVtZW1iZXJlZCB0aGUgaW5zdHJ1Y3Rpb25zOiBpbnNwZWN0IEtjb25maWcgZmlsZXMsIGNoZWNrIGBkZXBlbmRzIG9uYCBsaW5lcywgYW5kIHN0cmlwIHRoZSBgQ09ORklHX2AgcHJlZml4LiBgQ09ORklHX0NNQWAgaXMgcmVsYXRlZCwgYnV0IHRoZSBpbnN0cnVjdGlvbnMgc2F5IGl0IGlzbid0IHJlcXVpcmVkIHRvIGNvbXBpbGUgb3IgcnVuLiBUaGUgZnVuY3Rpb24gaXRzZWxmIGFwcGVhcnMgdG8gYmUgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gTm8gc3BlY2lhbCBjb25maWdzIHJlcXVpcmVkLiBUaGF0J3MgZ29vZC5cblxuSG93ZXZlciwgYSBxdWljayBjaGVjayBvZiB0aGUgY2FsbCBzaXRlcyBpcyBtYW5kYXRvcnkuIEkgdGhlbiBwYXVzZWQgYW5kIHRob3VnaHQgYWJvdXQgd2hhdCB0aGUgZnV6emluZyBpbnN0cnVjdGlvbnMgc2F5LiBcIkF2b2lkIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRoc1wiIGlzIHRoZSBrZXkuIE5vIGdlbmVyaWMgYWxsb2NhdG9ycy4gU28sIGlzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgYSBnZW5lcmljIGFsbG9jYXRvcj8gSSBoYWQgdG8gdGhpbmsgYWJvdXQgdGhhdCwgYW5kIHRoZW4gcmVtZW1iZXIgdGhlIGRlZmluaXRpb24gZnJvbSB0aGUgaW5zdHJ1Y3Rpb25zOiBcImZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cy4uLlwiLiBPa2F5LCB0aGF0J3Mgbm90IHRydWUhIEkgaGF2ZSB0byBmaW5kIG91dCB3aGljaCBwcm9ncmFtcyBjYWxsIGl0LlxuXG5BIHF1aWNrIGBncmVwYCByZXZlYWxlZCB0aGF0IHRoaXMgZnVuY3Rpb24gaGFzIGEgKmxpbWl0ZWQqIG51bWJlciBvZiBjYWxsZXJzOiBgYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvYCwgYGZ3X2lzb19idWZmZXJfYWxsb2NgLCBgYXJfY29udGV4dF9pbml0YCwgYGFsbG9jX3ByaXZhdGVfcGFnZXNgLCBgbWx4NXZmX2FkZF9wYWdlc2AsIGB2aXJ0aW92Zl9hZGRfbWlncmF0aW9uX3BhZ2VzYCwgYGJ0cmZzX2FsbG9jX3BhZ2VfYXJyYXlgLCBgel9lcm9mc19nYnVmX2dyb3dzaXplYCwgYGZ1c2VfcmVhZGRpcl9hbGxvY19idWZgLCBgYWxsb2NfaW5pdF9kaXJfZGVsZWdgLCBgY29weV9zcGxpY2VfcmVhZGAsIGBpb19yZWdpb25fYWxsb2NhdGVfcGFnZXNgLCBgYXJlbmFfYWxsb2NfcGFnZXNgLCBgdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGVgLCBgX19fYWxsb2NfcGFnZXNfYnVsa2AsIHRoZW4gYSBudW1iZXIgb2YgbWVtcG9saWN5LXJlbGF0ZWQgZnVuY3Rpb25zLCBgdm1fYXJlYV9hbGxvY19wYWdlc2AsIGBfX3BhZ2VfcG9vbF9hbGxvY19uZXRtZW1zX3Nsb3dgLCBhbmQgYHN2Y19maWxsX3BhZ2VzYC4gSXQncyBjbGVhcmx5ICpub3QqIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUga2VybmVsLlxuXG5Ob3csIGEgY3JpdGljYWwgcG9pbnQ6IGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCBjYWxscyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBhbmQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2ZgLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGlzIGZ1bmN0aW9ucyBpbiBgbW0vdm1hbGxvYy5jYC4gSSBzaG91bGQgaW5zcGVjdCB0aGF0IGNvZGUgYXJvdW5kIGxpbmUgMzc0MC4gSSBrbm93IHdoYXQgdG8gZG8gbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzMDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDM6MDYuMTE4OTEyNDMzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NjMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bWFsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzczMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzczMDpcXHRcXHRcXHRcXHQvKlxcbjM3MzE6XFx0XFx0XFx0XFx0ICogQSBtYXhpbXVtIGFsbG93ZWQgcmVxdWVzdCBpcyBoYXJkLWNvZGVkIGFuZCBpcyAxMDBcXG4zNzMyOlxcdFxcdFxcdFxcdCAqIHBhZ2VzIHBlciBjYWxsLiBUaGF0IGlzIGRvbmUgaW4gb3JkZXIgdG8gcHJldmVudCBhXFxuMzczMzpcXHRcXHRcXHRcXHQgKiBsb25nIHByZWVtcHRpb24gb2ZmIHNjZW5hcmlvIGluIHRoZSBidWxrLWFsbG9jYXRvclxcbjM3MzQ6XFx0XFx0XFx0XFx0ICogc28gdGhlIHJhbmdlIGlzIFsxOjEwMF0uXFxuMzczNTpcXHRcXHRcXHRcXHQgKi9cXG4zNzM2OlxcdFxcdFxcdFxcdG5yX3BhZ2VzX3JlcXVlc3QgPSBtaW4oMTAwVUwsIG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkKTtcXG4zNzM3OlxcdFxcbjM3Mzg6XFx0XFx0XFx0XFx0LyogbWVtb3J5IGFsbG9jYXRpb24gc2hvdWxkIGNvbnNpZGVyIG1lbXBvbGljeSwgd2UgY2FuJ3RcXG4zNzM5OlxcdFxcdFxcdFxcdCAqIHdyb25nbHkgdXNlIG5lYXJlc3Qgbm9kZSB3aGVuIG5pZCA9PSBOVU1BX05PX05PREUsXFxuMzc0MDpcXHRcXHRcXHRcXHQgKiBvdGhlcndpc2UgbWVtb3J5IG1heSBiZSBhbGxvY2F0ZWQgaW4gb25seSBvbmUgbm9kZSxcXG4zNzQxOlxcdFxcdFxcdFxcdCAqIGJ1dCBtZW1wb2xpY3kgd2FudHMgdG8gYWxsb2MgbWVtb3J5IGJ5IGludGVybGVhdmluZy5cXG4zNzQyOlxcdFxcdFxcdFxcdCAqL1xcbjM3NDM6XFx0XFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFxcdTAwMjZcXHUwMDI2IG5pZCA9PSBOVU1BX05PX05PREUpXFxuMzc0NDpcXHRcXHRcXHRcXHRcXHRuciA9IGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnAsXFxuMzc0NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRucl9wYWdlc19yZXF1ZXN0LFxcbjM3NDY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0cGFnZXMgKyBucl9hbGxvY2F0ZWQpO1xcbjM3NDc6XFx0XFx0XFx0XFx0ZWxzZVxcbjM3NDg6XFx0XFx0XFx0XFx0XFx0bnIgPSBhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcCwgbmlkLFxcbjM3NDk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0bnJfcGFnZXNfcmVxdWVzdCxcXG4zNzUwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHBhZ2VzICsgbnJfYWxsb2NhdGVkKTtcXG4zNzUxOlxcdFxcbjM3NTI6XFx0XFx0XFx0XFx0Zm9yIChpID0gbnJfYWxsb2NhdGVkOyBpIFxcdTAwM2MgbnJfYWxsb2NhdGVkICsgbnI7IGkrKylcXG4zNzUzOlxcdFxcdFxcdFxcdFxcdG1vZF9scnV2ZWNfcGFnZV9zdGF0ZShwYWdlc1tpXSwgTlJfVk1BTExPQywgMSk7XFxuMzc1NDpcXHRcXG4zNzU1OlxcdFxcdFxcdFxcdG5yX2FsbG9jYXRlZCArPSBucjtcXG4zNzU2OlxcdFxcbjM3NTc6XFx0XFx0XFx0XFx0LypcXG4zNzU4OlxcdFxcdFxcdFxcdCAqIElmIHplcm8gb3IgcGFnZXMgd2VyZSBvYnRhaW5lZCBwYXJ0bHksXFxuMzc1OTpcXHRcXHRcXHRcXHQgKiBmYWxsYmFjayB0byBhIHNpbmdsZSBwYWdlIGFsbG9jYXRvci5cXG4zNzYwOlxcdFxcdFxcdFxcdCAqL1xcbjM3NjE6XFx0XFx0XFx0XFx0aWYgKG5yICE9IG5yX3BhZ2VzX3JlcXVlc3QpXFxuMzc2MjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4zNzYzOlxcdFxcdFxcdH1cXG4zNzY0OlxcdFxcdH1cXG4zNzY1OlxcdFxcbjM3NjY6XFx0XFx0LyogSGlnaC1vcmRlciBwYWdlcyBvciBmYWxsYmFjayBwYXRoIGlmIFxcXCJidWxrXFxcIiBmYWlscy4gKi9cXG4zNzY3OlxcdFxcdHdoaWxlIChucl9hbGxvY2F0ZWQgXFx1MDAzYyBucl9wYWdlcykge1xcbjM3Njg6XFx0XFx0XFx0aWYgKCEoZ2ZwIFxcdTAwMjYgX19HRlBfTk9GQUlMKSBcXHUwMDI2XFx1MDAyNiBmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSlcXG4zNzY5OlxcdFxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTo0MzowNi4xMTkyMTA5NjNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzYzNDE5NjgwNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBNZW1vcnkgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRoZSBwYWdlIGFsbG9jYXRpb24sIGNhbGxpbmcgZWl0aGVyIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIG9yIGBhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mYCDigJMgZ290IGl0LiBCdXQgaG9sZCBvbiwgc29tZXRoaW5nJ3MgbmFnZ2luZyBhdCBtZS4gRG9lcyAqZXZlcnkqIHNpbmdsZSBgdm1hbGxvY2AgY2FsbCB1bHRpbWF0ZWx5IGdvIHRocm91Z2ggYHZtX2FyZWFfYWxsb2NfcGFnZXNgPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LiBJdCdzIGEgZnVuZGFtZW50YWwgcXVlc3Rpb24gYWJvdXQgaG93IHRoZSBgdm1hbGxvY2AgcGF0aCBpcyBzdHJ1Y3R1cmVkLCBhbmQgaXQgaGFzIGltcGxpY2F0aW9ucyBmb3IgdW5kZXJzdGFuZGluZyBtZW1vcnkgYWxsb2NhdGlvbiBvdmVyaGVhZCwgZXNwZWNpYWxseSB3aXRoaW4gdGhlIHZtYWxsb2MgYXJlbmEuIExldCBtZSBxdWlja2x5IHRyYWNlIHRoZSBjYWxsZXJzIG9mIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYC4gVGhpcyB3aWxsIHNob3cgbWUgdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbnMgdGhhdCByZWx5IG9uIHRoaXMgdW5kZXJseWluZyBhbGxvY2F0b3IuIFRoYXQgaXMgdGhlIGZpcnN0IHN0ZXAhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzIwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTo0Mzo0Mi40NjExODMxNjlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MjgwOTk2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bV9hcmVhX2FsbG9jX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3ZtYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bWFsbG9jLmM9MzY3NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcXG5tbS92bWFsbG9jLmM6MzY3Njp2bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcXG5tbS92bWFsbG9jLmMtMzY3Ny1cXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZXMpXFxuLS1cXG5tbS92bWFsbG9jLmM9Mzg3Mz1zdGF0aWMgdm9pZCAqX192bWFsbG9jX2FyZWFfbm9kZShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zOTIxLVxcdCAqL1xcbm1tL3ZtYWxsb2MuYzozOTIyOlxcdGFyZWEtXFx1MDAzZW5yX3BhZ2VzID0gdm1fYXJlYV9hbGxvY19wYWdlcyhcXG5tbS92bWFsbG9jLmMtMzkyMy1cXHRcXHRcXHR2bWFsbG9jX2dmcF9hZGp1c3QoZ2ZwX21hc2ssIHBhZ2Vfb3JkZXIpLCBub2RlLFxcbi0tXFxubW0vdm1hbGxvYy5jLTM5MzEtXFx0XFx0LypcXG5tbS92bWFsbG9jLmM6MzkzMjpcXHRcXHQgKiB2bV9hcmVhX2FsbG9jX3BhZ2VzKCkgY2FuIGZhaWwgZHVlIHRvIGluc3VmZmljaWVudCBtZW1vcnkgYnV0XFxubW0vdm1hbGxvYy5jLTM5MzMtXFx0XFx0ICogYWxzbzotXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQzOjQzLjAwNDAwMDAzM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzU3MDgyMjEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNjb3BlIG9mIGEgRnVuY3Rpb24gZm9yIEZ1enppbmcgRm9jdXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgSSBzaG91bGQgaW5jbHVkZSBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGluIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBmb2N1cyB0aGUgZnV6emVyIG9uLiBGaXJzdCwgSSBub3RpY2VkIHRoYXQgYF9fdm1hbGxvY19hcmVhX25vZGVgIGNhbGxzIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCwgYW5kIGB2bWFsbG9jYCBjYWxscyBgX192bWFsbG9jX2FyZWFfbm9kZWAuIFRoZW4sIHRoaXMgdGhvdWdodCBwb3BwZWQgdXA6IElzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXRzZWxmIGEgY29tbW9uLCB1YmlxdWl0b3VzIGZ1bmN0aW9uPyBUaGF0J3MgdGhlIGNydXggb2YgdGhlIHF1ZXN0aW9uLlxuXG5UaGUgaW5zdHJ1Y3Rpb25zIGFyZSB2ZXJ5IGNsZWFyOiBhdm9pZCBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkIGV2ZXJ5d2hlcmUsIGJlY2F1c2UgbGlzdGluZyB0aGVtIGRpbHV0ZXMgdGhlIGZ1enppbmcgZWZmb3J0LiBJbnN0ZWFkLCBJIG5lZWQgdG8gXCJ0YXJnZXQgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnlwb2ludHNcIi4gV2FpdCBhIG1pbnV0ZeKApiB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gKmlzKiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgISBUaGUgcGF0Y2ggY2xlYXJseSBzaG93cyB0aGUgY2hhbmdlIGlzIGRpcmVjdGx5IHRvIHRoYXQgZnVuY3Rpb24uXG5cblRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IGhpZ2hsaWdodCB0aGF0IHRoZSBmdW5jdGlvbnMgc2hvdWxkIGJlIFwidGhvc2UgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlwiIFNvLCBzaW5jZSB0aGUgYWx0ZXJlZCBsb2dpYyAqaXMqIHdpdGhpbiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLCBsaXN0aW5nIGl0IHNlZW1zIGxvZ2ljYWwuXG5cblRoZSBjb25jZXJuIHdpdGggXCJ1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHNcIiBpcyB0aGF0IGxpc3RpbmcgdGhvc2UgZnVuY3Rpb25zIHdpbGwgbWFrZSB0aGUgZnV6emVyIGZsYWcgbmVhcmx5IGV2ZXJ5IHRlc3QgYXMgcmVsZXZhbnQsIHdoaWNoIGlzIHVzZWxlc3MuIEZvciBleGFtcGxlLCBtb2RpZnlpbmcgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIGluIGEgaGVhZGVyLCBvciBjaGFuZ2luZyBgX19hbGxvY19wYWdlc2Agb3IgYGtmcmVlYCB3b3VsZCBiZSBhIGRpc2FzdGVyLCBzaW5jZSB0aG9zZSBhcmUgY2FsbGVkIGNvbnN0YW50bHkuIElmIEkgd2VyZSB0byBsaXN0IHRoZW0sIGV2ZXJ5IHNpbmdsZSB0ZXN0IGNhc2Ugd291bGQgbWF0Y2guXG5cblNvLCBpcyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIHRydWx5IHViaXF1aXRvdXM/IEl0J3MgdGhlIGJ1bGsgcGFnZSBhbGxvY2F0b3IsIGJ1dCBpcyBpdCAqZXZlcnl3aGVyZSo/IGB2bWFsbG9jYCBjYWxscyBgdm1fYXJlYV9hbGxvY19wYWdlc2AsIGJ1dCBgdm1hbGxvY2AgaXNuJ3QgY2FsbGVkIG5lYXJseSBhcyBvZnRlbiBhcyBga21hbGxvY2Agb3IgYF9fYWxsb2NfcGFnZXNgLiBBbmQgd2hhdCBhYm91dCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGl0c2VsZj8gSWYgSSBkb24ndCBsaXN0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIHdoYXQgZWxzZSBjb3VsZCBJIGxpc3Q/IFRoZSBpbnN0cnVjdGlvbnMgYXJlIHF1aXRlIGNsZWFyLlxuXG5UaGUga2V5IGlzIHRoYXQgdGhlIGZlYXR1cmUgbG9naWMgYmVpbmcgYWx0ZXJlZCBpcyAqd2l0aGluKiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLiBJdCdzIG5vdCBsaWtlIGEgZ2VuZXJpYyBtZW1vcnkgYWxsb2NhdG9yIGZ1bmN0aW9uLiBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgd2hhdCB0aGUgZnV6emVyIHdpbGwgYmUgZm9jdXNpbmcgb246IGlmIHRoZSBwYXRjaCBjaGFuZ2VzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIHRoZW4gZm9jdXNpbmcgdGhlIGZ1enplciBvbiB0aGF0IGZ1bmN0aW9uIHdpbGwgYmUgdGhlIGJlc3Qgd2F5IHRvIGRldGVybWluZSBpZiB0aGF0IGNoYW5nZSBicmVha3MgYW55dGhpbmcuXG5cblNvLCBkb2VzIGV2ZXJ5IHByb2dyYW0gY2FsbCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgPyBObyEgSXQncyBjYWxsZWQgYnkgc3BlY2lmaWMgc3Vic3lzdGVtcyB0aGF0IHVzZSBidWxrIGFsbG9jYXRpb246IHZtYWxsb2MsIHNwbGljZSwgcGFnZV9wb29sLCBidHJmcywgZXJvZnMsIGZ1c2UsIGlvX3VyaW5nLCBhbmQgYnBmIGFyZW5hLiBJdCdzIG5vdCBhcyBicm9hZGx5IHVzZWQgYXMgYF9fYWxsb2NfcGFnZXNfbm9wcm9mYCwgZm9yIGV4YW1wbGUuXG5cbldhaXQsIHdoYXQgYWJvdXQgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmA/IEkgbmVlZCB0byBjbGFyaWZ5IGlmIHRoZXJlIGlzIGFueSBvdmVybGFwIGluIGJlaGF2aW9yLiBJJ20gY2hlY2tpbmcgdGhlIHNvdXJjZSB0byBjb21wYXJlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgd2l0aCBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYC4gSSdtIHZlcmlmeWluZyB0aGlzIGJlY2F1c2UgdGhlIGNvZGUgaXMgZXhwb3J0ZWQgdXNpbmcgYEVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKWAuIE5vdywgSSdtIGdvaW5nIHRvIGRldGVybWluZSBpZiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIGEgcHJlY2lzZSBzeW1ib2wgaW4gYHZtbGludXhgIG9yIGBTeXN0ZW0ubWFwYC4gTGV0IG1lIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBzeW1ib2xzIG9yIGlmIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgdGhlIGV4YWN0IHN5bWJvbC4gQWxzbywgSSdsbCBzZWFyY2ggZm9yIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjc3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTo0NDowNi41NzQ4MjUyMjJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMzUxMzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz0yNTkxPXN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNjA3LVxcdFxcdGlmIChkZWx0YSkge1xcbm1tL21lbXBvbGljeS5jOjI2MDg6XFx0XFx0XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI2MDktXFx0XFx0XFx0XFx0XFx0aW50ZXJsZWF2ZV9ub2Rlcyhwb2wpLCBOVUxMLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjYxMy1cXHRcXHR9IGVsc2Uge1xcbm1tL21lbXBvbGljeS5jOjI2MTQ6XFx0XFx0XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI2MTUtXFx0XFx0XFx0XFx0XFx0aW50ZXJsZWF2ZV9ub2Rlcyhwb2wpLCBOVUxMLFxcbi0tXFxubW0vbWVtcG9saWN5LmM9Mjc0ND1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcF90IGdmcCwgaW50IG5pZCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NTMtXFxubW0vbWVtcG9saWN5LmM6Mjc1NDpcXHRucl9hbGxvY2F0ZWQgID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YocHJlZmVycmVkX2dmcCwgbmlkLCBcXHUwMDI2cG9sLVxcdTAwM2Vub2RlcyxcXG5tbS9tZW1wb2xpY3kuYy0yNzU1LVxcdFxcdFxcdFxcdFxcdCAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NTctXFx0aWYgKG5yX2FsbG9jYXRlZCBcXHUwMDNjIG5yX3BhZ2VzKVxcbm1tL21lbXBvbGljeS5jOjI3NTg6XFx0XFx0bnJfYWxsb2NhdGVkICs9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCwgbnVtYV9ub2RlX2lkKCksIE5VTEwsXFxubW0vbWVtcG9saWN5LmMtMjc1OS1cXHRcXHRcXHRcXHRucl9wYWdlcyAtIG5yX2FsbG9jYXRlZCxcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI3NzA9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc5My1cXHRub2RlbWFzayA9IHBvbGljeV9ub2RlbWFzayhnZnAsIHBvbCwgTk9fSU5URVJMRUFWRV9JTkRFWCwgXFx1MDAyNm5pZCk7XFxubW0vbWVtcG9saWN5LmM6Mjc5NDpcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBuaWQsIG5vZGVtYXNrLFxcbm1tL21lbXBvbGljeS5jLTI3OTUtXFx0XFx0XFx0XFx0ICAgICAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01MDkxPXN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTE1OS0gKi9cXG5tbS9wYWdlX2FsbG9jLmM6NTE2MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxubW0vcGFnZV9hbGxvYy5jLTUxNjEtXFx0XFx0XFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MzAwLX1cXG5tbS9wYWdlX2FsbG9jLmM6NTMwMTpFWFBPUlRfU1lNQk9MX0dQTChhbGxvY19wYWdlc19idWxrX25vcHJvZik7XFxubW0vcGFnZV9hbGxvYy5jLTUzMDItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQ0OjA2LjYyODE4NDY4NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDAwNTU4Mjk1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBgY3VycmVudF9nZnBfY29udGV4dGAgaW4gQnVsayBQYWdlIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBmdW5jdGlvbi4gSSBpbml0aWFsbHkgdGhvdWdodCBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBtaWdodCBiZSByZWxldmFudCwgYnV0IGl0IHNlZW1zIHRoZSBjcnVjaWFsIGNoYW5nZSBpcyAqd2l0aGluKiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGl0c2VsZi4gVGhlIHF1ZXN0aW9uIGlzLCB3aHkgd2FzIGBjdXJyZW50X2dmcF9jb250ZXh0KGdmcClgIGFkZGVkIGhlcmU/XG5cblRoZSBrZXkgcmVhbGl6YXRpb24gaXMgdGhhdCBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBjYWxscyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIChvciBpdHMgdmFyaWF0aW9ucyB2aWEgaW50ZXJsZWF2ZSBmdW5jdGlvbnMpLCBtZWFuaW5nIEFMTCBidWxrIHBhZ2UgYWxsb2NhdGlvbnMgdWx0aW1hdGVseSBnbyB0aHJvdWdoIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuXG5cbk5vdywgbG9va2luZyBhdCB0aGUgY29kZSwgaXQncyBjbGVhciBgY3VycmVudF9nZnBfY29udGV4dGAgaXMgYXBwbGllZCAqYmVmb3JlKiBgcHJlcGFyZV9hbGxvY19wYWdlc2AuIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgcHJlcGFyZV9hbGxvY19wYWdlc2AgZG9lcyBpbiB0aGUgY29udGV4dCBvZiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLlxuXG5gcHJlcGFyZV9hbGxvY19wYWdlc2Agc2V0cyBgYWMtXHUwMDNlaGlnaGVzdF96b25laWR4YCBhbmQgZXZlbnR1YWxseSwgdmlhIGBhbGxvY19mbGFnc19jbWEoZ2ZwX21hc2spYCwgaXQgZGVjaWRlcyBpZiBgQUxMT0NfQ01BYCBpcyBzZXQgaW4gYGFsbG9jX2ZsYWdzYC4gSGVyZSdzIHRoZSBjcml0aWNhbCBiaXQ6IGlmIGBQRl9NRU1BTExPQ19QSU5gIGlzIHNldCBpbiB0aGUgY3VycmVudCB0YXNrJ3MgZmxhZ3MgKG1lYW5pbmcgdGhlIG1lbW9yeSBpcyBwaW5uZWQgYW5kIHNob3VsZG4ndCBiZSBtb3ZlZCksIGBjdXJyZW50X2dmcF9jb250ZXh0YCAqc3RyaXBzKiBgX19HRlBfTU9WQUJMRWAuXG5cbldpdGhvdXQgYF9fR0ZQX01PVkFCTEVgLCBgZ2ZwX21pZ3JhdGV0eXBlKGdmcF9tYXNrKWAgaXMgTk9UIGBNSUdSQVRFX01PVkFCTEVgLCBhbmQgdGhlcmVmb3JlIGBBTExPQ19DTUFgIGlzbid0IHNldC4gVGhpcyBpcyBhIHZlcnkgaW1wb3J0YW50IHNhZmV0eSBjaGVjay4gUHJldmlvdXNseSwgKndpdGhvdXQqIHRoaXMgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIGNhbGwsIGlmIGEgY2FsbGVyIHBhc3NlZCBgR0ZQX0hJR0hVU0VSX01PVkFCTEVgLCB0aGVuIGBhbGxvY19mbGFnc2Agd291bGQgaW5jb3JyZWN0bHkgZ2V0IGBBTExPQ19DTUFgIHNldC4gVGhpcyB2aW9sYXRlcyB0aGUgYFBGX01FTUFMTE9DX1BJTmAgY29uc3RyYWludCBiZWNhdXNlIHBpbm5lZCBwYWdlcyAqbXVzdCBub3QqIGNvbWUgZnJvbSB0aGUgQ01BLCB3aGljaCBieSBkZWZpbml0aW9uIGNvbnRhaW5zIG1pZ3JhdGFibGUgcGFnZXMuXG5cbk5vdywgdG8gbWFrZSBzdXJlIEkgYW0gc2VlaW5nIHRoZSB3aG9sZSBwaWN0dXJlLCBJIHdpbGwgY2hlY2sgd2hhdCBlbHNlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZG9lcyBhZnRlciBjYWxsaW5nIGBwcmVwYXJlX2FsbG9jX3BhZ2VzYC4gSXQgc2VlbXMgd2UgYXJlIHVzaW5nIGBBTExPQ19XTUFSS19MT1dgIG9yIHRyeV9sb2NrcyBQQ1AsIGJ1dCB0aGVuIGBwcmVwYXJlX2FsbG9jX3BhZ2VzYCBpcyBjYWxsZWQsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBzZWVpbmcgZXZlcnl0aGluZy5cblxuT2theSwgbGV0J3MgbG9vayBhZ2FpbiBhdCBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgbWFrZSBzdXJlIHRoZXJlIGlzIG5vdGhpbmcgZWxzZSBJIG5lZWQgdG8gc2VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDEyMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDQ6MTYuNjMzNzcwMzEzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NDA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTA5MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTA5MDpcXHRcXG41MDkxOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuNTA5MjpcXHRcXHRcXHRpbnQgcHJlZmVycmVkX25pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2ssXFxuNTA5MzpcXHRcXHRcXHRzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGdmcF90ICphbGxvY19nZnAsXFxuNTA5NDpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgKmFsbG9jX2ZsYWdzKVxcbjUwOTU6XFx0e1xcbjUwOTY6XFx0XFx0YWMtXFx1MDAzZWhpZ2hlc3Rfem9uZWlkeCA9IGdmcF96b25lKGdmcF9tYXNrKTtcXG41MDk3OlxcdFxcdGFjLVxcdTAwM2V6b25lbGlzdCA9IG5vZGVfem9uZWxpc3QocHJlZmVycmVkX25pZCwgZ2ZwX21hc2spO1xcbjUwOTg6XFx0XFx0YWMtXFx1MDAzZW5vZGVtYXNrID0gbm9kZW1hc2s7XFxuNTA5OTpcXHRcXHRhYy1cXHUwMDNlbWlncmF0ZXR5cGUgPSBnZnBfbWlncmF0ZXR5cGUoZ2ZwX21hc2spO1xcbjUxMDA6XFx0XFxuNTEwMTpcXHRcXHRpZiAoY3B1c2V0c19lbmFibGVkKCkpIHtcXG41MTAyOlxcdFxcdFxcdCphbGxvY19nZnAgfD0gX19HRlBfSEFSRFdBTEw7XFxuNTEwMzpcXHRcXHRcXHQvKlxcbjUxMDQ6XFx0XFx0XFx0ICogV2hlbiB3ZSBhcmUgaW4gdGhlIGludGVycnVwdCBjb250ZXh0LCBpdCBpcyBpcnJlbGV2YW50XFxuNTEwNTpcXHRcXHRcXHQgKiB0byB0aGUgY3VycmVudCB0YXNrIGNvbnRleHQuIEl0IG1lYW5zIHRoYXQgYW55IG5vZGUgb2suXFxuNTEwNjpcXHRcXHRcXHQgKi9cXG41MTA3OlxcdFxcdFxcdGlmIChpbl90YXNrKCkgXFx1MDAyNlxcdTAwMjYgIWFjLVxcdTAwM2Vub2RlbWFzaylcXG41MTA4OlxcdFxcdFxcdFxcdGFjLVxcdTAwM2Vub2RlbWFzayA9IFxcdTAwMjZjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7XFxuNTEwOTpcXHRcXHRcXHRlbHNlXFxuNTExMDpcXHRcXHRcXHRcXHQqYWxsb2NfZmxhZ3MgfD0gQUxMT0NfQ1BVU0VUO1xcbjUxMTE6XFx0XFx0fVxcbjUxMTI6XFx0XFxuNTExMzpcXHRcXHRtaWdodF9hbGxvYyhnZnBfbWFzayk7XFxuNTExNDpcXHRcXG41MTE1OlxcdFxcdC8qXFxuNTExNjpcXHRcXHQgKiBEb24ndCBpbnZva2Ugc2hvdWxkX2ZhaWwgbG9naWMsIHNpbmNlIGl0IG1heSBjYWxsXFxuNTExNzpcXHRcXHQgKiBnZXRfcmFuZG9tX3UzMigpIGFuZCBwcmludGsoKSB3aGljaCBuZWVkIHRvIHNwaW5fbG9jay5cXG41MTE4OlxcdFxcdCAqL1xcbjUxMTk6XFx0XFx0aWYgKCEoKmFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfTk9MT0NLKSBcXHUwMDI2XFx1MDAyNlxcbjUxMjA6XFx0XFx0ICAgIHNob3VsZF9mYWlsX2FsbG9jX3BhZ2UoZ2ZwX21hc2ssIG9yZGVyKSlcXG41MTIxOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG41MTIyOlxcdFxcbjUxMjM6XFx0XFx0KmFsbG9jX2ZsYWdzIHw9IGFsbG9jX2ZsYWdzX2NtYShnZnBfbWFzayk7XFxuNTEyNDpcXHRcXG41MTI1OlxcdFxcdC8qIERpcnR5IHpvbmUgYmFsYW5jaW5nIG9ubHkgZG9uZSBpbiB0aGUgZmFzdCBwYXRoICovXFxuNTEyNjpcXHRcXHRhYy1cXHUwMDNlc3ByZWFkX2RpcnR5X3BhZ2VzID0gKGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfV1JJVEUpO1xcbjUxMjc6XFx0XFxuNTEyODpcXHRcXHQvKlxcbjUxMjk6XFx0XFx0ICogVGhlIHByZWZlcnJlZCB6b25lIGlzIHVzZWQgZm9yIHN0YXRpc3RpY3MgYnV0IGNydWNpYWxseSBpdCBpc1xcbjUxMzA6XFx0XFx0ICogYWxzbyB1c2VkIGFzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhlIHpvbmVsaXN0IGl0ZXJhdG9yLiBJdFxcbjUxMzE6XFx0XFx0ICogbWF5IGdldCByZXNldCBmb3IgYWxsb2NhdGlvbnMgdGhhdCBpZ25vcmUgbWVtb3J5IHBvbGljaWVzLlxcbjUxMzI6XFx0XFx0ICovXFxuNTEzMzpcXHRcXHRhYy1cXHUwMDNlcHJlZmVycmVkX3pvbmVyZWYgPSBmaXJzdF96b25lc196b25lbGlzdChhYy1cXHUwMDNlem9uZWxpc3QsXFxuNTEzNDpcXHRcXHRcXHRcXHRcXHRcXHRhYy1cXHUwMDNlaGlnaGVzdF96b25laWR4LCBhYy1cXHUwMDNlbm9kZW1hc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTo0NDoxNi42MzQwNDYwOTRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDQ5OTA1MDc5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gQWxsb2NhdGlvbiBCZWhhdmlvcioqXG5cblJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGxpbmUgNTExMyDigJMgYG1pZ2h0X2FsbG9jKGdmcF9tYXNrKTtgLiBUaGF0IGZ1bmN0aW9uIGNhbGwsIGBtaWdodF9hbGxvY2AsIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBrbm93IHRoYXQgZnVuY3Rpb24ncyBwdXJwb3NlIGlzIHRvIGFjdCBhcyBhIGhpbnQgdG8gdGhlIGtlcm5lbCBhYm91dCB3aGV0aGVyIGEgbWVtb3J5IGFsbG9jYXRpb24gKm1pZ2h0KiBoYXBwZW4gYXQgYSBzcGVjaWZpYyBwb2ludCBpbiB0aGUgY29kZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWluZCBhYm91dCBleGFjdGx5IHdoYXQgaW1wbGljYXRpb25zIHRoYXQgaGFzLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgYG1pZ2h0X2FsbG9jYCBjYWxsIGlzIGJlaW5nIHVzZWQgY29ycmVjdGx5LCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBgZ2ZwX21hc2tgIHBhc3NlZCB0byBpdC4gVGhpcyBtYXNrIGRpY3RhdGVzIHRoZSB0eXBlIG9mIGFsbG9jYXRpb24gYWxsb3dlZDogd2hldGhlciBpdCBjYW4gc2xlZXAsIHdoZXRoZXIgaXQgY2FuIGJlIGZyb20gYSBzcGVjaWZpYyBOVU1BIG5vZGUsIG9yIGlmIGl0J3MgcmVzZXJ2ZWQgZm9yIGNlcnRhaW4gY29udGV4dHMuIFRoZSBjaG9pY2Ugb2YgYGdmcF9tYXNrYCBpcyBjcnVjaWFsLiBJcyBpdCB0aGUgcmlnaHQgb25lIGZvciB0aGlzIHBhcnQgb2YgdGhlIGtlcm5lbD8gSXMgdGhlcmUgYSByaXNrIG9mIGRlYWRsb2NrLCBvciBleGNlc3NpdmUgbGF0ZW5jeSwgaWYgYW4gYWxsb2NhdGlvbiAqZG9lcyogZW5kIHVwIGhhcHBlbmluZz8gSSdtIGdvaW5nIHRvIGxvb2sgZGVlcGVyIGludG8gYG1pZ2h0X2FsbG9jYCB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBwb3RlbnRpYWwgcGl0ZmFsbHMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY4NDEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQ0OjIxLjEzMzA5OTM1OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUyNDkwNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlnaHRfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTI4Nz1zdGF0aWMgaW5saW5lIHZvaWQgbWVtYWxsb2NfcmV0cnlfd2FpdChnZnBfdCBnZnBfZmxhZ3MpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMzA2LS8qKlxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDozMDc6ICogbWlnaHRfYWxsb2MgLSBNYXJrIHBvc3NpYmxlIGFsbG9jYXRpb24gc2l0ZXNcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMzA4LSAqIEBnZnBfbWFzazogZ2ZwX3QgZmxhZ3MgdGhhdCB3b3VsZCBiZSB1c2VkIHRvIGFsbG9jYXRlXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMzEzLSAqL1xcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDozMTQ6c3RhdGljIGlubGluZSB2b2lkIG1pZ2h0X2FsbG9jKGdmcF90IGdmcF9tYXNrKVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0zMTUte1xcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaD01ODk9c3RhdGljIGlubGluZSB2b2lkICp4YV9zdG9yZV9iaChzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyBpbmRleCxcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtNTkzLVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6NTk0OlxcdG1pZ2h0X2FsbG9jKGdmcCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC01OTUtXFx0eGFfbG9ja19iaCh4YSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTYxNj1zdGF0aWMgaW5saW5lIHZvaWQgKnhhX3N0b3JlX2lycShzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyBpbmRleCxcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtNjIwLVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6NjIxOlxcdG1pZ2h0X2FsbG9jKGdmcCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC02MjItXFx0eGFfbG9ja19pcnEoeGEpO1xcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaD02OTI9c3RhdGljIGlubGluZSB2b2lkICp4YV9jbXB4Y2hnKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nIGluZGV4LFxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC02OTYtXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDo2OTc6XFx0bWlnaHRfYWxsb2MoZ2ZwKTtcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTY5OC1cXHR4YV9sb2NrKHhhKTtcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg9NzIwPXN0YXRpYyBpbmxpbmUgdm9pZCAqeGFfY21weGNoZ19iaChzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyBpbmRleCxcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtNzI0LVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6NzI1OlxcdG1pZ2h0X2FsbG9jKGdmcCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC03MjYtXFx0eGFfbG9ja19iaCh4YSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTc0OD1zdGF0aWMgaW5saW5lIHZvaWQgKnhhX2NtcHhjaGdfaXJxKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nIGluZGV4LFxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC03NTItXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDo3NTM6XFx0bWlnaHRfYWxsb2MoZ2ZwKTtcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTc1NC1cXHR4YV9sb2NrX2lycSh4YSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTc3OD1zdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgeGFfaW5zZXJ0KHN0cnVjdCB4YXJyYXkgKnhhLFxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC03ODItXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDo3ODM6XFx0bWlnaHRfYWxsb2MoZ2ZwKTtcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTc4NC1cXHR4YV9sb2NrKHhhKTtcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg9ODA4PXN0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayB4YV9pbnNlcnRfYmgoc3RydWN0IHhhcnJheSAqeGEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTgxMi1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjgxMzpcXHRtaWdodF9hbGxvYyhnZnApO1xcbmluY2x1ZGUvbGludXgveGFycmF5LmgtODE0LVxcdHhhX2xvY2tfYmgoeGEpO1xcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaD04Mzg9c3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrIHhhX2luc2VydF9pcnEoc3RydWN0IHhhcnJheSAqeGEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTg0Mi1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjg0MzpcXHRtaWdodF9hbGxvYyhnZnApO1xcbmluY2x1ZGUvbGludXgveGFycmF5LmgtODQ0LVxcdHhhX2xvY2tfaXJxKHhhKTtcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg9ODcxPXN0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrIGludCB4YV9hbGxvYyhzdHJ1Y3QgeGFycmF5ICp4YSwgdTMyICppZCxcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtODc1LVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6ODc2OlxcdG1pZ2h0X2FsbG9jKGdmcCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC04NzctXFx0eGFfbG9jayh4YSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTkwND1zdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgeGFfYWxsb2NfYmgoc3RydWN0IHhhcnJheSAqeGEsIHUzMiAqaWQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTkwOC1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjkwOTpcXHRtaWdodF9hbGxvYyhnZnApO1xcbmluY2x1ZGUvbGludXgveGFycmF5LmgtOTEwLVxcdHhhX2xvY2tfYmgoeGEpO1xcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaD05Mzc9c3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrIHhhX2FsbG9jX2lycShzdHJ1Y3QgeGFycmF5ICp4YSwgdTMyICppZCxcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtOTQxLVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6OTQyOlxcdG1pZ2h0X2FsbG9jKGdmcCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC05NDMtXFx0eGFfbG9ja19pcnEoeGEpO1xcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaD05NzY9c3RhdGljIGlubGluZSBpbnQgeGFfYWxsb2NfY3ljbGljKHN0cnVjdCB4YXJyYXkgKnhhLCB1MzIgKmlkLCB2b2lkICplbnRyeSxcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtOTgwLVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6OTgxOlxcdG1pZ2h0X2FsbG9jKGdmcCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC05ODItXFx0eGFfbG9jayh4YSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTEwMTU9c3RhdGljIGlubGluZSBpbnQgeGFfYWxsb2NfY3ljbGljX2JoKHN0cnVjdCB4YXJyYXkgKnhhLCB1MzIgKmlkLCB2b2lkICplbnRyeSxcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTAxOS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjEwMjA6XFx0bWlnaHRfYWxsb2MoZ2ZwKTtcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTEwMjEtXFx0eGFfbG9ja19iaCh4YSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTEwNTQ9c3RhdGljIGlubGluZSBpbnQgeGFfYWxsb2NfY3ljbGljX2lycShzdHJ1Y3QgeGFycmF5ICp4YSwgdTMyICppZCwgdm9pZCAqZW50cnksXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTEwNTgtXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxMDU5OlxcdG1pZ2h0X2FsbG9jKGdmcCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xMDYwLVxcdHhhX2xvY2tfaXJxKHhhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDQ6MjEuMjE4MzU0NjAyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU1NDExNTUxMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byBgbWlnaHRfYWxsb2NgKipcblxuUmlnaHQsIGxldCdzIGdldCBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIGNvZGUuIFwiTGV0J3MgcmVhZCBgbWlnaHRfYWxsb2NgLlwiIE5vIGZsdWZmLCBqdXN0IGRpcmVjdCBlbmdhZ2VtZW50LiBUaGlzIHNpZ25hbHMgYSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGR5bmFtaWNzIHdpdGhpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIEknbSBsb29raW5nIGZvciB0aGUgaW50cmljYWNpZXMgb2YgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGFsbG9jYXRpb24gZmFpbHVyZXMsIHdoYXQgc3RyYXRlZ2llcyBpdCBlbXBsb3lzIGZvciBvcHRpbWl6YXRpb24sIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtIEkga25vdyBzbyB3ZWxsLiBUaGlzIGlzIGxpa2VseSBub3QgYSBjYXN1YWwgc2tpbTsgSSdtIHByZXBhcmVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIGFuZCBmb3JtIGEgc29saWQgbWVudGFsIG1vZGVsIG9mIGl0cyBiZWhhdmlvci4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBpZGVudGlmeSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGVkZ2UgY2FzZXMsIGFuZCBhcmVhcyB0aGF0IG1pZ2h0IHdhcnJhbnQgZnVydGhlciBpbnZlc3RpZ2F0aW9uIG9yIG9wdGltaXphdGlvbi4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHVuZGVyc3RhbmQgdGhpcyBhbGxvY2F0aW9uIG1ldGhvZCFcblxuXG4iLCJJbnB1dFRva2VucyI6Mjg3NDEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQ0OjI2Ljc1OTUxMjI2MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzA3LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzA3OlxcdCAqIG1pZ2h0X2FsbG9jIC0gTWFyayBwb3NzaWJsZSBhbGxvY2F0aW9uIHNpdGVzXFxuIDMwODpcXHQgKiBAZ2ZwX21hc2s6IGdmcF90IGZsYWdzIHRoYXQgd291bGQgYmUgdXNlZCB0byBhbGxvY2F0ZVxcbiAzMDk6XFx0ICpcXG4gMzEwOlxcdCAqIFNpbWlsYXIgdG8gbWlnaHRfc2xlZXAoKSBhbmQgb3RoZXIgYW5ub3RhdGlvbnMsIHRoaXMgY2FuIGJlIHVzZWQgaW4gZnVuY3Rpb25zXFxuIDMxMTpcXHQgKiB0aGF0IG1pZ2h0IGFsbG9jYXRlLCBidXQgb2Z0ZW4gZG9uJ3QuIENvbXBpbGVzIHRvIG5vdGhpbmcgd2l0aG91dFxcbiAzMTI6XFx0ICogQ09ORklHX0xPQ0tERVAuIEluY2x1ZGVzIGEgY29uZGl0aW9uYWwgbWlnaHRfc2xlZXAoKSBpZiBAZ2ZwIGFsbG93cyBibG9ja2luZy5cXG4gMzEzOlxcdCAqL1xcbiAzMTQ6XFx0c3RhdGljIGlubGluZSB2b2lkIG1pZ2h0X2FsbG9jKGdmcF90IGdmcF9tYXNrKVxcbiAzMTU6XFx0e1xcbiAzMTY6XFx0XFx0ZnNfcmVjbGFpbV9hY3F1aXJlKGdmcF9tYXNrKTtcXG4gMzE3OlxcdFxcdGZzX3JlY2xhaW1fcmVsZWFzZShnZnBfbWFzayk7XFxuIDMxODpcXHRcXG4gMzE5OlxcdFxcdGlmIChjdXJyZW50LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBGX01FTUFMTE9DKVxcbiAzMjA6XFx0XFx0XFx0cmV0dXJuO1xcbiAzMjE6XFx0XFxuIDMyMjpcXHRcXHRtaWdodF9zbGVlcF9pZihnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnBfbWFzaykpO1xcbiAzMjM6XFx0fVxcbiAzMjQ6XFx0XFxuIDMyNTpcXHQvKipcXG4gMzI2OlxcdCAqIG1lbWFsbG9jX2ZsYWdzX3NhdmUgLSBBZGQgYSBQRl8qIGZsYWcgdG8gY3VycmVudC1cXHUwMDNlZmxhZ3MsIHNhdmUgb2xkIHZhbHVlXFxuIDMyNzpcXHQgKiBAZmxhZ3M6IEZsYWdzIHRvIGFkZC5cXG4gMzI4OlxcdCAqXFxuIDMyOTpcXHQgKiBUaGlzIGFsbG93cyBQRl8qIGZsYWdzIHRvIGJlIGNvbnZlbmllbnRseSBhZGRlZCwgaXJyZXNwZWN0aXZlIG9mIGN1cnJlbnRcXG4gMzMwOlxcdCAqIHZhbHVlLCBhbmQgdGhlbiB0aGUgb2xkIHZlcnNpb24gcmVzdG9yZWQgd2l0aCBtZW1hbGxvY19mbGFnc19yZXN0b3JlKCkuXFxuIDMzMTpcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDQ6MjYuNzU5NjAxODQxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyMzY3MTk2MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGVjaXNpb24gZm9yIEJ1bGsgUGFnZSBBbGxvY2F0aW9uIENvbnRleHQgUHJvcGFnYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlIGhhdmUgYSBwYXRjaCB0aGF0IGludHJvZHVjZXMgYSBzdWJ0bGUgY2hhbmdlIHdpdGhpbiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLCBhbmQgSSBuZWVkIHRvIGFzc2VzcyBpdHMgZnV6emluZyBwb3RlbnRpYWwuIFRoZSBjb2RlIGFscmVhZHkgZG9lcyBzb21lIGNvbnRleHQgbWFuYWdlbWVudCB3aXRoIGBmc19yZWNsYWltX2FjcXVpcmVgLCBidXQgdGhpcyBuZXcgcGF0Y2ggaW50cm9kdWNlcyBgY3VycmVudF9nZnBfY29udGV4dGAgKmJlZm9yZSogdGhlIGFsbG9jYXRpb24uIEl0J3MgY3J1Y2lhbCBiZWNhdXNlIGBjdXJyZW50X2dmcF9jb250ZXh0YCBtb2RpZmllcyB0aGUgYGdmcF9tYXNrYCBiYXNlZCBvbiB0aGUgY3VycmVudCB0YXNrJ3Mgc3RhdGUsIGFuZCBgZ2ZwX21pZ3JhdGV0eXBlYCBpcyBhbHNvIGNvbnNpZGVyZWQgYW5kIG1heSBjaGFuZ2UgYmFzZWQgb24gdGhlIGZsYWdzIHNldCwgc3BlY2lmaWNhbGx5IGlmIGBQRl9NRU1BTExPQ19QSU5gIGlzIHNldC5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIGluIGhvdyBgZ2ZwX21hc2tgIGlzIGhhbmRsZWQ6IGVuc3VyaW5nIHRoYXQgdGhlIGFsbG9jYXRpb24gcmVzcGVjdHMgdGFzay1zcGVjaWZpYyBmbGFncy4gV2UncmUgdGFsa2luZyBhYm91dCBhIGNoYW5nZSBpbiBhIGtleSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbi4gVGhlIGBnZnBfbWFza2AgaW1wYWN0cyB0aGluZ3MgbGlrZSBtaWdyYXRpb24gdHlwZSB3aGljaCBhZmZlY3RzIHdoZXJlIHBhZ2VzIGFyZSBhbGxvY2F0ZWQuIGBhbGxvY19mbGFnc2AgYXJlIGltcGFjdGVkIHRvby5cblxuVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIG1vZGlmaWNhdGlvbiB3b3J0aCB0aGUgZnV6emluZyBlZmZvcnQ/IFllcywgYWJzb2x1dGVseS4gVGhpcyBpcyBhIGNvcmUgTU0gbG9naWMgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSBnZnAgZmxhZ3MgYW5kIGFsbG9jYXRpb24gZmxhZ3MgZm9yIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy4gSXQncyBhIGNyaXRpY2FsIGFkanVzdG1lbnQsIGFuZCBpdCByZXF1aXJlcyBjYXJlZnVsIHRlc3RpbmcuXG5cbldoYXQgYXJlIHRoZSBjcml0aWNhbCBzeW1ib2xzIHRvIGZvY3VzIG9uPyBUaGUgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIEkgc2VlIHRoZSBkaWZmLiBUaGF0J3MgdGhlIGZ1bmN0aW9uIHRvIHByaW9yaXRpemUsIHJpZ2h0PyBXYWl0LCBJJ20gY2hlY2tpbmcgYWdhaW5zdCB0aGUgZ3VpZGVsaW5lcyBmb3IgRm9jdXNTeW1ib2xzLiBXZSAqbXVzdCBub3QqIGluY2x1ZGUgdWJpcXVpdG91cyBmdW5jdGlvbnMuIEknbSB0aGlua2luZywgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyB1c2VkIGluIHNwZWNpYWxpemVkIHNjZW5hcmlvcyBzdWNoIGFzIGB2bWFsbG9jYCwgYHNwbGljZWAsIGBpb191cmluZ2AsIGFuZCBgcGFnZSBwb29sYC4gSXQgaXMgbm90IGxpa2UgYGttYWxsb2NgIG9yIGBfX2FsbG9jX3BhZ2VzYC4gSXQncyBhIGtleSBBUEkgdXNlZCBieSBtdWx0aXBsZSBzdWJzeXN0ZW1zIHdoaWNoIG5lZWQgYSBiYXRjaCBhbGxvY2F0aW9uIEFQSSB0byBhdm9pZCBjb250ZW50aW9uLiBBbmQsIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoZSBwYXRjaCBpcyBjaGFuZ2luZy5cblxuQXJlIHRoZXJlIG90aGVyIGZ1bmN0aW9uIHRoYXQgd2Ugc2hvdWxkIGluY2x1ZGU/IFRoZXJlIGlzIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgLCBidXQgdGhlIGtleSBsb2dpYyBiZWluZyBtb2RpZmllZCBpcyBpbiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLlxuXG5JIGhhdmUgdG8gY2FyZWZ1bGx5IGFzc2VzcyBpZiB0aGUgZnVuY3Rpb24gaXMgXCJ1YmlxdWl0b3VzXCIgbGlrZSBga21hbGxvY2Agb3IgYF9fYWxsb2NfcGFnZXNfbm9wcm9mYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgZnV6emVyIGRvZXNuJ3QgZ2V0IGZsb29kZWQgd2l0aCB1bnJlbGF0ZWQgdGVzdCBjYXNlcy4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyBub3QgY2FsbGVkIGJ5ICpldmVyeSogcHJvZ3JhbS4gSXQgaXMgY2FsbGVkIGJ5IHNwZWNpZmljIHByb2dyYW1zLCBvciBwYXRocyB0aGF0IHJlcXVpcmUgYnVsayBhbGxvY2F0aW9uLlxuXG5TbywgbGV0J3MgbmFpbCB0aGlzIGRvd24uIFRoZSBwYXRjaCBjaGFuZ2VzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIGFuZCBpdCdzIG5vdCBhIGdlbmVyaWMgYWxsb2NhdG9yLiBJdCdzIGFuIGltcG9ydGFudCBlbnRyeXBvaW50LlxuXG5OZXh0LCBJIGhhdmUgdG8gZW5zdXJlIHRoZSBzeW1ib2xzIGFyZSB2YWxpZCAoZXhwb3J0ZWQsIG5vbi1zdGF0aWMpLiBZZXMsIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgYSBub24tc3RhdGljIEMgZnVuY3Rpb24sIGFuZCBpcyBleHBvcnRlZCB0byB1c2VyIHNwYWNlLiBJdCBpcyB1bmNvbmRpdGlvbmFsbHkgY29tcGlsZWQgaW4gYWxsIGtlcm5lbCBjb25maWdzLlxuXG5IZXJlJ3MgdGhlIGJvdHRvbSBsaW5lOlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogVHJ1ZVxuKiAgICoqUmVhc29uaW5nKio6IFRoZSBwYXRjaCBtb2RpZmllcyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGluIGBtbS9wYWdlX2FsbG9jLmNgIHRvIGFwcGx5IGBjdXJyZW50X2dmcF9jb250ZXh0KGdmcClgLiBUaGlzIGVuc3VyZXMgdGhhdCBzY29wZWQgYWxsb2NhdGlvbiBjb25zdHJhaW50cyAoc3VjaCBhcyBgUEZfTUVNQUxMT0NfTk9JT2AsIGBQRl9NRU1BTExPQ19OT0ZTYCwgYW5kIGBQRl9NRU1BTExPQ19QSU5gKSBhcmUgcHJvcGVybHkgaG9ub3JlZCBkdXJpbmcgYnVsayBwYWdlIGFsbG9jYXRpb24uIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gYSByZWFjaGFibGUgcGF0aC4gSXQgaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhhdCBwcm9wYWdhdGluZyB0YXNrIGdmcCBjb250ZXh0IGluIGJ1bGsgYWxsb2NhdGlvbnMgZG9lcyBub3QgY2F1c2UgdW5leHBlY3RlZCBhbGxvY2F0aW9uIGZhaWx1cmVzLCByZWdyZXNzaW9uLCBvciBsb2NrZGVwL3JlY2xhaW0gYXNzZXJ0aW9uIGlzc3VlcyBhY3Jvc3MgY2FsbGVycyBsaWtlIHZtYWxsb2MsIHNwbGljZSwgaW9fdXJpbmcsIG9yIHBhZ2UgcG9vbC5cbiogICAqKkZvY3VzU3ltYm9scyoqOiBgW1wiYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZcIl1gXG4qICAgKipFbmFibGVDb25maWdzKio6IGBbXWBcblxuXG4iLCJJbnB1dFRva2VucyI6MjkzODIsIk91dHB1dFRva2VucyI6MTcyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYwOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQ0OjQ5LjEyNjgwMjEzNVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBwYWdlIGFsbG9jYXRvciBmdW5jdGlvbiBhbGxvY19wYWdlc19idWxrX25vcHJvZigpIGluIG1tL3BhZ2VfYWxsb2MuYyB0byBob25vciB0aGUgY2FsbGluZyB0YXNrJ3Mgc2NvcGVkIEdGUCBjb250ZXh0IHZpYSBjdXJyZW50X2dmcF9jb250ZXh0KCkuIFRoaXMgYWx0ZXJzIGFsbG9jYXRpb24gZmxhZ3MgKGUuZy4gc3RyaXBwaW5nIF9fR0ZQX0ZTLCBfX0dGUF9JTywgb3IgX19HRlBfTU9WQUJMRSB1bmRlciBQRl9NRU1BTExPQ19OT0ZTLCBQRl9NRU1BTExPQ19OT0lPLCBvciBQRl9NRU1BTExPQ19QSU4pIGR1cmluZyBidWxrIHBhZ2UgYWxsb2NhdGlvbiByZXF1ZXN0cywgd2hpY2ggZGlyZWN0bHkgYWZmZWN0cyByZWFjaGFibGUgc3Vic3lzdGVtcyBzdWNoIGFzIHZtYWxsb2MsIHNwbGljZSwgaW9fdXJpbmcsIGFuZCBwYWdlIHBvb2xzLiBUaGlzIGNvcmUgbW0gbG9naWMgY2hhbmdlIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBwYWdlIGFsbG9jYXRvciBmdW5jdGlvbiBhbGxvY19wYWdlc19idWxrX25vcHJvZigpIGluIG1tL3BhZ2VfYWxsb2MuYyB0byBob25vciB0aGUgY2FsbGluZyB0YXNrJ3Mgc2NvcGVkIEdGUCBjb250ZXh0IHZpYSBjdXJyZW50X2dmcF9jb250ZXh0KCkuIFRoaXMgYWx0ZXJzIGFsbG9jYXRpb24gZmxhZ3MgKGUuZy4gc3RyaXBwaW5nIF9fR0ZQX0ZTLCBfX0dGUF9JTywgb3IgX19HRlBfTU9WQUJMRSB1bmRlciBQRl9NRU1BTExPQ19OT0ZTLCBQRl9NRU1BTExPQ19OT0lPLCBvciBQRl9NRU1BTExPQ19QSU4pIGR1cmluZyBidWxrIHBhZ2UgYWxsb2NhdGlvbiByZXF1ZXN0cywgd2hpY2ggZGlyZWN0bHkgYWZmZWN0cyByZWFjaGFibGUgc3Vic3lzdGVtcyBzdWNoIGFzIHZtYWxsb2MsIHNwbGljZSwgaW9fdXJpbmcsIGFuZCBwYWdlIHBvb2xzLiBUaGlzIGNvcmUgbW0gbG9naWMgY2hhbmdlIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQ0OjQ5LjEyNjgzNTQzNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MjY0NDM5MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDQ6NDkuMTI3MjQyNjM1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTM4MjY0MDI2ODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKWAgdG8gYXBwbHkgcGVyLXRhc2sgR0ZQIGNvbnRleHQgcmVzdHJpY3Rpb25zIHZpYSBgY3VycmVudF9nZnBfY29udGV4dChnZnApYC4gVGhpcyBlbnN1cmVzIHRhc2stbGV2ZWwgZmxhZ3Mgc3VjaCBhcyBQRl9NRU1BTExPQ19OT0lPLCBQRl9NRU1BTExPQ19OT0ZTLCBhbmQgUEZfTUVNQUxMT0NfUElOIGNvcnJlY3RseSBtYXNrIEdGUCBmbGFncyAoZS5nLiwgc3RyaXBwaW5nIF9fR0ZQX0lPLCBfX0dGUF9GUywgX19HRlBfTU9WQUJMRSkgdG8gcHJldmVudCBkZWFkbG9ja3MgZHVyaW5nIHJlY2xhaW0uXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeTpcXG4xLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZS5cXG4yLiBJdCBkb2VzIG5vdCBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIHplcm9pbmcsIG9yIHN0cnVjdCBmaWVsZCBwb3B1bGF0aW9uLlxcbjMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBicmFuY2hlcyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhIG9yIGFmZmVjdCBidWZmZXIgYm91bmRzL2xlbmd0aHMuXFxuXFxuQW55IHJlY2xhaW0gb3IgbG9ja2luZyBpc3N1ZXMgcmVsYXRlZCB0byB0YXNrIEdGUCBjb250ZXh0cyBhcmUgdHJhY2tlZCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBtZW1vcnkgYWxsb2MgZGVidWdnaW5nLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDAxZWVhZGJiNGY5NzM5MmI1MGJkYmE3YjUzYTA2MzZlNmU5MTgxYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDA5OjQwOjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXG5pbmRleCAxMmZhYzkwODRjNDgzLi4zYmU3Mjg4YTFhYTcxIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXG4rKysgYi9tbS9wYWdlX2FsbG9jLmNcbkBAIC01MjA3LDYgKzUyMDcsNyBAQCB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG4gXG4gXHQvKiBNYXkgc2V0IEFMTE9DX05PRlJBR01FTlQsIGZyYWdtZW50YXRpb24gd2lsbCByZXR1cm4gMSBwYWdlLiAqL1xuIFx0Z2ZwIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbitcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcbiBcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcdTAwMjZhYywgXHUwMDI2Z2ZwLCBcdTAwMjZhbGxvY19mbGFncykpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDQ6NDkuMTI3MjQzNjA1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU2OTQ1ODI4MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEp1c3RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGxhbmRlZCwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0J3MgZGlnIGluLiBGaXJzdCB0aGluZ3MgZmlyc3Q6IEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBkaWZmLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGxvb2tzIGxpa2UgYSBtaW5vciBjaGFuZ2UgaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIEFoLCByaWdodCwgaXQgYWRkcyBhIGNhbGwgdG8gYGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKWAgd2l0aGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBjdXJyZW50X2dmcF9jb250ZXh0YCBmdW5jdGlvbiBhY3R1YWxseSAqZG9lcyouIEknbGwgbmVlZCB0byBrbm93IGl0cyBpbXBhY3Qgb24gdGhlIGZ1bmN0aW9uIGluIHRoZSBjb250ZXh0IG9mIHRoZSBwYWdlIGFsbG9jYXRvci4gSSB3aWxsIHJlYWQgdGhlIGBtbS9wYWdlX2FsbG9jLmNgIGZpbGUgYXJvdW5kIGxpbmUgNTIwNyB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgdGhlIG92ZXJhbGwgY29udGV4dCBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFkZGl0aW9uLiBUaW1lIHRvIGdldCBzb21lIGNvbnRleHQgYW5kIGV2YWx1YXRlIHRoZSBwb3RlbnRpYWwgZm9yIEtNU0FOIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQ0OjU0LjgyMTgyODk4NVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTgwNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxOTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUxOTU6XFx0XFxuNTE5NjpcXHQjaWZkZWYgQ09ORklHX1BBR0VfT1dORVJcXG41MTk3OlxcdFxcdC8qXFxuNTE5ODpcXHRcXHQgKiBQQUdFX09XTkVSIG1heSByZWN1cnNlIGludG8gdGhlIGFsbG9jYXRvciB0byBhbGxvY2F0ZSBzcGFjZSB0b1xcbjUxOTk6XFx0XFx0ICogc2F2ZSB0aGUgc3RhY2sgd2l0aCBwYWdlc2V0cy5sb2NrIGhlbGQuIFJlbGVhc2luZy9yZWFjcXVpcmluZ1xcbjUyMDA6XFx0XFx0ICogcmVtb3ZlcyBtdWNoIG9mIHRoZSBwZXJmb3JtYW5jZSBiZW5lZml0IG9mIGJ1bGsgYWxsb2NhdGlvbiBzb1xcbjUyMDE6XFx0XFx0ICogZm9yY2UgdGhlIGNhbGxlciB0byBhbGxvY2F0ZSBvbmUgcGFnZSBhdCBhIHRpbWUgYXMgaXQnbGwgaGF2ZVxcbjUyMDI6XFx0XFx0ICogc2ltaWxhciBwZXJmb3JtYW5jZSB0byBhZGRlZCBjb21wbGV4aXR5IHRvIHRoZSBidWxrIGFsbG9jYXRvci5cXG41MjAzOlxcdFxcdCAqL1xcbjUyMDQ6XFx0XFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcXG41MjA1OlxcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbjUyMDY6XFx0I2VuZGlmXFxuNTIwNzpcXHRcXG41MjA4OlxcdFxcdC8qIE1heSBzZXQgQUxMT0NfTk9GUkFHTUVOVCwgZnJhZ21lbnRhdGlvbiB3aWxsIHJldHVybiAxIHBhZ2UuICovXFxuNTIwOTpcXHRcXHRnZnAgXFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcXG41MjEwOlxcdFxcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcXG41MjExOlxcdFxcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcXHUwMDI2YWMsIFxcdTAwMjZnZnAsIFxcdTAwMjZhbGxvY19mbGFncykpXFxuNTIxMjpcXHRcXHRcXHRnb3RvIG91dDtcXG41MjEzOlxcdFxcbjUyMTQ6XFx0XFx0LyogRmluZCBhbiBhbGxvd2VkIGxvY2FsIHpvbmUgdGhhdCBtZWV0cyB0aGUgbG93IHdhdGVybWFyay4gKi9cXG41MjE1OlxcdFxcdHogPSBhYy5wcmVmZXJyZWRfem9uZXJlZjtcXG41MjE2OlxcdFxcdGZvcl9uZXh0X3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgYWMuaGlnaGVzdF96b25laWR4LCBhYy5ub2RlbWFzaykge1xcbjUyMTc6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBtYXJrO1xcbjUyMTg6XFx0XFxuNTIxOTpcXHRcXHRcXHRpZiAoY3B1c2V0c19lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfQ1BVU0VUKSBcXHUwMDI2XFx1MDAyNlxcbjUyMjA6XFx0XFx0XFx0ICAgICFfX2NwdXNldF96b25lX2FsbG93ZWQoem9uZSwgZ2ZwKSkge1xcbjUyMjE6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNTIyMjpcXHRcXHRcXHR9XFxuNTIyMzpcXHRcXG41MjI0OlxcdFxcdFxcdGlmIChucl9vbmxpbmVfbm9kZXMgXFx1MDAzZSAxIFxcdTAwMjZcXHUwMDI2IHpvbmUgIT0gem9uZWxpc3Rfem9uZShhYy5wcmVmZXJyZWRfem9uZXJlZikgXFx1MDAyNlxcdTAwMjZcXG41MjI1OlxcdFxcdFxcdCAgICB6b25lX3RvX25pZCh6b25lKSAhPSB6b25lbGlzdF9ub2RlX2lkeChhYy5wcmVmZXJyZWRfem9uZXJlZikpIHtcXG41MjI2OlxcdFxcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbjUyMjc6XFx0XFx0XFx0fVxcbjUyMjg6XFx0XFxuNTIyOTpcXHRcXHRcXHRjb25kX2FjY2VwdF9tZW1vcnkoem9uZSwgMCwgYWxsb2NfZmxhZ3MpO1xcbjUyMzA6XFx0cmV0cnlfdGhpc196b25lOlxcbjUyMzE6XFx0XFx0XFx0bWFyayA9IHdtYXJrX3BhZ2VzKHpvbmUsIGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfV01BUktfTUFTSykgKyBucl9wYWdlcyAtIG5yX3BvcHVsYXRlZDtcXG41MjMyOlxcdFxcdFxcdGlmICh6b25lX3dhdGVybWFya19mYXN0KHpvbmUsIDAsICBtYXJrLFxcbjUyMzM6XFx0XFx0XFx0XFx0XFx0em9uZWxpc3Rfem9uZV9pZHgoYWMucHJlZmVycmVkX3pvbmVyZWYpLFxcbjUyMzQ6XFx0XFx0XFx0XFx0XFx0YWxsb2NfZmxhZ3MsIGdmcCkpIHtcXG41MjM1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjUyMzY6XFx0XFx0XFx0fVxcbjUyMzc6XFx0XFxuNTIzODpcXHRcXHRcXHRpZiAoY29uZF9hY2NlcHRfbWVtb3J5KHpvbmUsIDAsIGFsbG9jX2ZsYWdzKSlcXG41MjM5OlxcdFxcdFxcdFxcdGdvdG8gcmV0cnlfdGhpc196b25lO1xcbjUyNDA6XFx0XFxuNTI0MTpcXHRcXHRcXHQvKiBUcnkgYWdhaW4gaWYgem9uZSBoYXMgZGVmZXJyZWQgcGFnZXMgKi9cXG41MjQyOlxcdFxcdFxcdGlmIChkZWZlcnJlZF9wYWdlc19lbmFibGVkKCkpIHtcXG41MjQzOlxcdFxcdFxcdFxcdGlmIChfZGVmZXJyZWRfZ3Jvd196b25lKHpvbmUsIDApKVxcbjUyNDQ6XFx0XFx0XFx0XFx0XFx0Z290byByZXRyeV90aGlzX3pvbmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQ0OjU0LjgyMjA4ODk2NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3Njg2ODgwMTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEZWVwIERpdmUgaW50byBgY3VycmVudF9nZnBfY29udGV4dGAgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGxldCdzIHRyYWNlIHRoaXMgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIHZhcmlhYmxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGhvdyBpdCdzIGJlaW5nIHV0aWxpemVkIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiB0aGUgYG1tL3BhZ2VfYWxsb2MuY2AgZmlsZSwgc2luY2UgdGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gc2VlIHRoZSBjb3JlIGFsbG9jYXRpb24gbG9naWMuIEJ1dCBvZiBjb3Vyc2UsIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGEgY29tcGxleCBiZWFzdCwgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGNvdWxkIGJlIGFueXdoZXJlLiBTbyBJJ2xsIGJyb2FkZW4gdGhlIHNlYXJjaCwgbG9va2luZyBiZXlvbmQganVzdCB0aGF0IG9uZSBmaWxlLiBNeSBnb2FsIGlzIHRvIG1hcCBvdXQgZXZlcnkgY2FsbCBzaXRlIGFuZCBkZXRlcm1pbmUgaG93IGBjdXJyZW50X2dmcF9jb250ZXh0YCBpbmZsdWVuY2VzIHRoZSBhbGxvY2F0aW9uIGJlaGF2aW9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdOKAmXMgYSBnbG9iYWwgdmFyaWFibGUsIHRocmVhZCBsb2NhbCwgb3IgaG93IGl0IGlzIGJlaW5nIGNoYW5nZWQgdG8gaW5mbHVlbmNlIHBhZ2UgYWxsb2NhdGlvbi4gSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGFzcGVjdHMgb2YgYWxsb2NhdGlvbiBhcmUgY29udHJvbGxlZCB2aWEgYGdmcF9jb250ZXh0YC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGhpZGRlbiBkZXBlbmRlbmNpZXMgb3IgaW50ZXJhY3Rpb25zIHRoYXQgbWlnaHQgbm90IGJlIGltbWVkaWF0ZWx5IG9idmlvdXMuIFRoaXMgaW52ZXN0aWdhdGlvbiBzaG91bGQgaGVscCBtZSBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzdWJ0bGUgbWVtb3J5IGFsbG9jYXRpb24gaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGUgd2F5IHRoaXMgY29udGV4dCBpcyBiZWluZyB1dGlsaXplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ5NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDU6MDIuNTA4OTcxNzk0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTc2NzA2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3VycmVudF9nZnBfY29udGV4dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2FsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTM3NTI9YWxsb2NfZmxhZ3Nfbm9mcmFnbWVudChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMzc4NC1cXG5tbS9wYWdlX2FsbG9jLmM6Mzc4NTovKiBNdXN0IGJlIGNhbGxlZCBhZnRlciBjdXJyZW50X2dmcF9jb250ZXh0KCkgd2hpY2ggY2FuIGNoYW5nZSBnZnBfbWFzayAqL1xcbm1tL3BhZ2VfYWxsb2MuYy0zNzg2LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzX2NtYShnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00MzgzPXZvaWQgZnNfcmVjbGFpbV9hY3F1aXJlKGdmcF90IGdmcF9tYXNrKVxcbm1tL3BhZ2VfYWxsb2MuYy00Mzg0LXtcXG5tbS9wYWdlX2FsbG9jLmM6NDM4NTpcXHRnZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spO1xcbm1tL3BhZ2VfYWxsb2MuYy00Mzg2LVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQ0MDA9dm9pZCBmc19yZWNsYWltX3JlbGVhc2UoZ2ZwX3QgZ2ZwX21hc2spXFxubW0vcGFnZV9hbGxvYy5jLTQ0MDEte1xcbm1tL3BhZ2VfYWxsb2MuYzo0NDAyOlxcdGdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayk7XFxubW0vcGFnZV9hbGxvYy5jLTQ0MDMtXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTE2MD11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTIwOS1cXHRnZnAgXFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcXG5tbS9wYWdlX2FsbG9jLmM6NTIxMDpcXHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XFxubW0vcGFnZV9hbGxvYy5jLTUyMTEtXFx0aWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFxcdTAwMjZhYywgXFx1MDAyNmdmcCwgXFx1MDAyNmFsbG9jX2ZsYWdzKSlcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01Mzg0PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTQxOS1cXHQgKi9cXG5tbS9wYWdlX2FsbG9jLmM6NTQyMDpcXHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XFxubW0vcGFnZV9hbGxvYy5jLTU0MjEtXFx0YWxsb2NfZ2ZwID0gZ2ZwO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTcyODQ9aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTczMTItXFxubW0vcGFnZV9hbGxvYy5jOjczMTM6XFx0Z2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKTtcXG5tbS9wYWdlX2FsbG9jLmMtNzMxNC1cXHRpZiAoX19hbGxvY19jb250aWdfdmVyaWZ5X2dmcF9tYXNrKGdmcF9tYXNrLCAoZ2ZwX3QgKilcXHUwMDI2Y2MuZ2ZwX21hc2spKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTo0NTowMy4wMjY2NTAxMjRaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDMwMTc1NzU3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEN1cnJlbnQgR0ZQIENvbnRleHQqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxheSBvZiB0aGUgbGFuZCBoZXJlLiBNeSBpbW1lZGlhdGUgcHJpb3JpdHkgaXMgdG8gZXhhbWluZSB0aGUgc3RhdGUgb2YgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgLiBUaGlzIHZhcmlhYmxlLCBvciBvYmplY3QsIHdoYXRldmVyIGl0IG1pZ2h0IGJlLCBob2xkcyB0aGUga2V5IHRvIHRoZSBjdXJyZW50IG9wZXJhdGluZyBlbnZpcm9ubWVudCB3aXRoaW4gdGhlIEdGUCAoR3JlZW4gRmx1b3Jlc2NlbnQgUHJvdGVpbikgYXBwbGljYXRpb24uIEl0J3MgdGhlIGdyb3VuZGluZyBwb2ludCwgdGhlIHJlZmVyZW5jZSwgdGhlIFwieW91IGFyZSBoZXJlXCIgbWFya2VyLiBLbm93aW5nIGl0cyBjb250ZW50cywgaXRzIHByb3BlcnRpZXMsIGl0cyBzdHJ1Y3R1cmUsIHdpbGwgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgd2hhdCdzIGdvaW5nIG9uIGFuZCB3aGVyZSBJIGNhbiBtYWtlIHByb2dyZXNzLiBJIG5lZWQgdG8ga25vdyAqZXhhY3RseSogd2hhdCB0aGlzIHJlcHJlc2VudHMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MTksIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTo0NTowNy4zMjg0MTE1OTRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDk2NTU4MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGlubGluZS4qY3VycmVudF9nZnBfY29udGV4dFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg9MjE1PXN0YXRpYyBpbmxpbmUgYm9vbCBpbl92Zm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0yNDctICovXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjI0ODpzdGF0aWMgaW5saW5lIGdmcF90IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX3QgZmxhZ3MpXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI0OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQ1OjA5LjYzODA3MzMxNVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozODUzOTM0MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nIHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGF0IGNvZGU6XG5cbioqRGl2aW5nIGludG8gTWVtb3J5IE1hbmFnZW1lbnQgKG1tLmgpKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBzb21lIG1lbW9yeSBtYW5hZ2VtZW50IGRldGFpbHMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBhZGRyZXNzIHNwYWNlcyBhbmQgbWVtb3J5IGNvbnRleHRzLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBpbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjQ4LiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgZGVmaW5pdGlvbnMgb3Igc3RydWN0dXJlcyByZWxhdGVkIHRvIHByb2Nlc3MgbWVtb3J5IG1hcHMgKG1tX3N0cnVjdCkgb3IgcGVyaGFwcyBkZXRhaWxzIGFib3V0IGhvdyB0aGVzZSBtYXBzIGludGVyYWN0IHdpdGggdGhlIHBhZ2UgdGFibGVzLiBJJ20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdmlydHVhbCBhZGRyZXNzZXMgYXJlIHRyYW5zbGF0ZWQgdG8gcGh5c2ljYWwgYWRkcmVzc2VzIGFuZCBob3cgdGhlIGtlcm5lbCB0cmFja3MgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgdG8gZWFjaCBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgbG9ja2luZyBtZWNoYW5pc21zIG9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQsIGFzIHRoZXNlIGFyZSBjcml0aWNhbCBmb3IgZW5zdXJpbmcgZGF0YSBjb25zaXN0ZW5jeSBhbmQgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgaW4gYSBtdWx0aXRocmVhZGVkIGVudmlyb25tZW50LiBGcm9tIHRoZXJlLCBJIGNhbiBiZXR0ZXIgdW5kZXJzdGFuZCBhbmQgZGVidWcgY2VydGFpbiBtZW1vcnktcmVsYXRlZCBzeXN0ZW0gY2FsbHMgSSB3YXMgZGVhbGluZyB3aXRoIGVhcmxpZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MjcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTo0NToxMy40OTIwMTAyNTRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQxOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0MDpcXHR9XFxuIDI0MTpcXHRcXG4gMjQyOlxcdC8qXFxuIDI0MzpcXHQgKiBBcHBsaWVzIHBlci10YXNrIGdmcCBjb250ZXh0IHRvIHRoZSBnaXZlbiBhbGxvY2F0aW9uIGZsYWdzLlxcbiAyNDQ6XFx0ICogUEZfTUVNQUxMT0NfTk9JTyBpbXBsaWVzIEdGUF9OT0lPXFxuIDI0NTpcXHQgKiBQRl9NRU1BTExPQ19OT0ZTIGltcGxpZXMgR0ZQX05PRlNcXG4gMjQ2OlxcdCAqIFBGX01FTUFMTE9DX1BJTiAgaW1wbGllcyAhR0ZQX01PVkFCTEVcXG4gMjQ3OlxcdCAqL1xcbiAyNDg6XFx0c3RhdGljIGlubGluZSBnZnBfdCBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF90IGZsYWdzKVxcbiAyNDk6XFx0e1xcbiAyNTA6XFx0XFx0dW5zaWduZWQgaW50IHBmbGFncyA9IFJFQURfT05DRShjdXJyZW50LVxcdTAwM2VmbGFncyk7XFxuIDI1MTpcXHRcXG4gMjUyOlxcdFxcdGlmICh1bmxpa2VseShwZmxhZ3MgXFx1MDAyNiAoUEZfTUVNQUxMT0NfTk9JTyB8IFBGX01FTUFMTE9DX05PRlMgfCBQRl9NRU1BTExPQ19QSU4pKSkge1xcbiAyNTM6XFx0XFx0XFx0LypcXG4gMjU0OlxcdFxcdFxcdCAqIE5PSU8gaW1wbGllcyBib3RoIE5PSU8gYW5kIE5PRlMgYW5kIGl0IGlzIGEgd2Vha2VyIGNvbnRleHRcXG4gMjU1OlxcdFxcdFxcdCAqIHNvIGFsd2F5cyBtYWtlIHN1cmUgaXQgbWFrZXMgcHJlY2VkZW5jZVxcbiAyNTY6XFx0XFx0XFx0ICovXFxuIDI1NzpcXHRcXHRcXHRpZiAocGZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0NfTk9JTylcXG4gMjU4OlxcdFxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH4oX19HRlBfSU8gfCBfX0dGUF9GUyk7XFxuIDI1OTpcXHRcXHRcXHRlbHNlIGlmIChwZmxhZ3MgXFx1MDAyNiBQRl9NRU1BTExPQ19OT0ZTKVxcbiAyNjA6XFx0XFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfl9fR0ZQX0ZTO1xcbiAyNjE6XFx0XFxuIDI2MjpcXHRcXHRcXHRpZiAocGZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0NfUElOKVxcbiAyNjM6XFx0XFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfl9fR0ZQX01PVkFCTEU7XFxuIDI2NDpcXHRcXHR9XFxuIDI2NTpcXHRcXHRyZXR1cm4gZmxhZ3M7XFxuIDI2NjpcXHR9XFxuIDI2NzpcXHRcXG4gMjY4OlxcdCNpZmRlZiBDT05GSUdfTE9DS0RFUFxcbiAyNjk6XFx0ZXh0ZXJuIHZvaWQgX19mc19yZWNsYWltX2FjcXVpcmUodW5zaWduZWQgbG9uZyBpcCk7XFxuIDI3MDpcXHRleHRlcm4gdm9pZCBfX2ZzX3JlY2xhaW1fcmVsZWFzZSh1bnNpZ25lZCBsb25nIGlwKTtcXG4gMjcxOlxcdGV4dGVybiB2b2lkIGZzX3JlY2xhaW1fYWNxdWlyZShnZnBfdCBnZnBfbWFzayk7XFxuIDI3MjpcXHRleHRlcm4gdm9pZCBmc19yZWNsYWltX3JlbGVhc2UoZ2ZwX3QgZ2ZwX21hc2spO1xcbiAyNzM6XFx0I2Vsc2VcXG4gMjc0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZzX3JlY2xhaW1fYWNxdWlyZSh1bnNpZ25lZCBsb25nIGlwKSB7IH1cXG4gMjc1OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZzX3JlY2xhaW1fcmVsZWFzZSh1bnNpZ25lZCBsb25nIGlwKSB7IH1cXG4gMjc2OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBmc19yZWNsYWltX2FjcXVpcmUoZ2ZwX3QgZ2ZwX21hc2spIHsgfVxcbiAyNzc6XFx0c3RhdGljIGlubGluZSB2b2lkIGZzX3JlY2xhaW1fcmVsZWFzZShnZnBfdCBnZnBfbWFzaykgeyB9XFxuIDI3ODpcXHQjZW5kaWZcXG4gMjc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTo0NToxMy40OTIwOTg1MTVaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTA4OTczNDU3NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgR0ZQIENvbnRleHQgSXNzdWUgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBleHBlcnQgZXllIGhvbmVzIGluIG9uIHRoZSBhcHBsaWNhdGlvbiBvZiBgY3VycmVudF9nZnBfY29udGV4dGAgd2l0aGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogd2UncmUgYXBwbHlpbmcgcGVyLXRhc2sgR0ZQIGNvbnRleHQgZmxhZ3MgKGxpa2UgUEZfTUVNQUxMT0NfTk9JTywgUEZfTUVNQUxMT0NfTk9GUywgYW5kIFBGX01FTUFMTE9DX1BJTikgdG8gdGhlIHN0YW5kYXJkIGdmcCBmbGFncy4gVGhlIGNvZGUgd2FzICptaXNzaW5nKiB0aGlzIGFwcGxpY2F0aW9uIGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIFRoZSBrZXkgaXNzdWUgaGVyZT8gSWYgYSBjYWxsZXIgd2FzIG9wZXJhdGluZyB3aXRoaW4gYSBgbWVtYWxsb2Nfbm9pb19zYXZlKClgIG9yIGBtZW1hbGxvY19ub2ZzX3NhdmUoKWAgc2NvcGUsIHRoZSBidWxrIGFsbG9jYXRvciAqd291bGRuJ3QqIHByb3Blcmx5IHN0cmlwIGBfX0dGUF9JT2AsIGBfX0dGUF9GU2AsIG9yIGBfX0dGUF9NT1ZBQkxFYCBhY2NvcmRpbmcgdG8gdGhlIHRhc2sncyBmbGFncy4gVGhhdCdzIGEgc2VyaW91cyBvdmVyc2lnaHQhXG5cblRoaXMgaXMgYWxsIGFib3V0IEdGUCBmbGFncywgcmVjbGFpbSwgYW5kIGF2b2lkaW5nIGRlYWRsb2NrcywgYW5kIHRoYXQncyBwcmVjaXNlbHkgd2hhdCdzIHRlc3RlZCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBtbSB0ZXN0cy5cblxuTm93LCBsZXQncyBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgdGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLlxuXG4qICAgVW5pbml0aWFsaXplZCBNZW1vcnk/IE5vcGUsIEkgZG9uJ3Qgc2VlIGFueSBjaGFuZ2VzIHRoYXQgd291bGQgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnkuXG4qICAgVXNlci1TcGFjZSBCdWZmZXJzPyBObywgaXQncyBub3QgYWZmZWN0aW5nIGFueSBidWZmZXIgY29weWluZy5cbiogICBTdHJ1Y3R1cmUgUGFkZGluZy9Jbml0aWFsaXphdGlvbj8gTm8sIG5vdGhpbmcgdG8gc2VlIGhlcmUuXG4qICAgQ29uZGl0aW9uYWwgQnJhbmNoZXMgb24gVW5pbml0aWFsaXplZCBNZW1vcnk/IERlZmluaXRlbHkgbm90LlxuKiAgIERhdGEgTGVuZ3Rocy9Cb3VuZHMgQ2hlY2tpbmc/IE5vIGNoYW5nZXMuXG4qICAgQ2hhbmdpbmcgWmVyb2luZyBvZiBBbGxvY2F0ZWQgUGFnZXM/IEhtbW0sIGRvZXMgYGFsbG9jX3BhZ2VzX2J1bGtgIGhhbmRsZSBgX19HRlBfWkVST2A/IExldCBtZSBxdWlja2x5IHZlcmlmeSB0aGF0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaW1wbGVtZW50YXRpb27igKZcblxuXG4iLCJJbnB1dFRva2VucyI6NTc2MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQ3OjAyLjQ2NTU1OTI0M1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTEwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyODAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUyODA6XFx0XFx0XFx0bnJfYWNjb3VudCsrO1xcbjUyODE6XFx0XFxuNTI4MjpcXHRcXHRcXHRwcmVwX25ld19wYWdlKHBhZ2UsIDAsIGdmcCwgQUxMT0NfREVGQVVMVCk7XFxuNTI4MzpcXHRcXHRcXHRzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpO1xcbjUyODQ6XFx0XFx0XFx0cGFnZV9hcnJheVtucl9wb3B1bGF0ZWQrK10gPSBwYWdlO1xcbjUyODU6XFx0XFx0fVxcbjUyODY6XFx0XFxuNTI4NzpcXHRcXHRwY3Bfc3Bpbl91bmxvY2socGNwKTtcXG41Mjg4OlxcdFxcbjUyODk6XFx0XFx0X19jb3VudF96aWRfdm1fZXZlbnRzKFBHQUxMT0MsIHpvbmVfaWR4KHpvbmUpLCBucl9hY2NvdW50KTtcXG41MjkwOlxcdFxcdHpvbmVfc3RhdGlzdGljcyh6b25lbGlzdF96b25lKGFjLnByZWZlcnJlZF96b25lcmVmKSwgem9uZSwgbnJfYWNjb3VudCk7XFxuNTI5MTpcXHRcXG41MjkyOlxcdG91dDpcXG41MjkzOlxcdFxcdHJldHVybiBucl9wb3B1bGF0ZWQ7XFxuNTI5NDpcXHRcXG41Mjk1OlxcdGZhaWxlZDpcXG41Mjk2OlxcdFxcdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBBTExPQ19ERUZBVUxUKTtcXG41Mjk3OlxcdFxcdGlmIChwYWdlKVxcbjUyOTg6XFx0XFx0XFx0cGFnZV9hcnJheVtucl9wb3B1bGF0ZWQrK10gPSBwYWdlO1xcbjUyOTk6XFx0XFx0Z290byBvdXQ7XFxuNTMwMDpcXHR9XFxuNTMwMTpcXHRFWFBPUlRfU1lNQk9MX0dQTChhbGxvY19wYWdlc19idWxrX25vcHJvZik7XFxuNTMwMjpcXHRcXG41MzAzOlxcdC8qXFxuNTMwNDpcXHQgKiBmcmVlX3BhZ2VzX2J1bGsgLSBGcmVlIGFuIGFycmF5IG9mIG9yZGVyLTAgcGFnZXNcXG41MzA1OlxcdCAqIEBwYWdlX2FycmF5OiBBcnJheSBvZiBwYWdlcyB0byBmcmVlXFxuNTMwNjpcXHQgKiBAbnJfcGFnZXM6IFRoZSBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIGFycmF5XFxuNTMwNzpcXHQgKlxcbjUzMDg6XFx0ICogRnJlZSB0aGUgb3JkZXItMCBwYWdlcy4gQWRqYWNlbnQgZW50cmllcyB3aG9zZSBQRk5zIGZvcm0gYSBjb250aWd1b3VzXFxuNTMwOTpcXHQgKiBydW4gYXJlIHJlbGVhc2VkIHdpdGggYSBzaW5nbGUgX19mcmVlX2NvbnRpZ19yYW5nZSgpIGNhbGwuXFxuNTMxMDpcXHQgKlxcbjUzMTE6XFx0ICogVGhpcyBhc3N1bWVzIHBhZ2VfYXJyYXkgaXMgc29ydGVkIGluIGFzY2VuZGluZyBQRk4gb3JkZXIuIFdpdGhvdXQgdGhhdCxcXG41MzEyOlxcdCAqIHRoZSBmdW5jdGlvbiBzdGlsbCBmcmVlcyBhbGwgcGFnZXMsIGJ1dCBjb250aWd1b3VzIHJ1bnMgbWF5IG5vdCBiZVxcbjUzMTM6XFx0ICogZGV0ZWN0ZWQgYW5kIHRoZSBmcmVlaW5nIHBhdHRlcm4gY2FuIGRlZ3JhZGUgdG8gZnJlZWluZyBvbmUgcGFnZSBhdCBhXFxuNTMxNDpcXHQgKiB0aW1lLlxcbjUzMTU6XFx0ICpcXG41MzE2OlxcdCAqIENvbnRleHQ6IFNsZWVwYWJsZSBwcm9jZXNzIGNvbnRleHQgb25seTsgY2FsbHMgY29uZF9yZXNjaGVkKClcXG41MzE3OlxcdCAqL1xcbjUzMTg6XFx0dm9pZCBmcmVlX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbjUzMTk6XFx0e1xcbjUzMjA6XFx0XFx0d2hpbGUgKG5yX3BhZ2VzKSB7XFxuNTMyMTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5yX2NvbnRpZyA9IG51bV9wYWdlc19jb250aWd1b3VzKHBhZ2VfYXJyYXksIG5yX3BhZ2VzKTtcXG41MzIyOlxcdFxcbjUzMjM6XFx0XFx0XFx0X19mcmVlX2NvbnRpZ19yYW5nZShwYWdlX3RvX3BmbigqcGFnZV9hcnJheSksIG5yX2NvbnRpZyk7XFxuNTMyNDpcXHRcXG41MzI1OlxcdFxcdFxcdG5yX3BhZ2VzIC09IG5yX2NvbnRpZztcXG41MzI2OlxcdFxcdFxcdHBhZ2VfYXJyYXkgKz0gbnJfY29udGlnO1xcbjUzMjc6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuNTMyODpcXHRcXHR9XFxuNTMyOTpcXHR9XFxuNTMzMDpcXHRcXG41MzMxOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvY19vcmRlcl9hbGxvd2VkKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbjUzMzI6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcXG41MzMzOlxcdHtcXG41MzM0OlxcdFxcdGlmIChhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX05PTE9DSylcXG41MzM1OlxcdFxcdFxcdHJldHVybiBwY3BfYWxsb3dlZF9vcmRlcihvcmRlcik7XFxuNTMzNjpcXHRcXG41MzM3OlxcdFxcdC8qXFxuNTMzODpcXHRcXHQgKiBUaGVyZSBhcmUgc2V2ZXJhbCBwbGFjZXMgd2hlcmUgd2UgYXNzdW1lIHRoYXQgdGhlIG9yZGVyIHZhbHVlIGlzIHNhbmVcXG41MzM5OlxcdFxcdCAqIHNvIGJhaWwgb3V0IGVhcmx5IGlmIHRoZSByZXF1ZXN0IGlzIG91dCBvZiBib3VuZC5cXG41MzQwOlxcdFxcdCAqL1xcbjUzNDE6XFx0XFx0cmV0dXJuICEoV0FSTl9PTl9PTkNFX0dGUChvcmRlciBcXHUwMDNlIE1BWF9QQUdFX09SREVSLCBnZnApKTtcXG41MzQyOlxcdH1cXG41MzQzOlxcdFxcbjUzNDQ6XFx0c3RhdGljIGlubGluZSBib29sIGFsbG9jX25vbG9ja19hbGxvd2VkKHZvaWQpXFxuNTM0NTpcXHR7XFxuNTM0NjpcXHRcXHRpZiAoIWNhbl9zcGluX3RyeWxvY2soKSlcXG41MzQ3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG41MzQ4OlxcdFxcbjUzNDk6XFx0XFx0LyogQmFpbG91dCwgc2luY2UgX2RlZmVycmVkX2dyb3dfem9uZSgpIG5lZWRzIHRvIHRha2UgYSBsb2NrICovXFxuNTM1MDpcXHRcXHRpZiAoZGVmZXJyZWRfcGFnZXNfZW5hYmxlZCgpKVxcbjUzNTE6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjUzNTI6XFx0XFxuNTM1MzpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG41MzU0OlxcdH1cXG41MzU1OlxcdFxcbjUzNTY6XFx0LypcXG41MzU3OlxcdCAqIEdGUCBmbGFncyB0byBzZXQgZm9yIEFMTE9DX05PTE9DSyBpLmUuIGFsbG9jX3BhZ2VzX25vbG9jaygpLlxcbjUzNTg6XFx0ICpcXG41MzU5OlxcdCAqIERvIG5vdCBzcGVjaWZ5IF9fR0ZQX0RJUkVDVF9SRUNMQUlNLCBzaW5jZSBkaXJlY3QgY2xhaW0gaXMgbm90IGFsbG93ZWQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQ3OjAyLjQ2NTg3MTcyM1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0OTI1Mzc1MTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhZ2UgQWxsb2NhdGlvbiBDb2RlKipcblxuT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gYHByZXBfbmV3X3BhZ2VgIHRha2VzIGNhcmUgb2YgdGhlIGBfX0dGUF9aRVJPYCBmbGFnIGlmIGl0J3MgdGhlcmUuIFRoZSBgY3VycmVudF9nZnBfY29udGV4dGAgZnVuY3Rpb24gaXMgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBtYXNraW5nIG91dCBjZXJ0YWluIGBnZnBgIGZsYWdzOiBzcGVjaWZpY2FsbHksIGBfX0dGUF9JT2AsIGBfX0dGUF9GU2AsIGFuZCBgX19HRlBfTU9WQUJMRWAuIEl0IGRvZXNuJ3QgdG91Y2ggYW55dGhpbmcgcmVsYXRlZCB0byBpbml0aWFsaXphdGlvbiBvciB6ZXJvaW5nLCBhbmQgaXQncyBhbGwgYWJvdXQgZW5zdXJpbmcgdGhhdCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcmVzcGVjdHMgdGFzayBjb250ZXh0IHJlc3RyaWN0aW9ucyBkdXJpbmcgYnVsayBwYWdlIGFsbG9jYXRpb24uIFRoYXQncyBnb29kOyBpdCBrZWVwcyB0aGluZ3MgY29uc3RyYWluZWQgYW5kIHByZWRpY3RhYmxlLlxuXG5Ob3csIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLCBsZXQncyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3Q6XG5cbjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2U/IE5vcGUuIE5vdGhpbmcgbGlrZSB0aGF0IGhlcmUuXG4yLiAgQW55IGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzPyBObywgSSBkb24ndCBzZWUgYW55dGhpbmcgc3VzcGljaW91cy5cbjMuICBBcmUgd2UgYWxsb2NhdGluZyBhbmQgaW5pdGlhbGl6aW5nIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI/IE5vcGUsIHRoZSBpbml0aWFsaXphdGlvbiBpcyBoYW5kbGVkIHNlcGFyYXRlbHkuXG40LiAgQW55dGhpbmcgdG8gZG8gd2l0aCBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM/IE5lZ2F0aXZlLlxuXG5Tbywgd2hlcmUgZG9lcyB0aGlzIGxlYXZlIHVzIHdpdGggS0FTQU4gYW5kIEtNU0FOP1xuXG5XZWxsLCBMT0NLREVQIGlzIGFscmVhZHkga2VlcGluZyBhbiBleWUgb24gbG9ja2luZyBkZWFkbG9ja3MsIGFuZCBLQVNBTiBoYW5kbGVzIG1lbW9yeSBzYWZldHkuIFRoZSBwYXJ0IEknbSBmb2N1c2luZyBvbiBpc24ndCBhYm91dCBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIG9yIGxvY2tpbmcsIGJ1dCB3aGF0IEtNU0FOIGlzIGZvcjogaXQgY2hlY2tzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIFRoaXMgcGF0Y2ggaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB0aG9zZSBjb25jZXJuczsgaXQncyBhIHZlcnkgc3RyYWlnaHRmb3J3YXJkIGZsYWcgbWFuYWdlbWVudC5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLlxuXG5Pa2F5LCBJJ20gcmVhZHkgdG8gcHJlcGFyZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Njc1LCJPdXRwdXRUb2tlbnMiOjIzMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQ3OjA3LjM5MTI0OTkzNloiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgIHRvIGFwcGx5IHBlci10YXNrIEdGUCBjb250ZXh0IHJlc3RyaWN0aW9ucyB2aWEgYGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKWAuIFRoaXMgZW5zdXJlcyB0YXNrLWxldmVsIGZsYWdzIHN1Y2ggYXMgUEZfTUVNQUxMT0NfTk9JTywgUEZfTUVNQUxMT0NfTk9GUywgYW5kIFBGX01FTUFMTE9DX1BJTiBjb3JyZWN0bHkgbWFzayBHRlAgZmxhZ3MgKGUuZy4sIHN0cmlwcGluZyBfX0dGUF9JTywgX19HRlBfRlMsIF9fR0ZQX01PVkFCTEUpIHRvIHByZXZlbnQgZGVhZGxvY2tzIGR1cmluZyByZWNsYWltLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnk6XFxuMS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UuXFxuMi4gSXQgZG9lcyBub3QgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uLCB6ZXJvaW5nLCBvciBzdHJ1Y3QgZmllbGQgcG9wdWxhdGlvbi5cXG4zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYnJhbmNoZXMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBhZmZlY3QgYnVmZmVyIGJvdW5kcy9sZW5ndGhzLlxcblxcbkFueSByZWNsYWltIG9yIGxvY2tpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gdGFzayBHRlAgY29udGV4dHMgYXJlIHRyYWNrZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgbWVtb3J5IGFsbG9jIGRlYnVnZ2luZywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYCB0byBhcHBseSBwZXItdGFzayBHRlAgY29udGV4dCByZXN0cmljdGlvbnMgdmlhIGBjdXJyZW50X2dmcF9jb250ZXh0KGdmcClgLiBUaGlzIGVuc3VyZXMgdGFzay1sZXZlbCBmbGFncyBzdWNoIGFzIFBGX01FTUFMTE9DX05PSU8sIFBGX01FTUFMTE9DX05PRlMsIGFuZCBQRl9NRU1BTExPQ19QSU4gY29ycmVjdGx5IG1hc2sgR0ZQIGZsYWdzIChlLmcuLCBzdHJpcHBpbmcgX19HRlBfSU8sIF9fR0ZQX0ZTLCBfX0dGUF9NT1ZBQkxFKSB0byBwcmV2ZW50IGRlYWRsb2NrcyBkdXJpbmcgcmVjbGFpbS5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OlxcbjEuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIG1vZGlmeSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLlxcbjIuIEl0IGRvZXMgbm90IGFsdGVyIG1lbW9yeSBpbml0aWFsaXphdGlvbiwgemVyb2luZywgb3Igc3RydWN0IGZpZWxkIHBvcHVsYXRpb24uXFxuMy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGVzIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEgb3IgYWZmZWN0IGJ1ZmZlciBib3VuZHMvbGVuZ3Rocy5cXG5cXG5BbnkgcmVjbGFpbSBvciBsb2NraW5nIGlzc3VlcyByZWxhdGVkIHRvIHRhc2sgR0ZQIGNvbnRleHRzIGFyZSB0cmFja2VkIGJ5IExPQ0tERVAgYW5kIHN0YW5kYXJkIG1lbW9yeSBhbGxvYyBkZWJ1Z2dpbmcsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9pgck[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 09:22:10 +0000 UTC FinishedAt: 2026-09-15 09:47:09 +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": "136a77f66b51dad3846c393753d92ad026e484e7", "config_name": "upstream-apparmor-kasan.config", "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": "136a77f66b51dad3846c393753d92ad026e484e7", "config_name": "upstream-apparmor-kasan.config", "series_id": "6190ae9d-78c4-4f11-93ea-b70fdfd2ee3c" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_pages_bulk_noprof" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "136a77f66b51dad3846c393753d92ad026e484e7", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19ub3Byb2YmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKWAgdG8gYXBwbHkgcGVyLXRhc2sgR0ZQIGNvbnRleHQgcmVzdHJpY3Rpb25zIHZpYSBgY3VycmVudF9nZnBfY29udGV4dChnZnApYC4gVGhpcyBlbnN1cmVzIHRhc2stbGV2ZWwgZmxhZ3Mgc3VjaCBhcyBQRl9NRU1BTExPQ19OT0lPLCBQRl9NRU1BTExPQ19OT0ZTLCBhbmQgUEZfTUVNQUxMT0NfUElOIGNvcnJlY3RseSBtYXNrIEdGUCBmbGFncyAoZS5nLiwgc3RyaXBwaW5nIF9fR0ZQX0lPLCBfX0dGUF9GUywgX19HRlBfTU9WQUJMRSkgdG8gcHJldmVudCBkZWFkbG9ja3MgZHVyaW5nIHJlY2xhaW0uXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnk6XG4xLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZS5cbjIuIEl0IGRvZXMgbm90IGFsdGVyIG1lbW9yeSBpbml0aWFsaXphdGlvbiwgemVyb2luZywgb3Igc3RydWN0IGZpZWxkIHBvcHVsYXRpb24uXG4zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYnJhbmNoZXMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBhZmZlY3QgYnVmZmVyIGJvdW5kcy9sZW5ndGhzLlxuXG5BbnkgcmVjbGFpbSBvciBsb2NraW5nIGlzc3VlcyByZWxhdGVkIHRvIHRhc2sgR0ZQIGNvbnRleHRzIGFyZSB0cmFja2VkIGJ5IExPQ0tERVAgYW5kIHN0YW5kYXJkIG1lbW9yeSBhbGxvYyBkZWJ1Z2dpbmcsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgcGFnZSBhbGxvY2F0b3IgZnVuY3Rpb24gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKSBpbiBtbS9wYWdlX2FsbG9jLmMgdG8gaG9ub3IgdGhlIGNhbGxpbmcgdGFzayYjMzk7cyBzY29wZWQgR0ZQIGNvbnRleHQgdmlhIGN1cnJlbnRfZ2ZwX2NvbnRleHQoKS4gVGhpcyBhbHRlcnMgYWxsb2NhdGlvbiBmbGFncyAoZS5nLiBzdHJpcHBpbmcgX19HRlBfRlMsIF9fR0ZQX0lPLCBvciBfX0dGUF9NT1ZBQkxFIHVuZGVyIFBGX01FTUFMTE9DX05PRlMsIFBGX01FTUFMTE9DX05PSU8sIG9yIFBGX01FTUFMTE9DX1BJTikgZHVyaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIHJlcXVlc3RzLCB3aGljaCBkaXJlY3RseSBhZmZlY3RzIHJlYWNoYWJsZSBzdWJzeXN0ZW1zIHN1Y2ggYXMgdm1hbGxvYywgc3BsaWNlLCBpb191cmluZywgYW5kIHBhZ2UgcG9vbHMuIFRoaXMgY29yZSBtbSBsb2dpYyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQwMWVlYWRiYjRmOTczOTJiNTBiZGJhN2I1M2EwNjM2ZTZlOTE4MWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwOTo0MDo1NSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IDEyZmFjOTA4NGM0ODMuLjNiZTcyODhhMWFhNzEgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTUyMDcsNiAmIzQzOzUyMDcsNyBAQCB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG4gXG4gXHQvKiBNYXkgc2V0IEFMTE9DX05PRlJBR01FTlQsIGZyYWdtZW50YXRpb24gd2lsbCByZXR1cm4gMSBwYWdlLiAqL1xuIFx0Z2ZwIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbiYjNDM7XHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XG4gXHRpZiAoIXByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgXHUwMDI2YWMsIFx1MDAyNmdmcCwgXHUwMDI2YWxsb2NfZmxhZ3MpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHBhZ2UgYWxsb2NhdG9yIGZ1bmN0aW9uIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKCkgaW4gbW0vcGFnZV9hbGxvYy5jIHRvIGhvbm9yIHRoZSBjYWxsaW5nIHRhc2smIzM5O3Mgc2NvcGVkIEdGUCBjb250ZXh0IHZpYSBjdXJyZW50X2dmcF9jb250ZXh0KCkuIFRoaXMgYWx0ZXJzIGFsbG9jYXRpb24gZmxhZ3MgKGUuZy4gc3RyaXBwaW5nIF9fR0ZQX0ZTLCBfX0dGUF9JTywgb3IgX19HRlBfTU9WQUJMRSB1bmRlciBQRl9NRU1BTExPQ19OT0ZTLCBQRl9NRU1BTExPQ19OT0lPLCBvciBQRl9NRU1BTExPQ19QSU4pIGR1cmluZyBidWxrIHBhZ2UgYWxsb2NhdGlvbiByZXF1ZXN0cywgd2hpY2ggZGlyZWN0bHkgYWZmZWN0cyByZWFjaGFibGUgc3Vic3lzdGVtcyBzdWNoIGFzIHZtYWxsb2MsIHNwbGljZSwgaW9fdXJpbmcsIGFuZCBwYWdlIHBvb2xzLiBUaGlzIGNvcmUgbW0gbG9naWMgY2hhbmdlIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0MDFlZWFkYmI0Zjk3MzkyYjUwYmRiYTdiNTNhMDYzNmU2ZTkxODFhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMDk6NDA6NTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggMTJmYWM5MDg0YzQ4My4uM2JlNzI4OGExYWE3MSAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtNTIwNyw2ICYjNDM7NTIwNyw3IEBAIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCwKIAogCS8qIE1heSBzZXQgQUxMT0NfTk9GUkFHTUVOVCwgZnJhZ21lbnRhdGlvbiB3aWxsIHJldHVybiAxIHBhZ2UuICovCiAJZ2ZwICZhbXA7PSBnZnBfYWxsb3dlZF9tYXNrOwomIzQzOwlnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7CiAJaWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssICZhbXA7YWMsICZhbXA7Z2ZwLCAmYW1wO2FsbG9jX2ZsYWdzKSkKIAkJZ290byBvdXQ7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBgbW0vcGFnZV9hbGxvYy5jYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgbW9kaWZpZXMgYG1tL3BhZ2VfYWxsb2MuY2AuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBhIGxpbmUgdGhhdCBjYWxscyBgY3VycmVudF9nZnBfY29udGV4dChnZnApYCByaWdodCBiZWZvcmUgdGhlIGBwcmVwYXJlX2FsbG9jX3BhZ2VzYCBjYWxsLiBUaGlzIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVudCBhbmQgaW1wbGljYXRpb25zIGhlcmUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcmV2aWV3IHRoZSBnaXQgaGlzdG9yeSBvZiB0aGlzIGZpbGUgaW4gdGhhdCBhcmVhLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4KCkkmIzM5O20gdGhpbmtpbmcsICYjMzQ7TGV0JiMzOTtzIGNoZWNrIHRoZSBnaXQgbG9nIG9yIGp1c3QgYnJvd3NlIHRoYXQgc2VjdGlvbiBvZiBgbW0vcGFnZV9hbGxvYy5jYCYjMzQ7LiBJJiMzOTtsbCBxdWlja2x5IG5lZWQgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhbmQgdW5kZXJzdGFuZCB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIHVzZWQgYW5kIGl0cyBwYXJhbWV0ZXJzLCBhbmQgc28gSSBtaWdodCBhcyB3ZWxsIGp1c3QgYHJlYWQtZmlsZWAgYW5kIGNoZWNrIHRoZSBmaWxlIGRpcmVjdGx5LiBUaGF0IHdpbGwgYmUgdGhlIHF1aWNrZXN0IHBhdGggdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBgZ2ZwYCBmbGFnIGlzIGJlaW5nIG1vZGlmaWVkLCB3aHkgdGhpcyBjb250ZXh0IGlzIGJlaW5nIHNldCwgYW5kIHdoYXQgZWZmZWN0IHRoaXMgd2lsbCBoYXZlIG9uIHBhZ2UgYWxsb2NhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTE5NTpcdFxuNTE5NjpcdCNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxuNTE5NzpcdFx0LypcbjUxOTg6XHRcdCAqIFBBR0VfT1dORVIgbWF5IHJlY3Vyc2UgaW50byB0aGUgYWxsb2NhdG9yIHRvIGFsbG9jYXRlIHNwYWNlIHRvXG41MTk5Olx0XHQgKiBzYXZlIHRoZSBzdGFjayB3aXRoIHBhZ2VzZXRzLmxvY2sgaGVsZC4gUmVsZWFzaW5nL3JlYWNxdWlyaW5nXG41MjAwOlx0XHQgKiByZW1vdmVzIG11Y2ggb2YgdGhlIHBlcmZvcm1hbmNlIGJlbmVmaXQgb2YgYnVsayBhbGxvY2F0aW9uIHNvXG41MjAxOlx0XHQgKiBmb3JjZSB0aGUgY2FsbGVyIHRvIGFsbG9jYXRlIG9uZSBwYWdlIGF0IGEgdGltZSBhcyBpdCYjMzk7bGwgaGF2ZVxuNTIwMjpcdFx0ICogc2ltaWxhciBwZXJmb3JtYW5jZSB0byBhZGRlZCBjb21wbGV4aXR5IHRvIHRoZSBidWxrIGFsbG9jYXRvci5cbjUyMDM6XHRcdCAqL1xuNTIwNDpcdFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxuNTIwNTpcdFx0XHRnb3RvIGZhaWxlZDtcbjUyMDY6XHQjZW5kaWZcbjUyMDc6XHRcbjUyMDg6XHRcdC8qIE1heSBzZXQgQUxMT0NfTk9GUkFHTUVOVCwgZnJhZ21lbnRhdGlvbiB3aWxsIHJldHVybiAxIHBhZ2UuICovXG41MjA5Olx0XHRnZnAgXHUwMDI2PSBnZnBfYWxsb3dlZF9tYXNrO1xuNTIxMDpcdFx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xuNTIxMTpcdFx0aWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFx1MDAyNmFjLCBcdTAwMjZnZnAsIFx1MDAyNmFsbG9jX2ZsYWdzKSlcbjUyMTI6XHRcdFx0Z290byBvdXQ7XG41MjEzOlx0XG41MjE0Olx0XHQvKiBGaW5kIGFuIGFsbG93ZWQgbG9jYWwgem9uZSB0aGF0IG1lZXRzIHRoZSBsb3cgd2F0ZXJtYXJrLiAqL1xuNTIxNTpcdFx0eiA9IGFjLnByZWZlcnJlZF96b25lcmVmO1xuNTIxNjpcdFx0Zm9yX25leHRfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCBhYy5oaWdoZXN0X3pvbmVpZHgsIGFjLm5vZGVtYXNrKSB7XG41MjE3Olx0XHRcdHVuc2lnbmVkIGxvbmcgbWFyaztcbjUyMTg6XHRcbjUyMTk6XHRcdFx0aWYgKGNwdXNldHNfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX0NQVVNFVCkgXHUwMDI2XHUwMDI2XG41MjIwOlx0XHRcdCAgICAhX19jcHVzZXRfem9uZV9hbGxvd2VkKHpvbmUsIGdmcCkpIHtcbjUyMjE6XHRcdFx0XHRjb250aW51ZTtcbjUyMjI6XHRcdFx0fVxuNTIyMzpcdFxuNTIyNDpcdFx0XHRpZiAobnJfb25saW5lX25vZGVzIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiB6b25lICE9IHpvbmVsaXN0X3pvbmUoYWMucHJlZmVycmVkX3pvbmVyZWYpIFx1MDAyNlx1MDAyNlxuNTIyNTpcdFx0XHQgICAgem9uZV90b19uaWQoem9uZSkgIT0gem9uZWxpc3Rfbm9kZV9pZHgoYWMucHJlZmVycmVkX3pvbmVyZWYpKSB7XG41MjI2Olx0XHRcdFx0Z290byBmYWlsZWQ7XG41MjI3Olx0XHRcdH1cbjUyMjg6XHRcbjUyMjk6XHRcdFx0Y29uZF9hY2NlcHRfbWVtb3J5KHpvbmUsIDAsIGFsbG9jX2ZsYWdzKTtcbjUyMzA6XHRyZXRyeV90aGlzX3pvbmU6XG41MjMxOlx0XHRcdG1hcmsgPSB3bWFya19wYWdlcyh6b25lLCBhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfV01BUktfTUFTSykgJiM0MzsgbnJfcGFnZXMgLSBucl9wb3B1bGF0ZWQ7XG41MjMyOlx0XHRcdGlmICh6b25lX3dhdGVybWFya19mYXN0KHpvbmUsIDAsICBtYXJrLFxuNTIzMzpcdFx0XHRcdFx0em9uZWxpc3Rfem9uZV9pZHgoYWMucHJlZmVycmVkX3pvbmVyZWYpLFxuNTIzNDpcdFx0XHRcdFx0YWxsb2NfZmxhZ3MsIGdmcCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTMwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKkRpZ2dpbmcgaW50byBNZW1vcnkgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIGFuZCBgYWxsb2NfcGFnZXNfbm9wcm9mYC4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIHBsYXlzIGEgcm9sZSBpbiBob3cgYGFsbG9jX3BhZ2VzX25vcHJvZmAgYmVoYXZlcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgLiBUaGUgbW9zdCBkaXJlY3QgYXBwcm9hY2ggaXMgdG8gY2hlY2sgdGhlIGBtbS9wYWdlX2FsbG9jLmNgIGZpbGUsIHNpbmNlIHRoYXQmIzM5O3MgYSBjZW50cmFsIGxvY2F0aW9uIGZvciBtZW1vcnkgYWxsb2NhdGlvbi4gQnV0LCBvZiBjb3Vyc2UsIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGdyZXAgdG8gZmluZCBhbGwgdGhlIGluc3RhbmNlcyBvZiBgY3VycmVudF9nZnBfY29udGV4dGAsIGFjcm9zcyB0aGUga2VybmVsIHNvdXJjZSwgdG8gZ2V0IGEgYnJvYWQgcGljdHVyZSBvZiBpdHMgdXNhZ2UuIFRoYXQgc2hvdWxkIHBhaW50IGEgY2xlYXJlciBwaWN0dXJlIG9mIGl0cyBwdXJwb3NlIGFuZCBpbmZsdWVuY2Ugb24gdGhlc2UgYWxsb2NhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3VycmVudF9nZnBfY29udGV4dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTQxNDU9c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MjE0LVxubW0vaHVnZV9tZW1vcnkuYzo0MjE1Olx0XHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykgXHUwMDI2XG5tbS9odWdlX21lbW9yeS5jLTQyMTYtXHRcdFx0XHRcdFx0XHRHRlBfUkVDTEFJTV9NQVNLKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9Mzc1Mj1hbGxvY19mbGFnc19ub2ZyYWdtZW50KHN0cnVjdCB6b25lICp6b25lLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMzc4NC1cbm1tL3BhZ2VfYWxsb2MuYzozNzg1Oi8qIE11c3QgYmUgY2FsbGVkIGFmdGVyIGN1cnJlbnRfZ2ZwX2NvbnRleHQoKSB3aGljaCBjYW4gY2hhbmdlIGdmcF9tYXNrICovXG5tbS9wYWdlX2FsbG9jLmMtMzc4Ni1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhbGxvY19mbGFnc19jbWEoZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubW0vcGFnZV9hbGxvYy5jPTQzODM9dm9pZCBmc19yZWNsYWltX2FjcXVpcmUoZ2ZwX3QgZ2ZwX21hc2spXG5tbS9wYWdlX2FsbG9jLmMtNDM4NC17XG5tbS9wYWdlX2FsbG9jLmM6NDM4NTpcdGdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayk7XG5tbS9wYWdlX2FsbG9jLmMtNDM4Ni1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDQwMD12b2lkIGZzX3JlY2xhaW1fcmVsZWFzZShnZnBfdCBnZnBfbWFzaylcbm1tL3BhZ2VfYWxsb2MuYy00NDAxLXtcbm1tL3BhZ2VfYWxsb2MuYzo0NDAyOlx0Z2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKTtcbm1tL3BhZ2VfYWxsb2MuYy00NDAzLVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz01MTYwPXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTIwOS1cdGdmcCBcdTAwMjY9IGdmcF9hbGxvd2VkX21hc2s7XG5tbS9wYWdlX2FsbG9jLmM6NTIxMDpcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcbm1tL3BhZ2VfYWxsb2MuYy01MjExLVx0aWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFx1MDAyNmFjLCBcdTAwMjZnZnAsIFx1MDAyNmFsbG9jX2ZsYWdzKSlcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTM4ND1zdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01NDE5LVx0ICovXG5tbS9wYWdlX2FsbG9jLmM6NTQyMDpcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcbm1tL3BhZ2VfYWxsb2MuYy01NDIxLVx0YWxsb2NfZ2ZwID0gZ2ZwO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz03Mjg0PWludCBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzMxMi1cbm1tL3BhZ2VfYWxsb2MuYzo3MzEzOlx0Z2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKTtcbm1tL3BhZ2VfYWxsb2MuYy03MzE0LVx0aWYgKF9fYWxsb2NfY29udGlnX3ZlcmlmeV9nZnBfbWFzayhnZnBfbWFzaywgKGdmcF90ICopXHUwMDI2Y2MuZ2ZwX21hc2spKVxuLS1cbm1tL3BlcmNwdS5jPTE3MzU9dm9pZCBfX3BlcmNwdSAqcGNwdV9hbGxvY19ub3Byb2Yoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwgYm9vbCByZXNlcnZlZCxcbi0tXG5tbS9wZXJjcHUuYy0xNzQ5LVxubW0vcGVyY3B1LmM6MTc1MDpcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcbm1tL3BlcmNwdS5jLTE3NTEtXHQvKlxuLS1cbm1tL3Ztc2Nhbi5jPTY3Njk9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG4tLVxubW0vdm1zY2FuLmMtNjc3NC1cdFx0Lm5yX3RvX3JlY2xhaW0gPSBTV0FQX0NMVVNURVJfTUFYLFxubW0vdm1zY2FuLmM6Njc3NTpcdFx0LmdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayksXG5tbS92bXNjYW4uYy02Nzc2LVx0XHQucmVjbGFpbV9pZHggPSBnZnBfem9uZShnZnBfbWFzayksXG4tLVxubW0vdm1zY2FuLmM9Njg1NT11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4NjUtXHRcdC5wcm9hY3RpdmVfc3dhcHBpbmVzcyA9IHN3YXBwaW5lc3MsXG5tbS92bXNjYW4uYzo2ODY2Olx0XHQuZ2ZwX21hc2sgPSAoY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzaykgXHUwMDI2IEdGUF9SRUNMQUlNX01BU0spIHxcbm1tL3Ztc2Nhbi5jLTY4NjctXHRcdFx0XHQoR0ZQX0hJR0hVU0VSX01PVkFCTEUgXHUwMDI2IH5HRlBfUkVDTEFJTV9NQVNLKSxcbi0tXG5tbS92bXNjYW4uYz03ODc2PXVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vdm1zY2FuLmMtNzg4Mi1cdFx0Lm5yX3RvX3JlY2xhaW0gPSBtYXgobnJfcGFnZXMsIFNXQVBfQ0xVU1RFUl9NQVgpLFxubW0vdm1zY2FuLmM6Nzg4MzpcdFx0LmdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayksXG5tbS92bXNjYW4uYy03ODg0LVx0XHQub3JkZXIgPSBvcmRlcixcbi0tXG5tbS92bXNjYW4uYz03OTU4PWludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbi0tXG5tbS92bXNjYW4uYy04MDM1LVx0XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XG5tbS92bXNjYW4uYzo4MDM2Olx0XHRcdFx0LmdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayksXG5tbS92bXNjYW4uYy04MDM3LVx0XHRcdFx0LnJlY2xhaW1faWR4ID0gZ2ZwX3pvbmUoZ2ZwX21hc2spLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MTkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246CgoqKk1pc3NpbmcgQ29udGV4dCBpbiBCdWxrIFBhZ2UgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCBzbyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIHNlZW1zIHRvIGJlIG1pc3NpbmcgYSBjcml0aWNhbCBjYWxsIHRvIGBjdXJyZW50X2dmcF9jb250ZXh0KGdmcClgLiBUaGF0JiMzOTtzLi4uIGludGVyZXN0aW5nLiBMZXQgbWUgcXVpY2tseSBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBjdXJyZW50X2dmcF9jb250ZXh0YCAqYWN0dWFsbHkqIGRvZXMuIExldCYjMzk7cyB0cmFjZSB0aGF0IGZ1bmN0aW9uIGRlZmluaXRpb24gYW5kIHNlZSB3aGF0IHRoZSBpbnRlbnRpb25zIG9mIHRoYXQgZnVuY3Rpb24gYXJlLiBQZXJoYXBzIHRoZXJlJiMzOTtzIGFuIGlzc3VlIHdpdGggaG93IHRoaXMgYnVsayBhbGxvY2F0aW9uIGlzIGhhbmRsaW5nIEdGUCBmbGFncy4gVGhpcyBtaXNzaW5nIHBpZWNlIGNvdWxkIGJlIGFmZmVjdGluZyBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciBpbiB3YXlzIEkgbmVlZCB0byB1bmRlcnN0YW5kLiBMZXQmIzM5O3MgZGl2ZSBpbiBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW5saW5lIGdmcF90IGN1cnJlbnRfZ2ZwX2NvbnRleHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTIxNT1zdGF0aWMgaW5saW5lIGJvb2wgaW5fdmZvcmsoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI0Ny0gKi9cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDoyNDg6c3RhdGljIGlubGluZSBnZnBfdCBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF90IGZsYWdzKVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI0OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE1MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBjb2RlOgoKKipEaXZpbmcgaW50byBNZW1vcnkgTWFuYWdlbWVudCAobW0uaCkqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBzb21lIG1lbW9yeSBtYW5hZ2VtZW50IGRldGFpbHMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBhZGRyZXNzIHNwYWNlcyBhbmQgbWVtb3J5IGNvbnRleHRzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI0OC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGRlZmluaXRpb25zIG9yIHN0cnVjdHVyZXMgcmVsYXRlZCB0byBwcm9jZXNzIG1lbW9yeSBtYXBzIChtbV9zdHJ1Y3QpIG9yIHBlcmhhcHMgZGV0YWlscyBhYm91dCBob3cgdGhlc2UgbWFwcyBpbnRlcmFjdCB3aXRoIHRoZSBwYWdlIHRhYmxlcy4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB2aXJ0dWFsIGFkZHJlc3NlcyBhcmUgdHJhbnNsYXRlZCB0byBwaHlzaWNhbCBhZGRyZXNzZXMgYW5kIGhvdyB0aGUga2VybmVsIHRyYWNrcyB0aGUgbWVtb3J5IGFsbG9jYXRlZCB0byBlYWNoIHByb2Nlc3MuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgbG9ja2luZyBtZWNoYW5pc21zIG9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQsIGFzIHRoZXNlIGFyZSBjcml0aWNhbCBmb3IgZW5zdXJpbmcgZGF0YSBjb25zaXN0ZW5jeSBhbmQgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgaW4gYSBtdWx0aXRocmVhZGVkIGVudmlyb25tZW50LiBGcm9tIHRoZXJlLCBJIGNhbiBiZXR0ZXIgdW5kZXJzdGFuZCBhbmQgZGVidWcgY2VydGFpbiBtZW1vcnktcmVsYXRlZCBzeXN0ZW0gY2FsbHMgSSB3YXMgZGVhbGluZyB3aXRoIGVhcmxpZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zY2hlZC9tbS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDA6XHR9XG4gMjQxOlx0XG4gMjQyOlx0LypcbiAyNDM6XHQgKiBBcHBsaWVzIHBlci10YXNrIGdmcCBjb250ZXh0IHRvIHRoZSBnaXZlbiBhbGxvY2F0aW9uIGZsYWdzLlxuIDI0NDpcdCAqIFBGX01FTUFMTE9DX05PSU8gaW1wbGllcyBHRlBfTk9JT1xuIDI0NTpcdCAqIFBGX01FTUFMTE9DX05PRlMgaW1wbGllcyBHRlBfTk9GU1xuIDI0NjpcdCAqIFBGX01FTUFMTE9DX1BJTiAgaW1wbGllcyAhR0ZQX01PVkFCTEVcbiAyNDc6XHQgKi9cbiAyNDg6XHRzdGF0aWMgaW5saW5lIGdmcF90IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX3QgZmxhZ3MpXG4gMjQ5Olx0e1xuIDI1MDpcdFx0dW5zaWduZWQgaW50IHBmbGFncyA9IFJFQURfT05DRShjdXJyZW50LVx1MDAzZWZsYWdzKTtcbiAyNTE6XHRcbiAyNTI6XHRcdGlmICh1bmxpa2VseShwZmxhZ3MgXHUwMDI2IChQRl9NRU1BTExPQ19OT0lPIHwgUEZfTUVNQUxMT0NfTk9GUyB8IFBGX01FTUFMTE9DX1BJTikpKSB7XG4gMjUzOlx0XHRcdC8qXG4gMjU0Olx0XHRcdCAqIE5PSU8gaW1wbGllcyBib3RoIE5PSU8gYW5kIE5PRlMgYW5kIGl0IGlzIGEgd2Vha2VyIGNvbnRleHRcbiAyNTU6XHRcdFx0ICogc28gYWx3YXlzIG1ha2Ugc3VyZSBpdCBtYWtlcyBwcmVjZWRlbmNlXG4gMjU2Olx0XHRcdCAqL1xuIDI1NzpcdFx0XHRpZiAocGZsYWdzIFx1MDAyNiBQRl9NRU1BTExPQ19OT0lPKVxuIDI1ODpcdFx0XHRcdGZsYWdzIFx1MDAyNj0gfihfX0dGUF9JTyB8IF9fR0ZQX0ZTKTtcbiAyNTk6XHRcdFx0ZWxzZSBpZiAocGZsYWdzIFx1MDAyNiBQRl9NRU1BTExPQ19OT0ZTKVxuIDI2MDpcdFx0XHRcdGZsYWdzIFx1MDAyNj0gfl9fR0ZQX0ZTO1xuIDI2MTpcdFxuIDI2MjpcdFx0XHRpZiAocGZsYWdzIFx1MDAyNiBQRl9NRU1BTExPQ19QSU4pXG4gMjYzOlx0XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+X19HRlBfTU9WQUJMRTtcbiAyNjQ6XHRcdH1cbiAyNjU6XHRcdHJldHVybiBmbGFncztcbiAyNjY6XHR9XG4gMjY3Olx0XG4gMjY4Olx0I2lmZGVmIENPTkZJR19MT0NLREVQXG4gMjY5Olx0ZXh0ZXJuIHZvaWQgX19mc19yZWNsYWltX2FjcXVpcmUodW5zaWduZWQgbG9uZyBpcCk7XG4gMjcwOlx0ZXh0ZXJuIHZvaWQgX19mc19yZWNsYWltX3JlbGVhc2UodW5zaWduZWQgbG9uZyBpcCk7XG4gMjcxOlx0ZXh0ZXJuIHZvaWQgZnNfcmVjbGFpbV9hY3F1aXJlKGdmcF90IGdmcF9tYXNrKTtcbiAyNzI6XHRleHRlcm4gdm9pZCBmc19yZWNsYWltX3JlbGVhc2UoZ2ZwX3QgZ2ZwX21hc2spO1xuIDI3MzpcdCNlbHNlXG4gMjc0Olx0c3RhdGljIGlubGluZSB2b2lkIF9fZnNfcmVjbGFpbV9hY3F1aXJlKHVuc2lnbmVkIGxvbmcgaXApIHsgfVxuIDI3NTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZzX3JlY2xhaW1fcmVsZWFzZSh1bnNpZ25lZCBsb25nIGlwKSB7IH1cbiAyNzY6XHRzdGF0aWMgaW5saW5lIHZvaWQgZnNfcmVjbGFpbV9hY3F1aXJlKGdmcF90IGdmcF9tYXNrKSB7IH1cbiAyNzc6XHRzdGF0aWMgaW5saW5lIHZvaWQgZnNfcmVjbGFpbV9yZWxlYXNlKGdmcF90IGdmcF9tYXNrKSB7IH1cbiAyNzg6XHQjZW5kaWZcbiAyNzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA4NQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBHRlAgQ29udGV4dHMgaW4gTWVtb3J5IEFsbG9jYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB3ZSBtYW5hZ2UgdGhlICYjMzQ7Z2ZwJiMzNDsgKGdldCBmcmVlIHBhZ2VzKSBjb250ZXh0IHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgd2l0aCByZWdhcmQgdG8gYWxsb2NhdGlvbiBmbGFncy4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBjdXJyZW50X2dmcF9jb250ZXh0YCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUuIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgZGVzaWduZWQgdG8gdGFpbG9yIHRoZSBgZ2ZwYCBmbGFncyBmb3IgYSBnaXZlbiBhbGxvY2F0aW9uIHJlcXVlc3Qgb24gYSBwZXItdGFzayBiYXNpcy4KCkkgc2VlIHRoYXQgYFBGX01FTUFMTE9DX05PSU9gIGlzIGRlc2lnbmVkIHRvIHRyYW5zbGF0ZSBpbnRvIGBHRlBfTk9JT2AuIFRoaXMgbWFrZXMgcGVyZmVjdCBzZW5zZTsgYEdGUF9OT0lPYCBtZWFucyB3ZSB3YW50IHRvIGF2b2lkIGRpc2sgSS9PLCBhbmQgYFBGX01FTUFMTE9DX05PSU9gIHNlZW1zIHRvIGJlIHRoZSBmbGFnIHRoYXQgc2lnbmFscyB0aGlzIGludGVudCwgY2xlYXJpbmcgdGhlIGBfX0dGUF9JT2AgYW5kIGBfX0dGUF9GU2AgZmxhZ3MgdG8gZW5zdXJlIG5vIGRpc2sgaW50ZXJhY3Rpb24uCgpTaW1pbGFybHksIGBQRl9NRU1BTExPQ19OT0ZTYCBtYXBzIHRvIGBHRlBfTk9GU2AsIHdoaWNoIGlzIGxvZ2ljYWxseSBjb25zaXN0ZW50LCBjbGVhcmluZyBvbmx5IHRoZSBgX19HRlBfRlNgIGZsYWcuICBObyBmaWxlc3lzdGVtIGFjY2VzcywgZ29vZC4KCkZpbmFsbHksIGBQRl9NRU1BTExPQ19QSU5gIGhhcyB0aGUgZWZmZWN0IG9mIG5lZ2F0aW5nIGBHRlBfTU9WQUJMRWAsIHdoaWNoIG1ha2VzIHNlbnNlIGJlY2F1c2UgcGlubmluZyBhIHBhZ2UgaW1wbGllcyBpdCBzaG91bGRuJiMzOTt0IGJlIG1vdmVkIGFyb3VuZCBpbiBtZW1vcnkuICBUaGlzIGNsZWFycyB0aGUgYF9fR0ZQX01PVkFCTEVgIGZsYWcuCgpJJiMzOTttIG5vdyBjdXJpb3VzIGFib3V0IHdoaWNoIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIHVzaW5nIHRoZSBgYWxsb2NfcGFnZXNfYnVsaypgIGZ1bmN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoaWNoIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIHVzaW5nIHRoaXMgdG8gaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byBncmVwIHRocm91Z2ggdGhlIGNvZGViYXNlIGZvciB1c2FnZXMgb2YgYGFsbG9jX3BhZ2VzX2J1bGsqYCB0byBnZXQgYSBnb29kIHNlbnNlIG9mIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19wYWdlc19idWxrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0xNzI9c3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDQtXHQgKlxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwNTpcdCAqIE5vdGU6IGFsbG9jX3BhZ2VzX2J1bGsgbmVlZHMgdGhlIGFycmF5IHRvIGJlIHplcm9lZCwgYXMgaXQgYXNzdW1lc1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwNi1cdCAqIGFueSBub24temVybyBzbG90IGFscmVhZHkgY29udGFpbnMgYSB2YWxpZCBhbGxvY2F0aW9uLlxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDgtXHRtZW1zZXQocGFnZXMsIDAsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIG5yX3NlZ3MpO1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwOTpcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJfc2VncywgcGFnZXMpO1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIxMC1cdGlmIChucl9hbGxvY2F0ZWQgXHUwMDNjIG5yX3NlZ3MpXG4tLVxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jPTMxPWludCBmd19pc29fYnVmZmVyX2FsbG9jKHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsIGludCBwYWdlX2NvdW50KVxuLS1cbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00MS1cdC8vIGNvbnZlbmllbmNlIHRvIG1hcCB0aGVtIGludG8gdmlydHVhbCBhZGRyZXNzIHNwYWNlIG9mIHVzZXIgcHJvY2Vzcy5cbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYzo0MjpcdHVuc2lnbmVkIGxvbmcgbnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMIHwgR0ZQX0RNQTMyIHwgX19HRlBfWkVSTyxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00My1cdFx0XHRcdFx0XHQgICAgICBwYWdlX2NvdW50LCBwYWdlX2FycmF5KTtcbi0tXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYz04NDg9c3RhdGljIGludCBhcl9jb250ZXh0X2luaXQoc3RydWN0IGFyX2NvbnRleHQgKmN0eCwgc3RydWN0IGZ3X29oY2kgKm9oY2ksXG4tLVxuZHJpdmVycy9maXJld2lyZS9vaGNpLmMtODY0LVx0Ly8gYWRkcmVzcyByYW5nZSBpbiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIHNwYWNlLlxuZHJpdmVycy9maXJld2lyZS9vaGNpLmM6ODY1Olx0dW5zaWduZWQgbG9uZyBucl9wb3B1bGF0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwgfCBHRlBfRE1BMzIsIEFSX0JVRkZFUlMsIHBhZ2VzKTtcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jLTg2Ni1cbi0tXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jPTYyMT1zdGF0aWMgaW50IGFsbG9jX3ByaXZhdGVfcGFnZXMoc3RydWN0IGhtbV9idWZmZXJfb2JqZWN0ICpibylcbi0tXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyNi1cbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM6NjI3Olx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBiby1cdTAwM2VwZ25yLCBiby1cdTAwM2VwYWdlcyk7XG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyOC1cdC8qXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jOjYyOTpcdCAqIGFsbG9jX3BhZ2VzX2J1bGsoKSBkb2VzIG5vdCB0cnkgdmVyeSBoYXJkIHRvIGdldCBwYWdlcyB1bmRlciBtZW1vcnlcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmMtNjMwLVx0ICogcHJlc3N1cmUuIElmIG5lY2Vzc2FyeSBmYWxsIGJhY2sgdG8gYWxsb2NfcGFnZSgpLlxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYz00NjY9c3RhdGljIHZvaWQgZnJlZV9wYWdlX2xpc3QodTMyIG5wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2xpc3QpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ2OS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYzo0NzA6XHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ3MS1cdGZvciAoaSA9IG5wYWdlcyAtIDE7IGkgXHUwMDNlPSAwOyBpLS0pXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jPTQ5Nj1zdGF0aWMgaW50IG1seDV2Zl9hZGRfcGFnZXMoc3RydWN0IHBhZ2UgKioqcGFnZV9saXN0LCB1bnNpZ25lZCBpbnQgbnBhZ2VzKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDYtXHRmb3IgKDs7KSB7XG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM6NTA3Olx0XHRmaWxsZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUxfQUNDT1VOVCwgbnBhZ2VzIC0gZG9uZSxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDgtXHRcdFx0XHRcdCAgKnBhZ2VfbGlzdCAmIzQzOyBkb25lKTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM9NjM9c3RhdGljIGludCB2aXJ0aW92Zl9hZGRfbWlncmF0aW9uX3BhZ2VzKHN0cnVjdCB2aXJ0aW92Zl9kYXRhX2J1ZmZlciAqYnVmLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy03OC1cdGRvIHtcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzo3OTpcdFx0ZmlsbGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMX0FDQ09VTlQsIHRvX2ZpbGwsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtODAtXHRcdFx0XHRcdCAgcGFnZV9saXN0KTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM9MTEwPXN0YXRpYyB2b2lkIHZpcnRpb3ZmX2ZyZWVfZGF0YV9idWZmZXIoc3RydWN0IHZpcnRpb3ZmX2RhdGFfYnVmZmVyICpidWYpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExMy1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzoxMTQ6XHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExNS1cdGZvcl9lYWNoX3NndGFibGVfcGFnZShcdTAwMjZidWYtXHUwMDNldGFibGUuc2d0LCBcdTAwMjZzZ19pdGVyLCAwKVxuLS1cbmZzL2J0cmZzL2V4dGVudF9pby5jPTY4ND1pbnQgYnRyZnNfYWxsb2NfcGFnZV9hcnJheSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgZ2ZwX3QgZ2ZwKVxuLS1cbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5MC1cbmZzL2J0cmZzL2V4dGVudF9pby5jOjY5MTpcdFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5Mi1cdFx0aWYgKHVubGlrZWx5KGFsbG9jYXRlZCA9PSBsYXN0KSkge1xuLS1cbmZzL2Vyb2ZzL3p1dGlsLmM9NjU9aW50IHpfZXJvZnNfZ2J1Zl9ncm93c2l6ZSh1bnNpZ25lZCBpbnQgbnJwYWdlcylcbi0tXG5mcy9lcm9mcy96dXRpbC5jLTg5LVx0XHRcdGxhc3QgPSBqO1xuZnMvZXJvZnMvenV0aWwuYzo5MDpcdFx0XHRqID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucnBhZ2VzLCB0bXBfcGFnZXMpO1xuZnMvZXJvZnMvenV0aWwuYy05MS1cdFx0XHRpZiAobGFzdCA9PSBqKVxuLS1cbmZzL2Z1c2UvcmVhZGRpci5jPTMzNj1zdGF0aWMgc3RydWN0IHBhZ2UgKipmdXNlX3JlYWRkaXJfYWxsb2NfYnVmKHN0cnVjdCBmdXNlX2FyZ3NfcGFnZXMgKmFwLCBzaXplX3QgKmJ1ZnNpemUpXG4tLVxuZnMvZnVzZS9yZWFkZGlyLmMtMzQzLVxuZnMvZnVzZS9yZWFkZGlyLmM6MzQ0Olx0bnJfYWxsb2MgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5yX3BhZ2VzLCBwYWdlcyk7XG5mcy9mdXNlL3JlYWRkaXIuYy0zNDUtXHRpZiAoIW5yX2FsbG9jKVxuLS1cbmZzL25mc2QvbmZzNHN0YXRlLmM9MTMyNj1hbGxvY19pbml0X2Rpcl9kZWxlZyhzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCwgc3RydWN0IG5mczRfZmlsZSAqZnApXG4tLVxuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM3LVxuZnMvbmZzZC9uZnM0c3RhdGUuYzoxMzM4Olx0bnBhZ2VzID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBOT1RJRlk0X1BBR0VfQVJSQVlfU0laRSwgbmNuLVx1MDAzZW5jbl9wYWdlcyk7XG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzktXHRpZiAobnBhZ2VzICE9IE5PVElGWTRfUEFHRV9BUlJBWV9TSVpFKSB7XG4tLVxuZnMvc3BsaWNlLmM9MzE4PXNzaXplX3QgY29weV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcbi0tXG5mcy9zcGxpY2UuYy0zNDEtXHRwYWdlcyA9IChzdHJ1Y3QgcGFnZSAqKikoYnYgJiM0MzsgbnBhZ2VzKTtcbmZzL3NwbGljZS5jOjM0MjpcdG5wYWdlcyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX1VTRVIsIG5wYWdlcywgcGFnZXMpO1xuZnMvc3BsaWNlLmMtMzQzLVx0aWYgKCFucGFnZXMpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIwNz1zdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxMC1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjExOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEyLVx0XHRcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEzLVx0XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE0OiNkZWZpbmUgX19hbGxvY19wYWdlc19idWxrKC4uLilcdFx0XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNS1cbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNy1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE4OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIwLVx0XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIxOiNkZWZpbmUgIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5KC4uLilcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMjpcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyMy1cbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI0LS8qIEJ1bGsgYWxsb2NhdGUgb3JkZXItMCBwYWdlcyAqL1xuaW5jbHVkZS9saW51eC9nZnAuaDoyMjU6I2RlZmluZSBhbGxvY19wYWdlc19idWxrKF9nZnAsIF9ucl9wYWdlcywgX3BhZ2VfYXJyYXkpXHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyNjpcdF9fYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBudW1hX21lbV9pZCgpLCBOVUxMLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjctXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIyOD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI5OmFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzAtXHRcdFx0XHQgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzQtXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzNTpcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgTlVMTCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuaW5jbHVkZS9saW51eC9nZnAuaC0yMzYtfVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzctXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzODojZGVmaW5lIGFsbG9jX3BhZ2VzX2J1bGtfbm9kZSguLi4pXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMzk6XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjQwLVxuLS1cbmlvX3VyaW5nL21lbW1hcC5jPTE3ND1zdGF0aWMgaW50IGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlcyhzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmMtMTkyLVxuaW9fdXJpbmcvbWVtbWFwLmM6MTkzOlx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgTlVNQV9OT19OT0RFLFxuaW9fdXJpbmcvbWVtbWFwLmMtMTk0LVx0XHRcdFx0XHQgICAgIG1yLVx1MDAzZW5yX3BhZ2VzLCBwYWdlcyk7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTY2OD1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTczMi1cbmtlcm5lbC9icGYvYXJlbmEuYzo3MzM6XHRcdC8qIHplcm9pbmcgaXMgbmVlZGVkLCBzaW5jZSBhbGxvY19wYWdlc19idWxrKCkgb25seSBmaWxscyBpbiBub24temVybyBlbnRyaWVzICovXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzM0LVx0XHRtZW1zZXQocGFnZXMsIDAsIHRoaXNfYmF0Y2ggKiBzaXplb2Yoc3RydWN0IHBhZ2UgKikpO1xuLS1cbmxpYi90ZXN0X3ZtYWxsb2MuYz0zOTE9dm1fbWFwX3JhbV90ZXN0KHZvaWQpXG4tLVxubGliL3Rlc3Rfdm1hbGxvYy5jLTQwMy1cbmxpYi90ZXN0X3ZtYWxsb2MuYzo0MDQ6XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG1hcF9ucl9wYWdlcywgcGFnZXMpO1xubGliL3Rlc3Rfdm1hbGxvYy5jLTQwNS1cdGlmIChucl9hbGxvY2F0ZWQgIT0gbWFwX25yX3BhZ2VzKVxuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jPTUxPXN0YXRpYyB2b2lkICpfX2luaXQgaW92X2t1bml0X2NyZWF0ZV9idWZmZXIoc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTY2LVx0XHRsYXN0ID0gZ290O1xubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6Njc6XHRcdGdvdCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnBhZ2VzLCBwYWdlcyk7XG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy02OC1cbi0tXG5tbS9hbGxvY190YWcuYz03Nzc9c3RhdGljIGludCB2bV9tb2R1bGVfdGFnc19wb3B1bGF0ZSh2b2lkKVxuLS1cbm1tL2FsbG9jX3RhZy5jLTc5My1cbm1tL2FsbG9jX3RhZy5jOjc5NDpcdFx0XHRhbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vZGUoR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTixcbm1tL2FsbG9jX3RhZy5jLTc5NS1cdFx0XHRcdE5VTUFfTk9fTk9ERSwgbW9yZV9wYWdlcyAtIG5yLCBuZXh0X3BhZ2UgJiM0MzsgbnIpO1xuLS1cbm1tL2thc2FuL3NoYWRvdy5jPTMyNz1zdGF0aWMgdm9pZCBfX19mcmVlX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL2thc2FuL3NoYWRvdy5jLTMzOC1cbm1tL2thc2FuL3NoYWRvdy5jOjMzOTpzdGF0aWMgaW50IF9fX2FsbG9jX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG5yX3BhZ2VzLCBnZnBfdCBnZnBfbWFzaylcbm1tL2thc2FuL3NoYWRvdy5jLTM0MC17XG4tLVxubW0va2FzYW4vc2hhZG93LmMtMzQ0LVx0d2hpbGUgKG5yX3BhZ2VzKSB7XG5tbS9rYXNhbi9zaGFkb3cuYzozNDU6XHRcdG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoZ2ZwX21hc2ssIG5yX3BhZ2VzLCBwYWdlcyk7XG5tbS9rYXNhbi9zaGFkb3cuYy0zNDYtXHRcdGlmICghbnJfcG9wdWxhdGVkKSB7XG4tLVxubW0va2FzYW4vc2hhZG93LmM9MzU3PXN0YXRpYyBpbnQgX19rYXNhbl9wb3B1bGF0ZV92bWFsbG9jX2RvKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9rYXNhbi9zaGFkb3cuYy0zNjktXHRcdG5yX3BhZ2VzID0gbWluKG5yX3RvdGFsLCBQQUdFX1NJWkUgLyBzaXplb2YoZGF0YS5wYWdlc1swXSkpO1xubW0va2FzYW4vc2hhZG93LmM6MzcwOlx0XHRyZXQgPSBfX19hbGxvY19wYWdlc19idWxrKGRhdGEucGFnZXMsIG5yX3BhZ2VzLCBnZnBfbWFzayk7XG5tbS9rYXNhbi9zaGFkb3cuYy0zNzEtXHRcdGlmIChyZXQpXG4tLVxubW0vbWVtcG9saWN5LmM9MjU4OT1FWFBPUlRfU1lNQk9MKGZvbGlvX2FsbG9jX25vcHJvZik7XG5tbS9tZW1wb2xpY3kuYy0yNTkwLVxubW0vbWVtcG9saWN5LmM6MjU5MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjU5Mi1cdFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2MDctXHRcdGlmIChkZWx0YSkge1xubW0vbWVtcG9saWN5LmM6MjYwODpcdFx0XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjA5LVx0XHRcdFx0XHRpbnRlcmxlYXZlX25vZGVzKHBvbCksIE5VTEwsXG4tLVxubW0vbWVtcG9saWN5LmMtMjYxMy1cdFx0fSBlbHNlIHtcbm1tL21lbXBvbGljeS5jOjI2MTQ6XHRcdFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjYxNS1cdFx0XHRcdFx0aW50ZXJsZWF2ZV9ub2Rlcyhwb2wpLCBOVUxMLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2MjUtXG5tbS9tZW1wb2xpY3kuYzoyNjI2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjI3LVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtcG9saWN5LmMtMjY2NC1cdFx0bm9kZV9wYWdlcyA9IG1pbihyZW1fcGFnZXMsIHdlaWdodCk7XG5tbS9tZW1wb2xpY3kuYzoyNjY1Olx0XHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxubW0vbWVtcG9saWN5LmMtMjY2Ni1cdFx0XHRcdFx0XHQgIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3MDEtXHQvKlxubW0vbWVtcG9saWN5LmM6MjcwMjpcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxubW0vbWVtcG9saWN5LmMtMjcwMy1cdCAqIFRyYWNrIHdoaWNoIG5vZGUgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBzaG91bGQgcmVzdW1lIGZyb20uXG4tLVxubW0vbWVtcG9saWN5LmMtMjcyOS1cdFx0XHRicmVhaztcbm1tL21lbXBvbGljeS5jOjI3MzA6XHRcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXG5tbS9tZW1wb2xpY3kuYy0yNzMxLVx0XHRcdFx0XHRcdCAgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc0My1cbm1tL21lbXBvbGljeS5jOjI3NDQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnBfdCBnZnAsIGludCBuaWQsXG5tbS9tZW1wb2xpY3kuYy0yNzQ1LVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtcG9saWN5LmMtMjc1My1cbm1tL21lbXBvbGljeS5jOjI3NTQ6XHRucl9hbGxvY2F0ZWQgID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YocHJlZmVycmVkX2dmcCwgbmlkLCBcdTAwMjZwb2wtXHUwMDNlbm9kZXMsXG5tbS9tZW1wb2xpY3kuYy0yNzU1LVx0XHRcdFx0XHQgICBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc1Ny1cdGlmIChucl9hbGxvY2F0ZWQgXHUwMDNjIG5yX3BhZ2VzKVxubW0vbWVtcG9saWN5LmM6Mjc1ODpcdFx0bnJfYWxsb2NhdGVkICYjNDM7PSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG51bWFfbm9kZV9pZCgpLCBOVUxMLFxubW0vbWVtcG9saWN5LmMtMjc1OS1cdFx0XHRcdG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkLFxuLS1cbm1tL21lbXBvbGljeS5jLTI3NjktICovXG5tbS9tZW1wb2xpY3kuYzoyNzcwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbm1tL21lbXBvbGljeS5jLTI3NzEtXHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzgwLVx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfSU5URVJMRUFWRSlcbm1tL21lbXBvbGljeS5jOjI3ODE6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwLCBwb2wsXG5tbS9tZW1wb2xpY3kuYy0yNzgyLVx0XHRcdFx0XHRcdFx0IG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzg0LVx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSlcbm1tL21lbXBvbGljeS5jOjI3ODU6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoXG5tbS9tZW1wb2xpY3kuYy0yNzg2LVx0XHRcdFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3ODgtXHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9QUkVGRVJSRURfTUFOWSlcbm1tL21lbXBvbGljeS5jOjI3ODk6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcCxcbm1tL21lbXBvbGljeS5jLTI3OTAtXHRcdFx0XHRudW1hX25vZGVfaWQoKSwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc5My1cdG5vZGVtYXNrID0gcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sLCBOT19JTlRFUkxFQVZFX0lOREVYLCBcdTAwMjZuaWQpO1xubW0vbWVtcG9saWN5LmM6Mjc5NDpcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgbm9kZW1hc2ssXG5tbS9tZW1wb2xpY3kuYy0yNzk1LVx0XHRcdFx0ICAgICAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTA5MT1zdGF0aWMgaW5saW5lIGJvb2wgcHJlcGFyZV9hbGxvY19wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MTM5LS8qXG5tbS9wYWdlX2FsbG9jLmM6NTE0MDogKiBfX2FsbG9jX3BhZ2VzX2J1bGsgLSBBbGxvY2F0ZSBhIG51bWJlciBvZiBvcmRlci0wIHBhZ2VzIHRvIGFuIGFycmF5XG5tbS9wYWdlX2FsbG9jLmMtNTE0MS0gKiBAZ2ZwOiBHRlAgZmxhZ3MgZm9yIHRoZSBhbGxvY2F0aW9uXG4tLVxubW0vcGFnZV9hbGxvYy5jLTUxNTktICovXG5tbS9wYWdlX2FsbG9jLmM6NTE2MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG5tbS9wYWdlX2FsbG9jLmMtNTE2MS1cdFx0XHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MzAwLX1cbm1tL3BhZ2VfYWxsb2MuYzo1MzAxOkVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcbm1tL3BhZ2VfYWxsb2MuYy01MzAyLVxuLS1cbm1tL3NsdWIuYz03NDI2PXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtNzQ3MC0gKlxubW0vc2x1Yi5jOjc0NzE6ICogVW5saWtlIGFsbG9jX3BhZ2VzX2J1bGsoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayBmb3IgYWxyZWFkeSBhbGxvY2F0ZWRcbm1tL3NsdWIuYy03NDcyLSAqIG9iamVjdHMgaW4gQHAsIGFuZCB0aHVzIHRoZSBjYWxsZXIgZG9lcyBub3QgbmVlZCB0byB6ZXJvIGl0LlxuLS1cbm1tL3ZtYWxsb2MuYz0zNjc2PXZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxuLS1cbm1tL3ZtYWxsb2MuYy0zNzQzLVx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSBcdTAwMjZcdTAwMjYgbmlkID09IE5VTUFfTk9fTk9ERSlcbm1tL3ZtYWxsb2MuYzozNzQ0Olx0XHRcdFx0bnIgPSBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwLFxubW0vdm1hbGxvYy5jLTM3NDUtXHRcdFx0XHRcdFx0XHRucl9wYWdlc19yZXF1ZXN0LFxuLS1cbm1tL3ZtYWxsb2MuYy0zNzQ3LVx0XHRcdGVsc2Vcbm1tL3ZtYWxsb2MuYzozNzQ4Olx0XHRcdFx0bnIgPSBhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcCwgbmlkLFxubW0vdm1hbGxvYy5jLTM3NDktXHRcdFx0XHRcdFx0XHRucl9wYWdlc19yZXF1ZXN0LFxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTYxMT1zdGF0aWMgbm9pbmxpbmUgbmV0bWVtX3JlZiBfX3BhZ2VfcG9vbF9hbGxvY19uZXRtZW1zX3Nsb3coc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzMtXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2MzQ6XHQvKiBNYXJrIGVtcHR5IGFsbG9jLmNhY2hlIHNsb3RzIFwmIzM0O2VtcHR5XCYjMzQ7IGZvciBhbGxvY19wYWdlc19idWxrICovXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzUtXHRtZW1zZXQoXHUwMDI2cG9vbC1cdTAwM2VhbGxvYy5jYWNoZSwgMCwgc2l6ZW9mKHZvaWQgKikgKiBidWxrKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNi1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjYzNzpcdG5yX3BhZ2VzID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgcG9vbC1cdTAwM2VwLm5pZCwgYnVsayxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzOC1cdFx0XHRcdFx0IChzdHJ1Y3QgcGFnZSAqKilwb29sLVx1MDAzZWFsbG9jLmNhY2hlKTtcbi0tXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9Njg3PXN0YXRpYyBib29sIHN2Y19maWxsX3BhZ2VzKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBwYWdlICoqcGFnZXMsXG4tLVxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5Mi1cdGZvciAoZmlsbGVkID0gMDsgZmlsbGVkIFx1MDAzYyBucGFnZXM7IGZpbGxlZCA9IHJldCkge1xubmV0L3N1bnJwYy9zdmNfeHBydC5jOjY5MzpcdFx0cmV0ID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucGFnZXMsIHBhZ2VzKTtcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy02OTQtXHRcdGlmIChyZXQgXHUwMDNlIGZpbGxlZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyNzgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBhbmQgaXRzIEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgd2hlcmUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyB1c2VkLiBWbWFsbG9jLCBzcGxpY2Ugc3lzY2FsbHMsIGJ0cmZzLCBmdXNlLCBpb191cmluZywgQlBGIGFyZW5hcywgbmV0d29ya2luZy4uLiBpdCYjMzk7cyBhICpsb3QqIG9mIGNvcmUgZnVuY3Rpb25hbGl0eS4gVGhhdCYjMzk7cyBhIHdpZGUgcmFuZ2Ugb2YgdXNlIGNhc2VzLCBhbmQgdGhhdCBkZWZpbml0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4KClNvLCB0aGUgaXNzdWUgdGhpcyBwYXRjaCBhZGRyZXNzZXMuLi4gcmlnaHQsIGl0JiMzOTtzIGluIGhvdyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGhhbmRsZXMgR0ZQIGZsYWdzLiBTcGVjaWZpY2FsbHk6CgpgYGBjCgkvKiBNYXkgc2V0IEFMTE9DX05PRlJBR01FTlQsIGZyYWdtZW50YXRpb24gd2lsbCByZXR1cm4gMSBwYWdlLiAqLwoJZ2ZwICZhbXA7PSBnZnBfYWxsb3dlZF9tYXNrOwoJZ2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApOwoJaWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssICZhbXA7YWMsICZhbXA7Z2ZwLCAmYW1wO2FsbG9jX2ZsYWdzKSkKCQlnb3RvIG91dDsKYGBgCgpJdCBsb29rcyBsaWtlIGlmIHdlJiMzOTtyZSB1bmRlciBhIHByb3RlY3Rpb24gc2NvcGUgbGlrZSBgbWVtYWxsb2Nfbm9pb19zYXZlKClgIChQRl9NRU1BTExPQ19OT0lPKSBvciBgbWVtYWxsb2Nfbm9mc19zYXZlKClgIChQRl9NRU1BTExPQ19OT0ZTKSB0aGlzIHJvdXRpbmUgKmlnbm9yZWQqIHRoZSB0YXNrJiMzOTtzIGN1cnJlbnQgR0ZQIGNvbnRleHQuIFRoYXQmIzM5O3MgYmFkLiBSZWFsbHkgYmFkLiBCZWNhdXNlIHRoZSBjb25zZXF1ZW5jZXMgY291bGQgYmUgSS9PIG9yIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBoYXBwZW5pbmcgd2hlbiB0aGV5IHNob3VsZG4mIzM5O3Qg4oCTIGR1cmluZyByZWNsYWltIG9yLCBldmVuIHdvcnNlLCB0cmlnZ2VyaW5nIGRlYWRsb2NrcyBvciBsb2NrZGVwIGFzc2VydGlvbnMuIFRob3NlIGFyZSAqbmFzdHkqIGJ1Z3MgdG8gdHJhY2sgZG93bi4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHByZXBhcmVfYWxsb2NfcGFnZXNgIGRvZXMgdG8gcHJvcGVybHkgYXBwcmVjaWF0ZSB0aGUgY2hhbmdlLiBTbywgSSBzaG91bGQgZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSBob3cgaXQgaXMgYWZmZWN0ZWQgYnkgdGhlIHByb3ZpZGVkIGdmcCB2YWx1ZS4gT2theSwgbGV0JiMzOTtzIHNlZSB3aGF0IGBwcmVwYXJlX2FsbG9jX3BhZ2VzYCBpcyBkb2luZy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmVwYXJlX2FsbG9jX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYz00Nzg0PV9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTA5MC1cbm1tL3BhZ2VfYWxsb2MuYzo1MDkxOnN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG5tbS9wYWdlX2FsbG9jLmMtNTA5Mi1cdFx0aW50IHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYz01MTYwPXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTIxMC1cdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcbm1tL3BhZ2VfYWxsb2MuYzo1MjExOlx0aWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFx1MDAyNmFjLCBcdTAwMjZnZnAsIFx1MDAyNmFsbG9jX2ZsYWdzKSlcbm1tL3BhZ2VfYWxsb2MuYy01MjEyLVx0XHRnb3RvIG91dDtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTM4ND1zdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01NDIxLVx0YWxsb2NfZ2ZwID0gZ2ZwO1xubW0vcGFnZV9hbGxvYy5jOjU0MjI6XHRpZiAoIXByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwLCBvcmRlciwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFx1MDAyNmFjLFxubW0vcGFnZV9hbGxvYy5jLTU0MjMtXHRcdFx0XHUwMDI2YWxsb2NfZ2ZwLCBcdTAwMjZmYXN0cGF0aF9hbGxvY19mbGFncykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTAzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBGbGFncyBhbmQgQ29udGV4dCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHNwZWNpZmljYWxseSBob3cgYWxsb2NhdGlvbiBmbGFncyBhbmQgY29udGV4dHMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGV4YW1pbmluZyBpcyBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYC4gSSBzZWUgc29tZSBjcml0aWNhbCBjaGVja3MgaGVyZTogaXQmIzM5O3MgZW5zdXJpbmcgdGhlIHJlcXVlc3RlZCBgb3JkZXJgIChmb3IgcGFnZSBhbGxvY2F0aW9uKSBpcyB3aXRoaW4gYm91bmRzLCB3aGljaCBpcyBnb29kIHNhbml0eSBjaGVja2luZy4gSXQmIzM5O3MgdXNpbmcgYGdmcF9hbGxvd2VkX21hc2tgIGFuZCBhcHBseWluZyBzY29wZWQgYWxsb2NhdGlvbiBjb25zdHJhaW50cyB1c2luZyBgY3VycmVudF9nZnBfY29udGV4dChnZnApYC4gIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UgdG8gbWFuYWdlIGhvdyB0aGUgYWxsb2NhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLCBwYXJ0aWN1bGFybHkgYXZvaWRpbmcgcG90ZW50aWFsbHkgZGlzcnVwdGl2ZSBvcGVyYXRpb25zLgoKTmV4dCwgSSYjMzk7bSBjb21wYXJpbmcgdGhlIG9sZCBhbmQgbmV3IGNvZGUgd2l0aGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuICBUaGUgZGlmZmVyZW5jZSBhcHBlYXJzIHRvIGJlIHN1YnRsZSBidXQgc2lnbmlmaWNhbnQuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgYGdmcGAgZmxhZywgYWZ0ZXIgbWFza2luZyB3aXRoIGBnZnBfYWxsb3dlZF9tYXNrYCB3YXMgcGFzc2VkIGRpcmVjdGx5IHRvIGBwcmVwYXJlX2FsbG9jX3BhZ2VzKClgLiBOb3csIGl0IGdvZXMgdGhyb3VnaCBgY3VycmVudF9nZnBfY29udGV4dCgpYCBiZWZvcmUgYmVpbmcgcGFzc2VkLgoKTm93IGl0IGNsaWNrcyEgSSByZWNhbGwgdGhhdCBgYWxsb2NfZmxhZ3NfY21hYCBoYXMgYSBjb21tZW50IHRoYXQgaXMgY3J1Y2lhbCBoZXJlOiBJdCBleHBsaWNpdGx5IHN0YXRlcyB0aGF0IGl0IG11c3QgYmUgY2FsbGVkICphZnRlciogYGN1cnJlbnRfZ2ZwX2NvbnRleHQoKWAuIFRoYXQmIzM5O3MgdGhlIGtleS4gIGBjdXJyZW50X2dmcF9jb250ZXh0KClgIG1vZGlmaWVzIHRoZSBgZ2ZwX21hc2tgLCB3aGljaCBjYW4gaW1wYWN0IHRoZSBiZWhhdmlvciBvZiB0aGUgYWxsb2NhdG9yLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIGNvcnJlY3RseSBtb3ZpbmcgdGhlIGNhbGwgdG8gYGN1cnJlbnRfZ2ZwX2NvbnRleHQoKWAgYmVmb3JlIHRoZSBjYWxsIHRvIGBwcmVwYXJlX2FsbG9jX3BhZ2VzKClgLiBUaGlzIHNlcXVlbmNlIGlzIGNyaXRpY2FsLCBiZWNhdXNlIGl0IGVuc3VyZXMgdGhhdCBgYWxsb2NfZmxhZ3NfY21hYCBmdW5jdGlvbnMgY29ycmVjdGx5IHdpdGggdGhlIGFkanVzdGVkIGBnZnBfbWFza2AgcmVzdWx0aW5nIGZyb20gdGhlIGNvbnRleHQgYXBwbGljYXRpb24uIFRoaXMgaXMgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBjaGFuZ2UgdG8gZW5zdXJlIHByb3BlciBhbGxvY2F0aW9uIGJlaGF2aW9yLCBlc3BlY2lhbGx5IHdoZW4gd29ya2luZyB3aXRoIENNQSAoQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yKSBhbmQgb3RoZXIgY29udGV4dHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX2ZsYWdzX2NtYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmM9Mzc1Mj1hbGxvY19mbGFnc19ub2ZyYWdtZW50KHN0cnVjdCB6b25lICp6b25lLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMzc4NS0vKiBNdXN0IGJlIGNhbGxlZCBhZnRlciBjdXJyZW50X2dmcF9jb250ZXh0KCkgd2hpY2ggY2FuIGNoYW5nZSBnZnBfbWFzayAqL1xubW0vcGFnZV9hbGxvYy5jOjM3ODY6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3NfY21hKGdmcF90IGdmcF9tYXNrKVxubW0vcGFnZV9hbGxvYy5jLTM3ODcte1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz00NTUxPWFsbG9jX2ZsYWdzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ1NzgtXG5tbS9wYWdlX2FsbG9jLmM6NDU3OTpcdGFsbG9jX2ZsYWdzIHw9IGFsbG9jX2ZsYWdzX2NtYShnZnBfbWFzayk7XG5tbS9wYWdlX2FsbG9jLmMtNDU4MC1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDc4ND1fX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ4ODktXHRpZiAocmVzZXJ2ZV9mbGFncylcbm1tL3BhZ2VfYWxsb2MuYzo0ODkwOlx0XHRhbGxvY19mbGFncyA9IGFsbG9jX2ZsYWdzX2NtYShnZnBfbWFzaykgfCByZXNlcnZlX2ZsYWdzIHxcbm1tL3BhZ2VfYWxsb2MuYy00ODkxLVx0XHRcdFx0YWMtXHUwMDNlYWxsb2NfZmxhZ3MgfCAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX0tTV0FQRCk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTUwOTE9c3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTEyMi1cbm1tL3BhZ2VfYWxsb2MuYzo1MTIzOlx0KmFsbG9jX2ZsYWdzIHw9IGFsbG9jX2ZsYWdzX2NtYShnZnBfbWFzayk7XG5tbS9wYWdlX2FsbG9jLmMtNTEyNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4OTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IEFsbG9jYXRpb24gQnVnKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gY29kZSBhbmQgc29tZXRoaW5nIGp1c3QganVtcGVkIG91dCBhdCBtZS4gSSYjMzk7bSBsb29raW5nIHNwZWNpZmljYWxseSBhdCBsaW5lIDM3ODUsIHdoaWNoIGlzIHRoaXMgY29tbWVudDogYC8qIE11c3QgYmUgY2FsbGVkIGFmdGVyIGN1cnJlbnRfZ2ZwX2NvbnRleHQoKSB3aGljaCBjYW4gY2hhbmdlIGdmcF9tYXNrICovYC4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnIGltbWVkaWF0ZWx5LiBUaGVuIEkgc2VlIHRoYXQgYHByZXBhcmVfYWxsb2NfcGFnZXNgIGlzIGNhbGxpbmcgYGFsbG9jX2ZsYWdzX2NtYShnZnBfbWFzaylgLiBNeSBjb25jZXJuIGlzIHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCAqdXNlZCogdG8gY2FsbCBgcHJlcGFyZV9hbGxvY19wYWdlc2Agd2l0aG91dCBhIGNhbGwgdG8gYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIGJlZm9yZWhhbmQhIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgcmVjaXBlIGZvciBkaXNhc3Rlci4gYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIGNvdWxkIGJlIG1vZGlmeWluZyB0aGF0IGdmcF9tYXNrLCBhbmQgaWYgd2UmIzM5O3JlIGNhbGxpbmcgYGFsbG9jX2ZsYWdzX2NtYWAgd2l0aCBhIHN0YWxlIG1hc2ssIHdlJiMzOTtyZSBsaWtlbHkgdG8gaGF2ZSBhIHZlcnkgYmFkIHRpbWUuIFRoaXMgbmVlZHMgZnVydGhlciBzY3J1dGlueS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgYWxsb2NfZmxhZ3NfY21hYCBpcyBkb2luZyB3aXRoIHRoYXQgYGdmcF9tYXNrYC4uLiBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHNlZSB3aGF0IGl0IGlzIGFjdHVhbGx5IG1hbmlwdWxhdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM3ODA6XHRcdGFsbG9jX2ZsYWdzIHw9IEFMTE9DX05PRlJBR01FTlQ7XG4zNzgxOlx0I2VuZGlmIC8qIENPTkZJR19aT05FX0RNQTMyICovXG4zNzgyOlx0XHRyZXR1cm4gYWxsb2NfZmxhZ3M7XG4zNzgzOlx0fVxuMzc4NDpcdFxuMzc4NTpcdC8qIE11c3QgYmUgY2FsbGVkIGFmdGVyIGN1cnJlbnRfZ2ZwX2NvbnRleHQoKSB3aGljaCBjYW4gY2hhbmdlIGdmcF9tYXNrICovXG4zNzg2Olx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3NfY21hKGdmcF90IGdmcF9tYXNrKVxuMzc4NzpcdHtcbjM3ODg6XHQjaWZkZWYgQ09ORklHX0NNQVxuMzc4OTpcdFx0aWYgKGdmcF9taWdyYXRldHlwZShnZnBfbWFzaykgPT0gTUlHUkFURV9NT1ZBQkxFKVxuMzc5MDpcdFx0XHRyZXR1cm4gQUxMT0NfQ01BO1xuMzc5MTpcdCNlbmRpZlxuMzc5MjpcdFx0cmV0dXJuIEFMTE9DX0RFRkFVTFQ7XG4zNzkzOlx0fVxuMzc5NDpcdFxuMzc5NTpcdC8qXG4zNzk2Olx0ICogZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdCBnb2VzIHRocm91Z2ggdGhlIHpvbmVsaXN0IHRyeWluZyB0byBhbGxvY2F0ZVxuMzc5NzpcdCAqIGEgcGFnZS5cbjM3OTg6XHQgKi9cbjM3OTk6XHRzdGF0aWMgc3RydWN0IHBhZ2UgKlxuMzgwMDpcdGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwgaW50IGFsbG9jX2ZsYWdzLFxuMzgwMTpcdFx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYylcbjM4MDI6XHR7XG4zODAzOlx0XHRzdHJ1Y3Qgem9uZXJlZiAqejtcbjM4MDQ6XHRcdHN0cnVjdCB6b25lICp6b25lO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjY1MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDc1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRvaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZyB3aXRoIGBQRl9NRU1BTExPQ19QSU5gLCB3aGljaCBsb29rcyBsaWtlIGl0IGFmZmVjdHMgdGhlIGBnZnBfbWlncmF0ZXR5cGVgIHRocm91Z2ggdGhlIGdmcCBtYXNrLiBBbmQgaGV5LCBpdCYjMzk7cyBhbHNvIHR3ZWFraW5nIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAhIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHNuaXBwZXQgaW52b2x2aW5nIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgYW5kIHRoZSB6b25lIGl0ZXJhdGlvbi4gVGhpcyBpcyBhbGwgaW4gYG1tL3BhZ2VfYWxsb2MuY2AsIHNvIHdlIGFyZSB0YWxraW5nIGFib3V0IGEgKmNvcmUgc3Vic3lzdGVtKiBoZXJlOiBtZW1vcnkgbWFuYWdlbWVudC4KClJpZ2h0LCBzbyBhY2NvcmRpbmcgdG8gdGhlIHRyaWFnZSBndWlkZWxpbmVzLCB3ZSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHdhcnJhbnRzIGZ1enppbmcuIExldCYjMzk7cyBzZWUuLi4gdGhlIGNvcmUgdHJpYWdlIHBoaWxvc29waHkgcHJpb3JpdGl6ZXMgcmVhY2hhYmlsaXR5LCBhbmQgd2Ugb25seSAqYXZvaWQqIGZ1enppbmcgZm9yIHN0cmljdGx5IHVucmVhY2hhYmxlIGNvZGUuIEFsc28sIHJlZmFjdG9yaW5nIGFuZCBjbGVhbnVwcyB3aGljaCBhcmUgcmVhY2hhYmxlIHNob3VsZCBiZSBjb25zaWRlcmVkLiBOb3csIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBhcmUgcHJldHR5IGNsZWFyOiBub24ta2VybmVsIHN0dWZmLCB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgb3IgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgdGhhdCBkb2VzbiYjMzk7dCBhcHBseS4gVGhpcyBwYXRjaCBkZWZpbml0ZWx5IGRvZXNuJiMzOTt0IGZhbGwgaW50byBhbnkgb2YgdGhvc2UgY2F0ZWdvcmllcy4gSXQmIzM5O3MgbW9kaWZ5aW5nIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgd2hpY2ggaXMgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgYW5kIGlzIGEgY29yZSBzdWJzeXN0ZW0gYW5kIHJlYWNoYWJsZSwgc28gaXQmIzM5O3MgYSBydW50aW1lIGJlaGF2aW9yIGNoYW5nZSB0aGF0IGNvdWxkIGRlZmluaXRlbHkgYmUgdHJpZ2dlcmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGluIG1lbW9yeSBtYW5hZ2VtZW50LgoKVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBNVVNUIGJlIGB0cnVlYC4gTm8gcXVlc3Rpb24gYWJvdXQgdGhhdC4KCk5vdywgd2UgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpY3MuIERvZXMgdGhpcyBtb2RpZmljYXRpb24gaGF2ZSBhbnkgc3BlY2lmaWMgYENPTkZJR19gIHJlcXVpcmVtZW50cz8gV2UgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGBFbmFibGVDb25maWdzYC4gQW5kIGFyZSB0aGVyZSBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0byBmb2N1cyBmdXp6aW5nIG9uLCBmb3IgYEZvY3VzU3ltYm9sc2A/IExldCYjMzk7cyBjaGVjayBgbW0vcGFnZV9hbGxvYy5jYCB0byBzZWUgaWYgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyB1bmRlciBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIGxpa2UgI2lmZGVmcy4gSSYjMzk7bGwgZm9jdXMgYXJvdW5kIGxpbmUgNTE2MC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUxNTA6XHQgKiBOb3RlIHRoYXQgb25seSB0aGUgZWxlbWVudHMgaW4gQHBhZ2VfYXJyYXkgdGhhdCB3ZXJlIGNsZWFyZWQgdG8gJU5VTEwgb25cbjUxNTE6XHQgKiBlbnRyeSBhcmUgcG9wdWxhdGVkIHdpdGggbmV3bHkgYWxsb2NhdGVkIHBhZ2VzLiBAbnJfcGFnZXMgaXMgdGhlIG1heGltdW1cbjUxNTI6XHQgKiBudW1iZXIgb2YgcGFnZXMgdGhhdCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgYXJyYXkuXG41MTUzOlx0ICpcbjUxNTQ6XHQgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gQHBhZ2VfYXJyYXksIGluY2x1ZGluZyBvbmVzIGFscmVhZHlcbjUxNTU6XHQgKiBhbGxvY2F0ZWQgb24gZW50cnkuICBUaGlzIGNhbiBiZSBsZXNzIHRoYW4gdGhlIG51bWJlciByZXF1ZXN0ZWQgaW4gQG5yX3BhZ2VzLFxuNTE1NjpcdCAqIGJ1dCBhbGwgZW1wdHkgc2xvdHMgYXJlIGZpbGxlZCBmcm9tIHRoZSBiZWdpbm5pbmcuICBJLmUuLCBpZiBhbGwgc2xvdHMgaW5cbjUxNTc6XHQgKiBAcGFnZV9hcnJheSB3ZXJlIHNldCB0byAlTlVMTCBvbiBlbnRyeSwgdGhlIHNsb3RzIGZyb20gMCB0byB0aGUgcmV0dXJuIHZhbHVlXG41MTU4Olx0ICogLSAxIHdpbGwgYmUgZmlsbGVkLlxuNTE1OTpcdCAqL1xuNTE2MDpcdHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbjUxNjE6XHRcdFx0XHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxuNTE2MjpcdFx0XHRcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcbjUxNjM6XHR7XG41MTY0Olx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjUxNjU6XHRcdHN0cnVjdCB6b25lICp6b25lO1xuNTE2NjpcdFx0c3RydWN0IHpvbmVyZWYgKno7XG41MTY3Olx0XHRzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwO1xuNTE2ODpcdFx0c3RydWN0IGxpc3RfaGVhZCAqcGNwX2xpc3Q7XG41MTY5Olx0XHRzdHJ1Y3QgYWxsb2NfY29udGV4dCBhYztcbjUxNzA6XHRcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncyA9IEFMTE9DX1dNQVJLX0xPVztcbjUxNzE6XHRcdGludCBucl9wb3B1bGF0ZWQgPSAwLCBucl9hY2NvdW50ID0gMDtcbjUxNzI6XHRcbjUxNzM6XHRcdC8qXG41MTc0Olx0XHQgKiBTa2lwIHBvcHVsYXRlZCBhcnJheSBlbGVtZW50cyB0byBkZXRlcm1pbmUgaWYgYW55IHBhZ2VzIG5lZWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzMDUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMTgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGZvciBGdXp6aW5nIEZvY3VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gcXVpY2tseSBhc3N1bWUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyBhIHN0YW5kYXJkLCB1bmNvbmRpdGlvbmFsbHkgY29tcGlsZWQgZnVuY3Rpb24sIGJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgc3RhcnRlZCBieSBjaGVja2luZyBmb3IgcmVsZXZhbnQgY29uZmlncyBsaWtlIGBhbGxvY19mbGFnc19jbWFgLCBgY3VycmVudF9nZnBfY29udGV4dGAsIGFuZCBgYWxsb2NfcGFnZXNfYnVsa2AsIGJ1dCByZW1lbWJlcmVkIHRoZSBpbnN0cnVjdGlvbnM6IGluc3BlY3QgS2NvbmZpZyBmaWxlcywgY2hlY2sgYGRlcGVuZHMgb25gIGxpbmVzLCBhbmQgc3RyaXAgdGhlIGBDT05GSUdfYCBwcmVmaXguIGBDT05GSUdfQ01BYCBpcyByZWxhdGVkLCBidXQgdGhlIGluc3RydWN0aW9ucyBzYXkgaXQgaXNuJiMzOTt0IHJlcXVpcmVkIHRvIGNvbXBpbGUgb3IgcnVuLiBUaGUgZnVuY3Rpb24gaXRzZWxmIGFwcGVhcnMgdG8gYmUgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gTm8gc3BlY2lhbCBjb25maWdzIHJlcXVpcmVkLiBUaGF0JiMzOTtzIGdvb2QuCgpIb3dldmVyLCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBjYWxsIHNpdGVzIGlzIG1hbmRhdG9yeS4gSSB0aGVuIHBhdXNlZCBhbmQgdGhvdWdodCBhYm91dCB3aGF0IHRoZSBmdXp6aW5nIGluc3RydWN0aW9ucyBzYXkuICYjMzQ7QXZvaWQgdWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzJiMzNDsgaXMgdGhlIGtleS4gTm8gZ2VuZXJpYyBhbGxvY2F0b3JzLiBTbywgaXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBhIGdlbmVyaWMgYWxsb2NhdG9yPyBJIGhhZCB0byB0aGluayBhYm91dCB0aGF0LCBhbmQgdGhlbiByZW1lbWJlciB0aGUgZGVmaW5pdGlvbiBmcm9tIHRoZSBpbnN0cnVjdGlvbnM6ICYjMzQ7ZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzLi4uJiMzNDsuIE9rYXksIHRoYXQmIzM5O3Mgbm90IHRydWUhIEkgaGF2ZSB0byBmaW5kIG91dCB3aGljaCBwcm9ncmFtcyBjYWxsIGl0LgoKQSBxdWljayBgZ3JlcGAgcmV2ZWFsZWQgdGhhdCB0aGlzIGZ1bmN0aW9uIGhhcyBhICpsaW1pdGVkKiBudW1iZXIgb2YgY2FsbGVyczogYGJsa19jcnlwdG9fYWxsb2NfZW5jX2Jpb2AsIGBmd19pc29fYnVmZmVyX2FsbG9jYCwgYGFyX2NvbnRleHRfaW5pdGAsIGBhbGxvY19wcml2YXRlX3BhZ2VzYCwgYG1seDV2Zl9hZGRfcGFnZXNgLCBgdmlydGlvdmZfYWRkX21pZ3JhdGlvbl9wYWdlc2AsIGBidHJmc19hbGxvY19wYWdlX2FycmF5YCwgYHpfZXJvZnNfZ2J1Zl9ncm93c2l6ZWAsIGBmdXNlX3JlYWRkaXJfYWxsb2NfYnVmYCwgYGFsbG9jX2luaXRfZGlyX2RlbGVnYCwgYGNvcHlfc3BsaWNlX3JlYWRgLCBgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzYCwgYGFyZW5hX2FsbG9jX3BhZ2VzYCwgYHZtX21vZHVsZV90YWdzX3BvcHVsYXRlYCwgYF9fX2FsbG9jX3BhZ2VzX2J1bGtgLCB0aGVuIGEgbnVtYmVyIG9mIG1lbXBvbGljeS1yZWxhdGVkIGZ1bmN0aW9ucywgYHZtX2FyZWFfYWxsb2NfcGFnZXNgLCBgX19wYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc19zbG93YCwgYW5kIGBzdmNfZmlsbF9wYWdlc2AuIEl0JiMzOTtzIGNsZWFybHkgKm5vdCogY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBrZXJuZWwuCgpOb3csIGEgY3JpdGljYWwgcG9pbnQ6IGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCBjYWxscyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBhbmQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2ZgLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhpcyBmdW5jdGlvbnMgaW4gYG1tL3ZtYWxsb2MuY2AuIEkgc2hvdWxkIGluc3BlY3QgdGhhdCBjb2RlIGFyb3VuZCBsaW5lIDM3NDAuIEkga25vdyB3aGF0IHRvIGRvIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzczMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNzMwOlx0XHRcdFx0LypcbjM3MzE6XHRcdFx0XHQgKiBBIG1heGltdW0gYWxsb3dlZCByZXF1ZXN0IGlzIGhhcmQtY29kZWQgYW5kIGlzIDEwMFxuMzczMjpcdFx0XHRcdCAqIHBhZ2VzIHBlciBjYWxsLiBUaGF0IGlzIGRvbmUgaW4gb3JkZXIgdG8gcHJldmVudCBhXG4zNzMzOlx0XHRcdFx0ICogbG9uZyBwcmVlbXB0aW9uIG9mZiBzY2VuYXJpbyBpbiB0aGUgYnVsay1hbGxvY2F0b3JcbjM3MzQ6XHRcdFx0XHQgKiBzbyB0aGUgcmFuZ2UgaXMgWzE6MTAwXS5cbjM3MzU6XHRcdFx0XHQgKi9cbjM3MzY6XHRcdFx0XHRucl9wYWdlc19yZXF1ZXN0ID0gbWluKDEwMFVMLCBucl9wYWdlcyAtIG5yX2FsbG9jYXRlZCk7XG4zNzM3Olx0XG4zNzM4Olx0XHRcdFx0LyogbWVtb3J5IGFsbG9jYXRpb24gc2hvdWxkIGNvbnNpZGVyIG1lbXBvbGljeSwgd2UgY2FuJiMzOTt0XG4zNzM5Olx0XHRcdFx0ICogd3JvbmdseSB1c2UgbmVhcmVzdCBub2RlIHdoZW4gbmlkID09IE5VTUFfTk9fTk9ERSxcbjM3NDA6XHRcdFx0XHQgKiBvdGhlcndpc2UgbWVtb3J5IG1heSBiZSBhbGxvY2F0ZWQgaW4gb25seSBvbmUgbm9kZSxcbjM3NDE6XHRcdFx0XHQgKiBidXQgbWVtcG9saWN5IHdhbnRzIHRvIGFsbG9jIG1lbW9yeSBieSBpbnRlcmxlYXZpbmcuXG4zNzQyOlx0XHRcdFx0ICovXG4zNzQzOlx0XHRcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFx1MDAyNlx1MDAyNiBuaWQgPT0gTlVNQV9OT19OT0RFKVxuMzc0NDpcdFx0XHRcdFx0bnIgPSBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwLFxuMzc0NTpcdFx0XHRcdFx0XHRcdFx0bnJfcGFnZXNfcmVxdWVzdCxcbjM3NDY6XHRcdFx0XHRcdFx0XHRcdHBhZ2VzICYjNDM7IG5yX2FsbG9jYXRlZCk7XG4zNzQ3Olx0XHRcdFx0ZWxzZVxuMzc0ODpcdFx0XHRcdFx0bnIgPSBhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcCwgbmlkLFxuMzc0OTpcdFx0XHRcdFx0XHRcdFx0bnJfcGFnZXNfcmVxdWVzdCxcbjM3NTA6XHRcdFx0XHRcdFx0XHRcdHBhZ2VzICYjNDM7IG5yX2FsbG9jYXRlZCk7XG4zNzUxOlx0XG4zNzUyOlx0XHRcdFx0Zm9yIChpID0gbnJfYWxsb2NhdGVkOyBpIFx1MDAzYyBucl9hbGxvY2F0ZWQgJiM0MzsgbnI7IGkmIzQzOyYjNDM7KVxuMzc1MzpcdFx0XHRcdFx0bW9kX2xydXZlY19wYWdlX3N0YXRlKHBhZ2VzW2ldLCBOUl9WTUFMTE9DLCAxKTtcbjM3NTQ6XHRcbjM3NTU6XHRcdFx0XHRucl9hbGxvY2F0ZWQgJiM0Mzs9IG5yO1xuMzc1NjpcdFxuMzc1NzpcdFx0XHRcdC8qXG4zNzU4Olx0XHRcdFx0ICogSWYgemVybyBvciBwYWdlcyB3ZXJlIG9idGFpbmVkIHBhcnRseSxcbjM3NTk6XHRcdFx0XHQgKiBmYWxsYmFjayB0byBhIHNpbmdsZSBwYWdlIGFsbG9jYXRvci5cbjM3NjA6XHRcdFx0XHQgKi9cbjM3NjE6XHRcdFx0XHRpZiAobnIgIT0gbnJfcGFnZXNfcmVxdWVzdClcbjM3NjI6XHRcdFx0XHRcdGJyZWFrO1xuMzc2MzpcdFx0XHR9XG4zNzY0Olx0XHR9XG4zNzY1Olx0XG4zNzY2Olx0XHQvKiBIaWdoLW9yZGVyIHBhZ2VzIG9yIGZhbGxiYWNrIHBhdGggaWYgXCYjMzQ7YnVsa1wmIzM0OyBmYWlscy4gKi9cbjM3Njc6XHRcdHdoaWxlIChucl9hbGxvY2F0ZWQgXHUwMDNjIG5yX3BhZ2VzKSB7XG4zNzY4Olx0XHRcdGlmICghKGdmcCBcdTAwMjYgX19HRlBfTk9GQUlMKSBcdTAwMjZcdTAwMjYgZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4zNzY5Olx0XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzIwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBNZW1vcnkgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBgdm1fYXJlYV9hbGxvY19wYWdlc2AgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyB0aGUgcGFnZSBhbGxvY2F0aW9uLCBjYWxsaW5nIGVpdGhlciBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBvciBgYWxsb2NfcGFnZXNfYnVsa19ub2RlX25vcHJvZmAg4oCTIGdvdCBpdC4gQnV0IGhvbGQgb24sIHNvbWV0aGluZyYjMzk7cyBuYWdnaW5nIGF0IG1lLiBEb2VzICpldmVyeSogc2luZ2xlIGB2bWFsbG9jYCBjYWxsIHVsdGltYXRlbHkgZ28gdGhyb3VnaCBgdm1fYXJlYV9hbGxvY19wYWdlc2A/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcXVlc3Rpb24gYWJvdXQgaG93IHRoZSBgdm1hbGxvY2AgcGF0aCBpcyBzdHJ1Y3R1cmVkLCBhbmQgaXQgaGFzIGltcGxpY2F0aW9ucyBmb3IgdW5kZXJzdGFuZGluZyBtZW1vcnkgYWxsb2NhdGlvbiBvdmVyaGVhZCwgZXNwZWNpYWxseSB3aXRoaW4gdGhlIHZtYWxsb2MgYXJlbmEuIExldCBtZSBxdWlja2x5IHRyYWNlIHRoZSBjYWxsZXJzIG9mIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYC4gVGhpcyB3aWxsIHNob3cgbWUgdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbnMgdGhhdCByZWx5IG9uIHRoaXMgdW5kZXJseWluZyBhbGxvY2F0b3IuIFRoYXQgaXMgdGhlIGZpcnN0IHN0ZXAhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtX2FyZWFfYWxsb2NfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jPTM2NzU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nXG5tbS92bWFsbG9jLmM6MzY3Njp2bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcbm1tL3ZtYWxsb2MuYy0zNjc3LVx0XHR1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZXMpXG4tLVxubW0vdm1hbGxvYy5jPTM4NzM9c3RhdGljIHZvaWQgKl9fdm1hbGxvY19hcmVhX25vZGUoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vdm1hbGxvYy5jLTM5MjEtXHQgKi9cbm1tL3ZtYWxsb2MuYzozOTIyOlx0YXJlYS1cdTAwM2Vucl9wYWdlcyA9IHZtX2FyZWFfYWxsb2NfcGFnZXMoXG5tbS92bWFsbG9jLmMtMzkyMy1cdFx0XHR2bWFsbG9jX2dmcF9hZGp1c3QoZ2ZwX21hc2ssIHBhZ2Vfb3JkZXIpLCBub2RlLFxuLS1cbm1tL3ZtYWxsb2MuYy0zOTMxLVx0XHQvKlxubW0vdm1hbGxvYy5jOjM5MzI6XHRcdCAqIHZtX2FyZWFfYWxsb2NfcGFnZXMoKSBjYW4gZmFpbCBkdWUgdG8gaW5zdWZmaWNpZW50IG1lbW9yeSBidXRcbm1tL3ZtYWxsb2MuYy0zOTMzLVx0XHQgKiBhbHNvOi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyNzcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMjcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgYSBGdW5jdGlvbiBmb3IgRnV6emluZyBGb2N1cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIEkgc2hvdWxkIGluY2x1ZGUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpbiB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgdG8gZm9jdXMgdGhlIGZ1enplciBvbi4gRmlyc3QsIEkgbm90aWNlZCB0aGF0IGBfX3ZtYWxsb2NfYXJlYV9ub2RlYCBjYWxscyBgdm1fYXJlYV9hbGxvY19wYWdlc2AsIGFuZCBgdm1hbGxvY2AgY2FsbHMgYF9fdm1hbGxvY19hcmVhX25vZGVgLiBUaGVuLCB0aGlzIHRob3VnaHQgcG9wcGVkIHVwOiBJcyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGl0c2VsZiBhIGNvbW1vbiwgdWJpcXVpdG91cyBmdW5jdGlvbj8gVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiB0aGUgcXVlc3Rpb24uCgpUaGUgaW5zdHJ1Y3Rpb25zIGFyZSB2ZXJ5IGNsZWFyOiBhdm9pZCBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkIGV2ZXJ5d2hlcmUsIGJlY2F1c2UgbGlzdGluZyB0aGVtIGRpbHV0ZXMgdGhlIGZ1enppbmcgZWZmb3J0LiBJbnN0ZWFkLCBJIG5lZWQgdG8gJiMzNDt0YXJnZXQgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnlwb2ludHMmIzM0Oy4gV2FpdCBhIG1pbnV0ZeKApiB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gKmlzKiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgISBUaGUgcGF0Y2ggY2xlYXJseSBzaG93cyB0aGUgY2hhbmdlIGlzIGRpcmVjdGx5IHRvIHRoYXQgZnVuY3Rpb24uCgpUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBoaWdobGlnaHQgdGhhdCB0aGUgZnVuY3Rpb25zIHNob3VsZCBiZSAmIzM0O3Rob3NlIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cyBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4mIzM0OyBTbywgc2luY2UgdGhlIGFsdGVyZWQgbG9naWMgKmlzKiB3aXRoaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCwgbGlzdGluZyBpdCBzZWVtcyBsb2dpY2FsLgoKVGhlIGNvbmNlcm4gd2l0aCAmIzM0O3ViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRocyYjMzQ7IGlzIHRoYXQgbGlzdGluZyB0aG9zZSBmdW5jdGlvbnMgd2lsbCBtYWtlIHRoZSBmdXp6ZXIgZmxhZyBuZWFybHkgZXZlcnkgdGVzdCBhcyByZWxldmFudCwgd2hpY2ggaXMgdXNlbGVzcy4gRm9yIGV4YW1wbGUsIG1vZGlmeWluZyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gaW4gYSBoZWFkZXIsIG9yIGNoYW5naW5nIGBfX2FsbG9jX3BhZ2VzYCBvciBga2ZyZWVgIHdvdWxkIGJlIGEgZGlzYXN0ZXIsIHNpbmNlIHRob3NlIGFyZSBjYWxsZWQgY29uc3RhbnRseS4gSWYgSSB3ZXJlIHRvIGxpc3QgdGhlbSwgZXZlcnkgc2luZ2xlIHRlc3QgY2FzZSB3b3VsZCBtYXRjaC4KClNvLCBpcyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIHRydWx5IHViaXF1aXRvdXM/IEl0JiMzOTtzIHRoZSBidWxrIHBhZ2UgYWxsb2NhdG9yLCBidXQgaXMgaXQgKmV2ZXJ5d2hlcmUqPyBgdm1hbGxvY2AgY2FsbHMgYHZtX2FyZWFfYWxsb2NfcGFnZXNgLCBidXQgYHZtYWxsb2NgIGlzbiYjMzk7dCBjYWxsZWQgbmVhcmx5IGFzIG9mdGVuIGFzIGBrbWFsbG9jYCBvciBgX19hbGxvY19wYWdlc2AuIEFuZCB3aGF0IGFib3V0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXRzZWxmPyBJZiBJIGRvbiYjMzk7dCBsaXN0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIHdoYXQgZWxzZSBjb3VsZCBJIGxpc3Q/IFRoZSBpbnN0cnVjdGlvbnMgYXJlIHF1aXRlIGNsZWFyLgoKVGhlIGtleSBpcyB0aGF0IHRoZSBmZWF0dXJlIGxvZ2ljIGJlaW5nIGFsdGVyZWQgaXMgKndpdGhpbiogYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4gSXQmIzM5O3Mgbm90IGxpa2UgYSBnZW5lcmljIG1lbW9yeSBhbGxvY2F0b3IgZnVuY3Rpb24uIEkgaGF2ZSB0byB0aGluayBhYm91dCB3aGF0IHRoZSBmdXp6ZXIgd2lsbCBiZSBmb2N1c2luZyBvbjogaWYgdGhlIHBhdGNoIGNoYW5nZXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCwgdGhlbiBmb2N1c2luZyB0aGUgZnV6emVyIG9uIHRoYXQgZnVuY3Rpb24gd2lsbCBiZSB0aGUgYmVzdCB3YXkgdG8gZGV0ZXJtaW5lIGlmIHRoYXQgY2hhbmdlIGJyZWFrcyBhbnl0aGluZy4KClNvLCBkb2VzIGV2ZXJ5IHByb2dyYW0gY2FsbCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgPyBObyEgSXQmIzM5O3MgY2FsbGVkIGJ5IHNwZWNpZmljIHN1YnN5c3RlbXMgdGhhdCB1c2UgYnVsayBhbGxvY2F0aW9uOiB2bWFsbG9jLCBzcGxpY2UsIHBhZ2VfcG9vbCwgYnRyZnMsIGVyb2ZzLCBmdXNlLCBpb191cmluZywgYW5kIGJwZiBhcmVuYS4gSXQmIzM5O3Mgbm90IGFzIGJyb2FkbHkgdXNlZCBhcyBgX19hbGxvY19wYWdlc19ub3Byb2ZgLCBmb3IgZXhhbXBsZS4KCldhaXQsIHdoYXQgYWJvdXQgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmA/IEkgbmVlZCB0byBjbGFyaWZ5IGlmIHRoZXJlIGlzIGFueSBvdmVybGFwIGluIGJlaGF2aW9yLiBJJiMzOTttIGNoZWNraW5nIHRoZSBzb3VyY2UgdG8gY29tcGFyZSBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIHdpdGggYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAuIEkmIzM5O20gdmVyaWZ5aW5nIHRoaXMgYmVjYXVzZSB0aGUgY29kZSBpcyBleHBvcnRlZCB1c2luZyBgRVhQT1JUX1NZTUJPTF9HUEwoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YpYC4gTm93LCBJJiMzOTttIGdvaW5nIHRvIGRldGVybWluZSBpZiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIGEgcHJlY2lzZSBzeW1ib2wgaW4gYHZtbGludXhgIG9yIGBTeXN0ZW0ubWFwYC4gTGV0IG1lIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBzeW1ib2xzIG9yIGlmIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgdGhlIGV4YWN0IHN5bWJvbC4gQWxzbywgSSYjMzk7bGwgc2VhcmNoIGZvciBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYCB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19wYWdlc19idWxrX25vcHJvZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYz0yNTkxPXN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG4tLVxubW0vbWVtcG9saWN5LmMtMjYwNy1cdFx0aWYgKGRlbHRhKSB7XG5tbS9tZW1wb2xpY3kuYzoyNjA4Olx0XHRcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCxcbm1tL21lbXBvbGljeS5jLTI2MDktXHRcdFx0XHRcdGludGVybGVhdmVfbm9kZXMocG9sKSwgTlVMTCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNjEzLVx0XHR9IGVsc2Uge1xubW0vbWVtcG9saWN5LmM6MjYxNDpcdFx0XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjE1LVx0XHRcdFx0XHRpbnRlcmxlYXZlX25vZGVzKHBvbCksIE5VTEwsXG4tLVxubW0vbWVtcG9saWN5LmM9Mjc0ND1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcF90IGdmcCwgaW50IG5pZCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzUzLVxubW0vbWVtcG9saWN5LmM6Mjc1NDpcdG5yX2FsbG9jYXRlZCAgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihwcmVmZXJyZWRfZ2ZwLCBuaWQsIFx1MDAyNnBvbC1cdTAwM2Vub2Rlcyxcbm1tL21lbXBvbGljeS5jLTI3NTUtXHRcdFx0XHRcdCAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzU3LVx0aWYgKG5yX2FsbG9jYXRlZCBcdTAwM2MgbnJfcGFnZXMpXG5tbS9tZW1wb2xpY3kuYzoyNzU4Olx0XHRucl9hbGxvY2F0ZWQgJiM0Mzs9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCwgbnVtYV9ub2RlX2lkKCksIE5VTEwsXG5tbS9tZW1wb2xpY3kuYy0yNzU5LVx0XHRcdFx0bnJfcGFnZXMgLSBucl9hbGxvY2F0ZWQsXG4tLVxubW0vbWVtcG9saWN5LmM9Mjc3MD11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXG4tLVxubW0vbWVtcG9saWN5LmMtMjc5My1cdG5vZGVtYXNrID0gcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sLCBOT19JTlRFUkxFQVZFX0lOREVYLCBcdTAwMjZuaWQpO1xubW0vbWVtcG9saWN5LmM6Mjc5NDpcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgbm9kZW1hc2ssXG5tbS9tZW1wb2xpY3kuYy0yNzk1LVx0XHRcdFx0ICAgICAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTA5MT1zdGF0aWMgaW5saW5lIGJvb2wgcHJlcGFyZV9hbGxvY19wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MTU5LSAqL1xubW0vcGFnZV9hbGxvYy5jOjUxNjA6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxubW0vcGFnZV9hbGxvYy5jLTUxNjEtXHRcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTMwMC19XG5tbS9wYWdlX2FsbG9jLmM6NTMwMTpFWFBPUlRfU1lNQk9MX0dQTChhbGxvY19wYWdlc19idWxrX25vcHJvZik7XG5tbS9wYWdlX2FsbG9jLmMtNTMwMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxMjEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMzU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIGBjdXJyZW50X2dmcF9jb250ZXh0YCBpbiBCdWxrIFBhZ2UgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZnVuY3Rpb24uIEkgaW5pdGlhbGx5IHRob3VnaHQgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAgbWlnaHQgYmUgcmVsZXZhbnQsIGJ1dCBpdCBzZWVtcyB0aGUgY3J1Y2lhbCBjaGFuZ2UgaXMgKndpdGhpbiogYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpdHNlbGYuIFRoZSBxdWVzdGlvbiBpcywgd2h5IHdhcyBgY3VycmVudF9nZnBfY29udGV4dChnZnApYCBhZGRlZCBoZXJlPwoKVGhlIGtleSByZWFsaXphdGlvbiBpcyB0aGF0IGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIGNhbGxzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgKG9yIGl0cyB2YXJpYXRpb25zIHZpYSBpbnRlcmxlYXZlIGZ1bmN0aW9ucyksIG1lYW5pbmcgQUxMIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucyB1bHRpbWF0ZWx5IGdvIHRocm91Z2ggYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4KCk5vdywgbG9va2luZyBhdCB0aGUgY29kZSwgaXQmIzM5O3MgY2xlYXIgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIGlzIGFwcGxpZWQgKmJlZm9yZSogYHByZXBhcmVfYWxsb2NfcGFnZXNgLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHByZXBhcmVfYWxsb2NfcGFnZXNgIGRvZXMgaW4gdGhlIGNvbnRleHQgb2YgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4KCmBwcmVwYXJlX2FsbG9jX3BhZ2VzYCBzZXRzIGBhYy0mZ3Q7aGlnaGVzdF96b25laWR4YCBhbmQgZXZlbnR1YWxseSwgdmlhIGBhbGxvY19mbGFnc19jbWEoZ2ZwX21hc2spYCwgaXQgZGVjaWRlcyBpZiBgQUxMT0NfQ01BYCBpcyBzZXQgaW4gYGFsbG9jX2ZsYWdzYC4gSGVyZSYjMzk7cyB0aGUgY3JpdGljYWwgYml0OiBpZiBgUEZfTUVNQUxMT0NfUElOYCBpcyBzZXQgaW4gdGhlIGN1cnJlbnQgdGFzayYjMzk7cyBmbGFncyAobWVhbmluZyB0aGUgbWVtb3J5IGlzIHBpbm5lZCBhbmQgc2hvdWxkbiYjMzk7dCBiZSBtb3ZlZCksIGBjdXJyZW50X2dmcF9jb250ZXh0YCAqc3RyaXBzKiBgX19HRlBfTU9WQUJMRWAuCgpXaXRob3V0IGBfX0dGUF9NT1ZBQkxFYCwgYGdmcF9taWdyYXRldHlwZShnZnBfbWFzaylgIGlzIE5PVCBgTUlHUkFURV9NT1ZBQkxFYCwgYW5kIHRoZXJlZm9yZSBgQUxMT0NfQ01BYCBpc24mIzM5O3Qgc2V0LiBUaGlzIGlzIGEgdmVyeSBpbXBvcnRhbnQgc2FmZXR5IGNoZWNrLiBQcmV2aW91c2x5LCAqd2l0aG91dCogdGhpcyBgY3VycmVudF9nZnBfY29udGV4dGAgY2FsbCwgaWYgYSBjYWxsZXIgcGFzc2VkIGBHRlBfSElHSFVTRVJfTU9WQUJMRWAsIHRoZW4gYGFsbG9jX2ZsYWdzYCB3b3VsZCBpbmNvcnJlY3RseSBnZXQgYEFMTE9DX0NNQWAgc2V0LiBUaGlzIHZpb2xhdGVzIHRoZSBgUEZfTUVNQUxMT0NfUElOYCBjb25zdHJhaW50IGJlY2F1c2UgcGlubmVkIHBhZ2VzICptdXN0IG5vdCogY29tZSBmcm9tIHRoZSBDTUEsIHdoaWNoIGJ5IGRlZmluaXRpb24gY29udGFpbnMgbWlncmF0YWJsZSBwYWdlcy4KCk5vdywgdG8gbWFrZSBzdXJlIEkgYW0gc2VlaW5nIHRoZSB3aG9sZSBwaWN0dXJlLCBJIHdpbGwgY2hlY2sgd2hhdCBlbHNlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZG9lcyBhZnRlciBjYWxsaW5nIGBwcmVwYXJlX2FsbG9jX3BhZ2VzYC4gSXQgc2VlbXMgd2UgYXJlIHVzaW5nIGBBTExPQ19XTUFSS19MT1dgIG9yIHRyeV9sb2NrcyBQQ1AsIGJ1dCB0aGVuIGBwcmVwYXJlX2FsbG9jX3BhZ2VzYCBpcyBjYWxsZWQsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBzZWVpbmcgZXZlcnl0aGluZy4KCk9rYXksIGxldCYjMzk7cyBsb29rIGFnYWluIGF0IGBtbS9wYWdlX2FsbG9jLmNgIGFuZCBtYWtlIHN1cmUgdGhlcmUgaXMgbm90aGluZyBlbHNlIEkgbmVlZCB0byBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MDkwOlx0XG41MDkxOlx0c3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbjUwOTI6XHRcdFx0aW50IHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrLFxuNTA5MzpcdFx0XHRzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGdmcF90ICphbGxvY19nZnAsXG41MDk0Olx0XHRcdHVuc2lnbmVkIGludCAqYWxsb2NfZmxhZ3MpXG41MDk1Olx0e1xuNTA5NjpcdFx0YWMtXHUwMDNlaGlnaGVzdF96b25laWR4ID0gZ2ZwX3pvbmUoZ2ZwX21hc2spO1xuNTA5NzpcdFx0YWMtXHUwMDNlem9uZWxpc3QgPSBub2RlX3pvbmVsaXN0KHByZWZlcnJlZF9uaWQsIGdmcF9tYXNrKTtcbjUwOTg6XHRcdGFjLVx1MDAzZW5vZGVtYXNrID0gbm9kZW1hc2s7XG41MDk5Olx0XHRhYy1cdTAwM2VtaWdyYXRldHlwZSA9IGdmcF9taWdyYXRldHlwZShnZnBfbWFzayk7XG41MTAwOlx0XG41MTAxOlx0XHRpZiAoY3B1c2V0c19lbmFibGVkKCkpIHtcbjUxMDI6XHRcdFx0KmFsbG9jX2dmcCB8PSBfX0dGUF9IQVJEV0FMTDtcbjUxMDM6XHRcdFx0LypcbjUxMDQ6XHRcdFx0ICogV2hlbiB3ZSBhcmUgaW4gdGhlIGludGVycnVwdCBjb250ZXh0LCBpdCBpcyBpcnJlbGV2YW50XG41MTA1Olx0XHRcdCAqIHRvIHRoZSBjdXJyZW50IHRhc2sgY29udGV4dC4gSXQgbWVhbnMgdGhhdCBhbnkgbm9kZSBvay5cbjUxMDY6XHRcdFx0ICovXG41MTA3Olx0XHRcdGlmIChpbl90YXNrKCkgXHUwMDI2XHUwMDI2ICFhYy1cdTAwM2Vub2RlbWFzaylcbjUxMDg6XHRcdFx0XHRhYy1cdTAwM2Vub2RlbWFzayA9IFx1MDAyNmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcbjUxMDk6XHRcdFx0ZWxzZVxuNTExMDpcdFx0XHRcdCphbGxvY19mbGFncyB8PSBBTExPQ19DUFVTRVQ7XG41MTExOlx0XHR9XG41MTEyOlx0XG41MTEzOlx0XHRtaWdodF9hbGxvYyhnZnBfbWFzayk7XG41MTE0Olx0XG41MTE1Olx0XHQvKlxuNTExNjpcdFx0ICogRG9uJiMzOTt0IGludm9rZSBzaG91bGRfZmFpbCBsb2dpYywgc2luY2UgaXQgbWF5IGNhbGxcbjUxMTc6XHRcdCAqIGdldF9yYW5kb21fdTMyKCkgYW5kIHByaW50aygpIHdoaWNoIG5lZWQgdG8gc3Bpbl9sb2NrLlxuNTExODpcdFx0ICovXG41MTE5Olx0XHRpZiAoISgqYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX05PTE9DSykgXHUwMDI2XHUwMDI2XG41MTIwOlx0XHQgICAgc2hvdWxkX2ZhaWxfYWxsb2NfcGFnZShnZnBfbWFzaywgb3JkZXIpKVxuNTEyMTpcdFx0XHRyZXR1cm4gZmFsc2U7XG41MTIyOlx0XG41MTIzOlx0XHQqYWxsb2NfZmxhZ3MgfD0gYWxsb2NfZmxhZ3NfY21hKGdmcF9tYXNrKTtcbjUxMjQ6XHRcbjUxMjU6XHRcdC8qIERpcnR5IHpvbmUgYmFsYW5jaW5nIG9ubHkgZG9uZSBpbiB0aGUgZmFzdCBwYXRoICovXG41MTI2Olx0XHRhYy1cdTAwM2VzcHJlYWRfZGlydHlfcGFnZXMgPSAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX1dSSVRFKTtcbjUxMjc6XHRcbjUxMjg6XHRcdC8qXG41MTI5Olx0XHQgKiBUaGUgcHJlZmVycmVkIHpvbmUgaXMgdXNlZCBmb3Igc3RhdGlzdGljcyBidXQgY3J1Y2lhbGx5IGl0IGlzXG41MTMwOlx0XHQgKiBhbHNvIHVzZWQgYXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgem9uZWxpc3QgaXRlcmF0b3IuIEl0XG41MTMxOlx0XHQgKiBtYXkgZ2V0IHJlc2V0IGZvciBhbGxvY2F0aW9ucyB0aGF0IGlnbm9yZSBtZW1vcnkgcG9saWNpZXMuXG41MTMyOlx0XHQgKi9cbjUxMzM6XHRcdGFjLVx1MDAzZXByZWZlcnJlZF96b25lcmVmID0gZmlyc3Rfem9uZXNfem9uZWxpc3QoYWMtXHUwMDNlem9uZWxpc3QsXG41MTM0Olx0XHRcdFx0XHRcdGFjLVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCwgYWMtXHUwMDNlbm9kZW1hc2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjg0MQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIERlZXAgaW50byBBbGxvY2F0aW9uIEJlaGF2aW9yKioKClJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lIDUxMTMg4oCTIGBtaWdodF9hbGxvYyhnZnBfbWFzayk7YC4gVGhhdCBmdW5jdGlvbiBjYWxsLCBgbWlnaHRfYWxsb2NgLCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEkga25vdyB0aGF0IGZ1bmN0aW9uJiMzOTtzIHB1cnBvc2UgaXMgdG8gYWN0IGFzIGEgaGludCB0byB0aGUga2VybmVsIGFib3V0IHdoZXRoZXIgYSBtZW1vcnkgYWxsb2NhdGlvbiAqbWlnaHQqIGhhcHBlbiBhdCBhIHNwZWNpZmljIHBvaW50IGluIHRoZSBjb2RlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtaW5kIGFib3V0IGV4YWN0bHkgd2hhdCBpbXBsaWNhdGlvbnMgdGhhdCBoYXMuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBgbWlnaHRfYWxsb2NgIGNhbGwgaXMgYmVpbmcgdXNlZCBjb3JyZWN0bHksIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGBnZnBfbWFza2AgcGFzc2VkIHRvIGl0LiBUaGlzIG1hc2sgZGljdGF0ZXMgdGhlIHR5cGUgb2YgYWxsb2NhdGlvbiBhbGxvd2VkOiB3aGV0aGVyIGl0IGNhbiBzbGVlcCwgd2hldGhlciBpdCBjYW4gYmUgZnJvbSBhIHNwZWNpZmljIE5VTUEgbm9kZSwgb3IgaWYgaXQmIzM5O3MgcmVzZXJ2ZWQgZm9yIGNlcnRhaW4gY29udGV4dHMuIFRoZSBjaG9pY2Ugb2YgYGdmcF9tYXNrYCBpcyBjcnVjaWFsLiBJcyBpdCB0aGUgcmlnaHQgb25lIGZvciB0aGlzIHBhcnQgb2YgdGhlIGtlcm5lbD8gSXMgdGhlcmUgYSByaXNrIG9mIGRlYWRsb2NrLCBvciBleGNlc3NpdmUgbGF0ZW5jeSwgaWYgYW4gYWxsb2NhdGlvbiAqZG9lcyogZW5kIHVwIGhhcHBlbmluZz8gSSYjMzk7bSBnb2luZyB0byBsb29rIGRlZXBlciBpbnRvIGBtaWdodF9hbGxvY2AgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHBvdGVudGlhbCBwaXRmYWxscyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdodF9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaD0yODc9c3RhdGljIGlubGluZSB2b2lkIG1lbWFsbG9jX3JldHJ5X3dhaXQoZ2ZwX3QgZ2ZwX2ZsYWdzKVxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0zMDYtLyoqXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6MzA3OiAqIG1pZ2h0X2FsbG9jIC0gTWFyayBwb3NzaWJsZSBhbGxvY2F0aW9uIHNpdGVzXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMzA4LSAqIEBnZnBfbWFzazogZ2ZwX3QgZmxhZ3MgdGhhdCB3b3VsZCBiZSB1c2VkIHRvIGFsbG9jYXRlXG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTMxMy0gKi9cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDozMTQ6c3RhdGljIGlubGluZSB2b2lkIG1pZ2h0X2FsbG9jKGdmcF90IGdmcF9tYXNrKVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTMxNS17XG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaD01ODk9c3RhdGljIGlubGluZSB2b2lkICp4YV9zdG9yZV9iaChzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyBpbmRleCxcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTU5My1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg6NTk0Olx0bWlnaHRfYWxsb2MoZ2ZwKTtcbmluY2x1ZGUvbGludXgveGFycmF5LmgtNTk1LVx0eGFfbG9ja19iaCh4YSk7XG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaD02MTY9c3RhdGljIGlubGluZSB2b2lkICp4YV9zdG9yZV9pcnEoc3RydWN0IHhhcnJheSAqeGEsIHVuc2lnbmVkIGxvbmcgaW5kZXgsXG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaC02MjAtXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjYyMTpcdG1pZ2h0X2FsbG9jKGdmcCk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTYyMi1cdHhhX2xvY2tfaXJxKHhhKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTY5Mj1zdGF0aWMgaW5saW5lIHZvaWQgKnhhX2NtcHhjaGcoc3RydWN0IHhhcnJheSAqeGEsIHVuc2lnbmVkIGxvbmcgaW5kZXgsXG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaC02OTYtXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjY5NzpcdG1pZ2h0X2FsbG9jKGdmcCk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTY5OC1cdHhhX2xvY2soeGEpO1xuLS1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg9NzIwPXN0YXRpYyBpbmxpbmUgdm9pZCAqeGFfY21weGNoZ19iaChzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyBpbmRleCxcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTcyNC1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg6NzI1Olx0bWlnaHRfYWxsb2MoZ2ZwKTtcbmluY2x1ZGUvbGludXgveGFycmF5LmgtNzI2LVx0eGFfbG9ja19iaCh4YSk7XG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaD03NDg9c3RhdGljIGlubGluZSB2b2lkICp4YV9jbXB4Y2hnX2lycShzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyBpbmRleCxcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTc1Mi1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg6NzUzOlx0bWlnaHRfYWxsb2MoZ2ZwKTtcbmluY2x1ZGUvbGludXgveGFycmF5LmgtNzU0LVx0eGFfbG9ja19pcnEoeGEpO1xuLS1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg9Nzc4PXN0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayB4YV9pbnNlcnQoc3RydWN0IHhhcnJheSAqeGEsXG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaC03ODItXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjc4MzpcdG1pZ2h0X2FsbG9jKGdmcCk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTc4NC1cdHhhX2xvY2soeGEpO1xuLS1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg9ODA4PXN0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayB4YV9pbnNlcnRfYmgoc3RydWN0IHhhcnJheSAqeGEsXG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaC04MTItXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjgxMzpcdG1pZ2h0X2FsbG9jKGdmcCk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTgxNC1cdHhhX2xvY2tfYmgoeGEpO1xuLS1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg9ODM4PXN0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayB4YV9pbnNlcnRfaXJxKHN0cnVjdCB4YXJyYXkgKnhhLFxuLS1cbmluY2x1ZGUvbGludXgveGFycmF5LmgtODQyLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaDo4NDM6XHRtaWdodF9hbGxvYyhnZnApO1xuaW5jbHVkZS9saW51eC94YXJyYXkuaC04NDQtXHR4YV9sb2NrX2lycSh4YSk7XG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaD04NzE9c3RhdGljIGlubGluZSBfX211c3RfY2hlY2sgaW50IHhhX2FsbG9jKHN0cnVjdCB4YXJyYXkgKnhhLCB1MzIgKmlkLFxuLS1cbmluY2x1ZGUvbGludXgveGFycmF5LmgtODc1LVxuaW5jbHVkZS9saW51eC94YXJyYXkuaDo4NzY6XHRtaWdodF9hbGxvYyhnZnApO1xuaW5jbHVkZS9saW51eC94YXJyYXkuaC04NzctXHR4YV9sb2NrKHhhKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTkwND1zdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgeGFfYWxsb2NfYmgoc3RydWN0IHhhcnJheSAqeGEsIHUzMiAqaWQsXG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaC05MDgtXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjkwOTpcdG1pZ2h0X2FsbG9jKGdmcCk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTkxMC1cdHhhX2xvY2tfYmgoeGEpO1xuLS1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg9OTM3PXN0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayB4YV9hbGxvY19pcnEoc3RydWN0IHhhcnJheSAqeGEsIHUzMiAqaWQsXG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaC05NDEtXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjk0MjpcdG1pZ2h0X2FsbG9jKGdmcCk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTk0My1cdHhhX2xvY2tfaXJxKHhhKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTk3Nj1zdGF0aWMgaW5saW5lIGludCB4YV9hbGxvY19jeWNsaWMoc3RydWN0IHhhcnJheSAqeGEsIHUzMiAqaWQsIHZvaWQgKmVudHJ5LFxuLS1cbmluY2x1ZGUvbGludXgveGFycmF5LmgtOTgwLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaDo5ODE6XHRtaWdodF9hbGxvYyhnZnApO1xuaW5jbHVkZS9saW51eC94YXJyYXkuaC05ODItXHR4YV9sb2NrKHhhKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTEwMTU9c3RhdGljIGlubGluZSBpbnQgeGFfYWxsb2NfY3ljbGljX2JoKHN0cnVjdCB4YXJyYXkgKnhhLCB1MzIgKmlkLCB2b2lkICplbnRyeSxcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTEwMTktXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjEwMjA6XHRtaWdodF9hbGxvYyhnZnApO1xuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xMDIxLVx0eGFfbG9ja19iaCh4YSk7XG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaD0xMDU0PXN0YXRpYyBpbmxpbmUgaW50IHhhX2FsbG9jX2N5Y2xpY19pcnEoc3RydWN0IHhhcnJheSAqeGEsIHUzMiAqaWQsIHZvaWQgKmVudHJ5LFxuLS1cbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTA1OC1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTA1OTpcdG1pZ2h0X2FsbG9jKGdmcCk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTEwNjAtXHR4YV9sb2NrX2lycSh4YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NzQxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIG15IGRvbWFpbiBvZiBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIGBtaWdodF9hbGxvY2AqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBjb2RlLiAmIzM0O0xldCYjMzk7cyByZWFkIGBtaWdodF9hbGxvY2AuJiMzNDsgTm8gZmx1ZmYsIGp1c3QgZGlyZWN0IGVuZ2FnZW1lbnQuIFRoaXMgc2lnbmFscyBhIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZHluYW1pY3Mgd2l0aGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgaW50cmljYWNpZXMgb2YgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGFsbG9jYXRpb24gZmFpbHVyZXMsIHdoYXQgc3RyYXRlZ2llcyBpdCBlbXBsb3lzIGZvciBvcHRpbWl6YXRpb24sIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtIEkga25vdyBzbyB3ZWxsLiBUaGlzIGlzIGxpa2VseSBub3QgYSBjYXN1YWwgc2tpbTsgSSYjMzk7bSBwcmVwYXJlZCB0byBkaWcgaW50byB0aGUgZGV0YWlscyBhbmQgZm9ybSBhIHNvbGlkIG1lbnRhbCBtb2RlbCBvZiBpdHMgYmVoYXZpb3IuIEkgZXhwZWN0IHRvIGJlIGFibGUgdG8gaWRlbnRpZnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBlZGdlIGNhc2VzLCBhbmQgYXJlYXMgdGhhdCBtaWdodCB3YXJyYW50IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBvciBvcHRpbWl6YXRpb24uIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCB1bmRlcnN0YW5kIHRoaXMgYWxsb2NhdGlvbiBtZXRob2QhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zY2hlZC9tbS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzA3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDc6XHQgKiBtaWdodF9hbGxvYyAtIE1hcmsgcG9zc2libGUgYWxsb2NhdGlvbiBzaXRlc1xuIDMwODpcdCAqIEBnZnBfbWFzazogZ2ZwX3QgZmxhZ3MgdGhhdCB3b3VsZCBiZSB1c2VkIHRvIGFsbG9jYXRlXG4gMzA5Olx0ICpcbiAzMTA6XHQgKiBTaW1pbGFyIHRvIG1pZ2h0X3NsZWVwKCkgYW5kIG90aGVyIGFubm90YXRpb25zLCB0aGlzIGNhbiBiZSB1c2VkIGluIGZ1bmN0aW9uc1xuIDMxMTpcdCAqIHRoYXQgbWlnaHQgYWxsb2NhdGUsIGJ1dCBvZnRlbiBkb24mIzM5O3QuIENvbXBpbGVzIHRvIG5vdGhpbmcgd2l0aG91dFxuIDMxMjpcdCAqIENPTkZJR19MT0NLREVQLiBJbmNsdWRlcyBhIGNvbmRpdGlvbmFsIG1pZ2h0X3NsZWVwKCkgaWYgQGdmcCBhbGxvd3MgYmxvY2tpbmcuXG4gMzEzOlx0ICovXG4gMzE0Olx0c3RhdGljIGlubGluZSB2b2lkIG1pZ2h0X2FsbG9jKGdmcF90IGdmcF9tYXNrKVxuIDMxNTpcdHtcbiAzMTY6XHRcdGZzX3JlY2xhaW1fYWNxdWlyZShnZnBfbWFzayk7XG4gMzE3Olx0XHRmc19yZWNsYWltX3JlbGVhc2UoZ2ZwX21hc2spO1xuIDMxODpcdFxuIDMxOTpcdFx0aWYgKGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DKVxuIDMyMDpcdFx0XHRyZXR1cm47XG4gMzIxOlx0XG4gMzIyOlx0XHRtaWdodF9zbGVlcF9pZihnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnBfbWFzaykpO1xuIDMyMzpcdH1cbiAzMjQ6XHRcbiAzMjU6XHQvKipcbiAzMjY6XHQgKiBtZW1hbGxvY19mbGFnc19zYXZlIC0gQWRkIGEgUEZfKiBmbGFnIHRvIGN1cnJlbnQtXHUwMDNlZmxhZ3MsIHNhdmUgb2xkIHZhbHVlXG4gMzI3Olx0ICogQGZsYWdzOiBGbGFncyB0byBhZGQuXG4gMzI4Olx0ICpcbiAzMjk6XHQgKiBUaGlzIGFsbG93cyBQRl8qIGZsYWdzIHRvIGJlIGNvbnZlbmllbnRseSBhZGRlZCwgaXJyZXNwZWN0aXZlIG9mIGN1cnJlbnRcbiAzMzA6XHQgKiB2YWx1ZSwgYW5kIHRoZW4gdGhlIG9sZCB2ZXJzaW9uIHJlc3RvcmVkIHdpdGggbWVtYWxsb2NfZmxhZ3NfcmVzdG9yZSgpLlxuIDMzMTpcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTM4MgoJCQkJCQkJb3V0cHV0OiAxNzIKCQkJCQkJCXRob3VnaHRzOiAyNjA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIEJ1bGsgUGFnZSBBbGxvY2F0aW9uIENvbnRleHQgUHJvcGFnYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBhIHN1YnRsZSBjaGFuZ2Ugd2l0aGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gVGhlIGNvZGUgYWxyZWFkeSBkb2VzIHNvbWUgY29udGV4dCBtYW5hZ2VtZW50IHdpdGggYGZzX3JlY2xhaW1fYWNxdWlyZWAsIGJ1dCB0aGlzIG5ldyBwYXRjaCBpbnRyb2R1Y2VzIGBjdXJyZW50X2dmcF9jb250ZXh0YCAqYmVmb3JlKiB0aGUgYWxsb2NhdGlvbi4gSXQmIzM5O3MgY3J1Y2lhbCBiZWNhdXNlIGBjdXJyZW50X2dmcF9jb250ZXh0YCBtb2RpZmllcyB0aGUgYGdmcF9tYXNrYCBiYXNlZCBvbiB0aGUgY3VycmVudCB0YXNrJiMzOTtzIHN0YXRlLCBhbmQgYGdmcF9taWdyYXRldHlwZWAgaXMgYWxzbyBjb25zaWRlcmVkIGFuZCBtYXkgY2hhbmdlIGJhc2VkIG9uIHRoZSBmbGFncyBzZXQsIHNwZWNpZmljYWxseSBpZiBgUEZfTUVNQUxMT0NfUElOYCBpcyBzZXQuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMgaW4gaG93IGBnZnBfbWFza2AgaXMgaGFuZGxlZDogZW5zdXJpbmcgdGhhdCB0aGUgYWxsb2NhdGlvbiByZXNwZWN0cyB0YXNrLXNwZWNpZmljIGZsYWdzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIGNoYW5nZSBpbiBhIGtleSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbi4gVGhlIGBnZnBfbWFza2AgaW1wYWN0cyB0aGluZ3MgbGlrZSBtaWdyYXRpb24gdHlwZSB3aGljaCBhZmZlY3RzIHdoZXJlIHBhZ2VzIGFyZSBhbGxvY2F0ZWQuIGBhbGxvY19mbGFnc2AgYXJlIGltcGFjdGVkIHRvby4KClRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBtb2RpZmljYXRpb24gd29ydGggdGhlIGZ1enppbmcgZWZmb3J0PyBZZXMsIGFic29sdXRlbHkuIFRoaXMgaXMgYSBjb3JlIE1NIGxvZ2ljIGNoYW5nZSB0aGF0IGFsdGVycyB0aGUgZ2ZwIGZsYWdzIGFuZCBhbGxvY2F0aW9uIGZsYWdzIGZvciBidWxrIHBhZ2UgYWxsb2NhdGlvbnMuIEl0JiMzOTtzIGEgY3JpdGljYWwgYWRqdXN0bWVudCwgYW5kIGl0IHJlcXVpcmVzIGNhcmVmdWwgdGVzdGluZy4KCldoYXQgYXJlIHRoZSBjcml0aWNhbCBzeW1ib2xzIHRvIGZvY3VzIG9uPyBUaGUgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIEkgc2VlIHRoZSBkaWZmLiBUaGF0JiMzOTtzIHRoZSBmdW5jdGlvbiB0byBwcmlvcml0aXplLCByaWdodD8gV2FpdCwgSSYjMzk7bSBjaGVja2luZyBhZ2FpbnN0IHRoZSBndWlkZWxpbmVzIGZvciBGb2N1c1N5bWJvbHMuIFdlICptdXN0IG5vdCogaW5jbHVkZSB1YmlxdWl0b3VzIGZ1bmN0aW9ucy4gSSYjMzk7bSB0aGlua2luZywgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyB1c2VkIGluIHNwZWNpYWxpemVkIHNjZW5hcmlvcyBzdWNoIGFzIGB2bWFsbG9jYCwgYHNwbGljZWAsIGBpb191cmluZ2AsIGFuZCBgcGFnZSBwb29sYC4gSXQgaXMgbm90IGxpa2UgYGttYWxsb2NgIG9yIGBfX2FsbG9jX3BhZ2VzYC4gSXQmIzM5O3MgYSBrZXkgQVBJIHVzZWQgYnkgbXVsdGlwbGUgc3Vic3lzdGVtcyB3aGljaCBuZWVkIGEgYmF0Y2ggYWxsb2NhdGlvbiBBUEkgdG8gYXZvaWQgY29udGVudGlvbi4gQW5kLCB0aGlzIGlzIHRoZSBmdW5jdGlvbiB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcuCgpBcmUgdGhlcmUgb3RoZXIgZnVuY3Rpb24gdGhhdCB3ZSBzaG91bGQgaW5jbHVkZT8gVGhlcmUgaXMgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAsIGJ1dCB0aGUga2V5IGxvZ2ljIGJlaW5nIG1vZGlmaWVkIGlzIGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuCgpJIGhhdmUgdG8gY2FyZWZ1bGx5IGFzc2VzcyBpZiB0aGUgZnVuY3Rpb24gaXMgJiMzNDt1YmlxdWl0b3VzJiMzNDsgbGlrZSBga21hbGxvY2Agb3IgYF9fYWxsb2NfcGFnZXNfbm9wcm9mYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgZnV6emVyIGRvZXNuJiMzOTt0IGdldCBmbG9vZGVkIHdpdGggdW5yZWxhdGVkIHRlc3QgY2FzZXMuIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgbm90IGNhbGxlZCBieSAqZXZlcnkqIHByb2dyYW0uIEl0IGlzIGNhbGxlZCBieSBzcGVjaWZpYyBwcm9ncmFtcywgb3IgcGF0aHMgdGhhdCByZXF1aXJlIGJ1bGsgYWxsb2NhdGlvbi4KClNvLCBsZXQmIzM5O3MgbmFpbCB0aGlzIGRvd24uIFRoZSBwYXRjaCBjaGFuZ2VzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIGFuZCBpdCYjMzk7cyBub3QgYSBnZW5lcmljIGFsbG9jYXRvci4gSXQmIzM5O3MgYW4gaW1wb3J0YW50IGVudHJ5cG9pbnQuCgpOZXh0LCBJIGhhdmUgdG8gZW5zdXJlIHRoZSBzeW1ib2xzIGFyZSB2YWxpZCAoZXhwb3J0ZWQsIG5vbi1zdGF0aWMpLiBZZXMsIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgYSBub24tc3RhdGljIEMgZnVuY3Rpb24sIGFuZCBpcyBleHBvcnRlZCB0byB1c2VyIHNwYWNlLiBJdCBpcyB1bmNvbmRpdGlvbmFsbHkgY29tcGlsZWQgaW4gYWxsIGtlcm5lbCBjb25maWdzLgoKSGVyZSYjMzk7cyB0aGUgYm90dG9tIGxpbmU6CgoqICAgKipXb3J0aEZ1enppbmcqKjogVHJ1ZQoqICAgKipSZWFzb25pbmcqKjogVGhlIHBhdGNoIG1vZGlmaWVzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgdG8gYXBwbHkgYGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKWAuIFRoaXMgZW5zdXJlcyB0aGF0IHNjb3BlZCBhbGxvY2F0aW9uIGNvbnN0cmFpbnRzIChzdWNoIGFzIGBQRl9NRU1BTExPQ19OT0lPYCwgYFBGX01FTUFMTE9DX05PRlNgLCBhbmQgYFBGX01FTUFMTE9DX1BJTmApIGFyZSBwcm9wZXJseSBob25vcmVkIGR1cmluZyBidWxrIHBhZ2UgYWxsb2NhdGlvbi4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBhIHJlYWNoYWJsZSBwYXRoLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGF0IHByb3BhZ2F0aW5nIHRhc2sgZ2ZwIGNvbnRleHQgaW4gYnVsayBhbGxvY2F0aW9ucyBkb2VzIG5vdCBjYXVzZSB1bmV4cGVjdGVkIGFsbG9jYXRpb24gZmFpbHVyZXMsIHJlZ3Jlc3Npb24sIG9yIGxvY2tkZXAvcmVjbGFpbSBhc3NlcnRpb24gaXNzdWVzIGFjcm9zcyBjYWxsZXJzIGxpa2Ugdm1hbGxvYywgc3BsaWNlLCBpb191cmluZywgb3IgcGFnZSBwb29sLgoqICAgKipGb2N1c1N5bWJvbHMqKjogYFsmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mJiMzNDtdYAoqICAgKipFbmFibGVDb25maWdzKio6IGBbXWAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHBhZ2UgYWxsb2NhdG9yIGZ1bmN0aW9uIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKCkgaW4gbW0vcGFnZV9hbGxvYy5jIHRvIGhvbm9yIHRoZSBjYWxsaW5nIHRhc2smIzM5O3Mgc2NvcGVkIEdGUCBjb250ZXh0IHZpYSBjdXJyZW50X2dmcF9jb250ZXh0KCkuIFRoaXMgYWx0ZXJzIGFsbG9jYXRpb24gZmxhZ3MgKGUuZy4gc3RyaXBwaW5nIF9fR0ZQX0ZTLCBfX0dGUF9JTywgb3IgX19HRlBfTU9WQUJMRSB1bmRlciBQRl9NRU1BTExPQ19OT0ZTLCBQRl9NRU1BTExPQ19OT0lPLCBvciBQRl9NRU1BTExPQ19QSU4pIGR1cmluZyBidWxrIHBhZ2UgYWxsb2NhdGlvbiByZXF1ZXN0cywgd2hpY2ggZGlyZWN0bHkgYWZmZWN0cyByZWFjaGFibGUgc3Vic3lzdGVtcyBzdWNoIGFzIHZtYWxsb2MsIHNwbGljZSwgaW9fdXJpbmcsIGFuZCBwYWdlIHBvb2xzLiBUaGlzIGNvcmUgbW0gbG9naWMgY2hhbmdlIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19ub3Byb2YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgcGFnZSBhbGxvY2F0b3IgZnVuY3Rpb24gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKSBpbiBtbS9wYWdlX2FsbG9jLmMgdG8gaG9ub3IgdGhlIGNhbGxpbmcgdGFzayYjMzk7cyBzY29wZWQgR0ZQIGNvbnRleHQgdmlhIGN1cnJlbnRfZ2ZwX2NvbnRleHQoKS4gVGhpcyBhbHRlcnMgYWxsb2NhdGlvbiBmbGFncyAoZS5nLiBzdHJpcHBpbmcgX19HRlBfRlMsIF9fR0ZQX0lPLCBvciBfX0dGUF9NT1ZBQkxFIHVuZGVyIFBGX01FTUFMTE9DX05PRlMsIFBGX01FTUFMTE9DX05PSU8sIG9yIFBGX01FTUFMTE9DX1BJTikgZHVyaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIHJlcXVlc3RzLCB3aGljaCBkaXJlY3RseSBhZmZlY3RzIHJlYWNoYWJsZSBzdWJzeXN0ZW1zIHN1Y2ggYXMgdm1hbGxvYywgc3BsaWNlLCBpb191cmluZywgYW5kIHBhZ2UgcG9vbHMuIFRoaXMgY29yZSBtbSBsb2dpYyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYCB0byBhcHBseSBwZXItdGFzayBHRlAgY29udGV4dCByZXN0cmljdGlvbnMgdmlhIGBjdXJyZW50X2dmcF9jb250ZXh0KGdmcClgLiBUaGlzIGVuc3VyZXMgdGFzay1sZXZlbCBmbGFncyBzdWNoIGFzIFBGX01FTUFMTE9DX05PSU8sIFBGX01FTUFMTE9DX05PRlMsIGFuZCBQRl9NRU1BTExPQ19QSU4gY29ycmVjdGx5IG1hc2sgR0ZQIGZsYWdzIChlLmcuLCBzdHJpcHBpbmcgX19HRlBfSU8sIF9fR0ZQX0ZTLCBfX0dGUF9NT1ZBQkxFKSB0byBwcmV2ZW50IGRlYWRsb2NrcyBkdXJpbmcgcmVjbGFpbS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeTpcbjEuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIG1vZGlmeSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLlxuMi4gSXQgZG9lcyBub3QgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uLCB6ZXJvaW5nLCBvciBzdHJ1Y3QgZmllbGQgcG9wdWxhdGlvbi5cbjMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBicmFuY2hlcyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhIG9yIGFmZmVjdCBidWZmZXIgYm91bmRzL2xlbmd0aHMuXG5cbkFueSByZWNsYWltIG9yIGxvY2tpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gdGFzayBHRlAgY29udGV4dHMgYXJlIHRyYWNrZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgbWVtb3J5IGFsbG9jIGRlYnVnZ2luZywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDAxZWVhZGJiNGY5NzM5MmI1MGJkYmE3YjUzYTA2MzZlNmU5MTgxYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDA5OjQwOjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IDEyZmFjOTA4NGM0ODMuLjNiZTcyODhhMWFhNzEgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTUyMDcsNiAmIzQzOzUyMDcsNyBAQCB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsCiAKIAkvKiBNYXkgc2V0IEFMTE9DX05PRlJBR01FTlQsIGZyYWdtZW50YXRpb24gd2lsbCByZXR1cm4gMSBwYWdlLiAqLwogCWdmcCAmYW1wOz0gZ2ZwX2FsbG93ZWRfbWFzazsKJiM0MzsJZ2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApOwogCWlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCAmYW1wO2FjLCAmYW1wO2dmcCwgJmFtcDthbGxvY19mbGFncykpCiAJCWdvdG8gb3V0OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDg3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBKdXN0aWZpY2F0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggbGFuZGVkLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBMZXQmIzM5O3MgZGlnIGluLiBGaXJzdCB0aGluZ3MgZmlyc3Q6IEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgZGlmZi4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBsb29rcyBsaWtlIGEgbWlub3IgY2hhbmdlIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBBaCwgcmlnaHQsIGl0IGFkZHMgYSBjYWxsIHRvIGBjdXJyZW50X2dmcF9jb250ZXh0KGdmcClgIHdpdGhpbiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIGZ1bmN0aW9uIGFjdHVhbGx5ICpkb2VzKi4gSSYjMzk7bGwgbmVlZCB0byBrbm93IGl0cyBpbXBhY3Qgb24gdGhlIGZ1bmN0aW9uIGluIHRoZSBjb250ZXh0IG9mIHRoZSBwYWdlIGFsbG9jYXRvci4gSSB3aWxsIHJlYWQgdGhlIGBtbS9wYWdlX2FsbG9jLmNgIGZpbGUgYXJvdW5kIGxpbmUgNTIwNyB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgdGhlIG92ZXJhbGwgY29udGV4dCBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFkZGl0aW9uLiBUaW1lIHRvIGdldCBzb21lIGNvbnRleHQgYW5kIGV2YWx1YXRlIHRoZSBwb3RlbnRpYWwgZm9yIEtNU0FOIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUxOTU6XHRcbjUxOTY6XHQjaWZkZWYgQ09ORklHX1BBR0VfT1dORVJcbjUxOTc6XHRcdC8qXG41MTk4Olx0XHQgKiBQQUdFX09XTkVSIG1heSByZWN1cnNlIGludG8gdGhlIGFsbG9jYXRvciB0byBhbGxvY2F0ZSBzcGFjZSB0b1xuNTE5OTpcdFx0ICogc2F2ZSB0aGUgc3RhY2sgd2l0aCBwYWdlc2V0cy5sb2NrIGhlbGQuIFJlbGVhc2luZy9yZWFjcXVpcmluZ1xuNTIwMDpcdFx0ICogcmVtb3ZlcyBtdWNoIG9mIHRoZSBwZXJmb3JtYW5jZSBiZW5lZml0IG9mIGJ1bGsgYWxsb2NhdGlvbiBzb1xuNTIwMTpcdFx0ICogZm9yY2UgdGhlIGNhbGxlciB0byBhbGxvY2F0ZSBvbmUgcGFnZSBhdCBhIHRpbWUgYXMgaXQmIzM5O2xsIGhhdmVcbjUyMDI6XHRcdCAqIHNpbWlsYXIgcGVyZm9ybWFuY2UgdG8gYWRkZWQgY29tcGxleGl0eSB0byB0aGUgYnVsayBhbGxvY2F0b3IuXG41MjAzOlx0XHQgKi9cbjUyMDQ6XHRcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcbjUyMDU6XHRcdFx0Z290byBmYWlsZWQ7XG41MjA2Olx0I2VuZGlmXG41MjA3Olx0XG41MjA4Olx0XHQvKiBNYXkgc2V0IEFMTE9DX05PRlJBR01FTlQsIGZyYWdtZW50YXRpb24gd2lsbCByZXR1cm4gMSBwYWdlLiAqL1xuNTIwOTpcdFx0Z2ZwIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbjUyMTA6XHRcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcbjUyMTE6XHRcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcdTAwMjZhYywgXHUwMDI2Z2ZwLCBcdTAwMjZhbGxvY19mbGFncykpXG41MjEyOlx0XHRcdGdvdG8gb3V0O1xuNTIxMzpcdFxuNTIxNDpcdFx0LyogRmluZCBhbiBhbGxvd2VkIGxvY2FsIHpvbmUgdGhhdCBtZWV0cyB0aGUgbG93IHdhdGVybWFyay4gKi9cbjUyMTU6XHRcdHogPSBhYy5wcmVmZXJyZWRfem9uZXJlZjtcbjUyMTY6XHRcdGZvcl9uZXh0X3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgYWMuaGlnaGVzdF96b25laWR4LCBhYy5ub2RlbWFzaykge1xuNTIxNzpcdFx0XHR1bnNpZ25lZCBsb25nIG1hcms7XG41MjE4Olx0XG41MjE5Olx0XHRcdGlmIChjcHVzZXRzX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19DUFVTRVQpIFx1MDAyNlx1MDAyNlxuNTIyMDpcdFx0XHQgICAgIV9fY3B1c2V0X3pvbmVfYWxsb3dlZCh6b25lLCBnZnApKSB7XG41MjIxOlx0XHRcdFx0Y29udGludWU7XG41MjIyOlx0XHRcdH1cbjUyMjM6XHRcbjUyMjQ6XHRcdFx0aWYgKG5yX29ubGluZV9ub2RlcyBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgem9uZSAhPSB6b25lbGlzdF96b25lKGFjLnByZWZlcnJlZF96b25lcmVmKSBcdTAwMjZcdTAwMjZcbjUyMjU6XHRcdFx0ICAgIHpvbmVfdG9fbmlkKHpvbmUpICE9IHpvbmVsaXN0X25vZGVfaWR4KGFjLnByZWZlcnJlZF96b25lcmVmKSkge1xuNTIyNjpcdFx0XHRcdGdvdG8gZmFpbGVkO1xuNTIyNzpcdFx0XHR9XG41MjI4Olx0XG41MjI5Olx0XHRcdGNvbmRfYWNjZXB0X21lbW9yeSh6b25lLCAwLCBhbGxvY19mbGFncyk7XG41MjMwOlx0cmV0cnlfdGhpc196b25lOlxuNTIzMTpcdFx0XHRtYXJrID0gd21hcmtfcGFnZXMoem9uZSwgYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX1dNQVJLX01BU0spICYjNDM7IG5yX3BhZ2VzIC0gbnJfcG9wdWxhdGVkO1xuNTIzMjpcdFx0XHRpZiAoem9uZV93YXRlcm1hcmtfZmFzdCh6b25lLCAwLCAgbWFyayxcbjUyMzM6XHRcdFx0XHRcdHpvbmVsaXN0X3pvbmVfaWR4KGFjLnByZWZlcnJlZF96b25lcmVmKSxcbjUyMzQ6XHRcdFx0XHRcdGFsbG9jX2ZsYWdzLCBnZnApKSB7XG41MjM1Olx0XHRcdFx0YnJlYWs7XG41MjM2Olx0XHRcdH1cbjUyMzc6XHRcbjUyMzg6XHRcdFx0aWYgKGNvbmRfYWNjZXB0X21lbW9yeSh6b25lLCAwLCBhbGxvY19mbGFncykpXG41MjM5Olx0XHRcdFx0Z290byByZXRyeV90aGlzX3pvbmU7XG41MjQwOlx0XG41MjQxOlx0XHRcdC8qIFRyeSBhZ2FpbiBpZiB6b25lIGhhcyBkZWZlcnJlZCBwYWdlcyAqL1xuNTI0MjpcdFx0XHRpZiAoZGVmZXJyZWRfcGFnZXNfZW5hYmxlZCgpKSB7XG41MjQzOlx0XHRcdFx0aWYgKF9kZWZlcnJlZF9ncm93X3pvbmUoem9uZSwgMCkpXG41MjQ0Olx0XHRcdFx0XHRnb3RvIHJldHJ5X3RoaXNfem9uZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ5NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlZXAgRGl2ZSBpbnRvIGBjdXJyZW50X2dmcF9jb250ZXh0YCBVc2FnZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MgdHJhY2UgdGhpcyBgY3VycmVudF9nZnBfY29udGV4dGAgdmFyaWFibGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHV0aWxpemVkIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBtbS9wYWdlX2FsbG9jLmNgIGZpbGUsIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gc2VlIHRoZSBjb3JlIGFsbG9jYXRpb24gbG9naWMuIEJ1dCBvZiBjb3Vyc2UsIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGEgY29tcGxleCBiZWFzdCwgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGNvdWxkIGJlIGFueXdoZXJlLiBTbyBJJiMzOTtsbCBicm9hZGVuIHRoZSBzZWFyY2gsIGxvb2tpbmcgYmV5b25kIGp1c3QgdGhhdCBvbmUgZmlsZS4gTXkgZ29hbCBpcyB0byBtYXAgb3V0IGV2ZXJ5IGNhbGwgc2l0ZSBhbmQgZGV0ZXJtaW5lIGhvdyBgY3VycmVudF9nZnBfY29udGV4dGAgaW5mbHVlbmNlcyB0aGUgYWxsb2NhdGlvbiBiZWhhdmlvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgaXTigJlzIGEgZ2xvYmFsIHZhcmlhYmxlLCB0aHJlYWQgbG9jYWwsIG9yIGhvdyBpdCBpcyBiZWluZyBjaGFuZ2VkIHRvIGluZmx1ZW5jZSBwYWdlIGFsbG9jYXRpb24uIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBhc3BlY3RzIG9mIGFsbG9jYXRpb24gYXJlIGNvbnRyb2xsZWQgdmlhIGBnZnBfY29udGV4dGAuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgaGlkZGVuIGRlcGVuZGVuY2llcyBvciBpbnRlcmFjdGlvbnMgdGhhdCBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgb2J2aW91cy4gVGhpcyBpbnZlc3RpZ2F0aW9uIHNob3VsZCBoZWxwIG1lIGRldGVybWluZSB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoZSB3YXkgdGhpcyBjb250ZXh0IGlzIGJlaW5nIHV0aWxpemVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjdXJyZW50X2dmcF9jb250ZXh0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYz0zNzUyPWFsbG9jX2ZsYWdzX25vZnJhZ21lbnQoc3RydWN0IHpvbmUgKnpvbmUsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy0zNzg0LVxubW0vcGFnZV9hbGxvYy5jOjM3ODU6LyogTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgY3VycmVudF9nZnBfY29udGV4dCgpIHdoaWNoIGNhbiBjaGFuZ2UgZ2ZwX21hc2sgKi9cbm1tL3BhZ2VfYWxsb2MuYy0zNzg2LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzX2NtYShnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDM4Mz12b2lkIGZzX3JlY2xhaW1fYWNxdWlyZShnZnBfdCBnZnBfbWFzaylcbm1tL3BhZ2VfYWxsb2MuYy00Mzg0LXtcbm1tL3BhZ2VfYWxsb2MuYzo0Mzg1Olx0Z2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKTtcbm1tL3BhZ2VfYWxsb2MuYy00Mzg2LVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz00NDAwPXZvaWQgZnNfcmVjbGFpbV9yZWxlYXNlKGdmcF90IGdmcF9tYXNrKVxubW0vcGFnZV9hbGxvYy5jLTQ0MDEte1xubW0vcGFnZV9hbGxvYy5jOjQ0MDI6XHRnZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spO1xubW0vcGFnZV9hbGxvYy5jLTQ0MDMtXG4tLVxubW0vcGFnZV9hbGxvYy5jPTUxNjA9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MjA5LVx0Z2ZwIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbm1tL3BhZ2VfYWxsb2MuYzo1MjEwOlx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xubW0vcGFnZV9hbGxvYy5jLTUyMTEtXHRpZiAoIXByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgXHUwMDI2YWMsIFx1MDAyNmdmcCwgXHUwMDI2YWxsb2NfZmxhZ3MpKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz01Mzg0PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU0MTktXHQgKi9cbm1tL3BhZ2VfYWxsb2MuYzo1NDIwOlx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xubW0vcGFnZV9hbGxvYy5jLTU0MjEtXHRhbGxvY19nZnAgPSBnZnA7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTcyODQ9aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MzEyLVxubW0vcGFnZV9hbGxvYy5jOjczMTM6XHRnZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spO1xubW0vcGFnZV9hbGxvYy5jLTczMTQtXHRpZiAoX19hbGxvY19jb250aWdfdmVyaWZ5X2dmcF9tYXNrKGdmcF9tYXNrLCAoZ2ZwX3QgKilcdTAwMjZjYy5nZnBfbWFzaykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MTkKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQ3VycmVudCBHRlAgQ29udGV4dCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXkgb2YgdGhlIGxhbmQgaGVyZS4gTXkgaW1tZWRpYXRlIHByaW9yaXR5IGlzIHRvIGV4YW1pbmUgdGhlIHN0YXRlIG9mIGBjdXJyZW50X2dmcF9jb250ZXh0YC4gVGhpcyB2YXJpYWJsZSwgb3Igb2JqZWN0LCB3aGF0ZXZlciBpdCBtaWdodCBiZSwgaG9sZHMgdGhlIGtleSB0byB0aGUgY3VycmVudCBvcGVyYXRpbmcgZW52aXJvbm1lbnQgd2l0aGluIHRoZSBHRlAgKEdyZWVuIEZsdW9yZXNjZW50IFByb3RlaW4pIGFwcGxpY2F0aW9uLiBJdCYjMzk7cyB0aGUgZ3JvdW5kaW5nIHBvaW50LCB0aGUgcmVmZXJlbmNlLCB0aGUgJiMzNDt5b3UgYXJlIGhlcmUmIzM0OyBtYXJrZXIuIEtub3dpbmcgaXRzIGNvbnRlbnRzLCBpdHMgcHJvcGVydGllcywgaXRzIHN0cnVjdHVyZSwgd2lsbCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB3aGF0JiMzOTtzIGdvaW5nIG9uIGFuZCB3aGVyZSBJIGNhbiBtYWtlIHByb2dyZXNzLiBJIG5lZWQgdG8ga25vdyAqZXhhY3RseSogd2hhdCB0aGlzIHJlcHJlc2VudHMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW5saW5lLipjdXJyZW50X2dmcF9jb250ZXh0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaD0yMTU9c3RhdGljIGlubGluZSBib29sIGluX3Zmb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0yNDctICovXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6MjQ4OnN0YXRpYyBpbmxpbmUgZ2ZwX3QgY3VycmVudF9nZnBfY29udGV4dChnZnBfdCBmbGFncylcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0yNDkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODI3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nIHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGF0IGNvZGU6CgoqKkRpdmluZyBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IChtbS5oKSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHNvbWUgbWVtb3J5IG1hbmFnZW1lbnQgZGV0YWlscy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGFkZHJlc3Mgc3BhY2VzIGFuZCBtZW1vcnkgY29udGV4dHMuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBpbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjQ4LiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgZGVmaW5pdGlvbnMgb3Igc3RydWN0dXJlcyByZWxhdGVkIHRvIHByb2Nlc3MgbWVtb3J5IG1hcHMgKG1tX3N0cnVjdCkgb3IgcGVyaGFwcyBkZXRhaWxzIGFib3V0IGhvdyB0aGVzZSBtYXBzIGludGVyYWN0IHdpdGggdGhlIHBhZ2UgdGFibGVzLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHZpcnR1YWwgYWRkcmVzc2VzIGFyZSB0cmFuc2xhdGVkIHRvIHBoeXNpY2FsIGFkZHJlc3NlcyBhbmQgaG93IHRoZSBrZXJuZWwgdHJhY2tzIHRoZSBtZW1vcnkgYWxsb2NhdGVkIHRvIGVhY2ggcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgb3Igc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCwgYXMgdGhlc2UgYXJlIGNyaXRpY2FsIGZvciBlbnN1cmluZyBkYXRhIGNvbnNpc3RlbmN5IGFuZCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyBpbiBhIG11bHRpdGhyZWFkZWQgZW52aXJvbm1lbnQuIEZyb20gdGhlcmUsIEkgY2FuIGJldHRlciB1bmRlcnN0YW5kIGFuZCBkZWJ1ZyBjZXJ0YWluIG1lbW9yeS1yZWxhdGVkIHN5c3RlbSBjYWxscyBJIHdhcyBkZWFsaW5nIHdpdGggZWFybGllci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0MDpcdH1cbiAyNDE6XHRcbiAyNDI6XHQvKlxuIDI0MzpcdCAqIEFwcGxpZXMgcGVyLXRhc2sgZ2ZwIGNvbnRleHQgdG8gdGhlIGdpdmVuIGFsbG9jYXRpb24gZmxhZ3MuXG4gMjQ0Olx0ICogUEZfTUVNQUxMT0NfTk9JTyBpbXBsaWVzIEdGUF9OT0lPXG4gMjQ1Olx0ICogUEZfTUVNQUxMT0NfTk9GUyBpbXBsaWVzIEdGUF9OT0ZTXG4gMjQ2Olx0ICogUEZfTUVNQUxMT0NfUElOICBpbXBsaWVzICFHRlBfTU9WQUJMRVxuIDI0NzpcdCAqL1xuIDI0ODpcdHN0YXRpYyBpbmxpbmUgZ2ZwX3QgY3VycmVudF9nZnBfY29udGV4dChnZnBfdCBmbGFncylcbiAyNDk6XHR7XG4gMjUwOlx0XHR1bnNpZ25lZCBpbnQgcGZsYWdzID0gUkVBRF9PTkNFKGN1cnJlbnQtXHUwMDNlZmxhZ3MpO1xuIDI1MTpcdFxuIDI1MjpcdFx0aWYgKHVubGlrZWx5KHBmbGFncyBcdTAwMjYgKFBGX01FTUFMTE9DX05PSU8gfCBQRl9NRU1BTExPQ19OT0ZTIHwgUEZfTUVNQUxMT0NfUElOKSkpIHtcbiAyNTM6XHRcdFx0LypcbiAyNTQ6XHRcdFx0ICogTk9JTyBpbXBsaWVzIGJvdGggTk9JTyBhbmQgTk9GUyBhbmQgaXQgaXMgYSB3ZWFrZXIgY29udGV4dFxuIDI1NTpcdFx0XHQgKiBzbyBhbHdheXMgbWFrZSBzdXJlIGl0IG1ha2VzIHByZWNlZGVuY2VcbiAyNTY6XHRcdFx0ICovXG4gMjU3Olx0XHRcdGlmIChwZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DX05PSU8pXG4gMjU4Olx0XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+KF9fR0ZQX0lPIHwgX19HRlBfRlMpO1xuIDI1OTpcdFx0XHRlbHNlIGlmIChwZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DX05PRlMpXG4gMjYwOlx0XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+X19HRlBfRlM7XG4gMjYxOlx0XG4gMjYyOlx0XHRcdGlmIChwZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DX1BJTilcbiAyNjM6XHRcdFx0XHRmbGFncyBcdTAwMjY9IH5fX0dGUF9NT1ZBQkxFO1xuIDI2NDpcdFx0fVxuIDI2NTpcdFx0cmV0dXJuIGZsYWdzO1xuIDI2NjpcdH1cbiAyNjc6XHRcbiAyNjg6XHQjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiAyNjk6XHRleHRlcm4gdm9pZCBfX2ZzX3JlY2xhaW1fYWNxdWlyZSh1bnNpZ25lZCBsb25nIGlwKTtcbiAyNzA6XHRleHRlcm4gdm9pZCBfX2ZzX3JlY2xhaW1fcmVsZWFzZSh1bnNpZ25lZCBsb25nIGlwKTtcbiAyNzE6XHRleHRlcm4gdm9pZCBmc19yZWNsYWltX2FjcXVpcmUoZ2ZwX3QgZ2ZwX21hc2spO1xuIDI3MjpcdGV4dGVybiB2b2lkIGZzX3JlY2xhaW1fcmVsZWFzZShnZnBfdCBnZnBfbWFzayk7XG4gMjczOlx0I2Vsc2VcbiAyNzQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgX19mc19yZWNsYWltX2FjcXVpcmUodW5zaWduZWQgbG9uZyBpcCkgeyB9XG4gMjc1Olx0c3RhdGljIGlubGluZSB2b2lkIF9fZnNfcmVjbGFpbV9yZWxlYXNlKHVuc2lnbmVkIGxvbmcgaXApIHsgfVxuIDI3NjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBmc19yZWNsYWltX2FjcXVpcmUoZ2ZwX3QgZ2ZwX21hc2spIHsgfVxuIDI3NzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBmc19yZWNsYWltX3JlbGVhc2UoZ2ZwX3QgZ2ZwX21hc2spIHsgfVxuIDI3ODpcdCNlbmRpZlxuIDI3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzYxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgR0ZQIENvbnRleHQgSXNzdWUgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGV4cGVydCBleWUgaG9uZXMgaW4gb24gdGhlIGFwcGxpY2F0aW9uIG9mIGBjdXJyZW50X2dmcF9jb250ZXh0YCB3aXRoaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4gSXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogd2UmIzM5O3JlIGFwcGx5aW5nIHBlci10YXNrIEdGUCBjb250ZXh0IGZsYWdzIChsaWtlIFBGX01FTUFMTE9DX05PSU8sIFBGX01FTUFMTE9DX05PRlMsIGFuZCBQRl9NRU1BTExPQ19QSU4pIHRvIHRoZSBzdGFuZGFyZCBnZnAgZmxhZ3MuIFRoZSBjb2RlIHdhcyAqbWlzc2luZyogdGhpcyBhcHBsaWNhdGlvbiBpbiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLiBUaGUga2V5IGlzc3VlIGhlcmU/IElmIGEgY2FsbGVyIHdhcyBvcGVyYXRpbmcgd2l0aGluIGEgYG1lbWFsbG9jX25vaW9fc2F2ZSgpYCBvciBgbWVtYWxsb2Nfbm9mc19zYXZlKClgIHNjb3BlLCB0aGUgYnVsayBhbGxvY2F0b3IgKndvdWxkbiYjMzk7dCogcHJvcGVybHkgc3RyaXAgYF9fR0ZQX0lPYCwgYF9fR0ZQX0ZTYCwgb3IgYF9fR0ZQX01PVkFCTEVgIGFjY29yZGluZyB0byB0aGUgdGFzayYjMzk7cyBmbGFncy4gVGhhdCYjMzk7cyBhIHNlcmlvdXMgb3ZlcnNpZ2h0IQoKVGhpcyBpcyBhbGwgYWJvdXQgR0ZQIGZsYWdzLCByZWNsYWltLCBhbmQgYXZvaWRpbmcgZGVhZGxvY2tzLCBhbmQgdGhhdCYjMzk7cyBwcmVjaXNlbHkgd2hhdCYjMzk7cyB0ZXN0ZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgbW0gdGVzdHMuCgpOb3csIGxldCYjMzk7cyBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcy4KCiogICBVbmluaXRpYWxpemVkIE1lbW9yeT8gTm9wZSwgSSBkb24mIzM5O3Qgc2VlIGFueSBjaGFuZ2VzIHRoYXQgd291bGQgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnkuCiogICBVc2VyLVNwYWNlIEJ1ZmZlcnM/IE5vLCBpdCYjMzk7cyBub3QgYWZmZWN0aW5nIGFueSBidWZmZXIgY29weWluZy4KKiAgIFN0cnVjdHVyZSBQYWRkaW5nL0luaXRpYWxpemF0aW9uPyBObywgbm90aGluZyB0byBzZWUgaGVyZS4KKiAgIENvbmRpdGlvbmFsIEJyYW5jaGVzIG9uIFVuaW5pdGlhbGl6ZWQgTWVtb3J5PyBEZWZpbml0ZWx5IG5vdC4KKiAgIERhdGEgTGVuZ3Rocy9Cb3VuZHMgQ2hlY2tpbmc/IE5vIGNoYW5nZXMuCiogICBDaGFuZ2luZyBaZXJvaW5nIG9mIEFsbG9jYXRlZCBQYWdlcz8gSG1tbSwgZG9lcyBgYWxsb2NfcGFnZXNfYnVsa2AgaGFuZGxlIGBfX0dGUF9aRVJPYD8gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpbXBsZW1lbnRhdGlvbuKApgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTI4MDpcdFx0XHRucl9hY2NvdW50JiM0MzsmIzQzOztcbjUyODE6XHRcbjUyODI6XHRcdFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xuNTI4MzpcdFx0XHRzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpO1xuNTI4NDpcdFx0XHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTtcbjUyODU6XHRcdH1cbjUyODY6XHRcbjUyODc6XHRcdHBjcF9zcGluX3VubG9jayhwY3ApO1xuNTI4ODpcdFxuNTI4OTpcdFx0X19jb3VudF96aWRfdm1fZXZlbnRzKFBHQUxMT0MsIHpvbmVfaWR4KHpvbmUpLCBucl9hY2NvdW50KTtcbjUyOTA6XHRcdHpvbmVfc3RhdGlzdGljcyh6b25lbGlzdF96b25lKGFjLnByZWZlcnJlZF96b25lcmVmKSwgem9uZSwgbnJfYWNjb3VudCk7XG41MjkxOlx0XG41MjkyOlx0b3V0OlxuNTI5MzpcdFx0cmV0dXJuIG5yX3BvcHVsYXRlZDtcbjUyOTQ6XHRcbjUyOTU6XHRmYWlsZWQ6XG41Mjk2Olx0XHRwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7XG41Mjk3Olx0XHRpZiAocGFnZSlcbjUyOTg6XHRcdFx0cGFnZV9hcnJheVtucl9wb3B1bGF0ZWQmIzQzOyYjNDM7XSA9IHBhZ2U7XG41Mjk5Olx0XHRnb3RvIG91dDtcbjUzMDA6XHR9XG41MzAxOlx0RVhQT1JUX1NZTUJPTF9HUEwoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YpO1xuNTMwMjpcdFxuNTMwMzpcdC8qXG41MzA0Olx0ICogZnJlZV9wYWdlc19idWxrIC0gRnJlZSBhbiBhcnJheSBvZiBvcmRlci0wIHBhZ2VzXG41MzA1Olx0ICogQHBhZ2VfYXJyYXk6IEFycmF5IG9mIHBhZ2VzIHRvIGZyZWVcbjUzMDY6XHQgKiBAbnJfcGFnZXM6IFRoZSBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIGFycmF5XG41MzA3Olx0ICpcbjUzMDg6XHQgKiBGcmVlIHRoZSBvcmRlci0wIHBhZ2VzLiBBZGphY2VudCBlbnRyaWVzIHdob3NlIFBGTnMgZm9ybSBhIGNvbnRpZ3VvdXNcbjUzMDk6XHQgKiBydW4gYXJlIHJlbGVhc2VkIHdpdGggYSBzaW5nbGUgX19mcmVlX2NvbnRpZ19yYW5nZSgpIGNhbGwuXG41MzEwOlx0ICpcbjUzMTE6XHQgKiBUaGlzIGFzc3VtZXMgcGFnZV9hcnJheSBpcyBzb3J0ZWQgaW4gYXNjZW5kaW5nIFBGTiBvcmRlci4gV2l0aG91dCB0aGF0LFxuNTMxMjpcdCAqIHRoZSBmdW5jdGlvbiBzdGlsbCBmcmVlcyBhbGwgcGFnZXMsIGJ1dCBjb250aWd1b3VzIHJ1bnMgbWF5IG5vdCBiZVxuNTMxMzpcdCAqIGRldGVjdGVkIGFuZCB0aGUgZnJlZWluZyBwYXR0ZXJuIGNhbiBkZWdyYWRlIHRvIGZyZWVpbmcgb25lIHBhZ2UgYXQgYVxuNTMxNDpcdCAqIHRpbWUuXG41MzE1Olx0ICpcbjUzMTY6XHQgKiBDb250ZXh0OiBTbGVlcGFibGUgcHJvY2VzcyBjb250ZXh0IG9ubHk7IGNhbGxzIGNvbmRfcmVzY2hlZCgpXG41MzE3Olx0ICovXG41MzE4Olx0dm9pZCBmcmVlX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuNTMxOTpcdHtcbjUzMjA6XHRcdHdoaWxlIChucl9wYWdlcykge1xuNTMyMTpcdFx0XHR1bnNpZ25lZCBsb25nIG5yX2NvbnRpZyA9IG51bV9wYWdlc19jb250aWd1b3VzKHBhZ2VfYXJyYXksIG5yX3BhZ2VzKTtcbjUzMjI6XHRcbjUzMjM6XHRcdFx0X19mcmVlX2NvbnRpZ19yYW5nZShwYWdlX3RvX3BmbigqcGFnZV9hcnJheSksIG5yX2NvbnRpZyk7XG41MzI0Olx0XG41MzI1Olx0XHRcdG5yX3BhZ2VzIC09IG5yX2NvbnRpZztcbjUzMjY6XHRcdFx0cGFnZV9hcnJheSAmIzQzOz0gbnJfY29udGlnO1xuNTMyNzpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjUzMjg6XHRcdH1cbjUzMjk6XHR9XG41MzMwOlx0XG41MzMxOlx0c3RhdGljIGlubGluZSBib29sIGFsbG9jX29yZGVyX2FsbG93ZWQoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG41MzMyOlx0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuNTMzMzpcdHtcbjUzMzQ6XHRcdGlmIChhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfTk9MT0NLKVxuNTMzNTpcdFx0XHRyZXR1cm4gcGNwX2FsbG93ZWRfb3JkZXIob3JkZXIpO1xuNTMzNjpcdFxuNTMzNzpcdFx0LypcbjUzMzg6XHRcdCAqIFRoZXJlIGFyZSBzZXZlcmFsIHBsYWNlcyB3aGVyZSB3ZSBhc3N1bWUgdGhhdCB0aGUgb3JkZXIgdmFsdWUgaXMgc2FuZVxuNTMzOTpcdFx0ICogc28gYmFpbCBvdXQgZWFybHkgaWYgdGhlIHJlcXVlc3QgaXMgb3V0IG9mIGJvdW5kLlxuNTM0MDpcdFx0ICovXG41MzQxOlx0XHRyZXR1cm4gIShXQVJOX09OX09OQ0VfR0ZQKG9yZGVyIFx1MDAzZSBNQVhfUEFHRV9PUkRFUiwgZ2ZwKSk7XG41MzQyOlx0fVxuNTM0MzpcdFxuNTM0NDpcdHN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvY19ub2xvY2tfYWxsb3dlZCh2b2lkKVxuNTM0NTpcdHtcbjUzNDY6XHRcdGlmICghY2FuX3NwaW5fdHJ5bG9jaygpKVxuNTM0NzpcdFx0XHRyZXR1cm4gZmFsc2U7XG41MzQ4Olx0XG41MzQ5Olx0XHQvKiBCYWlsb3V0LCBzaW5jZSBfZGVmZXJyZWRfZ3Jvd196b25lKCkgbmVlZHMgdG8gdGFrZSBhIGxvY2sgKi9cbjUzNTA6XHRcdGlmIChkZWZlcnJlZF9wYWdlc19lbmFibGVkKCkpXG41MzUxOlx0XHRcdHJldHVybiBmYWxzZTtcbjUzNTI6XHRcbjUzNTM6XHRcdHJldHVybiB0cnVlO1xuNTM1NDpcdH1cbjUzNTU6XHRcbjUzNTY6XHQvKlxuNTM1NzpcdCAqIEdGUCBmbGFncyB0byBzZXQgZm9yIEFMTE9DX05PTE9DSyBpLmUuIGFsbG9jX3BhZ2VzX25vbG9jaygpLlxuNTM1ODpcdCAqXG41MzU5Olx0ICogRG8gbm90IHNwZWNpZnkgX19HRlBfRElSRUNUX1JFQ0xBSU0sIHNpbmNlIGRpcmVjdCBjbGFpbSBpcyBub3QgYWxsb3dlZC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY3NQoJCQkJCQkJb3V0cHV0OiAyMzAKCQkJCQkJCXRob3VnaHRzOiAzMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGFnZSBBbGxvY2F0aW9uIENvZGUqKgoKT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gYHByZXBfbmV3X3BhZ2VgIHRha2VzIGNhcmUgb2YgdGhlIGBfX0dGUF9aRVJPYCBmbGFnIGlmIGl0JiMzOTtzIHRoZXJlLiBUaGUgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIGZ1bmN0aW9uIGlzIHNvbGVseSByZXNwb25zaWJsZSBmb3IgbWFza2luZyBvdXQgY2VydGFpbiBgZ2ZwYCBmbGFnczogc3BlY2lmaWNhbGx5LCBgX19HRlBfSU9gLCBgX19HRlBfRlNgLCBhbmQgYF9fR0ZQX01PVkFCTEVgLiBJdCBkb2VzbiYjMzk7dCB0b3VjaCBhbnl0aGluZyByZWxhdGVkIHRvIGluaXRpYWxpemF0aW9uIG9yIHplcm9pbmcsIGFuZCBpdCYjMzk7cyBhbGwgYWJvdXQgZW5zdXJpbmcgdGhhdCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcmVzcGVjdHMgdGFzayBjb250ZXh0IHJlc3RyaWN0aW9ucyBkdXJpbmcgYnVsayBwYWdlIGFsbG9jYXRpb24uIFRoYXQmIzM5O3MgZ29vZDsgaXQga2VlcHMgdGhpbmdzIGNvbnN0cmFpbmVkIGFuZCBwcmVkaWN0YWJsZS4KCk5vdywgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLCBsZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OgoKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZT8gTm9wZS4gTm90aGluZyBsaWtlIHRoYXQgaGVyZS4KMi4gIEFueSBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBtaWdodCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcz8gTm8sIEkgZG9uJiMzOTt0IHNlZSBhbnl0aGluZyBzdXNwaWNpb3VzLgozLiAgQXJlIHdlIGFsbG9jYXRpbmcgYW5kIGluaXRpYWxpemluZyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBOb3BlLCB0aGUgaW5pdGlhbGl6YXRpb24gaXMgaGFuZGxlZCBzZXBhcmF0ZWx5Lgo0LiAgQW55dGhpbmcgdG8gZG8gd2l0aCBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM/IE5lZ2F0aXZlLgoKU28sIHdoZXJlIGRvZXMgdGhpcyBsZWF2ZSB1cyB3aXRoIEtBU0FOIGFuZCBLTVNBTj8KCldlbGwsIExPQ0tERVAgaXMgYWxyZWFkeSBrZWVwaW5nIGFuIGV5ZSBvbiBsb2NraW5nIGRlYWRsb2NrcywgYW5kIEtBU0FOIGhhbmRsZXMgbWVtb3J5IHNhZmV0eS4gVGhlIHBhcnQgSSYjMzk7bSBmb2N1c2luZyBvbiBpc24mIzM5O3QgYWJvdXQgbWVtb3J5IHNhZmV0eSBjb25jZXJucyBvciBsb2NraW5nLCBidXQgd2hhdCBLTVNBTiBpcyBmb3I6IGl0IGNoZWNrcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBUaGlzIHBhdGNoIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhvc2UgY29uY2VybnM7IGl0JiMzOTtzIGEgdmVyeSBzdHJhaWdodGZvcndhcmQgZmxhZyBtYW5hZ2VtZW50LgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLgoKT2theSwgSSYjMzk7bSByZWFkeSB0byBwcmVwYXJlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYCB0byBhcHBseSBwZXItdGFzayBHRlAgY29udGV4dCByZXN0cmljdGlvbnMgdmlhIGBjdXJyZW50X2dmcF9jb250ZXh0KGdmcClgLiBUaGlzIGVuc3VyZXMgdGFzay1sZXZlbCBmbGFncyBzdWNoIGFzIFBGX01FTUFMTE9DX05PSU8sIFBGX01FTUFMTE9DX05PRlMsIGFuZCBQRl9NRU1BTExPQ19QSU4gY29ycmVjdGx5IG1hc2sgR0ZQIGZsYWdzIChlLmcuLCBzdHJpcHBpbmcgX19HRlBfSU8sIF9fR0ZQX0ZTLCBfX0dGUF9NT1ZBQkxFKSB0byBwcmV2ZW50IGRlYWRsb2NrcyBkdXJpbmcgcmVjbGFpbS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeTpcbjEuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIG1vZGlmeSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLlxuMi4gSXQgZG9lcyBub3QgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uLCB6ZXJvaW5nLCBvciBzdHJ1Y3QgZmllbGQgcG9wdWxhdGlvbi5cbjMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBicmFuY2hlcyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhIG9yIGFmZmVjdCBidWZmZXIgYm91bmRzL2xlbmd0aHMuXG5cbkFueSByZWNsYWltIG9yIGxvY2tpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gdGFzayBHRlAgY29udGV4dHMgYXJlIHRyYWNrZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgbWVtb3J5IGFsbG9jIGRlYnVnZ2luZywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgIHRvIGFwcGx5IHBlci10YXNrIEdGUCBjb250ZXh0IHJlc3RyaWN0aW9ucyB2aWEgYGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKWAuIFRoaXMgZW5zdXJlcyB0YXNrLWxldmVsIGZsYWdzIHN1Y2ggYXMgUEZfTUVNQUxMT0NfTk9JTywgUEZfTUVNQUxMT0NfTk9GUywgYW5kIFBGX01FTUFMTE9DX1BJTiBjb3JyZWN0bHkgbWFzayBHRlAgZmxhZ3MgKGUuZy4sIHN0cmlwcGluZyBfX0dGUF9JTywgX19HRlBfRlMsIF9fR0ZQX01PVkFCTEUpIHRvIHByZXZlbnQgZGVhZGxvY2tzIGR1cmluZyByZWNsYWltLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OlxuMS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UuXG4yLiBJdCBkb2VzIG5vdCBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIHplcm9pbmcsIG9yIHN0cnVjdCBmaWVsZCBwb3B1bGF0aW9uLlxuMy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGVzIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEgb3IgYWZmZWN0IGJ1ZmZlciBib3VuZHMvbGVuZ3Rocy5cblxuQW55IHJlY2xhaW0gb3IgbG9ja2luZyBpc3N1ZXMgcmVsYXRlZCB0byB0YXNrIEdGUCBjb250ZXh0cyBhcmUgdHJhY2tlZCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBtZW1vcnkgYWxsb2MgZGVidWdnaW5nLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQwOjU2LjE0Nzc0NDQ5M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MTI0MzU0MDUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19wYWdlc19idWxrX25vcHJvZlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgIHRvIGFwcGx5IHBlci10YXNrIEdGUCBjb250ZXh0IHJlc3RyaWN0aW9ucyB2aWEgYGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKWAuIFRoaXMgZW5zdXJlcyB0YXNrLWxldmVsIGZsYWdzIHN1Y2ggYXMgUEZfTUVNQUxMT0NfTk9JTywgUEZfTUVNQUxMT0NfTk9GUywgYW5kIFBGX01FTUFMTE9DX1BJTiBjb3JyZWN0bHkgbWFzayBHRlAgZmxhZ3MgKGUuZy4sIHN0cmlwcGluZyBfX0dGUF9JTywgX19HRlBfRlMsIF9fR0ZQX01PVkFCTEUpIHRvIHByZXZlbnQgZGVhZGxvY2tzIGR1cmluZyByZWNsYWltLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnk6XFxuMS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UuXFxuMi4gSXQgZG9lcyBub3QgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uLCB6ZXJvaW5nLCBvciBzdHJ1Y3QgZmllbGQgcG9wdWxhdGlvbi5cXG4zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYnJhbmNoZXMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBhZmZlY3QgYnVmZmVyIGJvdW5kcy9sZW5ndGhzLlxcblxcbkFueSByZWNsYWltIG9yIGxvY2tpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gdGFzayBHRlAgY29udGV4dHMgYXJlIHRyYWNrZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgbWVtb3J5IGFsbG9jIGRlYnVnZ2luZywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHBhZ2UgYWxsb2NhdG9yIGZ1bmN0aW9uIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKCkgaW4gbW0vcGFnZV9hbGxvYy5jIHRvIGhvbm9yIHRoZSBjYWxsaW5nIHRhc2sncyBzY29wZWQgR0ZQIGNvbnRleHQgdmlhIGN1cnJlbnRfZ2ZwX2NvbnRleHQoKS4gVGhpcyBhbHRlcnMgYWxsb2NhdGlvbiBmbGFncyAoZS5nLiBzdHJpcHBpbmcgX19HRlBfRlMsIF9fR0ZQX0lPLCBvciBfX0dGUF9NT1ZBQkxFIHVuZGVyIFBGX01FTUFMTE9DX05PRlMsIFBGX01FTUFMTE9DX05PSU8sIG9yIFBGX01FTUFMTE9DX1BJTikgZHVyaW5nIGJ1bGsgcGFnZSBhbGxvY2F0aW9uIHJlcXVlc3RzLCB3aGljaCBkaXJlY3RseSBhZmZlY3RzIHJlYWNoYWJsZSBzdWJzeXN0ZW1zIHN1Y2ggYXMgdm1hbGxvYywgc3BsaWNlLCBpb191cmluZywgYW5kIHBhZ2UgcG9vbHMuIFRoaXMgY29yZSBtbSBsb2dpYyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDA6NTYuMTQ3NzQ4NzQzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODA1NTUwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0MDFlZWFkYmI0Zjk3MzkyYjUwYmRiYTdiNTNhMDYzNmU2ZTkxODFhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDE1IDA5OjQwOjU1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xcbmluZGV4IDEyZmFjOTA4NGM0ODMuLjNiZTcyODhhMWFhNzEgMTAwNjQ0XFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXFxuKysrIGIvbW0vcGFnZV9hbGxvYy5jXFxuQEAgLTUyMDcsNiArNTIwNyw3IEBAIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG4gXFxuIFxcdC8qIE1heSBzZXQgQUxMT0NfTk9GUkFHTUVOVCwgZnJhZ21lbnRhdGlvbiB3aWxsIHJldHVybiAxIHBhZ2UuICovXFxuIFxcdGdmcCBcXHUwMDI2PSBnZnBfYWxsb3dlZF9tYXNrO1xcbitcXHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XFxuIFxcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcXHUwMDI2YWMsIFxcdTAwMjZnZnAsIFxcdTAwMjZhbGxvY19mbGFncykpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDA6NTYuNjI5MDc3Mzg0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMzI0OTc3NTU1MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBwYWdlIGFsbG9jYXRvciBmdW5jdGlvbiBhbGxvY19wYWdlc19idWxrX25vcHJvZigpIGluIG1tL3BhZ2VfYWxsb2MuYyB0byBob25vciB0aGUgY2FsbGluZyB0YXNrJ3Mgc2NvcGVkIEdGUCBjb250ZXh0IHZpYSBjdXJyZW50X2dmcF9jb250ZXh0KCkuIFRoaXMgYWx0ZXJzIGFsbG9jYXRpb24gZmxhZ3MgKGUuZy4gc3RyaXBwaW5nIF9fR0ZQX0ZTLCBfX0dGUF9JTywgb3IgX19HRlBfTU9WQUJMRSB1bmRlciBQRl9NRU1BTExPQ19OT0ZTLCBQRl9NRU1BTExPQ19OT0lPLCBvciBQRl9NRU1BTExPQ19QSU4pIGR1cmluZyBidWxrIHBhZ2UgYWxsb2NhdGlvbiByZXF1ZXN0cywgd2hpY2ggZGlyZWN0bHkgYWZmZWN0cyByZWFjaGFibGUgc3Vic3lzdGVtcyBzdWNoIGFzIHZtYWxsb2MsIHNwbGljZSwgaW9fdXJpbmcsIGFuZCBwYWdlIHBvb2xzLiBUaGlzIGNvcmUgbW0gbG9naWMgY2hhbmdlIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDAxZWVhZGJiNGY5NzM5MmI1MGJkYmE3YjUzYTA2MzZlNmU5MTgxYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDA5OjQwOjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXG5pbmRleCAxMmZhYzkwODRjNDgzLi4zYmU3Mjg4YTFhYTcxIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXG4rKysgYi9tbS9wYWdlX2FsbG9jLmNcbkBAIC01MjA3LDYgKzUyMDcsNyBAQCB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG4gXG4gXHQvKiBNYXkgc2V0IEFMTE9DX05PRlJBR01FTlQsIGZyYWdtZW50YXRpb24gd2lsbCByZXR1cm4gMSBwYWdlLiAqL1xuIFx0Z2ZwIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbitcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcbiBcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcdTAwMjZhYywgXHUwMDI2Z2ZwLCBcdTAwMjZhbGxvY19mbGFncykpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDA6NTYuNjI5MDc4NjU0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjgxNjY0NDEzOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgYG1tL3BhZ2VfYWxsb2MuY2AgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBtb2RpZmllcyBgbW0vcGFnZV9hbGxvYy5jYC4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgbGluZSB0aGF0IGNhbGxzIGBjdXJyZW50X2dmcF9jb250ZXh0KGdmcClgIHJpZ2h0IGJlZm9yZSB0aGUgYHByZXBhcmVfYWxsb2NfcGFnZXNgIGNhbGwuIFRoaXMgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IGFuZCBpbXBsaWNhdGlvbnMgaGVyZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byByZXZpZXcgdGhlIGdpdCBoaXN0b3J5IG9mIHRoaXMgZmlsZSBpbiB0aGF0IGFyZWEuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLlxuXG5JJ20gdGhpbmtpbmcsIFwiTGV0J3MgY2hlY2sgdGhlIGdpdCBsb2cgb3IganVzdCBicm93c2UgdGhhdCBzZWN0aW9uIG9mIGBtbS9wYWdlX2FsbG9jLmNgXCIuIEknbGwgcXVpY2tseSBuZWVkIHRvIHNlZSB0aGUgc3Vycm91bmRpbmcgY29kZSwgYW5kIHVuZGVyc3RhbmQgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyB1c2VkIGFuZCBpdHMgcGFyYW1ldGVycywgYW5kIHNvIEkgbWlnaHQgYXMgd2VsbCBqdXN0IGByZWFkLWZpbGVgIGFuZCBjaGVjayB0aGUgZmlsZSBkaXJlY3RseS4gVGhhdCB3aWxsIGJlIHRoZSBxdWlja2VzdCBwYXRoIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBgZ2ZwYCBmbGFnIGlzIGJlaW5nIG1vZGlmaWVkLCB3aHkgdGhpcyBjb250ZXh0IGlzIGJlaW5nIHNldCwgYW5kIHdoYXQgZWZmZWN0IHRoaXMgd2lsbCBoYXZlIG9uIHBhZ2UgYWxsb2NhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg3NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQxOjI0Ljc5NTUyMzI0MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODk0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTE5NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTE5NTpcXHRcXG41MTk2OlxcdCNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxcbjUxOTc6XFx0XFx0LypcXG41MTk4OlxcdFxcdCAqIFBBR0VfT1dORVIgbWF5IHJlY3Vyc2UgaW50byB0aGUgYWxsb2NhdG9yIHRvIGFsbG9jYXRlIHNwYWNlIHRvXFxuNTE5OTpcXHRcXHQgKiBzYXZlIHRoZSBzdGFjayB3aXRoIHBhZ2VzZXRzLmxvY2sgaGVsZC4gUmVsZWFzaW5nL3JlYWNxdWlyaW5nXFxuNTIwMDpcXHRcXHQgKiByZW1vdmVzIG11Y2ggb2YgdGhlIHBlcmZvcm1hbmNlIGJlbmVmaXQgb2YgYnVsayBhbGxvY2F0aW9uIHNvXFxuNTIwMTpcXHRcXHQgKiBmb3JjZSB0aGUgY2FsbGVyIHRvIGFsbG9jYXRlIG9uZSBwYWdlIGF0IGEgdGltZSBhcyBpdCdsbCBoYXZlXFxuNTIwMjpcXHRcXHQgKiBzaW1pbGFyIHBlcmZvcm1hbmNlIHRvIGFkZGVkIGNvbXBsZXhpdHkgdG8gdGhlIGJ1bGsgYWxsb2NhdG9yLlxcbjUyMDM6XFx0XFx0ICovXFxuNTIwNDpcXHRcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxcbjUyMDU6XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuNTIwNjpcXHQjZW5kaWZcXG41MjA3OlxcdFxcbjUyMDg6XFx0XFx0LyogTWF5IHNldCBBTExPQ19OT0ZSQUdNRU5ULCBmcmFnbWVudGF0aW9uIHdpbGwgcmV0dXJuIDEgcGFnZS4gKi9cXG41MjA5OlxcdFxcdGdmcCBcXHUwMDI2PSBnZnBfYWxsb3dlZF9tYXNrO1xcbjUyMTA6XFx0XFx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xcbjUyMTE6XFx0XFx0aWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFxcdTAwMjZhYywgXFx1MDAyNmdmcCwgXFx1MDAyNmFsbG9jX2ZsYWdzKSlcXG41MjEyOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjUyMTM6XFx0XFxuNTIxNDpcXHRcXHQvKiBGaW5kIGFuIGFsbG93ZWQgbG9jYWwgem9uZSB0aGF0IG1lZXRzIHRoZSBsb3cgd2F0ZXJtYXJrLiAqL1xcbjUyMTU6XFx0XFx0eiA9IGFjLnByZWZlcnJlZF96b25lcmVmO1xcbjUyMTY6XFx0XFx0Zm9yX25leHRfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCBhYy5oaWdoZXN0X3pvbmVpZHgsIGFjLm5vZGVtYXNrKSB7XFxuNTIxNzpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG1hcms7XFxuNTIxODpcXHRcXG41MjE5OlxcdFxcdFxcdGlmIChjcHVzZXRzX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19DUFVTRVQpIFxcdTAwMjZcXHUwMDI2XFxuNTIyMDpcXHRcXHRcXHQgICAgIV9fY3B1c2V0X3pvbmVfYWxsb3dlZCh6b25lLCBnZnApKSB7XFxuNTIyMTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG41MjIyOlxcdFxcdFxcdH1cXG41MjIzOlxcdFxcbjUyMjQ6XFx0XFx0XFx0aWYgKG5yX29ubGluZV9ub2RlcyBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgem9uZSAhPSB6b25lbGlzdF96b25lKGFjLnByZWZlcnJlZF96b25lcmVmKSBcXHUwMDI2XFx1MDAyNlxcbjUyMjU6XFx0XFx0XFx0ICAgIHpvbmVfdG9fbmlkKHpvbmUpICE9IHpvbmVsaXN0X25vZGVfaWR4KGFjLnByZWZlcnJlZF96b25lcmVmKSkge1xcbjUyMjY6XFx0XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuNTIyNzpcXHRcXHRcXHR9XFxuNTIyODpcXHRcXG41MjI5OlxcdFxcdFxcdGNvbmRfYWNjZXB0X21lbW9yeSh6b25lLCAwLCBhbGxvY19mbGFncyk7XFxuNTIzMDpcXHRyZXRyeV90aGlzX3pvbmU6XFxuNTIzMTpcXHRcXHRcXHRtYXJrID0gd21hcmtfcGFnZXMoem9uZSwgYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19XTUFSS19NQVNLKSArIG5yX3BhZ2VzIC0gbnJfcG9wdWxhdGVkO1xcbjUyMzI6XFx0XFx0XFx0aWYgKHpvbmVfd2F0ZXJtYXJrX2Zhc3Qoem9uZSwgMCwgIG1hcmssXFxuNTIzMzpcXHRcXHRcXHRcXHRcXHR6b25lbGlzdF96b25lX2lkeChhYy5wcmVmZXJyZWRfem9uZXJlZiksXFxuNTIzNDpcXHRcXHRcXHRcXHRcXHRhbGxvY19mbGFncywgZ2ZwKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTo0MToyNC43OTU3OTg1MzJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMTM4MTYyMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqRGlnZ2luZyBpbnRvIE1lbW9yeSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBjdXJyZW50X2dmcF9jb250ZXh0YCBhbmQgYGFsbG9jX3BhZ2VzX25vcHJvZmAuIEl0J3MgbGlrZWx5IHRoYXQgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIHBsYXlzIGEgcm9sZSBpbiBob3cgYGFsbG9jX3BhZ2VzX25vcHJvZmAgYmVoYXZlcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBgY3VycmVudF9nZnBfY29udGV4dGAuIFRoZSBtb3N0IGRpcmVjdCBhcHByb2FjaCBpcyB0byBjaGVjayB0aGUgYG1tL3BhZ2VfYWxsb2MuY2AgZmlsZSwgc2luY2UgdGhhdCdzIGEgY2VudHJhbCBsb2NhdGlvbiBmb3IgbWVtb3J5IGFsbG9jYXRpb24uIEJ1dCwgb2YgY291cnNlLCBJJ2xsIG5lZWQgdG8gdXNlIGdyZXAgdG8gZmluZCBhbGwgdGhlIGluc3RhbmNlcyBvZiBgY3VycmVudF9nZnBfY29udGV4dGAsIGFjcm9zcyB0aGUga2VybmVsIHNvdXJjZSwgdG8gZ2V0IGEgYnJvYWQgcGljdHVyZSBvZiBpdHMgdXNhZ2UuIFRoYXQgc2hvdWxkIHBhaW50IGEgY2xlYXJlciBwaWN0dXJlIG9mIGl0cyBwdXJwb3NlIGFuZCBpbmZsdWVuY2Ugb24gdGhlc2UgYWxsb2NhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMzAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQxOjI3LjkzMzk2MjczMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDU2ODU1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjdXJyZW50X2dmcF9jb250ZXh0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTQxNDU9c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyMTQtXFxubW0vaHVnZV9tZW1vcnkuYzo0MjE1OlxcdFxcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQobWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSBcXHUwMDI2XFxubW0vaHVnZV9tZW1vcnkuYy00MjE2LVxcdFxcdFxcdFxcdFxcdFxcdFxcdEdGUF9SRUNMQUlNX01BU0spO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTM3NTI9YWxsb2NfZmxhZ3Nfbm9mcmFnbWVudChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMzc4NC1cXG5tbS9wYWdlX2FsbG9jLmM6Mzc4NTovKiBNdXN0IGJlIGNhbGxlZCBhZnRlciBjdXJyZW50X2dmcF9jb250ZXh0KCkgd2hpY2ggY2FuIGNoYW5nZSBnZnBfbWFzayAqL1xcbm1tL3BhZ2VfYWxsb2MuYy0zNzg2LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzX2NtYShnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00MzgzPXZvaWQgZnNfcmVjbGFpbV9hY3F1aXJlKGdmcF90IGdmcF9tYXNrKVxcbm1tL3BhZ2VfYWxsb2MuYy00Mzg0LXtcXG5tbS9wYWdlX2FsbG9jLmM6NDM4NTpcXHRnZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spO1xcbm1tL3BhZ2VfYWxsb2MuYy00Mzg2LVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQ0MDA9dm9pZCBmc19yZWNsYWltX3JlbGVhc2UoZ2ZwX3QgZ2ZwX21hc2spXFxubW0vcGFnZV9hbGxvYy5jLTQ0MDEte1xcbm1tL3BhZ2VfYWxsb2MuYzo0NDAyOlxcdGdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayk7XFxubW0vcGFnZV9hbGxvYy5jLTQ0MDMtXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTE2MD11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTIwOS1cXHRnZnAgXFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcXG5tbS9wYWdlX2FsbG9jLmM6NTIxMDpcXHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XFxubW0vcGFnZV9hbGxvYy5jLTUyMTEtXFx0aWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFxcdTAwMjZhYywgXFx1MDAyNmdmcCwgXFx1MDAyNmFsbG9jX2ZsYWdzKSlcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01Mzg0PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTQxOS1cXHQgKi9cXG5tbS9wYWdlX2FsbG9jLmM6NTQyMDpcXHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XFxubW0vcGFnZV9hbGxvYy5jLTU0MjEtXFx0YWxsb2NfZ2ZwID0gZ2ZwO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTcyODQ9aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTczMTItXFxubW0vcGFnZV9hbGxvYy5jOjczMTM6XFx0Z2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKTtcXG5tbS9wYWdlX2FsbG9jLmMtNzMxNC1cXHRpZiAoX19hbGxvY19jb250aWdfdmVyaWZ5X2dmcF9tYXNrKGdmcF9tYXNrLCAoZ2ZwX3QgKilcXHUwMDI2Y2MuZ2ZwX21hc2spKVxcbi0tXFxubW0vcGVyY3B1LmM9MTczNT12b2lkIF9fcGVyY3B1ICpwY3B1X2FsbG9jX25vcHJvZihzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduLCBib29sIHJlc2VydmVkLFxcbi0tXFxubW0vcGVyY3B1LmMtMTc0OS1cXG5tbS9wZXJjcHUuYzoxNzUwOlxcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcXG5tbS9wZXJjcHUuYy0xNzUxLVxcdC8qXFxuLS1cXG5tbS92bXNjYW4uYz02NzY5PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbi0tXFxubW0vdm1zY2FuLmMtNjc3NC1cXHRcXHQubnJfdG9fcmVjbGFpbSA9IFNXQVBfQ0xVU1RFUl9NQVgsXFxubW0vdm1zY2FuLmM6Njc3NTpcXHRcXHQuZ2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSxcXG5tbS92bXNjYW4uYy02Nzc2LVxcdFxcdC5yZWNsYWltX2lkeCA9IGdmcF96b25lKGdmcF9tYXNrKSxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4NTU9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4NjUtXFx0XFx0LnByb2FjdGl2ZV9zd2FwcGluZXNzID0gc3dhcHBpbmVzcyxcXG5tbS92bXNjYW4uYzo2ODY2OlxcdFxcdC5nZnBfbWFzayA9IChjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSBcXHUwMDI2IEdGUF9SRUNMQUlNX01BU0spIHxcXG5tbS92bXNjYW4uYy02ODY3LVxcdFxcdFxcdFxcdChHRlBfSElHSFVTRVJfTU9WQUJMRSBcXHUwMDI2IH5HRlBfUkVDTEFJTV9NQVNLKSxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc4NzY9dW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc4ODItXFx0XFx0Lm5yX3RvX3JlY2xhaW0gPSBtYXgobnJfcGFnZXMsIFNXQVBfQ0xVU1RFUl9NQVgpLFxcbm1tL3Ztc2Nhbi5jOjc4ODM6XFx0XFx0LmdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayksXFxubW0vdm1zY2FuLmMtNzg4NC1cXHRcXHQub3JkZXIgPSBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc5NTg9aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbi0tXFxubW0vdm1zY2FuLmMtODAzNS1cXHRcXHRcXHRzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0ge1xcbm1tL3Ztc2Nhbi5jOjgwMzY6XFx0XFx0XFx0XFx0LmdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayksXFxubW0vdm1zY2FuLmMtODAzNy1cXHRcXHRcXHRcXHQucmVjbGFpbV9pZHggPSBnZnBfem9uZShnZnBfbWFzayksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQxOjI3Ljk4ODUzNjY2NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEyNTgwNjgzMDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOlxuXG4qKk1pc3NpbmcgQ29udGV4dCBpbiBCdWxrIFBhZ2UgQWxsb2NhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgc2VlbXMgdG8gYmUgbWlzc2luZyBhIGNyaXRpY2FsIGNhbGwgdG8gYGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKWAuIFRoYXQncy4uLiBpbnRlcmVzdGluZy4gTGV0IG1lIHF1aWNrbHkgZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgY3VycmVudF9nZnBfY29udGV4dGAgKmFjdHVhbGx5KiBkb2VzLiBMZXQncyB0cmFjZSB0aGF0IGZ1bmN0aW9uIGRlZmluaXRpb24gYW5kIHNlZSB3aGF0IHRoZSBpbnRlbnRpb25zIG9mIHRoYXQgZnVuY3Rpb24gYXJlLiBQZXJoYXBzIHRoZXJlJ3MgYW4gaXNzdWUgd2l0aCBob3cgdGhpcyBidWxrIGFsbG9jYXRpb24gaXMgaGFuZGxpbmcgR0ZQIGZsYWdzLiBUaGlzIG1pc3NpbmcgcGllY2UgY291bGQgYmUgYWZmZWN0aW5nIG1lbW9yeSBhbGxvY2F0aW9uIGJlaGF2aW9yIGluIHdheXMgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIExldCdzIGRpdmUgaW4gYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgxOSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQxOjQwLjU2OTIyMTg4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTE0MzU2NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGlubGluZSBnZnBfdCBjdXJyZW50X2dmcF9jb250ZXh0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD0yMTU9c3RhdGljIGlubGluZSBib29sIGluX3Zmb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI0Ny0gKi9cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6MjQ4OnN0YXRpYyBpbmxpbmUgZ2ZwX3QgY3VycmVudF9nZnBfY29udGV4dChnZnBfdCBmbGFncylcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjQ5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDE6NDIuNTgwNjY0MzA3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODEyNTU2NDMzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IChtbS5oKSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggc29tZSBtZW1vcnkgbWFuYWdlbWVudCBkZXRhaWxzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgYWRkcmVzcyBzcGFjZXMgYW5kIG1lbW9yeSBjb250ZXh0cy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI0OC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGRlZmluaXRpb25zIG9yIHN0cnVjdHVyZXMgcmVsYXRlZCB0byBwcm9jZXNzIG1lbW9yeSBtYXBzIChtbV9zdHJ1Y3QpIG9yIHBlcmhhcHMgZGV0YWlscyBhYm91dCBob3cgdGhlc2UgbWFwcyBpbnRlcmFjdCB3aXRoIHRoZSBwYWdlIHRhYmxlcy4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHZpcnR1YWwgYWRkcmVzc2VzIGFyZSB0cmFuc2xhdGVkIHRvIHBoeXNpY2FsIGFkZHJlc3NlcyBhbmQgaG93IHRoZSBrZXJuZWwgdHJhY2tzIHRoZSBtZW1vcnkgYWxsb2NhdGVkIHRvIGVhY2ggcHJvY2Vzcy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGxvY2tpbmcgbWVjaGFuaXNtcyBvciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB1c2VkLCBhcyB0aGVzZSBhcmUgY3JpdGljYWwgZm9yIGVuc3VyaW5nIGRhdGEgY29uc2lzdGVuY3kgYW5kIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudC4gRnJvbSB0aGVyZSwgSSBjYW4gYmV0dGVyIHVuZGVyc3RhbmQgYW5kIGRlYnVnIGNlcnRhaW4gbWVtb3J5LXJlbGF0ZWQgc3lzdGVtIGNhbGxzIEkgd2FzIGRlYWxpbmcgd2l0aCBlYXJsaWVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTUxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDE6NTAuNzA2MjMwOTQ0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc2NoZWQvbW0uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDA6XFx0fVxcbiAyNDE6XFx0XFxuIDI0MjpcXHQvKlxcbiAyNDM6XFx0ICogQXBwbGllcyBwZXItdGFzayBnZnAgY29udGV4dCB0byB0aGUgZ2l2ZW4gYWxsb2NhdGlvbiBmbGFncy5cXG4gMjQ0OlxcdCAqIFBGX01FTUFMTE9DX05PSU8gaW1wbGllcyBHRlBfTk9JT1xcbiAyNDU6XFx0ICogUEZfTUVNQUxMT0NfTk9GUyBpbXBsaWVzIEdGUF9OT0ZTXFxuIDI0NjpcXHQgKiBQRl9NRU1BTExPQ19QSU4gIGltcGxpZXMgIUdGUF9NT1ZBQkxFXFxuIDI0NzpcXHQgKi9cXG4gMjQ4OlxcdHN0YXRpYyBpbmxpbmUgZ2ZwX3QgY3VycmVudF9nZnBfY29udGV4dChnZnBfdCBmbGFncylcXG4gMjQ5OlxcdHtcXG4gMjUwOlxcdFxcdHVuc2lnbmVkIGludCBwZmxhZ3MgPSBSRUFEX09OQ0UoY3VycmVudC1cXHUwMDNlZmxhZ3MpO1xcbiAyNTE6XFx0XFxuIDI1MjpcXHRcXHRpZiAodW5saWtlbHkocGZsYWdzIFxcdTAwMjYgKFBGX01FTUFMTE9DX05PSU8gfCBQRl9NRU1BTExPQ19OT0ZTIHwgUEZfTUVNQUxMT0NfUElOKSkpIHtcXG4gMjUzOlxcdFxcdFxcdC8qXFxuIDI1NDpcXHRcXHRcXHQgKiBOT0lPIGltcGxpZXMgYm90aCBOT0lPIGFuZCBOT0ZTIGFuZCBpdCBpcyBhIHdlYWtlciBjb250ZXh0XFxuIDI1NTpcXHRcXHRcXHQgKiBzbyBhbHdheXMgbWFrZSBzdXJlIGl0IG1ha2VzIHByZWNlZGVuY2VcXG4gMjU2OlxcdFxcdFxcdCAqL1xcbiAyNTc6XFx0XFx0XFx0aWYgKHBmbGFncyBcXHUwMDI2IFBGX01FTUFMTE9DX05PSU8pXFxuIDI1ODpcXHRcXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+KF9fR0ZQX0lPIHwgX19HRlBfRlMpO1xcbiAyNTk6XFx0XFx0XFx0ZWxzZSBpZiAocGZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0NfTk9GUylcXG4gMjYwOlxcdFxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5fX0dGUF9GUztcXG4gMjYxOlxcdFxcbiAyNjI6XFx0XFx0XFx0aWYgKHBmbGFncyBcXHUwMDI2IFBGX01FTUFMTE9DX1BJTilcXG4gMjYzOlxcdFxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5fX0dGUF9NT1ZBQkxFO1xcbiAyNjQ6XFx0XFx0fVxcbiAyNjU6XFx0XFx0cmV0dXJuIGZsYWdzO1xcbiAyNjY6XFx0fVxcbiAyNjc6XFx0XFxuIDI2ODpcXHQjaWZkZWYgQ09ORklHX0xPQ0tERVBcXG4gMjY5OlxcdGV4dGVybiB2b2lkIF9fZnNfcmVjbGFpbV9hY3F1aXJlKHVuc2lnbmVkIGxvbmcgaXApO1xcbiAyNzA6XFx0ZXh0ZXJuIHZvaWQgX19mc19yZWNsYWltX3JlbGVhc2UodW5zaWduZWQgbG9uZyBpcCk7XFxuIDI3MTpcXHRleHRlcm4gdm9pZCBmc19yZWNsYWltX2FjcXVpcmUoZ2ZwX3QgZ2ZwX21hc2spO1xcbiAyNzI6XFx0ZXh0ZXJuIHZvaWQgZnNfcmVjbGFpbV9yZWxlYXNlKGdmcF90IGdmcF9tYXNrKTtcXG4gMjczOlxcdCNlbHNlXFxuIDI3NDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgX19mc19yZWNsYWltX2FjcXVpcmUodW5zaWduZWQgbG9uZyBpcCkgeyB9XFxuIDI3NTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgX19mc19yZWNsYWltX3JlbGVhc2UodW5zaWduZWQgbG9uZyBpcCkgeyB9XFxuIDI3NjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgZnNfcmVjbGFpbV9hY3F1aXJlKGdmcF90IGdmcF9tYXNrKSB7IH1cXG4gMjc3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBmc19yZWNsYWltX3JlbGVhc2UoZ2ZwX3QgZ2ZwX21hc2spIHsgfVxcbiAyNzg6XFx0I2VuZGlmXFxuIDI3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDE6NTAuNzA2MzM2NzA0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM5MzA4MTI3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgR0ZQIENvbnRleHRzIGluIE1lbW9yeSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHdlIG1hbmFnZSB0aGUgXCJnZnBcIiAoZ2V0IGZyZWUgcGFnZXMpIGNvbnRleHQgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB3aXRoIHJlZ2FyZCB0byBhbGxvY2F0aW9uIGZsYWdzLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZS4gSXQgc2VlbXMgbGlrZSBpdCdzIGRlc2lnbmVkIHRvIHRhaWxvciB0aGUgYGdmcGAgZmxhZ3MgZm9yIGEgZ2l2ZW4gYWxsb2NhdGlvbiByZXF1ZXN0IG9uIGEgcGVyLXRhc2sgYmFzaXMuXG5cbkkgc2VlIHRoYXQgYFBGX01FTUFMTE9DX05PSU9gIGlzIGRlc2lnbmVkIHRvIHRyYW5zbGF0ZSBpbnRvIGBHRlBfTk9JT2AuIFRoaXMgbWFrZXMgcGVyZmVjdCBzZW5zZTsgYEdGUF9OT0lPYCBtZWFucyB3ZSB3YW50IHRvIGF2b2lkIGRpc2sgSS9PLCBhbmQgYFBGX01FTUFMTE9DX05PSU9gIHNlZW1zIHRvIGJlIHRoZSBmbGFnIHRoYXQgc2lnbmFscyB0aGlzIGludGVudCwgY2xlYXJpbmcgdGhlIGBfX0dGUF9JT2AgYW5kIGBfX0dGUF9GU2AgZmxhZ3MgdG8gZW5zdXJlIG5vIGRpc2sgaW50ZXJhY3Rpb24uXG5cblNpbWlsYXJseSwgYFBGX01FTUFMTE9DX05PRlNgIG1hcHMgdG8gYEdGUF9OT0ZTYCwgd2hpY2ggaXMgbG9naWNhbGx5IGNvbnNpc3RlbnQsIGNsZWFyaW5nIG9ubHkgdGhlIGBfX0dGUF9GU2AgZmxhZy4gIE5vIGZpbGVzeXN0ZW0gYWNjZXNzLCBnb29kLlxuXG5GaW5hbGx5LCBgUEZfTUVNQUxMT0NfUElOYCBoYXMgdGhlIGVmZmVjdCBvZiBuZWdhdGluZyBgR0ZQX01PVkFCTEVgLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIHBpbm5pbmcgYSBwYWdlIGltcGxpZXMgaXQgc2hvdWxkbid0IGJlIG1vdmVkIGFyb3VuZCBpbiBtZW1vcnkuICBUaGlzIGNsZWFycyB0aGUgYF9fR0ZQX01PVkFCTEVgIGZsYWcuXG5cbkknbSBub3cgY3VyaW91cyBhYm91dCB3aGljaCBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSB1c2luZyB0aGUgYGFsbG9jX3BhZ2VzX2J1bGsqYCBmdW5jdGlvbnMuIEknbGwgbmVlZCB0byBrbm93IHdoaWNoIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIHVzaW5nIHRoaXMgdG8gaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4gSSdsbCBuZWVkIHRvIGdyZXAgdGhyb3VnaCB0aGUgY29kZWJhc2UgZm9yIHVzYWdlcyBvZiBgYWxsb2NfcGFnZXNfYnVsaypgIHRvIGdldCBhIGdvb2Qgc2Vuc2Ugb2YgaG93IGl0J3MgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA4NSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQxOjU0LjYzNzE1MjQwN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0NzI2NzM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19wYWdlc19idWxrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0xNzI9c3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxcbi0tXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwNC1cXHQgKlxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzoyMDU6XFx0ICogTm90ZTogYWxsb2NfcGFnZXNfYnVsayBuZWVkcyB0aGUgYXJyYXkgdG8gYmUgemVyb2VkLCBhcyBpdCBhc3N1bWVzXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwNi1cXHQgKiBhbnkgbm9uLXplcm8gc2xvdCBhbHJlYWR5IGNvbnRhaW5zIGEgdmFsaWQgYWxsb2NhdGlvbi5cXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDgtXFx0bWVtc2V0KHBhZ2VzLCAwLCBzaXplb2Yoc3RydWN0IHBhZ2UgKikgKiBucl9zZWdzKTtcXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6MjA5OlxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJfc2VncywgcGFnZXMpO1xcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMTAtXFx0aWYgKG5yX2FsbG9jYXRlZCBcXHUwMDNjIG5yX3NlZ3MpXFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmM9MzE9aW50IGZ3X2lzb19idWZmZXJfYWxsb2Moc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwgaW50IHBhZ2VfY291bnQpXFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmMtNDEtXFx0Ly8gY29udmVuaWVuY2UgdG8gbWFwIHRoZW0gaW50byB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb2YgdXNlciBwcm9jZXNzLlxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYzo0MjpcXHR1bnNpZ25lZCBsb25nIG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCB8IEdGUF9ETUEzMiB8IF9fR0ZQX1pFUk8sXFxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jLTQzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHBhZ2VfY291bnQsIHBhZ2VfYXJyYXkpO1xcbi0tXFxuZHJpdmVycy9maXJld2lyZS9vaGNpLmM9ODQ4PXN0YXRpYyBpbnQgYXJfY29udGV4dF9pbml0KHN0cnVjdCBhcl9jb250ZXh0ICpjdHgsIHN0cnVjdCBmd19vaGNpICpvaGNpLFxcbi0tXFxuZHJpdmVycy9maXJld2lyZS9vaGNpLmMtODY0LVxcdC8vIGFkZHJlc3MgcmFuZ2UgaW4ga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS5cXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYzo4NjU6XFx0dW5zaWduZWQgbG9uZyBucl9wb3B1bGF0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwgfCBHRlBfRE1BMzIsIEFSX0JVRkZFUlMsIHBhZ2VzKTtcXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYy04NjYtXFxuLS1cXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jPTYyMT1zdGF0aWMgaW50IGFsbG9jX3ByaXZhdGVfcGFnZXMoc3RydWN0IGhtbV9idWZmZXJfb2JqZWN0ICpibylcXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmMtNjI2LVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM6NjI3OlxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgYm8tXFx1MDAzZXBnbnIsIGJvLVxcdTAwM2VwYWdlcyk7XFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYy02MjgtXFx0LypcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jOjYyOTpcXHQgKiBhbGxvY19wYWdlc19idWxrKCkgZG9lcyBub3QgdHJ5IHZlcnkgaGFyZCB0byBnZXQgcGFnZXMgdW5kZXIgbWVtb3J5XFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYy02MzAtXFx0ICogcHJlc3N1cmUuIElmIG5lY2Vzc2FyeSBmYWxsIGJhY2sgdG8gYWxsb2NfcGFnZSgpLlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jPTQ2Nj1zdGF0aWMgdm9pZCBmcmVlX3BhZ2VfbGlzdCh1MzIgbnBhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfbGlzdClcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy00NjktXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jOjQ3MDpcXHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy00NzEtXFx0Zm9yIChpID0gbnBhZ2VzIC0gMTsgaSBcXHUwMDNlPSAwOyBpLS0pXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM9NDk2PXN0YXRpYyBpbnQgbWx4NXZmX2FkZF9wYWdlcyhzdHJ1Y3QgcGFnZSAqKipwYWdlX2xpc3QsIHVuc2lnbmVkIGludCBucGFnZXMpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmMtNTA2LVxcdGZvciAoOzspIHtcXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM6NTA3OlxcdFxcdGZpbGxlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTF9BQ0NPVU5ULCBucGFnZXMgLSBkb25lLFxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDgtXFx0XFx0XFx0XFx0XFx0ICAqcGFnZV9saXN0ICsgZG9uZSk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM9NjM9c3RhdGljIGludCB2aXJ0aW92Zl9hZGRfbWlncmF0aW9uX3BhZ2VzKHN0cnVjdCB2aXJ0aW92Zl9kYXRhX2J1ZmZlciAqYnVmLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTc4LVxcdGRvIHtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM6Nzk6XFx0XFx0ZmlsbGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMX0FDQ09VTlQsIHRvX2ZpbGwsXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTgwLVxcdFxcdFxcdFxcdFxcdCAgcGFnZV9saXN0KTtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYz0xMTA9c3RhdGljIHZvaWQgdmlydGlvdmZfZnJlZV9kYXRhX2J1ZmZlcihzdHJ1Y3QgdmlydGlvdmZfZGF0YV9idWZmZXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy0xMTMtXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jOjExNDpcXHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy0xMTUtXFx0Zm9yX2VhY2hfc2d0YWJsZV9wYWdlKFxcdTAwMjZidWYtXFx1MDAzZXRhYmxlLnNndCwgXFx1MDAyNnNnX2l0ZXIsIDApXFxuLS1cXG5mcy9idHJmcy9leHRlbnRfaW8uYz02ODQ9aW50IGJ0cmZzX2FsbG9jX3BhZ2VfYXJyYXkodW5zaWduZWQgaW50IG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXksIGdmcF90IGdmcClcXG4tLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5MC1cXG5mcy9idHJmcy9leHRlbnRfaW8uYzo2OTE6XFx0XFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG5mcy9idHJmcy9leHRlbnRfaW8uYy02OTItXFx0XFx0aWYgKHVubGlrZWx5KGFsbG9jYXRlZCA9PSBsYXN0KSkge1xcbi0tXFxuZnMvZXJvZnMvenV0aWwuYz02NT1pbnQgel9lcm9mc19nYnVmX2dyb3dzaXplKHVuc2lnbmVkIGludCBucnBhZ2VzKVxcbi0tXFxuZnMvZXJvZnMvenV0aWwuYy04OS1cXHRcXHRcXHRsYXN0ID0gajtcXG5mcy9lcm9mcy96dXRpbC5jOjkwOlxcdFxcdFxcdGogPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5ycGFnZXMsIHRtcF9wYWdlcyk7XFxuZnMvZXJvZnMvenV0aWwuYy05MS1cXHRcXHRcXHRpZiAobGFzdCA9PSBqKVxcbi0tXFxuZnMvZnVzZS9yZWFkZGlyLmM9MzM2PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqKmZ1c2VfcmVhZGRpcl9hbGxvY19idWYoc3RydWN0IGZ1c2VfYXJnc19wYWdlcyAqYXAsIHNpemVfdCAqYnVmc2l6ZSlcXG4tLVxcbmZzL2Z1c2UvcmVhZGRpci5jLTM0My1cXG5mcy9mdXNlL3JlYWRkaXIuYzozNDQ6XFx0bnJfYWxsb2MgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5yX3BhZ2VzLCBwYWdlcyk7XFxuZnMvZnVzZS9yZWFkZGlyLmMtMzQ1LVxcdGlmICghbnJfYWxsb2MpXFxuLS1cXG5mcy9uZnNkL25mczRzdGF0ZS5jPTEzMjY9YWxsb2NfaW5pdF9kaXJfZGVsZWcoc3RydWN0IG5mczRfY2xpZW50ICpjbHAsIHN0cnVjdCBuZnM0X2ZpbGUgKmZwKVxcbi0tXFxuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM3LVxcbmZzL25mc2QvbmZzNHN0YXRlLmM6MTMzODpcXHRucGFnZXMgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIE5PVElGWTRfUEFHRV9BUlJBWV9TSVpFLCBuY24tXFx1MDAzZW5jbl9wYWdlcyk7XFxuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM5LVxcdGlmIChucGFnZXMgIT0gTk9USUZZNF9QQUdFX0FSUkFZX1NJWkUpIHtcXG4tLVxcbmZzL3NwbGljZS5jPTMxOD1zc2l6ZV90IGNvcHlfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXFxuLS1cXG5mcy9zcGxpY2UuYy0zNDEtXFx0cGFnZXMgPSAoc3RydWN0IHBhZ2UgKiopKGJ2ICsgbnBhZ2VzKTtcXG5mcy9zcGxpY2UuYzozNDI6XFx0bnBhZ2VzID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfVVNFUiwgbnBhZ2VzLCBwYWdlcyk7XFxuZnMvc3BsaWNlLmMtMzQzLVxcdGlmICghbnBhZ2VzKSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIwNz1zdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEwLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjExOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxMi1cXHRcXHRcXHRcXHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEzLVxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTQ6I2RlZmluZSBfX2FsbG9jX3BhZ2VzX2J1bGsoLi4uKVxcdFxcdFxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIxNj12b2lkIGZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXksIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE3LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE4OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxOS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIwLVxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMjE6I2RlZmluZSAgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3koLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMjpcXHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIzLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI0LS8qIEJ1bGsgYWxsb2NhdGUgb3JkZXItMCBwYWdlcyAqL1xcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI1OiNkZWZpbmUgYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyNjpcXHRfX2FsbG9jX3BhZ2VzX2J1bGsoX2dmcCwgbnVtYV9tZW1faWQoKSwgTlVMTCwgX25yX3BhZ2VzLCBfcGFnZV9hcnJheSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyNy1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIyOD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyOTphbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcF90IGdmcCwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzMC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNC1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzNTpcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBuaWQsIE5VTEwsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNi19XFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzctXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMzg6I2RlZmluZSBhbGxvY19wYWdlc19idWxrX25vZGUoLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzOTpcXHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTI0MC1cXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jPTE3ND1zdGF0aWMgaW50IGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlcyhzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYy0xOTItXFxuaW9fdXJpbmcvbWVtbWFwLmM6MTkzOlxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9kZShnZnAsIE5VTUFfTk9fTk9ERSxcXG5pb191cmluZy9tZW1tYXAuYy0xOTQtXFx0XFx0XFx0XFx0XFx0ICAgICBtci1cXHUwMDNlbnJfcGFnZXMsIHBhZ2VzKTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz02Njg9c3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGludCBub2RlX2lkLFxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTczMi1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzMzOlxcdFxcdC8qIHplcm9pbmcgaXMgbmVlZGVkLCBzaW5jZSBhbGxvY19wYWdlc19idWxrKCkgb25seSBmaWxscyBpbiBub24temVybyBlbnRyaWVzICovXFxua2VybmVsL2JwZi9hcmVuYS5jLTczNC1cXHRcXHRtZW1zZXQocGFnZXMsIDAsIHRoaXNfYmF0Y2ggKiBzaXplb2Yoc3RydWN0IHBhZ2UgKikpO1xcbi0tXFxubGliL3Rlc3Rfdm1hbGxvYy5jPTM5MT12bV9tYXBfcmFtX3Rlc3Qodm9pZClcXG4tLVxcbmxpYi90ZXN0X3ZtYWxsb2MuYy00MDMtXFxubGliL3Rlc3Rfdm1hbGxvYy5jOjQwNDpcXHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG1hcF9ucl9wYWdlcywgcGFnZXMpO1xcbmxpYi90ZXN0X3ZtYWxsb2MuYy00MDUtXFx0aWYgKG5yX2FsbG9jYXRlZCAhPSBtYXBfbnJfcGFnZXMpXFxuLS1cXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYz01MT1zdGF0aWMgdm9pZCAqX19pbml0IGlvdl9rdW5pdF9jcmVhdGVfYnVmZmVyKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTY2LVxcdFxcdGxhc3QgPSBnb3Q7XFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6Njc6XFx0XFx0Z290ID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucGFnZXMsIHBhZ2VzKTtcXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy02OC1cXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTc3Nz1zdGF0aWMgaW50IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKHZvaWQpXFxuLS1cXG5tbS9hbGxvY190YWcuYy03OTMtXFxubW0vYWxsb2NfdGFnLmM6Nzk0OlxcdFxcdFxcdGFsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9kZShHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOLFxcbm1tL2FsbG9jX3RhZy5jLTc5NS1cXHRcXHRcXHRcXHROVU1BX05PX05PREUsIG1vcmVfcGFnZXMgLSBuciwgbmV4dF9wYWdlICsgbnIpO1xcbi0tXFxubW0va2FzYW4vc2hhZG93LmM9MzI3PXN0YXRpYyB2b2lkIF9fX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYy0zMzgtXFxubW0va2FzYW4vc2hhZG93LmM6MzM5OnN0YXRpYyBpbnQgX19fYWxsb2NfcGFnZXNfYnVsayhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnJfcGFnZXMsIGdmcF90IGdmcF9tYXNrKVxcbm1tL2thc2FuL3NoYWRvdy5jLTM0MC17XFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYy0zNDQtXFx0d2hpbGUgKG5yX3BhZ2VzKSB7XFxubW0va2FzYW4vc2hhZG93LmM6MzQ1OlxcdFxcdG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoZ2ZwX21hc2ssIG5yX3BhZ2VzLCBwYWdlcyk7XFxubW0va2FzYW4vc2hhZG93LmMtMzQ2LVxcdFxcdGlmICghbnJfcG9wdWxhdGVkKSB7XFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYz0zNTc9c3RhdGljIGludCBfX2thc2FuX3BvcHVsYXRlX3ZtYWxsb2NfZG8odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0va2FzYW4vc2hhZG93LmMtMzY5LVxcdFxcdG5yX3BhZ2VzID0gbWluKG5yX3RvdGFsLCBQQUdFX1NJWkUgLyBzaXplb2YoZGF0YS5wYWdlc1swXSkpO1xcbm1tL2thc2FuL3NoYWRvdy5jOjM3MDpcXHRcXHRyZXQgPSBfX19hbGxvY19wYWdlc19idWxrKGRhdGEucGFnZXMsIG5yX3BhZ2VzLCBnZnBfbWFzayk7XFxubW0va2FzYW4vc2hhZG93LmMtMzcxLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNTg5PUVYUE9SVF9TWU1CT0woZm9saW9fYWxsb2Nfbm9wcm9mKTtcXG5tbS9tZW1wb2xpY3kuYy0yNTkwLVxcbm1tL21lbXBvbGljeS5jOjI1OTE6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19pbnRlcmxlYXZlKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNTkyLVxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2MDctXFx0XFx0aWYgKGRlbHRhKSB7XFxubW0vbWVtcG9saWN5LmM6MjYwODpcXHRcXHRcXHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsXFxubW0vbWVtcG9saWN5LmMtMjYwOS1cXHRcXHRcXHRcXHRcXHRpbnRlcmxlYXZlX25vZGVzKHBvbCksIE5VTEwsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNjEzLVxcdFxcdH0gZWxzZSB7XFxubW0vbWVtcG9saWN5LmM6MjYxNDpcXHRcXHRcXHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsXFxubW0vbWVtcG9saWN5LmMtMjYxNS1cXHRcXHRcXHRcXHRcXHRpbnRlcmxlYXZlX25vZGVzKHBvbCksIE5VTEwsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNjI1LVxcbm1tL21lbXBvbGljeS5jOjI2MjY6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNjI3LVxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2NjQtXFx0XFx0bm9kZV9wYWdlcyA9IG1pbihyZW1fcGFnZXMsIHdlaWdodCk7XFxubW0vbWVtcG9saWN5LmM6MjY2NTpcXHRcXHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxcbm1tL21lbXBvbGljeS5jLTI2NjYtXFx0XFx0XFx0XFx0XFx0XFx0ICBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3MDEtXFx0LypcXG5tbS9tZW1wb2xpY3kuYzoyNzAyOlxcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxcbm1tL21lbXBvbGljeS5jLTI3MDMtXFx0ICogVHJhY2sgd2hpY2ggbm9kZSB3ZWlnaHRlZCBpbnRlcmxlYXZlIHNob3VsZCByZXN1bWUgZnJvbS5cXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3MjktXFx0XFx0XFx0YnJlYWs7XFxubW0vbWVtcG9saWN5LmM6MjczMDpcXHRcXHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxcbm1tL21lbXBvbGljeS5jLTI3MzEtXFx0XFx0XFx0XFx0XFx0XFx0ICBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NDMtXFxubW0vbWVtcG9saWN5LmM6Mjc0NDpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcF90IGdmcCwgaW50IG5pZCxcXG5tbS9tZW1wb2xpY3kuYy0yNzQ1LVxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NTMtXFxubW0vbWVtcG9saWN5LmM6Mjc1NDpcXHRucl9hbGxvY2F0ZWQgID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YocHJlZmVycmVkX2dmcCwgbmlkLCBcXHUwMDI2cG9sLVxcdTAwM2Vub2RlcyxcXG5tbS9tZW1wb2xpY3kuYy0yNzU1LVxcdFxcdFxcdFxcdFxcdCAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NTctXFx0aWYgKG5yX2FsbG9jYXRlZCBcXHUwMDNjIG5yX3BhZ2VzKVxcbm1tL21lbXBvbGljeS5jOjI3NTg6XFx0XFx0bnJfYWxsb2NhdGVkICs9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCwgbnVtYV9ub2RlX2lkKCksIE5VTEwsXFxubW0vbWVtcG9saWN5LmMtMjc1OS1cXHRcXHRcXHRcXHRucl9wYWdlcyAtIG5yX2FsbG9jYXRlZCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NjktICovXFxubW0vbWVtcG9saWN5LmM6Mjc3MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXFxubW0vbWVtcG9saWN5LmMtMjc3MS1cXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzgwLVxcdGlmIChwb2wtXFx1MDAzZW1vZGUgPT0gTVBPTF9JTlRFUkxFQVZFKVxcbm1tL21lbXBvbGljeS5jOjI3ODE6XFx0XFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfaW50ZXJsZWF2ZShnZnAsIHBvbCxcXG5tbS9tZW1wb2xpY3kuYy0yNzgyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBucl9wYWdlcywgcGFnZV9hcnJheSk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzg0LVxcdGlmIChwb2wtXFx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKVxcbm1tL21lbXBvbGljeS5jOjI3ODU6XFx0XFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShcXG5tbS9tZW1wb2xpY3kuYy0yNzg2LVxcdFxcdFxcdFxcdCAgZ2ZwLCBwb2wsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3ODgtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX1BSRUZFUlJFRF9NQU5ZKVxcbm1tL21lbXBvbGljeS5jOjI3ODk6XFx0XFx0cmV0dXJuIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI3OTAtXFx0XFx0XFx0XFx0bnVtYV9ub2RlX2lkKCksIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc5My1cXHRub2RlbWFzayA9IHBvbGljeV9ub2RlbWFzayhnZnAsIHBvbCwgTk9fSU5URVJMRUFWRV9JTkRFWCwgXFx1MDAyNm5pZCk7XFxubW0vbWVtcG9saWN5LmM6Mjc5NDpcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBuaWQsIG5vZGVtYXNrLFxcbm1tL21lbXBvbGljeS5jLTI3OTUtXFx0XFx0XFx0XFx0ICAgICAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01MDkxPXN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTEzOS0vKlxcbm1tL3BhZ2VfYWxsb2MuYzo1MTQwOiAqIF9fYWxsb2NfcGFnZXNfYnVsayAtIEFsbG9jYXRlIGEgbnVtYmVyIG9mIG9yZGVyLTAgcGFnZXMgdG8gYW4gYXJyYXlcXG5tbS9wYWdlX2FsbG9jLmMtNTE0MS0gKiBAZ2ZwOiBHRlAgZmxhZ3MgZm9yIHRoZSBhbGxvY2F0aW9uXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTE1OS0gKi9cXG5tbS9wYWdlX2FsbG9jLmM6NTE2MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxubW0vcGFnZV9hbGxvYy5jLTUxNjEtXFx0XFx0XFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MzAwLX1cXG5tbS9wYWdlX2FsbG9jLmM6NTMwMTpFWFBPUlRfU1lNQk9MX0dQTChhbGxvY19wYWdlc19idWxrX25vcHJvZik7XFxubW0vcGFnZV9hbGxvYy5jLTUzMDItXFxuLS1cXG5tbS9zbHViLmM9NzQyNj1zdGF0aWMgYm9vbCBfX2ttZW1fY2FjaGVfYWxsb2NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmMtNzQ3MC0gKlxcbm1tL3NsdWIuYzo3NDcxOiAqIFVubGlrZSBhbGxvY19wYWdlc19idWxrKCksIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgZm9yIGFscmVhZHkgYWxsb2NhdGVkXFxubW0vc2x1Yi5jLTc0NzItICogb2JqZWN0cyBpbiBAcCwgYW5kIHRodXMgdGhlIGNhbGxlciBkb2VzIG5vdCBuZWVkIHRvIHplcm8gaXQuXFxuLS1cXG5tbS92bWFsbG9jLmM9MzY3Nj12bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zNzQzLVxcdFxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSBcXHUwMDI2XFx1MDAyNiBuaWQgPT0gTlVNQV9OT19OT0RFKVxcbm1tL3ZtYWxsb2MuYzozNzQ0OlxcdFxcdFxcdFxcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcCxcXG5tbS92bWFsbG9jLmMtMzc0NS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRucl9wYWdlc19yZXF1ZXN0LFxcbi0tXFxubW0vdm1hbGxvYy5jLTM3NDctXFx0XFx0XFx0ZWxzZVxcbm1tL3ZtYWxsb2MuYzozNzQ4OlxcdFxcdFxcdFxcdG5yID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlX25vcHJvZihnZnAsIG5pZCxcXG5tbS92bWFsbG9jLmMtMzc0OS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRucl9wYWdlc19yZXF1ZXN0LFxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9NjExPXN0YXRpYyBub2lubGluZSBuZXRtZW1fcmVmIF9fcGFnZV9wb29sX2FsbG9jX25ldG1lbXNfc2xvdyhzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjMzLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjYzNDpcXHQvKiBNYXJrIGVtcHR5IGFsbG9jLmNhY2hlIHNsb3RzIFxcXCJlbXB0eVxcXCIgZm9yIGFsbG9jX3BhZ2VzX2J1bGsgKi9cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzUtXFx0bWVtc2V0KFxcdTAwMjZwb29sLVxcdTAwM2VhbGxvYy5jYWNoZSwgMCwgc2l6ZW9mKHZvaWQgKikgKiBidWxrKTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzYtXFxubmV0L2NvcmUvcGFnZV9wb29sLmM6NjM3OlxcdG5yX3BhZ2VzID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgcG9vbC1cXHUwMDNlcC5uaWQsIGJ1bGssXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjM4LVxcdFxcdFxcdFxcdFxcdCAoc3RydWN0IHBhZ2UgKiopcG9vbC1cXHUwMDNlYWxsb2MuY2FjaGUpO1xcbi0tXFxubmV0L3N1bnJwYy9zdmNfeHBydC5jPTY4Nz1zdGF0aWMgYm9vbCBzdmNfZmlsbF9wYWdlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbi0tXFxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5Mi1cXHRmb3IgKGZpbGxlZCA9IDA7IGZpbGxlZCBcXHUwMDNjIG5wYWdlczsgZmlsbGVkID0gcmV0KSB7XFxubmV0L3N1bnJwYy9zdmNfeHBydC5jOjY5MzpcXHRcXHRyZXQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5wYWdlcywgcGFnZXMpO1xcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy02OTQtXFx0XFx0aWYgKHJldCBcXHUwMDNlIGZpbGxlZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDE6NTYuNzg0NDI2MTU3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ0NTU4MTAzMzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgYW5kIGl0cyBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiB3aGVyZSBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIHVzZWQuIFZtYWxsb2MsIHNwbGljZSBzeXNjYWxscywgYnRyZnMsIGZ1c2UsIGlvX3VyaW5nLCBCUEYgYXJlbmFzLCBuZXR3b3JraW5nLi4uIGl0J3MgYSAqbG90KiBvZiBjb3JlIGZ1bmN0aW9uYWxpdHkuIFRoYXQncyBhIHdpZGUgcmFuZ2Ugb2YgdXNlIGNhc2VzLCBhbmQgdGhhdCBkZWZpbml0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC5cblxuU28sIHRoZSBpc3N1ZSB0aGlzIHBhdGNoIGFkZHJlc3Nlcy4uLiByaWdodCwgaXQncyBpbiBob3cgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBoYW5kbGVzIEdGUCBmbGFncy4gU3BlY2lmaWNhbGx5OlxuXG5gYGBjXG5cdC8qIE1heSBzZXQgQUxMT0NfTk9GUkFHTUVOVCwgZnJhZ21lbnRhdGlvbiB3aWxsIHJldHVybiAxIHBhZ2UuICovXG5cdGdmcCBcdTAwMjY9IGdmcF9hbGxvd2VkX21hc2s7XG5cdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcblx0aWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFx1MDAyNmFjLCBcdTAwMjZnZnAsIFx1MDAyNmFsbG9jX2ZsYWdzKSlcblx0XHRnb3RvIG91dDtcbmBgYFxuXG5JdCBsb29rcyBsaWtlIGlmIHdlJ3JlIHVuZGVyIGEgcHJvdGVjdGlvbiBzY29wZSBsaWtlIGBtZW1hbGxvY19ub2lvX3NhdmUoKWAgKFBGX01FTUFMTE9DX05PSU8pIG9yIGBtZW1hbGxvY19ub2ZzX3NhdmUoKWAgKFBGX01FTUFMTE9DX05PRlMpIHRoaXMgcm91dGluZSAqaWdub3JlZCogdGhlIHRhc2sncyBjdXJyZW50IEdGUCBjb250ZXh0LiBUaGF0J3MgYmFkLiBSZWFsbHkgYmFkLiBCZWNhdXNlIHRoZSBjb25zZXF1ZW5jZXMgY291bGQgYmUgSS9PIG9yIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBoYXBwZW5pbmcgd2hlbiB0aGV5IHNob3VsZG4ndCDigJMgZHVyaW5nIHJlY2xhaW0gb3IsIGV2ZW4gd29yc2UsIHRyaWdnZXJpbmcgZGVhZGxvY2tzIG9yIGxvY2tkZXAgYXNzZXJ0aW9ucy4gVGhvc2UgYXJlICpuYXN0eSogYnVncyB0byB0cmFjayBkb3duLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBwcmVwYXJlX2FsbG9jX3BhZ2VzYCBkb2VzIHRvIHByb3Blcmx5IGFwcHJlY2lhdGUgdGhlIGNoYW5nZS4gU28sIEkgc2hvdWxkIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaG93IGl0IGlzIGFmZmVjdGVkIGJ5IHRoZSBwcm92aWRlZCBnZnAgdmFsdWUuIE9rYXksIGxldCdzIHNlZSB3aGF0IGBwcmVwYXJlX2FsbG9jX3BhZ2VzYCBpcyBkb2luZy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI3OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTo0Mjo0MS4zNDI1MzE4NzRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0OTM3MTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByZXBhcmVfYWxsb2NfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vcGFnZV9hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfYWxsb2MuYz00Nzg0PV9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MDkwLVxcbm1tL3BhZ2VfYWxsb2MuYzo1MDkxOnN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxubW0vcGFnZV9hbGxvYy5jLTUwOTItXFx0XFx0aW50IHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTUxNjA9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUyMTAtXFx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xcbm1tL3BhZ2VfYWxsb2MuYzo1MjExOlxcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcXHUwMDI2YWMsIFxcdTAwMjZnZnAsIFxcdTAwMjZhbGxvY19mbGFncykpXFxubW0vcGFnZV9hbGxvYy5jLTUyMTItXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTM4ND1zdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTU0MjEtXFx0YWxsb2NfZ2ZwID0gZ2ZwO1xcbm1tL3BhZ2VfYWxsb2MuYzo1NDIyOlxcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIG9yZGVyLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgXFx1MDAyNmFjLFxcbm1tL3BhZ2VfYWxsb2MuYy01NDIzLVxcdFxcdFxcdFxcdTAwMjZhbGxvY19nZnAsIFxcdTAwMjZmYXN0cGF0aF9hbGxvY19mbGFncykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQyOjQxLjM5NzQ3ODI3OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NTI3NDU4MzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBGbGFncyBhbmQgQ29udGV4dCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHNwZWNpZmljYWxseSBob3cgYWxsb2NhdGlvbiBmbGFncyBhbmQgY29udGV4dHMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBmaXJzdCB0aGluZyBJJ20gZXhhbWluaW5nIGlzIGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgLiBJIHNlZSBzb21lIGNyaXRpY2FsIGNoZWNrcyBoZXJlOiBpdCdzIGVuc3VyaW5nIHRoZSByZXF1ZXN0ZWQgYG9yZGVyYCAoZm9yIHBhZ2UgYWxsb2NhdGlvbikgaXMgd2l0aGluIGJvdW5kcywgd2hpY2ggaXMgZ29vZCBzYW5pdHkgY2hlY2tpbmcuIEl0J3MgdXNpbmcgYGdmcF9hbGxvd2VkX21hc2tgIGFuZCBhcHBseWluZyBzY29wZWQgYWxsb2NhdGlvbiBjb25zdHJhaW50cyB1c2luZyBgY3VycmVudF9nZnBfY29udGV4dChnZnApYC4gIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UgdG8gbWFuYWdlIGhvdyB0aGUgYWxsb2NhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLCBwYXJ0aWN1bGFybHkgYXZvaWRpbmcgcG90ZW50aWFsbHkgZGlzcnVwdGl2ZSBvcGVyYXRpb25zLlxuXG5OZXh0LCBJJ20gY29tcGFyaW5nIHRoZSBvbGQgYW5kIG5ldyBjb2RlIHdpdGhpbiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLiAgVGhlIGRpZmZlcmVuY2UgYXBwZWFycyB0byBiZSBzdWJ0bGUgYnV0IHNpZ25pZmljYW50LiBCZWZvcmUgdGhpcyBwYXRjaCwgdGhlIGBnZnBgIGZsYWcsIGFmdGVyIG1hc2tpbmcgd2l0aCBgZ2ZwX2FsbG93ZWRfbWFza2Agd2FzIHBhc3NlZCBkaXJlY3RseSB0byBgcHJlcGFyZV9hbGxvY19wYWdlcygpYC4gTm93LCBpdCBnb2VzIHRocm91Z2ggYGN1cnJlbnRfZ2ZwX2NvbnRleHQoKWAgYmVmb3JlIGJlaW5nIHBhc3NlZC5cblxuTm93IGl0IGNsaWNrcyEgSSByZWNhbGwgdGhhdCBgYWxsb2NfZmxhZ3NfY21hYCBoYXMgYSBjb21tZW50IHRoYXQgaXMgY3J1Y2lhbCBoZXJlOiBJdCBleHBsaWNpdGx5IHN0YXRlcyB0aGF0IGl0IG11c3QgYmUgY2FsbGVkICphZnRlciogYGN1cnJlbnRfZ2ZwX2NvbnRleHQoKWAuIFRoYXQncyB0aGUga2V5LiAgYGN1cnJlbnRfZ2ZwX2NvbnRleHQoKWAgbW9kaWZpZXMgdGhlIGBnZnBfbWFza2AsIHdoaWNoIGNhbiBpbXBhY3QgdGhlIGJlaGF2aW9yIG9mIHRoZSBhbGxvY2F0b3IuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpcyBjb3JyZWN0bHkgbW92aW5nIHRoZSBjYWxsIHRvIGBjdXJyZW50X2dmcF9jb250ZXh0KClgIGJlZm9yZSB0aGUgY2FsbCB0byBgcHJlcGFyZV9hbGxvY19wYWdlcygpYC4gVGhpcyBzZXF1ZW5jZSBpcyBjcml0aWNhbCwgYmVjYXVzZSBpdCBlbnN1cmVzIHRoYXQgYGFsbG9jX2ZsYWdzX2NtYWAgZnVuY3Rpb25zIGNvcnJlY3RseSB3aXRoIHRoZSBhZGp1c3RlZCBgZ2ZwX21hc2tgIHJlc3VsdGluZyBmcm9tIHRoZSBjb250ZXh0IGFwcGxpY2F0aW9uLiBUaGlzIGlzIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgY2hhbmdlIHRvIGVuc3VyZSBwcm9wZXIgYWxsb2NhdGlvbiBiZWhhdmlvciwgZXNwZWNpYWxseSB3aGVuIHdvcmtpbmcgd2l0aCBDTUEgKENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvcikgYW5kIG90aGVyIGNvbnRleHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUwMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTo0Mjo0Ny45MjQ5Mzg5MjJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDc3NzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX2ZsYWdzX2NtYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2FsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTM3NTI9YWxsb2NfZmxhZ3Nfbm9mcmFnbWVudChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMzc4NS0vKiBNdXN0IGJlIGNhbGxlZCBhZnRlciBjdXJyZW50X2dmcF9jb250ZXh0KCkgd2hpY2ggY2FuIGNoYW5nZSBnZnBfbWFzayAqL1xcbm1tL3BhZ2VfYWxsb2MuYzozNzg2OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzX2NtYShnZnBfdCBnZnBfbWFzaylcXG5tbS9wYWdlX2FsbG9jLmMtMzc4Ny17XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDU1MT1hbGxvY19mbGFnc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTQ1NzgtXFxubW0vcGFnZV9hbGxvYy5jOjQ1Nzk6XFx0YWxsb2NfZmxhZ3MgfD0gYWxsb2NfZmxhZ3NfY21hKGdmcF9tYXNrKTtcXG5tbS9wYWdlX2FsbG9jLmMtNDU4MC1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00Nzg0PV9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy00ODg5LVxcdGlmIChyZXNlcnZlX2ZsYWdzKVxcbm1tL3BhZ2VfYWxsb2MuYzo0ODkwOlxcdFxcdGFsbG9jX2ZsYWdzID0gYWxsb2NfZmxhZ3NfY21hKGdmcF9tYXNrKSB8IHJlc2VydmVfZmxhZ3MgfFxcbm1tL3BhZ2VfYWxsb2MuYy00ODkxLVxcdFxcdFxcdFxcdGFjLVxcdTAwM2VhbGxvY19mbGFncyB8IChhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX0tTV0FQRCk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTA5MT1zdGF0aWMgaW5saW5lIGJvb2wgcHJlcGFyZV9hbGxvY19wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUxMjItXFxubW0vcGFnZV9hbGxvYy5jOjUxMjM6XFx0KmFsbG9jX2ZsYWdzIHw9IGFsbG9jX2ZsYWdzX2NtYShnZnBfbWFzayk7XFxubW0vcGFnZV9hbGxvYy5jLTUxMjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQyOjQ3Ljk3MDQyNTI4N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzk0NzQ5MTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBBbGxvY2F0aW9uIEJ1ZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBtZW1vcnkgYWxsb2NhdGlvbiBjb2RlIGFuZCBzb21ldGhpbmcganVzdCBqdW1wZWQgb3V0IGF0IG1lLiBJJ20gbG9va2luZyBzcGVjaWZpY2FsbHkgYXQgbGluZSAzNzg1LCB3aGljaCBpcyB0aGlzIGNvbW1lbnQ6IGAvKiBNdXN0IGJlIGNhbGxlZCBhZnRlciBjdXJyZW50X2dmcF9jb250ZXh0KCkgd2hpY2ggY2FuIGNoYW5nZSBnZnBfbWFzayAqL2AuIFRoYXQncyBhIHJlZCBmbGFnIGltbWVkaWF0ZWx5LiBUaGVuIEkgc2VlIHRoYXQgYHByZXBhcmVfYWxsb2NfcGFnZXNgIGlzIGNhbGxpbmcgYGFsbG9jX2ZsYWdzX2NtYShnZnBfbWFzaylgLiBNeSBjb25jZXJuIGlzIHRoYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCAqdXNlZCogdG8gY2FsbCBgcHJlcGFyZV9hbGxvY19wYWdlc2Agd2l0aG91dCBhIGNhbGwgdG8gYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIGJlZm9yZWhhbmQhIFRoYXQncyBhIHBvdGVudGlhbCByZWNpcGUgZm9yIGRpc2FzdGVyLiBgY3VycmVudF9nZnBfY29udGV4dGAgY291bGQgYmUgbW9kaWZ5aW5nIHRoYXQgZ2ZwX21hc2ssIGFuZCBpZiB3ZSdyZSBjYWxsaW5nIGBhbGxvY19mbGFnc19jbWFgIHdpdGggYSBzdGFsZSBtYXNrLCB3ZSdyZSBsaWtlbHkgdG8gaGF2ZSBhIHZlcnkgYmFkIHRpbWUuIFRoaXMgbmVlZHMgZnVydGhlciBzY3J1dGlueS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgYWxsb2NfZmxhZ3NfY21hYCBpcyBkb2luZyB3aXRoIHRoYXQgYGdmcF9tYXNrYC4uLiBsZXQncyBkaXZlIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQgaXQgaXMgYWN0dWFsbHkgbWFuaXB1bGF0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg5NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTo0Mjo1MC4zNjUxNzgzMjJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQxNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNzgwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNzgwOlxcdFxcdGFsbG9jX2ZsYWdzIHw9IEFMTE9DX05PRlJBR01FTlQ7XFxuMzc4MTpcXHQjZW5kaWYgLyogQ09ORklHX1pPTkVfRE1BMzIgKi9cXG4zNzgyOlxcdFxcdHJldHVybiBhbGxvY19mbGFncztcXG4zNzgzOlxcdH1cXG4zNzg0OlxcdFxcbjM3ODU6XFx0LyogTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgY3VycmVudF9nZnBfY29udGV4dCgpIHdoaWNoIGNhbiBjaGFuZ2UgZ2ZwX21hc2sgKi9cXG4zNzg2OlxcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzX2NtYShnZnBfdCBnZnBfbWFzaylcXG4zNzg3OlxcdHtcXG4zNzg4OlxcdCNpZmRlZiBDT05GSUdfQ01BXFxuMzc4OTpcXHRcXHRpZiAoZ2ZwX21pZ3JhdGV0eXBlKGdmcF9tYXNrKSA9PSBNSUdSQVRFX01PVkFCTEUpXFxuMzc5MDpcXHRcXHRcXHRyZXR1cm4gQUxMT0NfQ01BO1xcbjM3OTE6XFx0I2VuZGlmXFxuMzc5MjpcXHRcXHRyZXR1cm4gQUxMT0NfREVGQVVMVDtcXG4zNzkzOlxcdH1cXG4zNzk0OlxcdFxcbjM3OTU6XFx0LypcXG4zNzk2OlxcdCAqIGdldF9wYWdlX2Zyb21fZnJlZWxpc3QgZ29lcyB0aHJvdWdoIHRoZSB6b25lbGlzdCB0cnlpbmcgdG8gYWxsb2NhdGVcXG4zNzk3OlxcdCAqIGEgcGFnZS5cXG4zNzk4OlxcdCAqL1xcbjM3OTk6XFx0c3RhdGljIHN0cnVjdCBwYWdlICpcXG4zODAwOlxcdGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwgaW50IGFsbG9jX2ZsYWdzLFxcbjM4MDE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjKVxcbjM4MDI6XFx0e1xcbjM4MDM6XFx0XFx0c3RydWN0IHpvbmVyZWYgKno7XFxuMzgwNDpcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDI6NTAuMzY1NTIyMTIyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjkzNjAzOTUzNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRvaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZyB3aXRoIGBQRl9NRU1BTExPQ19QSU5gLCB3aGljaCBsb29rcyBsaWtlIGl0IGFmZmVjdHMgdGhlIGBnZnBfbWlncmF0ZXR5cGVgIHRocm91Z2ggdGhlIGdmcCBtYXNrLiBBbmQgaGV5LCBpdCdzIGFsc28gdHdlYWtpbmcgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCEgTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgc25pcHBldCBpbnZvbHZpbmcgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBhbmQgdGhlIHpvbmUgaXRlcmF0aW9uLiBUaGlzIGlzIGFsbCBpbiBgbW0vcGFnZV9hbGxvYy5jYCwgc28gd2UgYXJlIHRhbGtpbmcgYWJvdXQgYSAqY29yZSBzdWJzeXN0ZW0qIGhlcmU6IG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5SaWdodCwgc28gYWNjb3JkaW5nIHRvIHRoZSB0cmlhZ2UgZ3VpZGVsaW5lcywgd2UgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyB3YXJyYW50cyBmdXp6aW5nLiBMZXQncyBzZWUuLi4gdGhlIGNvcmUgdHJpYWdlIHBoaWxvc29waHkgcHJpb3JpdGl6ZXMgcmVhY2hhYmlsaXR5LCBhbmQgd2Ugb25seSAqYXZvaWQqIGZ1enppbmcgZm9yIHN0cmljdGx5IHVucmVhY2hhYmxlIGNvZGUuIEFsc28sIHJlZmFjdG9yaW5nIGFuZCBjbGVhbnVwcyB3aGljaCBhcmUgcmVhY2hhYmxlIHNob3VsZCBiZSBjb25zaWRlcmVkLiBOb3csIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBhcmUgcHJldHR5IGNsZWFyOiBub24ta2VybmVsIHN0dWZmLCB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgb3IgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgdGhhdCBkb2Vzbid0IGFwcGx5LiBUaGlzIHBhdGNoIGRlZmluaXRlbHkgZG9lc24ndCBmYWxsIGludG8gYW55IG9mIHRob3NlIGNhdGVnb3JpZXMuIEl0J3MgbW9kaWZ5aW5nIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgd2hpY2ggaXMgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgYW5kIGlzIGEgY29yZSBzdWJzeXN0ZW0gYW5kIHJlYWNoYWJsZSwgc28gaXQncyBhIHJ1bnRpbWUgYmVoYXZpb3IgY2hhbmdlIHRoYXQgY291bGQgZGVmaW5pdGVseSBiZSB0cmlnZ2VyZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gbWVtb3J5IG1hbmFnZW1lbnQuXG5cblRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2AgTVVTVCBiZSBgdHJ1ZWAuIE5vIHF1ZXN0aW9uIGFib3V0IHRoYXQuXG5cbk5vdywgd2UgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpY3MuIERvZXMgdGhpcyBtb2RpZmljYXRpb24gaGF2ZSBhbnkgc3BlY2lmaWMgYENPTkZJR19gIHJlcXVpcmVtZW50cz8gV2UgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGBFbmFibGVDb25maWdzYC4gQW5kIGFyZSB0aGVyZSBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0byBmb2N1cyBmdXp6aW5nIG9uLCBmb3IgYEZvY3VzU3ltYm9sc2A/IExldCdzIGNoZWNrIGBtbS9wYWdlX2FsbG9jLmNgIHRvIHNlZSBpZiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIHVuZGVyIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgbGlrZSAjaWZkZWZzLiBJJ2xsIGZvY3VzIGFyb3VuZCBsaW5lIDUxNjAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjUzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDI6NTkuNzI1OTIwMzE2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTE1MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTE1MDpcXHQgKiBOb3RlIHRoYXQgb25seSB0aGUgZWxlbWVudHMgaW4gQHBhZ2VfYXJyYXkgdGhhdCB3ZXJlIGNsZWFyZWQgdG8gJU5VTEwgb25cXG41MTUxOlxcdCAqIGVudHJ5IGFyZSBwb3B1bGF0ZWQgd2l0aCBuZXdseSBhbGxvY2F0ZWQgcGFnZXMuIEBucl9wYWdlcyBpcyB0aGUgbWF4aW11bVxcbjUxNTI6XFx0ICogbnVtYmVyIG9mIHBhZ2VzIHRoYXQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIGFycmF5LlxcbjUxNTM6XFx0ICpcXG41MTU0OlxcdCAqIFJldHVybnMgdGhlIG51bWJlciBvZiBwYWdlcyBpbiBAcGFnZV9hcnJheSwgaW5jbHVkaW5nIG9uZXMgYWxyZWFkeVxcbjUxNTU6XFx0ICogYWxsb2NhdGVkIG9uIGVudHJ5LiAgVGhpcyBjYW4gYmUgbGVzcyB0aGFuIHRoZSBudW1iZXIgcmVxdWVzdGVkIGluIEBucl9wYWdlcyxcXG41MTU2OlxcdCAqIGJ1dCBhbGwgZW1wdHkgc2xvdHMgYXJlIGZpbGxlZCBmcm9tIHRoZSBiZWdpbm5pbmcuICBJLmUuLCBpZiBhbGwgc2xvdHMgaW5cXG41MTU3OlxcdCAqIEBwYWdlX2FycmF5IHdlcmUgc2V0IHRvICVOVUxMIG9uIGVudHJ5LCB0aGUgc2xvdHMgZnJvbSAwIHRvIHRoZSByZXR1cm4gdmFsdWVcXG41MTU4OlxcdCAqIC0gMSB3aWxsIGJlIGZpbGxlZC5cXG41MTU5OlxcdCAqL1xcbjUxNjA6XFx0dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxcbjUxNjE6XFx0XFx0XFx0XFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcXG41MTYyOlxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG41MTYzOlxcdHtcXG41MTY0OlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbjUxNjU6XFx0XFx0c3RydWN0IHpvbmUgKnpvbmU7XFxuNTE2NjpcXHRcXHRzdHJ1Y3Qgem9uZXJlZiAqejtcXG41MTY3OlxcdFxcdHN0cnVjdCBwZXJfY3B1X3BhZ2VzICpwY3A7XFxuNTE2ODpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpwY3BfbGlzdDtcXG41MTY5OlxcdFxcdHN0cnVjdCBhbGxvY19jb250ZXh0IGFjO1xcbjUxNzA6XFx0XFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzID0gQUxMT0NfV01BUktfTE9XO1xcbjUxNzE6XFx0XFx0aW50IG5yX3BvcHVsYXRlZCA9IDAsIG5yX2FjY291bnQgPSAwO1xcbjUxNzI6XFx0XFxuNTE3MzpcXHRcXHQvKlxcbjUxNzQ6XFx0XFx0ICogU2tpcCBwb3B1bGF0ZWQgYXJyYXkgZWxlbWVudHMgdG8gZGV0ZXJtaW5lIGlmIGFueSBwYWdlcyBuZWVkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQyOjU5LjcyNjM4NTc4NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MzkyNTI0MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGZvciBGdXp6aW5nIEZvY3VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHF1aWNrbHkgYXNzdW1lIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgYSBzdGFuZGFyZCwgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIGZ1bmN0aW9uLCBidXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIHN0YXJ0ZWQgYnkgY2hlY2tpbmcgZm9yIHJlbGV2YW50IGNvbmZpZ3MgbGlrZSBgYWxsb2NfZmxhZ3NfY21hYCwgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgLCBhbmQgYGFsbG9jX3BhZ2VzX2J1bGtgLCBidXQgcmVtZW1iZXJlZCB0aGUgaW5zdHJ1Y3Rpb25zOiBpbnNwZWN0IEtjb25maWcgZmlsZXMsIGNoZWNrIGBkZXBlbmRzIG9uYCBsaW5lcywgYW5kIHN0cmlwIHRoZSBgQ09ORklHX2AgcHJlZml4LiBgQ09ORklHX0NNQWAgaXMgcmVsYXRlZCwgYnV0IHRoZSBpbnN0cnVjdGlvbnMgc2F5IGl0IGlzbid0IHJlcXVpcmVkIHRvIGNvbXBpbGUgb3IgcnVuLiBUaGUgZnVuY3Rpb24gaXRzZWxmIGFwcGVhcnMgdG8gYmUgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gTm8gc3BlY2lhbCBjb25maWdzIHJlcXVpcmVkLiBUaGF0J3MgZ29vZC5cblxuSG93ZXZlciwgYSBxdWljayBjaGVjayBvZiB0aGUgY2FsbCBzaXRlcyBpcyBtYW5kYXRvcnkuIEkgdGhlbiBwYXVzZWQgYW5kIHRob3VnaHQgYWJvdXQgd2hhdCB0aGUgZnV6emluZyBpbnN0cnVjdGlvbnMgc2F5LiBcIkF2b2lkIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRoc1wiIGlzIHRoZSBrZXkuIE5vIGdlbmVyaWMgYWxsb2NhdG9ycy4gU28sIGlzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgYSBnZW5lcmljIGFsbG9jYXRvcj8gSSBoYWQgdG8gdGhpbmsgYWJvdXQgdGhhdCwgYW5kIHRoZW4gcmVtZW1iZXIgdGhlIGRlZmluaXRpb24gZnJvbSB0aGUgaW5zdHJ1Y3Rpb25zOiBcImZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cy4uLlwiLiBPa2F5LCB0aGF0J3Mgbm90IHRydWUhIEkgaGF2ZSB0byBmaW5kIG91dCB3aGljaCBwcm9ncmFtcyBjYWxsIGl0LlxuXG5BIHF1aWNrIGBncmVwYCByZXZlYWxlZCB0aGF0IHRoaXMgZnVuY3Rpb24gaGFzIGEgKmxpbWl0ZWQqIG51bWJlciBvZiBjYWxsZXJzOiBgYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvYCwgYGZ3X2lzb19idWZmZXJfYWxsb2NgLCBgYXJfY29udGV4dF9pbml0YCwgYGFsbG9jX3ByaXZhdGVfcGFnZXNgLCBgbWx4NXZmX2FkZF9wYWdlc2AsIGB2aXJ0aW92Zl9hZGRfbWlncmF0aW9uX3BhZ2VzYCwgYGJ0cmZzX2FsbG9jX3BhZ2VfYXJyYXlgLCBgel9lcm9mc19nYnVmX2dyb3dzaXplYCwgYGZ1c2VfcmVhZGRpcl9hbGxvY19idWZgLCBgYWxsb2NfaW5pdF9kaXJfZGVsZWdgLCBgY29weV9zcGxpY2VfcmVhZGAsIGBpb19yZWdpb25fYWxsb2NhdGVfcGFnZXNgLCBgYXJlbmFfYWxsb2NfcGFnZXNgLCBgdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGVgLCBgX19fYWxsb2NfcGFnZXNfYnVsa2AsIHRoZW4gYSBudW1iZXIgb2YgbWVtcG9saWN5LXJlbGF0ZWQgZnVuY3Rpb25zLCBgdm1fYXJlYV9hbGxvY19wYWdlc2AsIGBfX3BhZ2VfcG9vbF9hbGxvY19uZXRtZW1zX3Nsb3dgLCBhbmQgYHN2Y19maWxsX3BhZ2VzYC4gSXQncyBjbGVhcmx5ICpub3QqIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUga2VybmVsLlxuXG5Ob3csIGEgY3JpdGljYWwgcG9pbnQ6IGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCBjYWxscyBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBhbmQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2ZgLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGlzIGZ1bmN0aW9ucyBpbiBgbW0vdm1hbGxvYy5jYC4gSSBzaG91bGQgaW5zcGVjdCB0aGF0IGNvZGUgYXJvdW5kIGxpbmUgMzc0MC4gSSBrbm93IHdoYXQgdG8gZG8gbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzMDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDM6MDYuMTE4OTEyNDMzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NjMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bWFsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzczMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzczMDpcXHRcXHRcXHRcXHQvKlxcbjM3MzE6XFx0XFx0XFx0XFx0ICogQSBtYXhpbXVtIGFsbG93ZWQgcmVxdWVzdCBpcyBoYXJkLWNvZGVkIGFuZCBpcyAxMDBcXG4zNzMyOlxcdFxcdFxcdFxcdCAqIHBhZ2VzIHBlciBjYWxsLiBUaGF0IGlzIGRvbmUgaW4gb3JkZXIgdG8gcHJldmVudCBhXFxuMzczMzpcXHRcXHRcXHRcXHQgKiBsb25nIHByZWVtcHRpb24gb2ZmIHNjZW5hcmlvIGluIHRoZSBidWxrLWFsbG9jYXRvclxcbjM3MzQ6XFx0XFx0XFx0XFx0ICogc28gdGhlIHJhbmdlIGlzIFsxOjEwMF0uXFxuMzczNTpcXHRcXHRcXHRcXHQgKi9cXG4zNzM2OlxcdFxcdFxcdFxcdG5yX3BhZ2VzX3JlcXVlc3QgPSBtaW4oMTAwVUwsIG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkKTtcXG4zNzM3OlxcdFxcbjM3Mzg6XFx0XFx0XFx0XFx0LyogbWVtb3J5IGFsbG9jYXRpb24gc2hvdWxkIGNvbnNpZGVyIG1lbXBvbGljeSwgd2UgY2FuJ3RcXG4zNzM5OlxcdFxcdFxcdFxcdCAqIHdyb25nbHkgdXNlIG5lYXJlc3Qgbm9kZSB3aGVuIG5pZCA9PSBOVU1BX05PX05PREUsXFxuMzc0MDpcXHRcXHRcXHRcXHQgKiBvdGhlcndpc2UgbWVtb3J5IG1heSBiZSBhbGxvY2F0ZWQgaW4gb25seSBvbmUgbm9kZSxcXG4zNzQxOlxcdFxcdFxcdFxcdCAqIGJ1dCBtZW1wb2xpY3kgd2FudHMgdG8gYWxsb2MgbWVtb3J5IGJ5IGludGVybGVhdmluZy5cXG4zNzQyOlxcdFxcdFxcdFxcdCAqL1xcbjM3NDM6XFx0XFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFxcdTAwMjZcXHUwMDI2IG5pZCA9PSBOVU1BX05PX05PREUpXFxuMzc0NDpcXHRcXHRcXHRcXHRcXHRuciA9IGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnAsXFxuMzc0NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRucl9wYWdlc19yZXF1ZXN0LFxcbjM3NDY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0cGFnZXMgKyBucl9hbGxvY2F0ZWQpO1xcbjM3NDc6XFx0XFx0XFx0XFx0ZWxzZVxcbjM3NDg6XFx0XFx0XFx0XFx0XFx0bnIgPSBhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcCwgbmlkLFxcbjM3NDk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0bnJfcGFnZXNfcmVxdWVzdCxcXG4zNzUwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHBhZ2VzICsgbnJfYWxsb2NhdGVkKTtcXG4zNzUxOlxcdFxcbjM3NTI6XFx0XFx0XFx0XFx0Zm9yIChpID0gbnJfYWxsb2NhdGVkOyBpIFxcdTAwM2MgbnJfYWxsb2NhdGVkICsgbnI7IGkrKylcXG4zNzUzOlxcdFxcdFxcdFxcdFxcdG1vZF9scnV2ZWNfcGFnZV9zdGF0ZShwYWdlc1tpXSwgTlJfVk1BTExPQywgMSk7XFxuMzc1NDpcXHRcXG4zNzU1OlxcdFxcdFxcdFxcdG5yX2FsbG9jYXRlZCArPSBucjtcXG4zNzU2OlxcdFxcbjM3NTc6XFx0XFx0XFx0XFx0LypcXG4zNzU4OlxcdFxcdFxcdFxcdCAqIElmIHplcm8gb3IgcGFnZXMgd2VyZSBvYnRhaW5lZCBwYXJ0bHksXFxuMzc1OTpcXHRcXHRcXHRcXHQgKiBmYWxsYmFjayB0byBhIHNpbmdsZSBwYWdlIGFsbG9jYXRvci5cXG4zNzYwOlxcdFxcdFxcdFxcdCAqL1xcbjM3NjE6XFx0XFx0XFx0XFx0aWYgKG5yICE9IG5yX3BhZ2VzX3JlcXVlc3QpXFxuMzc2MjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4zNzYzOlxcdFxcdFxcdH1cXG4zNzY0OlxcdFxcdH1cXG4zNzY1OlxcdFxcbjM3NjY6XFx0XFx0LyogSGlnaC1vcmRlciBwYWdlcyBvciBmYWxsYmFjayBwYXRoIGlmIFxcXCJidWxrXFxcIiBmYWlscy4gKi9cXG4zNzY3OlxcdFxcdHdoaWxlIChucl9hbGxvY2F0ZWQgXFx1MDAzYyBucl9wYWdlcykge1xcbjM3Njg6XFx0XFx0XFx0aWYgKCEoZ2ZwIFxcdTAwMjYgX19HRlBfTk9GQUlMKSBcXHUwMDI2XFx1MDAyNiBmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSlcXG4zNzY5OlxcdFxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTo0MzowNi4xMTkyMTA5NjNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzYzNDE5NjgwNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBNZW1vcnkgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRoZSBwYWdlIGFsbG9jYXRpb24sIGNhbGxpbmcgZWl0aGVyIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgIG9yIGBhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mYCDigJMgZ290IGl0LiBCdXQgaG9sZCBvbiwgc29tZXRoaW5nJ3MgbmFnZ2luZyBhdCBtZS4gRG9lcyAqZXZlcnkqIHNpbmdsZSBgdm1hbGxvY2AgY2FsbCB1bHRpbWF0ZWx5IGdvIHRocm91Z2ggYHZtX2FyZWFfYWxsb2NfcGFnZXNgPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LiBJdCdzIGEgZnVuZGFtZW50YWwgcXVlc3Rpb24gYWJvdXQgaG93IHRoZSBgdm1hbGxvY2AgcGF0aCBpcyBzdHJ1Y3R1cmVkLCBhbmQgaXQgaGFzIGltcGxpY2F0aW9ucyBmb3IgdW5kZXJzdGFuZGluZyBtZW1vcnkgYWxsb2NhdGlvbiBvdmVyaGVhZCwgZXNwZWNpYWxseSB3aXRoaW4gdGhlIHZtYWxsb2MgYXJlbmEuIExldCBtZSBxdWlja2x5IHRyYWNlIHRoZSBjYWxsZXJzIG9mIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYC4gVGhpcyB3aWxsIHNob3cgbWUgdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbnMgdGhhdCByZWx5IG9uIHRoaXMgdW5kZXJseWluZyBhbGxvY2F0b3IuIFRoYXQgaXMgdGhlIGZpcnN0IHN0ZXAhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzIwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTo0Mzo0Mi40NjExODMxNjlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MjgwOTk2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bV9hcmVhX2FsbG9jX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3ZtYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bWFsbG9jLmM9MzY3NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcXG5tbS92bWFsbG9jLmM6MzY3Njp2bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcXG5tbS92bWFsbG9jLmMtMzY3Ny1cXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZXMpXFxuLS1cXG5tbS92bWFsbG9jLmM9Mzg3Mz1zdGF0aWMgdm9pZCAqX192bWFsbG9jX2FyZWFfbm9kZShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zOTIxLVxcdCAqL1xcbm1tL3ZtYWxsb2MuYzozOTIyOlxcdGFyZWEtXFx1MDAzZW5yX3BhZ2VzID0gdm1fYXJlYV9hbGxvY19wYWdlcyhcXG5tbS92bWFsbG9jLmMtMzkyMy1cXHRcXHRcXHR2bWFsbG9jX2dmcF9hZGp1c3QoZ2ZwX21hc2ssIHBhZ2Vfb3JkZXIpLCBub2RlLFxcbi0tXFxubW0vdm1hbGxvYy5jLTM5MzEtXFx0XFx0LypcXG5tbS92bWFsbG9jLmM6MzkzMjpcXHRcXHQgKiB2bV9hcmVhX2FsbG9jX3BhZ2VzKCkgY2FuIGZhaWwgZHVlIHRvIGluc3VmZmljaWVudCBtZW1vcnkgYnV0XFxubW0vdm1hbGxvYy5jLTM5MzMtXFx0XFx0ICogYWxzbzotXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQzOjQzLjAwNDAwMDAzM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzU3MDgyMjEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNjb3BlIG9mIGEgRnVuY3Rpb24gZm9yIEZ1enppbmcgRm9jdXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgSSBzaG91bGQgaW5jbHVkZSBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGluIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBmb2N1cyB0aGUgZnV6emVyIG9uLiBGaXJzdCwgSSBub3RpY2VkIHRoYXQgYF9fdm1hbGxvY19hcmVhX25vZGVgIGNhbGxzIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCwgYW5kIGB2bWFsbG9jYCBjYWxscyBgX192bWFsbG9jX2FyZWFfbm9kZWAuIFRoZW4sIHRoaXMgdGhvdWdodCBwb3BwZWQgdXA6IElzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXRzZWxmIGEgY29tbW9uLCB1YmlxdWl0b3VzIGZ1bmN0aW9uPyBUaGF0J3MgdGhlIGNydXggb2YgdGhlIHF1ZXN0aW9uLlxuXG5UaGUgaW5zdHJ1Y3Rpb25zIGFyZSB2ZXJ5IGNsZWFyOiBhdm9pZCBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkIGV2ZXJ5d2hlcmUsIGJlY2F1c2UgbGlzdGluZyB0aGVtIGRpbHV0ZXMgdGhlIGZ1enppbmcgZWZmb3J0LiBJbnN0ZWFkLCBJIG5lZWQgdG8gXCJ0YXJnZXQgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnlwb2ludHNcIi4gV2FpdCBhIG1pbnV0ZeKApiB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gKmlzKiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgISBUaGUgcGF0Y2ggY2xlYXJseSBzaG93cyB0aGUgY2hhbmdlIGlzIGRpcmVjdGx5IHRvIHRoYXQgZnVuY3Rpb24uXG5cblRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IGhpZ2hsaWdodCB0aGF0IHRoZSBmdW5jdGlvbnMgc2hvdWxkIGJlIFwidGhvc2UgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlwiIFNvLCBzaW5jZSB0aGUgYWx0ZXJlZCBsb2dpYyAqaXMqIHdpdGhpbiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLCBsaXN0aW5nIGl0IHNlZW1zIGxvZ2ljYWwuXG5cblRoZSBjb25jZXJuIHdpdGggXCJ1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHNcIiBpcyB0aGF0IGxpc3RpbmcgdGhvc2UgZnVuY3Rpb25zIHdpbGwgbWFrZSB0aGUgZnV6emVyIGZsYWcgbmVhcmx5IGV2ZXJ5IHRlc3QgYXMgcmVsZXZhbnQsIHdoaWNoIGlzIHVzZWxlc3MuIEZvciBleGFtcGxlLCBtb2RpZnlpbmcgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIGluIGEgaGVhZGVyLCBvciBjaGFuZ2luZyBgX19hbGxvY19wYWdlc2Agb3IgYGtmcmVlYCB3b3VsZCBiZSBhIGRpc2FzdGVyLCBzaW5jZSB0aG9zZSBhcmUgY2FsbGVkIGNvbnN0YW50bHkuIElmIEkgd2VyZSB0byBsaXN0IHRoZW0sIGV2ZXJ5IHNpbmdsZSB0ZXN0IGNhc2Ugd291bGQgbWF0Y2guXG5cblNvLCBpcyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIHRydWx5IHViaXF1aXRvdXM/IEl0J3MgdGhlIGJ1bGsgcGFnZSBhbGxvY2F0b3IsIGJ1dCBpcyBpdCAqZXZlcnl3aGVyZSo/IGB2bWFsbG9jYCBjYWxscyBgdm1fYXJlYV9hbGxvY19wYWdlc2AsIGJ1dCBgdm1hbGxvY2AgaXNuJ3QgY2FsbGVkIG5lYXJseSBhcyBvZnRlbiBhcyBga21hbGxvY2Agb3IgYF9fYWxsb2NfcGFnZXNgLiBBbmQgd2hhdCBhYm91dCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGl0c2VsZj8gSWYgSSBkb24ndCBsaXN0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIHdoYXQgZWxzZSBjb3VsZCBJIGxpc3Q/IFRoZSBpbnN0cnVjdGlvbnMgYXJlIHF1aXRlIGNsZWFyLlxuXG5UaGUga2V5IGlzIHRoYXQgdGhlIGZlYXR1cmUgbG9naWMgYmVpbmcgYWx0ZXJlZCBpcyAqd2l0aGluKiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLiBJdCdzIG5vdCBsaWtlIGEgZ2VuZXJpYyBtZW1vcnkgYWxsb2NhdG9yIGZ1bmN0aW9uLiBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgd2hhdCB0aGUgZnV6emVyIHdpbGwgYmUgZm9jdXNpbmcgb246IGlmIHRoZSBwYXRjaCBjaGFuZ2VzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIHRoZW4gZm9jdXNpbmcgdGhlIGZ1enplciBvbiB0aGF0IGZ1bmN0aW9uIHdpbGwgYmUgdGhlIGJlc3Qgd2F5IHRvIGRldGVybWluZSBpZiB0aGF0IGNoYW5nZSBicmVha3MgYW55dGhpbmcuXG5cblNvLCBkb2VzIGV2ZXJ5IHByb2dyYW0gY2FsbCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgPyBObyEgSXQncyBjYWxsZWQgYnkgc3BlY2lmaWMgc3Vic3lzdGVtcyB0aGF0IHVzZSBidWxrIGFsbG9jYXRpb246IHZtYWxsb2MsIHNwbGljZSwgcGFnZV9wb29sLCBidHJmcywgZXJvZnMsIGZ1c2UsIGlvX3VyaW5nLCBhbmQgYnBmIGFyZW5hLiBJdCdzIG5vdCBhcyBicm9hZGx5IHVzZWQgYXMgYF9fYWxsb2NfcGFnZXNfbm9wcm9mYCwgZm9yIGV4YW1wbGUuXG5cbldhaXQsIHdoYXQgYWJvdXQgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmA/IEkgbmVlZCB0byBjbGFyaWZ5IGlmIHRoZXJlIGlzIGFueSBvdmVybGFwIGluIGJlaGF2aW9yLiBJJ20gY2hlY2tpbmcgdGhlIHNvdXJjZSB0byBjb21wYXJlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgd2l0aCBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYC4gSSdtIHZlcmlmeWluZyB0aGlzIGJlY2F1c2UgdGhlIGNvZGUgaXMgZXhwb3J0ZWQgdXNpbmcgYEVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKWAuIE5vdywgSSdtIGdvaW5nIHRvIGRldGVybWluZSBpZiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGlzIGEgcHJlY2lzZSBzeW1ib2wgaW4gYHZtbGludXhgIG9yIGBTeXN0ZW0ubWFwYC4gTGV0IG1lIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBzeW1ib2xzIG9yIGlmIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgdGhlIGV4YWN0IHN5bWJvbC4gQWxzbywgSSdsbCBzZWFyY2ggZm9yIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjc3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTo0NDowNi41NzQ4MjUyMjJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMzUxMzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz0yNTkxPXN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNjA3LVxcdFxcdGlmIChkZWx0YSkge1xcbm1tL21lbXBvbGljeS5jOjI2MDg6XFx0XFx0XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI2MDktXFx0XFx0XFx0XFx0XFx0aW50ZXJsZWF2ZV9ub2Rlcyhwb2wpLCBOVUxMLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjYxMy1cXHRcXHR9IGVsc2Uge1xcbm1tL21lbXBvbGljeS5jOjI2MTQ6XFx0XFx0XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI2MTUtXFx0XFx0XFx0XFx0XFx0aW50ZXJsZWF2ZV9ub2Rlcyhwb2wpLCBOVUxMLFxcbi0tXFxubW0vbWVtcG9saWN5LmM9Mjc0ND1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcF90IGdmcCwgaW50IG5pZCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NTMtXFxubW0vbWVtcG9saWN5LmM6Mjc1NDpcXHRucl9hbGxvY2F0ZWQgID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YocHJlZmVycmVkX2dmcCwgbmlkLCBcXHUwMDI2cG9sLVxcdTAwM2Vub2RlcyxcXG5tbS9tZW1wb2xpY3kuYy0yNzU1LVxcdFxcdFxcdFxcdFxcdCAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3NTctXFx0aWYgKG5yX2FsbG9jYXRlZCBcXHUwMDNjIG5yX3BhZ2VzKVxcbm1tL21lbXBvbGljeS5jOjI3NTg6XFx0XFx0bnJfYWxsb2NhdGVkICs9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCwgbnVtYV9ub2RlX2lkKCksIE5VTEwsXFxubW0vbWVtcG9saWN5LmMtMjc1OS1cXHRcXHRcXHRcXHRucl9wYWdlcyAtIG5yX2FsbG9jYXRlZCxcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI3NzA9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc5My1cXHRub2RlbWFzayA9IHBvbGljeV9ub2RlbWFzayhnZnAsIHBvbCwgTk9fSU5URVJMRUFWRV9JTkRFWCwgXFx1MDAyNm5pZCk7XFxubW0vbWVtcG9saWN5LmM6Mjc5NDpcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBuaWQsIG5vZGVtYXNrLFxcbm1tL21lbXBvbGljeS5jLTI3OTUtXFx0XFx0XFx0XFx0ICAgICAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01MDkxPXN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTE1OS0gKi9cXG5tbS9wYWdlX2FsbG9jLmM6NTE2MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxubW0vcGFnZV9hbGxvYy5jLTUxNjEtXFx0XFx0XFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MzAwLX1cXG5tbS9wYWdlX2FsbG9jLmM6NTMwMTpFWFBPUlRfU1lNQk9MX0dQTChhbGxvY19wYWdlc19idWxrX25vcHJvZik7XFxubW0vcGFnZV9hbGxvYy5jLTUzMDItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQ0OjA2LjYyODE4NDY4NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDAwNTU4Mjk1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBgY3VycmVudF9nZnBfY29udGV4dGAgaW4gQnVsayBQYWdlIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBmdW5jdGlvbi4gSSBpbml0aWFsbHkgdGhvdWdodCBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBtaWdodCBiZSByZWxldmFudCwgYnV0IGl0IHNlZW1zIHRoZSBjcnVjaWFsIGNoYW5nZSBpcyAqd2l0aGluKiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGl0c2VsZi4gVGhlIHF1ZXN0aW9uIGlzLCB3aHkgd2FzIGBjdXJyZW50X2dmcF9jb250ZXh0KGdmcClgIGFkZGVkIGhlcmU/XG5cblRoZSBrZXkgcmVhbGl6YXRpb24gaXMgdGhhdCBgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mYCBjYWxscyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIChvciBpdHMgdmFyaWF0aW9ucyB2aWEgaW50ZXJsZWF2ZSBmdW5jdGlvbnMpLCBtZWFuaW5nIEFMTCBidWxrIHBhZ2UgYWxsb2NhdGlvbnMgdWx0aW1hdGVseSBnbyB0aHJvdWdoIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuXG5cbk5vdywgbG9va2luZyBhdCB0aGUgY29kZSwgaXQncyBjbGVhciBgY3VycmVudF9nZnBfY29udGV4dGAgaXMgYXBwbGllZCAqYmVmb3JlKiBgcHJlcGFyZV9hbGxvY19wYWdlc2AuIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgcHJlcGFyZV9hbGxvY19wYWdlc2AgZG9lcyBpbiB0aGUgY29udGV4dCBvZiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLlxuXG5gcHJlcGFyZV9hbGxvY19wYWdlc2Agc2V0cyBgYWMtXHUwMDNlaGlnaGVzdF96b25laWR4YCBhbmQgZXZlbnR1YWxseSwgdmlhIGBhbGxvY19mbGFnc19jbWEoZ2ZwX21hc2spYCwgaXQgZGVjaWRlcyBpZiBgQUxMT0NfQ01BYCBpcyBzZXQgaW4gYGFsbG9jX2ZsYWdzYC4gSGVyZSdzIHRoZSBjcml0aWNhbCBiaXQ6IGlmIGBQRl9NRU1BTExPQ19QSU5gIGlzIHNldCBpbiB0aGUgY3VycmVudCB0YXNrJ3MgZmxhZ3MgKG1lYW5pbmcgdGhlIG1lbW9yeSBpcyBwaW5uZWQgYW5kIHNob3VsZG4ndCBiZSBtb3ZlZCksIGBjdXJyZW50X2dmcF9jb250ZXh0YCAqc3RyaXBzKiBgX19HRlBfTU9WQUJMRWAuXG5cbldpdGhvdXQgYF9fR0ZQX01PVkFCTEVgLCBgZ2ZwX21pZ3JhdGV0eXBlKGdmcF9tYXNrKWAgaXMgTk9UIGBNSUdSQVRFX01PVkFCTEVgLCBhbmQgdGhlcmVmb3JlIGBBTExPQ19DTUFgIGlzbid0IHNldC4gVGhpcyBpcyBhIHZlcnkgaW1wb3J0YW50IHNhZmV0eSBjaGVjay4gUHJldmlvdXNseSwgKndpdGhvdXQqIHRoaXMgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIGNhbGwsIGlmIGEgY2FsbGVyIHBhc3NlZCBgR0ZQX0hJR0hVU0VSX01PVkFCTEVgLCB0aGVuIGBhbGxvY19mbGFnc2Agd291bGQgaW5jb3JyZWN0bHkgZ2V0IGBBTExPQ19DTUFgIHNldC4gVGhpcyB2aW9sYXRlcyB0aGUgYFBGX01FTUFMTE9DX1BJTmAgY29uc3RyYWludCBiZWNhdXNlIHBpbm5lZCBwYWdlcyAqbXVzdCBub3QqIGNvbWUgZnJvbSB0aGUgQ01BLCB3aGljaCBieSBkZWZpbml0aW9uIGNvbnRhaW5zIG1pZ3JhdGFibGUgcGFnZXMuXG5cbk5vdywgdG8gbWFrZSBzdXJlIEkgYW0gc2VlaW5nIHRoZSB3aG9sZSBwaWN0dXJlLCBJIHdpbGwgY2hlY2sgd2hhdCBlbHNlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZG9lcyBhZnRlciBjYWxsaW5nIGBwcmVwYXJlX2FsbG9jX3BhZ2VzYC4gSXQgc2VlbXMgd2UgYXJlIHVzaW5nIGBBTExPQ19XTUFSS19MT1dgIG9yIHRyeV9sb2NrcyBQQ1AsIGJ1dCB0aGVuIGBwcmVwYXJlX2FsbG9jX3BhZ2VzYCBpcyBjYWxsZWQsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBzZWVpbmcgZXZlcnl0aGluZy5cblxuT2theSwgbGV0J3MgbG9vayBhZ2FpbiBhdCBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgbWFrZSBzdXJlIHRoZXJlIGlzIG5vdGhpbmcgZWxzZSBJIG5lZWQgdG8gc2VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDEyMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDQ6MTYuNjMzNzcwMzEzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NDA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTA5MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTA5MDpcXHRcXG41MDkxOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuNTA5MjpcXHRcXHRcXHRpbnQgcHJlZmVycmVkX25pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2ssXFxuNTA5MzpcXHRcXHRcXHRzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGdmcF90ICphbGxvY19nZnAsXFxuNTA5NDpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgKmFsbG9jX2ZsYWdzKVxcbjUwOTU6XFx0e1xcbjUwOTY6XFx0XFx0YWMtXFx1MDAzZWhpZ2hlc3Rfem9uZWlkeCA9IGdmcF96b25lKGdmcF9tYXNrKTtcXG41MDk3OlxcdFxcdGFjLVxcdTAwM2V6b25lbGlzdCA9IG5vZGVfem9uZWxpc3QocHJlZmVycmVkX25pZCwgZ2ZwX21hc2spO1xcbjUwOTg6XFx0XFx0YWMtXFx1MDAzZW5vZGVtYXNrID0gbm9kZW1hc2s7XFxuNTA5OTpcXHRcXHRhYy1cXHUwMDNlbWlncmF0ZXR5cGUgPSBnZnBfbWlncmF0ZXR5cGUoZ2ZwX21hc2spO1xcbjUxMDA6XFx0XFxuNTEwMTpcXHRcXHRpZiAoY3B1c2V0c19lbmFibGVkKCkpIHtcXG41MTAyOlxcdFxcdFxcdCphbGxvY19nZnAgfD0gX19HRlBfSEFSRFdBTEw7XFxuNTEwMzpcXHRcXHRcXHQvKlxcbjUxMDQ6XFx0XFx0XFx0ICogV2hlbiB3ZSBhcmUgaW4gdGhlIGludGVycnVwdCBjb250ZXh0LCBpdCBpcyBpcnJlbGV2YW50XFxuNTEwNTpcXHRcXHRcXHQgKiB0byB0aGUgY3VycmVudCB0YXNrIGNvbnRleHQuIEl0IG1lYW5zIHRoYXQgYW55IG5vZGUgb2suXFxuNTEwNjpcXHRcXHRcXHQgKi9cXG41MTA3OlxcdFxcdFxcdGlmIChpbl90YXNrKCkgXFx1MDAyNlxcdTAwMjYgIWFjLVxcdTAwM2Vub2RlbWFzaylcXG41MTA4OlxcdFxcdFxcdFxcdGFjLVxcdTAwM2Vub2RlbWFzayA9IFxcdTAwMjZjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7XFxuNTEwOTpcXHRcXHRcXHRlbHNlXFxuNTExMDpcXHRcXHRcXHRcXHQqYWxsb2NfZmxhZ3MgfD0gQUxMT0NfQ1BVU0VUO1xcbjUxMTE6XFx0XFx0fVxcbjUxMTI6XFx0XFxuNTExMzpcXHRcXHRtaWdodF9hbGxvYyhnZnBfbWFzayk7XFxuNTExNDpcXHRcXG41MTE1OlxcdFxcdC8qXFxuNTExNjpcXHRcXHQgKiBEb24ndCBpbnZva2Ugc2hvdWxkX2ZhaWwgbG9naWMsIHNpbmNlIGl0IG1heSBjYWxsXFxuNTExNzpcXHRcXHQgKiBnZXRfcmFuZG9tX3UzMigpIGFuZCBwcmludGsoKSB3aGljaCBuZWVkIHRvIHNwaW5fbG9jay5cXG41MTE4OlxcdFxcdCAqL1xcbjUxMTk6XFx0XFx0aWYgKCEoKmFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfTk9MT0NLKSBcXHUwMDI2XFx1MDAyNlxcbjUxMjA6XFx0XFx0ICAgIHNob3VsZF9mYWlsX2FsbG9jX3BhZ2UoZ2ZwX21hc2ssIG9yZGVyKSlcXG41MTIxOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG41MTIyOlxcdFxcbjUxMjM6XFx0XFx0KmFsbG9jX2ZsYWdzIHw9IGFsbG9jX2ZsYWdzX2NtYShnZnBfbWFzayk7XFxuNTEyNDpcXHRcXG41MTI1OlxcdFxcdC8qIERpcnR5IHpvbmUgYmFsYW5jaW5nIG9ubHkgZG9uZSBpbiB0aGUgZmFzdCBwYXRoICovXFxuNTEyNjpcXHRcXHRhYy1cXHUwMDNlc3ByZWFkX2RpcnR5X3BhZ2VzID0gKGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfV1JJVEUpO1xcbjUxMjc6XFx0XFxuNTEyODpcXHRcXHQvKlxcbjUxMjk6XFx0XFx0ICogVGhlIHByZWZlcnJlZCB6b25lIGlzIHVzZWQgZm9yIHN0YXRpc3RpY3MgYnV0IGNydWNpYWxseSBpdCBpc1xcbjUxMzA6XFx0XFx0ICogYWxzbyB1c2VkIGFzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhlIHpvbmVsaXN0IGl0ZXJhdG9yLiBJdFxcbjUxMzE6XFx0XFx0ICogbWF5IGdldCByZXNldCBmb3IgYWxsb2NhdGlvbnMgdGhhdCBpZ25vcmUgbWVtb3J5IHBvbGljaWVzLlxcbjUxMzI6XFx0XFx0ICovXFxuNTEzMzpcXHRcXHRhYy1cXHUwMDNlcHJlZmVycmVkX3pvbmVyZWYgPSBmaXJzdF96b25lc196b25lbGlzdChhYy1cXHUwMDNlem9uZWxpc3QsXFxuNTEzNDpcXHRcXHRcXHRcXHRcXHRcXHRhYy1cXHUwMDNlaGlnaGVzdF96b25laWR4LCBhYy1cXHUwMDNlbm9kZW1hc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTo0NDoxNi42MzQwNDYwOTRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDQ5OTA1MDc5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gQWxsb2NhdGlvbiBCZWhhdmlvcioqXG5cblJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGxpbmUgNTExMyDigJMgYG1pZ2h0X2FsbG9jKGdmcF9tYXNrKTtgLiBUaGF0IGZ1bmN0aW9uIGNhbGwsIGBtaWdodF9hbGxvY2AsIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBrbm93IHRoYXQgZnVuY3Rpb24ncyBwdXJwb3NlIGlzIHRvIGFjdCBhcyBhIGhpbnQgdG8gdGhlIGtlcm5lbCBhYm91dCB3aGV0aGVyIGEgbWVtb3J5IGFsbG9jYXRpb24gKm1pZ2h0KiBoYXBwZW4gYXQgYSBzcGVjaWZpYyBwb2ludCBpbiB0aGUgY29kZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWluZCBhYm91dCBleGFjdGx5IHdoYXQgaW1wbGljYXRpb25zIHRoYXQgaGFzLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgYG1pZ2h0X2FsbG9jYCBjYWxsIGlzIGJlaW5nIHVzZWQgY29ycmVjdGx5LCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBgZ2ZwX21hc2tgIHBhc3NlZCB0byBpdC4gVGhpcyBtYXNrIGRpY3RhdGVzIHRoZSB0eXBlIG9mIGFsbG9jYXRpb24gYWxsb3dlZDogd2hldGhlciBpdCBjYW4gc2xlZXAsIHdoZXRoZXIgaXQgY2FuIGJlIGZyb20gYSBzcGVjaWZpYyBOVU1BIG5vZGUsIG9yIGlmIGl0J3MgcmVzZXJ2ZWQgZm9yIGNlcnRhaW4gY29udGV4dHMuIFRoZSBjaG9pY2Ugb2YgYGdmcF9tYXNrYCBpcyBjcnVjaWFsLiBJcyBpdCB0aGUgcmlnaHQgb25lIGZvciB0aGlzIHBhcnQgb2YgdGhlIGtlcm5lbD8gSXMgdGhlcmUgYSByaXNrIG9mIGRlYWRsb2NrLCBvciBleGNlc3NpdmUgbGF0ZW5jeSwgaWYgYW4gYWxsb2NhdGlvbiAqZG9lcyogZW5kIHVwIGhhcHBlbmluZz8gSSdtIGdvaW5nIHRvIGxvb2sgZGVlcGVyIGludG8gYG1pZ2h0X2FsbG9jYCB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBwb3RlbnRpYWwgcGl0ZmFsbHMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY4NDEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQ0OjIxLjEzMzA5OTM1OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUyNDkwNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlnaHRfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTI4Nz1zdGF0aWMgaW5saW5lIHZvaWQgbWVtYWxsb2NfcmV0cnlfd2FpdChnZnBfdCBnZnBfZmxhZ3MpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMzA2LS8qKlxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDozMDc6ICogbWlnaHRfYWxsb2MgLSBNYXJrIHBvc3NpYmxlIGFsbG9jYXRpb24gc2l0ZXNcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMzA4LSAqIEBnZnBfbWFzazogZ2ZwX3QgZmxhZ3MgdGhhdCB3b3VsZCBiZSB1c2VkIHRvIGFsbG9jYXRlXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMzEzLSAqL1xcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDozMTQ6c3RhdGljIGlubGluZSB2b2lkIG1pZ2h0X2FsbG9jKGdmcF90IGdmcF9tYXNrKVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0zMTUte1xcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaD01ODk9c3RhdGljIGlubGluZSB2b2lkICp4YV9zdG9yZV9iaChzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyBpbmRleCxcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtNTkzLVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6NTk0OlxcdG1pZ2h0X2FsbG9jKGdmcCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC01OTUtXFx0eGFfbG9ja19iaCh4YSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTYxNj1zdGF0aWMgaW5saW5lIHZvaWQgKnhhX3N0b3JlX2lycShzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyBpbmRleCxcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtNjIwLVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6NjIxOlxcdG1pZ2h0X2FsbG9jKGdmcCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC02MjItXFx0eGFfbG9ja19pcnEoeGEpO1xcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaD02OTI9c3RhdGljIGlubGluZSB2b2lkICp4YV9jbXB4Y2hnKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nIGluZGV4LFxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC02OTYtXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDo2OTc6XFx0bWlnaHRfYWxsb2MoZ2ZwKTtcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTY5OC1cXHR4YV9sb2NrKHhhKTtcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg9NzIwPXN0YXRpYyBpbmxpbmUgdm9pZCAqeGFfY21weGNoZ19iaChzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyBpbmRleCxcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtNzI0LVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6NzI1OlxcdG1pZ2h0X2FsbG9jKGdmcCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC03MjYtXFx0eGFfbG9ja19iaCh4YSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTc0OD1zdGF0aWMgaW5saW5lIHZvaWQgKnhhX2NtcHhjaGdfaXJxKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nIGluZGV4LFxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC03NTItXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDo3NTM6XFx0bWlnaHRfYWxsb2MoZ2ZwKTtcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTc1NC1cXHR4YV9sb2NrX2lycSh4YSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTc3OD1zdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgeGFfaW5zZXJ0KHN0cnVjdCB4YXJyYXkgKnhhLFxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC03ODItXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDo3ODM6XFx0bWlnaHRfYWxsb2MoZ2ZwKTtcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTc4NC1cXHR4YV9sb2NrKHhhKTtcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg9ODA4PXN0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayB4YV9pbnNlcnRfYmgoc3RydWN0IHhhcnJheSAqeGEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTgxMi1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjgxMzpcXHRtaWdodF9hbGxvYyhnZnApO1xcbmluY2x1ZGUvbGludXgveGFycmF5LmgtODE0LVxcdHhhX2xvY2tfYmgoeGEpO1xcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaD04Mzg9c3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrIHhhX2luc2VydF9pcnEoc3RydWN0IHhhcnJheSAqeGEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTg0Mi1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjg0MzpcXHRtaWdodF9hbGxvYyhnZnApO1xcbmluY2x1ZGUvbGludXgveGFycmF5LmgtODQ0LVxcdHhhX2xvY2tfaXJxKHhhKTtcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg9ODcxPXN0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrIGludCB4YV9hbGxvYyhzdHJ1Y3QgeGFycmF5ICp4YSwgdTMyICppZCxcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtODc1LVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6ODc2OlxcdG1pZ2h0X2FsbG9jKGdmcCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC04NzctXFx0eGFfbG9jayh4YSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTkwND1zdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgeGFfYWxsb2NfYmgoc3RydWN0IHhhcnJheSAqeGEsIHUzMiAqaWQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTkwOC1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjkwOTpcXHRtaWdodF9hbGxvYyhnZnApO1xcbmluY2x1ZGUvbGludXgveGFycmF5LmgtOTEwLVxcdHhhX2xvY2tfYmgoeGEpO1xcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaD05Mzc9c3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrIHhhX2FsbG9jX2lycShzdHJ1Y3QgeGFycmF5ICp4YSwgdTMyICppZCxcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtOTQxLVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6OTQyOlxcdG1pZ2h0X2FsbG9jKGdmcCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC05NDMtXFx0eGFfbG9ja19pcnEoeGEpO1xcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaD05NzY9c3RhdGljIGlubGluZSBpbnQgeGFfYWxsb2NfY3ljbGljKHN0cnVjdCB4YXJyYXkgKnhhLCB1MzIgKmlkLCB2b2lkICplbnRyeSxcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtOTgwLVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6OTgxOlxcdG1pZ2h0X2FsbG9jKGdmcCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC05ODItXFx0eGFfbG9jayh4YSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTEwMTU9c3RhdGljIGlubGluZSBpbnQgeGFfYWxsb2NfY3ljbGljX2JoKHN0cnVjdCB4YXJyYXkgKnhhLCB1MzIgKmlkLCB2b2lkICplbnRyeSxcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTAxOS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjEwMjA6XFx0bWlnaHRfYWxsb2MoZ2ZwKTtcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTEwMjEtXFx0eGFfbG9ja19iaCh4YSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTEwNTQ9c3RhdGljIGlubGluZSBpbnQgeGFfYWxsb2NfY3ljbGljX2lycShzdHJ1Y3QgeGFycmF5ICp4YSwgdTMyICppZCwgdm9pZCAqZW50cnksXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTEwNTgtXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxMDU5OlxcdG1pZ2h0X2FsbG9jKGdmcCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xMDYwLVxcdHhhX2xvY2tfaXJxKHhhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDQ6MjEuMjE4MzU0NjAyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU1NDExNTUxMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byBgbWlnaHRfYWxsb2NgKipcblxuUmlnaHQsIGxldCdzIGdldCBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIGNvZGUuIFwiTGV0J3MgcmVhZCBgbWlnaHRfYWxsb2NgLlwiIE5vIGZsdWZmLCBqdXN0IGRpcmVjdCBlbmdhZ2VtZW50LiBUaGlzIHNpZ25hbHMgYSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGR5bmFtaWNzIHdpdGhpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIEknbSBsb29raW5nIGZvciB0aGUgaW50cmljYWNpZXMgb2YgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGFsbG9jYXRpb24gZmFpbHVyZXMsIHdoYXQgc3RyYXRlZ2llcyBpdCBlbXBsb3lzIGZvciBvcHRpbWl6YXRpb24sIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtIEkga25vdyBzbyB3ZWxsLiBUaGlzIGlzIGxpa2VseSBub3QgYSBjYXN1YWwgc2tpbTsgSSdtIHByZXBhcmVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIGFuZCBmb3JtIGEgc29saWQgbWVudGFsIG1vZGVsIG9mIGl0cyBiZWhhdmlvci4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBpZGVudGlmeSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGVkZ2UgY2FzZXMsIGFuZCBhcmVhcyB0aGF0IG1pZ2h0IHdhcnJhbnQgZnVydGhlciBpbnZlc3RpZ2F0aW9uIG9yIG9wdGltaXphdGlvbi4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHVuZGVyc3RhbmQgdGhpcyBhbGxvY2F0aW9uIG1ldGhvZCFcblxuXG4iLCJJbnB1dFRva2VucyI6Mjg3NDEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQ0OjI2Ljc1OTUxMjI2MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzA3LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzA3OlxcdCAqIG1pZ2h0X2FsbG9jIC0gTWFyayBwb3NzaWJsZSBhbGxvY2F0aW9uIHNpdGVzXFxuIDMwODpcXHQgKiBAZ2ZwX21hc2s6IGdmcF90IGZsYWdzIHRoYXQgd291bGQgYmUgdXNlZCB0byBhbGxvY2F0ZVxcbiAzMDk6XFx0ICpcXG4gMzEwOlxcdCAqIFNpbWlsYXIgdG8gbWlnaHRfc2xlZXAoKSBhbmQgb3RoZXIgYW5ub3RhdGlvbnMsIHRoaXMgY2FuIGJlIHVzZWQgaW4gZnVuY3Rpb25zXFxuIDMxMTpcXHQgKiB0aGF0IG1pZ2h0IGFsbG9jYXRlLCBidXQgb2Z0ZW4gZG9uJ3QuIENvbXBpbGVzIHRvIG5vdGhpbmcgd2l0aG91dFxcbiAzMTI6XFx0ICogQ09ORklHX0xPQ0tERVAuIEluY2x1ZGVzIGEgY29uZGl0aW9uYWwgbWlnaHRfc2xlZXAoKSBpZiBAZ2ZwIGFsbG93cyBibG9ja2luZy5cXG4gMzEzOlxcdCAqL1xcbiAzMTQ6XFx0c3RhdGljIGlubGluZSB2b2lkIG1pZ2h0X2FsbG9jKGdmcF90IGdmcF9tYXNrKVxcbiAzMTU6XFx0e1xcbiAzMTY6XFx0XFx0ZnNfcmVjbGFpbV9hY3F1aXJlKGdmcF9tYXNrKTtcXG4gMzE3OlxcdFxcdGZzX3JlY2xhaW1fcmVsZWFzZShnZnBfbWFzayk7XFxuIDMxODpcXHRcXG4gMzE5OlxcdFxcdGlmIChjdXJyZW50LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBGX01FTUFMTE9DKVxcbiAzMjA6XFx0XFx0XFx0cmV0dXJuO1xcbiAzMjE6XFx0XFxuIDMyMjpcXHRcXHRtaWdodF9zbGVlcF9pZihnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnBfbWFzaykpO1xcbiAzMjM6XFx0fVxcbiAzMjQ6XFx0XFxuIDMyNTpcXHQvKipcXG4gMzI2OlxcdCAqIG1lbWFsbG9jX2ZsYWdzX3NhdmUgLSBBZGQgYSBQRl8qIGZsYWcgdG8gY3VycmVudC1cXHUwMDNlZmxhZ3MsIHNhdmUgb2xkIHZhbHVlXFxuIDMyNzpcXHQgKiBAZmxhZ3M6IEZsYWdzIHRvIGFkZC5cXG4gMzI4OlxcdCAqXFxuIDMyOTpcXHQgKiBUaGlzIGFsbG93cyBQRl8qIGZsYWdzIHRvIGJlIGNvbnZlbmllbnRseSBhZGRlZCwgaXJyZXNwZWN0aXZlIG9mIGN1cnJlbnRcXG4gMzMwOlxcdCAqIHZhbHVlLCBhbmQgdGhlbiB0aGUgb2xkIHZlcnNpb24gcmVzdG9yZWQgd2l0aCBtZW1hbGxvY19mbGFnc19yZXN0b3JlKCkuXFxuIDMzMTpcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDQ6MjYuNzU5NjAxODQxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyMzY3MTk2MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGVjaXNpb24gZm9yIEJ1bGsgUGFnZSBBbGxvY2F0aW9uIENvbnRleHQgUHJvcGFnYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlIGhhdmUgYSBwYXRjaCB0aGF0IGludHJvZHVjZXMgYSBzdWJ0bGUgY2hhbmdlIHdpdGhpbiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLCBhbmQgSSBuZWVkIHRvIGFzc2VzcyBpdHMgZnV6emluZyBwb3RlbnRpYWwuIFRoZSBjb2RlIGFscmVhZHkgZG9lcyBzb21lIGNvbnRleHQgbWFuYWdlbWVudCB3aXRoIGBmc19yZWNsYWltX2FjcXVpcmVgLCBidXQgdGhpcyBuZXcgcGF0Y2ggaW50cm9kdWNlcyBgY3VycmVudF9nZnBfY29udGV4dGAgKmJlZm9yZSogdGhlIGFsbG9jYXRpb24uIEl0J3MgY3J1Y2lhbCBiZWNhdXNlIGBjdXJyZW50X2dmcF9jb250ZXh0YCBtb2RpZmllcyB0aGUgYGdmcF9tYXNrYCBiYXNlZCBvbiB0aGUgY3VycmVudCB0YXNrJ3Mgc3RhdGUsIGFuZCBgZ2ZwX21pZ3JhdGV0eXBlYCBpcyBhbHNvIGNvbnNpZGVyZWQgYW5kIG1heSBjaGFuZ2UgYmFzZWQgb24gdGhlIGZsYWdzIHNldCwgc3BlY2lmaWNhbGx5IGlmIGBQRl9NRU1BTExPQ19QSU5gIGlzIHNldC5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIGluIGhvdyBgZ2ZwX21hc2tgIGlzIGhhbmRsZWQ6IGVuc3VyaW5nIHRoYXQgdGhlIGFsbG9jYXRpb24gcmVzcGVjdHMgdGFzay1zcGVjaWZpYyBmbGFncy4gV2UncmUgdGFsa2luZyBhYm91dCBhIGNoYW5nZSBpbiBhIGtleSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbi4gVGhlIGBnZnBfbWFza2AgaW1wYWN0cyB0aGluZ3MgbGlrZSBtaWdyYXRpb24gdHlwZSB3aGljaCBhZmZlY3RzIHdoZXJlIHBhZ2VzIGFyZSBhbGxvY2F0ZWQuIGBhbGxvY19mbGFnc2AgYXJlIGltcGFjdGVkIHRvby5cblxuVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIG1vZGlmaWNhdGlvbiB3b3J0aCB0aGUgZnV6emluZyBlZmZvcnQ/IFllcywgYWJzb2x1dGVseS4gVGhpcyBpcyBhIGNvcmUgTU0gbG9naWMgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSBnZnAgZmxhZ3MgYW5kIGFsbG9jYXRpb24gZmxhZ3MgZm9yIGJ1bGsgcGFnZSBhbGxvY2F0aW9ucy4gSXQncyBhIGNyaXRpY2FsIGFkanVzdG1lbnQsIGFuZCBpdCByZXF1aXJlcyBjYXJlZnVsIHRlc3RpbmcuXG5cbldoYXQgYXJlIHRoZSBjcml0aWNhbCBzeW1ib2xzIHRvIGZvY3VzIG9uPyBUaGUgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIEkgc2VlIHRoZSBkaWZmLiBUaGF0J3MgdGhlIGZ1bmN0aW9uIHRvIHByaW9yaXRpemUsIHJpZ2h0PyBXYWl0LCBJJ20gY2hlY2tpbmcgYWdhaW5zdCB0aGUgZ3VpZGVsaW5lcyBmb3IgRm9jdXNTeW1ib2xzLiBXZSAqbXVzdCBub3QqIGluY2x1ZGUgdWJpcXVpdG91cyBmdW5jdGlvbnMuIEknbSB0aGlua2luZywgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyB1c2VkIGluIHNwZWNpYWxpemVkIHNjZW5hcmlvcyBzdWNoIGFzIGB2bWFsbG9jYCwgYHNwbGljZWAsIGBpb191cmluZ2AsIGFuZCBgcGFnZSBwb29sYC4gSXQgaXMgbm90IGxpa2UgYGttYWxsb2NgIG9yIGBfX2FsbG9jX3BhZ2VzYC4gSXQncyBhIGtleSBBUEkgdXNlZCBieSBtdWx0aXBsZSBzdWJzeXN0ZW1zIHdoaWNoIG5lZWQgYSBiYXRjaCBhbGxvY2F0aW9uIEFQSSB0byBhdm9pZCBjb250ZW50aW9uLiBBbmQsIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoZSBwYXRjaCBpcyBjaGFuZ2luZy5cblxuQXJlIHRoZXJlIG90aGVyIGZ1bmN0aW9uIHRoYXQgd2Ugc2hvdWxkIGluY2x1ZGU/IFRoZXJlIGlzIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgLCBidXQgdGhlIGtleSBsb2dpYyBiZWluZyBtb2RpZmllZCBpcyBpbiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLlxuXG5JIGhhdmUgdG8gY2FyZWZ1bGx5IGFzc2VzcyBpZiB0aGUgZnVuY3Rpb24gaXMgXCJ1YmlxdWl0b3VzXCIgbGlrZSBga21hbGxvY2Agb3IgYF9fYWxsb2NfcGFnZXNfbm9wcm9mYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgZnV6emVyIGRvZXNuJ3QgZ2V0IGZsb29kZWQgd2l0aCB1bnJlbGF0ZWQgdGVzdCBjYXNlcy4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpcyBub3QgY2FsbGVkIGJ5ICpldmVyeSogcHJvZ3JhbS4gSXQgaXMgY2FsbGVkIGJ5IHNwZWNpZmljIHByb2dyYW1zLCBvciBwYXRocyB0aGF0IHJlcXVpcmUgYnVsayBhbGxvY2F0aW9uLlxuXG5TbywgbGV0J3MgbmFpbCB0aGlzIGRvd24uIFRoZSBwYXRjaCBjaGFuZ2VzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIGFuZCBpdCdzIG5vdCBhIGdlbmVyaWMgYWxsb2NhdG9yLiBJdCdzIGFuIGltcG9ydGFudCBlbnRyeXBvaW50LlxuXG5OZXh0LCBJIGhhdmUgdG8gZW5zdXJlIHRoZSBzeW1ib2xzIGFyZSB2YWxpZCAoZXhwb3J0ZWQsIG5vbi1zdGF0aWMpLiBZZXMsIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaXMgYSBub24tc3RhdGljIEMgZnVuY3Rpb24sIGFuZCBpcyBleHBvcnRlZCB0byB1c2VyIHNwYWNlLiBJdCBpcyB1bmNvbmRpdGlvbmFsbHkgY29tcGlsZWQgaW4gYWxsIGtlcm5lbCBjb25maWdzLlxuXG5IZXJlJ3MgdGhlIGJvdHRvbSBsaW5lOlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogVHJ1ZVxuKiAgICoqUmVhc29uaW5nKio6IFRoZSBwYXRjaCBtb2RpZmllcyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGluIGBtbS9wYWdlX2FsbG9jLmNgIHRvIGFwcGx5IGBjdXJyZW50X2dmcF9jb250ZXh0KGdmcClgLiBUaGlzIGVuc3VyZXMgdGhhdCBzY29wZWQgYWxsb2NhdGlvbiBjb25zdHJhaW50cyAoc3VjaCBhcyBgUEZfTUVNQUxMT0NfTk9JT2AsIGBQRl9NRU1BTExPQ19OT0ZTYCwgYW5kIGBQRl9NRU1BTExPQ19QSU5gKSBhcmUgcHJvcGVybHkgaG9ub3JlZCBkdXJpbmcgYnVsayBwYWdlIGFsbG9jYXRpb24uIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gYSByZWFjaGFibGUgcGF0aC4gSXQgaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhhdCBwcm9wYWdhdGluZyB0YXNrIGdmcCBjb250ZXh0IGluIGJ1bGsgYWxsb2NhdGlvbnMgZG9lcyBub3QgY2F1c2UgdW5leHBlY3RlZCBhbGxvY2F0aW9uIGZhaWx1cmVzLCByZWdyZXNzaW9uLCBvciBsb2NrZGVwL3JlY2xhaW0gYXNzZXJ0aW9uIGlzc3VlcyBhY3Jvc3MgY2FsbGVycyBsaWtlIHZtYWxsb2MsIHNwbGljZSwgaW9fdXJpbmcsIG9yIHBhZ2UgcG9vbC5cbiogICAqKkZvY3VzU3ltYm9scyoqOiBgW1wiYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZcIl1gXG4qICAgKipFbmFibGVDb25maWdzKio6IGBbXWBcblxuXG4iLCJJbnB1dFRva2VucyI6MjkzODIsIk91dHB1dFRva2VucyI6MTcyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYwOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQ0OjQ5LjEyNjgwMjEzNVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBwYWdlIGFsbG9jYXRvciBmdW5jdGlvbiBhbGxvY19wYWdlc19idWxrX25vcHJvZigpIGluIG1tL3BhZ2VfYWxsb2MuYyB0byBob25vciB0aGUgY2FsbGluZyB0YXNrJ3Mgc2NvcGVkIEdGUCBjb250ZXh0IHZpYSBjdXJyZW50X2dmcF9jb250ZXh0KCkuIFRoaXMgYWx0ZXJzIGFsbG9jYXRpb24gZmxhZ3MgKGUuZy4gc3RyaXBwaW5nIF9fR0ZQX0ZTLCBfX0dGUF9JTywgb3IgX19HRlBfTU9WQUJMRSB1bmRlciBQRl9NRU1BTExPQ19OT0ZTLCBQRl9NRU1BTExPQ19OT0lPLCBvciBQRl9NRU1BTExPQ19QSU4pIGR1cmluZyBidWxrIHBhZ2UgYWxsb2NhdGlvbiByZXF1ZXN0cywgd2hpY2ggZGlyZWN0bHkgYWZmZWN0cyByZWFjaGFibGUgc3Vic3lzdGVtcyBzdWNoIGFzIHZtYWxsb2MsIHNwbGljZSwgaW9fdXJpbmcsIGFuZCBwYWdlIHBvb2xzLiBUaGlzIGNvcmUgbW0gbG9naWMgY2hhbmdlIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBwYWdlIGFsbG9jYXRvciBmdW5jdGlvbiBhbGxvY19wYWdlc19idWxrX25vcHJvZigpIGluIG1tL3BhZ2VfYWxsb2MuYyB0byBob25vciB0aGUgY2FsbGluZyB0YXNrJ3Mgc2NvcGVkIEdGUCBjb250ZXh0IHZpYSBjdXJyZW50X2dmcF9jb250ZXh0KCkuIFRoaXMgYWx0ZXJzIGFsbG9jYXRpb24gZmxhZ3MgKGUuZy4gc3RyaXBwaW5nIF9fR0ZQX0ZTLCBfX0dGUF9JTywgb3IgX19HRlBfTU9WQUJMRSB1bmRlciBQRl9NRU1BTExPQ19OT0ZTLCBQRl9NRU1BTExPQ19OT0lPLCBvciBQRl9NRU1BTExPQ19QSU4pIGR1cmluZyBidWxrIHBhZ2UgYWxsb2NhdGlvbiByZXF1ZXN0cywgd2hpY2ggZGlyZWN0bHkgYWZmZWN0cyByZWFjaGFibGUgc3Vic3lzdGVtcyBzdWNoIGFzIHZtYWxsb2MsIHNwbGljZSwgaW9fdXJpbmcsIGFuZCBwYWdlIHBvb2xzLiBUaGlzIGNvcmUgbW0gbG9naWMgY2hhbmdlIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQ0OjQ5LjEyNjgzNTQzNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MjY0NDM5MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDQ6NDkuMTI3MjQyNjM1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTM4MjY0MDI2ODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKWAgdG8gYXBwbHkgcGVyLXRhc2sgR0ZQIGNvbnRleHQgcmVzdHJpY3Rpb25zIHZpYSBgY3VycmVudF9nZnBfY29udGV4dChnZnApYC4gVGhpcyBlbnN1cmVzIHRhc2stbGV2ZWwgZmxhZ3Mgc3VjaCBhcyBQRl9NRU1BTExPQ19OT0lPLCBQRl9NRU1BTExPQ19OT0ZTLCBhbmQgUEZfTUVNQUxMT0NfUElOIGNvcnJlY3RseSBtYXNrIEdGUCBmbGFncyAoZS5nLiwgc3RyaXBwaW5nIF9fR0ZQX0lPLCBfX0dGUF9GUywgX19HRlBfTU9WQUJMRSkgdG8gcHJldmVudCBkZWFkbG9ja3MgZHVyaW5nIHJlY2xhaW0uXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeTpcXG4xLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZS5cXG4yLiBJdCBkb2VzIG5vdCBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIHplcm9pbmcsIG9yIHN0cnVjdCBmaWVsZCBwb3B1bGF0aW9uLlxcbjMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBicmFuY2hlcyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhIG9yIGFmZmVjdCBidWZmZXIgYm91bmRzL2xlbmd0aHMuXFxuXFxuQW55IHJlY2xhaW0gb3IgbG9ja2luZyBpc3N1ZXMgcmVsYXRlZCB0byB0YXNrIEdGUCBjb250ZXh0cyBhcmUgdHJhY2tlZCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBtZW1vcnkgYWxsb2MgZGVidWdnaW5nLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDAxZWVhZGJiNGY5NzM5MmI1MGJkYmE3YjUzYTA2MzZlNmU5MTgxYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDA5OjQwOjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXG5pbmRleCAxMmZhYzkwODRjNDgzLi4zYmU3Mjg4YTFhYTcxIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXG4rKysgYi9tbS9wYWdlX2FsbG9jLmNcbkBAIC01MjA3LDYgKzUyMDcsNyBAQCB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG4gXG4gXHQvKiBNYXkgc2V0IEFMTE9DX05PRlJBR01FTlQsIGZyYWdtZW50YXRpb24gd2lsbCByZXR1cm4gMSBwYWdlLiAqL1xuIFx0Z2ZwIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbitcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcbiBcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcdTAwMjZhYywgXHUwMDI2Z2ZwLCBcdTAwMjZhbGxvY19mbGFncykpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDQ6NDkuMTI3MjQzNjA1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU2OTQ1ODI4MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEp1c3RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGxhbmRlZCwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0J3MgZGlnIGluLiBGaXJzdCB0aGluZ3MgZmlyc3Q6IEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBkaWZmLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGxvb2tzIGxpa2UgYSBtaW5vciBjaGFuZ2UgaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIEFoLCByaWdodCwgaXQgYWRkcyBhIGNhbGwgdG8gYGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKWAgd2l0aGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBjdXJyZW50X2dmcF9jb250ZXh0YCBmdW5jdGlvbiBhY3R1YWxseSAqZG9lcyouIEknbGwgbmVlZCB0byBrbm93IGl0cyBpbXBhY3Qgb24gdGhlIGZ1bmN0aW9uIGluIHRoZSBjb250ZXh0IG9mIHRoZSBwYWdlIGFsbG9jYXRvci4gSSB3aWxsIHJlYWQgdGhlIGBtbS9wYWdlX2FsbG9jLmNgIGZpbGUgYXJvdW5kIGxpbmUgNTIwNyB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgdGhlIG92ZXJhbGwgY29udGV4dCBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFkZGl0aW9uLiBUaW1lIHRvIGdldCBzb21lIGNvbnRleHQgYW5kIGV2YWx1YXRlIHRoZSBwb3RlbnRpYWwgZm9yIEtNU0FOIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQ0OjU0LjgyMTgyODk4NVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTgwNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxOTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUxOTU6XFx0XFxuNTE5NjpcXHQjaWZkZWYgQ09ORklHX1BBR0VfT1dORVJcXG41MTk3OlxcdFxcdC8qXFxuNTE5ODpcXHRcXHQgKiBQQUdFX09XTkVSIG1heSByZWN1cnNlIGludG8gdGhlIGFsbG9jYXRvciB0byBhbGxvY2F0ZSBzcGFjZSB0b1xcbjUxOTk6XFx0XFx0ICogc2F2ZSB0aGUgc3RhY2sgd2l0aCBwYWdlc2V0cy5sb2NrIGhlbGQuIFJlbGVhc2luZy9yZWFjcXVpcmluZ1xcbjUyMDA6XFx0XFx0ICogcmVtb3ZlcyBtdWNoIG9mIHRoZSBwZXJmb3JtYW5jZSBiZW5lZml0IG9mIGJ1bGsgYWxsb2NhdGlvbiBzb1xcbjUyMDE6XFx0XFx0ICogZm9yY2UgdGhlIGNhbGxlciB0byBhbGxvY2F0ZSBvbmUgcGFnZSBhdCBhIHRpbWUgYXMgaXQnbGwgaGF2ZVxcbjUyMDI6XFx0XFx0ICogc2ltaWxhciBwZXJmb3JtYW5jZSB0byBhZGRlZCBjb21wbGV4aXR5IHRvIHRoZSBidWxrIGFsbG9jYXRvci5cXG41MjAzOlxcdFxcdCAqL1xcbjUyMDQ6XFx0XFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcXG41MjA1OlxcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbjUyMDY6XFx0I2VuZGlmXFxuNTIwNzpcXHRcXG41MjA4OlxcdFxcdC8qIE1heSBzZXQgQUxMT0NfTk9GUkFHTUVOVCwgZnJhZ21lbnRhdGlvbiB3aWxsIHJldHVybiAxIHBhZ2UuICovXFxuNTIwOTpcXHRcXHRnZnAgXFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcXG41MjEwOlxcdFxcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcXG41MjExOlxcdFxcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcXHUwMDI2YWMsIFxcdTAwMjZnZnAsIFxcdTAwMjZhbGxvY19mbGFncykpXFxuNTIxMjpcXHRcXHRcXHRnb3RvIG91dDtcXG41MjEzOlxcdFxcbjUyMTQ6XFx0XFx0LyogRmluZCBhbiBhbGxvd2VkIGxvY2FsIHpvbmUgdGhhdCBtZWV0cyB0aGUgbG93IHdhdGVybWFyay4gKi9cXG41MjE1OlxcdFxcdHogPSBhYy5wcmVmZXJyZWRfem9uZXJlZjtcXG41MjE2OlxcdFxcdGZvcl9uZXh0X3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgYWMuaGlnaGVzdF96b25laWR4LCBhYy5ub2RlbWFzaykge1xcbjUyMTc6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBtYXJrO1xcbjUyMTg6XFx0XFxuNTIxOTpcXHRcXHRcXHRpZiAoY3B1c2V0c19lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfQ1BVU0VUKSBcXHUwMDI2XFx1MDAyNlxcbjUyMjA6XFx0XFx0XFx0ICAgICFfX2NwdXNldF96b25lX2FsbG93ZWQoem9uZSwgZ2ZwKSkge1xcbjUyMjE6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNTIyMjpcXHRcXHRcXHR9XFxuNTIyMzpcXHRcXG41MjI0OlxcdFxcdFxcdGlmIChucl9vbmxpbmVfbm9kZXMgXFx1MDAzZSAxIFxcdTAwMjZcXHUwMDI2IHpvbmUgIT0gem9uZWxpc3Rfem9uZShhYy5wcmVmZXJyZWRfem9uZXJlZikgXFx1MDAyNlxcdTAwMjZcXG41MjI1OlxcdFxcdFxcdCAgICB6b25lX3RvX25pZCh6b25lKSAhPSB6b25lbGlzdF9ub2RlX2lkeChhYy5wcmVmZXJyZWRfem9uZXJlZikpIHtcXG41MjI2OlxcdFxcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbjUyMjc6XFx0XFx0XFx0fVxcbjUyMjg6XFx0XFxuNTIyOTpcXHRcXHRcXHRjb25kX2FjY2VwdF9tZW1vcnkoem9uZSwgMCwgYWxsb2NfZmxhZ3MpO1xcbjUyMzA6XFx0cmV0cnlfdGhpc196b25lOlxcbjUyMzE6XFx0XFx0XFx0bWFyayA9IHdtYXJrX3BhZ2VzKHpvbmUsIGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfV01BUktfTUFTSykgKyBucl9wYWdlcyAtIG5yX3BvcHVsYXRlZDtcXG41MjMyOlxcdFxcdFxcdGlmICh6b25lX3dhdGVybWFya19mYXN0KHpvbmUsIDAsICBtYXJrLFxcbjUyMzM6XFx0XFx0XFx0XFx0XFx0em9uZWxpc3Rfem9uZV9pZHgoYWMucHJlZmVycmVkX3pvbmVyZWYpLFxcbjUyMzQ6XFx0XFx0XFx0XFx0XFx0YWxsb2NfZmxhZ3MsIGdmcCkpIHtcXG41MjM1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjUyMzY6XFx0XFx0XFx0fVxcbjUyMzc6XFx0XFxuNTIzODpcXHRcXHRcXHRpZiAoY29uZF9hY2NlcHRfbWVtb3J5KHpvbmUsIDAsIGFsbG9jX2ZsYWdzKSlcXG41MjM5OlxcdFxcdFxcdFxcdGdvdG8gcmV0cnlfdGhpc196b25lO1xcbjUyNDA6XFx0XFxuNTI0MTpcXHRcXHRcXHQvKiBUcnkgYWdhaW4gaWYgem9uZSBoYXMgZGVmZXJyZWQgcGFnZXMgKi9cXG41MjQyOlxcdFxcdFxcdGlmIChkZWZlcnJlZF9wYWdlc19lbmFibGVkKCkpIHtcXG41MjQzOlxcdFxcdFxcdFxcdGlmIChfZGVmZXJyZWRfZ3Jvd196b25lKHpvbmUsIDApKVxcbjUyNDQ6XFx0XFx0XFx0XFx0XFx0Z290byByZXRyeV90aGlzX3pvbmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQ0OjU0LjgyMjA4ODk2NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3Njg2ODgwMTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEZWVwIERpdmUgaW50byBgY3VycmVudF9nZnBfY29udGV4dGAgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGxldCdzIHRyYWNlIHRoaXMgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgIHZhcmlhYmxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGhvdyBpdCdzIGJlaW5nIHV0aWxpemVkIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiB0aGUgYG1tL3BhZ2VfYWxsb2MuY2AgZmlsZSwgc2luY2UgdGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gc2VlIHRoZSBjb3JlIGFsbG9jYXRpb24gbG9naWMuIEJ1dCBvZiBjb3Vyc2UsIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGEgY29tcGxleCBiZWFzdCwgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGNvdWxkIGJlIGFueXdoZXJlLiBTbyBJJ2xsIGJyb2FkZW4gdGhlIHNlYXJjaCwgbG9va2luZyBiZXlvbmQganVzdCB0aGF0IG9uZSBmaWxlLiBNeSBnb2FsIGlzIHRvIG1hcCBvdXQgZXZlcnkgY2FsbCBzaXRlIGFuZCBkZXRlcm1pbmUgaG93IGBjdXJyZW50X2dmcF9jb250ZXh0YCBpbmZsdWVuY2VzIHRoZSBhbGxvY2F0aW9uIGJlaGF2aW9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdOKAmXMgYSBnbG9iYWwgdmFyaWFibGUsIHRocmVhZCBsb2NhbCwgb3IgaG93IGl0IGlzIGJlaW5nIGNoYW5nZWQgdG8gaW5mbHVlbmNlIHBhZ2UgYWxsb2NhdGlvbi4gSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGFzcGVjdHMgb2YgYWxsb2NhdGlvbiBhcmUgY29udHJvbGxlZCB2aWEgYGdmcF9jb250ZXh0YC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGhpZGRlbiBkZXBlbmRlbmNpZXMgb3IgaW50ZXJhY3Rpb25zIHRoYXQgbWlnaHQgbm90IGJlIGltbWVkaWF0ZWx5IG9idmlvdXMuIFRoaXMgaW52ZXN0aWdhdGlvbiBzaG91bGQgaGVscCBtZSBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzdWJ0bGUgbWVtb3J5IGFsbG9jYXRpb24gaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGUgd2F5IHRoaXMgY29udGV4dCBpcyBiZWluZyB1dGlsaXplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ5NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6NDU6MDIuNTA4OTcxNzk0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTc2NzA2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3VycmVudF9nZnBfY29udGV4dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2FsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTM3NTI9YWxsb2NfZmxhZ3Nfbm9mcmFnbWVudChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMzc4NC1cXG5tbS9wYWdlX2FsbG9jLmM6Mzc4NTovKiBNdXN0IGJlIGNhbGxlZCBhZnRlciBjdXJyZW50X2dmcF9jb250ZXh0KCkgd2hpY2ggY2FuIGNoYW5nZSBnZnBfbWFzayAqL1xcbm1tL3BhZ2VfYWxsb2MuYy0zNzg2LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzX2NtYShnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00MzgzPXZvaWQgZnNfcmVjbGFpbV9hY3F1aXJlKGdmcF90IGdmcF9tYXNrKVxcbm1tL3BhZ2VfYWxsb2MuYy00Mzg0LXtcXG5tbS9wYWdlX2FsbG9jLmM6NDM4NTpcXHRnZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spO1xcbm1tL3BhZ2VfYWxsb2MuYy00Mzg2LVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQ0MDA9dm9pZCBmc19yZWNsYWltX3JlbGVhc2UoZ2ZwX3QgZ2ZwX21hc2spXFxubW0vcGFnZV9hbGxvYy5jLTQ0MDEte1xcbm1tL3BhZ2VfYWxsb2MuYzo0NDAyOlxcdGdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayk7XFxubW0vcGFnZV9hbGxvYy5jLTQ0MDMtXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTE2MD11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTIwOS1cXHRnZnAgXFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcXG5tbS9wYWdlX2FsbG9jLmM6NTIxMDpcXHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XFxubW0vcGFnZV9hbGxvYy5jLTUyMTEtXFx0aWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFxcdTAwMjZhYywgXFx1MDAyNmdmcCwgXFx1MDAyNmFsbG9jX2ZsYWdzKSlcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01Mzg0PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTQxOS1cXHQgKi9cXG5tbS9wYWdlX2FsbG9jLmM6NTQyMDpcXHRnZnAgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcCk7XFxubW0vcGFnZV9hbGxvYy5jLTU0MjEtXFx0YWxsb2NfZ2ZwID0gZ2ZwO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTcyODQ9aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTczMTItXFxubW0vcGFnZV9hbGxvYy5jOjczMTM6XFx0Z2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKTtcXG5tbS9wYWdlX2FsbG9jLmMtNzMxNC1cXHRpZiAoX19hbGxvY19jb250aWdfdmVyaWZ5X2dmcF9tYXNrKGdmcF9tYXNrLCAoZ2ZwX3QgKilcXHUwMDI2Y2MuZ2ZwX21hc2spKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTo0NTowMy4wMjY2NTAxMjRaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDMwMTc1NzU3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEN1cnJlbnQgR0ZQIENvbnRleHQqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxheSBvZiB0aGUgbGFuZCBoZXJlLiBNeSBpbW1lZGlhdGUgcHJpb3JpdHkgaXMgdG8gZXhhbWluZSB0aGUgc3RhdGUgb2YgYGN1cnJlbnRfZ2ZwX2NvbnRleHRgLiBUaGlzIHZhcmlhYmxlLCBvciBvYmplY3QsIHdoYXRldmVyIGl0IG1pZ2h0IGJlLCBob2xkcyB0aGUga2V5IHRvIHRoZSBjdXJyZW50IG9wZXJhdGluZyBlbnZpcm9ubWVudCB3aXRoaW4gdGhlIEdGUCAoR3JlZW4gRmx1b3Jlc2NlbnQgUHJvdGVpbikgYXBwbGljYXRpb24uIEl0J3MgdGhlIGdyb3VuZGluZyBwb2ludCwgdGhlIHJlZmVyZW5jZSwgdGhlIFwieW91IGFyZSBoZXJlXCIgbWFya2VyLiBLbm93aW5nIGl0cyBjb250ZW50cywgaXRzIHByb3BlcnRpZXMsIGl0cyBzdHJ1Y3R1cmUsIHdpbGwgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgd2hhdCdzIGdvaW5nIG9uIGFuZCB3aGVyZSBJIGNhbiBtYWtlIHByb2dyZXNzLiBJIG5lZWQgdG8ga25vdyAqZXhhY3RseSogd2hhdCB0aGlzIHJlcHJlc2VudHMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MTksIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTo0NTowNy4zMjg0MTE1OTRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDk2NTU4MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGlubGluZS4qY3VycmVudF9nZnBfY29udGV4dFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg9MjE1PXN0YXRpYyBpbmxpbmUgYm9vbCBpbl92Zm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0yNDctICovXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjI0ODpzdGF0aWMgaW5saW5lIGdmcF90IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX3QgZmxhZ3MpXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTI0OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQ1OjA5LjYzODA3MzMxNVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozODUzOTM0MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nIHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGF0IGNvZGU6XG5cbioqRGl2aW5nIGludG8gTWVtb3J5IE1hbmFnZW1lbnQgKG1tLmgpKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBzb21lIG1lbW9yeSBtYW5hZ2VtZW50IGRldGFpbHMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBhZGRyZXNzIHNwYWNlcyBhbmQgbWVtb3J5IGNvbnRleHRzLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBpbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjQ4LiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgZGVmaW5pdGlvbnMgb3Igc3RydWN0dXJlcyByZWxhdGVkIHRvIHByb2Nlc3MgbWVtb3J5IG1hcHMgKG1tX3N0cnVjdCkgb3IgcGVyaGFwcyBkZXRhaWxzIGFib3V0IGhvdyB0aGVzZSBtYXBzIGludGVyYWN0IHdpdGggdGhlIHBhZ2UgdGFibGVzLiBJJ20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdmlydHVhbCBhZGRyZXNzZXMgYXJlIHRyYW5zbGF0ZWQgdG8gcGh5c2ljYWwgYWRkcmVzc2VzIGFuZCBob3cgdGhlIGtlcm5lbCB0cmFja3MgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgdG8gZWFjaCBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgbG9ja2luZyBtZWNoYW5pc21zIG9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQsIGFzIHRoZXNlIGFyZSBjcml0aWNhbCBmb3IgZW5zdXJpbmcgZGF0YSBjb25zaXN0ZW5jeSBhbmQgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgaW4gYSBtdWx0aXRocmVhZGVkIGVudmlyb25tZW50LiBGcm9tIHRoZXJlLCBJIGNhbiBiZXR0ZXIgdW5kZXJzdGFuZCBhbmQgZGVidWcgY2VydGFpbiBtZW1vcnktcmVsYXRlZCBzeXN0ZW0gY2FsbHMgSSB3YXMgZGVhbGluZyB3aXRoIGVhcmxpZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MjcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTo0NToxMy40OTIwMTAyNTRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQxOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0MDpcXHR9XFxuIDI0MTpcXHRcXG4gMjQyOlxcdC8qXFxuIDI0MzpcXHQgKiBBcHBsaWVzIHBlci10YXNrIGdmcCBjb250ZXh0IHRvIHRoZSBnaXZlbiBhbGxvY2F0aW9uIGZsYWdzLlxcbiAyNDQ6XFx0ICogUEZfTUVNQUxMT0NfTk9JTyBpbXBsaWVzIEdGUF9OT0lPXFxuIDI0NTpcXHQgKiBQRl9NRU1BTExPQ19OT0ZTIGltcGxpZXMgR0ZQX05PRlNcXG4gMjQ2OlxcdCAqIFBGX01FTUFMTE9DX1BJTiAgaW1wbGllcyAhR0ZQX01PVkFCTEVcXG4gMjQ3OlxcdCAqL1xcbiAyNDg6XFx0c3RhdGljIGlubGluZSBnZnBfdCBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF90IGZsYWdzKVxcbiAyNDk6XFx0e1xcbiAyNTA6XFx0XFx0dW5zaWduZWQgaW50IHBmbGFncyA9IFJFQURfT05DRShjdXJyZW50LVxcdTAwM2VmbGFncyk7XFxuIDI1MTpcXHRcXG4gMjUyOlxcdFxcdGlmICh1bmxpa2VseShwZmxhZ3MgXFx1MDAyNiAoUEZfTUVNQUxMT0NfTk9JTyB8IFBGX01FTUFMTE9DX05PRlMgfCBQRl9NRU1BTExPQ19QSU4pKSkge1xcbiAyNTM6XFx0XFx0XFx0LypcXG4gMjU0OlxcdFxcdFxcdCAqIE5PSU8gaW1wbGllcyBib3RoIE5PSU8gYW5kIE5PRlMgYW5kIGl0IGlzIGEgd2Vha2VyIGNvbnRleHRcXG4gMjU1OlxcdFxcdFxcdCAqIHNvIGFsd2F5cyBtYWtlIHN1cmUgaXQgbWFrZXMgcHJlY2VkZW5jZVxcbiAyNTY6XFx0XFx0XFx0ICovXFxuIDI1NzpcXHRcXHRcXHRpZiAocGZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0NfTk9JTylcXG4gMjU4OlxcdFxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH4oX19HRlBfSU8gfCBfX0dGUF9GUyk7XFxuIDI1OTpcXHRcXHRcXHRlbHNlIGlmIChwZmxhZ3MgXFx1MDAyNiBQRl9NRU1BTExPQ19OT0ZTKVxcbiAyNjA6XFx0XFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfl9fR0ZQX0ZTO1xcbiAyNjE6XFx0XFxuIDI2MjpcXHRcXHRcXHRpZiAocGZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0NfUElOKVxcbiAyNjM6XFx0XFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfl9fR0ZQX01PVkFCTEU7XFxuIDI2NDpcXHRcXHR9XFxuIDI2NTpcXHRcXHRyZXR1cm4gZmxhZ3M7XFxuIDI2NjpcXHR9XFxuIDI2NzpcXHRcXG4gMjY4OlxcdCNpZmRlZiBDT05GSUdfTE9DS0RFUFxcbiAyNjk6XFx0ZXh0ZXJuIHZvaWQgX19mc19yZWNsYWltX2FjcXVpcmUodW5zaWduZWQgbG9uZyBpcCk7XFxuIDI3MDpcXHRleHRlcm4gdm9pZCBfX2ZzX3JlY2xhaW1fcmVsZWFzZSh1bnNpZ25lZCBsb25nIGlwKTtcXG4gMjcxOlxcdGV4dGVybiB2b2lkIGZzX3JlY2xhaW1fYWNxdWlyZShnZnBfdCBnZnBfbWFzayk7XFxuIDI3MjpcXHRleHRlcm4gdm9pZCBmc19yZWNsYWltX3JlbGVhc2UoZ2ZwX3QgZ2ZwX21hc2spO1xcbiAyNzM6XFx0I2Vsc2VcXG4gMjc0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZzX3JlY2xhaW1fYWNxdWlyZSh1bnNpZ25lZCBsb25nIGlwKSB7IH1cXG4gMjc1OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZzX3JlY2xhaW1fcmVsZWFzZSh1bnNpZ25lZCBsb25nIGlwKSB7IH1cXG4gMjc2OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBmc19yZWNsYWltX2FjcXVpcmUoZ2ZwX3QgZ2ZwX21hc2spIHsgfVxcbiAyNzc6XFx0c3RhdGljIGlubGluZSB2b2lkIGZzX3JlY2xhaW1fcmVsZWFzZShnZnBfdCBnZnBfbWFzaykgeyB9XFxuIDI3ODpcXHQjZW5kaWZcXG4gMjc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTo0NToxMy40OTIwOTg1MTVaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTA4OTczNDU3NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgR0ZQIENvbnRleHQgSXNzdWUgaW4gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBleHBlcnQgZXllIGhvbmVzIGluIG9uIHRoZSBhcHBsaWNhdGlvbiBvZiBgY3VycmVudF9nZnBfY29udGV4dGAgd2l0aGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogd2UncmUgYXBwbHlpbmcgcGVyLXRhc2sgR0ZQIGNvbnRleHQgZmxhZ3MgKGxpa2UgUEZfTUVNQUxMT0NfTk9JTywgUEZfTUVNQUxMT0NfTk9GUywgYW5kIFBGX01FTUFMTE9DX1BJTikgdG8gdGhlIHN0YW5kYXJkIGdmcCBmbGFncy4gVGhlIGNvZGUgd2FzICptaXNzaW5nKiB0aGlzIGFwcGxpY2F0aW9uIGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIFRoZSBrZXkgaXNzdWUgaGVyZT8gSWYgYSBjYWxsZXIgd2FzIG9wZXJhdGluZyB3aXRoaW4gYSBgbWVtYWxsb2Nfbm9pb19zYXZlKClgIG9yIGBtZW1hbGxvY19ub2ZzX3NhdmUoKWAgc2NvcGUsIHRoZSBidWxrIGFsbG9jYXRvciAqd291bGRuJ3QqIHByb3Blcmx5IHN0cmlwIGBfX0dGUF9JT2AsIGBfX0dGUF9GU2AsIG9yIGBfX0dGUF9NT1ZBQkxFYCBhY2NvcmRpbmcgdG8gdGhlIHRhc2sncyBmbGFncy4gVGhhdCdzIGEgc2VyaW91cyBvdmVyc2lnaHQhXG5cblRoaXMgaXMgYWxsIGFib3V0IEdGUCBmbGFncywgcmVjbGFpbSwgYW5kIGF2b2lkaW5nIGRlYWRsb2NrcywgYW5kIHRoYXQncyBwcmVjaXNlbHkgd2hhdCdzIHRlc3RlZCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBtbSB0ZXN0cy5cblxuTm93LCBsZXQncyBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgdGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLlxuXG4qICAgVW5pbml0aWFsaXplZCBNZW1vcnk/IE5vcGUsIEkgZG9uJ3Qgc2VlIGFueSBjaGFuZ2VzIHRoYXQgd291bGQgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnkuXG4qICAgVXNlci1TcGFjZSBCdWZmZXJzPyBObywgaXQncyBub3QgYWZmZWN0aW5nIGFueSBidWZmZXIgY29weWluZy5cbiogICBTdHJ1Y3R1cmUgUGFkZGluZy9Jbml0aWFsaXphdGlvbj8gTm8sIG5vdGhpbmcgdG8gc2VlIGhlcmUuXG4qICAgQ29uZGl0aW9uYWwgQnJhbmNoZXMgb24gVW5pbml0aWFsaXplZCBNZW1vcnk/IERlZmluaXRlbHkgbm90LlxuKiAgIERhdGEgTGVuZ3Rocy9Cb3VuZHMgQ2hlY2tpbmc/IE5vIGNoYW5nZXMuXG4qICAgQ2hhbmdpbmcgWmVyb2luZyBvZiBBbGxvY2F0ZWQgUGFnZXM/IEhtbW0sIGRvZXMgYGFsbG9jX3BhZ2VzX2J1bGtgIGhhbmRsZSBgX19HRlBfWkVST2A/IExldCBtZSBxdWlja2x5IHZlcmlmeSB0aGF0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgaW1wbGVtZW50YXRpb27igKZcblxuXG4iLCJJbnB1dFRva2VucyI6NTc2MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQ3OjAyLjQ2NTU1OTI0M1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTEwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyODAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUyODA6XFx0XFx0XFx0bnJfYWNjb3VudCsrO1xcbjUyODE6XFx0XFxuNTI4MjpcXHRcXHRcXHRwcmVwX25ld19wYWdlKHBhZ2UsIDAsIGdmcCwgQUxMT0NfREVGQVVMVCk7XFxuNTI4MzpcXHRcXHRcXHRzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpO1xcbjUyODQ6XFx0XFx0XFx0cGFnZV9hcnJheVtucl9wb3B1bGF0ZWQrK10gPSBwYWdlO1xcbjUyODU6XFx0XFx0fVxcbjUyODY6XFx0XFxuNTI4NzpcXHRcXHRwY3Bfc3Bpbl91bmxvY2socGNwKTtcXG41Mjg4OlxcdFxcbjUyODk6XFx0XFx0X19jb3VudF96aWRfdm1fZXZlbnRzKFBHQUxMT0MsIHpvbmVfaWR4KHpvbmUpLCBucl9hY2NvdW50KTtcXG41MjkwOlxcdFxcdHpvbmVfc3RhdGlzdGljcyh6b25lbGlzdF96b25lKGFjLnByZWZlcnJlZF96b25lcmVmKSwgem9uZSwgbnJfYWNjb3VudCk7XFxuNTI5MTpcXHRcXG41MjkyOlxcdG91dDpcXG41MjkzOlxcdFxcdHJldHVybiBucl9wb3B1bGF0ZWQ7XFxuNTI5NDpcXHRcXG41Mjk1OlxcdGZhaWxlZDpcXG41Mjk2OlxcdFxcdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBBTExPQ19ERUZBVUxUKTtcXG41Mjk3OlxcdFxcdGlmIChwYWdlKVxcbjUyOTg6XFx0XFx0XFx0cGFnZV9hcnJheVtucl9wb3B1bGF0ZWQrK10gPSBwYWdlO1xcbjUyOTk6XFx0XFx0Z290byBvdXQ7XFxuNTMwMDpcXHR9XFxuNTMwMTpcXHRFWFBPUlRfU1lNQk9MX0dQTChhbGxvY19wYWdlc19idWxrX25vcHJvZik7XFxuNTMwMjpcXHRcXG41MzAzOlxcdC8qXFxuNTMwNDpcXHQgKiBmcmVlX3BhZ2VzX2J1bGsgLSBGcmVlIGFuIGFycmF5IG9mIG9yZGVyLTAgcGFnZXNcXG41MzA1OlxcdCAqIEBwYWdlX2FycmF5OiBBcnJheSBvZiBwYWdlcyB0byBmcmVlXFxuNTMwNjpcXHQgKiBAbnJfcGFnZXM6IFRoZSBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIGFycmF5XFxuNTMwNzpcXHQgKlxcbjUzMDg6XFx0ICogRnJlZSB0aGUgb3JkZXItMCBwYWdlcy4gQWRqYWNlbnQgZW50cmllcyB3aG9zZSBQRk5zIGZvcm0gYSBjb250aWd1b3VzXFxuNTMwOTpcXHQgKiBydW4gYXJlIHJlbGVhc2VkIHdpdGggYSBzaW5nbGUgX19mcmVlX2NvbnRpZ19yYW5nZSgpIGNhbGwuXFxuNTMxMDpcXHQgKlxcbjUzMTE6XFx0ICogVGhpcyBhc3N1bWVzIHBhZ2VfYXJyYXkgaXMgc29ydGVkIGluIGFzY2VuZGluZyBQRk4gb3JkZXIuIFdpdGhvdXQgdGhhdCxcXG41MzEyOlxcdCAqIHRoZSBmdW5jdGlvbiBzdGlsbCBmcmVlcyBhbGwgcGFnZXMsIGJ1dCBjb250aWd1b3VzIHJ1bnMgbWF5IG5vdCBiZVxcbjUzMTM6XFx0ICogZGV0ZWN0ZWQgYW5kIHRoZSBmcmVlaW5nIHBhdHRlcm4gY2FuIGRlZ3JhZGUgdG8gZnJlZWluZyBvbmUgcGFnZSBhdCBhXFxuNTMxNDpcXHQgKiB0aW1lLlxcbjUzMTU6XFx0ICpcXG41MzE2OlxcdCAqIENvbnRleHQ6IFNsZWVwYWJsZSBwcm9jZXNzIGNvbnRleHQgb25seTsgY2FsbHMgY29uZF9yZXNjaGVkKClcXG41MzE3OlxcdCAqL1xcbjUzMTg6XFx0dm9pZCBmcmVlX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbjUzMTk6XFx0e1xcbjUzMjA6XFx0XFx0d2hpbGUgKG5yX3BhZ2VzKSB7XFxuNTMyMTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5yX2NvbnRpZyA9IG51bV9wYWdlc19jb250aWd1b3VzKHBhZ2VfYXJyYXksIG5yX3BhZ2VzKTtcXG41MzIyOlxcdFxcbjUzMjM6XFx0XFx0XFx0X19mcmVlX2NvbnRpZ19yYW5nZShwYWdlX3RvX3BmbigqcGFnZV9hcnJheSksIG5yX2NvbnRpZyk7XFxuNTMyNDpcXHRcXG41MzI1OlxcdFxcdFxcdG5yX3BhZ2VzIC09IG5yX2NvbnRpZztcXG41MzI2OlxcdFxcdFxcdHBhZ2VfYXJyYXkgKz0gbnJfY29udGlnO1xcbjUzMjc6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuNTMyODpcXHRcXHR9XFxuNTMyOTpcXHR9XFxuNTMzMDpcXHRcXG41MzMxOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvY19vcmRlcl9hbGxvd2VkKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbjUzMzI6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcXG41MzMzOlxcdHtcXG41MzM0OlxcdFxcdGlmIChhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX05PTE9DSylcXG41MzM1OlxcdFxcdFxcdHJldHVybiBwY3BfYWxsb3dlZF9vcmRlcihvcmRlcik7XFxuNTMzNjpcXHRcXG41MzM3OlxcdFxcdC8qXFxuNTMzODpcXHRcXHQgKiBUaGVyZSBhcmUgc2V2ZXJhbCBwbGFjZXMgd2hlcmUgd2UgYXNzdW1lIHRoYXQgdGhlIG9yZGVyIHZhbHVlIGlzIHNhbmVcXG41MzM5OlxcdFxcdCAqIHNvIGJhaWwgb3V0IGVhcmx5IGlmIHRoZSByZXF1ZXN0IGlzIG91dCBvZiBib3VuZC5cXG41MzQwOlxcdFxcdCAqL1xcbjUzNDE6XFx0XFx0cmV0dXJuICEoV0FSTl9PTl9PTkNFX0dGUChvcmRlciBcXHUwMDNlIE1BWF9QQUdFX09SREVSLCBnZnApKTtcXG41MzQyOlxcdH1cXG41MzQzOlxcdFxcbjUzNDQ6XFx0c3RhdGljIGlubGluZSBib29sIGFsbG9jX25vbG9ja19hbGxvd2VkKHZvaWQpXFxuNTM0NTpcXHR7XFxuNTM0NjpcXHRcXHRpZiAoIWNhbl9zcGluX3RyeWxvY2soKSlcXG41MzQ3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG41MzQ4OlxcdFxcbjUzNDk6XFx0XFx0LyogQmFpbG91dCwgc2luY2UgX2RlZmVycmVkX2dyb3dfem9uZSgpIG5lZWRzIHRvIHRha2UgYSBsb2NrICovXFxuNTM1MDpcXHRcXHRpZiAoZGVmZXJyZWRfcGFnZXNfZW5hYmxlZCgpKVxcbjUzNTE6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjUzNTI6XFx0XFxuNTM1MzpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG41MzU0OlxcdH1cXG41MzU1OlxcdFxcbjUzNTY6XFx0LypcXG41MzU3OlxcdCAqIEdGUCBmbGFncyB0byBzZXQgZm9yIEFMTE9DX05PTE9DSyBpLmUuIGFsbG9jX3BhZ2VzX25vbG9jaygpLlxcbjUzNTg6XFx0ICpcXG41MzU5OlxcdCAqIERvIG5vdCBzcGVjaWZ5IF9fR0ZQX0RJUkVDVF9SRUNMQUlNLCBzaW5jZSBkaXJlY3QgY2xhaW0gaXMgbm90IGFsbG93ZWQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQ3OjAyLjQ2NTg3MTcyM1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0OTI1Mzc1MTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhZ2UgQWxsb2NhdGlvbiBDb2RlKipcblxuT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gYHByZXBfbmV3X3BhZ2VgIHRha2VzIGNhcmUgb2YgdGhlIGBfX0dGUF9aRVJPYCBmbGFnIGlmIGl0J3MgdGhlcmUuIFRoZSBgY3VycmVudF9nZnBfY29udGV4dGAgZnVuY3Rpb24gaXMgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBtYXNraW5nIG91dCBjZXJ0YWluIGBnZnBgIGZsYWdzOiBzcGVjaWZpY2FsbHksIGBfX0dGUF9JT2AsIGBfX0dGUF9GU2AsIGFuZCBgX19HRlBfTU9WQUJMRWAuIEl0IGRvZXNuJ3QgdG91Y2ggYW55dGhpbmcgcmVsYXRlZCB0byBpbml0aWFsaXphdGlvbiBvciB6ZXJvaW5nLCBhbmQgaXQncyBhbGwgYWJvdXQgZW5zdXJpbmcgdGhhdCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcmVzcGVjdHMgdGFzayBjb250ZXh0IHJlc3RyaWN0aW9ucyBkdXJpbmcgYnVsayBwYWdlIGFsbG9jYXRpb24uIFRoYXQncyBnb29kOyBpdCBrZWVwcyB0aGluZ3MgY29uc3RyYWluZWQgYW5kIHByZWRpY3RhYmxlLlxuXG5Ob3csIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLCBsZXQncyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3Q6XG5cbjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2U/IE5vcGUuIE5vdGhpbmcgbGlrZSB0aGF0IGhlcmUuXG4yLiAgQW55IGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzPyBObywgSSBkb24ndCBzZWUgYW55dGhpbmcgc3VzcGljaW91cy5cbjMuICBBcmUgd2UgYWxsb2NhdGluZyBhbmQgaW5pdGlhbGl6aW5nIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI/IE5vcGUsIHRoZSBpbml0aWFsaXphdGlvbiBpcyBoYW5kbGVkIHNlcGFyYXRlbHkuXG40LiAgQW55dGhpbmcgdG8gZG8gd2l0aCBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM/IE5lZ2F0aXZlLlxuXG5Tbywgd2hlcmUgZG9lcyB0aGlzIGxlYXZlIHVzIHdpdGggS0FTQU4gYW5kIEtNU0FOP1xuXG5XZWxsLCBMT0NLREVQIGlzIGFscmVhZHkga2VlcGluZyBhbiBleWUgb24gbG9ja2luZyBkZWFkbG9ja3MsIGFuZCBLQVNBTiBoYW5kbGVzIG1lbW9yeSBzYWZldHkuIFRoZSBwYXJ0IEknbSBmb2N1c2luZyBvbiBpc24ndCBhYm91dCBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIG9yIGxvY2tpbmcsIGJ1dCB3aGF0IEtNU0FOIGlzIGZvcjogaXQgY2hlY2tzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIFRoaXMgcGF0Y2ggaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB0aG9zZSBjb25jZXJuczsgaXQncyBhIHZlcnkgc3RyYWlnaHRmb3J3YXJkIGZsYWcgbWFuYWdlbWVudC5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLlxuXG5Pa2F5LCBJJ20gcmVhZHkgdG8gcHJlcGFyZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Njc1LCJPdXRwdXRUb2tlbnMiOjIzMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjQ3OjA3LjM5MTI0OTkzNloiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgIHRvIGFwcGx5IHBlci10YXNrIEdGUCBjb250ZXh0IHJlc3RyaWN0aW9ucyB2aWEgYGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKWAuIFRoaXMgZW5zdXJlcyB0YXNrLWxldmVsIGZsYWdzIHN1Y2ggYXMgUEZfTUVNQUxMT0NfTk9JTywgUEZfTUVNQUxMT0NfTk9GUywgYW5kIFBGX01FTUFMTE9DX1BJTiBjb3JyZWN0bHkgbWFzayBHRlAgZmxhZ3MgKGUuZy4sIHN0cmlwcGluZyBfX0dGUF9JTywgX19HRlBfRlMsIF9fR0ZQX01PVkFCTEUpIHRvIHByZXZlbnQgZGVhZGxvY2tzIGR1cmluZyByZWNsYWltLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnk6XFxuMS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UuXFxuMi4gSXQgZG9lcyBub3QgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uLCB6ZXJvaW5nLCBvciBzdHJ1Y3QgZmllbGQgcG9wdWxhdGlvbi5cXG4zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYnJhbmNoZXMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBhZmZlY3QgYnVmZmVyIGJvdW5kcy9sZW5ndGhzLlxcblxcbkFueSByZWNsYWltIG9yIGxvY2tpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gdGFzayBHRlAgY29udGV4dHMgYXJlIHRyYWNrZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgbWVtb3J5IGFsbG9jIGRlYnVnZ2luZywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYCB0byBhcHBseSBwZXItdGFzayBHRlAgY29udGV4dCByZXN0cmljdGlvbnMgdmlhIGBjdXJyZW50X2dmcF9jb250ZXh0KGdmcClgLiBUaGlzIGVuc3VyZXMgdGFzay1sZXZlbCBmbGFncyBzdWNoIGFzIFBGX01FTUFMTE9DX05PSU8sIFBGX01FTUFMTE9DX05PRlMsIGFuZCBQRl9NRU1BTExPQ19QSU4gY29ycmVjdGx5IG1hc2sgR0ZQIGZsYWdzIChlLmcuLCBzdHJpcHBpbmcgX19HRlBfSU8sIF9fR0ZQX0ZTLCBfX0dGUF9NT1ZBQkxFKSB0byBwcmV2ZW50IGRlYWRsb2NrcyBkdXJpbmcgcmVjbGFpbS5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OlxcbjEuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIG1vZGlmeSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLlxcbjIuIEl0IGRvZXMgbm90IGFsdGVyIG1lbW9yeSBpbml0aWFsaXphdGlvbiwgemVyb2luZywgb3Igc3RydWN0IGZpZWxkIHBvcHVsYXRpb24uXFxuMy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGVzIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEgb3IgYWZmZWN0IGJ1ZmZlciBib3VuZHMvbGVuZ3Rocy5cXG5cXG5BbnkgcmVjbGFpbSBvciBsb2NraW5nIGlzc3VlcyByZWxhdGVkIHRvIHRhc2sgR0ZQIGNvbnRleHRzIGFyZSB0cmFja2VkIGJ5IExPQ0tERVAgYW5kIHN0YW5kYXJkIG1lbW9yeSBhbGxvYyBkZWJ1Z2dpbmcsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9pgck[1] Phase: Succeeded StartedAt: 2026-09-15 09:47:18 +0000 UTC FinishedAt: 2026-09-15 09:47:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9pgck[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-15 09:47:18 +0000 UTC FinishedAt: 2026-09-15 09:47:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9pgck[2] Phase: Succeeded StartedAt: 2026-09-15 09:47:18 +0000 UTC FinishedAt: 2026-09-15 10:24:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9pgck[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"6190ae9d-78c4-4f11-93ea-b70fdfd2ee3c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-09-15 09:47:18 +0000 UTC FinishedAt: 2026-09-15 10:24:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"6190ae9d-78c4-4f11-93ea-b70fdfd2ee3c","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-workflow9pgck[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"6190ae9d-78c4-4f11-93ea-b70fdfd2ee3c","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-09-15 09:47:18 +0000 UTC FinishedAt: 2026-09-15 09:47:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9pgck[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"6190ae9d-78c4-4f11-93ea-b70fdfd2ee3c","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-09-15 09:47:18 +0000 UTC FinishedAt: 2026-09-15 09:47:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","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-workflow9pgck/series-workflow9pgck-convert-artifact-558223088/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9pgck[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"6190ae9d-78c4-4f11-93ea-b70fdfd2ee3c","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-09-15 09:47:38 +0000 UTC FinishedAt: 2026-09-15 10:04:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9pgck[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"6190ae9d-78c4-4f11-93ea-b70fdfd2ee3c","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-09-15 09:47:38 +0000 UTC FinishedAt: 2026-09-15 10:04:23 +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:*22e34633-7baf-43d1-94bc-8fb87f3c0346,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-workflow9pgck/series-workflow9pgck-convert-artifact-558223088/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": "53e88621-967d-44f1-9410-e1afe632c297", "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-workflow9pgck/series-workflow9pgck-build-action-3151944182/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9pgck[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"6190ae9d-78c4-4f11-93ea-b70fdfd2ee3c","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-09-15 09:47:38 +0000 UTC FinishedAt: 2026-09-15 10:04:13 +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:*22e34633-7baf-43d1-94bc-8fb87f3c0346,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-workflow9pgck/series-workflow9pgck-convert-artifact-558223088/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": "53e88621-967d-44f1-9410-e1afe632c297", "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-workflow9pgck/series-workflow9pgck-build-action-3151944182/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9pgck[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"6190ae9d-78c4-4f11-93ea-b70fdfd2ee3c","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-09-15 10:04:23 +0000 UTC FinishedAt: 2026-09-15 10:04:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9pgck[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"6190ae9d-78c4-4f11-93ea-b70fdfd2ee3c","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-09-15 10:04:23 +0000 UTC FinishedAt: 2026-09-15 10:04:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9pgck[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"6190ae9d-78c4-4f11-93ea-b70fdfd2ee3c","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-09-15 10:04:23 +0000 UTC FinishedAt: 2026-09-15 10:04:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9pgck[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"6190ae9d-78c4-4f11-93ea-b70fdfd2ee3c","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-09-15 10:04:23 +0000 UTC FinishedAt: 2026-09-15 10:04:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"6190ae9d-78c4-4f11-93ea-b70fdfd2ee3c","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-workflow9pgck/series-workflow9pgck-convert-artifact-2922287831/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9pgck[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"6190ae9d-78c4-4f11-93ea-b70fdfd2ee3c","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-09-15 10:04:33 +0000 UTC FinishedAt: 2026-09-15 10:06:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9pgck[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"6190ae9d-78c4-4f11-93ea-b70fdfd2ee3c","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-09-15 10:04:33 +0000 UTC FinishedAt: 2026-09-15 10:06:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*53e88621-967d-44f1-9410-e1afe632c297,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-workflow9pgck/series-workflow9pgck-build-action-3151944182/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-workflow9pgck[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"6190ae9d-78c4-4f11-93ea-b70fdfd2ee3c","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-09-15 10:06:50 +0000 UTC FinishedAt: 2026-09-15 10:06:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9pgck[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"6190ae9d-78c4-4f11-93ea-b70fdfd2ee3c","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-09-15 10:06:50 +0000 UTC FinishedAt: 2026-09-15 10:06:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9pgck[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"6190ae9d-78c4-4f11-93ea-b70fdfd2ee3c","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-09-15 10:06:50 +0000 UTC FinishedAt: 2026-09-15 10:24:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9pgck[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"6190ae9d-78c4-4f11-93ea-b70fdfd2ee3c","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-09-15 10:06:50 +0000 UTC FinishedAt: 2026-09-15 10:24:17 +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:*22e34633-7baf-43d1-94bc-8fb87f3c0346,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-workflow9pgck/series-workflow9pgck-convert-artifact-2922287831/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": "14c93a25-19e0-4a42-9cba-6bfb2f3f6862", "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-workflow9pgck/series-workflow9pgck-build-action-1863387675/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9pgck[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"6190ae9d-78c4-4f11-93ea-b70fdfd2ee3c","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-09-15 10:06:50 +0000 UTC FinishedAt: 2026-09-15 10:24:07 +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:*22e34633-7baf-43d1-94bc-8fb87f3c0346,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-workflow9pgck/series-workflow9pgck-convert-artifact-2922287831/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": "14c93a25-19e0-4a42-9cba-6bfb2f3f6862", "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-workflow9pgck/series-workflow9pgck-build-action-1863387675/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9pgck[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"6190ae9d-78c4-4f11-93ea-b70fdfd2ee3c","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-09-15 10:24:17 +0000 UTC FinishedAt: 2026-09-15 10:24:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9pgck[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"6190ae9d-78c4-4f11-93ea-b70fdfd2ee3c","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-09-15 10:24:17 +0000 UTC FinishedAt: 2026-09-15 10:24:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9pgck[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"6190ae9d-78c4-4f11-93ea-b70fdfd2ee3c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Failed StartedAt: 2026-09-15 10:24:17 +0000 UTC FinishedAt: 2026-09-15 10:24:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9pgck[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","series_id":"6190ae9d-78c4-4f11-93ea-b70fdfd2ee3c","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: Failed StartedAt: 2026-09-15 10:24:17 +0000 UTC FinishedAt: 2026-09-15 10:24:27 +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:*14c93a25-19e0-4a42-9cba-6bfb2f3f6862,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-workflow9pgck/series-workflow9pgck-build-action-1863387675/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil