Name: series-workflowhr7hw Phase: Succeeded StartedAt: 2026-09-15 01:59:41 +0000 UTC FinishedAt: 2026-09-15 06:04:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhr7hw[0] Phase: Succeeded StartedAt: 2026-09-15 01:59:41 +0000 UTC FinishedAt: 2026-09-15 02:20:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhr7hw[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 01:59:41 +0000 UTC FinishedAt: 2026-09-15 02:20:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "c64eef89-8db1-49cf-9819-4d03f8d5236e" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_ext_replay_set_iblocks", "ext4_fc_replay_inode", "ext4_fc_replay" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3", "base_tree": "linux-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MmIzM0OywKICAgICYjMzQ7ZXh0NF9mY19yZXBsYXlfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF9mY19yZXBsYXkmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiBleHQ0IGZhc3QtY29tbWl0IHJlcGxheSBjb2RlIChleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoKSBhbmQgZXh0NF9mY19yZXBsYXlfaW5vZGUoKSkuIEl0IGVuc3VyZXMgdGhhdCB3aGVuIGV4dDRfbWFwX2Jsb2NrcygpLCBza2lwX2hvbGUoKSwgb3IgZXh0NF9maW5kX2V4dGVudCgpIGZhaWwsIHRoZSBlcnJvciBjb2RlIGlzIGNhcHR1cmVkLCB0aGUgZnVuY3Rpb24gaW1tZWRpYXRlbHkganVtcHMgdG8gY2xlYW51cCB3aXRob3V0IHVwZGF0aW5nIG9yIGRpcnR5aW5nIHRoZSBpbm9kZSwgYW5kIHRoZSBlcnJvciBpcyBwcm9wYWdhdGVkIHVwIHRoZSBjYWxsIHN0YWNrIHRvIGFib3J0IHRoZSByZXBsYXkuXG5cbktNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHk6XG4tIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgbmV0bGluaywgaW9jdGwsIGV0Yy4pLCBlbGltaW5hdGluZyBhbnkgcmlzayBvZiBpbmZvLWxlYWtzLlxuLSBObyBuZXcgbWVtb3J5IGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIG9yIGxlZnQgdW5pbml0aWFsaXplZDsgdGhlIG1vZGlmaWVkIGJyYW5jaGluZyByZWxpZXMgc3RyaWN0bHkgb24gcHJvcGVybHkgaW5pdGlhbGl6ZWQvYXNzaWduZWQgcmV0dXJuIHZhbHVlcyBhbmQgZXJyb3IgcG9pbnRlcnMuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLlxuLSBBbnkgYnVncyBjYXVzZWQgYnkgY29ycnVwdGVkIGpvdXJuYWwgcmVwbGF5IChzdWNoIGFzIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcykgZmFsbCB1bmRlciBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucywgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBwcm9wYWdhdGlvbiBhbmQgY29udHJvbCBmbG93IGR1cmluZyBleHQ0IGZhc3QgY29tbWl0IGpvdXJuYWwgcmVwbGF5LiBJbiBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoKSwgZXJyb3JzIHJldHVybmVkIGJ5IGV4dDRfbWFwX2Jsb2NrcygpLCBza2lwX2hvbGUoKSwgYW5kIGV4dDRfZmluZF9leHRlbnQoKSBhcmUgbm93IHByb3Blcmx5IGNhcHR1cmVkIGFuZCByZXR1cm5lZCBpbnN0ZWFkIG9mIHNpbGVudGx5IGlnbm9yZWQsIGFuZCBleHQ0X2ZjX3JlcGxheV9pbm9kZSgpIGlzIHVwZGF0ZWQgdG8gaGFuZGxlIGFuZCBwcm9wYWdhdGUgZmFpbHVyZXMuIFRoZXNlIGVycm9yLWhhbmRsaW5nIHBhdGhzIGluIGV4dDQgZmlsZXN5c3RlbSByZXBsYXkgYXJlIHJlYWNoYWJsZSBkdXJpbmcgam91cm5hbCByZWNvdmVyeSBhbmQgbW91bnQgb3BlcmF0aW9ucywgbWFraW5nIHRoZW0gcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZyB3aXRoIGNvcnJ1cHRlZCBkaXNrIGltYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQyZTE5ODYyMmRmY2JhMjI1NGI3YzViNmZlN2ZmZTU0YjFkOTFkN2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwMjoxNjo0MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jXG5pbmRleCA3NjAzOGI2YzM2NTUyLi5mOGM4MDVkODBjMzNjIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHRlbnRzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0ZW50cy5jXG5AQCAtNjI3NSw3ICYjNDM7NjI3NSw3IEBAIGludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0bWFwLm1fbGVuID0gZW5kIC0gY3VyO1xuIFx0XHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFx1MDAyNm1hcCwgMCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdGdvdG8gY2xlYW51cDtcbiBcdFx0aWYgKHJldCBcdTAwM2UgMClcbiBcdFx0XHRudW1ibGtzICYjNDM7PSByZXQ7XG4gXHRcdGN1ciA9IGN1ciAmIzQzOyBtYXAubV9sZW47XG5AQCAtNjI5MSwxNSAmIzQzOzYyOTEsMTkgQEAgaW50IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0Y3VyID0gMDtcbiBcdHJldCA9IHNraXBfaG9sZShpbm9kZSwgXHUwMDI2Y3VyKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuIFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aCwgMCk7XG4tXHRpZiAoSVNfRVJSKHBhdGgpKVxuLVx0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoSVNfRVJSKHBhdGgpKSB7XG4mIzQzO1x0XHRyZXQgPSBQVFJfRVJSKHBhdGgpO1xuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdH1cbiBcdG51bWJsa3MgJiM0Mzs9IHBhdGgtXHUwMDNlcF9kZXB0aDtcbiBcdHdoaWxlIChjdXIgXHUwMDNjIGVuZCkge1xuIFx0XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoLCAwKTtcbi1cdFx0aWYgKElTX0VSUihwYXRoKSlcbi1cdFx0XHRicmVhaztcbiYjNDM7XHRcdGlmIChJU19FUlIocGF0aCkpIHtcbiYjNDM7XHRcdFx0cmV0ID0gUFRSX0VSUihwYXRoKTtcbiYjNDM7XHRcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdFx0fVxuIFx0XHRleCA9IHBhdGhbcGF0aC1cdTAwM2VwX2RlcHRoXS5wX2V4dDtcbiBcdFx0aWYgKCFleClcbiBcdFx0XHRnb3RvIGNsZWFudXA7XG5AQCAtNjMwOCwxMSAmIzQzOzYzMTIsMTMgQEAgaW50IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRcdFx0XHRleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbihleCkpO1xuIFx0XHRyZXQgPSBza2lwX2hvbGUoaW5vZGUsIFx1MDAyNmN1cik7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdGdvdG8gY2xlYW51cDtcbiBcbiBcdFx0cGF0aDIgPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBjdXIsIHBhdGgyLCAwKTtcbi1cdFx0aWYgKElTX0VSUihwYXRoMikpXG4tXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKHBhdGgyKSkge1xuJiM0MztcdFx0XHRyZXQgPSBQVFJfRVJSKHBhdGgyKTtcbiYjNDM7XHRcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gbWF4KHBhdGgtXHUwMDNlcF9kZXB0aCwgcGF0aDItXHUwMDNlcF9kZXB0aCk7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdFx0Y21wMSA9IGNtcDIgPSAwO1xuQEAgLTYzMzMsNyAmIzQzOzYzMzksNyBAQCBpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gY2xlYW51cDpcbiBcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcbiBcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoMik7XG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBpbnQgZXh0NF9leHRfY2xlYXJfYmIoc3RydWN0IGlub2RlICppbm9kZSlcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2Zhc3RfY29tbWl0LmMgYi9mcy9leHQ0L2Zhc3RfY29tbWl0LmNcbmluZGV4IDBjYWM4OTBjZjM3MDIuLjgxMTBiMDFlMzZjMTEgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2Zhc3RfY29tbWl0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZmFzdF9jb21taXQuY1xuQEAgLTIwMDIsOCAmIzQzOzIwMDIsMTEgQEAgc3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0ICogY3Jhc2hpbmcuIFRoaXMgc2hvdWxkIGJlIGZpeGVkIGJ1dCB1bnRpbCB0aGVuLCB3ZSBjYWxjdWxhdGVcbiBcdCAqIHRoZSBudW1iZXIgb2YgYmxvY2tzIHRoZSBpbm9kZS5cbiBcdCAqL1xuLVx0aWYgKCFleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSkpXG4tXHRcdGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrcyhpbm9kZSk7XG4mIzQzO1x0aWYgKCFleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSkpIHtcbiYjNDM7XHRcdHJldCA9IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrcyhpbm9kZSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dF9icmVsc2U7XG4mIzQzO1x0fVxuIFxuIFx0aW5vZGUtXHUwMDNlaV9nZW5lcmF0aW9uID0gbGUzMl90b19jcHUoZXh0NF9yYXdfaW5vZGUoXHUwMDI2aWxvYyktXHUwMDNlaV9nZW5lcmF0aW9uKTtcbiBcdGV4dDRfcmVzZXRfaW5vZGVfc2VlZChpbm9kZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyYjMzQ7LAogICAgJiMzNDtleHQ0X2ZjX3JlcGxheV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X2ZjX3JlcGxheSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBwcm9wYWdhdGlvbiBhbmQgY29udHJvbCBmbG93IGR1cmluZyBleHQ0IGZhc3QgY29tbWl0IGpvdXJuYWwgcmVwbGF5LiBJbiBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoKSwgZXJyb3JzIHJldHVybmVkIGJ5IGV4dDRfbWFwX2Jsb2NrcygpLCBza2lwX2hvbGUoKSwgYW5kIGV4dDRfZmluZF9leHRlbnQoKSBhcmUgbm93IHByb3Blcmx5IGNhcHR1cmVkIGFuZCByZXR1cm5lZCBpbnN0ZWFkIG9mIHNpbGVudGx5IGlnbm9yZWQsIGFuZCBleHQ0X2ZjX3JlcGxheV9pbm9kZSgpIGlzIHVwZGF0ZWQgdG8gaGFuZGxlIGFuZCBwcm9wYWdhdGUgZmFpbHVyZXMuIFRoZXNlIGVycm9yLWhhbmRsaW5nIHBhdGhzIGluIGV4dDQgZmlsZXN5c3RlbSByZXBsYXkgYXJlIHJlYWNoYWJsZSBkdXJpbmcgam91cm5hbCByZWNvdmVyeSBhbmQgbW91bnQgb3BlcmF0aW9ucywgbWFraW5nIHRoZW0gcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZyB3aXRoIGNvcnJ1cHRlZCBkaXNrIGltYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQyZTE5ODYyMmRmY2JhMjI1NGI3YzViNmZlN2ZmZTU0YjFkOTFkN2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxNSAwMjoxNjo0MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50cy5jIGIvZnMvZXh0NC9leHRlbnRzLmMKaW5kZXggNzYwMzhiNmMzNjU1Mi4uZjhjODA1ZDgwYzMzYyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHRlbnRzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9leHRlbnRzLmMKQEAgLTYyNzUsNyAmIzQzOzYyNzUsNyBAQCBpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJCW1hcC5tX2xlbiA9IGVuZCAtIGN1cjsKIAkJcmV0ID0gZXh0NF9tYXBfYmxvY2tzKE5VTEwsIGlub2RlLCAmYW1wO21hcCwgMCk7CiAJCWlmIChyZXQgJmx0OyAwKQotCQkJYnJlYWs7CiYjNDM7CQkJZ290byBjbGVhbnVwOwogCQlpZiAocmV0ICZndDsgMCkKIAkJCW51bWJsa3MgJiM0Mzs9IHJldDsKIAkJY3VyID0gY3VyICYjNDM7IG1hcC5tX2xlbjsKQEAgLTYyOTEsMTUgJiM0Mzs2MjkxLDE5IEBAIGludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSkKIAljdXIgPSAwOwogCXJldCA9IHNraXBfaG9sZShpbm9kZSwgJmFtcDtjdXIpOwogCWlmIChyZXQgJmx0OyAwKQotCQlnb3RvIG91dDsKJiM0MzsJCWdvdG8gY2xlYW51cDsKIAlwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoLCAwKTsKLQlpZiAoSVNfRVJSKHBhdGgpKQotCQlnb3RvIG91dDsKJiM0MzsJaWYgKElTX0VSUihwYXRoKSkgewomIzQzOwkJcmV0ID0gUFRSX0VSUihwYXRoKTsKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQogCW51bWJsa3MgJiM0Mzs9IHBhdGgtJmd0O3BfZGVwdGg7CiAJd2hpbGUgKGN1ciAmbHQ7IGVuZCkgewogCQlwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoLCAwKTsKLQkJaWYgKElTX0VSUihwYXRoKSkKLQkJCWJyZWFrOwomIzQzOwkJaWYgKElTX0VSUihwYXRoKSkgewomIzQzOwkJCXJldCA9IFBUUl9FUlIocGF0aCk7CiYjNDM7CQkJZ290byBjbGVhbnVwOwomIzQzOwkJfQogCQlleCA9IHBhdGhbcGF0aC0mZ3Q7cF9kZXB0aF0ucF9leHQ7CiAJCWlmICghZXgpCiAJCQlnb3RvIGNsZWFudXA7CkBAIC02MzA4LDExICYjNDM7NjMxMiwxMyBAQCBpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJCQkJCWV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4KSk7CiAJCXJldCA9IHNraXBfaG9sZShpbm9kZSwgJmFtcDtjdXIpOwogCQlpZiAocmV0ICZsdDsgMCkKLQkJCWJyZWFrOwomIzQzOwkJCWdvdG8gY2xlYW51cDsKIAogCQlwYXRoMiA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aDIsIDApOwotCQlpZiAoSVNfRVJSKHBhdGgyKSkKLQkJCWJyZWFrOwomIzQzOwkJaWYgKElTX0VSUihwYXRoMikpIHsKJiM0MzsJCQlyZXQgPSBQVFJfRVJSKHBhdGgyKTsKJiM0MzsJCQlnb3RvIGNsZWFudXA7CiYjNDM7CQl9CiAKIAkJZm9yIChpID0gMDsgaSAmbHQ7PSBtYXgocGF0aC0mZ3Q7cF9kZXB0aCwgcGF0aDItJmd0O3BfZGVwdGgpOyBpJiM0MzsmIzQzOykgewogCQkJY21wMSA9IGNtcDIgPSAwOwpAQCAtNjMzMyw3ICYjNDM7NjMzOSw3IEBAIGludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSkKIGNsZWFudXA6CiAJZXh0NF9mcmVlX2V4dF9wYXRoKHBhdGgpOwogCWV4dDRfZnJlZV9leHRfcGF0aChwYXRoMik7Ci0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIGludCBleHQ0X2V4dF9jbGVhcl9iYihzdHJ1Y3QgaW5vZGUgKmlub2RlKQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9mYXN0X2NvbW1pdC5jIGIvZnMvZXh0NC9mYXN0X2NvbW1pdC5jCmluZGV4IDBjYWM4OTBjZjM3MDIuLjgxMTBiMDFlMzZjMTEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZmFzdF9jb21taXQuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2Zhc3RfY29tbWl0LmMKQEAgLTIwMDIsOCAmIzQzOzIwMDIsMTEgQEAgc3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCSAqIGNyYXNoaW5nLiBUaGlzIHNob3VsZCBiZSBmaXhlZCBidXQgdW50aWwgdGhlbiwgd2UgY2FsY3VsYXRlCiAJICogdGhlIG51bWJlciBvZiBibG9ja3MgdGhlIGlub2RlLgogCSAqLwotCWlmICghZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpKQotCQlleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoaW5vZGUpOwomIzQzOwlpZiAoIWV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSkgewomIzQzOwkJcmV0ID0gZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKGlub2RlKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBvdXRfYnJlbHNlOwomIzQzOwl9CiAKIAlpbm9kZS0mZ3Q7aV9nZW5lcmF0aW9uID0gbGUzMl90b19jcHUoZXh0NF9yYXdfaW5vZGUoJmFtcDtpbG9jKS0mZ3Q7aV9nZW5lcmF0aW9uKTsKIAlleHQ0X3Jlc2V0X2lub2RlX3NlZWQoaW5vZGUpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzcyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipBbmFseXppbmcgdGhlIEV4dDQgRmlsZSBTeXN0ZW0gUGF0Y2gqKgoKT2theSwgc28gdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBmcy9leHQ0L2V4dGVudHMuY2AgYW5kIGBmcy9leHQ0L2Zhc3RfY29tbWl0LmNgLiBUaGF0IG5hcnJvd3MgZG93biB0aGUgYXJlYSBvZiBjb25jZXJuIHNpZ25pZmljYW50bHkuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBgZnMvZXh0NGAgZGlyZWN0b3J5IGFuZCBzdGFydCBpbnNwZWN0aW5nIHRoZSBkaWZmLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgdG8gdGhlIGV4dGVudCBoYW5kbGluZyBhbmQgZmFzdCBjb21taXQgbWVjaGFuaXNtcy4gVGhlc2UgYXJlIGZ1bmRhbWVudGFsIHRvIEV4dDQmIzM5O3MgcGVyZm9ybWFuY2UgYW5kIGRhdGEgaW50ZWdyaXR5LCBzbyBJJiMzOTtsbCBuZWVkIGEgZ29vZCBncmFzcCBvZiB0aGUgY29udGV4dC4KCkkmIzM5O2xsIGJlIHJlYWNoaW5nIGZvciBteSB0b29scy4gSSYjMzk7bGwgcHJvYmFibHkgdXNlIGEgYHJlYWQtZmlsZWAgY29tbWFuZCwgaWYgYXZhaWxhYmxlLCBvciBldmVuIGBncmVwcGVyYCB0byBxdWlja2x5IGxvY2F0ZSB3aGVyZSBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCBhbmQgYGV4dDRfZmNfcmVwbGF5X2lub2RlYCBhcmUgZGVmaW5lZCBhbmQgdXNlZC4gVW5kZXJzdGFuZGluZyB0aGUgcHVycG9zZSBvZiB0aG9zZSBzcGVjaWZpYyBmdW5jdGlvbnMgd2lsbCBiZSBjcnVjaWFsLiBSZXBsYXkgb3BlcmF0aW9ucyBhcmUgYWxtb3N0IGFsd2F5cyBjcml0aWNhbCB0byBlbnN1cmluZyBjb25zaXN0ZW5jeSBhZnRlciBhIGNyYXNoIG9yIHBvd2VyIGZhaWx1cmUsIHNvIEkmIzM5O20gZXhwZWN0aW5nIHNvbWV0aGluZyBpbXBvcnRhbnQgdG8gYmUgaGFwcGVuaW5nIHRoZXJlLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGJsb2NrIGFsbG9jYXRpb24gb3IgaW5vZGUgc3RhdGUgZHVyaW5nIHJlY292ZXJ5LiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2V4dGVudHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYyNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjI2NTpcdFx0XHRyZXR1cm4gUFRSX0VSUihwYXRoKTtcbjYyNjY6XHRcdGV4ID0gcGF0aFtwYXRoLVx1MDAzZXBfZGVwdGhdLnBfZXh0O1xuNjI2NzpcdFx0aWYgKCFleClcbjYyNjg6XHRcdFx0Z290byBvdXQ7XG42MjY5Olx0XHRlbmQgPSBsZTMyX3RvX2NwdShleC1cdTAwM2VlZV9ibG9jaykgJiM0MzsgZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oZXgpO1xuNjI3MDpcdFxuNjI3MTpcdFx0LyogQ291bnQgdGhlIG51bWJlciBvZiBkYXRhIGJsb2NrcyAqL1xuNjI3MjpcdFx0Y3VyID0gMDtcbjYyNzM6XHRcdHdoaWxlIChjdXIgXHUwMDNjIGVuZCkge1xuNjI3NDpcdFx0XHRtYXAubV9sYmxrID0gY3VyO1xuNjI3NTpcdFx0XHRtYXAubV9sZW4gPSBlbmQgLSBjdXI7XG42Mjc2Olx0XHRcdHJldCA9IGV4dDRfbWFwX2Jsb2NrcyhOVUxMLCBpbm9kZSwgXHUwMDI2bWFwLCAwKTtcbjYyNzc6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjYyNzg6XHRcdFx0XHRnb3RvIGNsZWFudXA7XG42Mjc5Olx0XHRcdGlmIChyZXQgXHUwMDNlIDApXG42MjgwOlx0XHRcdFx0bnVtYmxrcyAmIzQzOz0gcmV0O1xuNjI4MTpcdFx0XHRjdXIgPSBjdXIgJiM0MzsgbWFwLm1fbGVuO1xuNjI4MjpcdFx0fVxuNjI4MzpcdFxuNjI4NDpcdFx0LypcbjYyODU6XHRcdCAqIENvdW50IHRoZSBudW1iZXIgb2YgZXh0ZW50IHRyZWUgYmxvY2tzLiBXZSBkbyBpdCBieSBsb29raW5nIHVwXG42Mjg2Olx0XHQgKiB0d28gc3VjY2Vzc2l2ZSBleHRlbnRzIGFuZCBkZXRlcm1pbmluZyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuXG42Mjg3Olx0XHQgKiB0aGVpciBwYXRocy4gV2hlbiBwYXRoIGlzIGRpZmZlcmVudCBmb3IgMiBzdWNjZXNzaXZlIGV4dGVudHNcbjYyODg6XHRcdCAqIHdlIGNvbXBhcmUgdGhlIGJsb2NrcyBpbiB0aGUgcGF0aCBhdCBlYWNoIGxldmVsIGFuZCBpbmNyZW1lbnRcbjYyODk6XHRcdCAqIGlibG9ja3MgYnkgdG90YWwgbnVtYmVyIG9mIGRpZmZlcmVuY2VzIGZvdW5kLlxuNjI5MDpcdFx0ICovXG42MjkxOlx0XHRjdXIgPSAwO1xuNjI5MjpcdFx0cmV0ID0gc2tpcF9ob2xlKGlub2RlLCBcdTAwMjZjdXIpO1xuNjI5MzpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjYyOTQ6XHRcdFx0Z290byBjbGVhbnVwO1xuNjI5NTpcdFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aCwgMCk7XG42Mjk2Olx0XHRpZiAoSVNfRVJSKHBhdGgpKSB7XG42Mjk3Olx0XHRcdHJldCA9IFBUUl9FUlIocGF0aCk7XG42Mjk4Olx0XHRcdGdvdG8gY2xlYW51cDtcbjYyOTk6XHRcdH1cbjYzMDA6XHRcdG51bWJsa3MgJiM0Mzs9IHBhdGgtXHUwMDNlcF9kZXB0aDtcbjYzMDE6XHRcdHdoaWxlIChjdXIgXHUwMDNjIGVuZCkge1xuNjMwMjpcdFx0XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoLCAwKTtcbjYzMDM6XHRcdFx0aWYgKElTX0VSUihwYXRoKSkge1xuNjMwNDpcdFx0XHRcdHJldCA9IFBUUl9FUlIocGF0aCk7XG42MzA1Olx0XHRcdFx0Z290byBjbGVhbnVwO1xuNjMwNjpcdFx0XHR9XG42MzA3Olx0XHRcdGV4ID0gcGF0aFtwYXRoLVx1MDAzZXBfZGVwdGhdLnBfZXh0O1xuNjMwODpcdFx0XHRpZiAoIWV4KVxuNjMwOTpcdFx0XHRcdGdvdG8gY2xlYW51cDtcbjYzMTA6XHRcbjYzMTE6XHRcdFx0Y3VyID0gbWF4KGN1ciAmIzQzOyAxLCBsZTMyX3RvX2NwdShleC1cdTAwM2VlZV9ibG9jaykgJiM0MztcbjYzMTI6XHRcdFx0XHRcdFx0ZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oZXgpKTtcbjYzMTM6XHRcdFx0cmV0ID0gc2tpcF9ob2xlKGlub2RlLCBcdTAwMjZjdXIpO1xuNjMxNDpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuNjMxNTpcdFx0XHRcdGdvdG8gY2xlYW51cDtcbjYzMTY6XHRcbjYzMTc6XHRcdFx0cGF0aDIgPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBjdXIsIHBhdGgyLCAwKTtcbjYzMTg6XHRcdFx0aWYgKElTX0VSUihwYXRoMikpIHtcbjYzMTk6XHRcdFx0XHRyZXQgPSBQVFJfRVJSKHBhdGgyKTtcbjYzMjA6XHRcdFx0XHRnb3RvIGNsZWFudXA7XG42MzIxOlx0XHRcdH1cbjYzMjI6XHRcbjYzMjM6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2M9IG1heChwYXRoLVx1MDAzZXBfZGVwdGgsIHBhdGgyLVx1MDAzZXBfZGVwdGgpOyBpJiM0MzsmIzQzOykge1xuNjMyNDpcdFx0XHRcdGNtcDEgPSBjbXAyID0gMDtcbjYzMjU6XHRcdFx0XHRpZiAoaSBcdTAwM2M9IHBhdGgtXHUwMDNlcF9kZXB0aClcbjYzMjY6XHRcdFx0XHRcdGNtcDEgPSBwYXRoW2ldLnBfYmggP1xuNjMyNzpcdFx0XHRcdFx0XHRwYXRoW2ldLnBfYmgtXHUwMDNlYl9ibG9ja25yIDogMDtcbjYzMjg6XHRcdFx0XHRpZiAoaSBcdTAwM2M9IHBhdGgyLVx1MDAzZXBfZGVwdGgpXG42MzI5Olx0XHRcdFx0XHRjbXAyID0gcGF0aDJbaV0ucF9iaCA/XG42MzMwOlx0XHRcdFx0XHRcdHBhdGgyW2ldLnBfYmgtXHUwMDNlYl9ibG9ja25yIDogMDtcbjYzMzE6XHRcdFx0XHRpZiAoY21wMSAhPSBjbXAyIFx1MDAyNlx1MDAyNiBjbXAyICE9IDApXG42MzMyOlx0XHRcdFx0XHRudW1ibGtzJiM0MzsmIzQzOztcbjYzMzM6XHRcdFx0fVxuNjMzNDpcdFx0fVxuNjMzNTpcdFxuNjMzNjpcdG91dDpcbjYzMzc6XHRcdGlub2RlLVx1MDAzZWlfYmxvY2tzID0gbnVtYmxrcyBcdTAwM2NcdTAwM2MgKGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cyAtIDkpO1xuNjMzODpcdFx0ZXh0NF9tYXJrX2lub2RlX2RpcnR5KE5VTEwsIGlub2RlKTtcbjYzMzk6XHRjbGVhbnVwOlxuNjM0MDpcdFx0ZXh0NF9mcmVlX2V4dF9wYXRoKHBhdGgpO1xuNjM0MTpcdFx0ZXh0NF9mcmVlX2V4dF9wYXRoKHBhdGgyKTtcbjYzNDI6XHRcdHJldHVybiByZXQ7XG42MzQzOlx0fVxuNjM0NDpcdFxuNjM0NTpcdGludCBleHQ0X2V4dF9jbGVhcl9iYihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuNjM0NjpcdHtcbjYzNDc6XHRcdHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoID0gTlVMTDtcbjYzNDg6XHRcdHN0cnVjdCBleHQ0X2V4dGVudCAqZXg7XG42MzQ5Olx0XHRleHQ0X2xibGtfdCBjdXIgPSAwLCBlbmQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ3MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZywgJiMzNDtUaW1lIHRvIGZvY3VzIG9uIHRoZSBzdGFydGluZyBwb2ludCBvZiBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCB3aXRoaW4gdGhlIGBmcy9leHQ0L2V4dGVudHMuY2AgZmlsZS4mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uJiMzOTtzIGluaXRpYWwgc2V0dXAgYW5kIGhvdyBpdCBiZWdpbnMgdGhlIHJlcGxheSBwcm9jZXNzIGZvciBleHRlbnQtYmFzZWQgaW5vZGVzLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgb3ZlcmFsbCBkZXNpZ24sIHdoZXJlIGl0IGJlZ2lucyB0aGUgcHJvY2VzcywgYW5kIHdoYXQgaXQgZG9lcyBmaXJzdC4gS25vd2luZyBpdHMgaW5pdGlhbCBvcGVyYXRpb25zIGlzIGNydWNpYWwgZm9yIGRlY2lwaGVyaW5nIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBleHRlbnQgcmVwbGF5IG1lY2hhbmlzbS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB2YXJpYWJsZXMgaXQmIzM5O3MgdXNpbmcgYW5kIGhvdyBpdCYjMzk7cyBzZXR0aW5nIHRoaW5ncyB1cCBiZWZvcmUgZGl2aW5nIGludG8gdGhlIGNvcmUgbG9naWMuIFRpbWUgdG8gZ2V0IHN0YXJ0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2V4dGVudHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYyNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjI0MDpcdFx0bWFwLm1fbGVuID0gKChpbm9kZS1cdTAwM2VpX3NpemUpIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHMpIC0gKmN1cjtcbjYyNDE6XHRcbjYyNDI6XHRcdHJldCA9IGV4dDRfbWFwX2Jsb2NrcyhOVUxMLCBpbm9kZSwgXHUwMDI2bWFwLCAwKTtcbjYyNDM6XHRcdGlmIChyZXQgXHUwMDNjIDApXG42MjQ0Olx0XHRcdHJldHVybiByZXQ7XG42MjQ1Olx0XHRpZiAocmV0ICE9IDApXG42MjQ2Olx0XHRcdHJldHVybiAwO1xuNjI0NzpcdFx0KmN1ciA9ICpjdXIgJiM0MzsgbWFwLm1fbGVuO1xuNjI0ODpcdFx0cmV0dXJuIDA7XG42MjQ5Olx0fVxuNjI1MDpcdFxuNjI1MTpcdC8qIENvdW50IG51bWJlciBvZiBibG9ja3MgdXNlZCBieSB0aGlzIGlub2RlIGFuZCB1cGRhdGUgaV9ibG9ja3MgKi9cbjYyNTI6XHRpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG42MjUzOlx0e1xuNjI1NDpcdFx0c3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGggPSBOVUxMLCAqcGF0aDIgPSBOVUxMO1xuNjI1NTpcdFx0c3RydWN0IGV4dDRfZXh0ZW50ICpleDtcbjYyNTY6XHRcdGV4dDRfbGJsa190IGN1ciA9IDAsIGVuZDtcbjYyNTc6XHRcdGludCBudW1ibGtzID0gMCwgaSwgcmV0ID0gMDtcbjYyNTg6XHRcdGV4dDRfZnNibGtfdCBjbXAxLCBjbXAyO1xuNjI1OTpcdFx0c3RydWN0IGV4dDRfbWFwX2Jsb2NrcyBtYXA7XG42MjYwOlx0XG42MjYxOlx0XHQvKiBEZXRlcm1pbiB0aGUgc2l6ZSBvZiB0aGUgZmlsZSBmaXJzdCAqL1xuNjI2MjpcdFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIEVYVF9NQVhfQkxPQ0tTIC0gMSwgTlVMTCxcbjYyNjM6XHRcdFx0XHRcdFx0RVhUNF9FWF9OT0NBQ0hFKTtcbjYyNjQ6XHRcdGlmIChJU19FUlIocGF0aCkpXG42MjY1Olx0XHRcdHJldHVybiBQVFJfRVJSKHBhdGgpO1xuNjI2NjpcdFx0ZXggPSBwYXRoW3BhdGgtXHUwMDNlcF9kZXB0aF0ucF9leHQ7XG42MjY3Olx0XHRpZiAoIWV4KVxuNjI2ODpcdFx0XHRnb3RvIG91dDtcbjYyNjk6XHRcdGVuZCA9IGxlMzJfdG9fY3B1KGV4LVx1MDAzZWVlX2Jsb2NrKSAmIzQzOyBleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbihleCk7XG42MjcwOlx0XG42MjcxOlx0XHQvKiBDb3VudCB0aGUgbnVtYmVyIG9mIGRhdGEgYmxvY2tzICovXG42MjcyOlx0XHRjdXIgPSAwO1xuNjI3MzpcdFx0d2hpbGUgKGN1ciBcdTAwM2MgZW5kKSB7XG42Mjc0Olx0XHRcdG1hcC5tX2xibGsgPSBjdXI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMyMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZm9jdXNpbmcgb24gYGZzL2V4dDQvZmFzdF9jb21taXQuY2AgYXJvdW5kIGxpbmUgMjAwMi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvZmFzdF9jb21taXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk4MDpcdFx0LyogSW1tZWRpYXRlbHkgdXBkYXRlIHRoZSBpbm9kZSBvbiBkaXNrLiAqL1xuMTk4MTpcdFx0cmV0ID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoTlVMTCwgTlVMTCwgaWxvYy5iaCk7XG4xOTgyOlx0XHRpZiAocmV0KVxuMTk4MzpcdFx0XHRnb3RvIG91dF9icmVsc2U7XG4xOTg0Olx0XHRyZXQgPSBzeW5jX2RpcnR5X2J1ZmZlcihpbG9jLmJoKTtcbjE5ODU6XHRcdGlmIChyZXQpXG4xOTg2Olx0XHRcdGdvdG8gb3V0X2JyZWxzZTtcbjE5ODc6XHRcdHJldCA9IGV4dDRfbWFya19pbm9kZV91c2VkKHNiLCBpbm8pO1xuMTk4ODpcdFx0aWYgKHJldClcbjE5ODk6XHRcdFx0Z290byBvdXRfYnJlbHNlO1xuMTk5MDpcdFxuMTk5MTpcdFx0LyogR2l2ZW4gdGhhdCB3ZSBqdXN0IHdyb3RlIHRoZSBpbm9kZSBvbiBkaXNrLCB0aGlzIFNIT1VMRCBzdWNjZWVkLiAqL1xuMTk5MjpcdFx0aW5vZGUgPSBleHQ0X2lnZXQoc2IsIGlubywgRVhUNF9JR0VUX05PUk1BTCk7XG4xOTkzOlx0XHRpZiAoSVNfRVJSKGlub2RlKSkge1xuMTk5NDpcdFx0XHRleHQ0X2RlYnVnKFwmIzM0O0lub2RlIG5vdCBmb3VuZC5cJiMzNDspO1xuMTk5NTpcdFx0XHRpbm9kZSA9IE5VTEw7XG4xOTk2Olx0XHRcdHJldCA9IC1FRlNDT1JSVVBURUQ7XG4xOTk3Olx0XHRcdGdvdG8gb3V0X2JyZWxzZTtcbjE5OTg6XHRcdH1cbjE5OTk6XHRcbjIwMDA6XHRcdC8qXG4yMDAxOlx0XHQgKiBPdXIgYWxsb2NhdG9yIGNvdWxkIGhhdmUgbWFkZSBkaWZmZXJlbnQgZGVjaXNpb25zIHRoYW4gYmVmb3JlXG4yMDAyOlx0XHQgKiBjcmFzaGluZy4gVGhpcyBzaG91bGQgYmUgZml4ZWQgYnV0IHVudGlsIHRoZW4sIHdlIGNhbGN1bGF0ZVxuMjAwMzpcdFx0ICogdGhlIG51bWJlciBvZiBibG9ja3MgdGhlIGlub2RlLlxuMjAwNDpcdFx0ICovXG4yMDA1Olx0XHRpZiAoIWV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSkge1xuMjAwNjpcdFx0XHRyZXQgPSBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoaW5vZGUpO1xuMjAwNzpcdFx0XHRpZiAocmV0KVxuMjAwODpcdFx0XHRcdGdvdG8gb3V0X2JyZWxzZTtcbjIwMDk6XHRcdH1cbjIwMTA6XHRcbjIwMTE6XHRcdGlub2RlLVx1MDAzZWlfZ2VuZXJhdGlvbiA9IGxlMzJfdG9fY3B1KGV4dDRfcmF3X2lub2RlKFx1MDAyNmlsb2MpLVx1MDAzZWlfZ2VuZXJhdGlvbik7XG4yMDEyOlx0XHRleHQ0X3Jlc2V0X2lub2RlX3NlZWQoaW5vZGUpO1xuMjAxMzpcdFxuMjAxNDpcdFx0ZXh0NF9pbm9kZV9jc3VtX3NldChpbm9kZSwgZXh0NF9yYXdfaW5vZGUoXHUwMDI2aWxvYyksIEVYVDRfSShpbm9kZSkpO1xuMjAxNTpcdFx0cmV0ID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoTlVMTCwgTlVMTCwgaWxvYy5iaCk7XG4yMDE2Olx0XHRzeW5jX2RpcnR5X2J1ZmZlcihpbG9jLmJoKTtcbjIwMTc6XHRvdXRfYnJlbHNlOlxuMjAxODpcdFx0YnJlbHNlKGlsb2MuYmgpO1xuMjAxOTpcdG91dDpcbjIwMjA6XHRcdGlwdXQoaW5vZGUpO1xuMjAyMTpcdFx0aWYgKCFyZXQpXG4yMDIyOlx0XHRcdGJsa2Rldl9pc3N1ZV9mbHVzaChzYi1cdTAwM2VzX2JkZXYpO1xuMjAyMzpcdFxuMjAyNDpcdFx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTM2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBGaXg6IERlZXAgRGl2ZSBpbnRvIHRoZSBDb21taXQgSGlzdG9yeSoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBwYXRjaCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCBpdC4gTXkgZmlyc3QgbW92ZSBpcyBhbHdheXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZTogdGhlIGNvbW1pdCBoaXN0b3J5LCB0aGUgYGdpdCBsb2dgLiBXaGF0IHNwZWNpZmljIGlzc3VlIHdlcmUgd2UgYWRkcmVzc2luZyB3aXRoIHRoaXMgY2hhbmdlPyBJJiMzOTttIG5vdCBnb2luZyB0byBiZSBjb250ZW50IHdpdGgganVzdCBhIHZhZ3VlIGRlc2NyaXB0aW9uLiBJIG5lZWQgdG8gc2VlIHRoZSBjb250ZXh0IOKAkyB0aGUgYnVnIHJlcG9ydCAoSmlyYSwgR2l0SHViIGlzc3VlLCB3aGF0ZXZlciBvdXIgc3lzdGVtIGlzKSwgdGhlIGRpc2N1c3Npb24sIG1heWJlIGV2ZW4gdGhlIHByZWxpbWluYXJ5IGF0dGVtcHRzIHRvIGZpeCBpdC4gS25vd2luZyB0aGUgcHJvYmxlbSBsYW5kc2NhcGUgaXMgYWJzb2x1dGVseSBjcml0aWNhbCBiZWZvcmUgSSBjYW4gYmVnaW4gdG8gYXNzZXNzIHRoZSBxdWFsaXR5IG9mIHRoZSBzb2x1dGlvbi4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgKnJlYXNvbmluZyogYmVoaW5kIHRoZSBmaXgsIGFuZCBkZXRlcm1pbmUgaWYgdGhlIHJvb3QgY2F1c2Ugd2FzIHByb3Blcmx5IGFkZHJlc3NlZCBvciBpZiB0aGlzIGlzIG1lcmVseSBhIGJhbmQtYWlkLiBEaWdnaW5nIGludG8gdGhlIGBnaXQgbG9nYCBpcyB0aGUgZmlyc3Qgc3RlcCBpbiBkZXRlcm1pbmluZyB0aGUgcHJvcGVyIGFzc2Vzc21lbnQgb2YgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9Mzk1NT1leHRlcm4gdm9pZCBleHQ0X2V4dF9yZXBsYXlfc2hyaW5rX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGVuZCk7XG5mcy9leHQ0L2V4dDQuaDozOTU2OmV4dGVybiBpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvZXh0NC9leHQ0LmgtMzk1Ny1leHRlcm4gaW50IGV4dDRfZXh0X3JlcGxheV91cGRhdGVfZXgoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3Qgc3RhcnQsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NjIzND1zdGF0aWMgaW50IHNraXBfaG9sZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCAqY3VyKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTYyNTEtLyogQ291bnQgbnVtYmVyIG9mIGJsb2NrcyB1c2VkIGJ5IHRoaXMgaW5vZGUgYW5kIHVwZGF0ZSBpX2Jsb2NrcyAqL1xuZnMvZXh0NC9leHRlbnRzLmM6NjI1MjppbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L2V4dGVudHMuYy02MjUzLXtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTkyNT1zdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwMDUtXHRpZiAoIWV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSkge1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIwMDY6XHRcdHJldCA9IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrcyhpbm9kZSk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjAwNy1cdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc5MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdW5kZXJzdGFuZGluZyB0aGUgaW1wbGVtZW50YXRpb24gb2YgZmFzdCBjb21taXQgcmVwbGF5IGluIGV4dDQ6CgoqKkFuYWx5emluZyBleHQ0JiMzOTtzIEZhc3QgQ29tbWl0IFJlcGxheSoqCgpSaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBleHQ0X2ZjX3JlcGxheWAgZnVuY3Rpb24gKG9yIHNpbWlsYXIgbmFtZSBpZiBJJiMzOTttIG9mZiBzbGlnaHRseSkgaXMgYWN0dWFsbHkgKmNhbGxlZCogd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0gY29kZS4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGNvZGViYXNlLCBpcyB0byBzaW1wbHkgdXNlIGBncmVwYC4gSSYjMzk7bGwgc2VhcmNoIHRoZSBleHQ0IHNvdXJjZSB0cmVlIGZvciBgZXh0NF9mY19yZXBsYXlgLiBJZiB0aGF0IGNvbWVzIHVwIGVtcHR5LCBJJiMzOTtsbCBzd2l0Y2ggdGFjdGljcyBhbmQgbG9vayBmb3IgY2FsbHMgdG8gZnVuY3Rpb25zIGluIGBmYXN0X2NvbW1pdC5jYCwgZ2l2ZW4gdGhhdCYjMzk7cyBwcm9iYWJseSB3aGVyZSB0aGUgY29yZSBsb2dpYyByZXNpZGVzLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHBhdGhzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0cmlnZ2VyaW5nIGV2ZW50cyBhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgb3BlcmF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfZmNfcmVwbGF5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9MTU5Mj1zdHJ1Y3QgZXh0NF9zYl9pbmZvIHtcbi0tXG5mcy9leHQ0L2V4dDQuaC0xODcyLSNlbmRpZlxuZnMvZXh0NC9leHQ0Lmg6MTg3MzpcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSBzX2ZjX3JlcGxheV9zdGF0ZTtcbmZzL2V4dDQvZXh0NC5oLTE4NzQtfTtcbi0tXG5mcy9leHQ0L2V4dDQuaD0zMDkwPXZvaWQgZXh0NF9mY19kZWwoc3RydWN0IGlub2RlICppbm9kZSk7XG5mcy9leHQ0L2V4dDQuaDozMDkxOmJvb2wgZXh0NF9mY19yZXBsYXlfY2hlY2tfZXhjbHVkZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZXh0NF9mc2Jsa190IGJsb2NrKTtcbmZzL2V4dDQvZXh0NC5oOjMwOTI6dm9pZCBleHQ0X2ZjX3JlcGxheV9jbGVhbnVwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuZnMvZXh0NC9leHQ0LmgtMzA5My1pbnQgZXh0NF9mY19jb21taXQoam91cm5hbF90ICpqb3VybmFsLCB0aWRfdCBjb21taXRfdGlkKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTc4NT1zdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9mY19nZXRfdGwoc3RydWN0IGV4dDRfZmNfdGxfbWVtICp0bCwgdTggKnZhbClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTc5NC0vKiBVbmxpbmsgcmVwbGF5IGZ1bmN0aW9uICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTc5NTpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X3VubGluayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE3OTYtXHRcdFx0XHQgc3RydWN0IGV4dDRfZmNfdGxfbWVtICp0bCwgdTggKnZhbClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTgwNC1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxODA1Olx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX1VOTElOSywgZGFyZy5pbm8sXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTgwNi1cdFx0XHRkYXJnLnBhcmVudF9pbm8sIGRhcmcuZG5hbWVfbGVuKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTgzMy1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxODM0OnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfbGlua19pbnRlcm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4MzUtXHRcdFx0XHRzdHJ1Y3QgZGVudHJ5X2luZm9fYXJncyAqZGFyZyxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTg2OS0vKiBMaW5rIHJlcGxheSBmdW5jdGlvbiAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE4NzA6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9saW5rKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTg3MS1cdFx0XHQgICAgICAgc3RydWN0IGV4dDRfZmNfdGxfbWVtICp0bCwgdTggKnZhbClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTg3Ny1cdHRsX3RvX2RhcmcoXHUwMDI2ZGFyZywgdGwsIHZhbCk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTg3ODpcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCBFWFQ0X0ZDX1RBR19MSU5LLCBkYXJnLmlubyxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODc5LVx0XHRcdGRhcmcucGFyZW50X2lubywgZGFyZy5kbmFtZV9sZW4pO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODg2LVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE4ODc6XHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9saW5rX2ludGVybmFsKHNiLCBcdTAwMjZkYXJnLCBpbm9kZSk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTg4OC1cdGlwdXQoaW5vZGUpO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0xODk2PXN0YXRpYyBpbnQgZXh0NF9mY19yZWNvcmRfbW9kaWZpZWRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGlubylcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODk3LXtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxODk4Olx0c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlICpzdGF0ZTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODk5LVx0aW50IGk7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MjQtICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTkyNTpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTkyNi1cdFx0XHRcdHN0cnVjdCBleHQ0X2ZjX3RsX21lbSAqdGwsIHU4ICp2YWwpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MzktXHRpbm8gPSBsZTMyX3RvX2NwdShmY19pbm9kZS5mY19pbm8pO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE5NDA6XHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgdGFnLCBpbm8sIDAsIDApO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5NDEtXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwMzMtICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjAzNDpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2NyZWF0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwMzUtXHRcdFx0XHQgc3RydWN0IGV4dDRfZmNfdGxfbWVtICp0bCwgdTggKnZhbClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjA0My1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMDQ0Olx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX0NSRUFULCBkYXJnLmlubyxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDQ1LVx0XHRcdGRhcmcucGFyZW50X2lubywgZGFyZy5kbmFtZV9sZW4pO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDc2LVx0fVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIwNzc6XHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9saW5rX2ludGVybmFsKHNiLCBcdTAwMjZkYXJnLCBpbm9kZSk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjA3OC1cdGlmIChyZXQpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTIwOTI9aW50IGV4dDRfZmNfcmVjb3JkX3JlZ2lvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGlubyxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjA5NC17XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjA5NTpcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGU7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjA5Ni1cdHN0cnVjdCBleHQ0X2ZjX2FsbG9jX3JlZ2lvbiAqcmVnaW9uO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMTMxLS8qIFJlcGxheSBhZGQgcmFuZ2UgdGFnICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjEzMjpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2FkZF9yYW5nZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1OCAqdmFsKVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxMzMte1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMTQ2LVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIxNDc6XHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfQUREX1JBTkdFLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxNDgtXHRcdGxlMzJfdG9fY3B1KGZjX2FkZF9leC5mY19pbm8pLCBsZTMyX3RvX2NwdShleC1cdTAwM2VlZV9ibG9jayksXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTIyNTg9c3RhdGljIGludFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIyNTk6ZXh0NF9mY19yZXBsYXlfZGVsX3JhbmdlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU4ICp2YWwpXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjI2MC17XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIyNzAtXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjI3MTpcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCBFWFQ0X0ZDX1RBR19ERUxfUkFOR0UsXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjI3Mi1cdFx0bGUzMl90b19jcHUobHJhbmdlLmZjX2lubyksIGN1ciwgcmVtYWluaW5nKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjMyMD1zdGF0aWMgdm9pZCBleHQ0X2ZjX3NldF9iaXRtYXBzX2FuZF9jb3VudGVycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzMjEte1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIzMjI6XHRzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUgKnN0YXRlO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzMjMtXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzc4LSAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIzNzk6Ym9vbCBleHQ0X2ZjX3JlcGxheV9jaGVja19leGNsdWRlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBleHQ0X2ZzYmxrX3QgYmxrKVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzODAte1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzODEtXHRpbnQgaTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMzgyOlx0c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlICpzdGF0ZTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzgzLVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzk2LS8qIENsZWFudXAgZnVuY3Rpb24gY2FsbGVkIGFmdGVyIHJlcGxheSAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIzOTc6dm9pZCBleHQ0X2ZjX3JlcGxheV9jbGVhbnVwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM5OC17XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI0MDY9c3RhdGljIGJvb2wgZXh0NF9mY192YWx1ZV9sZW5faXN2YWxpZChzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmksXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0NDktICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjQ1MDpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X3NjYW4oam91cm5hbF90ICpqb3VybmFsLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0NTEtXHRcdFx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgb2ZmLFxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDU1LVx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjQ1NjpcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGU7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ1Ny1cdGludCByZXQgPSBKQkQyX0ZDX1JFUExBWV9DT05USU5VRTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU2NC1vdXRfZXJyOlxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI1NjU6XHR0cmFjZV9leHQ0X2ZjX3JlcGxheV9zY2FuKHNiLCByZXQsIG9mZik7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU2Ni1cdHJldHVybiByZXQ7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1NzItICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjU3MzpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5KGpvdXJuYWxfdCAqam91cm5hbCwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTc0LVx0XHRcdFx0ZW51bSBwYXNzdHlwZSBwYXNzLCBpbnQgb2ZmLCB0aWRfdCBleHBlY3RlZF90aWQpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1ODAtXHRpbnQgcmV0ID0gSkJEMl9GQ19SRVBMQVlfQ09OVElOVUU7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjU4MTpcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGUgPSBcdTAwMjZzYmktXHUwMDNlc19mY19yZXBsYXlfc3RhdGU7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU4Mi1cdHN0cnVjdCBleHQ0X2ZjX3RhaWwgdGFpbDtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU4NS1cdFx0c3RhdGUtXHUwMDNlZmNfY3VycmVudF9wYXNzID0gUEFTU19TQ0FOO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI1ODY6XHRcdHJldHVybiBleHQ0X2ZjX3JlcGxheV9zY2FuKGpvdXJuYWwsIGJoLCBvZmYsIGV4cGVjdGVkX3RpZCk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU4Ny1cdH1cbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYyMy1cdFx0Y2FzZSBFWFQ0X0ZDX1RBR19MSU5LOlxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2MjQ6XHRcdFx0cmV0ID0gZXh0NF9mY19yZXBsYXlfbGluayhzYiwgXHUwMDI2dGwsIHZhbCk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYyNS1cdFx0XHRicmVhaztcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjI2LVx0XHRjYXNlIEVYVDRfRkNfVEFHX1VOTElOSzpcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjI3Olx0XHRcdHJldCA9IGV4dDRfZmNfcmVwbGF5X3VubGluayhzYiwgXHUwMDI2dGwsIHZhbCk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYyOC1cdFx0XHRicmVhaztcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjI5LVx0XHRjYXNlIEVYVDRfRkNfVEFHX0FERF9SQU5HRTpcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjMwOlx0XHRcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2FkZF9yYW5nZShzYiwgdmFsKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjMxLVx0XHRcdGJyZWFrO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzItXHRcdGNhc2UgRVhUNF9GQ19UQUdfQ1JFQVQ6XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjYzMzpcdFx0XHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9jcmVhdGUoc2IsIFx1MDAyNnRsLCB2YWwpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzQtXHRcdFx0YnJlYWs7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYzNS1cdFx0Y2FzZSBFWFQ0X0ZDX1RBR19ERUxfUkFOR0U6XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjYzNjpcdFx0XHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9kZWxfcmFuZ2Uoc2IsIHZhbCk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYzNy1cdFx0XHRicmVhaztcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjM4LVx0XHRjYXNlIEVYVDRfRkNfVEFHX0lOT0RFOlxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2Mzk6XHRcdFx0cmV0ID0gZXh0NF9mY19yZXBsYXlfaW5vZGUoc2IsIFx1MDAyNnRsLCB2YWwpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NDAtXHRcdFx0YnJlYWs7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY0MS1cdFx0Y2FzZSBFWFQ0X0ZDX1RBR19QQUQ6XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY0MjpcdFx0XHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfUEFELCAwLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NDMtXHRcdFx0XHRcdCAgICAgdGwuZmNfbGVuLCAwKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY0NS1cdFx0Y2FzZSBFWFQ0X0ZDX1RBR19UQUlMOlxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2NDY6XHRcdFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX1RBSUwsXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY0Ny1cdFx0XHRcdFx0ICAgICAwLCB0bC5mY19sZW4sIDApO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjUzLVx0XHRkZWZhdWx0OlxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2NTQ6XHRcdFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIHRsLmZjX3RhZywgMCwgdGwuZmNfbGVuLCAwKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjU1LVx0XHRcdHJldCA9IC1FQ0FOQ0VMRUQ7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI2NjU9dm9pZCBleHQ0X2ZjX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgam91cm5hbF90ICpqb3VybmFsKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjcxLVx0ICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY3MjpcdGpvdXJuYWwtXHUwMDNlal9mY19yZXBsYXlfY2FsbGJhY2sgPSBleHQ0X2ZjX3JlcGxheTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjczLVx0aWYgKCF0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuaD0xMzk9c3RydWN0IGV4dDRfZmNfYWxsb2NfcmVnaW9uIHtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtMTQ3LSAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5oOjE0ODpzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUge1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5oLTE0OS1cdGludCBmY19yZXBsYXlfbnVtX3RhZ3M7XG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NjE2Mz1leHQ0X21iX25ld19ibG9ja3Nfc2ltcGxlKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fcmVxdWVzdCAqYXIsIGludCAqZXJycClcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy02MTk0LVx0XHRcdFx0YnJlYWs7XG5mcy9leHQ0L21iYWxsb2MuYzo2MTk1Olx0XHRcdGlmIChleHQ0X2ZjX3JlcGxheV9jaGVja19leGNsdWRlZChzYixcbmZzL2V4dDQvbWJhbGxvYy5jLTYxOTYtXHRcdFx0XHRleHQ0X2dyb3VwX2ZpcnN0X2Jsb2NrX25vKHNiLCBncm91cCkgJiM0Mztcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NTM1Nz1zdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTY1OC1cdH1cbmZzL2V4dDQvc3VwZXIuYzo1NjU5Olx0ZXh0NF9mY19yZXBsYXlfY2xlYW51cChzYik7XG5mcy9leHQ0L3N1cGVyLmMtNTY2MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMzgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5MjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEV4dDQgRmlsZXN5c3RlbSBWdWxuZXJhYmlsaXR5IER1cmluZyBKb3VybmFsIFJlcGxheSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgZXh0NCBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYSBwb3RlbnRpYWwgaXNzdWUgZHVyaW5nIGpvdXJuYWwgcmVwbGF5LiBUaGUgZmxvdyBpcyBwcmV0dHkgY2xlYXI6IHdoZW4gbW91bnRpbmcgYW4gZXh0NCBmaWxlc3lzdGVtIHdpdGggZmFzdCBjb21taXQgZW5hYmxlZCwgYGpiZDJgIHJlcGxheXMgdGhlIGpvdXJuYWwuIFRoaXMgdHJpZ2dlcnMgYGV4dDRfZmNfcmVwbGF5YCwgd2hpY2ggdGhlbiBjYWxscyBgZXh0NF9mY19yZXBsYXlfaW5vZGVgLCBhbmQgZmluYWxseSwgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrcyhpbm9kZSlgLiBJJiMzOTttIGZhbWlsaWFyIHdpdGggdGhpcywgYW5kIEkga25vdyBTeXprYWxsZXIgaGVhdmlseSB0YXJnZXRzIGV4dDQgbW91bnRzIGFuZCBmaWxlc3lzdGVtIGltYWdlcyB3aXRoIGl0cyBmdXp6aW5nLiBTcGVjaWZpY2FsbHksIGNvcnJ1cHRlZCBpbWFnZXMgY2F1c2luZyBpc3N1ZXMgZHVyaW5nIHJlcGxheSwgbW91bnQsIG9yIGpvdXJuYWwgcmVjb3ZlcnkgYXJlIGNvbW1vbiB0YXJnZXRzLCBhbmQgdGhhdCYjMzk7cyB3aGF0IGhhcyBwaXF1ZWQgbXkgaW50ZXJlc3QgaGVyZS4KCkkmIzM5O20gemVyb2luZyBpbiBvbiB0aGlzIGZ1bmN0aW9uLCBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCwgYW5kIEkmIzM5O3ZlIG5vdGljZWQgYSBzaWduaWZpY2FudCBjaGFuZ2UuIFByZXZpb3VzbHksIGlmIGBleHQ0X2ZpbmRfZXh0ZW50YCByZXR1cm5lZCBhbiBlcnJvciAoYW4gRVJSX1BUUikgb3IgYHJldGAgd2FzIG5lZ2F0aXZlIGluc2lkZSB0aGUgYHdoaWxlYCBsb29wLCB0aGUgY29kZSB3b3VsZCBzaW1wbHkgYnJlYWsgb3V0IHRvIHRoZSBgb3V0OmAgbGFiZWwuIFRoZSBwcm9ibGVtIGlzIHRoYXQsIHVuZGVyIHRoZXNlIGNvbmRpdGlvbnMsIGBwYXRoYCBpcyBhbiBFUlJfUFRSISBBbmQgdGhlIGNydWNpYWwgcGFydCBpcyB0aGF0IHRoZSBjb2RlIHRoZW4gY2FsbHMgYGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKWAuIE5vdywgd2hhdCBkb2VzIGBleHQ0X2ZyZWVfZXh0X3BhdGhgIGRvIHdpdGggYW4gRVJSX1BUUj8gVGhhdCYjMzk7cyB0aGUgbWlsbGlvbi1kb2xsYXIgcXVlc3Rpb24uIElmIGBleHQ0X2ZyZWVfZXh0X3BhdGhgIGRvZXNuJiMzOTt0IGhhbmRsZSBhbiBFUlJfUFRSIHByb3Blcmx5LCB3ZSBjb3VsZCBiZSBsb29raW5nIGF0IGEgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUsIG9yIGEgZG91YmxlIGZyZWUsIG9yIHNvbWUgb3RoZXIgYmFkbmVzcyB0aGF0IGNvdWxkIGNhdXNlIGRlbmlhbCBvZiBzZXJ2aWNlIG9yLCB3b3JzZSwgYSBrZXJuZWwgcGFuaWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGV4dDRfZnJlZV9leHRfcGF0aGAgZG9lcyBpbiB0aGlzIHNpdHVhdGlvbi4gSXQgc2VlbXMgdGhpcyBjb3VsZCBiZSBhIG5ldywgb3IgcmVjZW50bHkgZXhwb3NlZCwgYnVnLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggbG9va2luZyBpbnRvIGFuZCB1bmRlcnN0YW5kaW5nIGhvdyBpdCYjMzk7cyB0cmlnZ2VyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgZXh0NF9mcmVlX2V4dF9wYXRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9MzkzNT1leHRlcm4gc3RydWN0IGV4dDRfZXh0X3BhdGggKmV4dDRfZmluZF9leHRlbnQoc3RydWN0IGlub2RlICosIGV4dDRfbGJsa190LFxuLS1cbmZzL2V4dDQvZXh0NC5oLTM5MzctXHRcdFx0XHRcdCAgICAgIGludCBmbGFncyk7XG5mcy9leHQ0L2V4dDQuaDozOTM4OmV4dGVybiB2b2lkIGV4dDRfZnJlZV9leHRfcGF0aChzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqKTtcbmZzL2V4dDQvZXh0NC5oLTM5MzktZXh0ZXJuIGludCBleHQ0X2V4dF9jaGVja19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz0xMTE9c3RhdGljIHZvaWQgZXh0NF9leHRfZHJvcF9yZWZzKHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTEyMS1cbmZzL2V4dDQvZXh0ZW50cy5jOjEyMjp2b2lkIGV4dDRfZnJlZV9leHRfcGF0aChzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aClcbmZzL2V4dDQvZXh0ZW50cy5jLTEyMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzY0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBleHQ0X2ZyZWVfZXh0X3BhdGgqKgoKT2theSwgdGltZSB0byBkaWcgaW50byBgZXh0NF9mcmVlX2V4dF9wYXRoYCBpbiBgZnMvZXh0NC9leHRlbnRzLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgaGFuZGxlcyBleHRlbnQgZGVhbGxvY2F0aW9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgcGF0aCB0cmF2ZXJzYWwgbG9naWMg4oCTIHdoYXQgYXJlIHRoZSBlZGdlIGNhc2VzIGl0IGhhbmRsZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgZXh0ZW50IHRyZWUgc3RydWN0dXJlIGFuZCB0aGUgdmFyaW91cyBzY2VuYXJpb3Mgd2hlcmUgZXh0ZW50cyBnZXQgZnJlZWQuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gZmxhZ3MgdXNlZCBhbmQgaG93IHRoZXkgcHJvcGFnYXRlIGR1cmluZyB0aGUgdHJhdmVyc2FsIHRvIHRoZSBpbm9kZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgaG93IGl0IGhhbmRsZXMgcGFydGlhbCBleHRlbnQgZnJlZXMsIG1lcmdpbmcgYWRqYWNlbnQgZXh0ZW50cywgYW5kIGFueSBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMgd2l0aGluIHRoZSBCLXRyZWUgc3RydWN0dXJlLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIGpvdXJuYWxpbmcgaW4gZXh0NCwgSSB3aWxsIGtlZXAgam91cm5hbCByZWxhdGVkIGNvbnNpZGVyYXRpb25zIGF0IHRoZSBmcm9udCBvZiBteSBtaW5kIGR1cmluZyB0aGlzIHJldmlldy4gSSBleHBlY3QgdG8gYmUgbG9va2luZyBhdCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBibG9jayBncm91cCBhY2NvdW50aW5nIGFuZCBmcmVlIHNwYWNlIGJpdG1hcHMuIEkgd2FudCB0byBmdWxseSB2aXN1YWxpemUgdGhlIHRyZWUgdXBkYXRlcyBhcyBJIGdvIHRocm91Z2ggaXQgdG8gdHJ5IHRvIGlkZW50aWZ5IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2V4dGVudHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0fVxuIDEyMTpcdFxuIDEyMjpcdHZvaWQgZXh0NF9mcmVlX2V4dF9wYXRoKHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoKVxuIDEyMzpcdHtcbiAxMjQ6XHRcdGlmIChJU19FUlJfT1JfTlVMTChwYXRoKSlcbiAxMjU6XHRcdFx0cmV0dXJuO1xuIDEyNjpcdFx0ZXh0NF9leHRfZHJvcF9yZWZzKHBhdGgpO1xuIDEyNzpcdFx0a2ZyZWUocGF0aCk7XG4gMTI4Olx0fVxuIDEyOTpcdFxuIDEzMDpcdC8qXG4gMTMxOlx0ICogTWFrZSBzdXJlICYjMzk7aGFuZGxlJiMzOTsgaGFzIGF0IGxlYXN0ICYjMzk7Y2hlY2tfY3JlZCYjMzk7IGNyZWRpdHMuIElmIG5vdCwgcmVzdGFydFxuIDEzMjpcdCAqIHRyYW5zYWN0aW9uIHdpdGggJiMzOTtyZXN0YXJ0X2NyZWQmIzM5OyBjcmVkaXRzLiBUaGUgZnVuY3Rpb24gZHJvcHMgaV9kYXRhX3NlbVxuIDEzMzpcdCAqIHdoZW4gcmVzdGFydGluZyB0cmFuc2FjdGlvbiBhbmQgZ2V0cyBpdCBhZnRlciB0cmFuc2FjdGlvbiBpcyByZXN0YXJ0ZWQuXG4gMTM0Olx0ICpcbiAxMzU6XHQgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDEgaWYgdHJhbnNhY3Rpb24gaGFkIHRvIGJlIHJlc3RhcnRlZCxcbiAxMzY6XHQgKiBhbmQgXHUwMDNjIDAgaW4gY2FzZSBvZiBmYXRhbCBlcnJvci5cbiAxMzc6XHQgKi9cbiAxMzg6XHRpbnQgZXh0NF9kYXRhc2VtX2Vuc3VyZV9jcmVkaXRzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gMTM5Olx0XHRcdFx0XHRpbnQgY2hlY2tfY3JlZCwgaW50IHJlc3RhcnRfY3JlZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzODUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3VidGxlIEJ1ZyBGaXggaW4gRVhUNCYjMzk7cyBGYXN0IENvbW1pdCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AgYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGUgcG90ZW50aWFsIGltcGFjdC4gUHJldmlvdXNseSwgaWYgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AgZW5jb3VudGVyZWQgYW4gZXJyb3IsIGxpa2UgYSBmYWlsdXJlIGluIGBleHQ0X21hcF9ibG9ja3NgIG9yIGBleHQ0X2ZpbmRfZXh0ZW50YCwgaXQgd2FzICpzaWxlbnRseSogaWdub3JlZC4gVGhlIGNvZGUganVzdCByZXR1cm5lZCAwLCBsZWF2aW5nIGBpX2Jsb2Nrc2AgcG90ZW50aWFsbHkgaW5jb25zaXN0ZW50IGFuZCBsZWFkaW5nIHRvIGEgcmV0dXJuIG9mIHplcm8gdG8gdGhlIGNhbGxpbmcgZnVuY3Rpb24gYGV4dDRfZmNfcmVwbGF5X2lub2RlYCwgd2hpY2ggd291bGQgY29udGludWUgZXhlY3V0aW9uIGFzIGlmIG5vdGhpbmcgd2FzIHdyb25nLiBUaGlzIGlzIGEgY2xhc3NpYyByZWNpcGUgZm9yIHN1YnRsZSBkYXRhIGNvcnJ1cHRpb24sIGVzcGVjaWFsbHkgaW4gYSBmYXN0IGNvbW1pdCBzY2VuYXJpbyB3aGVyZSBjb25zaXN0ZW5jeSBpcyBjcnVjaWFsLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgbGlrZSB0aGlzOgoKYGBgYwpjbGVhbnVwOgoJZXh0NF9mcmVlX2V4dF9wYXRoKHBhdGgpOwoJZXh0NF9mcmVlX2V4dF9wYXRoKHBhdGgyKTsKCXJldHVybiAwOwpgYGAKCklmIGByZXQgJmx0OyAwYCBoYXBwZW5lZCwgdGhlIGNvZGUgd291bGQgc2ltcGx5IGp1bXAgb3IgYnJlYWsgYW5kIHJldHVybiAwISBObyBlcnJvciBoYW5kbGluZy4KCk5vdywgdGhlIHBhdGNoIGZpeGVzIHRoaXMuIE5vdyBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCByZXR1cm5zIHRoZSBhY3R1YWwgZXJyb3IgY29kZS4gIEFuZCB0aGUgY2FsbGluZyBjb2RlLCB3aXRoaW4gYGZhc3RfY29tbWl0LmNgLCBoYXMgYmVlbiB1cGRhdGVkIHRvIGNoZWNrIHRoaXMgcmV0dXJuIHZhbHVlLgoKYGBgYwotCWlmICghZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpKQotCQlleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoaW5vZGUpOwomIzQzOwlpZiAoIWV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSkgewomIzQzOwkJcmV0ID0gZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKGlub2RlKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBvdXRfYnJlbHNlOwomIzQzOwl9CmBgYAoKTm93LCBpZiBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCBmYWlscywgdGhlIGVycm9yIGlzIHByb3Blcmx5IHByb3BhZ2F0ZWQgdXAgdGhlIGNhbGwgY2hhaW4sIGF2b2lkaW5nIHRoZSBzaWxlbnQgY29ycnVwdGlvbi4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGltcHJvdmVtZW50LiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRvIHRyaWdnZXIgdGhpcyBzY2VuYXJpbyBhbmQgY29uZmlybSB0aGUgZml4LiBHaXZlbiB0aGUgY29tcGxleGl0eSBvZiBFWFQ0IGFuZCBmYXN0IGNvbW1pdCwgSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCYjMzk7cyBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3Rpbmcgb3IgZnV6emVyIGluZnJhc3RydWN0dXJlLgoKSXMgYGV4dDRgIGNvZGUsIGluIGdlbmVyYWwsIHdlbGwtZXhlcmNpc2VkIGluIHRoZSBrZXJuZWwgZnV6emVyLCBzeXprYWxsZXI/IFllcywgRVhUNCBpcyBvbmUgb2YgdGhlIG1vc3QgaGVhdmlseSBmdXp6ZWQgc3Vic3lzdGVtcy4gSG93IGFib3V0IGBmYXN0X2NvbW1pdGAgc3BlY2lmaWNhbGx5PyBXaGF0IGFyZSB0aGUgS2NvbmZpZyBvcHRpb25zIHJlcXVpcmVkIGZvciBgZmFzdF9jb21taXRgIGFuZCBFWFQ0PyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWcgb3B0aW9ucyB0byBlbnN1cmUgdGhpcyBjb2RlIHBhdGggaXMgZW5hYmxlZCBkdXJpbmcgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RkFTVF9DT01NSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDQuaD0xMDQ4PXN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTEzMTQtXG5mcy9leHQ0L2V4dDQuaDoxMzE1OiNkZWZpbmUgRVhUNF9NT1VOVDJfSk9VUk5BTF9GQVNUX0NPTU1JVFx0MHgwMDAwMDAxMCAvKiBKb3VybmFsIGZhc3QgY29tbWl0ICovXG5mcy9leHQ0L2V4dDQuaC0xMzE2LSNkZWZpbmUgRVhUNF9NT1VOVDJfREFYX05FVkVSXHRcdDB4MDAwMDAwMjAgLyogRG8gbm90IGFsbG93IERpcmVjdCBBY2Nlc3MgKi9cbi0tXG5mcy9leHQ0L2V4dDQuaD0yMTQwPXN0YXRpYyBpbmxpbmUgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICpleHQ0X2lfbWV0YWRhdGFfYmhzKFxuLS1cbmZzL2V4dDQvZXh0NC5oLTIxODUtLypcbmZzL2V4dDQvZXh0NC5oOjIxODY6ICogVGhlIHJlYXNvbiB3aHkgXCYjMzQ7RkFTVF9DT01NSVRcJiMzNDsgaXMgYSBjb21wYXQgZmVhdHVyZSBpcyB0aGF0LCBGUyBiZWNvbWVzXG5mcy9leHQ0L2V4dDQuaC0yMTg3LSAqIGluY29tcGF0aWJsZSBvbmx5IGlmIGZhc3QgY29tbWl0IGJsb2NrcyBhcmUgcHJlc2VudCBpbiB0aGUgRlMuIFNpbmNlIHdlXG4tLVxuZnMvZXh0NC9leHQ0LmgtMjE5MS0gKi9cbmZzL2V4dDQvZXh0NC5oOjIxOTI6I2RlZmluZSBFWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZBU1RfQ09NTUlUXHRcdDB4MDQwMFxuZnMvZXh0NC9leHQ0LmgtMjE5My0jZGVmaW5lIEVYVDRfRkVBVFVSRV9DT01QQVRfU1RBQkxFX0lOT0RFU1x0MHgwODAwXG4tLVxuZnMvZXh0NC9leHQ0Lmg9MjI5Nz1FWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZVTkNTKHNwYXJzZV9zdXBlcjIsXHRTUEFSU0VfU1VQRVIyKVxuZnMvZXh0NC9leHQ0Lmg6MjI5ODpFWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZVTkNTKGZhc3RfY29tbWl0LFx0XHRGQVNUX0NPTU1JVClcbmZzL2V4dDQvZXh0NC5oLTIyOTktRVhUNF9GRUFUVVJFX0NPTVBBVF9GVU5DUyhzdGFibGVfaW5vZGVzLFx0U1RBQkxFX0lOT0RFUylcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjI1PXN0YXRpYyBib29sIGV4dDRfZmNfZGlzYWJsZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjYte1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIyNzpcdHJldHVybiAoIXRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkgfHxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjgtXHRcdChFWFQ0X1NCKHNiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkpO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0zOTA9c3RhdGljIGludCBleHQ0X2ZjX3RyYWNrX3RlbXBsYXRlKFxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy00MjAtXHRcdFx0XHQoc2JpLVx1MDAzZXNfam91cm5hbC1cdTAwM2VqX2ZsYWdzIFx1MDAyNiBKQkQyX0ZVTExfQ09NTUlUX09OR09JTkcgfHxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzo0MjE6XHRcdFx0XHQgc2JpLVx1MDAzZXNfam91cm5hbC1cdTAwM2VqX2ZsYWdzIFx1MDAyNiBKQkQyX0ZBU1RfQ09NTUlUX09OR09JTkcpID9cbmZzL2V4dDQvZmFzdF9jb21taXQuYy00MjItXHRcdFx0XHRcdTAwMjZzYmktXHUwMDNlc19mY19xW0ZDX1FfU1RBR0lOR10gOlxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz00MzU9c3RhdGljIGludCBfX3RyYWNrX2RlbnRyeV91cGRhdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNDcxLVx0aWYgKHNiaS1cdTAwM2VzX2pvdXJuYWwtXHUwMDNlal9mbGFncyBcdTAwMjYgSkJEMl9GVUxMX0NPTU1JVF9PTkdPSU5HIHx8XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NDcyOlx0XHRzYmktXHUwMDNlc19qb3VybmFsLVx1MDAzZWpfZmxhZ3MgXHUwMDI2IEpCRDJfRkFTVF9DT01NSVRfT05HT0lORylcbmZzL2V4dDQvZmFzdF9jb21taXQuYy00NzMtXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2bm9kZS1cdTAwM2VmY2RfbGlzdCxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTU2Nz1pbnQgZXh0NF9mY19jb21taXQoam91cm5hbF90ICpqb3VybmFsLCB0aWRfdCBjb21taXRfdGlkKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xNTc2LVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE1Nzc6XHRpZiAoIXRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkpXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTU3OC1cdFx0cmV0dXJuIGpiZDJfY29tcGxldGVfdHJhbnNhY3Rpb24oam91cm5hbCwgY29tbWl0X3RpZCk7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI2NjU9dm9pZCBleHQ0X2ZjX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgam91cm5hbF90ICpqb3VybmFsKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjcyLVx0am91cm5hbC1cdTAwM2VqX2ZjX3JlcGxheV9jYWxsYmFjayA9IGV4dDRfZmNfcmVwbGF5O1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2NzM6XHRpZiAoIXRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkpXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY3NC1cdFx0cmV0dXJuO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuaC0yLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oOjM6I2lmbmRlZiBfX0ZBU1RfQ09NTUlUX0hfX1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5oOjQ6I2RlZmluZSBfX0ZBU1RfQ09NTUlUX0hfX1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5oLTUtXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oPTE2Mz1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnRhZzJzdHIoX191MTYgdGFnKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuaC0xODgtXG5mcy9leHQ0L2Zhc3RfY29tbWl0Lmg6MTg5OiNlbmRpZiAvKiBfX0ZBU1RfQ09NTUlUX0hfXyAqL1xuLS1cbmZzL2V4dDQvaW5vZGUuYz0zNDQxPXN0YXRpYyBib29sIGV4dDRfaW5vZGVfZGF0YXN5bmNfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2lub2RlLmMtMzQ0OS1cdFx0XHRyZXR1cm4gZmFsc2U7XG5mcy9leHQ0L2lub2RlLmM6MzQ1MDpcdFx0aWYgKHRlc3Rfb3B0Mihpbm9kZS1cdTAwM2VpX3NiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSlcbmZzL2V4dDQvaW5vZGUuYy0zNDUxLVx0XHRcdHJldHVybiAhbGlzdF9lbXB0eShcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmNfbGlzdCk7XG4tLVxuZnMvZXh0NC9uYW1laS5jPTM3OTk9c3RhdGljIGludCBleHQ0X3JlbmFtZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpvbGRfZGlyLFxuLS1cbmZzL2V4dDQvbmFtZWkuYy00MDA5LVx0XHRcdGV4dDRfZmNfdHJhY2tfdW5saW5rKGhhbmRsZSwgbmV3LmRlbnRyeSk7XG5mcy9leHQ0L25hbWVpLmM6NDAxMDpcdFx0aWYgKHRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkgXHUwMDI2XHUwMDI2XG5mcy9leHQ0L25hbWVpLmMtNDAxMS1cdFx0ICAgICEoRVhUNF9TQihzYiktXHUwMDNlc19tb3VudF9zdGF0ZSBcdTAwMjYgRVhUNF9GQ19SRVBMQVkpIFx1MDAyNlx1MDAyNlxuLS1cbmZzL2V4dDQvc3VwZXIuYz0xODk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW91bnRfb3B0cyB7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTE5NjItI2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXG5mcy9leHQ0L3N1cGVyLmM6MTk2MzpcdHtPcHRfZmNfZGVidWdfZm9yY2UsIEVYVDRfTU9VTlQyX0pPVVJOQUxfRkFTVF9DT01NSVQsXG5mcy9leHQ0L3N1cGVyLmMtMTk2NC1cdCBNT1BUX1NFVCB8IE1PUFRfMiB8IE1PUFRfRVhUNF9PTkxZfSxcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NDQwND1zdGF0aWMgdm9pZCBleHQ0X3NldF9kZWZfb3B0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy00NDIzLVx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZmFzdF9jb21taXQoc2IpKVxuZnMvZXh0NC9zdXBlci5jOjQ0MjQ6XHRcdHNldF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKTtcbmZzL2V4dDQvc3VwZXIuYy00NDI1LVx0LyogZG9uJiMzOTt0IGZvcmdldCB0byBlbmFibGUgam91cm5hbF9jc3VtIHdoZW4gbWV0YWRhdGFfY3N1bSBpcyBlbmFibGVkLiAqL1xuLS1cbmZzL2V4dDQvc3VwZXIuYz00OTczPXN0YXRpYyBpbnQgZXh0NF9sb2FkX2FuZF9pbml0X2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNDk5Ni1cbmZzL2V4dDQvc3VwZXIuYzo0OTk3Olx0aWYgKHRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkgXHUwMDI2XHUwMDI2XG5mcy9leHQ0L3N1cGVyLmMtNDk5OC1cdFx0IWpiZDJfam91cm5hbF9zZXRfZmVhdHVyZXMoRVhUNF9TQihzYiktXHUwMDNlc19qb3VybmFsLCAwLCAwLFxuZnMvZXh0NC9zdXBlci5jOjQ5OTk6XHRcdFx0XHRcdCAgSkJEMl9GRUFUVVJFX0lOQ09NUEFUX0ZBU1RfQ09NTUlUKSkge1xuZnMvZXh0NC9zdXBlci5jLTUwMDAtXHRcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUixcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NTA1Nz1zdGF0aWMgaW50IGV4dDRfY2hlY2tfam91cm5hbF9kYXRhX21vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTA2NC1cdFx0Y2xlYXJfb3B0KHNiLCBESU9SRUFEX05PTE9DSyk7XG5mcy9leHQ0L3N1cGVyLmM6NTA2NTpcdFx0Y2xlYXJfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCk7XG5mcy9leHQ0L3N1cGVyLmMtNTA2Ni1cdFx0aWYgKHRlc3Rfb3B0MihzYiwgRVhQTElDSVRfREVMQUxMT0MpKSB7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTUzNTc9c3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTU1NTctXHRcdGNsZWFyX29wdChzYiwgREFUQV9GTEFHUyk7XG5mcy9leHQ0L3N1cGVyLmM6NTU1ODpcdFx0Y2xlYXJfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCk7XG5mcy9leHQ0L3N1cGVyLmMtNTU1OS1cdFx0c2JpLVx1MDAzZXNfam91cm5hbCA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjkyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBleHQ0IE1ha2VmaWxlIGZvciBPYmplY3QgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgZnMvZXh0NC9NYWtlZmlsZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBidWlsZC10aW1lIGRlcGVuZGVuY2llcyBvZiBgZXh0ZW50cy5vYCBhbmQgYGZhc3RfY29tbWl0Lm9gLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyB1c2VkIGluIHRoZWlyIGNvbXBpbGF0aW9uLiBBcmUgdGhlcmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zLCBrZXJuZWwgZmxhZ3MsIG9yIG90aGVyIGZhY3RvcnMgdGhhdCB0cmlnZ2VyIHRoZWlyIGluY2x1c2lvbj8gVW5kZXJzdGFuZGluZyB0aGVzZSBidWlsZCB2YXJpYWJsZXMgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nLCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIG9yIHBvdGVudGlhbGx5IGV2ZW4gZm9yIHNlbGVjdGl2ZWx5IGVuYWJsaW5nIG9yIGRpc2FibGluZyBmZWF0dXJlcyBmb3IgYSBzcGVjaWZpYyBkZXBsb3ltZW50LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBgaWZkZWZgIGJsb2NrcywgYXNzaWdubWVudCBzdGF0ZW1lbnRzIHRoYXQgaW5mbHVlbmNlIGZsYWdzIGxpa2UgYENPTkZJR19FWFQ0X1VTRV9FWFRFTlRTYCwgb3IgYW55dGhpbmcgcmVsYXRlZCB0byBqb3VybmFsaW5nIG9yIGZhc3QgY29tbWl0IGJlaGF2aW9yLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoZXkgYXJlIGhpZ2hseSByZWxhdGVkIHRvIGZlYXR1cmVzIHN1Y2ggYXMgZXh0ZW50cyAob2J2aW91c2x5KSBhbmQgdGhlIGpvdXJuYWxpbmcgbWVjaGFuaXNtLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBNYWtlZmlsZSBnaXZlcyBtZSBhIGNsZWFyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Zhc3RfY29tbWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9NYWtlZmlsZT04PWV4dDQteVx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcbi0tXG5mcy9leHQ0L01ha2VmaWxlLTEyLVx0XHRzdXBlci5vIHN5bWxpbmsubyBzeXNmcy5vIHhhdHRyLm8geGF0dHJfaHVyZC5vIHhhdHRyX3RydXN0ZWQubyBcXFxuZnMvZXh0NC9NYWtlZmlsZToxMzpcdFx0eGF0dHJfdXNlci5vIGZhc3RfY29tbWl0Lm8gb3JwaGFuLm9cbmZzL2V4dDQvTWFrZWZpbGUtMTQtXG4tLVxuZnMvZXh0NC9leHQ0Lmg9OTYzPWRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuZnMvZXh0NC9leHQ0LmgtOTk5LSNpbmNsdWRlIFwmIzM0O2V4dGVudHNfc3RhdHVzLmhcJiMzNDtcbmZzL2V4dDQvZXh0NC5oOjEwMDA6I2luY2x1ZGUgXCYjMzQ7ZmFzdF9jb21taXQuaFwmIzM0O1xuZnMvZXh0NC9leHQ0LmgtMTAwMS1cbi0tXG5mcy9leHQ0L2V4dDQuaD0yMjk3PUVYVDRfRkVBVFVSRV9DT01QQVRfRlVOQ1Moc3BhcnNlX3N1cGVyMixcdFNQQVJTRV9TVVBFUjIpXG5mcy9leHQ0L2V4dDQuaDoyMjk4OkVYVDRfRkVBVFVSRV9DT01QQVRfRlVOQ1MoZmFzdF9jb21taXQsXHRcdEZBU1RfQ09NTUlUKVxuZnMvZXh0NC9leHQ0LmgtMjI5OS1FWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZVTkNTKHN0YWJsZV9pbm9kZXMsXHRTVEFCTEVfSU5PREVTKVxuLS1cbmZzL2V4dDQvZXh0NC5oPTMwNzA9dm9pZCBleHQ0X2VuZF9iaXRtYXBfcmVhZChzdHJ1Y3QgYmlvICpiaW8pO1xuZnMvZXh0NC9leHQ0LmgtMzA3MS1cbmZzL2V4dDQvZXh0NC5oOjMwNzI6LyogZmFzdF9jb21taXQuYyAqL1xuZnMvZXh0NC9leHQ0LmgtMzA3My1pbnQgZXh0NF9mY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0zLS8qXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NDogKiBmcy9leHQ0L2Zhc3RfY29tbWl0LmNcbmZzL2V4dDQvZmFzdF9jb21taXQuYy01LSAqXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oLTYtLypcbmZzL2V4dDQvZmFzdF9jb21taXQuaDo3OiAqIE5vdGUgdGhpcyBmaWxlIGlzIHByZXNlbnQgaW4gZTJmc3Byb2dzL2xpYi9leHQyZnMvZmFzdF9jb21taXQuaCBhbmRcbmZzL2V4dDQvZmFzdF9jb21taXQuaDo4OiAqIGxpbnV4L2ZzL2V4dDQvZmFzdF9jb21taXQuaC4gVGhlc2UgZmlsZSBzaG91bGQgYWx3YXlzIGJlIGJ5dGUgaWRlbnRpY2FsLlxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oLTktICovXG4tLVxuZnMvZXh0NC9uYW1laS5jPTMyMjg9aW50IF9fZXh0NF91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpkX25hbWUsXG5mcy9leHQ0L25hbWVpLmMtMzIyOS1cdFx0ICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC9uYW1laS5jOjMyMzA6XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5IC8qIE5VTEwgZHVyaW5nIGZhc3RfY29tbWl0IHJlY292ZXJ5ICovKVxuZnMvZXh0NC9uYW1laS5jLTMyMzEte1xuLS1cbmZzL2V4dDQvc3VwZXIuYz00NDA0PXN0YXRpYyB2b2lkIGV4dDRfc2V0X2RlZl9vcHRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTQ0MjItI2VuZGlmXG5mcy9leHQ0L3N1cGVyLmM6NDQyMzpcdGlmIChleHQ0X2hhc19mZWF0dXJlX2Zhc3RfY29tbWl0KHNiKSlcbmZzL2V4dDQvc3VwZXIuYy00NDI0LVx0XHRzZXRfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCk7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTQ1MjM9c3RhdGljIHZvaWQgZXh0NF9hdG9taWNfd3JpdGVfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy00NTQ4LVxuZnMvZXh0NC9zdXBlci5jOjQ1NDk6c3RhdGljIHZvaWQgZXh0NF9mYXN0X2NvbW1pdF9pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L3N1cGVyLmMtNDU1MC17XG4tLVxuZnMvZXh0NC9zdXBlci5jPTUwNTc9c3RhdGljIGludCBleHQ0X2NoZWNrX2pvdXJuYWxfZGF0YV9tb2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTUwNjEtXHRcdFx0ICAgIFwmIzM0O2RhdGE9am91cm5hbCBkaXNhYmxlcyBkZWxheWVkIGFsbG9jYXRpb24sIFwmIzM0O1xuZnMvZXh0NC9zdXBlci5jOjUwNjI6XHRcdFx0ICAgIFwmIzM0O2Rpb3JlYWRfbm9sb2NrLCBPX0RJUkVDVCBhbmQgZmFzdF9jb21taXQgc3VwcG9ydCFcXG5cJiMzNDspO1xuZnMvZXh0NC9zdXBlci5jLTUwNjMtXHRcdC8qIGNhbiYjMzk7dCBtb3VudCB3aXRoIGJvdGggZGF0YT1qb3VybmFsIGFuZCBkaW9yZWFkX25vbG9jay4gKi9cbi0tXG5mcy9leHQ0L3N1cGVyLmM9NTM1Nz1zdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTUxMC1cdGV4dDRfYXRvbWljX3dyaXRlX2luaXQoc2IpO1xuZnMvZXh0NC9zdXBlci5jOjU1MTE6XHRleHQ0X2Zhc3RfY29tbWl0X2luaXQoc2IpO1xuZnMvZXh0NC9zdXBlci5jLTU1MTItXG4tLVxuZnMvZXh0NC9zeXNmcy5jPTM2Mz1FWFQ0X0FUVFJfRkVBVFVSRShtZXRhZGF0YV9jc3VtX3NlZWQpO1xuZnMvZXh0NC9zeXNmcy5jOjM2NDpFWFQ0X0FUVFJfRkVBVFVSRShmYXN0X2NvbW1pdCk7XG5mcy9leHQ0L3N5c2ZzLmMtMzY1LSNpZiBJU19FTkFCTEVEKENPTkZJR19VTklDT0RFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfRlNfRU5DUllQVElPTilcbi0tXG5mcy9leHQ0L3N5c2ZzLmM9MzcyPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpleHQ0X2ZlYXRfYXR0cnNbXSA9IHtcbi0tXG5mcy9leHQ0L3N5c2ZzLmMtMzg2LVx0QVRUUl9MSVNUKG1ldGFkYXRhX2NzdW1fc2VlZCksXG5mcy9leHQ0L3N5c2ZzLmM6Mzg3Olx0QVRUUl9MSVNUKGZhc3RfY29tbWl0KSxcbmZzL2V4dDQvc3lzZnMuYy0zODgtI2lmIElTX0VOQUJMRUQoQ09ORklHX1VOSUNPREUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19GU19FTkNSWVBUSU9OKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM1MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4dDQgTW9kdWxlIENvbXBpbGF0aW9uIENvbnRleHQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgZXh0NCBmaWxlc3lzdGVtIG1vZHVsZXMgYXJlIGJ1aWx0LiBJdCYjMzk7cyBjbGVhciB0aGF0IHRoZSBmaW5hbCBgZXh0NGAga2VybmVsIG1vZHVsZSBkZXBlbmRzIG9uIGEgY291cGxlIG9mIGtleSBzb3VyY2UgZmlsZXM6IGBleHRlbnRzLmNgIGFuZCBgZmFzdF9jb21taXQuY2AuIFRoZSBub3RhdGlvbiBoZXJlLCBgZXh0NC15IDo9IC4uLiBleHRlbnRzLm8gLi4uIGZhc3RfY29tbWl0Lm8gLi4uYCwgc2hvd3MgdGhhdCBib3RoIGBleHRlbnRzLm9gIGFuZCBgZmFzdF9jb21taXQub2AgYXJlIGdldHRpbmcgbGlua2VkIGludG8gdGhlIGBleHQ0YCBtb2R1bGUuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UsIGdpdmVuIHRoZWlyIGZ1bmN0aW9uIGluIHRoZSBmaWxlc3lzdGVtJiMzOTtzIG9wZXJhdGlvbi4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGNvbmRpdGlvbmFsIGJ1aWxkcyBoZXJlLCBzbyBJJiMzOTtsbCBjaGVjayBgZnMvZXh0NC9LY29uZmlnYCB0byBzZWUgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWlnaHQgaW5mbHVlbmNlIHRoZSBpbmNsdXNpb24gb2YgdGhlc2Ugc3BlY2lmaWMgZmlsZXMuIFRpbWUgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVYVDRfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXG5mcy9leHQ0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1RoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxuLS1cbmZzL2V4dDQvS2NvbmZpZy00NS1cbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcbmZzL2V4dDQvS2NvbmZpZy00Ny1cdGJvb2wgXCYjMzQ7RXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZy01NS1cbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxuZnMvZXh0NC9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtFeHQ0IFNlY3VyaXR5IExhYmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTgzMwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDk0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRhcmdldCBmb3IgRnV6emluZyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29tbWl0LiBJJiMzOTtkIHR5cGljYWxseSByZWFjaCBmb3IgYGdpdCBsb2dgIHRvIGdldCB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIGF1dGhvciBleHBsYW5hdGlvbiwgYnV0IGl0IGxvb2tzIGxpa2UgSSBkb24mIzM5O3QgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIHRoYXQuIE5vIHByb2JsZW0sIEkgY2FuIHNlZSB0aGUgY29kZSBkaWZmIGRpcmVjdGx5LiBJJiMzOTttIGZvY3VzaW5nIG9uIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgIHdpdGhpbiBgZnMvZXh0NC9leHRlbnRzLmNgIGFuZCBpdHMgY2FsbCBzaXRlIGluIGBmcy9leHQ0L2Zhc3RfY29tbWl0LmNgOiBgZXh0NF9mY19yZXBsYXlfaW5vZGVgLgoKTGV0JiMzOTtzIGV2YWx1YXRlIGlmIHRoaXMgaXMgd29ydGggZnV6emluZy4KCjEuICAqKlJlYWNoYWJpbGl0eToqKiBJcyB0aGlzIGZhc3QgY29tbWl0IHJlcGxheSByZWFjaGFibGU/IFllcywgYWJzb2x1dGVseS4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgdGhlIG9uZXMgU3l6a2FsbGVyIHJ1bnMgb24sIHVzZSBleHQ0IGltYWdlcyB3aXRoIGZhc3QgY29tbWl0IGVuYWJsZWQuIFN5emthbGxlciBpcyBrbm93biB0byB0ZXN0IGV4dDQgb3BlcmF0aW9ucywgaW5jbHVkaW5nIGpvdXJuYWwgcmVjb3ZlcnkgYW5kIHJlcGxheS4gRHVyaW5nIGEgbW91bnQgd2l0aCBmYXN0IGNvbW1pdCwgaWYgcmVjb3ZlcnkgaXMgbmVlZGVkLCBgZXh0NF9mY19yZXBsYXlgIHJ1bnMgZHVyaW5nIGBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbGAgb3IgYGpiZDJfam91cm5hbF9sb2FkYC4gU3BlY2lmaWNhbGx5LCBkdXJpbmcgdGhlIHJlcGxheSBvZiBgRVhUNF9GQ19UQUdfSU5PREVgLCBgZXh0NF9mY19yZXBsYXlfaW5vZGVgIGNhbGxzIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgLgoKMi4gICoqRG9lcyB0aGUgcGF0Y2ggdG91Y2ggcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZT8qKiBZZXMsIGl0IGRvZXMuIEl0IHRvdWNoZXMgY29yZSBmaWxlc3lzdGVtIGNvZGU6IGBmcy9leHQ0L2V4dGVudHMuY2AgYW5kIGBmcy9leHQ0L2Zhc3RfY29tbWl0LmNgLiBUaGlzIHBhdGNoIGlzIGFsbCBhYm91dCBlcnJvciBoYW5kbGluZy4gSXQmIzM5O3MgY2hhbmdpbmcgaG93IGVycm9ycyBhcmUgcHJvcGFnYXRlZCBhbmQgdGhlIGNvbnRyb2wgZmxvdyBkdXJpbmcgam91cm5hbCByZXBsYXkgb2YgZXh0NCBpbm9kZXMgd2l0aCBmYXN0IGNvbW1pdC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgdGFyZ2V0IGZvciBmdXp6aW5nLiBGaWxlc3lzdGVtIGVycm9yIGhhbmRsaW5nIHBhdGhzIGFyZSBub3RvcmlvdXMgZm9yIHBvdGVudGlhbCBpc3N1ZXMg4oCTIHJlc291cmNlIGxlYWtzLCBsb2NrIGlzc3VlcywgaW52YXJpYW50IHZpb2xhdGlvbnMsIGRvdWJsZSBmcmVlcy4uLiB0aGUgbGlzdCBnb2VzIG9uLiBFc3BlY2lhbGx5IGdpdmVuIFN5emthbGxlciYjMzk7cyBmb2N1cyBvbiBmdXp6aW5nIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIGltYWdlcyB3aGVyZSBgZXh0NF9maW5kX2V4dGVudGAgb3IgYGV4dDRfbWFwX2Jsb2Nrc2AgY2FuIHJldHVybiBlcnJvciBjb2Rlcy4KCiAgICBTbywgeWVhaCwgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIGBXb3J0aEZ1enppbmdgIGlzIGB0cnVlYC4KCk5vdywgZm9yIGBGb2N1c1N5bWJvbHNgLgoKKiAgIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgOiBJdCYjMzk7cyB0aGUgZGlyZWN0bHkgbW9kaWZpZWQgZnVuY3Rpb24sIHNwZWNpZmljIHRvIGZhc3QgY29tbWl0IHJlcGxheS4KKiAgIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWA6IFRoZSBtb2RpZmllZCBjYWxsZXIgaW4gYGZhc3RfY29tbWl0LmNgIGhhbmRsaW5nIGBFWFQ0X0ZDX1RBR19JTk9ERWAuCiogICBgZXh0NF9mY19yZXBsYXlgOiBUaGUgbWFpbiByZXBsYXkgZGlzcGF0Y2ggZnVuY3Rpb24gaW4gYGZhc3RfY29tbWl0LmNgLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzeW1ib2xzIGludm9sdmVkIG9yIG1vZGlmaWVkLCBzbyBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhpczoKSSBjYW4gY29uZmlybSB0aGF0IEkgZm91bmQgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AgZWFybGllciwgZ3JlcHBpbmcgdGhlIGNvZGUsIHNob3dpbmcgdGhhdCBpdCYjMzk7cyBvbmx5IGNhbGxlZCBpbiBgZnMvZXh0NC9mYXN0X2NvbW1pdC5jYCBsaW5lIDIwMDYuIEFsc28sIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAgaXMgY2FsbGVkIGZyb20gYGV4dDRfZmNfcmVwbGF5YCBpbiBgZnMvZXh0NC9mYXN0X2NvbW1pdC5jYC4KCkFyZSBhbnkgb2YgdGhlc2UgdWJpcXVpdG91cz8gTm8sIHRoZXNlIGFyZSBhbGwgc3BlY2lmaWMgdG8gZXh0NCBmYXN0IGNvbW1pdCByZXBsYXkuCgpGaW5hbGx5LCBgRW5hYmxlQ29uZmlnc2AuIFRoZSBleHQ0IGZpbGVzeXN0ZW0gKGBFWFQ0X0ZTYCkgaXMgb2J2aW91c2x5IHJlcXVpcmVkIHRvIGNvbXBpbGUgdGhlIGZpbGVzeXN0ZW0gY29kZS4gRG9lcyBmYXN0IGNvbW1pdCByZXF1aXJlIGFueSBzcGVjaWZpYyBjb25maWcgb3B0aW9ucz8gSXQmIzM5O3Mgd29ydGggY2hlY2tpbmcgaWYgZmFzdCBjb21taXQgaXMgZ3VhcmRlZCBieSBhIHNwZWNpZmljIGBDT05GSUdfYCBvcHRpb24uIEEgcXVpY2sgYGdyZXBgIGZvciBgSk9VUk5BTF9GQVNUX0NPTU1JVGAgb3IgYGZhc3RfY29tbWl0YCBpbiBgZnMvZXh0NC9LY29uZmlnYCBzaG91bGQgcmV2ZWFsIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYXN0X2NvbW1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjAxCgkJCQkJCQlvdXRwdXQ6IDE4MQoJCQkJCQkJdGhvdWdodHM6IDIyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeHQ0IEZhc3QgQ29tbWl0IFRyaWFnZTogQSBTb2xpZCBDb25maXJtYXRpb24qKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdvdC4gVGhlIGZhc3QgY29tbWl0IGZlYXR1cmUgaW4gZXh0NCBpcyBiYWtlZCBpbiwgaXQmIzM5O3MgdW5jb25kaXRpb25hbCDigJMgYGV4dDQteSAmIzQzOz0gZmFzdF9jb21taXQub2AuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBJIHF1aWNrbHkgc2Nhbm5lZCBmb3IgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgd2l0aGluIGBmcy9leHQ0L2AuIEkgZm91bmQgdGhhdCBgQ09ORklHX0VYVDRfREVCVUdgIGFjdGl2YXRlcyB0aGUgYE9wdF9mY19kZWJ1Z19mb3JjZWAgbW91bnQgb3B0aW9uLCBidXQgdGhlIGNvcmUgZmFzdCBjb21taXQgZnVuY3Rpb25hbGl0eSwgYEVYVDRfRkVBVFVSRV9DT01QQVRfRkFTVF9DT01NSVRgLCBhbmQgdGhlIGFzc29jaWF0ZWQgbW91bnQgb3B0aW9uIGBKT1VSTkFMX0ZBU1RfQ09NTUlUYCBhcmUgcGFydCBvZiB0aGUgc3RhbmRhcmQgZmVhdHVyZSBzZXQuIFNvLCB0aGUga2V5IGVuYWJsZXIgaGVyZSwgdGhlIHByaW1hcnkgY29uZmlnLCByZW1haW5zIGBFWFQ0X0ZTYC4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAgd2l0aCB0aGUgdHJpYWdlIGluc3RydWN0aW9ucy4gV29ydGhGdXp6aW5nPyBZZXAsIGFic29sdXRlbHkuIFRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSBjaGFuZ2UgYW5kIHRoZSBmdXp6aW5nIHJlY29tbWVuZGF0aW9uIGlzIGNsZWFyIGFuZCBjb25jaXNlLiBGb2N1c2luZyBvbiBub24tdWJpcXVpdG91cyBzeW1ib2xzLCB0aGUgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyBjaGVjayBpcyBjb3JyZWN0LCB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGluZ3MgbGlrZSBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCwgYGV4dDRfZmNfcmVwbGF5X2lub2RlYCwgYW5kIGBleHQ0X2ZjX3JlcGxheWAuIFRoZSAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OyBpcyBwZXJmZWN0LCByZXF1aXJpbmcgYEVYVDRfRlNgIGFzIGV4cGVjdGVkLgoKRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaGUgaW5mb3JtYXRpb24gaXMgY29uc2lzdGVudCwgdGhlIGFuYWx5c2lzIGlzIHNvdW5kLCBhbmQgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIGFzc2Vzc21lbnQuIEkmIzM5O20gcmVhZHkgdG8gcHJvY2VlZCB3aXRoIHNldHRpbmcgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzJiMzNDssCiAgICAmIzM0O2V4dDRfZmNfcmVwbGF5X2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfZmNfcmVwbGF5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIHByb3BhZ2F0aW9uIGFuZCBjb250cm9sIGZsb3cgZHVyaW5nIGV4dDQgZmFzdCBjb21taXQgam91cm5hbCByZXBsYXkuIEluIGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcygpLCBlcnJvcnMgcmV0dXJuZWQgYnkgZXh0NF9tYXBfYmxvY2tzKCksIHNraXBfaG9sZSgpLCBhbmQgZXh0NF9maW5kX2V4dGVudCgpIGFyZSBub3cgcHJvcGVybHkgY2FwdHVyZWQgYW5kIHJldHVybmVkIGluc3RlYWQgb2Ygc2lsZW50bHkgaWdub3JlZCwgYW5kIGV4dDRfZmNfcmVwbGF5X2lub2RlKCkgaXMgdXBkYXRlZCB0byBoYW5kbGUgYW5kIHByb3BhZ2F0ZSBmYWlsdXJlcy4gVGhlc2UgZXJyb3ItaGFuZGxpbmcgcGF0aHMgaW4gZXh0NCBmaWxlc3lzdGVtIHJlcGxheSBhcmUgcmVhY2hhYmxlIGR1cmluZyBqb3VybmFsIHJlY292ZXJ5IGFuZCBtb3VudCBvcGVyYXRpb25zLCBtYWtpbmcgdGhlbSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nIHdpdGggY29ycnVwdGVkIGRpc2sgaW1hZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzJiMzNDssCiAgICAmIzM0O2V4dDRfZmNfcmVwbGF5X2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfZmNfcmVwbGF5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIHByb3BhZ2F0aW9uIGFuZCBjb250cm9sIGZsb3cgZHVyaW5nIGV4dDQgZmFzdCBjb21taXQgam91cm5hbCByZXBsYXkuIEluIGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcygpLCBlcnJvcnMgcmV0dXJuZWQgYnkgZXh0NF9tYXBfYmxvY2tzKCksIHNraXBfaG9sZSgpLCBhbmQgZXh0NF9maW5kX2V4dGVudCgpIGFyZSBub3cgcHJvcGVybHkgY2FwdHVyZWQgYW5kIHJldHVybmVkIGluc3RlYWQgb2Ygc2lsZW50bHkgaWdub3JlZCwgYW5kIGV4dDRfZmNfcmVwbGF5X2lub2RlKCkgaXMgdXBkYXRlZCB0byBoYW5kbGUgYW5kIHByb3BhZ2F0ZSBmYWlsdXJlcy4gVGhlc2UgZXJyb3ItaGFuZGxpbmcgcGF0aHMgaW4gZXh0NCBmaWxlc3lzdGVtIHJlcGxheSBhcmUgcmVhY2hhYmxlIGR1cmluZyBqb3VybmFsIHJlY292ZXJ5IGFuZCBtb3VudCBvcGVyYXRpb25zLCBtYWtpbmcgdGhlbSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nIHdpdGggY29ycnVwdGVkIGRpc2sgaW1hZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gZXh0NCBmYXN0LWNvbW1pdCByZXBsYXkgY29kZSAoZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKCkgYW5kIGV4dDRfZmNfcmVwbGF5X2lub2RlKCkpLiBJdCBlbnN1cmVzIHRoYXQgd2hlbiBleHQ0X21hcF9ibG9ja3MoKSwgc2tpcF9ob2xlKCksIG9yIGV4dDRfZmluZF9leHRlbnQoKSBmYWlsLCB0aGUgZXJyb3IgY29kZSBpcyBjYXB0dXJlZCwgdGhlIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGNsZWFudXAgd2l0aG91dCB1cGRhdGluZyBvciBkaXJ0eWluZyB0aGUgaW5vZGUsIGFuZCB0aGUgZXJyb3IgaXMgcHJvcGFnYXRlZCB1cCB0aGUgY2FsbCBzdGFjayB0byBhYm9ydCB0aGUgcmVwbGF5LlxuXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIChubyBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3RsLCBldGMuKSwgZWxpbWluYXRpbmcgYW55IHJpc2sgb2YgaW5mby1sZWFrcy5cbi0gTm8gbmV3IG1lbW9yeSBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBvciBsZWZ0IHVuaW5pdGlhbGl6ZWQ7IHRoZSBtb2RpZmllZCBicmFuY2hpbmcgcmVsaWVzIHN0cmljdGx5IG9uIHByb3Blcmx5IGluaXRpYWxpemVkL2Fzc2lnbmVkIHJldHVybiB2YWx1ZXMgYW5kIGVycm9yIHBvaW50ZXJzLlxuLSBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cbi0gQW55IGJ1Z3MgY2F1c2VkIGJ5IGNvcnJ1cHRlZCBqb3VybmFsIHJlcGxheSAoc3VjaCBhcyBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMpIGZhbGwgdW5kZXIgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMsIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQyZTE5ODYyMmRmY2JhMjI1NGI3YzViNmZlN2ZmZTU0YjFkOTFkN2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxNSAwMjoxNjo0MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50cy5jIGIvZnMvZXh0NC9leHRlbnRzLmMKaW5kZXggNzYwMzhiNmMzNjU1Mi4uZjhjODA1ZDgwYzMzYyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHRlbnRzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9leHRlbnRzLmMKQEAgLTYyNzUsNyAmIzQzOzYyNzUsNyBAQCBpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJCW1hcC5tX2xlbiA9IGVuZCAtIGN1cjsKIAkJcmV0ID0gZXh0NF9tYXBfYmxvY2tzKE5VTEwsIGlub2RlLCAmYW1wO21hcCwgMCk7CiAJCWlmIChyZXQgJmx0OyAwKQotCQkJYnJlYWs7CiYjNDM7CQkJZ290byBjbGVhbnVwOwogCQlpZiAocmV0ICZndDsgMCkKIAkJCW51bWJsa3MgJiM0Mzs9IHJldDsKIAkJY3VyID0gY3VyICYjNDM7IG1hcC5tX2xlbjsKQEAgLTYyOTEsMTUgJiM0Mzs2MjkxLDE5IEBAIGludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSkKIAljdXIgPSAwOwogCXJldCA9IHNraXBfaG9sZShpbm9kZSwgJmFtcDtjdXIpOwogCWlmIChyZXQgJmx0OyAwKQotCQlnb3RvIG91dDsKJiM0MzsJCWdvdG8gY2xlYW51cDsKIAlwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoLCAwKTsKLQlpZiAoSVNfRVJSKHBhdGgpKQotCQlnb3RvIG91dDsKJiM0MzsJaWYgKElTX0VSUihwYXRoKSkgewomIzQzOwkJcmV0ID0gUFRSX0VSUihwYXRoKTsKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQogCW51bWJsa3MgJiM0Mzs9IHBhdGgtJmd0O3BfZGVwdGg7CiAJd2hpbGUgKGN1ciAmbHQ7IGVuZCkgewogCQlwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoLCAwKTsKLQkJaWYgKElTX0VSUihwYXRoKSkKLQkJCWJyZWFrOwomIzQzOwkJaWYgKElTX0VSUihwYXRoKSkgewomIzQzOwkJCXJldCA9IFBUUl9FUlIocGF0aCk7CiYjNDM7CQkJZ290byBjbGVhbnVwOwomIzQzOwkJfQogCQlleCA9IHBhdGhbcGF0aC0mZ3Q7cF9kZXB0aF0ucF9leHQ7CiAJCWlmICghZXgpCiAJCQlnb3RvIGNsZWFudXA7CkBAIC02MzA4LDExICYjNDM7NjMxMiwxMyBAQCBpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJCQkJCWV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4KSk7CiAJCXJldCA9IHNraXBfaG9sZShpbm9kZSwgJmFtcDtjdXIpOwogCQlpZiAocmV0ICZsdDsgMCkKLQkJCWJyZWFrOwomIzQzOwkJCWdvdG8gY2xlYW51cDsKIAogCQlwYXRoMiA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aDIsIDApOwotCQlpZiAoSVNfRVJSKHBhdGgyKSkKLQkJCWJyZWFrOwomIzQzOwkJaWYgKElTX0VSUihwYXRoMikpIHsKJiM0MzsJCQlyZXQgPSBQVFJfRVJSKHBhdGgyKTsKJiM0MzsJCQlnb3RvIGNsZWFudXA7CiYjNDM7CQl9CiAKIAkJZm9yIChpID0gMDsgaSAmbHQ7PSBtYXgocGF0aC0mZ3Q7cF9kZXB0aCwgcGF0aDItJmd0O3BfZGVwdGgpOyBpJiM0MzsmIzQzOykgewogCQkJY21wMSA9IGNtcDIgPSAwOwpAQCAtNjMzMyw3ICYjNDM7NjMzOSw3IEBAIGludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSkKIGNsZWFudXA6CiAJZXh0NF9mcmVlX2V4dF9wYXRoKHBhdGgpOwogCWV4dDRfZnJlZV9leHRfcGF0aChwYXRoMik7Ci0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIGludCBleHQ0X2V4dF9jbGVhcl9iYihzdHJ1Y3QgaW5vZGUgKmlub2RlKQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9mYXN0X2NvbW1pdC5jIGIvZnMvZXh0NC9mYXN0X2NvbW1pdC5jCmluZGV4IDBjYWM4OTBjZjM3MDIuLjgxMTBiMDFlMzZjMTEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZmFzdF9jb21taXQuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2Zhc3RfY29tbWl0LmMKQEAgLTIwMDIsOCAmIzQzOzIwMDIsMTEgQEAgc3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCSAqIGNyYXNoaW5nLiBUaGlzIHNob3VsZCBiZSBmaXhlZCBidXQgdW50aWwgdGhlbiwgd2UgY2FsY3VsYXRlCiAJICogdGhlIG51bWJlciBvZiBibG9ja3MgdGhlIGlub2RlLgogCSAqLwotCWlmICghZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpKQotCQlleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoaW5vZGUpOwomIzQzOwlpZiAoIWV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSkgewomIzQzOwkJcmV0ID0gZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKGlub2RlKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBvdXRfYnJlbHNlOwomIzQzOwl9CiAKIAlpbm9kZS0mZ3Q7aV9nZW5lcmF0aW9uID0gbGUzMl90b19jcHUoZXh0NF9yYXdfaW5vZGUoJmFtcDtpbG9jKS0mZ3Q7aV9nZW5lcmF0aW9uKTsKIAlleHQ0X3Jlc2V0X2lub2RlX3NlZWQoaW5vZGUpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk4NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBFdmFsdWF0aW9uOiBFeHQ0IFBhdGNoIEFuYWx5c2lzKioKCk9rYXksIHNvIHRoZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCB0byB0aGUgZXh0NCBmaWxlc3lzdGVtIHJlcXVpcmVzIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGFjdHVhbGx5IGJlaW5nIGNoYW5nZWQuIFRoZSBmaWxlIGlzIGBmcy9leHQ0L2V4dGVudHMuY2AsIHNwZWNpZmljYWxseSB0aGUgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AgZnVuY3Rpb24uIEl0IHNlZW1zIGxpa2UgdGhlIHBhdGNoIGZvY3VzZXMgb24gZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEkgc2VlIGEgcGF0dGVybjogdGhlIGNoYW5nZXMgcHJlZG9taW5hbnRseSBpbnZvbHZlIHJlcGxhY2luZyBgYnJlYWtgIG9yIGBnb3RvIG91dGAgd2l0aCBgZ290byBjbGVhbnVwYCBhZnRlciBlbmNvdW50ZXJpbmcgbmVnYXRpdmUgcmV0dXJuIHZhbHVlcyBmcm9tIHZhcmlvdXMgZnVuY3Rpb25zIGxpa2UgYGV4dDRfbWFwX2Jsb2Nrc2AsIGBza2lwX2hvbGVgLCBhbmQgYGV4dDRfZmluZF9leHRlbnRgLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGNsZWFudXAgcHJvY2VkdXJlIGluIHRoZSBrZXJuZWwgLSBpdCYjMzk7cyBtYWtpbmcgc3VyZSByZXNvdXJjZXMgYXJlIGZyZWVkIHdoZW4gdGhpbmdzIGdvIHdyb25nLgoKVGhlIGtleSB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgdXNlIG9mIGBJU19FUlJgIHRvIGNoZWNrIGZvciBlcnJvciBwb2ludGVycyBmcm9tIGBleHQ0X2ZpbmRfZXh0ZW50YC4gVGhhdCBtYWtlcyBtZSB0aGluayBhYm91dCBwb3RlbnRpYWwgcmVzb3VyY2UgbGVha3MuIFNwZWNpZmljYWxseSwgaWYgYGV4dDRfZmluZF9leHRlbnRgIHJldHVybnMgYW4gZXJyb3IgcG9pbnRlciAoYEVSUl9QVFJgKSwgd2hhdCBkb2VzIGBleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aClgIGRvPyBUaGlzIGlzIGEgcG9pbnQgb2YgY29uY2VybiBiZWNhdXNlIGZyZWVpbmcgYSBwb2ludGVyIHRoYXQgaXMgYW4gZXJyb3IsIGlzIHNvbWV0aGluZyB0byBsb29rIGZvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXJ0IG9mIHRoZSBwYXRjaC4gSSBuZWVkIHRvIGtub3cgaWYgdGhlIGBleHQ0X2ZyZWVfZXh0X3BhdGhgIGhhbmRsZXMgZXJyb3IgcG9pbnRlcnMgZ3JhY2VmdWxseS4gSWYgbm90LCB3ZSBoYXZlIGEgcHJvYmxlbS4KCkFuZCB0aGVuIHRoZXJlJiMzOTtzIHRoZSBgZnMvZXh0NC9mYXN0X2NvbW1pdC5jYCBmaWxlLiBUaGUgYGV4dDRfZmNfcmVwbGF5X2lub2RlYCBmdW5jdGlvbiBjYWxscyBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCBidXQgb25seSBpZiB0aGUgaW5vZGUgZG9lc24mIzM5O3QgaGF2ZSBpbmxpbmUgZGF0YS4gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgY2FsbCBkaWN0YXRlcyB3aGV0aGVyIHdlIGV4aXQuIE9rYXksIHRoaXMgaXMgaW1wb3J0YW50IGNvbnRleHQgLSB0aGlzIGlzIGEgZnVuY3Rpb24gdGhhdCBtaWdodCAqdHJpZ2dlciogb3VyIGZ1bmN0aW9uIG9mIGludGVyZXN0IGlmIHRoZSBpbm9kZSBkb2VzbiYjMzk7dCBoYXZlIGlubGluZSBkYXRhLgoKQWxyaWdodCwgSSBuZWVkIHRvIGRpdmUgaW50byBgZnMvZXh0NC9leHRlbnRzLmNgIGFyb3VuZCBsaW5lIDYyNzUuIEkmIzM5O2xsIHJlYWQgdGhlIGNvZGUgYXJvdW5kIHRoYXQgYXJlYSB1c2luZyBteSB0b29saW5nIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcyBhbmQgd2hldGhlciBhbnkgY3JpdGljYWwgcmVzb3VyY2UgY2xlYW51cCBpcyBtaXNzZWQgd2hlbiBhbiBlcnJvciBpcyBoaXQuIEkgYW0gbGVhbmluZyB0b3dhcmRzIHRoaXMgcGF0Y2ggKm5vdCogcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24sIGJ1dCBJIHdhbnQgdG8gYmUgMTAwJSBzdXJlIHRoZSBlcnJvciBwYXRocyBhcmUgcHJvcGVybHkgaGFuZGxlZCwgZXNwZWNpYWxseSB0aGF0IGBleHQ0X2ZyZWVfZXh0X3BhdGhgIGNhbGwuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHRlbnRzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzYyNjA6XHRcbjYyNjE6XHRcdC8qIERldGVybWluIHRoZSBzaXplIG9mIHRoZSBmaWxlIGZpcnN0ICovXG42MjYyOlx0XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgRVhUX01BWF9CTE9DS1MgLSAxLCBOVUxMLFxuNjI2MzpcdFx0XHRcdFx0XHRFWFQ0X0VYX05PQ0FDSEUpO1xuNjI2NDpcdFx0aWYgKElTX0VSUihwYXRoKSlcbjYyNjU6XHRcdFx0cmV0dXJuIFBUUl9FUlIocGF0aCk7XG42MjY2Olx0XHRleCA9IHBhdGhbcGF0aC1cdTAwM2VwX2RlcHRoXS5wX2V4dDtcbjYyNjc6XHRcdGlmICghZXgpXG42MjY4Olx0XHRcdGdvdG8gb3V0O1xuNjI2OTpcdFx0ZW5kID0gbGUzMl90b19jcHUoZXgtXHUwMDNlZWVfYmxvY2spICYjNDM7IGV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4KTtcbjYyNzA6XHRcbjYyNzE6XHRcdC8qIENvdW50IHRoZSBudW1iZXIgb2YgZGF0YSBibG9ja3MgKi9cbjYyNzI6XHRcdGN1ciA9IDA7XG42MjczOlx0XHR3aGlsZSAoY3VyIFx1MDAzYyBlbmQpIHtcbjYyNzQ6XHRcdFx0bWFwLm1fbGJsayA9IGN1cjtcbjYyNzU6XHRcdFx0bWFwLm1fbGVuID0gZW5kIC0gY3VyO1xuNjI3NjpcdFx0XHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFx1MDAyNm1hcCwgMCk7XG42Mjc3Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG42Mjc4Olx0XHRcdFx0Z290byBjbGVhbnVwO1xuNjI3OTpcdFx0XHRpZiAocmV0IFx1MDAzZSAwKVxuNjI4MDpcdFx0XHRcdG51bWJsa3MgJiM0Mzs9IHJldDtcbjYyODE6XHRcdFx0Y3VyID0gY3VyICYjNDM7IG1hcC5tX2xlbjtcbjYyODI6XHRcdH1cbjYyODM6XHRcbjYyODQ6XHRcdC8qXG42Mjg1Olx0XHQgKiBDb3VudCB0aGUgbnVtYmVyIG9mIGV4dGVudCB0cmVlIGJsb2Nrcy4gV2UgZG8gaXQgYnkgbG9va2luZyB1cFxuNjI4NjpcdFx0ICogdHdvIHN1Y2Nlc3NpdmUgZXh0ZW50cyBhbmQgZGV0ZXJtaW5pbmcgdGhlIGRpZmZlcmVuY2UgYmV0d2VlblxuNjI4NzpcdFx0ICogdGhlaXIgcGF0aHMuIFdoZW4gcGF0aCBpcyBkaWZmZXJlbnQgZm9yIDIgc3VjY2Vzc2l2ZSBleHRlbnRzXG42Mjg4Olx0XHQgKiB3ZSBjb21wYXJlIHRoZSBibG9ja3MgaW4gdGhlIHBhdGggYXQgZWFjaCBsZXZlbCBhbmQgaW5jcmVtZW50XG42Mjg5Olx0XHQgKiBpYmxvY2tzIGJ5IHRvdGFsIG51bWJlciBvZiBkaWZmZXJlbmNlcyBmb3VuZC5cbjYyOTA6XHRcdCAqL1xuNjI5MTpcdFx0Y3VyID0gMDtcbjYyOTI6XHRcdHJldCA9IHNraXBfaG9sZShpbm9kZSwgXHUwMDI2Y3VyKTtcbjYyOTM6XHRcdGlmIChyZXQgXHUwMDNjIDApXG42Mjk0Olx0XHRcdGdvdG8gY2xlYW51cDtcbjYyOTU6XHRcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBjdXIsIHBhdGgsIDApO1xuNjI5NjpcdFx0aWYgKElTX0VSUihwYXRoKSkge1xuNjI5NzpcdFx0XHRyZXQgPSBQVFJfRVJSKHBhdGgpO1xuNjI5ODpcdFx0XHRnb3RvIGNsZWFudXA7XG42Mjk5Olx0XHR9XG42MzAwOlx0XHRudW1ibGtzICYjNDM7PSBwYXRoLVx1MDAzZXBfZGVwdGg7XG42MzAxOlx0XHR3aGlsZSAoY3VyIFx1MDAzYyBlbmQpIHtcbjYzMDI6XHRcdFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aCwgMCk7XG42MzAzOlx0XHRcdGlmIChJU19FUlIocGF0aCkpIHtcbjYzMDQ6XHRcdFx0XHRyZXQgPSBQVFJfRVJSKHBhdGgpO1xuNjMwNTpcdFx0XHRcdGdvdG8gY2xlYW51cDtcbjYzMDY6XHRcdFx0fVxuNjMwNzpcdFx0XHRleCA9IHBhdGhbcGF0aC1cdTAwM2VwX2RlcHRoXS5wX2V4dDtcbjYzMDg6XHRcdFx0aWYgKCFleClcbjYzMDk6XHRcdFx0XHRnb3RvIGNsZWFudXA7XG42MzEwOlx0XG42MzExOlx0XHRcdGN1ciA9IG1heChjdXIgJiM0MzsgMSwgbGUzMl90b19jcHUoZXgtXHUwMDNlZWVfYmxvY2spICYjNDM7XG42MzEyOlx0XHRcdFx0XHRcdGV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4KSk7XG42MzEzOlx0XHRcdHJldCA9IHNraXBfaG9sZShpbm9kZSwgXHUwMDI2Y3VyKTtcbjYzMTQ6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjYzMTU6XHRcdFx0XHRnb3RvIGNsZWFudXA7XG42MzE2Olx0XG42MzE3Olx0XHRcdHBhdGgyID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoMiwgMCk7XG42MzE4Olx0XHRcdGlmIChJU19FUlIocGF0aDIpKSB7XG42MzE5Olx0XHRcdFx0cmV0ID0gUFRSX0VSUihwYXRoMik7XG42MzIwOlx0XHRcdFx0Z290byBjbGVhbnVwO1xuNjMyMTpcdFx0XHR9XG42MzIyOlx0XG42MzIzOlx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBtYXgocGF0aC1cdTAwM2VwX2RlcHRoLCBwYXRoMi1cdTAwM2VwX2RlcHRoKTsgaSYjNDM7JiM0MzspIHtcbjYzMjQ6XHRcdFx0XHRjbXAxID0gY21wMiA9IDA7XG42MzI1Olx0XHRcdFx0aWYgKGkgXHUwMDNjPSBwYXRoLVx1MDAzZXBfZGVwdGgpXG42MzI2Olx0XHRcdFx0XHRjbXAxID0gcGF0aFtpXS5wX2JoID9cbjYzMjc6XHRcdFx0XHRcdFx0cGF0aFtpXS5wX2JoLVx1MDAzZWJfYmxvY2tuciA6IDA7XG42MzI4Olx0XHRcdFx0aWYgKGkgXHUwMDNjPSBwYXRoMi1cdTAwM2VwX2RlcHRoKVxuNjMyOTpcdFx0XHRcdFx0Y21wMiA9IHBhdGgyW2ldLnBfYmggP1xuNjMzMDpcdFx0XHRcdFx0XHRwYXRoMltpXS5wX2JoLVx1MDAzZWJfYmxvY2tuciA6IDA7XG42MzMxOlx0XHRcdFx0aWYgKGNtcDEgIT0gY21wMiBcdTAwMjZcdTAwMjYgY21wMiAhPSAwKVxuNjMzMjpcdFx0XHRcdFx0bnVtYmxrcyYjNDM7JiM0Mzs7XG42MzMzOlx0XHRcdH1cbjYzMzQ6XHRcdH1cbjYzMzU6XHRcbjYzMzY6XHRvdXQ6XG42MzM3Olx0XHRpbm9kZS1cdTAwM2VpX2Jsb2NrcyA9IG51bWJsa3MgXHUwMDNjXHUwMDNjIChpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHMgLSA5KTtcbjYzMzg6XHRcdGV4dDRfbWFya19pbm9kZV9kaXJ0eShOVUxMLCBpbm9kZSk7XG42MzM5Olx0Y2xlYW51cDpcbjYzNDA6XHRcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcbjYzNDE6XHRcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoMik7XG42MzQyOlx0XHRyZXR1cm4gcmV0O1xuNjM0MzpcdH1cbjYzNDQ6XHRcbjYzNDU6XHRpbnQgZXh0NF9leHRfY2xlYXJfYmIoc3RydWN0IGlub2RlICppbm9kZSlcbjYzNDY6XHR7XG42MzQ3Olx0XHRzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCA9IE5VTEw7XG42MzQ4Olx0XHRzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4O1xuNjM0OTpcdFx0ZXh0NF9sYmxrX3QgY3VyID0gMCwgZW5kO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDE5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2YgZXh0NCBpbnRlcm5hbHM6CgoqKkRpdmluZyBpbnRvIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gYmVnaW4gYW4gaW52ZXN0aWdhdGlvbiBhbmQgZ2V0IGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmN0aW9uIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgLiBHaXZlbiB0aGF0IEkmIzM5O20gbGlrZWx5IGtuZWUtZGVlcCBpbiB1bmRlcnN0YW5kaW5nIGV4dDQsIHRoaXMgZnVuY3Rpb24gbmFtZSBzdHJvbmdseSBzdWdnZXN0cyBpdCBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggcmVwbGF5aW5nIG9yIHNldHRpbmcgaW5vZGUgYmxvY2tzIHdpdGhpbiB0aGUgZXh0ZW50IHRyZWUgbWVjaGFuaXNtIG9mIHRoZSBleHQ0IGZpbGUgc3lzdGVtLiBJ4oCZbSBndWVzc2luZyB0aGlzIG1pZ2h0IHJlbGF0ZSB0byB0aGUgam91cm5hbCByZWNvdmVyeSBwcm9jZXNzLCBwb3NzaWJseSBoYW5kbGluZyBtb2RpZmljYXRpb25zIHRvIGV4dGVudC1tYXBwZWQgaW5vZGVzIGFmdGVyIGEgY3Jhc2ggb3IgdW5jbGVhbiBzaHV0ZG93bi4gSSBleHBlY3QgaXQmIzM5O3MgY3J1Y2lhbCBmb3IgZW5zdXJpbmcgZGF0YSBjb25zaXN0ZW5jeSB3aGVuIHJlY292ZXJpbmcgZnJvbSBhbiBpbmNvbXBsZXRlIHdyaXRlIG9yIHRyYW5zYWN0aW9uLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGFuZCB3aGVyZSBpdCYjMzk7cyBiZWluZyBjYWxsZWQuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIGxvZ2ljIHRvIHVuZGVyc3RhbmQgdGhlIGludHJpY2FjaWVzIG9mIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgam91cm5hbGluZyBhbmQgYmxvY2sgYWxsb2NhdGlvbiBsYXllcnMuIFRpbWUgdG8gZGlnIGluIGFuZCB1bnJhdmVsIHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHRlbnRzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzYyNDU6XHRcdGlmIChyZXQgIT0gMClcbjYyNDY6XHRcdFx0cmV0dXJuIDA7XG42MjQ3Olx0XHQqY3VyID0gKmN1ciAmIzQzOyBtYXAubV9sZW47XG42MjQ4Olx0XHRyZXR1cm4gMDtcbjYyNDk6XHR9XG42MjUwOlx0XG42MjUxOlx0LyogQ291bnQgbnVtYmVyIG9mIGJsb2NrcyB1c2VkIGJ5IHRoaXMgaW5vZGUgYW5kIHVwZGF0ZSBpX2Jsb2NrcyAqL1xuNjI1MjpcdGludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcbjYyNTM6XHR7XG42MjU0Olx0XHRzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCA9IE5VTEwsICpwYXRoMiA9IE5VTEw7XG42MjU1Olx0XHRzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4O1xuNjI1NjpcdFx0ZXh0NF9sYmxrX3QgY3VyID0gMCwgZW5kO1xuNjI1NzpcdFx0aW50IG51bWJsa3MgPSAwLCBpLCByZXQgPSAwO1xuNjI1ODpcdFx0ZXh0NF9mc2Jsa190IGNtcDEsIGNtcDI7XG42MjU5Olx0XHRzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDtcbjYyNjA6XHRcbjYyNjE6XHRcdC8qIERldGVybWluIHRoZSBzaXplIG9mIHRoZSBmaWxlIGZpcnN0ICovXG42MjYyOlx0XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgRVhUX01BWF9CTE9DS1MgLSAxLCBOVUxMLFxuNjI2MzpcdFx0XHRcdFx0XHRFWFQ0X0VYX05PQ0FDSEUpO1xuNjI2NDpcdFx0aWYgKElTX0VSUihwYXRoKSlcbjYyNjU6XHRcdFx0cmV0dXJuIFBUUl9FUlIocGF0aCk7XG42MjY2Olx0XHRleCA9IHBhdGhbcGF0aC1cdTAwM2VwX2RlcHRoXS5wX2V4dDtcbjYyNjc6XHRcdGlmICghZXgpXG42MjY4Olx0XHRcdGdvdG8gb3V0O1xuNjI2OTpcdFx0ZW5kID0gbGUzMl90b19jcHUoZXgtXHUwMDNlZWVfYmxvY2spICYjNDM7IGV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEzNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gbXkgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBEZWVwZXIgaW50byBleHQ0IEZhc3QgQ29tbWl0KioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAgd2l0aGluIGBmcy9leHQ0L2Zhc3RfY29tbWl0LmNgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBmYXN0IGNvbW1pdCBwcm9jZXNzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0cyByb2xlIGluIHJlcGxheWluZyBpbm9kZSBvcGVyYXRpb25zLiBXaGF0IHNwZWNpZmljIGFzcGVjdHMgb2YgaW5vZGUgbWV0YWRhdGEgYXJlIGJlaW5nIHJlY29uc3RydWN0ZWQgb3IgdmFsaWRhdGVkIGR1cmluZyByZXBsYXk/IElzIHRoaXMgcHJpbWFyaWx5IGFib3V0IGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IGFmdGVyIGEgY3Jhc2ggb3IgYSBwb3dlciBmYWlsdXJlIGR1cmluZyBhIGZhc3QgY29tbWl0IHdpbmRvdz8KCkkgd2FudCB0byBjb25zaWRlciBob3cgdGhlIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBqb3VybmFsLiBBcmUgd2UgcmVhZGluZyB0cmFuc2FjdGlvbiBsb2dzLCBhbmQgaWYgc28sIHdoYXQga2luZCBvZiBpbmZvcm1hdGlvbiBpcyBpdCBwdWxsaW5nIHRvIHJlYnVpbGQgdGhlIGlub2RlIHN0YXRlPyBJcyBpdCBqdXN0IHRoZSBpbm9kZSBpdHNlbGYsIG9yIGFyZSB3ZSB3b3JraW5nIHdpdGggYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMgbGlrZSBiaXRtYXBzIG9yIGluZGlyZWN0IGJsb2Nrcz8gSSB3b3VsZCBhbHNvIHdhbnQgdG8gZXhhbWluZSB3aGVyZSBgZXh0NF9mY19yZXBsYXlfaW5vZGVgIGlzIGNhbGxlZCBpbiB0aGUgZmFzdCBjb21taXQgcmVjb3ZlcnkgcGF0aC4gSXMgdGhpcyBleGVjdXRlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgY3Jhc2ggcmVjb3ZlcnksIG9yIGR1cmluZyBhbiBlYXJsaWVyIHBoYXNlIG9mIHRoZSBmYXN0IGNvbW1pdCB0cmFuc2FjdGlvbj8KSSBuZWVkIHRvIGV4YW1pbmUgaXQgbW9yZSBjbG9zZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvZmFzdF9jb21taXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk5MDpcdFxuMTk5MTpcdFx0LyogR2l2ZW4gdGhhdCB3ZSBqdXN0IHdyb3RlIHRoZSBpbm9kZSBvbiBkaXNrLCB0aGlzIFNIT1VMRCBzdWNjZWVkLiAqL1xuMTk5MjpcdFx0aW5vZGUgPSBleHQ0X2lnZXQoc2IsIGlubywgRVhUNF9JR0VUX05PUk1BTCk7XG4xOTkzOlx0XHRpZiAoSVNfRVJSKGlub2RlKSkge1xuMTk5NDpcdFx0XHRleHQ0X2RlYnVnKFwmIzM0O0lub2RlIG5vdCBmb3VuZC5cJiMzNDspO1xuMTk5NTpcdFx0XHRpbm9kZSA9IE5VTEw7XG4xOTk2Olx0XHRcdHJldCA9IC1FRlNDT1JSVVBURUQ7XG4xOTk3Olx0XHRcdGdvdG8gb3V0X2JyZWxzZTtcbjE5OTg6XHRcdH1cbjE5OTk6XHRcbjIwMDA6XHRcdC8qXG4yMDAxOlx0XHQgKiBPdXIgYWxsb2NhdG9yIGNvdWxkIGhhdmUgbWFkZSBkaWZmZXJlbnQgZGVjaXNpb25zIHRoYW4gYmVmb3JlXG4yMDAyOlx0XHQgKiBjcmFzaGluZy4gVGhpcyBzaG91bGQgYmUgZml4ZWQgYnV0IHVudGlsIHRoZW4sIHdlIGNhbGN1bGF0ZVxuMjAwMzpcdFx0ICogdGhlIG51bWJlciBvZiBibG9ja3MgdGhlIGlub2RlLlxuMjAwNDpcdFx0ICovXG4yMDA1Olx0XHRpZiAoIWV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSkge1xuMjAwNjpcdFx0XHRyZXQgPSBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoaW5vZGUpO1xuMjAwNzpcdFx0XHRpZiAocmV0KVxuMjAwODpcdFx0XHRcdGdvdG8gb3V0X2JyZWxzZTtcbjIwMDk6XHRcdH1cbjIwMTA6XHRcbjIwMTE6XHRcdGlub2RlLVx1MDAzZWlfZ2VuZXJhdGlvbiA9IGxlMzJfdG9fY3B1KGV4dDRfcmF3X2lub2RlKFx1MDAyNmlsb2MpLVx1MDAzZWlfZ2VuZXJhdGlvbik7XG4yMDEyOlx0XHRleHQ0X3Jlc2V0X2lub2RlX3NlZWQoaW5vZGUpO1xuMjAxMzpcdFxuMjAxNDpcdFx0ZXh0NF9pbm9kZV9jc3VtX3NldChpbm9kZSwgZXh0NF9yYXdfaW5vZGUoXHUwMDI2aWxvYyksIEVYVDRfSShpbm9kZSkpO1xuMjAxNTpcdFx0cmV0ID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoTlVMTCwgTlVMTCwgaWxvYy5iaCk7XG4yMDE2Olx0XHRzeW5jX2RpcnR5X2J1ZmZlcihpbG9jLmJoKTtcbjIwMTc6XHRvdXRfYnJlbHNlOlxuMjAxODpcdFx0YnJlbHNlKGlsb2MuYmgpO1xuMjAxOTpcdG91dDpcbjIwMjA6XHRcdGlwdXQoaW5vZGUpO1xuMjAyMTpcdFx0aWYgKCFyZXQpXG4yMDIyOlx0XHRcdGJsa2Rldl9pc3N1ZV9mbHVzaChzYi1cdTAwM2VzX2JkZXYpO1xuMjAyMzpcdFxuMjAyNDpcdFx0cmV0dXJuIHJldDtcbjIwMjU6XHR9XG4yMDI2Olx0XG4yMDI3Olx0LypcbjIwMjg6XHQgKiBEZW50cnkgY3JlYXRlIHJlcGxheSBmdW5jdGlvbi5cbjIwMjk6XHQgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDQ1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYGV4dDRfZnJlZV9leHRfcGF0aGAgd2l0aCBhbiBgSVNfRVJSYCBQb2ludGVyKioKCkFscmlnaHQsIEkmIzM5O20gY3VyaW91cy4gVGhlIHF1ZXN0aW9uIGlzLCB3aGF0IGhhcHBlbnMgd2l0aGluIGBleHQ0X2ZyZWVfZXh0X3BhdGhgIGlmIHdlIGZlZWQgaXQgYW4gYElTX0VSUmAgcG9pbnRlcj8gSSBrbm93IHRoZSBpbnRlbnRpb24gaXMgcHJvYmFibHkgdG8gY2xlYW4gdXAgYW4gZXJyb3IgY29uZGl0aW9uLCBidXQgSSB3YW50IHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlIG9mIHRoZSBiZWhhdmlvci4gSXQmIzM5O3MgY3J1Y2lhbCwgd2hlbiBkZWFsaW5nIHdpdGggZmlsZSBzeXN0ZW0gY29kZSwgdG8gaGF2ZSBhIHJvY2stc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGVzZSBlZGdlIGNhc2VzIHRvIHByZXZlbnQgc3VidGxlIGNvcnJ1cHRpb24gaXNzdWVzLgoKU28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIGp1bXAgc3RyYWlnaHQgaW50byB0aGUgYGV4dDRfZnJlZV9leHRfcGF0aGAgZnVuY3Rpb24gZGVmaW5pdGlvbi4gSSBuZWVkIHRvIHdhbGsgdGhyb3VnaCB0aGUgbG9naWMgdGhlcmUsIHN0ZXAgYnkgc3RlcCwgYW5kIGlkZW50aWZ5IGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbGx5IGludmFsaWQgcG9pbnRlcnMuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IG51bGwgcG9pbnRlciBjaGVja3MsIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGRlYWxsb2NhdGlvbiByb3V0aW5lcy4gVGhpcyBpcyBhbGwgYWJvdXQgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIGVycm9yIGhhbmRsaW5nIHJvYnVzdG5lc3MuIEkgbmVlZCB0byBiZSBjb25maWRlbnQgdGhhdCBpdCBncmFjZWZ1bGx5IGhhbmRsZXMgdGhlIGVycm9yIGNvbmRpdGlvbiBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cy4gVGltZSB0byBnZXQgdG8gd29yayEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBleHQ0X2ZyZWVfZXh0X3BhdGgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9MzkzNT1leHRlcm4gc3RydWN0IGV4dDRfZXh0X3BhdGggKmV4dDRfZmluZF9leHRlbnQoc3RydWN0IGlub2RlICosIGV4dDRfbGJsa190LFxuLS1cbmZzL2V4dDQvZXh0NC5oLTM5MzctXHRcdFx0XHRcdCAgICAgIGludCBmbGFncyk7XG5mcy9leHQ0L2V4dDQuaDozOTM4OmV4dGVybiB2b2lkIGV4dDRfZnJlZV9leHRfcGF0aChzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqKTtcbmZzL2V4dDQvZXh0NC5oLTM5MzktZXh0ZXJuIGludCBleHQ0X2V4dF9jaGVja19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz0xMTE9c3RhdGljIHZvaWQgZXh0NF9leHRfZHJvcF9yZWZzKHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTEyMS1cbmZzL2V4dDQvZXh0ZW50cy5jOjEyMjp2b2lkIGV4dDRfZnJlZV9leHRfcGF0aChzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aClcbmZzL2V4dDQvZXh0ZW50cy5jLTEyMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2MTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgY29kZToKCioqRGl2aW5nIGludG8gZXh0NF9mcmVlX2V4dF9wYXRoKioKCk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgZXh0NF9mcmVlX2V4dF9wYXRoYCBpbiBgZnMvZXh0NC9leHRlbnRzLmNgLiBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgaGFuZGxpbmcgZXh0ZW50IGRlYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gZnJlZWluZyBibG9ja3MgYXNzb2NpYXRlZCB3aXRoIGFuIGV4dGVudC1iYXNlZCBmaWxlLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCBvcGVyYXRlcy4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgbG9naWMgZmxvdyBoZXJlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgaXQgbmF2aWdhdGVzIHRoZSBleHRlbnQgdHJlZSwgaGFuZGxlcyBkaWZmZXJlbnQgY2FzZXMgKGUuZy4sIHBhcnRpYWwgdnMuIGZ1bGwgZXh0ZW50cyksIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgbWV0YWRhdGEuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuIEkgZXhwZWN0IHRvIGJlIG9ic2VydmluZyB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGlub2RlIGFuZCB0aGUgYmxvY2sgYWxsb2NhdGlvbiBzdHJ1Y3R1cmVzLiBJIHdhbnQgdG8gc2VlIGlmIGl0IG1ha2VzIHVzZSBvZiBhbnkgb3B0aW1pemF0aW9ucy4gSSBuZWVkIHRvIGVuc3VyZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGRlYWxsb2NhdGlvbi4gVGhlcmUgd2lsbCBiZSBsb3RzIHRvIHVucmF2ZWwgaGVyZSwgYnV0IGJ5IHN0YXJ0aW5nIHdpdGggdGhlIGVudHJ5IHBvaW50LCBgZXh0NF9mcmVlX2V4dF9wYXRoYCwgSSBzaG91bGQgaGF2ZSBhIGdvb2QgYmFzZSBmb3IgZnVydGhlciByZXNlYXJjaCwgc3BlY2lmaWNhbGx5IHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZXh0ZW50IHRyZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHRlbnRzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEyMDpcdH1cbiAxMjE6XHRcbiAxMjI6XHR2b2lkIGV4dDRfZnJlZV9leHRfcGF0aChzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aClcbiAxMjM6XHR7XG4gMTI0Olx0XHRpZiAoSVNfRVJSX09SX05VTEwocGF0aCkpXG4gMTI1Olx0XHRcdHJldHVybjtcbiAxMjY6XHRcdGV4dDRfZXh0X2Ryb3BfcmVmcyhwYXRoKTtcbiAxMjc6XHRcdGtmcmVlKHBhdGgpO1xuIDEyODpcdH1cbiAxMjk6XHRcbiAxMzA6XHQvKlxuIDEzMTpcdCAqIE1ha2Ugc3VyZSAmIzM5O2hhbmRsZSYjMzk7IGhhcyBhdCBsZWFzdCAmIzM5O2NoZWNrX2NyZWQmIzM5OyBjcmVkaXRzLiBJZiBub3QsIHJlc3RhcnRcbiAxMzI6XHQgKiB0cmFuc2FjdGlvbiB3aXRoICYjMzk7cmVzdGFydF9jcmVkJiMzOTsgY3JlZGl0cy4gVGhlIGZ1bmN0aW9uIGRyb3BzIGlfZGF0YV9zZW1cbiAxMzM6XHQgKiB3aGVuIHJlc3RhcnRpbmcgdHJhbnNhY3Rpb24gYW5kIGdldHMgaXQgYWZ0ZXIgdHJhbnNhY3Rpb24gaXMgcmVzdGFydGVkLlxuIDEzNDpcdCAqXG4gMTM1Olx0ICogVGhlIGZ1bmN0aW9uIHJldHVybnMgMCBvbiBzdWNjZXNzLCAxIGlmIHRyYW5zYWN0aW9uIGhhZCB0byBiZSByZXN0YXJ0ZWQsXG4gMTM2Olx0ICogYW5kIFx1MDAzYyAwIGluIGNhc2Ugb2YgZmF0YWwgZXJyb3IuXG4gMTM3Olx0ICovXG4gMTM4Olx0aW50IGV4dDRfZGF0YXNlbV9lbnN1cmVfY3JlZGl0cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIDEzOTpcdFx0XHRcdFx0aW50IGNoZWNrX2NyZWQsIGludCByZXN0YXJ0X2NyZWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMjUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHByZXNlbnRlZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDoKCioqQW5hbHl6aW5nIHRoZSBgZXh0NF9mcmVlX2V4dF9wYXRoYCBJbXByb3ZlbWVudCoqCgpPa2F5LCBzbyBgZXh0NF9mcmVlX2V4dF9wYXRoYCBpcyBub3cgaGFuZGxpbmcgYElTX0VSUl9PUl9OVUxMKHBhdGgpYCBzYWZlbHkuIEdvb2QuIEFsd2F5cyBhIGdvb2QgcHJhY3RpY2UgdG8gcHJvdGVjdCBhZ2FpbnN0IHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBlcnJvciBjb25kaXRpb25zLiBEZWZlbnNpdmUgcHJvZ3JhbW1pbmcgYXQgaXRzIGZpbmVzdC4KCk5vdywgbGV0JiMzOTtzIGRpZyBpbnRvIHRoZSAqd2h5Ki4gV2hhdCB3YXMgdGhlIHRyaWdnZXIgZm9yIHRoaXMgY2hhbmdlPyBXaGF0JiMzOTtzIHRoZSBjb250ZXh0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBpc3N1ZSB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSByYW5kb20gY29kZSB0d2VhazsgdGhlcmUgaGFkIHRvIGJlIGEgc3BlY2lmaWMgcHJvYmxlbSwgYSBidWcsIG9yIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuIE15IG5leHQgbW92ZSBpcyBjbGVhcjogSSYjMzk7bGwgZGl2ZSBpbnRvIHRoZSBnaXQgbG9ncywgdGhhdCYjMzk7cyB3aGVyZSB0aGUgc3RvcnkgbGl2ZXMuIEkmIzM5O2xsIHNlYXJjaCBmb3IgcmVmZXJlbmNlcyB0byBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSBpbnZvbHZlZCBzb21laG93LiBBbHRlcm5hdGl2ZWx5LCBpZiB0aGVyZSB3ZXJlIGFueSBzeXprYWxsZXIgY3Jhc2hlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBhcmVhLCB0aGV5IHdvdWxkIHByb3ZpZGUgY3JpdGljYWwgY2x1ZXMuIFRoaXMgZnVuY3Rpb24gcHJvYmFibHkgd2FzIGludm9sdmVkIGluIHNvbWUga2luZCBvZiBtZW1vcnkgY29ycnVwdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDQuaD0zOTU1PWV4dGVybiB2b2lkIGV4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgZW5kKTtcbmZzL2V4dDQvZXh0NC5oOjM5NTY6ZXh0ZXJuIGludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSk7XG5mcy9leHQ0L2V4dDQuaC0zOTU3LWV4dGVybiBpbnQgZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBzdGFydCxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz02MjM0PXN0YXRpYyBpbnQgc2tpcF9ob2xlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190ICpjdXIpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNjI1MS0vKiBDb3VudCBudW1iZXIgb2YgYmxvY2tzIHVzZWQgYnkgdGhpcyBpbm9kZSBhbmQgdXBkYXRlIGlfYmxvY2tzICovXG5mcy9leHQ0L2V4dGVudHMuYzo2MjUyOmludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvZXh0ZW50cy5jLTYyNTMte1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0xOTI1PXN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjAwNS1cdGlmICghZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpKSB7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjAwNjpcdFx0cmV0ID0gZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKGlub2RlKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDA3LVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTU1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTU5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEV4dDQgRmFzdCBDb21taXQgSm91cm5hbCBSZXBsYXkgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AgZnVuY3Rpb24uIEJlZm9yZSB0aGUgcGF0Y2gsIGlmIGBleHQ0X21hcF9ibG9ja3NgIGZhaWxlZCwgdGhlIGNvZGUgd291bGQgc2ltcGx5IGJyZWFrIG91dCBvZiBpdHMgbG9vcCwgcHJvY2VlZCB0byBjYWxjdWxhdGUgaW5vZGUgYmxvY2tzLCBhbmQgbWFyayB0aGUgaW5vZGUgZGlydHksIGV2ZW4gdGhvdWdoIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBtYXBwaW5nLiBDcnVjaWFsbHksIHRoZSByZXR1cm4gdmFsdWUgb2YgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2Agd2FzICppZ25vcmVkKiBpbiBgZXh0NF9mY19yZXBsYXlfaW5vZGVgLiBUaGlzIG1lYW50IHRoYXQgYSBjb3JydXB0ZWQgZmlsZXN5c3RlbSBzdGF0ZSBjb3VsZCBwb3RlbnRpYWxseSBiZSB3cml0dGVuIHRvIGRpc2sgaWYgYSByZXBsYXkgZXJyb3Igb2NjdXJyZWQuIFRoaXMgaXMuLi4gbm90IGdvb2QuCgpUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHNpZ25pZmljYW50IGNoYW5nZTogbm93LCBhbnkgZmFpbHVyZSBmcm9tIGBleHQ0X21hcF9ibG9ja3NgLCBgc2tpcF9ob2xlYCwgb3IgYGV4dDRfZmluZF9leHRlbnRgIHJlc3VsdHMgaW4gYSBqdW1wIHRvIHRoZSBgY2xlYW51cGAgbGFiZWwuIEF0IGBjbGVhbnVwYCwgdGhlIGZ1bmN0aW9uIG5vdyAqcmV0dXJucyogdGhlIGVycm9yIGNvZGUsIHRoZXJlYnkgcHJvcGFnYXRpbmcgdGhlIGVycm9yLiAgSW4gYGV4dDRfZmNfcmVwbGF5X2lub2RlYCwgdGhpcyBlcnJvciBpcyB0aGVuIGNoZWNrZWQ6ICBgaWYgKHJldCkgZ290byBvdXRfYnJlbHNlO2AgbWVhbmluZyBlcnJvcnMgYXJlIHByb3Blcmx5IGhhbmRsZWQgYW5kIHRoZSBjb3JydXB0aW9uIGlzIHByZXZlbnRlZC4gVGhpcyBpcyBhIGNsZWFyIGltcHJvdmVtZW50LgoKTm93LCBhIGNyaXRpY2FsIGNvbnNpZGVyYXRpb246IGFyZSB3ZSBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciB3cml0ZXMgd2l0aCB0aGlzIHBhdGNoPyBJIG5lZWQgdG8gdmVyaWZ5LiAgVGhpcyBpcyBmYXN0IGNvbW1pdCBqb3VybmFsIHJlcGxheSBjb2RlLCBydW5uaW5nIGR1cmluZyBtb3VudC9yZWNvdmVyeS4gTm8gZGlyZWN0IHVzZXItc3BhY2UgaW50ZXJhY3Rpb24sIG5vIGlvY3Rscywgbm8gbmV0bGluay4gU28sIHRoYXQmIzM5O3Mgb25lIGxlc3MgYXJlYSBvZiBjb25jZXJuLgoKTG9va2luZyBtb3JlIGNsb3NlbHkgYXQgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AsIEkgY2FuIHNlZSBgcmV0YCBpcyBpbml0aWFsaXplZCwgYW5kIGluIHRoZSBsb29wLCBzZXZlcmFsIHNpdHVhdGlvbnMgY291bGQgbWFrZSByZXQgbmVnYXRpdmU6CmByZXQgPSBleHQ0X21hcF9ibG9ja3MoLi4uKWAgYW5kIHRoZW4gZ290byBjbGVhbnVwLgpgcmV0ID0gc2tpcF9ob2xlKC4uLilgIGFuZCB0aGVuIGdvdG8gY2xlYW51cC4KYGlmIChJU19FUlIocGF0aCkpYCBhbmQgdGhlbiBgcmV0ID0gUFRSX0VSUihwYXRoKTsgZ290byBjbGVhbnVwO2AKYGlmICghZXgpYCAgYW5kIGdvdG8gY2xlYW51cC4KYGlmIChJU19FUlIocGF0aDIpKWAgYW5kIHRoZW4gYHJldCA9IFBUUl9FUlIocGF0aDIpOyBnb3RvIGNsZWFudXA7YApgY2xlYW51cDpgIHJldHVybnMgcmV0LgoKSSYjMzk7bSBzcGVjaWZpY2FsbHkgZm9jdXNlZCBvbiB0aGUgcG90ZW50aWFsIHVzZSBvZiB1bmluaXRpYWxpemVkIHN0cnVjdCBtZW1iZXJzLiBJIHNlZSBhIGBzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDtgIGxvY2FsIHZhcmlhYmxlIGlzIHVzZWQgYXMgYW4gYXJndW1lbnQgdG8gYGV4dDRfbWFwX2Jsb2Nrc2AsIGFuZCBwYXNzZWQgYnkgcmVmZXJlbmNlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgY29udGVudHMgb2YgYG1hcGAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkICpiZWZvcmUqIGBleHQ0X21hcF9ibG9ja3NgIGlzIGNhbGxlZC4gQWgsIHJpZ2h0LiBJIHJlbWVtYmVyIHRoZSBjb2RlIGRvZXMgaW5pdGlhbGl6ZSBgbWFwLm1fbGJsayA9IGN1cjsgbWFwLm1fbGVuID0gZW5kIC0gY3VyO2AgYmVmb3JlIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLiBBbmQsIGBmbGFncyA9IDBgLiBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBjb2RlLgoKU28sIGl0ICphcHBlYXJzKiB0aGUgcGF0Y2ggaXRzZWxmIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGUgcHJpbWFyeSBjaGFuZ2UgaXMgdGhlIHJvYnVzdCBlcnJvciBoYW5kbGluZyBhbmQgcHJvcGFnYXRpb24gb2YgZXJyb3IgY29kZXMuIEl0JiMzOTtzIHNhZmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBleHQ0X21hcF9ibG9ja3NcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9MzkyMD1leHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlYyhoYW5kbGVfdCAqaGFuZGxlLFxuZnMvZXh0NC9leHQ0LmgtMzkyMS1cdFx0XHRcdFx0ICAgICBleHQ0X2lvX2VuZF90ICppb19lbmQpO1xuZnMvZXh0NC9leHQ0Lmg6MzkyMjpleHRlcm4gaW50IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC9leHQ0LmgtMzkyMy1cdFx0XHQgICBzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzICptYXAsIGludCBmbGFncyk7XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTYwNT1pbnQgZXh0NF9tYXBfY3JlYXRlX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy02OTktICovXG5mcy9leHQ0L2lub2RlLmM6NzAwOmludCBleHQ0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbmZzL2V4dDQvaW5vZGUuYy03MDEtXHRcdCAgICBzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzICptYXAsIGludCBmbGFncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NzMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFcnJvciBIYW5kbGluZyBpbiBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCBhbmQgYGV4dDRfZmNfcmVwbGF5X2lub2RlYCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbWFwLSZndDttX2ZsYWdzID0gMDtgIGlzIGhhbmRsZWQgY29ycmVjdGx5IGluIGBleHQ0X21hcF9ibG9ja3NgLCB3aGljaCBpdCBhcHBlYXJzIHRvIGJlLCByaWdodCBhdCB0aGUgc3RhcnQuIEFuZCBhY3R1YWxseSwgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBzZWVtIHRvIGhhdmUgdG91Y2hlZCB0aGF0IGFyZWEsIHNvIHdlIGNhbiBwcm9iYWJseSBtb3ZlIG9uLgoKTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGByZXRgLiBJbiBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCwgYHJldGAgaXMgaW5pdGlhbGl6ZWQgcHJvcGVybHkg4oCTIGBpbnQgbnVtYmxrcyA9IDAsIGksIHJldCA9IDA7YCDigJMgdGhhdCBzZWVtcyBmaW5lLiBCdXQsIHdoYXQgaGFwcGVucyB3aGVuIHdlIGhpdCB0aGUgYGdvdG8gY2xlYW51cDtgIGNhbGxzPyBXZSYjMzk7dmUgZ290IGEgc2VyaWVzIG9mIHBvdGVudGlhbGx5IGVycm9yLXNldHRpbmcgYmxvY2tzIHRoZXJlLiBMZXQmIzM5O3MgbWFrZSBzdXJlLiBUaGUgYHJldGAgdmFyaWFibGUgaXMgc2V0IGhlcmUgb24gZXJyb3IgZnJvbSBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zOiBgZXh0NF9tYXBfYmxvY2tzYCwgYHNraXBfaG9sZWAsIG9yIGlmIGBwYXRoYCBpcyBhbiBlcnJvciBwb2ludGVyLiBJdCBhbHNvIGFwcGVhcnMgaXQgY291bGQgYmUgMCBpZiBgZXhgIGlzIG51bGwgb3IgaWYgYHBhdGgyYCBpcyBhbiBlcnJvciBwb2ludGVyLiBUaGVuLCBhdCB0aGUgY2xlYW51cCwgd2UgZnJlZSB0aGUgcGF0aHMsIGFuZCByZXR1cm4gYHJldGAuIE9rYXksIHNvIGl0IHNlZW1zIGxpa2UgdGhlIGVycm9yIGNvZGVzIGFyZSBiZWluZyBwcm9wYWdhdGVkIGNvcnJlY3RseSB0aHJvdWdoIGByZXRgLgoKTm93LCBtb3Zpbmcgb3ZlciB0byBgZXh0NF9mY19yZXBsYXlfaW5vZGVgLCBgcmV0YCBpcyBhbHNvIGFuIGludGVnZXIsIGRlY2xhcmVkIGludGVybmFsbHksIHNvIHRoYXQmIzM5O3MgZ29vZC4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBsaW5lcyAxOTI1LTE5NTAgaW4gYGZzL2V4dDQvZmFzdF9jb21taXQuY2AgdG8gbWFrZSBzdXJlIHRoZXJlJiMzOTtzIG5vIHN1YnRsZSBpc3N1ZSB0aGVyZS4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIHNwZWNpZmljIGVycm9yIGhhbmRsaW5nIGluIHRoaXMgc2VjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2Zhc3RfY29tbWl0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5MjU6XHRzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4xOTI2Olx0XHRcdFx0XHRzdHJ1Y3QgZXh0NF9mY190bF9tZW0gKnRsLCB1OCAqdmFsKVxuMTkyNzpcdHtcbjE5Mjg6XHRcdHN0cnVjdCBleHQ0X2ZjX2lub2RlIGZjX2lub2RlO1xuMTkyOTpcdFx0c3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZTtcbjE5MzA6XHRcdHN0cnVjdCBleHQ0X2lub2RlICpyYXdfZmNfaW5vZGU7XG4xOTMxOlx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDtcbjE5MzI6XHRcdHN0cnVjdCBleHQ0X2lsb2MgaWxvYztcbjE5MzM6XHRcdGludCBpbm9kZV9sZW4sIGlubywgcmV0LCB0YWcgPSB0bC1cdTAwM2VmY190YWc7XG4xOTM0Olx0XHRzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyICplaDtcbjE5MzU6XHRcdHNpemVfdCBvZmZfZ2VuID0gb2Zmc2V0b2Yoc3RydWN0IGV4dDRfaW5vZGUsIGlfZ2VuZXJhdGlvbik7XG4xOTM2Olx0XG4xOTM3Olx0XHRtZW1jcHkoXHUwMDI2ZmNfaW5vZGUsIHZhbCwgc2l6ZW9mKGZjX2lub2RlKSk7XG4xOTM4Olx0XG4xOTM5Olx0XHRpbm8gPSBsZTMyX3RvX2NwdShmY19pbm9kZS5mY19pbm8pO1xuMTk0MDpcdFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIHRhZywgaW5vLCAwLCAwKTtcbjE5NDE6XHRcbjE5NDI6XHRcdGlub2RlID0gZXh0NF9pZ2V0KHNiLCBpbm8sIEVYVDRfSUdFVF9OT1JNQUwpO1xuMTk0MzpcdFx0aWYgKCFJU19FUlIoaW5vZGUpKSB7XG4xOTQ0Olx0XHRcdGV4dDRfZXh0X2NsZWFyX2JiKGlub2RlKTtcbjE5NDU6XHRcdFx0aXB1dChpbm9kZSk7XG4xOTQ2Olx0XHR9XG4xOTQ3Olx0XHRpbm9kZSA9IE5VTEw7XG4xOTQ4Olx0XG4xOTQ5Olx0XHRyZXQgPSBleHQ0X2ZjX3JlY29yZF9tb2RpZmllZF9pbm9kZShzYiwgaW5vKTtcbjE5NTA6XHRcdGlmIChyZXQpXG4xOTUxOlx0XHRcdGdvdG8gb3V0O1xuMTk1MjpcdFxuMTk1MzpcdFx0cmF3X2ZjX2lub2RlID0gKHN0cnVjdCBleHQ0X2lub2RlICopXG4xOTU0Olx0XHRcdCh2YWwgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGV4dDRfZmNfaW5vZGUsIGZjX3Jhd19pbm9kZSkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg0MAoJCQkJCQkJb3V0cHV0OiAyNTcKCQkJCQkJCXRob3VnaHRzOiA5NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogZXh0NCBGYXN0IENvbW1pdCBSZXBsYXkgRXJyb3IgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgZW5zdXJpbmcgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IEtNU0FOLXJlbGV2YW50IGlzc3VlcyBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5IGluIGV4dDQuIFRoZSBwYXRjaCYjMzk7cyBjb3JlIGZ1bmN0aW9uIGlzIHRvIGltcHJvdmUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAgYW5kIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgLiBCYXNpY2FsbHksIGl0JiMzOTtzIG1ha2luZyBzdXJlIGVycm9ycyBkdXJpbmcgYmxvY2sgbWFwcGluZyBhbmQgZXh0ZW50IGxvb2t1cCBhcmUgY29ycmVjdGx5IHByb3BhZ2F0ZWQsIGhhbHRpbmcgdGhlIHJlcGxheSBwcm9jZXNzIGlmIGNvcnJ1cHRpb24gb3Igb3RoZXIgaXNzdWVzIGFyZSBkZXRlY3RlZC4gQmVmb3JlLCB0aGUgY29kZSB3YXMsIGluIHNvbWUgY2FzZXMsIGlnbm9yaW5nIGVycm9ycyBmcm9tIGBleHQ0X2ZpbmRfZXh0ZW50YCwgcHJvY2VlZGluZyB3aXRoIHRoZSByZXBsYXksIGFuZCBwb3RlbnRpYWxseSB3cml0aW5nIGNvcnJ1cHRlZCBpbm9kZSBkYXRhIG9yIGNhdXNpbmcgZG93bnN0cmVhbSBjcmFzaGVzLgoKRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB3ZSBhcmVuJiMzOTt0IGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gSSBjYW4gc2VlIHRoYXQ6CgoqICAgTm8gbmV3IG1lbW9yeSBidWZmZXJzIGFyZSBiZWluZyBhbGxvY2F0ZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4KKiAgIFRoZXJlJiMzOTtzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBiZWluZyByZWFkLgoqICAgV2UmIzM5O3JlIG5vdCBpbnRyb2R1Y2luZyBhbnkgcGFkZGluZyBsZWFrcyB0byB1c2Vyc3BhY2UuCiogICBFcnJvciBjb2RlcyBhcmUgYmVpbmcgZXhwbGljaXRseSBjYXB0dXJlZCAoZS5nLiwgYFBUUl9FUlJgKSBhbmQgcHJvcGFnYXRlZCB1cCB0aGUgY2FsbCBzdGFjay4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHJlcGxheSBpcyBhYm9ydGVkIHVwb24gZGV0ZWN0aW5nIGEgZGlzayBjb3JydXB0aW9uIG9yIG90aGVyIGVycm9yLgoKTXkgbmV4dCBsaW5lIG9mIHRob3VnaHQgaXMgd2hldGhlciBvciBub3QgdGhlcmUgd2VyZSBwcmV2aW91c2x5IGlnbm9yZWQgZXJyb3JzLCBsZWFkaW5nIHRvIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBvciBzaW1pbGFyIGlzc3Vlcy4gVGhlIHByZXZpb3VzIGNvZGUgY29udGFpbmVkIGEgYGJyZWFrYCBmcm9tIGFuIGVycm9yIGNhdXNlZCBieSBgZXh0NF9maW5kX2V4dGVudGAuIFRoaXMgYGJyZWFrYCB3YXMgbGVhZGluZyB0byBleGVjdXRpb24gdGhhdCBjYWxsZWQgYGV4dDRfZnJlZV9leHRfcGF0aGAsIGJ1dCBgcGF0aGAgd2FzIGFjdHVhbGx5IGFuIGBFUlJfUFRSYCwgYW5kIHRoZSBjb2RlIGRpZCBub3QgaGFuZGxlIHRoYXQgZXJyb3IgZ3JhY2VmdWxseSB3aGljaCBjb3VsZCBsZWFkIHRvIGZpbGUgc3lzdGVtIGNvcnJ1cHRpb24uIFRoZSBwYXRjaCBmaXhlcyB0aGlzLgoKVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQmIzM5O3MgZ28gb3ZlciB0aGUgZm91ciBwb2ludHMgd2hlcmUgS01TQU4gbWlnaHQgYmUgdHJpZ2dlcmVkOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlKio6IE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSB2aWEgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIGV0Yy4gVGhpcyBjaGVjayBpcyBwYXNzZWQuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIHdpdGggdW5pbml0aWFsaXplZCB2YXJpYWJsZXMqKjogVGhlIHBhdGNoIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgdGhlIHJldHVybiB2YXJpYWJsZSAoYHJldGApIGFuZCB1c2VzIGV4cGxpY2l0IHJldHVybiBjb2RlcyBhbmQgY2hlY2tzLiBUaGlzIGlzIHBhc3NlZC4KMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uKio6IE5vIG5ldyBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoaWNoIG1heSBjb250YWluIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFuZCB0aGF0IG1pZ2h0IGJlIHJlYWQgbGF0ZXIgb24gcmVhY2hhYmxlIGNvZGUgcGF0aHMgaXMgaW50cm9kdWNlZC4KNC4gICoqQm91bmRzIGNoZWNrcyoqOiBXZSBhcmUgc2FmZSBhcyBubyBuZXcgYm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIHRoYXQgd291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycyBhcmUgaW50cm9kdWNlZC4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRpdmVseSBmYWxzZSBoZXJlLgoKVG8gc3VtbWFyaXplIGZvciB0aGUgcmVjb3JkLCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhbiBlcnJvciBoYW5kbGluZyBmbGF3IGR1cmluZyBleHQ0IGZhc3QtY29tbWl0IHJlcGxheS4gSXQgZW5zdXJlcyB0aGF0IGVycm9ycyBmcm9tIGZ1bmN0aW9ucyBsaWtlIGBleHQ0X21hcF9ibG9ja3NgLCBgc2tpcF9ob2xlYCwgYW5kIGBleHQ0X2ZpbmRfZXh0ZW50YCBhcmUgcHJvcGVybHkgaGFuZGxlZC4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgdGhpcyBtb2RpZmljYXRpb24gZG9lcyAqbm90KiBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm9ybWF0aW9uIGxlYWtzLCBvciBhbnkgb3RoZXIgY29uZGl0aW9uIHRoYXQgY291bGQgdHJpZ2dlciBhIEtNU0FOIGFsZXJ0LiBTdGFuZGFyZCBtZW1vcnkgc2FmZXR5IHRvb2xzIGxpa2UgS0FTQU4gYW5kIGVycm9yIGhhbmRsaW5nIChwYW5pY3MsIGNvcnJ1cHRpb24gcmVwb3J0cykgYXJlIGFwcHJvcHJpYXRlIGhlcmUsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgS01TQU4gaXMgbm90IHJlcXVpcmVkIHRvIGRldGVjdCBidWdzIGluIHRoaXMgcGF0Y2guIEkgd2lsbCBwcm9jZWVkIHdpdGggYSBjbGVhciBjb25zY2llbmNlLiBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gZXh0NCBmYXN0LWNvbW1pdCByZXBsYXkgY29kZSAoZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKCkgYW5kIGV4dDRfZmNfcmVwbGF5X2lub2RlKCkpLiBJdCBlbnN1cmVzIHRoYXQgd2hlbiBleHQ0X21hcF9ibG9ja3MoKSwgc2tpcF9ob2xlKCksIG9yIGV4dDRfZmluZF9leHRlbnQoKSBmYWlsLCB0aGUgZXJyb3IgY29kZSBpcyBjYXB0dXJlZCwgdGhlIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGNsZWFudXAgd2l0aG91dCB1cGRhdGluZyBvciBkaXJ0eWluZyB0aGUgaW5vZGUsIGFuZCB0aGUgZXJyb3IgaXMgcHJvcGFnYXRlZCB1cCB0aGUgY2FsbCBzdGFjayB0byBhYm9ydCB0aGUgcmVwbGF5LlxuXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIChubyBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3RsLCBldGMuKSwgZWxpbWluYXRpbmcgYW55IHJpc2sgb2YgaW5mby1sZWFrcy5cbi0gTm8gbmV3IG1lbW9yeSBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBvciBsZWZ0IHVuaW5pdGlhbGl6ZWQ7IHRoZSBtb2RpZmllZCBicmFuY2hpbmcgcmVsaWVzIHN0cmljdGx5IG9uIHByb3Blcmx5IGluaXRpYWxpemVkL2Fzc2lnbmVkIHJldHVybiB2YWx1ZXMgYW5kIGVycm9yIHBvaW50ZXJzLlxuLSBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cbi0gQW55IGJ1Z3MgY2F1c2VkIGJ5IGNvcnJ1cHRlZCBqb3VybmFsIHJlcGxheSAoc3VjaCBhcyBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMpIGZhbGwgdW5kZXIgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMsIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGV4dDQgZmFzdC1jb21taXQgcmVwbGF5IGNvZGUgKGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcygpIGFuZCBleHQ0X2ZjX3JlcGxheV9pbm9kZSgpKS4gSXQgZW5zdXJlcyB0aGF0IHdoZW4gZXh0NF9tYXBfYmxvY2tzKCksIHNraXBfaG9sZSgpLCBvciBleHQ0X2ZpbmRfZXh0ZW50KCkgZmFpbCwgdGhlIGVycm9yIGNvZGUgaXMgY2FwdHVyZWQsIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSBqdW1wcyB0byBjbGVhbnVwIHdpdGhvdXQgdXBkYXRpbmcgb3IgZGlydHlpbmcgdGhlIGlub2RlLCBhbmQgdGhlIGVycm9yIGlzIHByb3BhZ2F0ZWQgdXAgdGhlIGNhbGwgc3RhY2sgdG8gYWJvcnQgdGhlIHJlcGxheS5cblxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcbi0gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bCwgZXRjLiksIGVsaW1pbmF0aW5nIGFueSByaXNrIG9mIGluZm8tbGVha3MuXG4tIE5vIG5ldyBtZW1vcnkgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgb3IgbGVmdCB1bmluaXRpYWxpemVkOyB0aGUgbW9kaWZpZWQgYnJhbmNoaW5nIHJlbGllcyBzdHJpY3RseSBvbiBwcm9wZXJseSBpbml0aWFsaXplZC9hc3NpZ25lZCByZXR1cm4gdmFsdWVzIGFuZCBlcnJvciBwb2ludGVycy5cbi0gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXG4tIEFueSBidWdzIGNhdXNlZCBieSBjb3JydXB0ZWQgam91cm5hbCByZXBsYXkgKHN1Y2ggYXMgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzKSBmYWxsIHVuZGVyIEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBub3QgS01TQU4uXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE2OjQxLjY2MDg5ODEyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTEwNDU3ODA2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzXCIsXG4gICAgXCJleHQ0X2ZjX3JlcGxheV9pbm9kZVwiLFxuICAgIFwiZXh0NF9mY19yZXBsYXlcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGV4dDQgZmFzdC1jb21taXQgcmVwbGF5IGNvZGUgKGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcygpIGFuZCBleHQ0X2ZjX3JlcGxheV9pbm9kZSgpKS4gSXQgZW5zdXJlcyB0aGF0IHdoZW4gZXh0NF9tYXBfYmxvY2tzKCksIHNraXBfaG9sZSgpLCBvciBleHQ0X2ZpbmRfZXh0ZW50KCkgZmFpbCwgdGhlIGVycm9yIGNvZGUgaXMgY2FwdHVyZWQsIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSBqdW1wcyB0byBjbGVhbnVwIHdpdGhvdXQgdXBkYXRpbmcgb3IgZGlydHlpbmcgdGhlIGlub2RlLCBhbmQgdGhlIGVycm9yIGlzIHByb3BhZ2F0ZWQgdXAgdGhlIGNhbGwgc3RhY2sgdG8gYWJvcnQgdGhlIHJlcGxheS5cXG5cXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bCwgZXRjLiksIGVsaW1pbmF0aW5nIGFueSByaXNrIG9mIGluZm8tbGVha3MuXFxuLSBObyBuZXcgbWVtb3J5IGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIG9yIGxlZnQgdW5pbml0aWFsaXplZDsgdGhlIG1vZGlmaWVkIGJyYW5jaGluZyByZWxpZXMgc3RyaWN0bHkgb24gcHJvcGVybHkgaW5pdGlhbGl6ZWQvYXNzaWduZWQgcmV0dXJuIHZhbHVlcyBhbmQgZXJyb3IgcG9pbnRlcnMuXFxuLSBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cXG4tIEFueSBidWdzIGNhdXNlZCBieSBjb3JydXB0ZWQgam91cm5hbCByZXBsYXkgKHN1Y2ggYXMgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzKSBmYWxsIHVuZGVyIEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBwcm9wYWdhdGlvbiBhbmQgY29udHJvbCBmbG93IGR1cmluZyBleHQ0IGZhc3QgY29tbWl0IGpvdXJuYWwgcmVwbGF5LiBJbiBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoKSwgZXJyb3JzIHJldHVybmVkIGJ5IGV4dDRfbWFwX2Jsb2NrcygpLCBza2lwX2hvbGUoKSwgYW5kIGV4dDRfZmluZF9leHRlbnQoKSBhcmUgbm93IHByb3Blcmx5IGNhcHR1cmVkIGFuZCByZXR1cm5lZCBpbnN0ZWFkIG9mIHNpbGVudGx5IGlnbm9yZWQsIGFuZCBleHQ0X2ZjX3JlcGxheV9pbm9kZSgpIGlzIHVwZGF0ZWQgdG8gaGFuZGxlIGFuZCBwcm9wYWdhdGUgZmFpbHVyZXMuIFRoZXNlIGVycm9yLWhhbmRsaW5nIHBhdGhzIGluIGV4dDQgZmlsZXN5c3RlbSByZXBsYXkgYXJlIHJlYWNoYWJsZSBkdXJpbmcgam91cm5hbCByZWNvdmVyeSBhbmQgbW91bnQgb3BlcmF0aW9ucywgbWFraW5nIHRoZW0gcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZyB3aXRoIGNvcnJ1cHRlZCBkaXNrIGltYWdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTY6NDEuNjYwOTAzNDA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTkyODg4NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0MmUxOTg2MjJkZmNiYTIyNTRiN2M1YjZmZTdmZmU1NGIxZDkxZDdhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDE1IDAyOjE2OjQwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50cy5jIGIvZnMvZXh0NC9leHRlbnRzLmNcXG5pbmRleCA3NjAzOGI2YzM2NTUyLi5mOGM4MDVkODBjMzNjIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jXFxuKysrIGIvZnMvZXh0NC9leHRlbnRzLmNcXG5AQCAtNjI3NSw3ICs2Mjc1LDcgQEAgaW50IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRcXHRtYXAubV9sZW4gPSBlbmQgLSBjdXI7XFxuIFxcdFxcdHJldCA9IGV4dDRfbWFwX2Jsb2NrcyhOVUxMLCBpbm9kZSwgXFx1MDAyNm1hcCwgMCk7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2UgMClcXG4gXFx0XFx0XFx0bnVtYmxrcyArPSByZXQ7XFxuIFxcdFxcdGN1ciA9IGN1ciArIG1hcC5tX2xlbjtcXG5AQCAtNjI5MSwxNSArNjI5MSwxOSBAQCBpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdGN1ciA9IDA7XFxuIFxcdHJldCA9IHNraXBfaG9sZShpbm9kZSwgXFx1MDAyNmN1cik7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoLCAwKTtcXG4tXFx0aWYgKElTX0VSUihwYXRoKSlcXG4tXFx0XFx0Z290byBvdXQ7XFxuK1xcdGlmIChJU19FUlIocGF0aCkpIHtcXG4rXFx0XFx0cmV0ID0gUFRSX0VSUihwYXRoKTtcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuIFxcdG51bWJsa3MgKz0gcGF0aC1cXHUwMDNlcF9kZXB0aDtcXG4gXFx0d2hpbGUgKGN1ciBcXHUwMDNjIGVuZCkge1xcbiBcXHRcXHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoLCAwKTtcXG4tXFx0XFx0aWYgKElTX0VSUihwYXRoKSlcXG4tXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGlmIChJU19FUlIocGF0aCkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gUFRSX0VSUihwYXRoKTtcXG4rXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRcXHR9XFxuIFxcdFxcdGV4ID0gcGF0aFtwYXRoLVxcdTAwM2VwX2RlcHRoXS5wX2V4dDtcXG4gXFx0XFx0aWYgKCFleClcXG4gXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbkBAIC02MzA4LDExICs2MzEyLDEzIEBAIGludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0XFx0XFx0XFx0XFx0ZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oZXgpKTtcXG4gXFx0XFx0cmV0ID0gc2tpcF9ob2xlKGlub2RlLCBcXHUwMDI2Y3VyKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcbiBcXHRcXHRwYXRoMiA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aDIsIDApO1xcbi1cXHRcXHRpZiAoSVNfRVJSKHBhdGgyKSlcXG4tXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGlmIChJU19FUlIocGF0aDIpKSB7XFxuK1xcdFxcdFxcdHJldCA9IFBUUl9FUlIocGF0aDIpO1xcbitcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gbWF4KHBhdGgtXFx1MDAzZXBfZGVwdGgsIHBhdGgyLVxcdTAwM2VwX2RlcHRoKTsgaSsrKSB7XFxuIFxcdFxcdFxcdGNtcDEgPSBjbXAyID0gMDtcXG5AQCAtNjMzMyw3ICs2MzM5LDcgQEAgaW50IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBjbGVhbnVwOlxcbiBcXHRleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aCk7XFxuIFxcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoMik7XFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBpbnQgZXh0NF9leHRfY2xlYXJfYmIoc3RydWN0IGlub2RlICppbm9kZSlcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9mYXN0X2NvbW1pdC5jIGIvZnMvZXh0NC9mYXN0X2NvbW1pdC5jXFxuaW5kZXggMGNhYzg5MGNmMzcwMi4uODExMGIwMWUzNmMxMSAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2Zhc3RfY29tbWl0LmNcXG4rKysgYi9mcy9leHQ0L2Zhc3RfY29tbWl0LmNcXG5AQCAtMjAwMiw4ICsyMDAyLDExIEBAIHN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4gXFx0ICogY3Jhc2hpbmcuIFRoaXMgc2hvdWxkIGJlIGZpeGVkIGJ1dCB1bnRpbCB0aGVuLCB3ZSBjYWxjdWxhdGVcXG4gXFx0ICogdGhlIG51bWJlciBvZiBibG9ja3MgdGhlIGlub2RlLlxcbiBcXHQgKi9cXG4tXFx0aWYgKCFleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSkpXFxuLVxcdFxcdGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrcyhpbm9kZSk7XFxuK1xcdGlmICghZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpKSB7XFxuK1xcdFxcdHJldCA9IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrcyhpbm9kZSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gb3V0X2JyZWxzZTtcXG4rXFx0fVxcbiBcXG4gXFx0aW5vZGUtXFx1MDAzZWlfZ2VuZXJhdGlvbiA9IGxlMzJfdG9fY3B1KGV4dDRfcmF3X2lub2RlKFxcdTAwMjZpbG9jKS1cXHUwMDNlaV9nZW5lcmF0aW9uKTtcXG4gXFx0ZXh0NF9yZXNldF9pbm9kZV9zZWVkKGlub2RlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTY6NDIuMTIwOTQwMzU4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNDA0MDY1NDA2MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc1wiLFxuICAgIFwiZXh0NF9mY19yZXBsYXlfaW5vZGVcIixcbiAgICBcImV4dDRfZmNfcmVwbGF5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgcHJvcGFnYXRpb24gYW5kIGNvbnRyb2wgZmxvdyBkdXJpbmcgZXh0NCBmYXN0IGNvbW1pdCBqb3VybmFsIHJlcGxheS4gSW4gZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKCksIGVycm9ycyByZXR1cm5lZCBieSBleHQ0X21hcF9ibG9ja3MoKSwgc2tpcF9ob2xlKCksIGFuZCBleHQ0X2ZpbmRfZXh0ZW50KCkgYXJlIG5vdyBwcm9wZXJseSBjYXB0dXJlZCBhbmQgcmV0dXJuZWQgaW5zdGVhZCBvZiBzaWxlbnRseSBpZ25vcmVkLCBhbmQgZXh0NF9mY19yZXBsYXlfaW5vZGUoKSBpcyB1cGRhdGVkIHRvIGhhbmRsZSBhbmQgcHJvcGFnYXRlIGZhaWx1cmVzLiBUaGVzZSBlcnJvci1oYW5kbGluZyBwYXRocyBpbiBleHQ0IGZpbGVzeXN0ZW0gcmVwbGF5IGFyZSByZWFjaGFibGUgZHVyaW5nIGpvdXJuYWwgcmVjb3ZlcnkgYW5kIG1vdW50IG9wZXJhdGlvbnMsIG1ha2luZyB0aGVtIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcgd2l0aCBjb3JydXB0ZWQgZGlzayBpbWFnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDJlMTk4NjIyZGZjYmEyMjU0YjdjNWI2ZmU3ZmZlNTRiMWQ5MWQ3YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDAyOjE2OjQwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzLmMgYi9mcy9leHQ0L2V4dGVudHMuY1xuaW5kZXggNzYwMzhiNmMzNjU1Mi4uZjhjODA1ZDgwYzMzYyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jXG4rKysgYi9mcy9leHQ0L2V4dGVudHMuY1xuQEAgLTYyNzUsNyArNjI3NSw3IEBAIGludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0bWFwLm1fbGVuID0gZW5kIC0gY3VyO1xuIFx0XHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFx1MDAyNm1hcCwgMCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0YnJlYWs7XG4rXHRcdFx0Z290byBjbGVhbnVwO1xuIFx0XHRpZiAocmV0IFx1MDAzZSAwKVxuIFx0XHRcdG51bWJsa3MgKz0gcmV0O1xuIFx0XHRjdXIgPSBjdXIgKyBtYXAubV9sZW47XG5AQCAtNjI5MSwxNSArNjI5MSwxOSBAQCBpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRjdXIgPSAwO1xuIFx0cmV0ID0gc2tpcF9ob2xlKGlub2RlLCBcdTAwMjZjdXIpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBvdXQ7XG4rXHRcdGdvdG8gY2xlYW51cDtcbiBcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBjdXIsIHBhdGgsIDApO1xuLVx0aWYgKElTX0VSUihwYXRoKSlcbi1cdFx0Z290byBvdXQ7XG4rXHRpZiAoSVNfRVJSKHBhdGgpKSB7XG4rXHRcdHJldCA9IFBUUl9FUlIocGF0aCk7XG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbiBcdG51bWJsa3MgKz0gcGF0aC1cdTAwM2VwX2RlcHRoO1xuIFx0d2hpbGUgKGN1ciBcdTAwM2MgZW5kKSB7XG4gXHRcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBjdXIsIHBhdGgsIDApO1xuLVx0XHRpZiAoSVNfRVJSKHBhdGgpKVxuLVx0XHRcdGJyZWFrO1xuK1x0XHRpZiAoSVNfRVJSKHBhdGgpKSB7XG4rXHRcdFx0cmV0ID0gUFRSX0VSUihwYXRoKTtcbitcdFx0XHRnb3RvIGNsZWFudXA7XG4rXHRcdH1cbiBcdFx0ZXggPSBwYXRoW3BhdGgtXHUwMDNlcF9kZXB0aF0ucF9leHQ7XG4gXHRcdGlmICghZXgpXG4gXHRcdFx0Z290byBjbGVhbnVwO1xuQEAgLTYzMDgsMTEgKzYzMTIsMTMgQEAgaW50IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRcdFx0XHRleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbihleCkpO1xuIFx0XHRyZXQgPSBza2lwX2hvbGUoaW5vZGUsIFx1MDAyNmN1cik7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0YnJlYWs7XG4rXHRcdFx0Z290byBjbGVhbnVwO1xuIFxuIFx0XHRwYXRoMiA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aDIsIDApO1xuLVx0XHRpZiAoSVNfRVJSKHBhdGgyKSlcbi1cdFx0XHRicmVhaztcbitcdFx0aWYgKElTX0VSUihwYXRoMikpIHtcbitcdFx0XHRyZXQgPSBQVFJfRVJSKHBhdGgyKTtcbitcdFx0XHRnb3RvIGNsZWFudXA7XG4rXHRcdH1cbiBcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2M9IG1heChwYXRoLVx1MDAzZXBfZGVwdGgsIHBhdGgyLVx1MDAzZXBfZGVwdGgpOyBpKyspIHtcbiBcdFx0XHRjbXAxID0gY21wMiA9IDA7XG5AQCAtNjMzMyw3ICs2MzM5LDcgQEAgaW50IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIGNsZWFudXA6XG4gXHRleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aCk7XG4gXHRleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aDIpO1xuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBpbnQgZXh0NF9leHRfY2xlYXJfYmIoc3RydWN0IGlub2RlICppbm9kZSlcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2Zhc3RfY29tbWl0LmMgYi9mcy9leHQ0L2Zhc3RfY29tbWl0LmNcbmluZGV4IDBjYWM4OTBjZjM3MDIuLjgxMTBiMDFlMzZjMTEgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2Zhc3RfY29tbWl0LmNcbisrKyBiL2ZzL2V4dDQvZmFzdF9jb21taXQuY1xuQEAgLTIwMDIsOCArMjAwMiwxMSBAQCBzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHQgKiBjcmFzaGluZy4gVGhpcyBzaG91bGQgYmUgZml4ZWQgYnV0IHVudGlsIHRoZW4sIHdlIGNhbGN1bGF0ZVxuIFx0ICogdGhlIG51bWJlciBvZiBibG9ja3MgdGhlIGlub2RlLlxuIFx0ICovXG4tXHRpZiAoIWV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSlcbi1cdFx0ZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKGlub2RlKTtcbitcdGlmICghZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpKSB7XG4rXHRcdHJldCA9IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrcyhpbm9kZSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBvdXRfYnJlbHNlO1xuK1x0fVxuIFxuIFx0aW5vZGUtXHUwMDNlaV9nZW5lcmF0aW9uID0gbGUzMl90b19jcHUoZXh0NF9yYXdfaW5vZGUoXHUwMDI2aWxvYyktXHUwMDNlaV9nZW5lcmF0aW9uKTtcbiBcdGV4dDRfcmVzZXRfaW5vZGVfc2VlZChpbm9kZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxNjo0Mi4xMjA5NDI1NThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMTY4OTY5MTU4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipBbmFseXppbmcgdGhlIEV4dDQgRmlsZSBTeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGZzL2V4dDQvZXh0ZW50cy5jYCBhbmQgYGZzL2V4dDQvZmFzdF9jb21taXQuY2AuIFRoYXQgbmFycm93cyBkb3duIHRoZSBhcmVhIG9mIGNvbmNlcm4gc2lnbmlmaWNhbnRseS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGBmcy9leHQ0YCBkaXJlY3RvcnkgYW5kIHN0YXJ0IGluc3BlY3RpbmcgdGhlIGRpZmYuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIHRvIHRoZSBleHRlbnQgaGFuZGxpbmcgYW5kIGZhc3QgY29tbWl0IG1lY2hhbmlzbXMuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCB0byBFeHQ0J3MgcGVyZm9ybWFuY2UgYW5kIGRhdGEgaW50ZWdyaXR5LCBzbyBJJ2xsIG5lZWQgYSBnb29kIGdyYXNwIG9mIHRoZSBjb250ZXh0LlxuXG5JJ2xsIGJlIHJlYWNoaW5nIGZvciBteSB0b29scy4gSSdsbCBwcm9iYWJseSB1c2UgYSBgcmVhZC1maWxlYCBjb21tYW5kLCBpZiBhdmFpbGFibGUsIG9yIGV2ZW4gYGdyZXBwZXJgIHRvIHF1aWNrbHkgbG9jYXRlIHdoZXJlIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgIGFuZCBgZXh0NF9mY19yZXBsYXlfaW5vZGVgIGFyZSBkZWZpbmVkIGFuZCB1c2VkLiBVbmRlcnN0YW5kaW5nIHRoZSBwdXJwb3NlIG9mIHRob3NlIHNwZWNpZmljIGZ1bmN0aW9ucyB3aWxsIGJlIGNydWNpYWwuIFJlcGxheSBvcGVyYXRpb25zIGFyZSBhbG1vc3QgYWx3YXlzIGNyaXRpY2FsIHRvIGVuc3VyaW5nIGNvbnNpc3RlbmN5IGFmdGVyIGEgY3Jhc2ggb3IgcG93ZXIgZmFpbHVyZSwgc28gSSdtIGV4cGVjdGluZyBzb21ldGhpbmcgaW1wb3J0YW50IHRvIGJlIGhhcHBlbmluZyB0aGVyZSwgcG90ZW50aWFsbHkgcmVsYXRlZCB0byBibG9jayBhbGxvY2F0aW9uIG9yIGlub2RlIHN0YXRlIGR1cmluZyByZWNvdmVyeS4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE3OjEzLjgxMDYzNjQ0M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NDkzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L2V4dGVudHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MjY1LFxuICBcIkxpbmVDb3VudFwiOiA4NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2MjY1OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHBhdGgpO1xcbjYyNjY6XFx0XFx0ZXggPSBwYXRoW3BhdGgtXFx1MDAzZXBfZGVwdGhdLnBfZXh0O1xcbjYyNjc6XFx0XFx0aWYgKCFleClcXG42MjY4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjYyNjk6XFx0XFx0ZW5kID0gbGUzMl90b19jcHUoZXgtXFx1MDAzZWVlX2Jsb2NrKSArIGV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4KTtcXG42MjcwOlxcdFxcbjYyNzE6XFx0XFx0LyogQ291bnQgdGhlIG51bWJlciBvZiBkYXRhIGJsb2NrcyAqL1xcbjYyNzI6XFx0XFx0Y3VyID0gMDtcXG42MjczOlxcdFxcdHdoaWxlIChjdXIgXFx1MDAzYyBlbmQpIHtcXG42Mjc0OlxcdFxcdFxcdG1hcC5tX2xibGsgPSBjdXI7XFxuNjI3NTpcXHRcXHRcXHRtYXAubV9sZW4gPSBlbmQgLSBjdXI7XFxuNjI3NjpcXHRcXHRcXHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFxcdTAwMjZtYXAsIDApO1xcbjYyNzc6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuNjI3ODpcXHRcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuNjI3OTpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2UgMClcXG42MjgwOlxcdFxcdFxcdFxcdG51bWJsa3MgKz0gcmV0O1xcbjYyODE6XFx0XFx0XFx0Y3VyID0gY3VyICsgbWFwLm1fbGVuO1xcbjYyODI6XFx0XFx0fVxcbjYyODM6XFx0XFxuNjI4NDpcXHRcXHQvKlxcbjYyODU6XFx0XFx0ICogQ291bnQgdGhlIG51bWJlciBvZiBleHRlbnQgdHJlZSBibG9ja3MuIFdlIGRvIGl0IGJ5IGxvb2tpbmcgdXBcXG42Mjg2OlxcdFxcdCAqIHR3byBzdWNjZXNzaXZlIGV4dGVudHMgYW5kIGRldGVybWluaW5nIHRoZSBkaWZmZXJlbmNlIGJldHdlZW5cXG42Mjg3OlxcdFxcdCAqIHRoZWlyIHBhdGhzLiBXaGVuIHBhdGggaXMgZGlmZmVyZW50IGZvciAyIHN1Y2Nlc3NpdmUgZXh0ZW50c1xcbjYyODg6XFx0XFx0ICogd2UgY29tcGFyZSB0aGUgYmxvY2tzIGluIHRoZSBwYXRoIGF0IGVhY2ggbGV2ZWwgYW5kIGluY3JlbWVudFxcbjYyODk6XFx0XFx0ICogaWJsb2NrcyBieSB0b3RhbCBudW1iZXIgb2YgZGlmZmVyZW5jZXMgZm91bmQuXFxuNjI5MDpcXHRcXHQgKi9cXG42MjkxOlxcdFxcdGN1ciA9IDA7XFxuNjI5MjpcXHRcXHRyZXQgPSBza2lwX2hvbGUoaW5vZGUsIFxcdTAwMjZjdXIpO1xcbjYyOTM6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuNjI5NDpcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuNjI5NTpcXHRcXHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoLCAwKTtcXG42Mjk2OlxcdFxcdGlmIChJU19FUlIocGF0aCkpIHtcXG42Mjk3OlxcdFxcdFxcdHJldCA9IFBUUl9FUlIocGF0aCk7XFxuNjI5ODpcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuNjI5OTpcXHRcXHR9XFxuNjMwMDpcXHRcXHRudW1ibGtzICs9IHBhdGgtXFx1MDAzZXBfZGVwdGg7XFxuNjMwMTpcXHRcXHR3aGlsZSAoY3VyIFxcdTAwM2MgZW5kKSB7XFxuNjMwMjpcXHRcXHRcXHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoLCAwKTtcXG42MzAzOlxcdFxcdFxcdGlmIChJU19FUlIocGF0aCkpIHtcXG42MzA0OlxcdFxcdFxcdFxcdHJldCA9IFBUUl9FUlIocGF0aCk7XFxuNjMwNTpcXHRcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuNjMwNjpcXHRcXHRcXHR9XFxuNjMwNzpcXHRcXHRcXHRleCA9IHBhdGhbcGF0aC1cXHUwMDNlcF9kZXB0aF0ucF9leHQ7XFxuNjMwODpcXHRcXHRcXHRpZiAoIWV4KVxcbjYzMDk6XFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbjYzMTA6XFx0XFxuNjMxMTpcXHRcXHRcXHRjdXIgPSBtYXgoY3VyICsgMSwgbGUzMl90b19jcHUoZXgtXFx1MDAzZWVlX2Jsb2NrKSArXFxuNjMxMjpcXHRcXHRcXHRcXHRcXHRcXHRleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbihleCkpO1xcbjYzMTM6XFx0XFx0XFx0cmV0ID0gc2tpcF9ob2xlKGlub2RlLCBcXHUwMDI2Y3VyKTtcXG42MzE0OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjYzMTU6XFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbjYzMTY6XFx0XFxuNjMxNzpcXHRcXHRcXHRwYXRoMiA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aDIsIDApO1xcbjYzMTg6XFx0XFx0XFx0aWYgKElTX0VSUihwYXRoMikpIHtcXG42MzE5OlxcdFxcdFxcdFxcdHJldCA9IFBUUl9FUlIocGF0aDIpO1xcbjYzMjA6XFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbjYzMjE6XFx0XFx0XFx0fVxcbjYzMjI6XFx0XFxuNjMyMzpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2M9IG1heChwYXRoLVxcdTAwM2VwX2RlcHRoLCBwYXRoMi1cXHUwMDNlcF9kZXB0aCk7IGkrKykge1xcbjYzMjQ6XFx0XFx0XFx0XFx0Y21wMSA9IGNtcDIgPSAwO1xcbjYzMjU6XFx0XFx0XFx0XFx0aWYgKGkgXFx1MDAzYz0gcGF0aC1cXHUwMDNlcF9kZXB0aClcXG42MzI2OlxcdFxcdFxcdFxcdFxcdGNtcDEgPSBwYXRoW2ldLnBfYmggP1xcbjYzMjc6XFx0XFx0XFx0XFx0XFx0XFx0cGF0aFtpXS5wX2JoLVxcdTAwM2ViX2Jsb2NrbnIgOiAwO1xcbjYzMjg6XFx0XFx0XFx0XFx0aWYgKGkgXFx1MDAzYz0gcGF0aDItXFx1MDAzZXBfZGVwdGgpXFxuNjMyOTpcXHRcXHRcXHRcXHRcXHRjbXAyID0gcGF0aDJbaV0ucF9iaCA/XFxuNjMzMDpcXHRcXHRcXHRcXHRcXHRcXHRwYXRoMltpXS5wX2JoLVxcdTAwM2ViX2Jsb2NrbnIgOiAwO1xcbjYzMzE6XFx0XFx0XFx0XFx0aWYgKGNtcDEgIT0gY21wMiBcXHUwMDI2XFx1MDAyNiBjbXAyICE9IDApXFxuNjMzMjpcXHRcXHRcXHRcXHRcXHRudW1ibGtzKys7XFxuNjMzMzpcXHRcXHRcXHR9XFxuNjMzNDpcXHRcXHR9XFxuNjMzNTpcXHRcXG42MzM2OlxcdG91dDpcXG42MzM3OlxcdFxcdGlub2RlLVxcdTAwM2VpX2Jsb2NrcyA9IG51bWJsa3MgXFx1MDAzY1xcdTAwM2MgKGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzIC0gOSk7XFxuNjMzODpcXHRcXHRleHQ0X21hcmtfaW5vZGVfZGlydHkoTlVMTCwgaW5vZGUpO1xcbjYzMzk6XFx0Y2xlYW51cDpcXG42MzQwOlxcdFxcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcXG42MzQxOlxcdFxcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoMik7XFxuNjM0MjpcXHRcXHRyZXR1cm4gcmV0O1xcbjYzNDM6XFx0fVxcbjYzNDQ6XFx0XFxuNjM0NTpcXHRpbnQgZXh0NF9leHRfY2xlYXJfYmIoc3RydWN0IGlub2RlICppbm9kZSlcXG42MzQ2OlxcdHtcXG42MzQ3OlxcdFxcdHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoID0gTlVMTDtcXG42MzQ4OlxcdFxcdHN0cnVjdCBleHQ0X2V4dGVudCAqZXg7XFxuNjM0OTpcXHRcXHRleHQ0X2xibGtfdCBjdXIgPSAwLCBlbmQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE3OjEzLjgxMTMzNDU0NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4NTQ5ODk3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZywgXCJUaW1lIHRvIGZvY3VzIG9uIHRoZSBzdGFydGluZyBwb2ludCBvZiBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCB3aXRoaW4gdGhlIGBmcy9leHQ0L2V4dGVudHMuY2AgZmlsZS5cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uJ3MgaW5pdGlhbCBzZXR1cCBhbmQgaG93IGl0IGJlZ2lucyB0aGUgcmVwbGF5IHByb2Nlc3MgZm9yIGV4dGVudC1iYXNlZCBpbm9kZXMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBvdmVyYWxsIGRlc2lnbiwgd2hlcmUgaXQgYmVnaW5zIHRoZSBwcm9jZXNzLCBhbmQgd2hhdCBpdCBkb2VzIGZpcnN0LiBLbm93aW5nIGl0cyBpbml0aWFsIG9wZXJhdGlvbnMgaXMgY3J1Y2lhbCBmb3IgZGVjaXBoZXJpbmcgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIGV4dGVudCByZXBsYXkgbWVjaGFuaXNtLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgdmFyaWFibGVzIGl0J3MgdXNpbmcgYW5kIGhvdyBpdCdzIHNldHRpbmcgdGhpbmdzIHVwIGJlZm9yZSBkaXZpbmcgaW50byB0aGUgY29yZSBsb2dpYy4gVGltZSB0byBnZXQgc3RhcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ3MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTc6MTUuNjY2MzI3MDM3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyMjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvZXh0ZW50cy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYyNDAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYyNDA6XFx0XFx0bWFwLm1fbGVuID0gKChpbm9kZS1cXHUwMDNlaV9zaXplKSBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemVfYml0cykgLSAqY3VyO1xcbjYyNDE6XFx0XFxuNjI0MjpcXHRcXHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFxcdTAwMjZtYXAsIDApO1xcbjYyNDM6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuNjI0NDpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjYyNDU6XFx0XFx0aWYgKHJldCAhPSAwKVxcbjYyNDY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNjI0NzpcXHRcXHQqY3VyID0gKmN1ciArIG1hcC5tX2xlbjtcXG42MjQ4OlxcdFxcdHJldHVybiAwO1xcbjYyNDk6XFx0fVxcbjYyNTA6XFx0XFxuNjI1MTpcXHQvKiBDb3VudCBudW1iZXIgb2YgYmxvY2tzIHVzZWQgYnkgdGhpcyBpbm9kZSBhbmQgdXBkYXRlIGlfYmxvY2tzICovXFxuNjI1MjpcXHRpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuNjI1MzpcXHR7XFxuNjI1NDpcXHRcXHRzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCA9IE5VTEwsICpwYXRoMiA9IE5VTEw7XFxuNjI1NTpcXHRcXHRzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4O1xcbjYyNTY6XFx0XFx0ZXh0NF9sYmxrX3QgY3VyID0gMCwgZW5kO1xcbjYyNTc6XFx0XFx0aW50IG51bWJsa3MgPSAwLCBpLCByZXQgPSAwO1xcbjYyNTg6XFx0XFx0ZXh0NF9mc2Jsa190IGNtcDEsIGNtcDI7XFxuNjI1OTpcXHRcXHRzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDtcXG42MjYwOlxcdFxcbjYyNjE6XFx0XFx0LyogRGV0ZXJtaW4gdGhlIHNpemUgb2YgdGhlIGZpbGUgZmlyc3QgKi9cXG42MjYyOlxcdFxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBFWFRfTUFYX0JMT0NLUyAtIDEsIE5VTEwsXFxuNjI2MzpcXHRcXHRcXHRcXHRcXHRcXHRFWFQ0X0VYX05PQ0FDSEUpO1xcbjYyNjQ6XFx0XFx0aWYgKElTX0VSUihwYXRoKSlcXG42MjY1OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHBhdGgpO1xcbjYyNjY6XFx0XFx0ZXggPSBwYXRoW3BhdGgtXFx1MDAzZXBfZGVwdGhdLnBfZXh0O1xcbjYyNjc6XFx0XFx0aWYgKCFleClcXG42MjY4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjYyNjk6XFx0XFx0ZW5kID0gbGUzMl90b19jcHUoZXgtXFx1MDAzZWVlX2Jsb2NrKSArIGV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4KTtcXG42MjcwOlxcdFxcbjYyNzE6XFx0XFx0LyogQ291bnQgdGhlIG51bWJlciBvZiBkYXRhIGJsb2NrcyAqL1xcbjYyNzI6XFx0XFx0Y3VyID0gMDtcXG42MjczOlxcdFxcdHdoaWxlIChjdXIgXFx1MDAzYyBlbmQpIHtcXG42Mjc0OlxcdFxcdFxcdG1hcC5tX2xibGsgPSBjdXI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE3OjE1LjY2NjU3MTc2OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4NjI3NTg5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZm9jdXNpbmcgb24gYGZzL2V4dDQvZmFzdF9jb21taXQuY2AgYXJvdW5kIGxpbmUgMjAwMi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjMyMSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTc6MTcuNTI5MzMzMzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9mYXN0X2NvbW1pdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5ODAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5ODA6XFx0XFx0LyogSW1tZWRpYXRlbHkgdXBkYXRlIHRoZSBpbm9kZSBvbiBkaXNrLiAqL1xcbjE5ODE6XFx0XFx0cmV0ID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoTlVMTCwgTlVMTCwgaWxvYy5iaCk7XFxuMTk4MjpcXHRcXHRpZiAocmV0KVxcbjE5ODM6XFx0XFx0XFx0Z290byBvdXRfYnJlbHNlO1xcbjE5ODQ6XFx0XFx0cmV0ID0gc3luY19kaXJ0eV9idWZmZXIoaWxvYy5iaCk7XFxuMTk4NTpcXHRcXHRpZiAocmV0KVxcbjE5ODY6XFx0XFx0XFx0Z290byBvdXRfYnJlbHNlO1xcbjE5ODc6XFx0XFx0cmV0ID0gZXh0NF9tYXJrX2lub2RlX3VzZWQoc2IsIGlubyk7XFxuMTk4ODpcXHRcXHRpZiAocmV0KVxcbjE5ODk6XFx0XFx0XFx0Z290byBvdXRfYnJlbHNlO1xcbjE5OTA6XFx0XFxuMTk5MTpcXHRcXHQvKiBHaXZlbiB0aGF0IHdlIGp1c3Qgd3JvdGUgdGhlIGlub2RlIG9uIGRpc2ssIHRoaXMgU0hPVUxEIHN1Y2NlZWQuICovXFxuMTk5MjpcXHRcXHRpbm9kZSA9IGV4dDRfaWdldChzYiwgaW5vLCBFWFQ0X0lHRVRfTk9STUFMKTtcXG4xOTkzOlxcdFxcdGlmIChJU19FUlIoaW5vZGUpKSB7XFxuMTk5NDpcXHRcXHRcXHRleHQ0X2RlYnVnKFxcXCJJbm9kZSBub3QgZm91bmQuXFxcIik7XFxuMTk5NTpcXHRcXHRcXHRpbm9kZSA9IE5VTEw7XFxuMTk5NjpcXHRcXHRcXHRyZXQgPSAtRUZTQ09SUlVQVEVEO1xcbjE5OTc6XFx0XFx0XFx0Z290byBvdXRfYnJlbHNlO1xcbjE5OTg6XFx0XFx0fVxcbjE5OTk6XFx0XFxuMjAwMDpcXHRcXHQvKlxcbjIwMDE6XFx0XFx0ICogT3VyIGFsbG9jYXRvciBjb3VsZCBoYXZlIG1hZGUgZGlmZmVyZW50IGRlY2lzaW9ucyB0aGFuIGJlZm9yZVxcbjIwMDI6XFx0XFx0ICogY3Jhc2hpbmcuIFRoaXMgc2hvdWxkIGJlIGZpeGVkIGJ1dCB1bnRpbCB0aGVuLCB3ZSBjYWxjdWxhdGVcXG4yMDAzOlxcdFxcdCAqIHRoZSBudW1iZXIgb2YgYmxvY2tzIHRoZSBpbm9kZS5cXG4yMDA0OlxcdFxcdCAqL1xcbjIwMDU6XFx0XFx0aWYgKCFleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSkpIHtcXG4yMDA2OlxcdFxcdFxcdHJldCA9IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrcyhpbm9kZSk7XFxuMjAwNzpcXHRcXHRcXHRpZiAocmV0KVxcbjIwMDg6XFx0XFx0XFx0XFx0Z290byBvdXRfYnJlbHNlO1xcbjIwMDk6XFx0XFx0fVxcbjIwMTA6XFx0XFxuMjAxMTpcXHRcXHRpbm9kZS1cXHUwMDNlaV9nZW5lcmF0aW9uID0gbGUzMl90b19jcHUoZXh0NF9yYXdfaW5vZGUoXFx1MDAyNmlsb2MpLVxcdTAwM2VpX2dlbmVyYXRpb24pO1xcbjIwMTI6XFx0XFx0ZXh0NF9yZXNldF9pbm9kZV9zZWVkKGlub2RlKTtcXG4yMDEzOlxcdFxcbjIwMTQ6XFx0XFx0ZXh0NF9pbm9kZV9jc3VtX3NldChpbm9kZSwgZXh0NF9yYXdfaW5vZGUoXFx1MDAyNmlsb2MpLCBFWFQ0X0koaW5vZGUpKTtcXG4yMDE1OlxcdFxcdHJldCA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKE5VTEwsIE5VTEwsIGlsb2MuYmgpO1xcbjIwMTY6XFx0XFx0c3luY19kaXJ0eV9idWZmZXIoaWxvYy5iaCk7XFxuMjAxNzpcXHRvdXRfYnJlbHNlOlxcbjIwMTg6XFx0XFx0YnJlbHNlKGlsb2MuYmgpO1xcbjIwMTk6XFx0b3V0OlxcbjIwMjA6XFx0XFx0aXB1dChpbm9kZSk7XFxuMjAyMTpcXHRcXHRpZiAoIXJldClcXG4yMDIyOlxcdFxcdFxcdGJsa2Rldl9pc3N1ZV9mbHVzaChzYi1cXHUwMDNlc19iZGV2KTtcXG4yMDIzOlxcdFxcbjIwMjQ6XFx0XFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTc6MTcuNTI5NDc1MjdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MTAzMDU0NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEZpeDogRGVlcCBEaXZlIGludG8gdGhlIENvbW1pdCBIaXN0b3J5KipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgcGF0Y2gsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgaXQuIE15IGZpcnN0IG1vdmUgaXMgYWx3YXlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2U6IHRoZSBjb21taXQgaGlzdG9yeSwgdGhlIGBnaXQgbG9nYC4gV2hhdCBzcGVjaWZpYyBpc3N1ZSB3ZXJlIHdlIGFkZHJlc3Npbmcgd2l0aCB0aGlzIGNoYW5nZT8gSSdtIG5vdCBnb2luZyB0byBiZSBjb250ZW50IHdpdGgganVzdCBhIHZhZ3VlIGRlc2NyaXB0aW9uLiBJIG5lZWQgdG8gc2VlIHRoZSBjb250ZXh0IOKAkyB0aGUgYnVnIHJlcG9ydCAoSmlyYSwgR2l0SHViIGlzc3VlLCB3aGF0ZXZlciBvdXIgc3lzdGVtIGlzKSwgdGhlIGRpc2N1c3Npb24sIG1heWJlIGV2ZW4gdGhlIHByZWxpbWluYXJ5IGF0dGVtcHRzIHRvIGZpeCBpdC4gS25vd2luZyB0aGUgcHJvYmxlbSBsYW5kc2NhcGUgaXMgYWJzb2x1dGVseSBjcml0aWNhbCBiZWZvcmUgSSBjYW4gYmVnaW4gdG8gYXNzZXNzIHRoZSBxdWFsaXR5IG9mIHRoZSBzb2x1dGlvbi4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgKnJlYXNvbmluZyogYmVoaW5kIHRoZSBmaXgsIGFuZCBkZXRlcm1pbmUgaWYgdGhlIHJvb3QgY2F1c2Ugd2FzIHByb3Blcmx5IGFkZHJlc3NlZCBvciBpZiB0aGlzIGlzIG1lcmVseSBhIGJhbmQtYWlkLiBEaWdnaW5nIGludG8gdGhlIGBnaXQgbG9nYCBpcyB0aGUgZmlyc3Qgc3RlcCBpbiBkZXRlcm1pbmluZyB0aGUgcHJvcGVyIGFzc2Vzc21lbnQgb2YgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzEzNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTc6MjUuNjMyNTMyOTYzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzExNjIzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9Mzk1NT1leHRlcm4gdm9pZCBleHQ0X2V4dF9yZXBsYXlfc2hyaW5rX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGVuZCk7XFxuZnMvZXh0NC9leHQ0Lmg6Mzk1NjpleHRlcm4gaW50IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG5mcy9leHQ0L2V4dDQuaC0zOTU3LWV4dGVybiBpbnQgZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBzdGFydCxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTYyMzQ9c3RhdGljIGludCBza2lwX2hvbGUoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgKmN1cilcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTYyNTEtLyogQ291bnQgbnVtYmVyIG9mIGJsb2NrcyB1c2VkIGJ5IHRoaXMgaW5vZGUgYW5kIHVwZGF0ZSBpX2Jsb2NrcyAqL1xcbmZzL2V4dDQvZXh0ZW50cy5jOjYyNTI6aW50IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvZXh0ZW50cy5jLTYyNTMte1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTE5MjU9c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwMDUtXFx0aWYgKCFleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSkpIHtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjAwNjpcXHRcXHRyZXQgPSBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoaW5vZGUpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDA3LVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE3OjI1LjY3OTY1NTY3N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MjcxMzI2Nzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdW5kZXJzdGFuZGluZyB0aGUgaW1wbGVtZW50YXRpb24gb2YgZmFzdCBjb21taXQgcmVwbGF5IGluIGV4dDQ6XG5cbioqQW5hbHl6aW5nIGV4dDQncyBGYXN0IENvbW1pdCBSZXBsYXkqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBleHQ0X2ZjX3JlcGxheWAgZnVuY3Rpb24gKG9yIHNpbWlsYXIgbmFtZSBpZiBJJ20gb2ZmIHNsaWdodGx5KSBpcyBhY3R1YWxseSAqY2FsbGVkKiB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSBjb2RlLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUgY29kZWJhc2UsIGlzIHRvIHNpbXBseSB1c2UgYGdyZXBgLiBJJ2xsIHNlYXJjaCB0aGUgZXh0NCBzb3VyY2UgdHJlZSBmb3IgYGV4dDRfZmNfcmVwbGF5YC4gSWYgdGhhdCBjb21lcyB1cCBlbXB0eSwgSSdsbCBzd2l0Y2ggdGFjdGljcyBhbmQgbG9vayBmb3IgY2FsbHMgdG8gZnVuY3Rpb25zIGluIGBmYXN0X2NvbW1pdC5jYCwgZ2l2ZW4gdGhhdCdzIHByb2JhYmx5IHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgcGF0aHMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHRyaWdnZXJpbmcgZXZlbnRzIGFuZCB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBvcGVyYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc5MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE3OjI5Ljk1MDk4NDc5MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxNTQxMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9mY19yZXBsYXlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9MTU5Mj1zdHJ1Y3QgZXh0NF9zYl9pbmZvIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTE4NzItI2VuZGlmXFxuZnMvZXh0NC9leHQ0Lmg6MTg3MzpcXHRzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUgc19mY19yZXBsYXlfc3RhdGU7XFxuZnMvZXh0NC9leHQ0LmgtMTg3NC19O1xcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MzA5MD12b2lkIGV4dDRfZmNfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL2V4dDQvZXh0NC5oOjMwOTE6Ym9vbCBleHQ0X2ZjX3JlcGxheV9jaGVja19leGNsdWRlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBleHQ0X2ZzYmxrX3QgYmxvY2spO1xcbmZzL2V4dDQvZXh0NC5oOjMwOTI6dm9pZCBleHQ0X2ZjX3JlcGxheV9jbGVhbnVwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbmZzL2V4dDQvZXh0NC5oLTMwOTMtaW50IGV4dDRfZmNfY29tbWl0KGpvdXJuYWxfdCAqam91cm5hbCwgdGlkX3QgY29tbWl0X3RpZCk7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTc4NT1zdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9mY19nZXRfdGwoc3RydWN0IGV4dDRfZmNfdGxfbWVtICp0bCwgdTggKnZhbClcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xNzk0LS8qIFVubGluayByZXBsYXkgZnVuY3Rpb24gKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTc5NTpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X3VubGluayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xNzk2LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZXh0NF9mY190bF9tZW0gKnRsLCB1OCAqdmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4MDQtXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE4MDU6XFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX1VOTElOSywgZGFyZy5pbm8sXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4MDYtXFx0XFx0XFx0ZGFyZy5wYXJlbnRfaW5vLCBkYXJnLmRuYW1lX2xlbik7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTgzMy1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTgzNDpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2xpbmtfaW50ZXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTgzNS1cXHRcXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5X2luZm9fYXJncyAqZGFyZyxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODY5LS8qIExpbmsgcmVwbGF5IGZ1bmN0aW9uICovXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE4NzA6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9saW5rKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4NzEtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBleHQ0X2ZjX3RsX21lbSAqdGwsIHU4ICp2YWwpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTg3Ny1cXHR0bF90b19kYXJnKFxcdTAwMjZkYXJnLCB0bCwgdmFsKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTg3ODpcXHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfTElOSywgZGFyZy5pbm8sXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4NzktXFx0XFx0XFx0ZGFyZy5wYXJlbnRfaW5vLCBkYXJnLmRuYW1lX2xlbik7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTg4Ni1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTg4NzpcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9saW5rX2ludGVybmFsKHNiLCBcXHUwMDI2ZGFyZywgaW5vZGUpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODg4LVxcdGlwdXQoaW5vZGUpO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTE4OTY9c3RhdGljIGludCBleHQ0X2ZjX3JlY29yZF9tb2RpZmllZF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgaW5vKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODk3LXtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTg5ODpcXHRzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUgKnN0YXRlO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODk5LVxcdGludCBpO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MjQtICovXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE5MjU6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTI2LVxcdFxcdFxcdFxcdHN0cnVjdCBleHQ0X2ZjX3RsX21lbSAqdGwsIHU4ICp2YWwpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTkzOS1cXHRpbm8gPSBsZTMyX3RvX2NwdShmY19pbm9kZS5mY19pbm8pO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxOTQwOlxcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCB0YWcsIGlubywgMCwgMCk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5NDEtXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjAzMy0gKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjAzNDpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2NyZWF0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDM1LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZXh0NF9mY190bF9tZW0gKnRsLCB1OCAqdmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwNDMtXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIwNDQ6XFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX0NSRUFULCBkYXJnLmlubyxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjA0NS1cXHRcXHRcXHRkYXJnLnBhcmVudF9pbm8sIGRhcmcuZG5hbWVfbGVuKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDc2LVxcdH1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjA3NzpcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9saW5rX2ludGVybmFsKHNiLCBcXHUwMDI2ZGFyZywgaW5vZGUpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDc4LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjA5Mj1pbnQgZXh0NF9mY19yZWNvcmRfcmVnaW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgaW5vLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwOTQte1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMDk1OlxcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGU7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwOTYtXFx0c3RydWN0IGV4dDRfZmNfYWxsb2NfcmVnaW9uICpyZWdpb247XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjEzMS0vKiBSZXBsYXkgYWRkIHJhbmdlIHRhZyAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMTMyOnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfYWRkX3JhbmdlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU4ICp2YWwpXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxMzMte1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxNDYtXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIxNDc6XFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX0FERF9SQU5HRSxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjE0OC1cXHRcXHRsZTMyX3RvX2NwdShmY19hZGRfZXguZmNfaW5vKSwgbGUzMl90b19jcHUoZXgtXFx1MDAzZWVlX2Jsb2NrKSxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMjU4PXN0YXRpYyBpbnRcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjI1OTpleHQ0X2ZjX3JlcGxheV9kZWxfcmFuZ2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTggKnZhbClcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjI2MC17XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjI3MC1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjI3MTpcXHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfREVMX1JBTkdFLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjcyLVxcdFxcdGxlMzJfdG9fY3B1KGxyYW5nZS5mY19pbm8pLCBjdXIsIHJlbWFpbmluZyk7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjMyMD1zdGF0aWMgdm9pZCBleHQ0X2ZjX3NldF9iaXRtYXBzX2FuZF9jb3VudGVycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzIxLXtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjMyMjpcXHRzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUgKnN0YXRlO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzIzLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM3OC0gKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjM3OTpib29sIGV4dDRfZmNfcmVwbGF5X2NoZWNrX2V4Y2x1ZGVkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZnNibGtfdCBibGspXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzODAte1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzgxLVxcdGludCBpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMzgyOlxcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGU7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzODMtXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM5Ni0vKiBDbGVhbnVwIGZ1bmN0aW9uIGNhbGxlZCBhZnRlciByZXBsYXkgKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjM5Nzp2b2lkIGV4dDRfZmNfcmVwbGF5X2NsZWFudXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM5OC17XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjQwNj1zdGF0aWMgYm9vbCBleHQ0X2ZjX3ZhbHVlX2xlbl9pc3ZhbGlkKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDQ5LSAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNDUwOnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfc2Nhbihqb3VybmFsX3QgKmpvdXJuYWwsXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0NTEtXFx0XFx0XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IG9mZixcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDU1LVxcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNDU2OlxcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGU7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0NTctXFx0aW50IHJldCA9IEpCRDJfRkNfUkVQTEFZX0NPTlRJTlVFO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1NjQtb3V0X2VycjpcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjU2NTpcXHR0cmFjZV9leHQ0X2ZjX3JlcGxheV9zY2FuKHNiLCByZXQsIG9mZik7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1NjYtXFx0cmV0dXJuIHJldDtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTcyLSAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNTczOnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXkoam91cm5hbF90ICpqb3VybmFsLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTc0LVxcdFxcdFxcdFxcdGVudW0gcGFzc3R5cGUgcGFzcywgaW50IG9mZiwgdGlkX3QgZXhwZWN0ZWRfdGlkKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1ODAtXFx0aW50IHJldCA9IEpCRDJfRkNfUkVQTEFZX0NPTlRJTlVFO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNTgxOlxcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGUgPSBcXHUwMDI2c2JpLVxcdTAwM2VzX2ZjX3JlcGxheV9zdGF0ZTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU4Mi1cXHRzdHJ1Y3QgZXh0NF9mY190YWlsIHRhaWw7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU4NS1cXHRcXHRzdGF0ZS1cXHUwMDNlZmNfY3VycmVudF9wYXNzID0gUEFTU19TQ0FOO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNTg2OlxcdFxcdHJldHVybiBleHQ0X2ZjX3JlcGxheV9zY2FuKGpvdXJuYWwsIGJoLCBvZmYsIGV4cGVjdGVkX3RpZCk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1ODctXFx0fVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MjMtXFx0XFx0Y2FzZSBFWFQ0X0ZDX1RBR19MSU5LOlxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjI0OlxcdFxcdFxcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2xpbmsoc2IsIFxcdTAwMjZ0bCwgdmFsKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYyNS1cXHRcXHRcXHRicmVhaztcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYyNi1cXHRcXHRjYXNlIEVYVDRfRkNfVEFHX1VOTElOSzpcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjYyNzpcXHRcXHRcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV91bmxpbmsoc2IsIFxcdTAwMjZ0bCwgdmFsKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYyOC1cXHRcXHRcXHRicmVhaztcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYyOS1cXHRcXHRjYXNlIEVYVDRfRkNfVEFHX0FERF9SQU5HRTpcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjYzMDpcXHRcXHRcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2Uoc2IsIHZhbCk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzEtXFx0XFx0XFx0YnJlYWs7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzItXFx0XFx0Y2FzZSBFWFQ0X0ZDX1RBR19DUkVBVDpcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjYzMzpcXHRcXHRcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9jcmVhdGUoc2IsIFxcdTAwMjZ0bCwgdmFsKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYzNC1cXHRcXHRcXHRicmVhaztcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYzNS1cXHRcXHRjYXNlIEVYVDRfRkNfVEFHX0RFTF9SQU5HRTpcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjYzNjpcXHRcXHRcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9kZWxfcmFuZ2Uoc2IsIHZhbCk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzctXFx0XFx0XFx0YnJlYWs7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzgtXFx0XFx0Y2FzZSBFWFQ0X0ZDX1RBR19JTk9ERTpcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjYzOTpcXHRcXHRcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9pbm9kZShzYiwgXFx1MDAyNnRsLCB2YWwpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjQwLVxcdFxcdFxcdGJyZWFrO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjQxLVxcdFxcdGNhc2UgRVhUNF9GQ19UQUdfUEFEOlxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjQyOlxcdFxcdFxcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCBFWFQ0X0ZDX1RBR19QQUQsIDAsXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NDMtXFx0XFx0XFx0XFx0XFx0ICAgICB0bC5mY19sZW4sIDApO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NDUtXFx0XFx0Y2FzZSBFWFQ0X0ZDX1RBR19UQUlMOlxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjQ2OlxcdFxcdFxcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCBFWFQ0X0ZDX1RBR19UQUlMLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjQ3LVxcdFxcdFxcdFxcdFxcdCAgICAgMCwgdGwuZmNfbGVuLCAwKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjUzLVxcdFxcdGRlZmF1bHQ6XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2NTQ6XFx0XFx0XFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIHRsLmZjX3RhZywgMCwgdGwuZmNfbGVuLCAwKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY1NS1cXHRcXHRcXHRyZXQgPSAtRUNBTkNFTEVEO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI2NjU9dm9pZCBleHQ0X2ZjX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgam91cm5hbF90ICpqb3VybmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NzEtXFx0ICovXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2NzI6XFx0am91cm5hbC1cXHUwMDNlal9mY19yZXBsYXlfY2FsbGJhY2sgPSBleHQ0X2ZjX3JlcGxheTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY3My1cXHRpZiAoIXRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0Lmg9MTM5PXN0cnVjdCBleHQ0X2ZjX2FsbG9jX3JlZ2lvbiB7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtMTQ3LSAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuaDoxNDg6c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlIHtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtMTQ5LVxcdGludCBmY19yZXBsYXlfbnVtX3RhZ3M7XFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYz02MTYzPWV4dDRfbWJfbmV3X2Jsb2Nrc19zaW1wbGUoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0ICphciwgaW50ICplcnJwKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNjE5NC1cXHRcXHRcXHRcXHRicmVhaztcXG5mcy9leHQ0L21iYWxsb2MuYzo2MTk1OlxcdFxcdFxcdGlmIChleHQ0X2ZjX3JlcGxheV9jaGVja19leGNsdWRlZChzYixcXG5mcy9leHQ0L21iYWxsb2MuYy02MTk2LVxcdFxcdFxcdFxcdGV4dDRfZ3JvdXBfZmlyc3RfYmxvY2tfbm8oc2IsIGdyb3VwKSArXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTM1Nz1zdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NjU4LVxcdH1cXG5mcy9leHQ0L3N1cGVyLmM6NTY1OTpcXHRleHQ0X2ZjX3JlcGxheV9jbGVhbnVwKHNiKTtcXG5mcy9leHQ0L3N1cGVyLmMtNTY2MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTc6MjkuOTk4MTQzOTg3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ5MTIwODM4MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEV4dDQgRmlsZXN5c3RlbSBWdWxuZXJhYmlsaXR5IER1cmluZyBKb3VybmFsIFJlcGxheSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGV4dDQgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGEgcG90ZW50aWFsIGlzc3VlIGR1cmluZyBqb3VybmFsIHJlcGxheS4gVGhlIGZsb3cgaXMgcHJldHR5IGNsZWFyOiB3aGVuIG1vdW50aW5nIGFuIGV4dDQgZmlsZXN5c3RlbSB3aXRoIGZhc3QgY29tbWl0IGVuYWJsZWQsIGBqYmQyYCByZXBsYXlzIHRoZSBqb3VybmFsLiBUaGlzIHRyaWdnZXJzIGBleHQ0X2ZjX3JlcGxheWAsIHdoaWNoIHRoZW4gY2FsbHMgYGV4dDRfZmNfcmVwbGF5X2lub2RlYCwgYW5kIGZpbmFsbHksIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoaW5vZGUpYC4gSSdtIGZhbWlsaWFyIHdpdGggdGhpcywgYW5kIEkga25vdyBTeXprYWxsZXIgaGVhdmlseSB0YXJnZXRzIGV4dDQgbW91bnRzIGFuZCBmaWxlc3lzdGVtIGltYWdlcyB3aXRoIGl0cyBmdXp6aW5nLiBTcGVjaWZpY2FsbHksIGNvcnJ1cHRlZCBpbWFnZXMgY2F1c2luZyBpc3N1ZXMgZHVyaW5nIHJlcGxheSwgbW91bnQsIG9yIGpvdXJuYWwgcmVjb3ZlcnkgYXJlIGNvbW1vbiB0YXJnZXRzLCBhbmQgdGhhdCdzIHdoYXQgaGFzIHBpcXVlZCBteSBpbnRlcmVzdCBoZXJlLlxuXG5JJ20gemVyb2luZyBpbiBvbiB0aGlzIGZ1bmN0aW9uLCBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCwgYW5kIEkndmUgbm90aWNlZCBhIHNpZ25pZmljYW50IGNoYW5nZS4gUHJldmlvdXNseSwgaWYgYGV4dDRfZmluZF9leHRlbnRgIHJldHVybmVkIGFuIGVycm9yIChhbiBFUlJfUFRSKSBvciBgcmV0YCB3YXMgbmVnYXRpdmUgaW5zaWRlIHRoZSBgd2hpbGVgIGxvb3AsIHRoZSBjb2RlIHdvdWxkIHNpbXBseSBicmVhayBvdXQgdG8gdGhlIGBvdXQ6YCBsYWJlbC4gVGhlIHByb2JsZW0gaXMgdGhhdCwgdW5kZXIgdGhlc2UgY29uZGl0aW9ucywgYHBhdGhgIGlzIGFuIEVSUl9QVFIhIEFuZCB0aGUgY3J1Y2lhbCBwYXJ0IGlzIHRoYXQgdGhlIGNvZGUgdGhlbiBjYWxscyBgZXh0NF9mcmVlX2V4dF9wYXRoKHBhdGgpYC4gTm93LCB3aGF0IGRvZXMgYGV4dDRfZnJlZV9leHRfcGF0aGAgZG8gd2l0aCBhbiBFUlJfUFRSPyBUaGF0J3MgdGhlIG1pbGxpb24tZG9sbGFyIHF1ZXN0aW9uLiBJZiBgZXh0NF9mcmVlX2V4dF9wYXRoYCBkb2Vzbid0IGhhbmRsZSBhbiBFUlJfUFRSIHByb3Blcmx5LCB3ZSBjb3VsZCBiZSBsb29raW5nIGF0IGEgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUsIG9yIGEgZG91YmxlIGZyZWUsIG9yIHNvbWUgb3RoZXIgYmFkbmVzcyB0aGF0IGNvdWxkIGNhdXNlIGRlbmlhbCBvZiBzZXJ2aWNlIG9yLCB3b3JzZSwgYSBrZXJuZWwgcGFuaWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGV4dDRfZnJlZV9leHRfcGF0aGAgZG9lcyBpbiB0aGlzIHNpdHVhdGlvbi4gSXQgc2VlbXMgdGhpcyBjb3VsZCBiZSBhIG5ldywgb3IgcmVjZW50bHkgZXhwb3NlZCwgYnVnLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggbG9va2luZyBpbnRvIGFuZCB1bmRlcnN0YW5kaW5nIGhvdyBpdCdzIHRyaWdnZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTc6MzQuOTEwMjMwMDIyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjExNTk0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIGV4dDRfZnJlZV9leHRfcGF0aFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0zOTM1PWV4dGVybiBzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqZXh0NF9maW5kX2V4dGVudChzdHJ1Y3QgaW5vZGUgKiwgZXh0NF9sYmxrX3QsXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0zOTM3LVxcdFxcdFxcdFxcdFxcdCAgICAgIGludCBmbGFncyk7XFxuZnMvZXh0NC9leHQ0Lmg6MzkzODpleHRlcm4gdm9pZCBleHQ0X2ZyZWVfZXh0X3BhdGgoc3RydWN0IGV4dDRfZXh0X3BhdGggKik7XFxuZnMvZXh0NC9leHQ0LmgtMzkzOS1leHRlcm4gaW50IGV4dDRfZXh0X2NoZWNrX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9MTExPXN0YXRpYyB2b2lkIGV4dDRfZXh0X2Ryb3BfcmVmcyhzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aClcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTEyMS1cXG5mcy9leHQ0L2V4dGVudHMuYzoxMjI6dm9pZCBleHQ0X2ZyZWVfZXh0X3BhdGgoc3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGgpXFxuZnMvZXh0NC9leHRlbnRzLmMtMTIzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTc6MzQuOTU2MzUwMjk2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMyNDU4MzE1NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gZXh0NF9mcmVlX2V4dF9wYXRoKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byBgZXh0NF9mcmVlX2V4dF9wYXRoYCBpbiBgZnMvZXh0NC9leHRlbnRzLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgaGFuZGxlcyBleHRlbnQgZGVhbGxvY2F0aW9uLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIHRoZSBwYXRoIHRyYXZlcnNhbCBsb2dpYyDigJMgd2hhdCBhcmUgdGhlIGVkZ2UgY2FzZXMgaXQgaGFuZGxlcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBleHRlbnQgdHJlZSBzdHJ1Y3R1cmUgYW5kIHRoZSB2YXJpb3VzIHNjZW5hcmlvcyB3aGVyZSBleHRlbnRzIGdldCBmcmVlZC4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIGZsYWdzIHVzZWQgYW5kIGhvdyB0aGV5IHByb3BhZ2F0ZSBkdXJpbmcgdGhlIHRyYXZlcnNhbCB0byB0aGUgaW5vZGUuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgaG93IGl0IGhhbmRsZXMgcGFydGlhbCBleHRlbnQgZnJlZXMsIG1lcmdpbmcgYWRqYWNlbnQgZXh0ZW50cywgYW5kIGFueSBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMgd2l0aGluIHRoZSBCLXRyZWUgc3RydWN0dXJlLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIGpvdXJuYWxpbmcgaW4gZXh0NCwgSSB3aWxsIGtlZXAgam91cm5hbCByZWxhdGVkIGNvbnNpZGVyYXRpb25zIGF0IHRoZSBmcm9udCBvZiBteSBtaW5kIGR1cmluZyB0aGlzIHJldmlldy4gSSBleHBlY3QgdG8gYmUgbG9va2luZyBhdCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBibG9jayBncm91cCBhY2NvdW50aW5nIGFuZCBmcmVlIHNwYWNlIGJpdG1hcHMuIEkgd2FudCB0byBmdWxseSB2aXN1YWxpemUgdGhlIHRyZWUgdXBkYXRlcyBhcyBJIGdvIHRocm91Z2ggaXQgdG8gdHJ5IHRvIGlkZW50aWZ5IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxNzozOC4yMDIxODM5NTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvZXh0ZW50cy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyMDpcXHR9XFxuIDEyMTpcXHRcXG4gMTIyOlxcdHZvaWQgZXh0NF9mcmVlX2V4dF9wYXRoKHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoKVxcbiAxMjM6XFx0e1xcbiAxMjQ6XFx0XFx0aWYgKElTX0VSUl9PUl9OVUxMKHBhdGgpKVxcbiAxMjU6XFx0XFx0XFx0cmV0dXJuO1xcbiAxMjY6XFx0XFx0ZXh0NF9leHRfZHJvcF9yZWZzKHBhdGgpO1xcbiAxMjc6XFx0XFx0a2ZyZWUocGF0aCk7XFxuIDEyODpcXHR9XFxuIDEyOTpcXHRcXG4gMTMwOlxcdC8qXFxuIDEzMTpcXHQgKiBNYWtlIHN1cmUgJ2hhbmRsZScgaGFzIGF0IGxlYXN0ICdjaGVja19jcmVkJyBjcmVkaXRzLiBJZiBub3QsIHJlc3RhcnRcXG4gMTMyOlxcdCAqIHRyYW5zYWN0aW9uIHdpdGggJ3Jlc3RhcnRfY3JlZCcgY3JlZGl0cy4gVGhlIGZ1bmN0aW9uIGRyb3BzIGlfZGF0YV9zZW1cXG4gMTMzOlxcdCAqIHdoZW4gcmVzdGFydGluZyB0cmFuc2FjdGlvbiBhbmQgZ2V0cyBpdCBhZnRlciB0cmFuc2FjdGlvbiBpcyByZXN0YXJ0ZWQuXFxuIDEzNDpcXHQgKlxcbiAxMzU6XFx0ICogVGhlIGZ1bmN0aW9uIHJldHVybnMgMCBvbiBzdWNjZXNzLCAxIGlmIHRyYW5zYWN0aW9uIGhhZCB0byBiZSByZXN0YXJ0ZWQsXFxuIDEzNjpcXHQgKiBhbmQgXFx1MDAzYyAwIGluIGNhc2Ugb2YgZmF0YWwgZXJyb3IuXFxuIDEzNzpcXHQgKi9cXG4gMTM4OlxcdGludCBleHQ0X2RhdGFzZW1fZW5zdXJlX2NyZWRpdHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gMTM5OlxcdFxcdFxcdFxcdFxcdGludCBjaGVja19jcmVkLCBpbnQgcmVzdGFydF9jcmVkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxNzozOC4yMDIzOTA2OTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjc4ODg2NjQzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU3VidGxlIEJ1ZyBGaXggaW4gRVhUNCdzIEZhc3QgQ29tbWl0IEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AgYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGUgcG90ZW50aWFsIGltcGFjdC4gUHJldmlvdXNseSwgaWYgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AgZW5jb3VudGVyZWQgYW4gZXJyb3IsIGxpa2UgYSBmYWlsdXJlIGluIGBleHQ0X21hcF9ibG9ja3NgIG9yIGBleHQ0X2ZpbmRfZXh0ZW50YCwgaXQgd2FzICpzaWxlbnRseSogaWdub3JlZC4gVGhlIGNvZGUganVzdCByZXR1cm5lZCAwLCBsZWF2aW5nIGBpX2Jsb2Nrc2AgcG90ZW50aWFsbHkgaW5jb25zaXN0ZW50IGFuZCBsZWFkaW5nIHRvIGEgcmV0dXJuIG9mIHplcm8gdG8gdGhlIGNhbGxpbmcgZnVuY3Rpb24gYGV4dDRfZmNfcmVwbGF5X2lub2RlYCwgd2hpY2ggd291bGQgY29udGludWUgZXhlY3V0aW9uIGFzIGlmIG5vdGhpbmcgd2FzIHdyb25nLiBUaGlzIGlzIGEgY2xhc3NpYyByZWNpcGUgZm9yIHN1YnRsZSBkYXRhIGNvcnJ1cHRpb24sIGVzcGVjaWFsbHkgaW4gYSBmYXN0IGNvbW1pdCBzY2VuYXJpbyB3aGVyZSBjb25zaXN0ZW5jeSBpcyBjcnVjaWFsLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgbGlrZSB0aGlzOlxuXG5gYGBjXG5jbGVhbnVwOlxuXHRleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aCk7XG5cdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoMik7XG5cdHJldHVybiAwO1xuYGBgXG5cbklmIGByZXQgXHUwMDNjIDBgIGhhcHBlbmVkLCB0aGUgY29kZSB3b3VsZCBzaW1wbHkganVtcCBvciBicmVhayBhbmQgcmV0dXJuIDAhIE5vIGVycm9yIGhhbmRsaW5nLlxuXG5Ob3csIHRoZSBwYXRjaCBmaXhlcyB0aGlzLiBOb3cgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AgcmV0dXJucyB0aGUgYWN0dWFsIGVycm9yIGNvZGUuICBBbmQgdGhlIGNhbGxpbmcgY29kZSwgd2l0aGluIGBmYXN0X2NvbW1pdC5jYCwgaGFzIGJlZW4gdXBkYXRlZCB0byBjaGVjayB0aGlzIHJldHVybiB2YWx1ZS5cblxuYGBgY1xuLVx0aWYgKCFleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSkpXG4tXHRcdGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrcyhpbm9kZSk7XG4rXHRpZiAoIWV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSkge1xuK1x0XHRyZXQgPSBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoaW5vZGUpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gb3V0X2JyZWxzZTtcbitcdH1cbmBgYFxuXG5Ob3csIGlmIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgIGZhaWxzLCB0aGUgZXJyb3IgaXMgcHJvcGVybHkgcHJvcGFnYXRlZCB1cCB0aGUgY2FsbCBjaGFpbiwgYXZvaWRpbmcgdGhlIHNpbGVudCBjb3JydXB0aW9uLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnQuIEkgbmVlZCB0byB0aGluayBhYm91dCBob3cgdG8gdHJpZ2dlciB0aGlzIHNjZW5hcmlvIGFuZCBjb25maXJtIHRoZSBmaXguIEdpdmVuIHRoZSBjb21wbGV4aXR5IG9mIEVYVDQgYW5kIGZhc3QgY29tbWl0LCBJIG5lZWQgdG8gY2hlY2sgaG93IGl0J3MgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0aW5nIG9yIGZ1enplciBpbmZyYXN0cnVjdHVyZS5cblxuSXMgYGV4dDRgIGNvZGUsIGluIGdlbmVyYWwsIHdlbGwtZXhlcmNpc2VkIGluIHRoZSBrZXJuZWwgZnV6emVyLCBzeXprYWxsZXI/IFllcywgRVhUNCBpcyBvbmUgb2YgdGhlIG1vc3QgaGVhdmlseSBmdXp6ZWQgc3Vic3lzdGVtcy4gSG93IGFib3V0IGBmYXN0X2NvbW1pdGAgc3BlY2lmaWNhbGx5PyBXaGF0IGFyZSB0aGUgS2NvbmZpZyBvcHRpb25zIHJlcXVpcmVkIGZvciBgZmFzdF9jb21taXRgIGFuZCBFWFQ0PyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZyBvcHRpb25zIHRvIGVuc3VyZSB0aGlzIGNvZGUgcGF0aCBpcyBlbmFibGVkIGR1cmluZyBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM4NSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE4OjA2LjA5MTA1NzY5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI3ODg5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJGQVNUX0NPTU1JVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0xMDQ4PXN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMTMxNC1cXG5mcy9leHQ0L2V4dDQuaDoxMzE1OiNkZWZpbmUgRVhUNF9NT1VOVDJfSk9VUk5BTF9GQVNUX0NPTU1JVFxcdDB4MDAwMDAwMTAgLyogSm91cm5hbCBmYXN0IGNvbW1pdCAqL1xcbmZzL2V4dDQvZXh0NC5oLTEzMTYtI2RlZmluZSBFWFQ0X01PVU5UMl9EQVhfTkVWRVJcXHRcXHQweDAwMDAwMDIwIC8qIERvIG5vdCBhbGxvdyBEaXJlY3QgQWNjZXNzICovXFxuLS1cXG5mcy9leHQ0L2V4dDQuaD0yMTQwPXN0YXRpYyBpbmxpbmUgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICpleHQ0X2lfbWV0YWRhdGFfYmhzKFxcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMjE4NS0vKlxcbmZzL2V4dDQvZXh0NC5oOjIxODY6ICogVGhlIHJlYXNvbiB3aHkgXFxcIkZBU1RfQ09NTUlUXFxcIiBpcyBhIGNvbXBhdCBmZWF0dXJlIGlzIHRoYXQsIEZTIGJlY29tZXNcXG5mcy9leHQ0L2V4dDQuaC0yMTg3LSAqIGluY29tcGF0aWJsZSBvbmx5IGlmIGZhc3QgY29tbWl0IGJsb2NrcyBhcmUgcHJlc2VudCBpbiB0aGUgRlMuIFNpbmNlIHdlXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0yMTkxLSAqL1xcbmZzL2V4dDQvZXh0NC5oOjIxOTI6I2RlZmluZSBFWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZBU1RfQ09NTUlUXFx0XFx0MHgwNDAwXFxuZnMvZXh0NC9leHQ0LmgtMjE5My0jZGVmaW5lIEVYVDRfRkVBVFVSRV9DT01QQVRfU1RBQkxFX0lOT0RFU1xcdDB4MDgwMFxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MjI5Nz1FWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZVTkNTKHNwYXJzZV9zdXBlcjIsXFx0U1BBUlNFX1NVUEVSMilcXG5mcy9leHQ0L2V4dDQuaDoyMjk4OkVYVDRfRkVBVFVSRV9DT01QQVRfRlVOQ1MoZmFzdF9jb21taXQsXFx0XFx0RkFTVF9DT01NSVQpXFxuZnMvZXh0NC9leHQ0LmgtMjI5OS1FWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZVTkNTKHN0YWJsZV9pbm9kZXMsXFx0U1RBQkxFX0lOT0RFUylcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMjU9c3RhdGljIGJvb2wgZXh0NF9mY19kaXNhYmxlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjYte1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMjc6XFx0cmV0dXJuICghdGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSB8fFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjgtXFx0XFx0KEVYVDRfU0Ioc2IpLVxcdTAwM2VzX21vdW50X3N0YXRlIFxcdTAwMjYgRVhUNF9GQ19SRVBMQVkpKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0zOTA9c3RhdGljIGludCBleHQ0X2ZjX3RyYWNrX3RlbXBsYXRlKFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTQyMC1cXHRcXHRcXHRcXHQoc2JpLVxcdTAwM2VzX2pvdXJuYWwtXFx1MDAzZWpfZmxhZ3MgXFx1MDAyNiBKQkQyX0ZVTExfQ09NTUlUX09OR09JTkcgfHxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NDIxOlxcdFxcdFxcdFxcdCBzYmktXFx1MDAzZXNfam91cm5hbC1cXHUwMDNlal9mbGFncyBcXHUwMDI2IEpCRDJfRkFTVF9DT01NSVRfT05HT0lORykgP1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy00MjItXFx0XFx0XFx0XFx0XFx1MDAyNnNiaS1cXHUwMDNlc19mY19xW0ZDX1FfU1RBR0lOR10gOlxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTQzNT1zdGF0aWMgaW50IF9fdHJhY2tfZGVudHJ5X3VwZGF0ZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTQ3MS1cXHRpZiAoc2JpLVxcdTAwM2VzX2pvdXJuYWwtXFx1MDAzZWpfZmxhZ3MgXFx1MDAyNiBKQkQyX0ZVTExfQ09NTUlUX09OR09JTkcgfHxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NDcyOlxcdFxcdHNiaS1cXHUwMDNlc19qb3VybmFsLVxcdTAwM2VqX2ZsYWdzIFxcdTAwMjYgSkJEMl9GQVNUX0NPTU1JVF9PTkdPSU5HKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy00NzMtXFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2bm9kZS1cXHUwMDNlZmNkX2xpc3QsXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTU2Nz1pbnQgZXh0NF9mY19jb21taXQoam91cm5hbF90ICpqb3VybmFsLCB0aWRfdCBjb21taXRfdGlkKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE1NzYtXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE1Nzc6XFx0aWYgKCF0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xNTc4LVxcdFxcdHJldHVybiBqYmQyX2NvbXBsZXRlX3RyYW5zYWN0aW9uKGpvdXJuYWwsIGNvbW1pdF90aWQpO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI2NjU9dm9pZCBleHQ0X2ZjX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgam91cm5hbF90ICpqb3VybmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NzItXFx0am91cm5hbC1cXHUwMDNlal9mY19yZXBsYXlfY2FsbGJhY2sgPSBleHQ0X2ZjX3JlcGxheTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY3MzpcXHRpZiAoIXRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkpXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NzQtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oLTItXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oOjM6I2lmbmRlZiBfX0ZBU1RfQ09NTUlUX0hfX1xcbmZzL2V4dDQvZmFzdF9jb21taXQuaDo0OiNkZWZpbmUgX19GQVNUX0NPTU1JVF9IX19cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtNS1cXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuaD0xNjM9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICp0YWcyc3RyKF9fdTE2IHRhZylcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuaC0xODgtXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oOjE4OTojZW5kaWYgLyogX19GQVNUX0NPTU1JVF9IX18gKi9cXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz0zNDQxPXN0YXRpYyBib29sIGV4dDRfaW5vZGVfZGF0YXN5bmNfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0zNDQ5LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5mcy9leHQ0L2lub2RlLmM6MzQ1MDpcXHRcXHRpZiAodGVzdF9vcHQyKGlub2RlLVxcdTAwM2VpX3NiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSlcXG5mcy9leHQ0L2lub2RlLmMtMzQ1MS1cXHRcXHRcXHRyZXR1cm4gIWxpc3RfZW1wdHkoXFx1MDAyNkVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmNfbGlzdCk7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9Mzc5OT1zdGF0aWMgaW50IGV4dDRfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtNDAwOS1cXHRcXHRcXHRleHQ0X2ZjX3RyYWNrX3VubGluayhoYW5kbGUsIG5ldy5kZW50cnkpO1xcbmZzL2V4dDQvbmFtZWkuYzo0MDEwOlxcdFxcdGlmICh0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC9uYW1laS5jLTQwMTEtXFx0XFx0ICAgICEoRVhUNF9TQihzYiktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xODk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW91bnRfb3B0cyB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTk2Mi0jaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L3N1cGVyLmM6MTk2MzpcXHR7T3B0X2ZjX2RlYnVnX2ZvcmNlLCBFWFQ0X01PVU5UMl9KT1VSTkFMX0ZBU1RfQ09NTUlULFxcbmZzL2V4dDQvc3VwZXIuYy0xOTY0LVxcdCBNT1BUX1NFVCB8IE1PUFRfMiB8IE1PUFRfRVhUNF9PTkxZfSxcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz00NDA0PXN0YXRpYyB2b2lkIGV4dDRfc2V0X2RlZl9vcHRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDQyMy1cXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9mYXN0X2NvbW1pdChzYikpXFxuZnMvZXh0NC9zdXBlci5jOjQ0MjQ6XFx0XFx0c2V0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xcbmZzL2V4dDQvc3VwZXIuYy00NDI1LVxcdC8qIGRvbid0IGZvcmdldCB0byBlbmFibGUgam91cm5hbF9jc3VtIHdoZW4gbWV0YWRhdGFfY3N1bSBpcyBlbmFibGVkLiAqL1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTQ5NzM9c3RhdGljIGludCBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQ5OTYtXFxuZnMvZXh0NC9zdXBlci5jOjQ5OTc6XFx0aWYgKHRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L3N1cGVyLmMtNDk5OC1cXHRcXHQhamJkMl9qb3VybmFsX3NldF9mZWF0dXJlcyhFWFQ0X1NCKHNiKS1cXHUwMDNlc19qb3VybmFsLCAwLCAwLFxcbmZzL2V4dDQvc3VwZXIuYzo0OTk5OlxcdFxcdFxcdFxcdFxcdCAgSkJEMl9GRUFUVVJFX0lOQ09NUEFUX0ZBU1RfQ09NTUlUKSkge1xcbmZzL2V4dDQvc3VwZXIuYy01MDAwLVxcdFxcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz01MDU3PXN0YXRpYyBpbnQgZXh0NF9jaGVja19qb3VybmFsX2RhdGFfbW9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTUwNjQtXFx0XFx0Y2xlYXJfb3B0KHNiLCBESU9SRUFEX05PTE9DSyk7XFxuZnMvZXh0NC9zdXBlci5jOjUwNjU6XFx0XFx0Y2xlYXJfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCk7XFxuZnMvZXh0NC9zdXBlci5jLTUwNjYtXFx0XFx0aWYgKHRlc3Rfb3B0MihzYiwgRVhQTElDSVRfREVMQUxMT0MpKSB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTM1Nz1zdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NTU3LVxcdFxcdGNsZWFyX29wdChzYiwgREFUQV9GTEFHUyk7XFxuZnMvZXh0NC9zdXBlci5jOjU1NTg6XFx0XFx0Y2xlYXJfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCk7XFxuZnMvZXh0NC9zdXBlci5jLTU1NTktXFx0XFx0c2JpLVxcdTAwM2VzX2pvdXJuYWwgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxODowNi4xMzczNDIyNjNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTI1NzIzMDI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBleHQ0IE1ha2VmaWxlIGZvciBPYmplY3QgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGBmcy9leHQ0L01ha2VmaWxlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzIG9mIGBleHRlbnRzLm9gIGFuZCBgZmFzdF9jb21taXQub2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIHVzZWQgaW4gdGhlaXIgY29tcGlsYXRpb24uIEFyZSB0aGVyZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGtlcm5lbCBmbGFncywgb3Igb3RoZXIgZmFjdG9ycyB0aGF0IHRyaWdnZXIgdGhlaXIgaW5jbHVzaW9uPyBVbmRlcnN0YW5kaW5nIHRoZXNlIGJ1aWxkIHZhcmlhYmxlcyBpcyBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgb3IgcG90ZW50aWFsbHkgZXZlbiBmb3Igc2VsZWN0aXZlbHkgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGZlYXR1cmVzIGZvciBhIHNwZWNpZmljIGRlcGxveW1lbnQuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgYGlmZGVmYCBibG9ja3MsIGFzc2lnbm1lbnQgc3RhdGVtZW50cyB0aGF0IGluZmx1ZW5jZSBmbGFncyBsaWtlIGBDT05GSUdfRVhUNF9VU0VfRVhURU5UU2AsIG9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gam91cm5hbGluZyBvciBmYXN0IGNvbW1pdCBiZWhhdmlvci4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGV5IGFyZSBoaWdobHkgcmVsYXRlZCB0byBmZWF0dXJlcyBzdWNoIGFzIGV4dGVudHMgKG9idmlvdXNseSkgYW5kIHRoZSBqb3VybmFsaW5nIG1lY2hhbmlzbS4gTGV0J3Mgc2VlIGlmIHRoZSBNYWtlZmlsZSBnaXZlcyBtZSBhIGNsZWFyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjkyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTg6MTEuMzk0NTc1MzE4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM1Mzc1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYXN0X2NvbW1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XFx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcXFxcbi0tXFxuZnMvZXh0NC9NYWtlZmlsZS0xMi1cXHRcXHRzdXBlci5vIHN5bWxpbmsubyBzeXNmcy5vIHhhdHRyLm8geGF0dHJfaHVyZC5vIHhhdHRyX3RydXN0ZWQubyBcXFxcXFxuZnMvZXh0NC9NYWtlZmlsZToxMzpcXHRcXHR4YXR0cl91c2VyLm8gZmFzdF9jb21taXQubyBvcnBoYW4ub1xcbmZzL2V4dDQvTWFrZWZpbGUtMTQtXFxuLS1cXG5mcy9leHQ0L2V4dDQuaD05NjM9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTk5OS0jaW5jbHVkZSBcXFwiZXh0ZW50c19zdGF0dXMuaFxcXCJcXG5mcy9leHQ0L2V4dDQuaDoxMDAwOiNpbmNsdWRlIFxcXCJmYXN0X2NvbW1pdC5oXFxcIlxcbmZzL2V4dDQvZXh0NC5oLTEwMDEtXFxuLS1cXG5mcy9leHQ0L2V4dDQuaD0yMjk3PUVYVDRfRkVBVFVSRV9DT01QQVRfRlVOQ1Moc3BhcnNlX3N1cGVyMixcXHRTUEFSU0VfU1VQRVIyKVxcbmZzL2V4dDQvZXh0NC5oOjIyOTg6RVhUNF9GRUFUVVJFX0NPTVBBVF9GVU5DUyhmYXN0X2NvbW1pdCxcXHRcXHRGQVNUX0NPTU1JVClcXG5mcy9leHQ0L2V4dDQuaC0yMjk5LUVYVDRfRkVBVFVSRV9DT01QQVRfRlVOQ1Moc3RhYmxlX2lub2RlcyxcXHRTVEFCTEVfSU5PREVTKVxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MzA3MD12b2lkIGV4dDRfZW5kX2JpdG1hcF9yZWFkKHN0cnVjdCBiaW8gKmJpbyk7XFxuZnMvZXh0NC9leHQ0LmgtMzA3MS1cXG5mcy9leHQ0L2V4dDQuaDozMDcyOi8qIGZhc3RfY29tbWl0LmMgKi9cXG5mcy9leHQ0L2V4dDQuaC0zMDczLWludCBleHQ0X2ZjX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdik7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMy0vKlxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzo0OiAqIGZzL2V4dDQvZmFzdF9jb21taXQuY1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy01LSAqXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtNi0vKlxcbmZzL2V4dDQvZmFzdF9jb21taXQuaDo3OiAqIE5vdGUgdGhpcyBmaWxlIGlzIHByZXNlbnQgaW4gZTJmc3Byb2dzL2xpYi9leHQyZnMvZmFzdF9jb21taXQuaCBhbmRcXG5mcy9leHQ0L2Zhc3RfY29tbWl0Lmg6ODogKiBsaW51eC9mcy9leHQ0L2Zhc3RfY29tbWl0LmguIFRoZXNlIGZpbGUgc2hvdWxkIGFsd2F5cyBiZSBieXRlIGlkZW50aWNhbC5cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtOS0gKi9cXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0zMjI4PWludCBfX2V4dDRfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqZF9uYW1lLFxcbmZzL2V4dDQvbmFtZWkuYy0zMjI5LVxcdFxcdCAgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L25hbWVpLmM6MzIzMDpcXHRcXHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSAvKiBOVUxMIGR1cmluZyBmYXN0X2NvbW1pdCByZWNvdmVyeSAqLylcXG5mcy9leHQ0L25hbWVpLmMtMzIzMS17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NDQwND1zdGF0aWMgdm9pZCBleHQ0X3NldF9kZWZfb3B0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQ0MjItI2VuZGlmXFxuZnMvZXh0NC9zdXBlci5jOjQ0MjM6XFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZmFzdF9jb21taXQoc2IpKVxcbmZzL2V4dDQvc3VwZXIuYy00NDI0LVxcdFxcdHNldF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz00NTIzPXN0YXRpYyB2b2lkIGV4dDRfYXRvbWljX3dyaXRlX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy00NTQ4LVxcbmZzL2V4dDQvc3VwZXIuYzo0NTQ5OnN0YXRpYyB2b2lkIGV4dDRfZmFzdF9jb21taXRfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvc3VwZXIuYy00NTUwLXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz01MDU3PXN0YXRpYyBpbnQgZXh0NF9jaGVja19qb3VybmFsX2RhdGFfbW9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTUwNjEtXFx0XFx0XFx0ICAgIFxcXCJkYXRhPWpvdXJuYWwgZGlzYWJsZXMgZGVsYXllZCBhbGxvY2F0aW9uLCBcXFwiXFxuZnMvZXh0NC9zdXBlci5jOjUwNjI6XFx0XFx0XFx0ICAgIFxcXCJkaW9yZWFkX25vbG9jaywgT19ESVJFQ1QgYW5kIGZhc3RfY29tbWl0IHN1cHBvcnQhXFxcXG5cXFwiKTtcXG5mcy9leHQ0L3N1cGVyLmMtNTA2My1cXHRcXHQvKiBjYW4ndCBtb3VudCB3aXRoIGJvdGggZGF0YT1qb3VybmFsIGFuZCBkaW9yZWFkX25vbG9jay4gKi9cXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz01MzU3PXN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU1MTAtXFx0ZXh0NF9hdG9taWNfd3JpdGVfaW5pdChzYik7XFxuZnMvZXh0NC9zdXBlci5jOjU1MTE6XFx0ZXh0NF9mYXN0X2NvbW1pdF9pbml0KHNiKTtcXG5mcy9leHQ0L3N1cGVyLmMtNTUxMi1cXG4tLVxcbmZzL2V4dDQvc3lzZnMuYz0zNjM9RVhUNF9BVFRSX0ZFQVRVUkUobWV0YWRhdGFfY3N1bV9zZWVkKTtcXG5mcy9leHQ0L3N5c2ZzLmM6MzY0OkVYVDRfQVRUUl9GRUFUVVJFKGZhc3RfY29tbWl0KTtcXG5mcy9leHQ0L3N5c2ZzLmMtMzY1LSNpZiBJU19FTkFCTEVEKENPTkZJR19VTklDT0RFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19GU19FTkNSWVBUSU9OKVxcbi0tXFxuZnMvZXh0NC9zeXNmcy5jPTM3Mj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZXh0NF9mZWF0X2F0dHJzW10gPSB7XFxuLS1cXG5mcy9leHQ0L3N5c2ZzLmMtMzg2LVxcdEFUVFJfTElTVChtZXRhZGF0YV9jc3VtX3NlZWQpLFxcbmZzL2V4dDQvc3lzZnMuYzozODc6XFx0QVRUUl9MSVNUKGZhc3RfY29tbWl0KSxcXG5mcy9leHQ0L3N5c2ZzLmMtMzg4LSNpZiBJU19FTkFCTEVEKENPTkZJR19VTklDT0RFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19GU19FTkNSWVBUSU9OKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxODoxMS40NDE5MzQ1NTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTE1MTUyMzQzOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXh0NCBNb2R1bGUgQ29tcGlsYXRpb24gQ29udGV4dCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgZXh0NCBmaWxlc3lzdGVtIG1vZHVsZXMgYXJlIGJ1aWx0LiBJdCdzIGNsZWFyIHRoYXQgdGhlIGZpbmFsIGBleHQ0YCBrZXJuZWwgbW9kdWxlIGRlcGVuZHMgb24gYSBjb3VwbGUgb2Yga2V5IHNvdXJjZSBmaWxlczogYGV4dGVudHMuY2AgYW5kIGBmYXN0X2NvbW1pdC5jYC4gVGhlIG5vdGF0aW9uIGhlcmUsIGBleHQ0LXkgOj0gLi4uIGV4dGVudHMubyAuLi4gZmFzdF9jb21taXQubyAuLi5gLCBzaG93cyB0aGF0IGJvdGggYGV4dGVudHMub2AgYW5kIGBmYXN0X2NvbW1pdC5vYCBhcmUgZ2V0dGluZyBsaW5rZWQgaW50byB0aGUgYGV4dDRgIG1vZHVsZS4gTWFrZXMgcGVyZmVjdCBzZW5zZSwgZ2l2ZW4gdGhlaXIgZnVuY3Rpb24gaW4gdGhlIGZpbGVzeXN0ZW0ncyBvcGVyYXRpb24uIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBjb25kaXRpb25hbCBidWlsZHMgaGVyZSwgc28gSSdsbCBjaGVjayBgZnMvZXh0NC9LY29uZmlnYCB0byBzZWUgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWlnaHQgaW5mbHVlbmNlIHRoZSBpbmNsdXNpb24gb2YgdGhlc2Ugc3BlY2lmaWMgZmlsZXMuIFRpbWUgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzNTIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxODoyMi45NTcxNzIwODdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MzExMjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFWFQ0X0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTQ1LVxcbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L0tjb25maWctNDctXFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy01NS1cXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L0tjb25maWctNTctXFx0Ym9vbCBcXFwiRXh0NCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE4OjIzLjAwNjQ4ODU5NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzYyMTMzMjUwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRhcmdldCBmb3IgRnV6emluZyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb21taXQuIEknZCB0eXBpY2FsbHkgcmVhY2ggZm9yIGBnaXQgbG9nYCB0byBnZXQgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCBhdXRob3IgZXhwbGFuYXRpb24sIGJ1dCBpdCBsb29rcyBsaWtlIEkgZG9uJ3QgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIHRoYXQuIE5vIHByb2JsZW0sIEkgY2FuIHNlZSB0aGUgY29kZSBkaWZmIGRpcmVjdGx5LiBJJ20gZm9jdXNpbmcgb24gYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2Agd2l0aGluIGBmcy9leHQ0L2V4dGVudHMuY2AgYW5kIGl0cyBjYWxsIHNpdGUgaW4gYGZzL2V4dDQvZmFzdF9jb21taXQuY2A6IGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAuXG5cbkxldCdzIGV2YWx1YXRlIGlmIHRoaXMgaXMgd29ydGggZnV6emluZy5cblxuMS4gICoqUmVhY2hhYmlsaXR5OioqIElzIHRoaXMgZmFzdCBjb21taXQgcmVwbGF5IHJlYWNoYWJsZT8gWWVzLCBhYnNvbHV0ZWx5LiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSB0aGUgb25lcyBTeXprYWxsZXIgcnVucyBvbiwgdXNlIGV4dDQgaW1hZ2VzIHdpdGggZmFzdCBjb21taXQgZW5hYmxlZC4gU3l6a2FsbGVyIGlzIGtub3duIHRvIHRlc3QgZXh0NCBvcGVyYXRpb25zLCBpbmNsdWRpbmcgam91cm5hbCByZWNvdmVyeSBhbmQgcmVwbGF5LiBEdXJpbmcgYSBtb3VudCB3aXRoIGZhc3QgY29tbWl0LCBpZiByZWNvdmVyeSBpcyBuZWVkZWQsIGBleHQ0X2ZjX3JlcGxheWAgcnVucyBkdXJpbmcgYGV4dDRfbG9hZF9hbmRfaW5pdF9qb3VybmFsYCBvciBgamJkMl9qb3VybmFsX2xvYWRgLiBTcGVjaWZpY2FsbHksIGR1cmluZyB0aGUgcmVwbGF5IG9mIGBFWFQ0X0ZDX1RBR19JTk9ERWAsIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAgY2FsbHMgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AuXG5cbjIuICAqKkRvZXMgdGhlIHBhdGNoIHRvdWNoIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGU/KiogWWVzLCBpdCBkb2VzLiBJdCB0b3VjaGVzIGNvcmUgZmlsZXN5c3RlbSBjb2RlOiBgZnMvZXh0NC9leHRlbnRzLmNgIGFuZCBgZnMvZXh0NC9mYXN0X2NvbW1pdC5jYC4gVGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgZXJyb3IgaGFuZGxpbmcuIEl0J3MgY2hhbmdpbmcgaG93IGVycm9ycyBhcmUgcHJvcGFnYXRlZCBhbmQgdGhlIGNvbnRyb2wgZmxvdyBkdXJpbmcgam91cm5hbCByZXBsYXkgb2YgZXh0NCBpbm9kZXMgd2l0aCBmYXN0IGNvbW1pdC4gVGhhdCdzIGEgY2xhc3NpYyB0YXJnZXQgZm9yIGZ1enppbmcuIEZpbGVzeXN0ZW0gZXJyb3IgaGFuZGxpbmcgcGF0aHMgYXJlIG5vdG9yaW91cyBmb3IgcG90ZW50aWFsIGlzc3VlcyDigJMgcmVzb3VyY2UgbGVha3MsIGxvY2sgaXNzdWVzLCBpbnZhcmlhbnQgdmlvbGF0aW9ucywgZG91YmxlIGZyZWVzLi4uIHRoZSBsaXN0IGdvZXMgb24uIEVzcGVjaWFsbHkgZ2l2ZW4gU3l6a2FsbGVyJ3MgZm9jdXMgb24gZnV6emluZyBjb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZXMgd2hlcmUgYGV4dDRfZmluZF9leHRlbnRgIG9yIGBleHQ0X21hcF9ibG9ja3NgIGNhbiByZXR1cm4gZXJyb3IgY29kZXMuXG5cbiAgICBTbywgeWVhaCwgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIGBXb3J0aEZ1enppbmdgIGlzIGB0cnVlYC5cblxuTm93LCBmb3IgYEZvY3VzU3ltYm9sc2AuXG5cbiogICBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYDogSXQncyB0aGUgZGlyZWN0bHkgbW9kaWZpZWQgZnVuY3Rpb24sIHNwZWNpZmljIHRvIGZhc3QgY29tbWl0IHJlcGxheS5cbiogICBgZXh0NF9mY19yZXBsYXlfaW5vZGVgOiBUaGUgbW9kaWZpZWQgY2FsbGVyIGluIGBmYXN0X2NvbW1pdC5jYCBoYW5kbGluZyBgRVhUNF9GQ19UQUdfSU5PREVgLlxuKiAgIGBleHQ0X2ZjX3JlcGxheWA6IFRoZSBtYWluIHJlcGxheSBkaXNwYXRjaCBmdW5jdGlvbiBpbiBgZmFzdF9jb21taXQuY2AuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc3ltYm9scyBpbnZvbHZlZCBvciBtb2RpZmllZCwgc28gSSdsbCBkb3VibGUtY2hlY2sgdGhpczpcbkkgY2FuIGNvbmZpcm0gdGhhdCBJIGZvdW5kIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgIGVhcmxpZXIsIGdyZXBwaW5nIHRoZSBjb2RlLCBzaG93aW5nIHRoYXQgaXQncyBvbmx5IGNhbGxlZCBpbiBgZnMvZXh0NC9mYXN0X2NvbW1pdC5jYCBsaW5lIDIwMDYuIEFsc28sIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAgaXMgY2FsbGVkIGZyb20gYGV4dDRfZmNfcmVwbGF5YCBpbiBgZnMvZXh0NC9mYXN0X2NvbW1pdC5jYC5cblxuQXJlIGFueSBvZiB0aGVzZSB1YmlxdWl0b3VzPyBObywgdGhlc2UgYXJlIGFsbCBzcGVjaWZpYyB0byBleHQ0IGZhc3QgY29tbWl0IHJlcGxheS5cblxuRmluYWxseSwgYEVuYWJsZUNvbmZpZ3NgLiBUaGUgZXh0NCBmaWxlc3lzdGVtIChgRVhUNF9GU2ApIGlzIG9idmlvdXNseSByZXF1aXJlZCB0byBjb21waWxlIHRoZSBmaWxlc3lzdGVtIGNvZGUuIERvZXMgZmFzdCBjb21taXQgcmVxdWlyZSBhbnkgc3BlY2lmaWMgY29uZmlnIG9wdGlvbnM/IEl0J3Mgd29ydGggY2hlY2tpbmcgaWYgZmFzdCBjb21taXQgaXMgZ3VhcmRlZCBieSBhIHNwZWNpZmljIGBDT05GSUdfYCBvcHRpb24uIEEgcXVpY2sgYGdyZXBgIGZvciBgSk9VUk5BTF9GQVNUX0NPTU1JVGAgb3IgYGZhc3RfY29tbWl0YCBpbiBgZnMvZXh0NC9LY29uZmlnYCBzaG91bGQgcmV2ZWFsIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4MzMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTg6NDAuNjI3ODIzNzA0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQ3OTgzNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmFzdF9jb21taXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxODo0MC42NzUzMTE3ODlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjE3Njk0OTAwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXh0NCBGYXN0IENvbW1pdCBUcmlhZ2U6IEEgU29saWQgQ29uZmlybWF0aW9uKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSd2ZSBnb3QuIFRoZSBmYXN0IGNvbW1pdCBmZWF0dXJlIGluIGV4dDQgaXMgYmFrZWQgaW4sIGl0J3MgdW5jb25kaXRpb25hbCDigJMgYGV4dDQteSArPSBmYXN0X2NvbW1pdC5vYC4gVGhhdCdzIHRoZSBiYXNlbGluZS4gSSBxdWlja2x5IHNjYW5uZWQgZm9yIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHdpdGhpbiBgZnMvZXh0NC9gLiBJIGZvdW5kIHRoYXQgYENPTkZJR19FWFQ0X0RFQlVHYCBhY3RpdmF0ZXMgdGhlIGBPcHRfZmNfZGVidWdfZm9yY2VgIG1vdW50IG9wdGlvbiwgYnV0IHRoZSBjb3JlIGZhc3QgY29tbWl0IGZ1bmN0aW9uYWxpdHksIGBFWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZBU1RfQ09NTUlUYCwgYW5kIHRoZSBhc3NvY2lhdGVkIG1vdW50IG9wdGlvbiBgSk9VUk5BTF9GQVNUX0NPTU1JVGAgYXJlIHBhcnQgb2YgdGhlIHN0YW5kYXJkIGZlYXR1cmUgc2V0LiBTbywgdGhlIGtleSBlbmFibGVyIGhlcmUsIHRoZSBwcmltYXJ5IGNvbmZpZywgcmVtYWlucyBgRVhUNF9GU2AuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cCB3aXRoIHRoZSB0cmlhZ2UgaW5zdHJ1Y3Rpb25zLiBXb3J0aEZ1enppbmc/IFllcCwgYWJzb2x1dGVseS4gVGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlIGNoYW5nZSBhbmQgdGhlIGZ1enppbmcgcmVjb21tZW5kYXRpb24gaXMgY2xlYXIgYW5kIGNvbmNpc2UuIEZvY3VzaW5nIG9uIG5vbi11YmlxdWl0b3VzIHN5bWJvbHMsIHRoZSBcIkZvY3VzU3ltYm9sc1wiIGNoZWNrIGlzIGNvcnJlY3QsIHdlJ3JlIGxvb2tpbmcgYXQgdGhpbmdzIGxpa2UgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AsIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAsIGFuZCBgZXh0NF9mY19yZXBsYXlgLiBUaGUgXCJFbmFibGVDb25maWdzXCIgaXMgcGVyZmVjdCwgcmVxdWlyaW5nIGBFWFQ0X0ZTYCBhcyBleHBlY3RlZC5cblxuRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaGUgaW5mb3JtYXRpb24gaXMgY29uc2lzdGVudCwgdGhlIGFuYWx5c2lzIGlzIHNvdW5kLCBhbmQgSSdtIGNvbmZpZGVudCBpbiB0aGUgYXNzZXNzbWVudC4gSSdtIHJlYWR5IHRvIHByb2NlZWQgd2l0aCBzZXR0aW5nIHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTYwMSwiT3V0cHV0VG9rZW5zIjoxODEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTk6MDIuNDQ0ODAzODYyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI2NzMzNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NcIixcbiAgICBcImV4dDRfZmNfcmVwbGF5X2lub2RlXCIsXG4gICAgXCJleHQ0X2ZjX3JlcGxheVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIHByb3BhZ2F0aW9uIGFuZCBjb250cm9sIGZsb3cgZHVyaW5nIGV4dDQgZmFzdCBjb21taXQgam91cm5hbCByZXBsYXkuIEluIGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcygpLCBlcnJvcnMgcmV0dXJuZWQgYnkgZXh0NF9tYXBfYmxvY2tzKCksIHNraXBfaG9sZSgpLCBhbmQgZXh0NF9maW5kX2V4dGVudCgpIGFyZSBub3cgcHJvcGVybHkgY2FwdHVyZWQgYW5kIHJldHVybmVkIGluc3RlYWQgb2Ygc2lsZW50bHkgaWdub3JlZCwgYW5kIGV4dDRfZmNfcmVwbGF5X2lub2RlKCkgaXMgdXBkYXRlZCB0byBoYW5kbGUgYW5kIHByb3BhZ2F0ZSBmYWlsdXJlcy4gVGhlc2UgZXJyb3ItaGFuZGxpbmcgcGF0aHMgaW4gZXh0NCBmaWxlc3lzdGVtIHJlcGxheSBhcmUgcmVhY2hhYmxlIGR1cmluZyBqb3VybmFsIHJlY292ZXJ5IGFuZCBtb3VudCBvcGVyYXRpb25zLCBtYWtpbmcgdGhlbSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nIHdpdGggY29ycnVwdGVkIGRpc2sgaW1hZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NcIixcbiAgICBcImV4dDRfZmNfcmVwbGF5X2lub2RlXCIsXG4gICAgXCJleHQ0X2ZjX3JlcGxheVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIHByb3BhZ2F0aW9uIGFuZCBjb250cm9sIGZsb3cgZHVyaW5nIGV4dDQgZmFzdCBjb21taXQgam91cm5hbCByZXBsYXkuIEluIGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcygpLCBlcnJvcnMgcmV0dXJuZWQgYnkgZXh0NF9tYXBfYmxvY2tzKCksIHNraXBfaG9sZSgpLCBhbmQgZXh0NF9maW5kX2V4dGVudCgpIGFyZSBub3cgcHJvcGVybHkgY2FwdHVyZWQgYW5kIHJldHVybmVkIGluc3RlYWQgb2Ygc2lsZW50bHkgaWdub3JlZCwgYW5kIGV4dDRfZmNfcmVwbGF5X2lub2RlKCkgaXMgdXBkYXRlZCB0byBoYW5kbGUgYW5kIHByb3BhZ2F0ZSBmYWlsdXJlcy4gVGhlc2UgZXJyb3ItaGFuZGxpbmcgcGF0aHMgaW4gZXh0NCBmaWxlc3lzdGVtIHJlcGxheSBhcmUgcmVhY2hhYmxlIGR1cmluZyBqb3VybmFsIHJlY292ZXJ5IGFuZCBtb3VudCBvcGVyYXRpb25zLCBtYWtpbmcgdGhlbSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nIHdpdGggY29ycnVwdGVkIGRpc2sgaW1hZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOTowMi41Mjc0ODU0NThaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MjM3OTczMzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTk6MDIuNTI4MDU2NjQ4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzgyMzczOTYzNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGV4dDQgZmFzdC1jb21taXQgcmVwbGF5IGNvZGUgKGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcygpIGFuZCBleHQ0X2ZjX3JlcGxheV9pbm9kZSgpKS4gSXQgZW5zdXJlcyB0aGF0IHdoZW4gZXh0NF9tYXBfYmxvY2tzKCksIHNraXBfaG9sZSgpLCBvciBleHQ0X2ZpbmRfZXh0ZW50KCkgZmFpbCwgdGhlIGVycm9yIGNvZGUgaXMgY2FwdHVyZWQsIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSBqdW1wcyB0byBjbGVhbnVwIHdpdGhvdXQgdXBkYXRpbmcgb3IgZGlydHlpbmcgdGhlIGlub2RlLCBhbmQgdGhlIGVycm9yIGlzIHByb3BhZ2F0ZWQgdXAgdGhlIGNhbGwgc3RhY2sgdG8gYWJvcnQgdGhlIHJlcGxheS5cXG5cXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bCwgZXRjLiksIGVsaW1pbmF0aW5nIGFueSByaXNrIG9mIGluZm8tbGVha3MuXFxuLSBObyBuZXcgbWVtb3J5IGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIG9yIGxlZnQgdW5pbml0aWFsaXplZDsgdGhlIG1vZGlmaWVkIGJyYW5jaGluZyByZWxpZXMgc3RyaWN0bHkgb24gcHJvcGVybHkgaW5pdGlhbGl6ZWQvYXNzaWduZWQgcmV0dXJuIHZhbHVlcyBhbmQgZXJyb3IgcG9pbnRlcnMuXFxuLSBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cXG4tIEFueSBidWdzIGNhdXNlZCBieSBjb3JydXB0ZWQgam91cm5hbCByZXBsYXkgKHN1Y2ggYXMgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzKSBmYWxsIHVuZGVyIEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MmUxOTg2MjJkZmNiYTIyNTRiN2M1YjZmZTdmZmU1NGIxZDkxZDdhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDI6MTY6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jXG5pbmRleCA3NjAzOGI2YzM2NTUyLi5mOGM4MDVkODBjMzNjIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHRlbnRzLmNcbisrKyBiL2ZzL2V4dDQvZXh0ZW50cy5jXG5AQCAtNjI3NSw3ICs2Mjc1LDcgQEAgaW50IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRtYXAubV9sZW4gPSBlbmQgLSBjdXI7XG4gXHRcdHJldCA9IGV4dDRfbWFwX2Jsb2NrcyhOVUxMLCBpbm9kZSwgXHUwMDI2bWFwLCAwKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRicmVhaztcbitcdFx0XHRnb3RvIGNsZWFudXA7XG4gXHRcdGlmIChyZXQgXHUwMDNlIDApXG4gXHRcdFx0bnVtYmxrcyArPSByZXQ7XG4gXHRcdGN1ciA9IGN1ciArIG1hcC5tX2xlbjtcbkBAIC02MjkxLDE1ICs2MjkxLDE5IEBAIGludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcbiBcdGN1ciA9IDA7XG4gXHRyZXQgPSBza2lwX2hvbGUoaW5vZGUsIFx1MDAyNmN1cik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIG91dDtcbitcdFx0Z290byBjbGVhbnVwO1xuIFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aCwgMCk7XG4tXHRpZiAoSVNfRVJSKHBhdGgpKVxuLVx0XHRnb3RvIG91dDtcbitcdGlmIChJU19FUlIocGF0aCkpIHtcbitcdFx0cmV0ID0gUFRSX0VSUihwYXRoKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuIFx0bnVtYmxrcyArPSBwYXRoLVx1MDAzZXBfZGVwdGg7XG4gXHR3aGlsZSAoY3VyIFx1MDAzYyBlbmQpIHtcbiBcdFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aCwgMCk7XG4tXHRcdGlmIChJU19FUlIocGF0aCkpXG4tXHRcdFx0YnJlYWs7XG4rXHRcdGlmIChJU19FUlIocGF0aCkpIHtcbitcdFx0XHRyZXQgPSBQVFJfRVJSKHBhdGgpO1xuK1x0XHRcdGdvdG8gY2xlYW51cDtcbitcdFx0fVxuIFx0XHRleCA9IHBhdGhbcGF0aC1cdTAwM2VwX2RlcHRoXS5wX2V4dDtcbiBcdFx0aWYgKCFleClcbiBcdFx0XHRnb3RvIGNsZWFudXA7XG5AQCAtNjMwOCwxMSArNjMxMiwxMyBAQCBpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRcdFx0XHRcdGV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4KSk7XG4gXHRcdHJldCA9IHNraXBfaG9sZShpbm9kZSwgXHUwMDI2Y3VyKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRicmVhaztcbitcdFx0XHRnb3RvIGNsZWFudXA7XG4gXG4gXHRcdHBhdGgyID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoMiwgMCk7XG4tXHRcdGlmIChJU19FUlIocGF0aDIpKVxuLVx0XHRcdGJyZWFrO1xuK1x0XHRpZiAoSVNfRVJSKHBhdGgyKSkge1xuK1x0XHRcdHJldCA9IFBUUl9FUlIocGF0aDIpO1xuK1x0XHRcdGdvdG8gY2xlYW51cDtcbitcdFx0fVxuIFxuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gbWF4KHBhdGgtXHUwMDNlcF9kZXB0aCwgcGF0aDItXHUwMDNlcF9kZXB0aCk7IGkrKykge1xuIFx0XHRcdGNtcDEgPSBjbXAyID0gMDtcbkBAIC02MzMzLDcgKzYzMzksNyBAQCBpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gY2xlYW51cDpcbiBcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcbiBcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoMik7XG4tXHRyZXR1cm4gMDtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIGludCBleHQ0X2V4dF9jbGVhcl9iYihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZmFzdF9jb21taXQuYyBiL2ZzL2V4dDQvZmFzdF9jb21taXQuY1xuaW5kZXggMGNhYzg5MGNmMzcwMi4uODExMGIwMWUzNmMxMSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZmFzdF9jb21taXQuY1xuKysrIGIvZnMvZXh0NC9mYXN0X2NvbW1pdC5jXG5AQCAtMjAwMiw4ICsyMDAyLDExIEBAIHN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdCAqIGNyYXNoaW5nLiBUaGlzIHNob3VsZCBiZSBmaXhlZCBidXQgdW50aWwgdGhlbiwgd2UgY2FsY3VsYXRlXG4gXHQgKiB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0aGUgaW5vZGUuXG4gXHQgKi9cbi1cdGlmICghZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpKVxuLVx0XHRleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoaW5vZGUpO1xuK1x0aWYgKCFleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSkpIHtcbitcdFx0cmV0ID0gZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKGlub2RlKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIG91dF9icmVsc2U7XG4rXHR9XG4gXG4gXHRpbm9kZS1cdTAwM2VpX2dlbmVyYXRpb24gPSBsZTMyX3RvX2NwdShleHQ0X3Jhd19pbm9kZShcdTAwMjZpbG9jKS1cdTAwM2VpX2dlbmVyYXRpb24pO1xuIFx0ZXh0NF9yZXNldF9pbm9kZV9zZWVkKGlub2RlKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE5OjAyLjUyODA2MDM5OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5MjcwMDIzMTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb246IEV4dDQgUGF0Y2ggQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGUgZ29hbCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggdG8gdGhlIGV4dDQgZmlsZXN5c3RlbSByZXF1aXJlcyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLiBMZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgYmVpbmcgY2hhbmdlZC4gVGhlIGZpbGUgaXMgYGZzL2V4dDQvZXh0ZW50cy5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGUgcGF0Y2ggZm9jdXNlcyBvbiBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSBzZWUgYSBwYXR0ZXJuOiB0aGUgY2hhbmdlcyBwcmVkb21pbmFudGx5IGludm9sdmUgcmVwbGFjaW5nIGBicmVha2Agb3IgYGdvdG8gb3V0YCB3aXRoIGBnb3RvIGNsZWFudXBgIGFmdGVyIGVuY291bnRlcmluZyBuZWdhdGl2ZSByZXR1cm4gdmFsdWVzIGZyb20gdmFyaW91cyBmdW5jdGlvbnMgbGlrZSBgZXh0NF9tYXBfYmxvY2tzYCwgYHNraXBfaG9sZWAsIGFuZCBgZXh0NF9maW5kX2V4dGVudGAuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgY2xlYW51cCBwcm9jZWR1cmUgaW4gdGhlIGtlcm5lbCAtIGl0J3MgbWFraW5nIHN1cmUgcmVzb3VyY2VzIGFyZSBmcmVlZCB3aGVuIHRoaW5ncyBnbyB3cm9uZy5cblxuVGhlIGtleSB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgdXNlIG9mIGBJU19FUlJgIHRvIGNoZWNrIGZvciBlcnJvciBwb2ludGVycyBmcm9tIGBleHQ0X2ZpbmRfZXh0ZW50YC4gVGhhdCBtYWtlcyBtZSB0aGluayBhYm91dCBwb3RlbnRpYWwgcmVzb3VyY2UgbGVha3MuIFNwZWNpZmljYWxseSwgaWYgYGV4dDRfZmluZF9leHRlbnRgIHJldHVybnMgYW4gZXJyb3IgcG9pbnRlciAoYEVSUl9QVFJgKSwgd2hhdCBkb2VzIGBleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aClgIGRvPyBUaGlzIGlzIGEgcG9pbnQgb2YgY29uY2VybiBiZWNhdXNlIGZyZWVpbmcgYSBwb2ludGVyIHRoYXQgaXMgYW4gZXJyb3IsIGlzIHNvbWV0aGluZyB0byBsb29rIGZvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXJ0IG9mIHRoZSBwYXRjaC4gSSBuZWVkIHRvIGtub3cgaWYgdGhlIGBleHQ0X2ZyZWVfZXh0X3BhdGhgIGhhbmRsZXMgZXJyb3IgcG9pbnRlcnMgZ3JhY2VmdWxseS4gSWYgbm90LCB3ZSBoYXZlIGEgcHJvYmxlbS5cblxuQW5kIHRoZW4gdGhlcmUncyB0aGUgYGZzL2V4dDQvZmFzdF9jb21taXQuY2AgZmlsZS4gVGhlIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAgZnVuY3Rpb24gY2FsbHMgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AgYnV0IG9ubHkgaWYgdGhlIGlub2RlIGRvZXNuJ3QgaGF2ZSBpbmxpbmUgZGF0YS4gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgY2FsbCBkaWN0YXRlcyB3aGV0aGVyIHdlIGV4aXQuIE9rYXksIHRoaXMgaXMgaW1wb3J0YW50IGNvbnRleHQgLSB0aGlzIGlzIGEgZnVuY3Rpb24gdGhhdCBtaWdodCAqdHJpZ2dlciogb3VyIGZ1bmN0aW9uIG9mIGludGVyZXN0IGlmIHRoZSBpbm9kZSBkb2Vzbid0IGhhdmUgaW5saW5lIGRhdGEuXG5cbkFscmlnaHQsIEkgbmVlZCB0byBkaXZlIGludG8gYGZzL2V4dDQvZXh0ZW50cy5jYCBhcm91bmQgbGluZSA2Mjc1LiBJJ2xsIHJlYWQgdGhlIGNvZGUgYXJvdW5kIHRoYXQgYXJlYSB1c2luZyBteSB0b29saW5nIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcyBhbmQgd2hldGhlciBhbnkgY3JpdGljYWwgcmVzb3VyY2UgY2xlYW51cCBpcyBtaXNzZWQgd2hlbiBhbiBlcnJvciBpcyBoaXQuIEkgYW0gbGVhbmluZyB0b3dhcmRzIHRoaXMgcGF0Y2ggKm5vdCogcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24sIGJ1dCBJIHdhbnQgdG8gYmUgMTAwJSBzdXJlIHRoZSBlcnJvciBwYXRocyBhcmUgcHJvcGVybHkgaGFuZGxlZCwgZXNwZWNpYWxseSB0aGF0IGBleHQ0X2ZyZWVfZXh0X3BhdGhgIGNhbGwuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk4NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE5OjExLjc5ODA4NTgxOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjE4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9leHRlbnRzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjI2MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjI2MDpcXHRcXG42MjYxOlxcdFxcdC8qIERldGVybWluIHRoZSBzaXplIG9mIHRoZSBmaWxlIGZpcnN0ICovXFxuNjI2MjpcXHRcXHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgRVhUX01BWF9CTE9DS1MgLSAxLCBOVUxMLFxcbjYyNjM6XFx0XFx0XFx0XFx0XFx0XFx0RVhUNF9FWF9OT0NBQ0hFKTtcXG42MjY0OlxcdFxcdGlmIChJU19FUlIocGF0aCkpXFxuNjI2NTpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihwYXRoKTtcXG42MjY2OlxcdFxcdGV4ID0gcGF0aFtwYXRoLVxcdTAwM2VwX2RlcHRoXS5wX2V4dDtcXG42MjY3OlxcdFxcdGlmICghZXgpXFxuNjI2ODpcXHRcXHRcXHRnb3RvIG91dDtcXG42MjY5OlxcdFxcdGVuZCA9IGxlMzJfdG9fY3B1KGV4LVxcdTAwM2VlZV9ibG9jaykgKyBleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbihleCk7XFxuNjI3MDpcXHRcXG42MjcxOlxcdFxcdC8qIENvdW50IHRoZSBudW1iZXIgb2YgZGF0YSBibG9ja3MgKi9cXG42MjcyOlxcdFxcdGN1ciA9IDA7XFxuNjI3MzpcXHRcXHR3aGlsZSAoY3VyIFxcdTAwM2MgZW5kKSB7XFxuNjI3NDpcXHRcXHRcXHRtYXAubV9sYmxrID0gY3VyO1xcbjYyNzU6XFx0XFx0XFx0bWFwLm1fbGVuID0gZW5kIC0gY3VyO1xcbjYyNzY6XFx0XFx0XFx0cmV0ID0gZXh0NF9tYXBfYmxvY2tzKE5VTEwsIGlub2RlLCBcXHUwMDI2bWFwLCAwKTtcXG42Mjc3OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjYyNzg6XFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbjYyNzk6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuNjI4MDpcXHRcXHRcXHRcXHRudW1ibGtzICs9IHJldDtcXG42MjgxOlxcdFxcdFxcdGN1ciA9IGN1ciArIG1hcC5tX2xlbjtcXG42MjgyOlxcdFxcdH1cXG42MjgzOlxcdFxcbjYyODQ6XFx0XFx0LypcXG42Mjg1OlxcdFxcdCAqIENvdW50IHRoZSBudW1iZXIgb2YgZXh0ZW50IHRyZWUgYmxvY2tzLiBXZSBkbyBpdCBieSBsb29raW5nIHVwXFxuNjI4NjpcXHRcXHQgKiB0d28gc3VjY2Vzc2l2ZSBleHRlbnRzIGFuZCBkZXRlcm1pbmluZyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuXFxuNjI4NzpcXHRcXHQgKiB0aGVpciBwYXRocy4gV2hlbiBwYXRoIGlzIGRpZmZlcmVudCBmb3IgMiBzdWNjZXNzaXZlIGV4dGVudHNcXG42Mjg4OlxcdFxcdCAqIHdlIGNvbXBhcmUgdGhlIGJsb2NrcyBpbiB0aGUgcGF0aCBhdCBlYWNoIGxldmVsIGFuZCBpbmNyZW1lbnRcXG42Mjg5OlxcdFxcdCAqIGlibG9ja3MgYnkgdG90YWwgbnVtYmVyIG9mIGRpZmZlcmVuY2VzIGZvdW5kLlxcbjYyOTA6XFx0XFx0ICovXFxuNjI5MTpcXHRcXHRjdXIgPSAwO1xcbjYyOTI6XFx0XFx0cmV0ID0gc2tpcF9ob2xlKGlub2RlLCBcXHUwMDI2Y3VyKTtcXG42MjkzOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjYyOTQ6XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbjYyOTU6XFx0XFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aCwgMCk7XFxuNjI5NjpcXHRcXHRpZiAoSVNfRVJSKHBhdGgpKSB7XFxuNjI5NzpcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKHBhdGgpO1xcbjYyOTg6XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbjYyOTk6XFx0XFx0fVxcbjYzMDA6XFx0XFx0bnVtYmxrcyArPSBwYXRoLVxcdTAwM2VwX2RlcHRoO1xcbjYzMDE6XFx0XFx0d2hpbGUgKGN1ciBcXHUwMDNjIGVuZCkge1xcbjYzMDI6XFx0XFx0XFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aCwgMCk7XFxuNjMwMzpcXHRcXHRcXHRpZiAoSVNfRVJSKHBhdGgpKSB7XFxuNjMwNDpcXHRcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKHBhdGgpO1xcbjYzMDU6XFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbjYzMDY6XFx0XFx0XFx0fVxcbjYzMDc6XFx0XFx0XFx0ZXggPSBwYXRoW3BhdGgtXFx1MDAzZXBfZGVwdGhdLnBfZXh0O1xcbjYzMDg6XFx0XFx0XFx0aWYgKCFleClcXG42MzA5OlxcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG42MzEwOlxcdFxcbjYzMTE6XFx0XFx0XFx0Y3VyID0gbWF4KGN1ciArIDEsIGxlMzJfdG9fY3B1KGV4LVxcdTAwM2VlZV9ibG9jaykgK1xcbjYzMTI6XFx0XFx0XFx0XFx0XFx0XFx0ZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oZXgpKTtcXG42MzEzOlxcdFxcdFxcdHJldCA9IHNraXBfaG9sZShpbm9kZSwgXFx1MDAyNmN1cik7XFxuNjMxNDpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG42MzE1OlxcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG42MzE2OlxcdFxcbjYzMTc6XFx0XFx0XFx0cGF0aDIgPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBjdXIsIHBhdGgyLCAwKTtcXG42MzE4OlxcdFxcdFxcdGlmIChJU19FUlIocGF0aDIpKSB7XFxuNjMxOTpcXHRcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKHBhdGgyKTtcXG42MzIwOlxcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG42MzIxOlxcdFxcdFxcdH1cXG42MzIyOlxcdFxcbjYzMjM6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjPSBtYXgocGF0aC1cXHUwMDNlcF9kZXB0aCwgcGF0aDItXFx1MDAzZXBfZGVwdGgpOyBpKyspIHtcXG42MzI0OlxcdFxcdFxcdFxcdGNtcDEgPSBjbXAyID0gMDtcXG42MzI1OlxcdFxcdFxcdFxcdGlmIChpIFxcdTAwM2M9IHBhdGgtXFx1MDAzZXBfZGVwdGgpXFxuNjMyNjpcXHRcXHRcXHRcXHRcXHRjbXAxID0gcGF0aFtpXS5wX2JoID9cXG42MzI3OlxcdFxcdFxcdFxcdFxcdFxcdHBhdGhbaV0ucF9iaC1cXHUwMDNlYl9ibG9ja25yIDogMDtcXG42MzI4OlxcdFxcdFxcdFxcdGlmIChpIFxcdTAwM2M9IHBhdGgyLVxcdTAwM2VwX2RlcHRoKVxcbjYzMjk6XFx0XFx0XFx0XFx0XFx0Y21wMiA9IHBhdGgyW2ldLnBfYmggP1xcbjYzMzA6XFx0XFx0XFx0XFx0XFx0XFx0cGF0aDJbaV0ucF9iaC1cXHUwMDNlYl9ibG9ja25yIDogMDtcXG42MzMxOlxcdFxcdFxcdFxcdGlmIChjbXAxICE9IGNtcDIgXFx1MDAyNlxcdTAwMjYgY21wMiAhPSAwKVxcbjYzMzI6XFx0XFx0XFx0XFx0XFx0bnVtYmxrcysrO1xcbjYzMzM6XFx0XFx0XFx0fVxcbjYzMzQ6XFx0XFx0fVxcbjYzMzU6XFx0XFxuNjMzNjpcXHRvdXQ6XFxuNjMzNzpcXHRcXHRpbm9kZS1cXHUwMDNlaV9ibG9ja3MgPSBudW1ibGtzIFxcdTAwM2NcXHUwMDNjIChpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemVfYml0cyAtIDkpO1xcbjYzMzg6XFx0XFx0ZXh0NF9tYXJrX2lub2RlX2RpcnR5KE5VTEwsIGlub2RlKTtcXG42MzM5OlxcdGNsZWFudXA6XFxuNjM0MDpcXHRcXHRleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aCk7XFxuNjM0MTpcXHRcXHRleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aDIpO1xcbjYzNDI6XFx0XFx0cmV0dXJuIHJldDtcXG42MzQzOlxcdH1cXG42MzQ0OlxcdFxcbjYzNDU6XFx0aW50IGV4dDRfZXh0X2NsZWFyX2JiKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuNjM0NjpcXHR7XFxuNjM0NzpcXHRcXHRzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCA9IE5VTEw7XFxuNjM0ODpcXHRcXHRzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4O1xcbjYzNDk6XFx0XFx0ZXh0NF9sYmxrX3QgY3VyID0gMCwgZW5kO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOToxMS43OTg0NDk3OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MzE5MjM3ODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBleHQ0IGludGVybmFsczpcblxuKipEaXZpbmcgaW50byBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gYmVnaW4gYW4gaW52ZXN0aWdhdGlvbiBhbmQgZ2V0IGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmN0aW9uIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgLiBHaXZlbiB0aGF0IEknbSBsaWtlbHkga25lZS1kZWVwIGluIHVuZGVyc3RhbmRpbmcgZXh0NCwgdGhpcyBmdW5jdGlvbiBuYW1lIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCByZXBsYXlpbmcgb3Igc2V0dGluZyBpbm9kZSBibG9ja3Mgd2l0aGluIHRoZSBleHRlbnQgdHJlZSBtZWNoYW5pc20gb2YgdGhlIGV4dDQgZmlsZSBzeXN0ZW0uIEnigJltIGd1ZXNzaW5nIHRoaXMgbWlnaHQgcmVsYXRlIHRvIHRoZSBqb3VybmFsIHJlY292ZXJ5IHByb2Nlc3MsIHBvc3NpYmx5IGhhbmRsaW5nIG1vZGlmaWNhdGlvbnMgdG8gZXh0ZW50LW1hcHBlZCBpbm9kZXMgYWZ0ZXIgYSBjcmFzaCBvciB1bmNsZWFuIHNodXRkb3duLiBJIGV4cGVjdCBpdCdzIGNydWNpYWwgZm9yIGVuc3VyaW5nIGRhdGEgY29uc2lzdGVuY3kgd2hlbiByZWNvdmVyaW5nIGZyb20gYW4gaW5jb21wbGV0ZSB3cml0ZSBvciB0cmFuc2FjdGlvbi4gTGV0J3Mgc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGFuZCB3aGVyZSBpdCdzIGJlaW5nIGNhbGxlZC4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyBsb2dpYyB0byB1bmRlcnN0YW5kIHRoZSBpbnRyaWNhY2llcyBvZiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGpvdXJuYWxpbmcgYW5kIGJsb2NrIGFsbG9jYXRpb24gbGF5ZXJzLiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5yYXZlbCB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MTksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE5OjE4LjExNzY5MDI0MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDE4MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9leHRlbnRzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjI0NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjI0NTpcXHRcXHRpZiAocmV0ICE9IDApXFxuNjI0NjpcXHRcXHRcXHRyZXR1cm4gMDtcXG42MjQ3OlxcdFxcdCpjdXIgPSAqY3VyICsgbWFwLm1fbGVuO1xcbjYyNDg6XFx0XFx0cmV0dXJuIDA7XFxuNjI0OTpcXHR9XFxuNjI1MDpcXHRcXG42MjUxOlxcdC8qIENvdW50IG51bWJlciBvZiBibG9ja3MgdXNlZCBieSB0aGlzIGlub2RlIGFuZCB1cGRhdGUgaV9ibG9ja3MgKi9cXG42MjUyOlxcdGludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcXG42MjUzOlxcdHtcXG42MjU0OlxcdFxcdHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoID0gTlVMTCwgKnBhdGgyID0gTlVMTDtcXG42MjU1OlxcdFxcdHN0cnVjdCBleHQ0X2V4dGVudCAqZXg7XFxuNjI1NjpcXHRcXHRleHQ0X2xibGtfdCBjdXIgPSAwLCBlbmQ7XFxuNjI1NzpcXHRcXHRpbnQgbnVtYmxrcyA9IDAsIGksIHJldCA9IDA7XFxuNjI1ODpcXHRcXHRleHQ0X2ZzYmxrX3QgY21wMSwgY21wMjtcXG42MjU5OlxcdFxcdHN0cnVjdCBleHQ0X21hcF9ibG9ja3MgbWFwO1xcbjYyNjA6XFx0XFxuNjI2MTpcXHRcXHQvKiBEZXRlcm1pbiB0aGUgc2l6ZSBvZiB0aGUgZmlsZSBmaXJzdCAqL1xcbjYyNjI6XFx0XFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIEVYVF9NQVhfQkxPQ0tTIC0gMSwgTlVMTCxcXG42MjYzOlxcdFxcdFxcdFxcdFxcdFxcdEVYVDRfRVhfTk9DQUNIRSk7XFxuNjI2NDpcXHRcXHRpZiAoSVNfRVJSKHBhdGgpKVxcbjYyNjU6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIocGF0aCk7XFxuNjI2NjpcXHRcXHRleCA9IHBhdGhbcGF0aC1cXHUwMDNlcF9kZXB0aF0ucF9leHQ7XFxuNjI2NzpcXHRcXHRpZiAoIWV4KVxcbjYyNjg6XFx0XFx0XFx0Z290byBvdXQ7XFxuNjI2OTpcXHRcXHRlbmQgPSBsZTMyX3RvX2NwdShleC1cXHUwMDNlZWVfYmxvY2spICsgZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOToxOC4xMTgwOTU0MjJaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMyNDExODA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gbXkgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIGV4dDQgRmFzdCBDb21taXQqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAgd2l0aGluIGBmcy9leHQ0L2Zhc3RfY29tbWl0LmNgLiBUaGF0J3MgaW50ZXJlc3RpbmcuIEkgaW1tZWRpYXRlbHkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIGZhc3QgY29tbWl0IHByb2Nlc3MuIEknbSB0aGlua2luZyBhYm91dCBpdHMgcm9sZSBpbiByZXBsYXlpbmcgaW5vZGUgb3BlcmF0aW9ucy4gV2hhdCBzcGVjaWZpYyBhc3BlY3RzIG9mIGlub2RlIG1ldGFkYXRhIGFyZSBiZWluZyByZWNvbnN0cnVjdGVkIG9yIHZhbGlkYXRlZCBkdXJpbmcgcmVwbGF5PyBJcyB0aGlzIHByaW1hcmlseSBhYm91dCBlbnN1cmluZyBkYXRhIGludGVncml0eSBhZnRlciBhIGNyYXNoIG9yIGEgcG93ZXIgZmFpbHVyZSBkdXJpbmcgYSBmYXN0IGNvbW1pdCB3aW5kb3c/XG5cbkkgd2FudCB0byBjb25zaWRlciBob3cgdGhlIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBqb3VybmFsLiBBcmUgd2UgcmVhZGluZyB0cmFuc2FjdGlvbiBsb2dzLCBhbmQgaWYgc28sIHdoYXQga2luZCBvZiBpbmZvcm1hdGlvbiBpcyBpdCBwdWxsaW5nIHRvIHJlYnVpbGQgdGhlIGlub2RlIHN0YXRlPyBJcyBpdCBqdXN0IHRoZSBpbm9kZSBpdHNlbGYsIG9yIGFyZSB3ZSB3b3JraW5nIHdpdGggYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMgbGlrZSBiaXRtYXBzIG9yIGluZGlyZWN0IGJsb2Nrcz8gSSB3b3VsZCBhbHNvIHdhbnQgdG8gZXhhbWluZSB3aGVyZSBgZXh0NF9mY19yZXBsYXlfaW5vZGVgIGlzIGNhbGxlZCBpbiB0aGUgZmFzdCBjb21taXQgcmVjb3ZlcnkgcGF0aC4gSXMgdGhpcyBleGVjdXRlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgY3Jhc2ggcmVjb3ZlcnksIG9yIGR1cmluZyBhbiBlYXJsaWVyIHBoYXNlIG9mIHRoZSBmYXN0IGNvbW1pdCB0cmFuc2FjdGlvbj9cbkkgbmVlZCB0byBleGFtaW5lIGl0IG1vcmUgY2xvc2VseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEzNCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTk6MjAuNDQyMjE3MTY3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L2Zhc3RfY29tbWl0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk5MDpcXHRcXG4xOTkxOlxcdFxcdC8qIEdpdmVuIHRoYXQgd2UganVzdCB3cm90ZSB0aGUgaW5vZGUgb24gZGlzaywgdGhpcyBTSE9VTEQgc3VjY2VlZC4gKi9cXG4xOTkyOlxcdFxcdGlub2RlID0gZXh0NF9pZ2V0KHNiLCBpbm8sIEVYVDRfSUdFVF9OT1JNQUwpO1xcbjE5OTM6XFx0XFx0aWYgKElTX0VSUihpbm9kZSkpIHtcXG4xOTk0OlxcdFxcdFxcdGV4dDRfZGVidWcoXFxcIklub2RlIG5vdCBmb3VuZC5cXFwiKTtcXG4xOTk1OlxcdFxcdFxcdGlub2RlID0gTlVMTDtcXG4xOTk2OlxcdFxcdFxcdHJldCA9IC1FRlNDT1JSVVBURUQ7XFxuMTk5NzpcXHRcXHRcXHRnb3RvIG91dF9icmVsc2U7XFxuMTk5ODpcXHRcXHR9XFxuMTk5OTpcXHRcXG4yMDAwOlxcdFxcdC8qXFxuMjAwMTpcXHRcXHQgKiBPdXIgYWxsb2NhdG9yIGNvdWxkIGhhdmUgbWFkZSBkaWZmZXJlbnQgZGVjaXNpb25zIHRoYW4gYmVmb3JlXFxuMjAwMjpcXHRcXHQgKiBjcmFzaGluZy4gVGhpcyBzaG91bGQgYmUgZml4ZWQgYnV0IHVudGlsIHRoZW4sIHdlIGNhbGN1bGF0ZVxcbjIwMDM6XFx0XFx0ICogdGhlIG51bWJlciBvZiBibG9ja3MgdGhlIGlub2RlLlxcbjIwMDQ6XFx0XFx0ICovXFxuMjAwNTpcXHRcXHRpZiAoIWV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSkge1xcbjIwMDY6XFx0XFx0XFx0cmV0ID0gZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKGlub2RlKTtcXG4yMDA3OlxcdFxcdFxcdGlmIChyZXQpXFxuMjAwODpcXHRcXHRcXHRcXHRnb3RvIG91dF9icmVsc2U7XFxuMjAwOTpcXHRcXHR9XFxuMjAxMDpcXHRcXG4yMDExOlxcdFxcdGlub2RlLVxcdTAwM2VpX2dlbmVyYXRpb24gPSBsZTMyX3RvX2NwdShleHQ0X3Jhd19pbm9kZShcXHUwMDI2aWxvYyktXFx1MDAzZWlfZ2VuZXJhdGlvbik7XFxuMjAxMjpcXHRcXHRleHQ0X3Jlc2V0X2lub2RlX3NlZWQoaW5vZGUpO1xcbjIwMTM6XFx0XFxuMjAxNDpcXHRcXHRleHQ0X2lub2RlX2NzdW1fc2V0KGlub2RlLCBleHQ0X3Jhd19pbm9kZShcXHUwMDI2aWxvYyksIEVYVDRfSShpbm9kZSkpO1xcbjIwMTU6XFx0XFx0cmV0ID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoTlVMTCwgTlVMTCwgaWxvYy5iaCk7XFxuMjAxNjpcXHRcXHRzeW5jX2RpcnR5X2J1ZmZlcihpbG9jLmJoKTtcXG4yMDE3OlxcdG91dF9icmVsc2U6XFxuMjAxODpcXHRcXHRicmVsc2UoaWxvYy5iaCk7XFxuMjAxOTpcXHRvdXQ6XFxuMjAyMDpcXHRcXHRpcHV0KGlub2RlKTtcXG4yMDIxOlxcdFxcdGlmICghcmV0KVxcbjIwMjI6XFx0XFx0XFx0YmxrZGV2X2lzc3VlX2ZsdXNoKHNiLVxcdTAwM2VzX2JkZXYpO1xcbjIwMjM6XFx0XFxuMjAyNDpcXHRcXHRyZXR1cm4gcmV0O1xcbjIwMjU6XFx0fVxcbjIwMjY6XFx0XFxuMjAyNzpcXHQvKlxcbjIwMjg6XFx0ICogRGVudHJ5IGNyZWF0ZSByZXBsYXkgZnVuY3Rpb24uXFxuMjAyOTpcXHQgKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOToyMC40NDI0MTQ2ODdaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjE3MzYzNDc2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGBleHQ0X2ZyZWVfZXh0X3BhdGhgIHdpdGggYW4gYElTX0VSUmAgUG9pbnRlcioqXG5cbkFscmlnaHQsIEknbSBjdXJpb3VzLiBUaGUgcXVlc3Rpb24gaXMsIHdoYXQgaGFwcGVucyB3aXRoaW4gYGV4dDRfZnJlZV9leHRfcGF0aGAgaWYgd2UgZmVlZCBpdCBhbiBgSVNfRVJSYCBwb2ludGVyPyBJIGtub3cgdGhlIGludGVudGlvbiBpcyBwcm9iYWJseSB0byBjbGVhbiB1cCBhbiBlcnJvciBjb25kaXRpb24sIGJ1dCBJIHdhbnQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUgb2YgdGhlIGJlaGF2aW9yLiBJdCdzIGNydWNpYWwsIHdoZW4gZGVhbGluZyB3aXRoIGZpbGUgc3lzdGVtIGNvZGUsIHRvIGhhdmUgYSByb2NrLXNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlc2UgZWRnZSBjYXNlcyB0byBwcmV2ZW50IHN1YnRsZSBjb3JydXB0aW9uIGlzc3Vlcy5cblxuU28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MganVtcCBzdHJhaWdodCBpbnRvIHRoZSBgZXh0NF9mcmVlX2V4dF9wYXRoYCBmdW5jdGlvbiBkZWZpbml0aW9uLiBJIG5lZWQgdG8gd2FsayB0aHJvdWdoIHRoZSBsb2dpYyB0aGVyZSwgc3RlcCBieSBzdGVwLCBhbmQgaWRlbnRpZnkgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsbHkgaW52YWxpZCBwb2ludGVycy4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBudWxsIHBvaW50ZXIgY2hlY2tzLCBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBkZWFsbG9jYXRpb24gcm91dGluZXMuIFRoaXMgaXMgYWxsIGFib3V0IGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IGFuZCBlcnJvciBoYW5kbGluZyByb2J1c3RuZXNzLiBJIG5lZWQgdG8gYmUgY29uZmlkZW50IHRoYXQgaXQgZ3JhY2VmdWxseSBoYW5kbGVzIHRoZSBlcnJvciBjb25kaXRpb24gYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cy4gVGltZSB0byBnZXQgdG8gd29yayFcblxuXG4iLCJJbnB1dFRva2VucyI6NzA0NSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTk6MjIuNjE2MDUzMzI5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM3MDQ2NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgZXh0NF9mcmVlX2V4dF9wYXRoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTM5MzU9ZXh0ZXJuIHN0cnVjdCBleHQ0X2V4dF9wYXRoICpleHQ0X2ZpbmRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqLCBleHQ0X2xibGtfdCxcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTM5MzctXFx0XFx0XFx0XFx0XFx0ICAgICAgaW50IGZsYWdzKTtcXG5mcy9leHQ0L2V4dDQuaDozOTM4OmV4dGVybiB2b2lkIGV4dDRfZnJlZV9leHRfcGF0aChzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqKTtcXG5mcy9leHQ0L2V4dDQuaC0zOTM5LWV4dGVybiBpbnQgZXh0NF9leHRfY2hlY2tfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz0xMTE9c3RhdGljIHZvaWQgZXh0NF9leHRfZHJvcF9yZWZzKHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMTIxLVxcbmZzL2V4dDQvZXh0ZW50cy5jOjEyMjp2b2lkIGV4dDRfZnJlZV9leHRfcGF0aChzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aClcXG5mcy9leHQ0L2V4dGVudHMuYy0xMjMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOToyNC4zNTMxMTA2OTZaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDY0NzU2NzQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIGNvZGU6XG5cbioqRGl2aW5nIGludG8gZXh0NF9mcmVlX2V4dF9wYXRoKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IGBleHQ0X2ZyZWVfZXh0X3BhdGhgIGluIGBmcy9leHQ0L2V4dGVudHMuY2AuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBoYW5kbGluZyBleHRlbnQgZGVhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgd2hlbiBmcmVlaW5nIGJsb2NrcyBhc3NvY2lhdGVkIHdpdGggYW4gZXh0ZW50LWJhc2VkIGZpbGUuIExldCdzIHNlZSBob3cgaXQgb3BlcmF0ZXMuIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGxvZ2ljIGZsb3cgaGVyZS4gSSdsbCBiZSBsb29raW5nIGZvciBob3cgaXQgbmF2aWdhdGVzIHRoZSBleHRlbnQgdHJlZSwgaGFuZGxlcyBkaWZmZXJlbnQgY2FzZXMgKGUuZy4sIHBhcnRpYWwgdnMuIGZ1bGwgZXh0ZW50cyksIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgbWV0YWRhdGEuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuIEkgZXhwZWN0IHRvIGJlIG9ic2VydmluZyB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGlub2RlIGFuZCB0aGUgYmxvY2sgYWxsb2NhdGlvbiBzdHJ1Y3R1cmVzLiBJIHdhbnQgdG8gc2VlIGlmIGl0IG1ha2VzIHVzZSBvZiBhbnkgb3B0aW1pemF0aW9ucy4gSSBuZWVkIHRvIGVuc3VyZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGRlYWxsb2NhdGlvbi4gVGhlcmUgd2lsbCBiZSBsb3RzIHRvIHVucmF2ZWwgaGVyZSwgYnV0IGJ5IHN0YXJ0aW5nIHdpdGggdGhlIGVudHJ5IHBvaW50LCBgZXh0NF9mcmVlX2V4dF9wYXRoYCwgSSBzaG91bGQgaGF2ZSBhIGdvb2QgYmFzZSBmb3IgZnVydGhlciByZXNlYXJjaCwgc3BlY2lmaWNhbGx5IHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZXh0ZW50IHRyZWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOToyOS4wMDA2ODA1MjNaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM3NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvZXh0ZW50cy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyMDpcXHR9XFxuIDEyMTpcXHRcXG4gMTIyOlxcdHZvaWQgZXh0NF9mcmVlX2V4dF9wYXRoKHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoKVxcbiAxMjM6XFx0e1xcbiAxMjQ6XFx0XFx0aWYgKElTX0VSUl9PUl9OVUxMKHBhdGgpKVxcbiAxMjU6XFx0XFx0XFx0cmV0dXJuO1xcbiAxMjY6XFx0XFx0ZXh0NF9leHRfZHJvcF9yZWZzKHBhdGgpO1xcbiAxMjc6XFx0XFx0a2ZyZWUocGF0aCk7XFxuIDEyODpcXHR9XFxuIDEyOTpcXHRcXG4gMTMwOlxcdC8qXFxuIDEzMTpcXHQgKiBNYWtlIHN1cmUgJ2hhbmRsZScgaGFzIGF0IGxlYXN0ICdjaGVja19jcmVkJyBjcmVkaXRzLiBJZiBub3QsIHJlc3RhcnRcXG4gMTMyOlxcdCAqIHRyYW5zYWN0aW9uIHdpdGggJ3Jlc3RhcnRfY3JlZCcgY3JlZGl0cy4gVGhlIGZ1bmN0aW9uIGRyb3BzIGlfZGF0YV9zZW1cXG4gMTMzOlxcdCAqIHdoZW4gcmVzdGFydGluZyB0cmFuc2FjdGlvbiBhbmQgZ2V0cyBpdCBhZnRlciB0cmFuc2FjdGlvbiBpcyByZXN0YXJ0ZWQuXFxuIDEzNDpcXHQgKlxcbiAxMzU6XFx0ICogVGhlIGZ1bmN0aW9uIHJldHVybnMgMCBvbiBzdWNjZXNzLCAxIGlmIHRyYW5zYWN0aW9uIGhhZCB0byBiZSByZXN0YXJ0ZWQsXFxuIDEzNjpcXHQgKiBhbmQgXFx1MDAzYyAwIGluIGNhc2Ugb2YgZmF0YWwgZXJyb3IuXFxuIDEzNzpcXHQgKi9cXG4gMTM4OlxcdGludCBleHQ0X2RhdGFzZW1fZW5zdXJlX2NyZWRpdHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gMTM5OlxcdFxcdFxcdFxcdFxcdGludCBjaGVja19jcmVkLCBpbnQgcmVzdGFydF9jcmVkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOToyOS4wMDEwMjA0OTNaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTU2MjIwMjMxNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHByZXNlbnRlZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDpcblxuKipBbmFseXppbmcgdGhlIGBleHQ0X2ZyZWVfZXh0X3BhdGhgIEltcHJvdmVtZW50KipcblxuT2theSwgc28gYGV4dDRfZnJlZV9leHRfcGF0aGAgaXMgbm93IGhhbmRsaW5nIGBJU19FUlJfT1JfTlVMTChwYXRoKWAgc2FmZWx5LiBHb29kLiBBbHdheXMgYSBnb29kIHByYWN0aWNlIHRvIHByb3RlY3QgYWdhaW5zdCBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgZXJyb3IgY29uZGl0aW9ucy4gRGVmZW5zaXZlIHByb2dyYW1taW5nIGF0IGl0cyBmaW5lc3QuXG5cbk5vdywgbGV0J3MgZGlnIGludG8gdGhlICp3aHkqLiBXaGF0IHdhcyB0aGUgdHJpZ2dlciBmb3IgdGhpcyBjaGFuZ2U/IFdoYXQncyB0aGUgY29udGV4dD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgaXNzdWUgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nLiBUaGlzIGlzbid0IGp1c3QgYSByYW5kb20gY29kZSB0d2VhazsgdGhlcmUgaGFkIHRvIGJlIGEgc3BlY2lmaWMgcHJvYmxlbSwgYSBidWcsIG9yIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuIE15IG5leHQgbW92ZSBpcyBjbGVhcjogSSdsbCBkaXZlIGludG8gdGhlIGdpdCBsb2dzLCB0aGF0J3Mgd2hlcmUgdGhlIHN0b3J5IGxpdmVzLiBJJ2xsIHNlYXJjaCBmb3IgcmVmZXJlbmNlcyB0byBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSBpbnZvbHZlZCBzb21laG93LiBBbHRlcm5hdGl2ZWx5LCBpZiB0aGVyZSB3ZXJlIGFueSBzeXprYWxsZXIgY3Jhc2hlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBhcmVhLCB0aGV5IHdvdWxkIHByb3ZpZGUgY3JpdGljYWwgY2x1ZXMuIFRoaXMgZnVuY3Rpb24gcHJvYmFibHkgd2FzIGludm9sdmVkIGluIHNvbWUga2luZCBvZiBtZW1vcnkgY29ycnVwdGlvbi4gTGV0J3Mgc3RhcnQgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIyNSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTk6NDQuNjIzMDQ3NDE2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEyNzE1NTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0zOTU1PWV4dGVybiB2b2lkIGV4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgZW5kKTtcXG5mcy9leHQ0L2V4dDQuaDozOTU2OmV4dGVybiBpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL2V4dDQvZXh0NC5oLTM5NTctZXh0ZXJuIGludCBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IHN0YXJ0LFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NjIzND1zdGF0aWMgaW50IHNraXBfaG9sZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCAqY3VyKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNjI1MS0vKiBDb3VudCBudW1iZXIgb2YgYmxvY2tzIHVzZWQgYnkgdGhpcyBpbm9kZSBhbmQgdXBkYXRlIGlfYmxvY2tzICovXFxuZnMvZXh0NC9leHRlbnRzLmM6NjI1MjppbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9leHRlbnRzLmMtNjI1My17XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTkyNT1zdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjAwNS1cXHRpZiAoIWV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSkge1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMDA2OlxcdFxcdHJldCA9IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrcyhpbm9kZSk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwMDctXFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTk6NDYuMzM1NzY4NTgyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgwMDIwNjI3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHQ0IEZhc3QgQ29tbWl0IEpvdXJuYWwgUmVwbGF5IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCBmdW5jdGlvbi4gQmVmb3JlIHRoZSBwYXRjaCwgaWYgYGV4dDRfbWFwX2Jsb2Nrc2AgZmFpbGVkLCB0aGUgY29kZSB3b3VsZCBzaW1wbHkgYnJlYWsgb3V0IG9mIGl0cyBsb29wLCBwcm9jZWVkIHRvIGNhbGN1bGF0ZSBpbm9kZSBibG9ja3MsIGFuZCBtYXJrIHRoZSBpbm9kZSBkaXJ0eSwgZXZlbiB0aG91Z2ggYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIG1hcHBpbmcuIENydWNpYWxseSwgdGhlIHJldHVybiB2YWx1ZSBvZiBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCB3YXMgKmlnbm9yZWQqIGluIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAuIFRoaXMgbWVhbnQgdGhhdCBhIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIHN0YXRlIGNvdWxkIHBvdGVudGlhbGx5IGJlIHdyaXR0ZW4gdG8gZGlzayBpZiBhIHJlcGxheSBlcnJvciBvY2N1cnJlZC4gVGhpcyBpcy4uLiBub3QgZ29vZC5cblxuVGhlIHBhdGNoIGludHJvZHVjZXMgYSBzaWduaWZpY2FudCBjaGFuZ2U6IG5vdywgYW55IGZhaWx1cmUgZnJvbSBgZXh0NF9tYXBfYmxvY2tzYCwgYHNraXBfaG9sZWAsIG9yIGBleHQ0X2ZpbmRfZXh0ZW50YCByZXN1bHRzIGluIGEganVtcCB0byB0aGUgYGNsZWFudXBgIGxhYmVsLiBBdCBgY2xlYW51cGAsIHRoZSBmdW5jdGlvbiBub3cgKnJldHVybnMqIHRoZSBlcnJvciBjb2RlLCB0aGVyZWJ5IHByb3BhZ2F0aW5nIHRoZSBlcnJvci4gIEluIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAsIHRoaXMgZXJyb3IgaXMgdGhlbiBjaGVja2VkOiAgYGlmIChyZXQpIGdvdG8gb3V0X2JyZWxzZTtgIG1lYW5pbmcgZXJyb3JzIGFyZSBwcm9wZXJseSBoYW5kbGVkIGFuZCB0aGUgY29ycnVwdGlvbiBpcyBwcmV2ZW50ZWQuIFRoaXMgaXMgYSBjbGVhciBpbXByb3ZlbWVudC5cblxuTm93LCBhIGNyaXRpY2FsIGNvbnNpZGVyYXRpb246IGFyZSB3ZSBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciB3cml0ZXMgd2l0aCB0aGlzIHBhdGNoPyBJIG5lZWQgdG8gdmVyaWZ5LiAgVGhpcyBpcyBmYXN0IGNvbW1pdCBqb3VybmFsIHJlcGxheSBjb2RlLCBydW5uaW5nIGR1cmluZyBtb3VudC9yZWNvdmVyeS4gTm8gZGlyZWN0IHVzZXItc3BhY2UgaW50ZXJhY3Rpb24sIG5vIGlvY3Rscywgbm8gbmV0bGluay4gU28sIHRoYXQncyBvbmUgbGVzcyBhcmVhIG9mIGNvbmNlcm4uXG5cbkxvb2tpbmcgbW9yZSBjbG9zZWx5IGF0IGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgLCBJIGNhbiBzZWUgYHJldGAgaXMgaW5pdGlhbGl6ZWQsIGFuZCBpbiB0aGUgbG9vcCwgc2V2ZXJhbCBzaXR1YXRpb25zIGNvdWxkIG1ha2UgcmV0IG5lZ2F0aXZlOlxuYHJldCA9IGV4dDRfbWFwX2Jsb2NrcyguLi4pYCBhbmQgdGhlbiBnb3RvIGNsZWFudXAuXG5gcmV0ID0gc2tpcF9ob2xlKC4uLilgIGFuZCB0aGVuIGdvdG8gY2xlYW51cC5cbmBpZiAoSVNfRVJSKHBhdGgpKWAgYW5kIHRoZW4gYHJldCA9IFBUUl9FUlIocGF0aCk7IGdvdG8gY2xlYW51cDtgXG5gaWYgKCFleClgICBhbmQgZ290byBjbGVhbnVwLlxuYGlmIChJU19FUlIocGF0aDIpKWAgYW5kIHRoZW4gYHJldCA9IFBUUl9FUlIocGF0aDIpOyBnb3RvIGNsZWFudXA7YFxuYGNsZWFudXA6YCByZXR1cm5zIHJldC5cblxuSSdtIHNwZWNpZmljYWxseSBmb2N1c2VkIG9uIHRoZSBwb3RlbnRpYWwgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgc3RydWN0IG1lbWJlcnMuIEkgc2VlIGEgYHN0cnVjdCBleHQ0X21hcF9ibG9ja3MgbWFwO2AgbG9jYWwgdmFyaWFibGUgaXMgdXNlZCBhcyBhbiBhcmd1bWVudCB0byBgZXh0NF9tYXBfYmxvY2tzYCwgYW5kIHBhc3NlZCBieSByZWZlcmVuY2UuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBjb250ZW50cyBvZiBgbWFwYCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKmJlZm9yZSogYGV4dDRfbWFwX2Jsb2Nrc2AgaXMgY2FsbGVkLiBBaCwgcmlnaHQuIEkgcmVtZW1iZXIgdGhlIGNvZGUgZG9lcyBpbml0aWFsaXplIGBtYXAubV9sYmxrID0gY3VyOyBtYXAubV9sZW4gPSBlbmQgLSBjdXI7YCBiZWZvcmUgY2FsbGluZyB0aGUgZnVuY3Rpb24uIEFuZCwgYGZsYWdzID0gMGAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIGNvZGUuXG5cblNvLCBpdCAqYXBwZWFycyogdGhlIHBhdGNoIGl0c2VsZiBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGUgcHJpbWFyeSBjaGFuZ2UgaXMgdGhlIHJvYnVzdCBlcnJvciBoYW5kbGluZyBhbmQgcHJvcGFnYXRpb24gb2YgZXJyb3IgY29kZXMuIEl0J3Mgc2FmZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk1NSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTk6NTQuMzM3ODMzNjgyWiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE1MTA0NTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBleHQ0X21hcF9ibG9ja3NcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0zOTIwPWV4dGVybiBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjKGhhbmRsZV90ICpoYW5kbGUsXFxuZnMvZXh0NC9leHQ0LmgtMzkyMS1cXHRcXHRcXHRcXHRcXHQgICAgIGV4dDRfaW9fZW5kX3QgKmlvX2VuZCk7XFxuZnMvZXh0NC9leHQ0Lmg6MzkyMjpleHRlcm4gaW50IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2V4dDQvZXh0NC5oLTM5MjMtXFx0XFx0XFx0ICAgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLCBpbnQgZmxhZ3MpO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTYwNT1pbnQgZXh0NF9tYXBfY3JlYXRlX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTY5OS0gKi9cXG5mcy9leHQ0L2lub2RlLmM6NzAwOmludCBleHQ0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L2lub2RlLmMtNzAxLVxcdFxcdCAgICBzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzICptYXAsIGludCBmbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTk6NTYuNjUyOTQyOTI2WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY4NDg4MDMzMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFcnJvciBIYW5kbGluZyBpbiBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCBhbmQgYGV4dDRfZmNfcmVwbGF5X2lub2RlYCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYG1hcC1cdTAwM2VtX2ZsYWdzID0gMDtgIGlzIGhhbmRsZWQgY29ycmVjdGx5IGluIGBleHQ0X21hcF9ibG9ja3NgLCB3aGljaCBpdCBhcHBlYXJzIHRvIGJlLCByaWdodCBhdCB0aGUgc3RhcnQuIEFuZCBhY3R1YWxseSwgdGhpcyBwYXRjaCBkb2Vzbid0IHNlZW0gdG8gaGF2ZSB0b3VjaGVkIHRoYXQgYXJlYSwgc28gd2UgY2FuIHByb2JhYmx5IG1vdmUgb24uXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IGByZXRgLiBJbiBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCwgYHJldGAgaXMgaW5pdGlhbGl6ZWQgcHJvcGVybHkg4oCTIGBpbnQgbnVtYmxrcyA9IDAsIGksIHJldCA9IDA7YCDigJMgdGhhdCBzZWVtcyBmaW5lLiBCdXQsIHdoYXQgaGFwcGVucyB3aGVuIHdlIGhpdCB0aGUgYGdvdG8gY2xlYW51cDtgIGNhbGxzPyBXZSd2ZSBnb3QgYSBzZXJpZXMgb2YgcG90ZW50aWFsbHkgZXJyb3Itc2V0dGluZyBibG9ja3MgdGhlcmUuIExldCdzIG1ha2Ugc3VyZS4gVGhlIGByZXRgIHZhcmlhYmxlIGlzIHNldCBoZXJlIG9uIGVycm9yIGZyb20gYW55IG9mIHRoZXNlIGZ1bmN0aW9uczogYGV4dDRfbWFwX2Jsb2Nrc2AsIGBza2lwX2hvbGVgLCBvciBpZiBgcGF0aGAgaXMgYW4gZXJyb3IgcG9pbnRlci4gSXQgYWxzbyBhcHBlYXJzIGl0IGNvdWxkIGJlIDAgaWYgYGV4YCBpcyBudWxsIG9yIGlmIGBwYXRoMmAgaXMgYW4gZXJyb3IgcG9pbnRlci4gVGhlbiwgYXQgdGhlIGNsZWFudXAsIHdlIGZyZWUgdGhlIHBhdGhzLCBhbmQgcmV0dXJuIGByZXRgLiBPa2F5LCBzbyBpdCBzZWVtcyBsaWtlIHRoZSBlcnJvciBjb2RlcyBhcmUgYmVpbmcgcHJvcGFnYXRlZCBjb3JyZWN0bHkgdGhyb3VnaCBgcmV0YC5cblxuTm93LCBtb3Zpbmcgb3ZlciB0byBgZXh0NF9mY19yZXBsYXlfaW5vZGVgLCBgcmV0YCBpcyBhbHNvIGFuIGludGVnZXIsIGRlY2xhcmVkIGludGVybmFsbHksIHNvIHRoYXQncyBnb29kLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGxpbmVzIDE5MjUtMTk1MCBpbiBgZnMvZXh0NC9mYXN0X2NvbW1pdC5jYCB0byBtYWtlIHN1cmUgdGhlcmUncyBubyBzdWJ0bGUgaXNzdWUgdGhlcmUuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIHNwZWNpZmljIGVycm9yIGhhbmRsaW5nIGluIHRoaXMgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NzMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MjA6MDMuNTAxNzQ5MzU4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MDA3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L2Zhc3RfY29tbWl0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkyNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTkyNTpcXHRzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuMTkyNjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZXh0NF9mY190bF9tZW0gKnRsLCB1OCAqdmFsKVxcbjE5Mjc6XFx0e1xcbjE5Mjg6XFx0XFx0c3RydWN0IGV4dDRfZmNfaW5vZGUgZmNfaW5vZGU7XFxuMTkyOTpcXHRcXHRzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlO1xcbjE5MzA6XFx0XFx0c3RydWN0IGV4dDRfaW5vZGUgKnJhd19mY19pbm9kZTtcXG4xOTMxOlxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMO1xcbjE5MzI6XFx0XFx0c3RydWN0IGV4dDRfaWxvYyBpbG9jO1xcbjE5MzM6XFx0XFx0aW50IGlub2RlX2xlbiwgaW5vLCByZXQsIHRhZyA9IHRsLVxcdTAwM2VmY190YWc7XFxuMTkzNDpcXHRcXHRzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyICplaDtcXG4xOTM1OlxcdFxcdHNpemVfdCBvZmZfZ2VuID0gb2Zmc2V0b2Yoc3RydWN0IGV4dDRfaW5vZGUsIGlfZ2VuZXJhdGlvbik7XFxuMTkzNjpcXHRcXG4xOTM3OlxcdFxcdG1lbWNweShcXHUwMDI2ZmNfaW5vZGUsIHZhbCwgc2l6ZW9mKGZjX2lub2RlKSk7XFxuMTkzODpcXHRcXG4xOTM5OlxcdFxcdGlubyA9IGxlMzJfdG9fY3B1KGZjX2lub2RlLmZjX2lubyk7XFxuMTk0MDpcXHRcXHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgdGFnLCBpbm8sIDAsIDApO1xcbjE5NDE6XFx0XFxuMTk0MjpcXHRcXHRpbm9kZSA9IGV4dDRfaWdldChzYiwgaW5vLCBFWFQ0X0lHRVRfTk9STUFMKTtcXG4xOTQzOlxcdFxcdGlmICghSVNfRVJSKGlub2RlKSkge1xcbjE5NDQ6XFx0XFx0XFx0ZXh0NF9leHRfY2xlYXJfYmIoaW5vZGUpO1xcbjE5NDU6XFx0XFx0XFx0aXB1dChpbm9kZSk7XFxuMTk0NjpcXHRcXHR9XFxuMTk0NzpcXHRcXHRpbm9kZSA9IE5VTEw7XFxuMTk0ODpcXHRcXG4xOTQ5OlxcdFxcdHJldCA9IGV4dDRfZmNfcmVjb3JkX21vZGlmaWVkX2lub2RlKHNiLCBpbm8pO1xcbjE5NTA6XFx0XFx0aWYgKHJldClcXG4xOTUxOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE5NTI6XFx0XFxuMTk1MzpcXHRcXHRyYXdfZmNfaW5vZGUgPSAoc3RydWN0IGV4dDRfaW5vZGUgKilcXG4xOTU0OlxcdFxcdFxcdCh2YWwgKyBvZmZzZXRvZihzdHJ1Y3QgZXh0NF9mY19pbm9kZSwgZmNfcmF3X2lub2RlKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjIwOjAzLjUwMjAzMzA2OFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzI2MzM4NzYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBleHQ0IEZhc3QgQ29tbWl0IFJlcGxheSBFcnJvciBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgZW5zdXJpbmcgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgS01TQU4tcmVsZXZhbnQgaXNzdWVzIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgaW4gZXh0NC4gVGhlIHBhdGNoJ3MgY29yZSBmdW5jdGlvbiBpcyB0byBpbXByb3ZlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgZXh0NF9mY19yZXBsYXlfaW5vZGVgIGFuZCBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYC4gQmFzaWNhbGx5LCBpdCdzIG1ha2luZyBzdXJlIGVycm9ycyBkdXJpbmcgYmxvY2sgbWFwcGluZyBhbmQgZXh0ZW50IGxvb2t1cCBhcmUgY29ycmVjdGx5IHByb3BhZ2F0ZWQsIGhhbHRpbmcgdGhlIHJlcGxheSBwcm9jZXNzIGlmIGNvcnJ1cHRpb24gb3Igb3RoZXIgaXNzdWVzIGFyZSBkZXRlY3RlZC4gQmVmb3JlLCB0aGUgY29kZSB3YXMsIGluIHNvbWUgY2FzZXMsIGlnbm9yaW5nIGVycm9ycyBmcm9tIGBleHQ0X2ZpbmRfZXh0ZW50YCwgcHJvY2VlZGluZyB3aXRoIHRoZSByZXBsYXksIGFuZCBwb3RlbnRpYWxseSB3cml0aW5nIGNvcnJ1cHRlZCBpbm9kZSBkYXRhIG9yIGNhdXNpbmcgZG93bnN0cmVhbSBjcmFzaGVzLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlIGFyZW4ndCBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIEkgY2FuIHNlZSB0aGF0OlxuXG4qICAgTm8gbmV3IG1lbW9yeSBidWZmZXJzIGFyZSBiZWluZyBhbGxvY2F0ZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZS5cbiogICBUaGVyZSdzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBiZWluZyByZWFkLlxuKiAgIFdlJ3JlIG5vdCBpbnRyb2R1Y2luZyBhbnkgcGFkZGluZyBsZWFrcyB0byB1c2Vyc3BhY2UuXG4qICAgRXJyb3IgY29kZXMgYXJlIGJlaW5nIGV4cGxpY2l0bHkgY2FwdHVyZWQgKGUuZy4sIGBQVFJfRVJSYCkgYW5kIHByb3BhZ2F0ZWQgdXAgdGhlIGNhbGwgc3RhY2suIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSByZXBsYXkgaXMgYWJvcnRlZCB1cG9uIGRldGVjdGluZyBhIGRpc2sgY29ycnVwdGlvbiBvciBvdGhlciBlcnJvci5cblxuTXkgbmV4dCBsaW5lIG9mIHRob3VnaHQgaXMgd2hldGhlciBvciBub3QgdGhlcmUgd2VyZSBwcmV2aW91c2x5IGlnbm9yZWQgZXJyb3JzLCBsZWFkaW5nIHRvIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBvciBzaW1pbGFyIGlzc3Vlcy4gVGhlIHByZXZpb3VzIGNvZGUgY29udGFpbmVkIGEgYGJyZWFrYCBmcm9tIGFuIGVycm9yIGNhdXNlZCBieSBgZXh0NF9maW5kX2V4dGVudGAuIFRoaXMgYGJyZWFrYCB3YXMgbGVhZGluZyB0byBleGVjdXRpb24gdGhhdCBjYWxsZWQgYGV4dDRfZnJlZV9leHRfcGF0aGAsIGJ1dCBgcGF0aGAgd2FzIGFjdHVhbGx5IGFuIGBFUlJfUFRSYCwgYW5kIHRoZSBjb2RlIGRpZCBub3QgaGFuZGxlIHRoYXQgZXJyb3IgZ3JhY2VmdWxseSB3aGljaCBjb3VsZCBsZWFkIHRvIGZpbGUgc3lzdGVtIGNvcnJ1cHRpb24uIFRoZSBwYXRjaCBmaXhlcyB0aGlzLlxuXG5UbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIGdvIG92ZXIgdGhlIGZvdXIgcG9pbnRzIHdoZXJlIEtNU0FOIG1pZ2h0IGJlIHRyaWdnZXJlZDpcblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlKio6IE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSB2aWEgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIGV0Yy4gVGhpcyBjaGVjayBpcyBwYXNzZWQuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyB3aXRoIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzKio6IFRoZSBwYXRjaCBleHBsaWNpdGx5IGluaXRpYWxpemVzIHRoZSByZXR1cm4gdmFyaWFibGUgKGByZXRgKSBhbmQgdXNlcyBleHBsaWNpdCByZXR1cm4gY29kZXMgYW5kIGNoZWNrcy4gVGhpcyBpcyBwYXNzZWQuXG4zLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24qKjogTm8gbmV3IGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hpY2ggbWF5IGNvbnRhaW4gdW5pbml0aWFsaXplZCBmaWVsZHMgYW5kIHRoYXQgbWlnaHQgYmUgcmVhZCBsYXRlciBvbiByZWFjaGFibGUgY29kZSBwYXRocyBpcyBpbnRyb2R1Y2VkLlxuNC4gICoqQm91bmRzIGNoZWNrcyoqOiBXZSBhcmUgc2FmZSBhcyBubyBuZXcgYm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIHRoYXQgd291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycyBhcmUgaW50cm9kdWNlZC5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGl2ZWx5IGZhbHNlIGhlcmUuXG5cblRvIHN1bW1hcml6ZSBmb3IgdGhlIHJlY29yZCwgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYW4gZXJyb3IgaGFuZGxpbmcgZmxhdyBkdXJpbmcgZXh0NCBmYXN0LWNvbW1pdCByZXBsYXkuIEl0IGVuc3VyZXMgdGhhdCBlcnJvcnMgZnJvbSBmdW5jdGlvbnMgbGlrZSBgZXh0NF9tYXBfYmxvY2tzYCwgYHNraXBfaG9sZWAsIGFuZCBgZXh0NF9maW5kX2V4dGVudGAgYXJlIHByb3Blcmx5IGhhbmRsZWQuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IHRoaXMgbW9kaWZpY2F0aW9uIGRvZXMgKm5vdCogaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvcm1hdGlvbiBsZWFrcywgb3IgYW55IG90aGVyIGNvbmRpdGlvbiB0aGF0IGNvdWxkIHRyaWdnZXIgYSBLTVNBTiBhbGVydC4gU3RhbmRhcmQgbWVtb3J5IHNhZmV0eSB0b29scyBsaWtlIEtBU0FOIGFuZCBlcnJvciBoYW5kbGluZyAocGFuaWNzLCBjb3JydXB0aW9uIHJlcG9ydHMpIGFyZSBhcHByb3ByaWF0ZSBoZXJlLCBJJ20gY29uZmlkZW50IHRoYXQgS01TQU4gaXMgbm90IHJlcXVpcmVkIHRvIGRldGVjdCBidWdzIGluIHRoaXMgcGF0Y2guIEkgd2lsbCBwcm9jZWVkIHdpdGggYSBjbGVhciBjb25zY2llbmNlLiBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg0MCwiT3V0cHV0VG9rZW5zIjoyNTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoyMDoyMC43NjU0MjMxMzlaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGV4dDQgZmFzdC1jb21taXQgcmVwbGF5IGNvZGUgKGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcygpIGFuZCBleHQ0X2ZjX3JlcGxheV9pbm9kZSgpKS4gSXQgZW5zdXJlcyB0aGF0IHdoZW4gZXh0NF9tYXBfYmxvY2tzKCksIHNraXBfaG9sZSgpLCBvciBleHQ0X2ZpbmRfZXh0ZW50KCkgZmFpbCwgdGhlIGVycm9yIGNvZGUgaXMgY2FwdHVyZWQsIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSBqdW1wcyB0byBjbGVhbnVwIHdpdGhvdXQgdXBkYXRpbmcgb3IgZGlydHlpbmcgdGhlIGlub2RlLCBhbmQgdGhlIGVycm9yIGlzIHByb3BhZ2F0ZWQgdXAgdGhlIGNhbGwgc3RhY2sgdG8gYWJvcnQgdGhlIHJlcGxheS5cXG5cXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bCwgZXRjLiksIGVsaW1pbmF0aW5nIGFueSByaXNrIG9mIGluZm8tbGVha3MuXFxuLSBObyBuZXcgbWVtb3J5IGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIG9yIGxlZnQgdW5pbml0aWFsaXplZDsgdGhlIG1vZGlmaWVkIGJyYW5jaGluZyByZWxpZXMgc3RyaWN0bHkgb24gcHJvcGVybHkgaW5pdGlhbGl6ZWQvYXNzaWduZWQgcmV0dXJuIHZhbHVlcyBhbmQgZXJyb3IgcG9pbnRlcnMuXFxuLSBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cXG4tIEFueSBidWdzIGNhdXNlZCBieSBjb3JydXB0ZWQgam91cm5hbCByZXBsYXkgKHN1Y2ggYXMgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzKSBmYWxsIHVuZGVyIEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiBleHQ0IGZhc3QtY29tbWl0IHJlcGxheSBjb2RlIChleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoKSBhbmQgZXh0NF9mY19yZXBsYXlfaW5vZGUoKSkuIEl0IGVuc3VyZXMgdGhhdCB3aGVuIGV4dDRfbWFwX2Jsb2NrcygpLCBza2lwX2hvbGUoKSwgb3IgZXh0NF9maW5kX2V4dGVudCgpIGZhaWwsIHRoZSBlcnJvciBjb2RlIGlzIGNhcHR1cmVkLCB0aGUgZnVuY3Rpb24gaW1tZWRpYXRlbHkganVtcHMgdG8gY2xlYW51cCB3aXRob3V0IHVwZGF0aW5nIG9yIGRpcnR5aW5nIHRoZSBpbm9kZSwgYW5kIHRoZSBlcnJvciBpcyBwcm9wYWdhdGVkIHVwIHRoZSBjYWxsIHN0YWNrIHRvIGFib3J0IHRoZSByZXBsYXkuXFxuXFxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcXG4tIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgbmV0bGluaywgaW9jdGwsIGV0Yy4pLCBlbGltaW5hdGluZyBhbnkgcmlzayBvZiBpbmZvLWxlYWtzLlxcbi0gTm8gbmV3IG1lbW9yeSBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBvciBsZWZ0IHVuaW5pdGlhbGl6ZWQ7IHRoZSBtb2RpZmllZCBicmFuY2hpbmcgcmVsaWVzIHN0cmljdGx5IG9uIHByb3Blcmx5IGluaXRpYWxpemVkL2Fzc2lnbmVkIHJldHVybiB2YWx1ZXMgYW5kIGVycm9yIHBvaW50ZXJzLlxcbi0gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXFxuLSBBbnkgYnVncyBjYXVzZWQgYnkgY29ycnVwdGVkIGpvdXJuYWwgcmVwbGF5IChzdWNoIGFzIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcykgZmFsbCB1bmRlciBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucywgbm90IEtNU0FOLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowhr7hw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 01:59:41 +0000 UTC FinishedAt: 2026-09-15 02:20:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "c64eef89-8db1-49cf-9819-4d03f8d5236e" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_ext_replay_set_iblocks", "ext4_fc_replay_inode", "ext4_fc_replay" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3", "base_tree": "linux-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MmIzM0OywKICAgICYjMzQ7ZXh0NF9mY19yZXBsYXlfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF9mY19yZXBsYXkmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiBleHQ0IGZhc3QtY29tbWl0IHJlcGxheSBjb2RlIChleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoKSBhbmQgZXh0NF9mY19yZXBsYXlfaW5vZGUoKSkuIEl0IGVuc3VyZXMgdGhhdCB3aGVuIGV4dDRfbWFwX2Jsb2NrcygpLCBza2lwX2hvbGUoKSwgb3IgZXh0NF9maW5kX2V4dGVudCgpIGZhaWwsIHRoZSBlcnJvciBjb2RlIGlzIGNhcHR1cmVkLCB0aGUgZnVuY3Rpb24gaW1tZWRpYXRlbHkganVtcHMgdG8gY2xlYW51cCB3aXRob3V0IHVwZGF0aW5nIG9yIGRpcnR5aW5nIHRoZSBpbm9kZSwgYW5kIHRoZSBlcnJvciBpcyBwcm9wYWdhdGVkIHVwIHRoZSBjYWxsIHN0YWNrIHRvIGFib3J0IHRoZSByZXBsYXkuXG5cbktNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHk6XG4tIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgbmV0bGluaywgaW9jdGwsIGV0Yy4pLCBlbGltaW5hdGluZyBhbnkgcmlzayBvZiBpbmZvLWxlYWtzLlxuLSBObyBuZXcgbWVtb3J5IGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIG9yIGxlZnQgdW5pbml0aWFsaXplZDsgdGhlIG1vZGlmaWVkIGJyYW5jaGluZyByZWxpZXMgc3RyaWN0bHkgb24gcHJvcGVybHkgaW5pdGlhbGl6ZWQvYXNzaWduZWQgcmV0dXJuIHZhbHVlcyBhbmQgZXJyb3IgcG9pbnRlcnMuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLlxuLSBBbnkgYnVncyBjYXVzZWQgYnkgY29ycnVwdGVkIGpvdXJuYWwgcmVwbGF5IChzdWNoIGFzIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcykgZmFsbCB1bmRlciBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucywgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBwcm9wYWdhdGlvbiBhbmQgY29udHJvbCBmbG93IGR1cmluZyBleHQ0IGZhc3QgY29tbWl0IGpvdXJuYWwgcmVwbGF5LiBJbiBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoKSwgZXJyb3JzIHJldHVybmVkIGJ5IGV4dDRfbWFwX2Jsb2NrcygpLCBza2lwX2hvbGUoKSwgYW5kIGV4dDRfZmluZF9leHRlbnQoKSBhcmUgbm93IHByb3Blcmx5IGNhcHR1cmVkIGFuZCByZXR1cm5lZCBpbnN0ZWFkIG9mIHNpbGVudGx5IGlnbm9yZWQsIGFuZCBleHQ0X2ZjX3JlcGxheV9pbm9kZSgpIGlzIHVwZGF0ZWQgdG8gaGFuZGxlIGFuZCBwcm9wYWdhdGUgZmFpbHVyZXMuIFRoZXNlIGVycm9yLWhhbmRsaW5nIHBhdGhzIGluIGV4dDQgZmlsZXN5c3RlbSByZXBsYXkgYXJlIHJlYWNoYWJsZSBkdXJpbmcgam91cm5hbCByZWNvdmVyeSBhbmQgbW91bnQgb3BlcmF0aW9ucywgbWFraW5nIHRoZW0gcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZyB3aXRoIGNvcnJ1cHRlZCBkaXNrIGltYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQyZTE5ODYyMmRmY2JhMjI1NGI3YzViNmZlN2ZmZTU0YjFkOTFkN2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwMjoxNjo0MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jXG5pbmRleCA3NjAzOGI2YzM2NTUyLi5mOGM4MDVkODBjMzNjIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHRlbnRzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0ZW50cy5jXG5AQCAtNjI3NSw3ICYjNDM7NjI3NSw3IEBAIGludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0bWFwLm1fbGVuID0gZW5kIC0gY3VyO1xuIFx0XHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFx1MDAyNm1hcCwgMCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdGdvdG8gY2xlYW51cDtcbiBcdFx0aWYgKHJldCBcdTAwM2UgMClcbiBcdFx0XHRudW1ibGtzICYjNDM7PSByZXQ7XG4gXHRcdGN1ciA9IGN1ciAmIzQzOyBtYXAubV9sZW47XG5AQCAtNjI5MSwxNSAmIzQzOzYyOTEsMTkgQEAgaW50IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0Y3VyID0gMDtcbiBcdHJldCA9IHNraXBfaG9sZShpbm9kZSwgXHUwMDI2Y3VyKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuIFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aCwgMCk7XG4tXHRpZiAoSVNfRVJSKHBhdGgpKVxuLVx0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoSVNfRVJSKHBhdGgpKSB7XG4mIzQzO1x0XHRyZXQgPSBQVFJfRVJSKHBhdGgpO1xuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdH1cbiBcdG51bWJsa3MgJiM0Mzs9IHBhdGgtXHUwMDNlcF9kZXB0aDtcbiBcdHdoaWxlIChjdXIgXHUwMDNjIGVuZCkge1xuIFx0XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoLCAwKTtcbi1cdFx0aWYgKElTX0VSUihwYXRoKSlcbi1cdFx0XHRicmVhaztcbiYjNDM7XHRcdGlmIChJU19FUlIocGF0aCkpIHtcbiYjNDM7XHRcdFx0cmV0ID0gUFRSX0VSUihwYXRoKTtcbiYjNDM7XHRcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdFx0fVxuIFx0XHRleCA9IHBhdGhbcGF0aC1cdTAwM2VwX2RlcHRoXS5wX2V4dDtcbiBcdFx0aWYgKCFleClcbiBcdFx0XHRnb3RvIGNsZWFudXA7XG5AQCAtNjMwOCwxMSAmIzQzOzYzMTIsMTMgQEAgaW50IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRcdFx0XHRleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbihleCkpO1xuIFx0XHRyZXQgPSBza2lwX2hvbGUoaW5vZGUsIFx1MDAyNmN1cik7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdGdvdG8gY2xlYW51cDtcbiBcbiBcdFx0cGF0aDIgPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBjdXIsIHBhdGgyLCAwKTtcbi1cdFx0aWYgKElTX0VSUihwYXRoMikpXG4tXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKHBhdGgyKSkge1xuJiM0MztcdFx0XHRyZXQgPSBQVFJfRVJSKHBhdGgyKTtcbiYjNDM7XHRcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gbWF4KHBhdGgtXHUwMDNlcF9kZXB0aCwgcGF0aDItXHUwMDNlcF9kZXB0aCk7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdFx0Y21wMSA9IGNtcDIgPSAwO1xuQEAgLTYzMzMsNyAmIzQzOzYzMzksNyBAQCBpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gY2xlYW51cDpcbiBcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcbiBcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoMik7XG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBpbnQgZXh0NF9leHRfY2xlYXJfYmIoc3RydWN0IGlub2RlICppbm9kZSlcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2Zhc3RfY29tbWl0LmMgYi9mcy9leHQ0L2Zhc3RfY29tbWl0LmNcbmluZGV4IDBjYWM4OTBjZjM3MDIuLjgxMTBiMDFlMzZjMTEgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2Zhc3RfY29tbWl0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZmFzdF9jb21taXQuY1xuQEAgLTIwMDIsOCAmIzQzOzIwMDIsMTEgQEAgc3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0ICogY3Jhc2hpbmcuIFRoaXMgc2hvdWxkIGJlIGZpeGVkIGJ1dCB1bnRpbCB0aGVuLCB3ZSBjYWxjdWxhdGVcbiBcdCAqIHRoZSBudW1iZXIgb2YgYmxvY2tzIHRoZSBpbm9kZS5cbiBcdCAqL1xuLVx0aWYgKCFleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSkpXG4tXHRcdGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrcyhpbm9kZSk7XG4mIzQzO1x0aWYgKCFleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSkpIHtcbiYjNDM7XHRcdHJldCA9IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrcyhpbm9kZSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dF9icmVsc2U7XG4mIzQzO1x0fVxuIFxuIFx0aW5vZGUtXHUwMDNlaV9nZW5lcmF0aW9uID0gbGUzMl90b19jcHUoZXh0NF9yYXdfaW5vZGUoXHUwMDI2aWxvYyktXHUwMDNlaV9nZW5lcmF0aW9uKTtcbiBcdGV4dDRfcmVzZXRfaW5vZGVfc2VlZChpbm9kZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyYjMzQ7LAogICAgJiMzNDtleHQ0X2ZjX3JlcGxheV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X2ZjX3JlcGxheSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBwcm9wYWdhdGlvbiBhbmQgY29udHJvbCBmbG93IGR1cmluZyBleHQ0IGZhc3QgY29tbWl0IGpvdXJuYWwgcmVwbGF5LiBJbiBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoKSwgZXJyb3JzIHJldHVybmVkIGJ5IGV4dDRfbWFwX2Jsb2NrcygpLCBza2lwX2hvbGUoKSwgYW5kIGV4dDRfZmluZF9leHRlbnQoKSBhcmUgbm93IHByb3Blcmx5IGNhcHR1cmVkIGFuZCByZXR1cm5lZCBpbnN0ZWFkIG9mIHNpbGVudGx5IGlnbm9yZWQsIGFuZCBleHQ0X2ZjX3JlcGxheV9pbm9kZSgpIGlzIHVwZGF0ZWQgdG8gaGFuZGxlIGFuZCBwcm9wYWdhdGUgZmFpbHVyZXMuIFRoZXNlIGVycm9yLWhhbmRsaW5nIHBhdGhzIGluIGV4dDQgZmlsZXN5c3RlbSByZXBsYXkgYXJlIHJlYWNoYWJsZSBkdXJpbmcgam91cm5hbCByZWNvdmVyeSBhbmQgbW91bnQgb3BlcmF0aW9ucywgbWFraW5nIHRoZW0gcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZyB3aXRoIGNvcnJ1cHRlZCBkaXNrIGltYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQyZTE5ODYyMmRmY2JhMjI1NGI3YzViNmZlN2ZmZTU0YjFkOTFkN2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxNSAwMjoxNjo0MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50cy5jIGIvZnMvZXh0NC9leHRlbnRzLmMKaW5kZXggNzYwMzhiNmMzNjU1Mi4uZjhjODA1ZDgwYzMzYyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHRlbnRzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9leHRlbnRzLmMKQEAgLTYyNzUsNyAmIzQzOzYyNzUsNyBAQCBpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJCW1hcC5tX2xlbiA9IGVuZCAtIGN1cjsKIAkJcmV0ID0gZXh0NF9tYXBfYmxvY2tzKE5VTEwsIGlub2RlLCAmYW1wO21hcCwgMCk7CiAJCWlmIChyZXQgJmx0OyAwKQotCQkJYnJlYWs7CiYjNDM7CQkJZ290byBjbGVhbnVwOwogCQlpZiAocmV0ICZndDsgMCkKIAkJCW51bWJsa3MgJiM0Mzs9IHJldDsKIAkJY3VyID0gY3VyICYjNDM7IG1hcC5tX2xlbjsKQEAgLTYyOTEsMTUgJiM0Mzs2MjkxLDE5IEBAIGludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSkKIAljdXIgPSAwOwogCXJldCA9IHNraXBfaG9sZShpbm9kZSwgJmFtcDtjdXIpOwogCWlmIChyZXQgJmx0OyAwKQotCQlnb3RvIG91dDsKJiM0MzsJCWdvdG8gY2xlYW51cDsKIAlwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoLCAwKTsKLQlpZiAoSVNfRVJSKHBhdGgpKQotCQlnb3RvIG91dDsKJiM0MzsJaWYgKElTX0VSUihwYXRoKSkgewomIzQzOwkJcmV0ID0gUFRSX0VSUihwYXRoKTsKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQogCW51bWJsa3MgJiM0Mzs9IHBhdGgtJmd0O3BfZGVwdGg7CiAJd2hpbGUgKGN1ciAmbHQ7IGVuZCkgewogCQlwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoLCAwKTsKLQkJaWYgKElTX0VSUihwYXRoKSkKLQkJCWJyZWFrOwomIzQzOwkJaWYgKElTX0VSUihwYXRoKSkgewomIzQzOwkJCXJldCA9IFBUUl9FUlIocGF0aCk7CiYjNDM7CQkJZ290byBjbGVhbnVwOwomIzQzOwkJfQogCQlleCA9IHBhdGhbcGF0aC0mZ3Q7cF9kZXB0aF0ucF9leHQ7CiAJCWlmICghZXgpCiAJCQlnb3RvIGNsZWFudXA7CkBAIC02MzA4LDExICYjNDM7NjMxMiwxMyBAQCBpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJCQkJCWV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4KSk7CiAJCXJldCA9IHNraXBfaG9sZShpbm9kZSwgJmFtcDtjdXIpOwogCQlpZiAocmV0ICZsdDsgMCkKLQkJCWJyZWFrOwomIzQzOwkJCWdvdG8gY2xlYW51cDsKIAogCQlwYXRoMiA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aDIsIDApOwotCQlpZiAoSVNfRVJSKHBhdGgyKSkKLQkJCWJyZWFrOwomIzQzOwkJaWYgKElTX0VSUihwYXRoMikpIHsKJiM0MzsJCQlyZXQgPSBQVFJfRVJSKHBhdGgyKTsKJiM0MzsJCQlnb3RvIGNsZWFudXA7CiYjNDM7CQl9CiAKIAkJZm9yIChpID0gMDsgaSAmbHQ7PSBtYXgocGF0aC0mZ3Q7cF9kZXB0aCwgcGF0aDItJmd0O3BfZGVwdGgpOyBpJiM0MzsmIzQzOykgewogCQkJY21wMSA9IGNtcDIgPSAwOwpAQCAtNjMzMyw3ICYjNDM7NjMzOSw3IEBAIGludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSkKIGNsZWFudXA6CiAJZXh0NF9mcmVlX2V4dF9wYXRoKHBhdGgpOwogCWV4dDRfZnJlZV9leHRfcGF0aChwYXRoMik7Ci0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIGludCBleHQ0X2V4dF9jbGVhcl9iYihzdHJ1Y3QgaW5vZGUgKmlub2RlKQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9mYXN0X2NvbW1pdC5jIGIvZnMvZXh0NC9mYXN0X2NvbW1pdC5jCmluZGV4IDBjYWM4OTBjZjM3MDIuLjgxMTBiMDFlMzZjMTEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZmFzdF9jb21taXQuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2Zhc3RfY29tbWl0LmMKQEAgLTIwMDIsOCAmIzQzOzIwMDIsMTEgQEAgc3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCSAqIGNyYXNoaW5nLiBUaGlzIHNob3VsZCBiZSBmaXhlZCBidXQgdW50aWwgdGhlbiwgd2UgY2FsY3VsYXRlCiAJICogdGhlIG51bWJlciBvZiBibG9ja3MgdGhlIGlub2RlLgogCSAqLwotCWlmICghZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpKQotCQlleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoaW5vZGUpOwomIzQzOwlpZiAoIWV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSkgewomIzQzOwkJcmV0ID0gZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKGlub2RlKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBvdXRfYnJlbHNlOwomIzQzOwl9CiAKIAlpbm9kZS0mZ3Q7aV9nZW5lcmF0aW9uID0gbGUzMl90b19jcHUoZXh0NF9yYXdfaW5vZGUoJmFtcDtpbG9jKS0mZ3Q7aV9nZW5lcmF0aW9uKTsKIAlleHQ0X3Jlc2V0X2lub2RlX3NlZWQoaW5vZGUpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzcyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipBbmFseXppbmcgdGhlIEV4dDQgRmlsZSBTeXN0ZW0gUGF0Y2gqKgoKT2theSwgc28gdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBmcy9leHQ0L2V4dGVudHMuY2AgYW5kIGBmcy9leHQ0L2Zhc3RfY29tbWl0LmNgLiBUaGF0IG5hcnJvd3MgZG93biB0aGUgYXJlYSBvZiBjb25jZXJuIHNpZ25pZmljYW50bHkuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBgZnMvZXh0NGAgZGlyZWN0b3J5IGFuZCBzdGFydCBpbnNwZWN0aW5nIHRoZSBkaWZmLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgdG8gdGhlIGV4dGVudCBoYW5kbGluZyBhbmQgZmFzdCBjb21taXQgbWVjaGFuaXNtcy4gVGhlc2UgYXJlIGZ1bmRhbWVudGFsIHRvIEV4dDQmIzM5O3MgcGVyZm9ybWFuY2UgYW5kIGRhdGEgaW50ZWdyaXR5LCBzbyBJJiMzOTtsbCBuZWVkIGEgZ29vZCBncmFzcCBvZiB0aGUgY29udGV4dC4KCkkmIzM5O2xsIGJlIHJlYWNoaW5nIGZvciBteSB0b29scy4gSSYjMzk7bGwgcHJvYmFibHkgdXNlIGEgYHJlYWQtZmlsZWAgY29tbWFuZCwgaWYgYXZhaWxhYmxlLCBvciBldmVuIGBncmVwcGVyYCB0byBxdWlja2x5IGxvY2F0ZSB3aGVyZSBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCBhbmQgYGV4dDRfZmNfcmVwbGF5X2lub2RlYCBhcmUgZGVmaW5lZCBhbmQgdXNlZC4gVW5kZXJzdGFuZGluZyB0aGUgcHVycG9zZSBvZiB0aG9zZSBzcGVjaWZpYyBmdW5jdGlvbnMgd2lsbCBiZSBjcnVjaWFsLiBSZXBsYXkgb3BlcmF0aW9ucyBhcmUgYWxtb3N0IGFsd2F5cyBjcml0aWNhbCB0byBlbnN1cmluZyBjb25zaXN0ZW5jeSBhZnRlciBhIGNyYXNoIG9yIHBvd2VyIGZhaWx1cmUsIHNvIEkmIzM5O20gZXhwZWN0aW5nIHNvbWV0aGluZyBpbXBvcnRhbnQgdG8gYmUgaGFwcGVuaW5nIHRoZXJlLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGJsb2NrIGFsbG9jYXRpb24gb3IgaW5vZGUgc3RhdGUgZHVyaW5nIHJlY292ZXJ5LiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2V4dGVudHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYyNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjI2NTpcdFx0XHRyZXR1cm4gUFRSX0VSUihwYXRoKTtcbjYyNjY6XHRcdGV4ID0gcGF0aFtwYXRoLVx1MDAzZXBfZGVwdGhdLnBfZXh0O1xuNjI2NzpcdFx0aWYgKCFleClcbjYyNjg6XHRcdFx0Z290byBvdXQ7XG42MjY5Olx0XHRlbmQgPSBsZTMyX3RvX2NwdShleC1cdTAwM2VlZV9ibG9jaykgJiM0MzsgZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oZXgpO1xuNjI3MDpcdFxuNjI3MTpcdFx0LyogQ291bnQgdGhlIG51bWJlciBvZiBkYXRhIGJsb2NrcyAqL1xuNjI3MjpcdFx0Y3VyID0gMDtcbjYyNzM6XHRcdHdoaWxlIChjdXIgXHUwMDNjIGVuZCkge1xuNjI3NDpcdFx0XHRtYXAubV9sYmxrID0gY3VyO1xuNjI3NTpcdFx0XHRtYXAubV9sZW4gPSBlbmQgLSBjdXI7XG42Mjc2Olx0XHRcdHJldCA9IGV4dDRfbWFwX2Jsb2NrcyhOVUxMLCBpbm9kZSwgXHUwMDI2bWFwLCAwKTtcbjYyNzc6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjYyNzg6XHRcdFx0XHRnb3RvIGNsZWFudXA7XG42Mjc5Olx0XHRcdGlmIChyZXQgXHUwMDNlIDApXG42MjgwOlx0XHRcdFx0bnVtYmxrcyAmIzQzOz0gcmV0O1xuNjI4MTpcdFx0XHRjdXIgPSBjdXIgJiM0MzsgbWFwLm1fbGVuO1xuNjI4MjpcdFx0fVxuNjI4MzpcdFxuNjI4NDpcdFx0LypcbjYyODU6XHRcdCAqIENvdW50IHRoZSBudW1iZXIgb2YgZXh0ZW50IHRyZWUgYmxvY2tzLiBXZSBkbyBpdCBieSBsb29raW5nIHVwXG42Mjg2Olx0XHQgKiB0d28gc3VjY2Vzc2l2ZSBleHRlbnRzIGFuZCBkZXRlcm1pbmluZyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuXG42Mjg3Olx0XHQgKiB0aGVpciBwYXRocy4gV2hlbiBwYXRoIGlzIGRpZmZlcmVudCBmb3IgMiBzdWNjZXNzaXZlIGV4dGVudHNcbjYyODg6XHRcdCAqIHdlIGNvbXBhcmUgdGhlIGJsb2NrcyBpbiB0aGUgcGF0aCBhdCBlYWNoIGxldmVsIGFuZCBpbmNyZW1lbnRcbjYyODk6XHRcdCAqIGlibG9ja3MgYnkgdG90YWwgbnVtYmVyIG9mIGRpZmZlcmVuY2VzIGZvdW5kLlxuNjI5MDpcdFx0ICovXG42MjkxOlx0XHRjdXIgPSAwO1xuNjI5MjpcdFx0cmV0ID0gc2tpcF9ob2xlKGlub2RlLCBcdTAwMjZjdXIpO1xuNjI5MzpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjYyOTQ6XHRcdFx0Z290byBjbGVhbnVwO1xuNjI5NTpcdFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aCwgMCk7XG42Mjk2Olx0XHRpZiAoSVNfRVJSKHBhdGgpKSB7XG42Mjk3Olx0XHRcdHJldCA9IFBUUl9FUlIocGF0aCk7XG42Mjk4Olx0XHRcdGdvdG8gY2xlYW51cDtcbjYyOTk6XHRcdH1cbjYzMDA6XHRcdG51bWJsa3MgJiM0Mzs9IHBhdGgtXHUwMDNlcF9kZXB0aDtcbjYzMDE6XHRcdHdoaWxlIChjdXIgXHUwMDNjIGVuZCkge1xuNjMwMjpcdFx0XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoLCAwKTtcbjYzMDM6XHRcdFx0aWYgKElTX0VSUihwYXRoKSkge1xuNjMwNDpcdFx0XHRcdHJldCA9IFBUUl9FUlIocGF0aCk7XG42MzA1Olx0XHRcdFx0Z290byBjbGVhbnVwO1xuNjMwNjpcdFx0XHR9XG42MzA3Olx0XHRcdGV4ID0gcGF0aFtwYXRoLVx1MDAzZXBfZGVwdGhdLnBfZXh0O1xuNjMwODpcdFx0XHRpZiAoIWV4KVxuNjMwOTpcdFx0XHRcdGdvdG8gY2xlYW51cDtcbjYzMTA6XHRcbjYzMTE6XHRcdFx0Y3VyID0gbWF4KGN1ciAmIzQzOyAxLCBsZTMyX3RvX2NwdShleC1cdTAwM2VlZV9ibG9jaykgJiM0MztcbjYzMTI6XHRcdFx0XHRcdFx0ZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oZXgpKTtcbjYzMTM6XHRcdFx0cmV0ID0gc2tpcF9ob2xlKGlub2RlLCBcdTAwMjZjdXIpO1xuNjMxNDpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuNjMxNTpcdFx0XHRcdGdvdG8gY2xlYW51cDtcbjYzMTY6XHRcbjYzMTc6XHRcdFx0cGF0aDIgPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBjdXIsIHBhdGgyLCAwKTtcbjYzMTg6XHRcdFx0aWYgKElTX0VSUihwYXRoMikpIHtcbjYzMTk6XHRcdFx0XHRyZXQgPSBQVFJfRVJSKHBhdGgyKTtcbjYzMjA6XHRcdFx0XHRnb3RvIGNsZWFudXA7XG42MzIxOlx0XHRcdH1cbjYzMjI6XHRcbjYzMjM6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2M9IG1heChwYXRoLVx1MDAzZXBfZGVwdGgsIHBhdGgyLVx1MDAzZXBfZGVwdGgpOyBpJiM0MzsmIzQzOykge1xuNjMyNDpcdFx0XHRcdGNtcDEgPSBjbXAyID0gMDtcbjYzMjU6XHRcdFx0XHRpZiAoaSBcdTAwM2M9IHBhdGgtXHUwMDNlcF9kZXB0aClcbjYzMjY6XHRcdFx0XHRcdGNtcDEgPSBwYXRoW2ldLnBfYmggP1xuNjMyNzpcdFx0XHRcdFx0XHRwYXRoW2ldLnBfYmgtXHUwMDNlYl9ibG9ja25yIDogMDtcbjYzMjg6XHRcdFx0XHRpZiAoaSBcdTAwM2M9IHBhdGgyLVx1MDAzZXBfZGVwdGgpXG42MzI5Olx0XHRcdFx0XHRjbXAyID0gcGF0aDJbaV0ucF9iaCA/XG42MzMwOlx0XHRcdFx0XHRcdHBhdGgyW2ldLnBfYmgtXHUwMDNlYl9ibG9ja25yIDogMDtcbjYzMzE6XHRcdFx0XHRpZiAoY21wMSAhPSBjbXAyIFx1MDAyNlx1MDAyNiBjbXAyICE9IDApXG42MzMyOlx0XHRcdFx0XHRudW1ibGtzJiM0MzsmIzQzOztcbjYzMzM6XHRcdFx0fVxuNjMzNDpcdFx0fVxuNjMzNTpcdFxuNjMzNjpcdG91dDpcbjYzMzc6XHRcdGlub2RlLVx1MDAzZWlfYmxvY2tzID0gbnVtYmxrcyBcdTAwM2NcdTAwM2MgKGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cyAtIDkpO1xuNjMzODpcdFx0ZXh0NF9tYXJrX2lub2RlX2RpcnR5KE5VTEwsIGlub2RlKTtcbjYzMzk6XHRjbGVhbnVwOlxuNjM0MDpcdFx0ZXh0NF9mcmVlX2V4dF9wYXRoKHBhdGgpO1xuNjM0MTpcdFx0ZXh0NF9mcmVlX2V4dF9wYXRoKHBhdGgyKTtcbjYzNDI6XHRcdHJldHVybiByZXQ7XG42MzQzOlx0fVxuNjM0NDpcdFxuNjM0NTpcdGludCBleHQ0X2V4dF9jbGVhcl9iYihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuNjM0NjpcdHtcbjYzNDc6XHRcdHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoID0gTlVMTDtcbjYzNDg6XHRcdHN0cnVjdCBleHQ0X2V4dGVudCAqZXg7XG42MzQ5Olx0XHRleHQ0X2xibGtfdCBjdXIgPSAwLCBlbmQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ3MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZywgJiMzNDtUaW1lIHRvIGZvY3VzIG9uIHRoZSBzdGFydGluZyBwb2ludCBvZiBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCB3aXRoaW4gdGhlIGBmcy9leHQ0L2V4dGVudHMuY2AgZmlsZS4mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uJiMzOTtzIGluaXRpYWwgc2V0dXAgYW5kIGhvdyBpdCBiZWdpbnMgdGhlIHJlcGxheSBwcm9jZXNzIGZvciBleHRlbnQtYmFzZWQgaW5vZGVzLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgb3ZlcmFsbCBkZXNpZ24sIHdoZXJlIGl0IGJlZ2lucyB0aGUgcHJvY2VzcywgYW5kIHdoYXQgaXQgZG9lcyBmaXJzdC4gS25vd2luZyBpdHMgaW5pdGlhbCBvcGVyYXRpb25zIGlzIGNydWNpYWwgZm9yIGRlY2lwaGVyaW5nIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBleHRlbnQgcmVwbGF5IG1lY2hhbmlzbS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB2YXJpYWJsZXMgaXQmIzM5O3MgdXNpbmcgYW5kIGhvdyBpdCYjMzk7cyBzZXR0aW5nIHRoaW5ncyB1cCBiZWZvcmUgZGl2aW5nIGludG8gdGhlIGNvcmUgbG9naWMuIFRpbWUgdG8gZ2V0IHN0YXJ0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2V4dGVudHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYyNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjI0MDpcdFx0bWFwLm1fbGVuID0gKChpbm9kZS1cdTAwM2VpX3NpemUpIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHMpIC0gKmN1cjtcbjYyNDE6XHRcbjYyNDI6XHRcdHJldCA9IGV4dDRfbWFwX2Jsb2NrcyhOVUxMLCBpbm9kZSwgXHUwMDI2bWFwLCAwKTtcbjYyNDM6XHRcdGlmIChyZXQgXHUwMDNjIDApXG42MjQ0Olx0XHRcdHJldHVybiByZXQ7XG42MjQ1Olx0XHRpZiAocmV0ICE9IDApXG42MjQ2Olx0XHRcdHJldHVybiAwO1xuNjI0NzpcdFx0KmN1ciA9ICpjdXIgJiM0MzsgbWFwLm1fbGVuO1xuNjI0ODpcdFx0cmV0dXJuIDA7XG42MjQ5Olx0fVxuNjI1MDpcdFxuNjI1MTpcdC8qIENvdW50IG51bWJlciBvZiBibG9ja3MgdXNlZCBieSB0aGlzIGlub2RlIGFuZCB1cGRhdGUgaV9ibG9ja3MgKi9cbjYyNTI6XHRpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG42MjUzOlx0e1xuNjI1NDpcdFx0c3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGggPSBOVUxMLCAqcGF0aDIgPSBOVUxMO1xuNjI1NTpcdFx0c3RydWN0IGV4dDRfZXh0ZW50ICpleDtcbjYyNTY6XHRcdGV4dDRfbGJsa190IGN1ciA9IDAsIGVuZDtcbjYyNTc6XHRcdGludCBudW1ibGtzID0gMCwgaSwgcmV0ID0gMDtcbjYyNTg6XHRcdGV4dDRfZnNibGtfdCBjbXAxLCBjbXAyO1xuNjI1OTpcdFx0c3RydWN0IGV4dDRfbWFwX2Jsb2NrcyBtYXA7XG42MjYwOlx0XG42MjYxOlx0XHQvKiBEZXRlcm1pbiB0aGUgc2l6ZSBvZiB0aGUgZmlsZSBmaXJzdCAqL1xuNjI2MjpcdFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIEVYVF9NQVhfQkxPQ0tTIC0gMSwgTlVMTCxcbjYyNjM6XHRcdFx0XHRcdFx0RVhUNF9FWF9OT0NBQ0hFKTtcbjYyNjQ6XHRcdGlmIChJU19FUlIocGF0aCkpXG42MjY1Olx0XHRcdHJldHVybiBQVFJfRVJSKHBhdGgpO1xuNjI2NjpcdFx0ZXggPSBwYXRoW3BhdGgtXHUwMDNlcF9kZXB0aF0ucF9leHQ7XG42MjY3Olx0XHRpZiAoIWV4KVxuNjI2ODpcdFx0XHRnb3RvIG91dDtcbjYyNjk6XHRcdGVuZCA9IGxlMzJfdG9fY3B1KGV4LVx1MDAzZWVlX2Jsb2NrKSAmIzQzOyBleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbihleCk7XG42MjcwOlx0XG42MjcxOlx0XHQvKiBDb3VudCB0aGUgbnVtYmVyIG9mIGRhdGEgYmxvY2tzICovXG42MjcyOlx0XHRjdXIgPSAwO1xuNjI3MzpcdFx0d2hpbGUgKGN1ciBcdTAwM2MgZW5kKSB7XG42Mjc0Olx0XHRcdG1hcC5tX2xibGsgPSBjdXI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMyMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZm9jdXNpbmcgb24gYGZzL2V4dDQvZmFzdF9jb21taXQuY2AgYXJvdW5kIGxpbmUgMjAwMi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvZmFzdF9jb21taXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk4MDpcdFx0LyogSW1tZWRpYXRlbHkgdXBkYXRlIHRoZSBpbm9kZSBvbiBkaXNrLiAqL1xuMTk4MTpcdFx0cmV0ID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoTlVMTCwgTlVMTCwgaWxvYy5iaCk7XG4xOTgyOlx0XHRpZiAocmV0KVxuMTk4MzpcdFx0XHRnb3RvIG91dF9icmVsc2U7XG4xOTg0Olx0XHRyZXQgPSBzeW5jX2RpcnR5X2J1ZmZlcihpbG9jLmJoKTtcbjE5ODU6XHRcdGlmIChyZXQpXG4xOTg2Olx0XHRcdGdvdG8gb3V0X2JyZWxzZTtcbjE5ODc6XHRcdHJldCA9IGV4dDRfbWFya19pbm9kZV91c2VkKHNiLCBpbm8pO1xuMTk4ODpcdFx0aWYgKHJldClcbjE5ODk6XHRcdFx0Z290byBvdXRfYnJlbHNlO1xuMTk5MDpcdFxuMTk5MTpcdFx0LyogR2l2ZW4gdGhhdCB3ZSBqdXN0IHdyb3RlIHRoZSBpbm9kZSBvbiBkaXNrLCB0aGlzIFNIT1VMRCBzdWNjZWVkLiAqL1xuMTk5MjpcdFx0aW5vZGUgPSBleHQ0X2lnZXQoc2IsIGlubywgRVhUNF9JR0VUX05PUk1BTCk7XG4xOTkzOlx0XHRpZiAoSVNfRVJSKGlub2RlKSkge1xuMTk5NDpcdFx0XHRleHQ0X2RlYnVnKFwmIzM0O0lub2RlIG5vdCBmb3VuZC5cJiMzNDspO1xuMTk5NTpcdFx0XHRpbm9kZSA9IE5VTEw7XG4xOTk2Olx0XHRcdHJldCA9IC1FRlNDT1JSVVBURUQ7XG4xOTk3Olx0XHRcdGdvdG8gb3V0X2JyZWxzZTtcbjE5OTg6XHRcdH1cbjE5OTk6XHRcbjIwMDA6XHRcdC8qXG4yMDAxOlx0XHQgKiBPdXIgYWxsb2NhdG9yIGNvdWxkIGhhdmUgbWFkZSBkaWZmZXJlbnQgZGVjaXNpb25zIHRoYW4gYmVmb3JlXG4yMDAyOlx0XHQgKiBjcmFzaGluZy4gVGhpcyBzaG91bGQgYmUgZml4ZWQgYnV0IHVudGlsIHRoZW4sIHdlIGNhbGN1bGF0ZVxuMjAwMzpcdFx0ICogdGhlIG51bWJlciBvZiBibG9ja3MgdGhlIGlub2RlLlxuMjAwNDpcdFx0ICovXG4yMDA1Olx0XHRpZiAoIWV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSkge1xuMjAwNjpcdFx0XHRyZXQgPSBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoaW5vZGUpO1xuMjAwNzpcdFx0XHRpZiAocmV0KVxuMjAwODpcdFx0XHRcdGdvdG8gb3V0X2JyZWxzZTtcbjIwMDk6XHRcdH1cbjIwMTA6XHRcbjIwMTE6XHRcdGlub2RlLVx1MDAzZWlfZ2VuZXJhdGlvbiA9IGxlMzJfdG9fY3B1KGV4dDRfcmF3X2lub2RlKFx1MDAyNmlsb2MpLVx1MDAzZWlfZ2VuZXJhdGlvbik7XG4yMDEyOlx0XHRleHQ0X3Jlc2V0X2lub2RlX3NlZWQoaW5vZGUpO1xuMjAxMzpcdFxuMjAxNDpcdFx0ZXh0NF9pbm9kZV9jc3VtX3NldChpbm9kZSwgZXh0NF9yYXdfaW5vZGUoXHUwMDI2aWxvYyksIEVYVDRfSShpbm9kZSkpO1xuMjAxNTpcdFx0cmV0ID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoTlVMTCwgTlVMTCwgaWxvYy5iaCk7XG4yMDE2Olx0XHRzeW5jX2RpcnR5X2J1ZmZlcihpbG9jLmJoKTtcbjIwMTc6XHRvdXRfYnJlbHNlOlxuMjAxODpcdFx0YnJlbHNlKGlsb2MuYmgpO1xuMjAxOTpcdG91dDpcbjIwMjA6XHRcdGlwdXQoaW5vZGUpO1xuMjAyMTpcdFx0aWYgKCFyZXQpXG4yMDIyOlx0XHRcdGJsa2Rldl9pc3N1ZV9mbHVzaChzYi1cdTAwM2VzX2JkZXYpO1xuMjAyMzpcdFxuMjAyNDpcdFx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTM2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBGaXg6IERlZXAgRGl2ZSBpbnRvIHRoZSBDb21taXQgSGlzdG9yeSoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBwYXRjaCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCBpdC4gTXkgZmlyc3QgbW92ZSBpcyBhbHdheXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZTogdGhlIGNvbW1pdCBoaXN0b3J5LCB0aGUgYGdpdCBsb2dgLiBXaGF0IHNwZWNpZmljIGlzc3VlIHdlcmUgd2UgYWRkcmVzc2luZyB3aXRoIHRoaXMgY2hhbmdlPyBJJiMzOTttIG5vdCBnb2luZyB0byBiZSBjb250ZW50IHdpdGgganVzdCBhIHZhZ3VlIGRlc2NyaXB0aW9uLiBJIG5lZWQgdG8gc2VlIHRoZSBjb250ZXh0IOKAkyB0aGUgYnVnIHJlcG9ydCAoSmlyYSwgR2l0SHViIGlzc3VlLCB3aGF0ZXZlciBvdXIgc3lzdGVtIGlzKSwgdGhlIGRpc2N1c3Npb24sIG1heWJlIGV2ZW4gdGhlIHByZWxpbWluYXJ5IGF0dGVtcHRzIHRvIGZpeCBpdC4gS25vd2luZyB0aGUgcHJvYmxlbSBsYW5kc2NhcGUgaXMgYWJzb2x1dGVseSBjcml0aWNhbCBiZWZvcmUgSSBjYW4gYmVnaW4gdG8gYXNzZXNzIHRoZSBxdWFsaXR5IG9mIHRoZSBzb2x1dGlvbi4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgKnJlYXNvbmluZyogYmVoaW5kIHRoZSBmaXgsIGFuZCBkZXRlcm1pbmUgaWYgdGhlIHJvb3QgY2F1c2Ugd2FzIHByb3Blcmx5IGFkZHJlc3NlZCBvciBpZiB0aGlzIGlzIG1lcmVseSBhIGJhbmQtYWlkLiBEaWdnaW5nIGludG8gdGhlIGBnaXQgbG9nYCBpcyB0aGUgZmlyc3Qgc3RlcCBpbiBkZXRlcm1pbmluZyB0aGUgcHJvcGVyIGFzc2Vzc21lbnQgb2YgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9Mzk1NT1leHRlcm4gdm9pZCBleHQ0X2V4dF9yZXBsYXlfc2hyaW5rX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGVuZCk7XG5mcy9leHQ0L2V4dDQuaDozOTU2OmV4dGVybiBpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvZXh0NC9leHQ0LmgtMzk1Ny1leHRlcm4gaW50IGV4dDRfZXh0X3JlcGxheV91cGRhdGVfZXgoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3Qgc3RhcnQsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NjIzND1zdGF0aWMgaW50IHNraXBfaG9sZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCAqY3VyKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTYyNTEtLyogQ291bnQgbnVtYmVyIG9mIGJsb2NrcyB1c2VkIGJ5IHRoaXMgaW5vZGUgYW5kIHVwZGF0ZSBpX2Jsb2NrcyAqL1xuZnMvZXh0NC9leHRlbnRzLmM6NjI1MjppbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L2V4dGVudHMuYy02MjUzLXtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTkyNT1zdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwMDUtXHRpZiAoIWV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSkge1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIwMDY6XHRcdHJldCA9IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrcyhpbm9kZSk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjAwNy1cdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc5MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdW5kZXJzdGFuZGluZyB0aGUgaW1wbGVtZW50YXRpb24gb2YgZmFzdCBjb21taXQgcmVwbGF5IGluIGV4dDQ6CgoqKkFuYWx5emluZyBleHQ0JiMzOTtzIEZhc3QgQ29tbWl0IFJlcGxheSoqCgpSaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBleHQ0X2ZjX3JlcGxheWAgZnVuY3Rpb24gKG9yIHNpbWlsYXIgbmFtZSBpZiBJJiMzOTttIG9mZiBzbGlnaHRseSkgaXMgYWN0dWFsbHkgKmNhbGxlZCogd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0gY29kZS4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGNvZGViYXNlLCBpcyB0byBzaW1wbHkgdXNlIGBncmVwYC4gSSYjMzk7bGwgc2VhcmNoIHRoZSBleHQ0IHNvdXJjZSB0cmVlIGZvciBgZXh0NF9mY19yZXBsYXlgLiBJZiB0aGF0IGNvbWVzIHVwIGVtcHR5LCBJJiMzOTtsbCBzd2l0Y2ggdGFjdGljcyBhbmQgbG9vayBmb3IgY2FsbHMgdG8gZnVuY3Rpb25zIGluIGBmYXN0X2NvbW1pdC5jYCwgZ2l2ZW4gdGhhdCYjMzk7cyBwcm9iYWJseSB3aGVyZSB0aGUgY29yZSBsb2dpYyByZXNpZGVzLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHBhdGhzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0cmlnZ2VyaW5nIGV2ZW50cyBhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgb3BlcmF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfZmNfcmVwbGF5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9MTU5Mj1zdHJ1Y3QgZXh0NF9zYl9pbmZvIHtcbi0tXG5mcy9leHQ0L2V4dDQuaC0xODcyLSNlbmRpZlxuZnMvZXh0NC9leHQ0Lmg6MTg3MzpcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSBzX2ZjX3JlcGxheV9zdGF0ZTtcbmZzL2V4dDQvZXh0NC5oLTE4NzQtfTtcbi0tXG5mcy9leHQ0L2V4dDQuaD0zMDkwPXZvaWQgZXh0NF9mY19kZWwoc3RydWN0IGlub2RlICppbm9kZSk7XG5mcy9leHQ0L2V4dDQuaDozMDkxOmJvb2wgZXh0NF9mY19yZXBsYXlfY2hlY2tfZXhjbHVkZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZXh0NF9mc2Jsa190IGJsb2NrKTtcbmZzL2V4dDQvZXh0NC5oOjMwOTI6dm9pZCBleHQ0X2ZjX3JlcGxheV9jbGVhbnVwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuZnMvZXh0NC9leHQ0LmgtMzA5My1pbnQgZXh0NF9mY19jb21taXQoam91cm5hbF90ICpqb3VybmFsLCB0aWRfdCBjb21taXRfdGlkKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTc4NT1zdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9mY19nZXRfdGwoc3RydWN0IGV4dDRfZmNfdGxfbWVtICp0bCwgdTggKnZhbClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTc5NC0vKiBVbmxpbmsgcmVwbGF5IGZ1bmN0aW9uICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTc5NTpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X3VubGluayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE3OTYtXHRcdFx0XHQgc3RydWN0IGV4dDRfZmNfdGxfbWVtICp0bCwgdTggKnZhbClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTgwNC1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxODA1Olx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX1VOTElOSywgZGFyZy5pbm8sXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTgwNi1cdFx0XHRkYXJnLnBhcmVudF9pbm8sIGRhcmcuZG5hbWVfbGVuKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTgzMy1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxODM0OnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfbGlua19pbnRlcm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4MzUtXHRcdFx0XHRzdHJ1Y3QgZGVudHJ5X2luZm9fYXJncyAqZGFyZyxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTg2OS0vKiBMaW5rIHJlcGxheSBmdW5jdGlvbiAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE4NzA6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9saW5rKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTg3MS1cdFx0XHQgICAgICAgc3RydWN0IGV4dDRfZmNfdGxfbWVtICp0bCwgdTggKnZhbClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTg3Ny1cdHRsX3RvX2RhcmcoXHUwMDI2ZGFyZywgdGwsIHZhbCk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTg3ODpcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCBFWFQ0X0ZDX1RBR19MSU5LLCBkYXJnLmlubyxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODc5LVx0XHRcdGRhcmcucGFyZW50X2lubywgZGFyZy5kbmFtZV9sZW4pO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODg2LVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE4ODc6XHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9saW5rX2ludGVybmFsKHNiLCBcdTAwMjZkYXJnLCBpbm9kZSk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTg4OC1cdGlwdXQoaW5vZGUpO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0xODk2PXN0YXRpYyBpbnQgZXh0NF9mY19yZWNvcmRfbW9kaWZpZWRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGlubylcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODk3LXtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxODk4Olx0c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlICpzdGF0ZTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODk5LVx0aW50IGk7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MjQtICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTkyNTpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTkyNi1cdFx0XHRcdHN0cnVjdCBleHQ0X2ZjX3RsX21lbSAqdGwsIHU4ICp2YWwpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MzktXHRpbm8gPSBsZTMyX3RvX2NwdShmY19pbm9kZS5mY19pbm8pO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE5NDA6XHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgdGFnLCBpbm8sIDAsIDApO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5NDEtXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwMzMtICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjAzNDpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2NyZWF0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwMzUtXHRcdFx0XHQgc3RydWN0IGV4dDRfZmNfdGxfbWVtICp0bCwgdTggKnZhbClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjA0My1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMDQ0Olx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX0NSRUFULCBkYXJnLmlubyxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDQ1LVx0XHRcdGRhcmcucGFyZW50X2lubywgZGFyZy5kbmFtZV9sZW4pO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDc2LVx0fVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIwNzc6XHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9saW5rX2ludGVybmFsKHNiLCBcdTAwMjZkYXJnLCBpbm9kZSk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjA3OC1cdGlmIChyZXQpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTIwOTI9aW50IGV4dDRfZmNfcmVjb3JkX3JlZ2lvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGlubyxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjA5NC17XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjA5NTpcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGU7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjA5Ni1cdHN0cnVjdCBleHQ0X2ZjX2FsbG9jX3JlZ2lvbiAqcmVnaW9uO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMTMxLS8qIFJlcGxheSBhZGQgcmFuZ2UgdGFnICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjEzMjpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2FkZF9yYW5nZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1OCAqdmFsKVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxMzMte1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMTQ2LVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIxNDc6XHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfQUREX1JBTkdFLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxNDgtXHRcdGxlMzJfdG9fY3B1KGZjX2FkZF9leC5mY19pbm8pLCBsZTMyX3RvX2NwdShleC1cdTAwM2VlZV9ibG9jayksXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTIyNTg9c3RhdGljIGludFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIyNTk6ZXh0NF9mY19yZXBsYXlfZGVsX3JhbmdlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU4ICp2YWwpXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjI2MC17XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIyNzAtXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjI3MTpcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCBFWFQ0X0ZDX1RBR19ERUxfUkFOR0UsXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjI3Mi1cdFx0bGUzMl90b19jcHUobHJhbmdlLmZjX2lubyksIGN1ciwgcmVtYWluaW5nKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjMyMD1zdGF0aWMgdm9pZCBleHQ0X2ZjX3NldF9iaXRtYXBzX2FuZF9jb3VudGVycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzMjEte1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIzMjI6XHRzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUgKnN0YXRlO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzMjMtXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzc4LSAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIzNzk6Ym9vbCBleHQ0X2ZjX3JlcGxheV9jaGVja19leGNsdWRlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBleHQ0X2ZzYmxrX3QgYmxrKVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzODAte1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzODEtXHRpbnQgaTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMzgyOlx0c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlICpzdGF0ZTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzgzLVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzk2LS8qIENsZWFudXAgZnVuY3Rpb24gY2FsbGVkIGFmdGVyIHJlcGxheSAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIzOTc6dm9pZCBleHQ0X2ZjX3JlcGxheV9jbGVhbnVwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM5OC17XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI0MDY9c3RhdGljIGJvb2wgZXh0NF9mY192YWx1ZV9sZW5faXN2YWxpZChzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmksXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0NDktICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjQ1MDpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X3NjYW4oam91cm5hbF90ICpqb3VybmFsLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0NTEtXHRcdFx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgb2ZmLFxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDU1LVx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjQ1NjpcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGU7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ1Ny1cdGludCByZXQgPSBKQkQyX0ZDX1JFUExBWV9DT05USU5VRTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU2NC1vdXRfZXJyOlxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI1NjU6XHR0cmFjZV9leHQ0X2ZjX3JlcGxheV9zY2FuKHNiLCByZXQsIG9mZik7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU2Ni1cdHJldHVybiByZXQ7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1NzItICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjU3MzpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5KGpvdXJuYWxfdCAqam91cm5hbCwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTc0LVx0XHRcdFx0ZW51bSBwYXNzdHlwZSBwYXNzLCBpbnQgb2ZmLCB0aWRfdCBleHBlY3RlZF90aWQpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1ODAtXHRpbnQgcmV0ID0gSkJEMl9GQ19SRVBMQVlfQ09OVElOVUU7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjU4MTpcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGUgPSBcdTAwMjZzYmktXHUwMDNlc19mY19yZXBsYXlfc3RhdGU7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU4Mi1cdHN0cnVjdCBleHQ0X2ZjX3RhaWwgdGFpbDtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU4NS1cdFx0c3RhdGUtXHUwMDNlZmNfY3VycmVudF9wYXNzID0gUEFTU19TQ0FOO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI1ODY6XHRcdHJldHVybiBleHQ0X2ZjX3JlcGxheV9zY2FuKGpvdXJuYWwsIGJoLCBvZmYsIGV4cGVjdGVkX3RpZCk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU4Ny1cdH1cbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYyMy1cdFx0Y2FzZSBFWFQ0X0ZDX1RBR19MSU5LOlxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2MjQ6XHRcdFx0cmV0ID0gZXh0NF9mY19yZXBsYXlfbGluayhzYiwgXHUwMDI2dGwsIHZhbCk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYyNS1cdFx0XHRicmVhaztcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjI2LVx0XHRjYXNlIEVYVDRfRkNfVEFHX1VOTElOSzpcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjI3Olx0XHRcdHJldCA9IGV4dDRfZmNfcmVwbGF5X3VubGluayhzYiwgXHUwMDI2dGwsIHZhbCk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYyOC1cdFx0XHRicmVhaztcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjI5LVx0XHRjYXNlIEVYVDRfRkNfVEFHX0FERF9SQU5HRTpcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjMwOlx0XHRcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2FkZF9yYW5nZShzYiwgdmFsKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjMxLVx0XHRcdGJyZWFrO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzItXHRcdGNhc2UgRVhUNF9GQ19UQUdfQ1JFQVQ6XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjYzMzpcdFx0XHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9jcmVhdGUoc2IsIFx1MDAyNnRsLCB2YWwpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzQtXHRcdFx0YnJlYWs7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYzNS1cdFx0Y2FzZSBFWFQ0X0ZDX1RBR19ERUxfUkFOR0U6XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjYzNjpcdFx0XHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9kZWxfcmFuZ2Uoc2IsIHZhbCk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYzNy1cdFx0XHRicmVhaztcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjM4LVx0XHRjYXNlIEVYVDRfRkNfVEFHX0lOT0RFOlxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2Mzk6XHRcdFx0cmV0ID0gZXh0NF9mY19yZXBsYXlfaW5vZGUoc2IsIFx1MDAyNnRsLCB2YWwpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NDAtXHRcdFx0YnJlYWs7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY0MS1cdFx0Y2FzZSBFWFQ0X0ZDX1RBR19QQUQ6XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY0MjpcdFx0XHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfUEFELCAwLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NDMtXHRcdFx0XHRcdCAgICAgdGwuZmNfbGVuLCAwKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY0NS1cdFx0Y2FzZSBFWFQ0X0ZDX1RBR19UQUlMOlxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2NDY6XHRcdFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX1RBSUwsXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY0Ny1cdFx0XHRcdFx0ICAgICAwLCB0bC5mY19sZW4sIDApO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjUzLVx0XHRkZWZhdWx0OlxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2NTQ6XHRcdFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIHRsLmZjX3RhZywgMCwgdGwuZmNfbGVuLCAwKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjU1LVx0XHRcdHJldCA9IC1FQ0FOQ0VMRUQ7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI2NjU9dm9pZCBleHQ0X2ZjX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgam91cm5hbF90ICpqb3VybmFsKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjcxLVx0ICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY3MjpcdGpvdXJuYWwtXHUwMDNlal9mY19yZXBsYXlfY2FsbGJhY2sgPSBleHQ0X2ZjX3JlcGxheTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjczLVx0aWYgKCF0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuaD0xMzk9c3RydWN0IGV4dDRfZmNfYWxsb2NfcmVnaW9uIHtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtMTQ3LSAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5oOjE0ODpzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUge1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5oLTE0OS1cdGludCBmY19yZXBsYXlfbnVtX3RhZ3M7XG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NjE2Mz1leHQ0X21iX25ld19ibG9ja3Nfc2ltcGxlKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fcmVxdWVzdCAqYXIsIGludCAqZXJycClcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy02MTk0LVx0XHRcdFx0YnJlYWs7XG5mcy9leHQ0L21iYWxsb2MuYzo2MTk1Olx0XHRcdGlmIChleHQ0X2ZjX3JlcGxheV9jaGVja19leGNsdWRlZChzYixcbmZzL2V4dDQvbWJhbGxvYy5jLTYxOTYtXHRcdFx0XHRleHQ0X2dyb3VwX2ZpcnN0X2Jsb2NrX25vKHNiLCBncm91cCkgJiM0Mztcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NTM1Nz1zdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTY1OC1cdH1cbmZzL2V4dDQvc3VwZXIuYzo1NjU5Olx0ZXh0NF9mY19yZXBsYXlfY2xlYW51cChzYik7XG5mcy9leHQ0L3N1cGVyLmMtNTY2MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMzgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5MjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEV4dDQgRmlsZXN5c3RlbSBWdWxuZXJhYmlsaXR5IER1cmluZyBKb3VybmFsIFJlcGxheSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgZXh0NCBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYSBwb3RlbnRpYWwgaXNzdWUgZHVyaW5nIGpvdXJuYWwgcmVwbGF5LiBUaGUgZmxvdyBpcyBwcmV0dHkgY2xlYXI6IHdoZW4gbW91bnRpbmcgYW4gZXh0NCBmaWxlc3lzdGVtIHdpdGggZmFzdCBjb21taXQgZW5hYmxlZCwgYGpiZDJgIHJlcGxheXMgdGhlIGpvdXJuYWwuIFRoaXMgdHJpZ2dlcnMgYGV4dDRfZmNfcmVwbGF5YCwgd2hpY2ggdGhlbiBjYWxscyBgZXh0NF9mY19yZXBsYXlfaW5vZGVgLCBhbmQgZmluYWxseSwgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrcyhpbm9kZSlgLiBJJiMzOTttIGZhbWlsaWFyIHdpdGggdGhpcywgYW5kIEkga25vdyBTeXprYWxsZXIgaGVhdmlseSB0YXJnZXRzIGV4dDQgbW91bnRzIGFuZCBmaWxlc3lzdGVtIGltYWdlcyB3aXRoIGl0cyBmdXp6aW5nLiBTcGVjaWZpY2FsbHksIGNvcnJ1cHRlZCBpbWFnZXMgY2F1c2luZyBpc3N1ZXMgZHVyaW5nIHJlcGxheSwgbW91bnQsIG9yIGpvdXJuYWwgcmVjb3ZlcnkgYXJlIGNvbW1vbiB0YXJnZXRzLCBhbmQgdGhhdCYjMzk7cyB3aGF0IGhhcyBwaXF1ZWQgbXkgaW50ZXJlc3QgaGVyZS4KCkkmIzM5O20gemVyb2luZyBpbiBvbiB0aGlzIGZ1bmN0aW9uLCBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCwgYW5kIEkmIzM5O3ZlIG5vdGljZWQgYSBzaWduaWZpY2FudCBjaGFuZ2UuIFByZXZpb3VzbHksIGlmIGBleHQ0X2ZpbmRfZXh0ZW50YCByZXR1cm5lZCBhbiBlcnJvciAoYW4gRVJSX1BUUikgb3IgYHJldGAgd2FzIG5lZ2F0aXZlIGluc2lkZSB0aGUgYHdoaWxlYCBsb29wLCB0aGUgY29kZSB3b3VsZCBzaW1wbHkgYnJlYWsgb3V0IHRvIHRoZSBgb3V0OmAgbGFiZWwuIFRoZSBwcm9ibGVtIGlzIHRoYXQsIHVuZGVyIHRoZXNlIGNvbmRpdGlvbnMsIGBwYXRoYCBpcyBhbiBFUlJfUFRSISBBbmQgdGhlIGNydWNpYWwgcGFydCBpcyB0aGF0IHRoZSBjb2RlIHRoZW4gY2FsbHMgYGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKWAuIE5vdywgd2hhdCBkb2VzIGBleHQ0X2ZyZWVfZXh0X3BhdGhgIGRvIHdpdGggYW4gRVJSX1BUUj8gVGhhdCYjMzk7cyB0aGUgbWlsbGlvbi1kb2xsYXIgcXVlc3Rpb24uIElmIGBleHQ0X2ZyZWVfZXh0X3BhdGhgIGRvZXNuJiMzOTt0IGhhbmRsZSBhbiBFUlJfUFRSIHByb3Blcmx5LCB3ZSBjb3VsZCBiZSBsb29raW5nIGF0IGEgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUsIG9yIGEgZG91YmxlIGZyZWUsIG9yIHNvbWUgb3RoZXIgYmFkbmVzcyB0aGF0IGNvdWxkIGNhdXNlIGRlbmlhbCBvZiBzZXJ2aWNlIG9yLCB3b3JzZSwgYSBrZXJuZWwgcGFuaWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGV4dDRfZnJlZV9leHRfcGF0aGAgZG9lcyBpbiB0aGlzIHNpdHVhdGlvbi4gSXQgc2VlbXMgdGhpcyBjb3VsZCBiZSBhIG5ldywgb3IgcmVjZW50bHkgZXhwb3NlZCwgYnVnLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggbG9va2luZyBpbnRvIGFuZCB1bmRlcnN0YW5kaW5nIGhvdyBpdCYjMzk7cyB0cmlnZ2VyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgZXh0NF9mcmVlX2V4dF9wYXRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9MzkzNT1leHRlcm4gc3RydWN0IGV4dDRfZXh0X3BhdGggKmV4dDRfZmluZF9leHRlbnQoc3RydWN0IGlub2RlICosIGV4dDRfbGJsa190LFxuLS1cbmZzL2V4dDQvZXh0NC5oLTM5MzctXHRcdFx0XHRcdCAgICAgIGludCBmbGFncyk7XG5mcy9leHQ0L2V4dDQuaDozOTM4OmV4dGVybiB2b2lkIGV4dDRfZnJlZV9leHRfcGF0aChzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqKTtcbmZzL2V4dDQvZXh0NC5oLTM5MzktZXh0ZXJuIGludCBleHQ0X2V4dF9jaGVja19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz0xMTE9c3RhdGljIHZvaWQgZXh0NF9leHRfZHJvcF9yZWZzKHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTEyMS1cbmZzL2V4dDQvZXh0ZW50cy5jOjEyMjp2b2lkIGV4dDRfZnJlZV9leHRfcGF0aChzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aClcbmZzL2V4dDQvZXh0ZW50cy5jLTEyMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzY0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBleHQ0X2ZyZWVfZXh0X3BhdGgqKgoKT2theSwgdGltZSB0byBkaWcgaW50byBgZXh0NF9mcmVlX2V4dF9wYXRoYCBpbiBgZnMvZXh0NC9leHRlbnRzLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgaGFuZGxlcyBleHRlbnQgZGVhbGxvY2F0aW9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgcGF0aCB0cmF2ZXJzYWwgbG9naWMg4oCTIHdoYXQgYXJlIHRoZSBlZGdlIGNhc2VzIGl0IGhhbmRsZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgZXh0ZW50IHRyZWUgc3RydWN0dXJlIGFuZCB0aGUgdmFyaW91cyBzY2VuYXJpb3Mgd2hlcmUgZXh0ZW50cyBnZXQgZnJlZWQuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gZmxhZ3MgdXNlZCBhbmQgaG93IHRoZXkgcHJvcGFnYXRlIGR1cmluZyB0aGUgdHJhdmVyc2FsIHRvIHRoZSBpbm9kZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgaG93IGl0IGhhbmRsZXMgcGFydGlhbCBleHRlbnQgZnJlZXMsIG1lcmdpbmcgYWRqYWNlbnQgZXh0ZW50cywgYW5kIGFueSBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMgd2l0aGluIHRoZSBCLXRyZWUgc3RydWN0dXJlLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIGpvdXJuYWxpbmcgaW4gZXh0NCwgSSB3aWxsIGtlZXAgam91cm5hbCByZWxhdGVkIGNvbnNpZGVyYXRpb25zIGF0IHRoZSBmcm9udCBvZiBteSBtaW5kIGR1cmluZyB0aGlzIHJldmlldy4gSSBleHBlY3QgdG8gYmUgbG9va2luZyBhdCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBibG9jayBncm91cCBhY2NvdW50aW5nIGFuZCBmcmVlIHNwYWNlIGJpdG1hcHMuIEkgd2FudCB0byBmdWxseSB2aXN1YWxpemUgdGhlIHRyZWUgdXBkYXRlcyBhcyBJIGdvIHRocm91Z2ggaXQgdG8gdHJ5IHRvIGlkZW50aWZ5IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2V4dGVudHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0fVxuIDEyMTpcdFxuIDEyMjpcdHZvaWQgZXh0NF9mcmVlX2V4dF9wYXRoKHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoKVxuIDEyMzpcdHtcbiAxMjQ6XHRcdGlmIChJU19FUlJfT1JfTlVMTChwYXRoKSlcbiAxMjU6XHRcdFx0cmV0dXJuO1xuIDEyNjpcdFx0ZXh0NF9leHRfZHJvcF9yZWZzKHBhdGgpO1xuIDEyNzpcdFx0a2ZyZWUocGF0aCk7XG4gMTI4Olx0fVxuIDEyOTpcdFxuIDEzMDpcdC8qXG4gMTMxOlx0ICogTWFrZSBzdXJlICYjMzk7aGFuZGxlJiMzOTsgaGFzIGF0IGxlYXN0ICYjMzk7Y2hlY2tfY3JlZCYjMzk7IGNyZWRpdHMuIElmIG5vdCwgcmVzdGFydFxuIDEzMjpcdCAqIHRyYW5zYWN0aW9uIHdpdGggJiMzOTtyZXN0YXJ0X2NyZWQmIzM5OyBjcmVkaXRzLiBUaGUgZnVuY3Rpb24gZHJvcHMgaV9kYXRhX3NlbVxuIDEzMzpcdCAqIHdoZW4gcmVzdGFydGluZyB0cmFuc2FjdGlvbiBhbmQgZ2V0cyBpdCBhZnRlciB0cmFuc2FjdGlvbiBpcyByZXN0YXJ0ZWQuXG4gMTM0Olx0ICpcbiAxMzU6XHQgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDEgaWYgdHJhbnNhY3Rpb24gaGFkIHRvIGJlIHJlc3RhcnRlZCxcbiAxMzY6XHQgKiBhbmQgXHUwMDNjIDAgaW4gY2FzZSBvZiBmYXRhbCBlcnJvci5cbiAxMzc6XHQgKi9cbiAxMzg6XHRpbnQgZXh0NF9kYXRhc2VtX2Vuc3VyZV9jcmVkaXRzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gMTM5Olx0XHRcdFx0XHRpbnQgY2hlY2tfY3JlZCwgaW50IHJlc3RhcnRfY3JlZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzODUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3VidGxlIEJ1ZyBGaXggaW4gRVhUNCYjMzk7cyBGYXN0IENvbW1pdCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AgYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGUgcG90ZW50aWFsIGltcGFjdC4gUHJldmlvdXNseSwgaWYgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AgZW5jb3VudGVyZWQgYW4gZXJyb3IsIGxpa2UgYSBmYWlsdXJlIGluIGBleHQ0X21hcF9ibG9ja3NgIG9yIGBleHQ0X2ZpbmRfZXh0ZW50YCwgaXQgd2FzICpzaWxlbnRseSogaWdub3JlZC4gVGhlIGNvZGUganVzdCByZXR1cm5lZCAwLCBsZWF2aW5nIGBpX2Jsb2Nrc2AgcG90ZW50aWFsbHkgaW5jb25zaXN0ZW50IGFuZCBsZWFkaW5nIHRvIGEgcmV0dXJuIG9mIHplcm8gdG8gdGhlIGNhbGxpbmcgZnVuY3Rpb24gYGV4dDRfZmNfcmVwbGF5X2lub2RlYCwgd2hpY2ggd291bGQgY29udGludWUgZXhlY3V0aW9uIGFzIGlmIG5vdGhpbmcgd2FzIHdyb25nLiBUaGlzIGlzIGEgY2xhc3NpYyByZWNpcGUgZm9yIHN1YnRsZSBkYXRhIGNvcnJ1cHRpb24sIGVzcGVjaWFsbHkgaW4gYSBmYXN0IGNvbW1pdCBzY2VuYXJpbyB3aGVyZSBjb25zaXN0ZW5jeSBpcyBjcnVjaWFsLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgbGlrZSB0aGlzOgoKYGBgYwpjbGVhbnVwOgoJZXh0NF9mcmVlX2V4dF9wYXRoKHBhdGgpOwoJZXh0NF9mcmVlX2V4dF9wYXRoKHBhdGgyKTsKCXJldHVybiAwOwpgYGAKCklmIGByZXQgJmx0OyAwYCBoYXBwZW5lZCwgdGhlIGNvZGUgd291bGQgc2ltcGx5IGp1bXAgb3IgYnJlYWsgYW5kIHJldHVybiAwISBObyBlcnJvciBoYW5kbGluZy4KCk5vdywgdGhlIHBhdGNoIGZpeGVzIHRoaXMuIE5vdyBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCByZXR1cm5zIHRoZSBhY3R1YWwgZXJyb3IgY29kZS4gIEFuZCB0aGUgY2FsbGluZyBjb2RlLCB3aXRoaW4gYGZhc3RfY29tbWl0LmNgLCBoYXMgYmVlbiB1cGRhdGVkIHRvIGNoZWNrIHRoaXMgcmV0dXJuIHZhbHVlLgoKYGBgYwotCWlmICghZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpKQotCQlleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoaW5vZGUpOwomIzQzOwlpZiAoIWV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSkgewomIzQzOwkJcmV0ID0gZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKGlub2RlKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBvdXRfYnJlbHNlOwomIzQzOwl9CmBgYAoKTm93LCBpZiBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCBmYWlscywgdGhlIGVycm9yIGlzIHByb3Blcmx5IHByb3BhZ2F0ZWQgdXAgdGhlIGNhbGwgY2hhaW4sIGF2b2lkaW5nIHRoZSBzaWxlbnQgY29ycnVwdGlvbi4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGltcHJvdmVtZW50LiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRvIHRyaWdnZXIgdGhpcyBzY2VuYXJpbyBhbmQgY29uZmlybSB0aGUgZml4LiBHaXZlbiB0aGUgY29tcGxleGl0eSBvZiBFWFQ0IGFuZCBmYXN0IGNvbW1pdCwgSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCYjMzk7cyBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3Rpbmcgb3IgZnV6emVyIGluZnJhc3RydWN0dXJlLgoKSXMgYGV4dDRgIGNvZGUsIGluIGdlbmVyYWwsIHdlbGwtZXhlcmNpc2VkIGluIHRoZSBrZXJuZWwgZnV6emVyLCBzeXprYWxsZXI/IFllcywgRVhUNCBpcyBvbmUgb2YgdGhlIG1vc3QgaGVhdmlseSBmdXp6ZWQgc3Vic3lzdGVtcy4gSG93IGFib3V0IGBmYXN0X2NvbW1pdGAgc3BlY2lmaWNhbGx5PyBXaGF0IGFyZSB0aGUgS2NvbmZpZyBvcHRpb25zIHJlcXVpcmVkIGZvciBgZmFzdF9jb21taXRgIGFuZCBFWFQ0PyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWcgb3B0aW9ucyB0byBlbnN1cmUgdGhpcyBjb2RlIHBhdGggaXMgZW5hYmxlZCBkdXJpbmcgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RkFTVF9DT01NSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDQuaD0xMDQ4PXN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTEzMTQtXG5mcy9leHQ0L2V4dDQuaDoxMzE1OiNkZWZpbmUgRVhUNF9NT1VOVDJfSk9VUk5BTF9GQVNUX0NPTU1JVFx0MHgwMDAwMDAxMCAvKiBKb3VybmFsIGZhc3QgY29tbWl0ICovXG5mcy9leHQ0L2V4dDQuaC0xMzE2LSNkZWZpbmUgRVhUNF9NT1VOVDJfREFYX05FVkVSXHRcdDB4MDAwMDAwMjAgLyogRG8gbm90IGFsbG93IERpcmVjdCBBY2Nlc3MgKi9cbi0tXG5mcy9leHQ0L2V4dDQuaD0yMTQwPXN0YXRpYyBpbmxpbmUgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICpleHQ0X2lfbWV0YWRhdGFfYmhzKFxuLS1cbmZzL2V4dDQvZXh0NC5oLTIxODUtLypcbmZzL2V4dDQvZXh0NC5oOjIxODY6ICogVGhlIHJlYXNvbiB3aHkgXCYjMzQ7RkFTVF9DT01NSVRcJiMzNDsgaXMgYSBjb21wYXQgZmVhdHVyZSBpcyB0aGF0LCBGUyBiZWNvbWVzXG5mcy9leHQ0L2V4dDQuaC0yMTg3LSAqIGluY29tcGF0aWJsZSBvbmx5IGlmIGZhc3QgY29tbWl0IGJsb2NrcyBhcmUgcHJlc2VudCBpbiB0aGUgRlMuIFNpbmNlIHdlXG4tLVxuZnMvZXh0NC9leHQ0LmgtMjE5MS0gKi9cbmZzL2V4dDQvZXh0NC5oOjIxOTI6I2RlZmluZSBFWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZBU1RfQ09NTUlUXHRcdDB4MDQwMFxuZnMvZXh0NC9leHQ0LmgtMjE5My0jZGVmaW5lIEVYVDRfRkVBVFVSRV9DT01QQVRfU1RBQkxFX0lOT0RFU1x0MHgwODAwXG4tLVxuZnMvZXh0NC9leHQ0Lmg9MjI5Nz1FWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZVTkNTKHNwYXJzZV9zdXBlcjIsXHRTUEFSU0VfU1VQRVIyKVxuZnMvZXh0NC9leHQ0Lmg6MjI5ODpFWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZVTkNTKGZhc3RfY29tbWl0LFx0XHRGQVNUX0NPTU1JVClcbmZzL2V4dDQvZXh0NC5oLTIyOTktRVhUNF9GRUFUVVJFX0NPTVBBVF9GVU5DUyhzdGFibGVfaW5vZGVzLFx0U1RBQkxFX0lOT0RFUylcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjI1PXN0YXRpYyBib29sIGV4dDRfZmNfZGlzYWJsZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjYte1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIyNzpcdHJldHVybiAoIXRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkgfHxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjgtXHRcdChFWFQ0X1NCKHNiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkpO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0zOTA9c3RhdGljIGludCBleHQ0X2ZjX3RyYWNrX3RlbXBsYXRlKFxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy00MjAtXHRcdFx0XHQoc2JpLVx1MDAzZXNfam91cm5hbC1cdTAwM2VqX2ZsYWdzIFx1MDAyNiBKQkQyX0ZVTExfQ09NTUlUX09OR09JTkcgfHxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzo0MjE6XHRcdFx0XHQgc2JpLVx1MDAzZXNfam91cm5hbC1cdTAwM2VqX2ZsYWdzIFx1MDAyNiBKQkQyX0ZBU1RfQ09NTUlUX09OR09JTkcpID9cbmZzL2V4dDQvZmFzdF9jb21taXQuYy00MjItXHRcdFx0XHRcdTAwMjZzYmktXHUwMDNlc19mY19xW0ZDX1FfU1RBR0lOR10gOlxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz00MzU9c3RhdGljIGludCBfX3RyYWNrX2RlbnRyeV91cGRhdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNDcxLVx0aWYgKHNiaS1cdTAwM2VzX2pvdXJuYWwtXHUwMDNlal9mbGFncyBcdTAwMjYgSkJEMl9GVUxMX0NPTU1JVF9PTkdPSU5HIHx8XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NDcyOlx0XHRzYmktXHUwMDNlc19qb3VybmFsLVx1MDAzZWpfZmxhZ3MgXHUwMDI2IEpCRDJfRkFTVF9DT01NSVRfT05HT0lORylcbmZzL2V4dDQvZmFzdF9jb21taXQuYy00NzMtXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2bm9kZS1cdTAwM2VmY2RfbGlzdCxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTU2Nz1pbnQgZXh0NF9mY19jb21taXQoam91cm5hbF90ICpqb3VybmFsLCB0aWRfdCBjb21taXRfdGlkKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xNTc2LVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE1Nzc6XHRpZiAoIXRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkpXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTU3OC1cdFx0cmV0dXJuIGpiZDJfY29tcGxldGVfdHJhbnNhY3Rpb24oam91cm5hbCwgY29tbWl0X3RpZCk7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI2NjU9dm9pZCBleHQ0X2ZjX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgam91cm5hbF90ICpqb3VybmFsKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjcyLVx0am91cm5hbC1cdTAwM2VqX2ZjX3JlcGxheV9jYWxsYmFjayA9IGV4dDRfZmNfcmVwbGF5O1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2NzM6XHRpZiAoIXRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkpXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY3NC1cdFx0cmV0dXJuO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuaC0yLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oOjM6I2lmbmRlZiBfX0ZBU1RfQ09NTUlUX0hfX1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5oOjQ6I2RlZmluZSBfX0ZBU1RfQ09NTUlUX0hfX1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5oLTUtXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oPTE2Mz1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnRhZzJzdHIoX191MTYgdGFnKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuaC0xODgtXG5mcy9leHQ0L2Zhc3RfY29tbWl0Lmg6MTg5OiNlbmRpZiAvKiBfX0ZBU1RfQ09NTUlUX0hfXyAqL1xuLS1cbmZzL2V4dDQvaW5vZGUuYz0zNDQxPXN0YXRpYyBib29sIGV4dDRfaW5vZGVfZGF0YXN5bmNfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2lub2RlLmMtMzQ0OS1cdFx0XHRyZXR1cm4gZmFsc2U7XG5mcy9leHQ0L2lub2RlLmM6MzQ1MDpcdFx0aWYgKHRlc3Rfb3B0Mihpbm9kZS1cdTAwM2VpX3NiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSlcbmZzL2V4dDQvaW5vZGUuYy0zNDUxLVx0XHRcdHJldHVybiAhbGlzdF9lbXB0eShcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmNfbGlzdCk7XG4tLVxuZnMvZXh0NC9uYW1laS5jPTM3OTk9c3RhdGljIGludCBleHQ0X3JlbmFtZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpvbGRfZGlyLFxuLS1cbmZzL2V4dDQvbmFtZWkuYy00MDA5LVx0XHRcdGV4dDRfZmNfdHJhY2tfdW5saW5rKGhhbmRsZSwgbmV3LmRlbnRyeSk7XG5mcy9leHQ0L25hbWVpLmM6NDAxMDpcdFx0aWYgKHRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkgXHUwMDI2XHUwMDI2XG5mcy9leHQ0L25hbWVpLmMtNDAxMS1cdFx0ICAgICEoRVhUNF9TQihzYiktXHUwMDNlc19tb3VudF9zdGF0ZSBcdTAwMjYgRVhUNF9GQ19SRVBMQVkpIFx1MDAyNlx1MDAyNlxuLS1cbmZzL2V4dDQvc3VwZXIuYz0xODk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW91bnRfb3B0cyB7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTE5NjItI2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXG5mcy9leHQ0L3N1cGVyLmM6MTk2MzpcdHtPcHRfZmNfZGVidWdfZm9yY2UsIEVYVDRfTU9VTlQyX0pPVVJOQUxfRkFTVF9DT01NSVQsXG5mcy9leHQ0L3N1cGVyLmMtMTk2NC1cdCBNT1BUX1NFVCB8IE1PUFRfMiB8IE1PUFRfRVhUNF9PTkxZfSxcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NDQwND1zdGF0aWMgdm9pZCBleHQ0X3NldF9kZWZfb3B0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy00NDIzLVx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZmFzdF9jb21taXQoc2IpKVxuZnMvZXh0NC9zdXBlci5jOjQ0MjQ6XHRcdHNldF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKTtcbmZzL2V4dDQvc3VwZXIuYy00NDI1LVx0LyogZG9uJiMzOTt0IGZvcmdldCB0byBlbmFibGUgam91cm5hbF9jc3VtIHdoZW4gbWV0YWRhdGFfY3N1bSBpcyBlbmFibGVkLiAqL1xuLS1cbmZzL2V4dDQvc3VwZXIuYz00OTczPXN0YXRpYyBpbnQgZXh0NF9sb2FkX2FuZF9pbml0X2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNDk5Ni1cbmZzL2V4dDQvc3VwZXIuYzo0OTk3Olx0aWYgKHRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkgXHUwMDI2XHUwMDI2XG5mcy9leHQ0L3N1cGVyLmMtNDk5OC1cdFx0IWpiZDJfam91cm5hbF9zZXRfZmVhdHVyZXMoRVhUNF9TQihzYiktXHUwMDNlc19qb3VybmFsLCAwLCAwLFxuZnMvZXh0NC9zdXBlci5jOjQ5OTk6XHRcdFx0XHRcdCAgSkJEMl9GRUFUVVJFX0lOQ09NUEFUX0ZBU1RfQ09NTUlUKSkge1xuZnMvZXh0NC9zdXBlci5jLTUwMDAtXHRcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUixcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NTA1Nz1zdGF0aWMgaW50IGV4dDRfY2hlY2tfam91cm5hbF9kYXRhX21vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTA2NC1cdFx0Y2xlYXJfb3B0KHNiLCBESU9SRUFEX05PTE9DSyk7XG5mcy9leHQ0L3N1cGVyLmM6NTA2NTpcdFx0Y2xlYXJfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCk7XG5mcy9leHQ0L3N1cGVyLmMtNTA2Ni1cdFx0aWYgKHRlc3Rfb3B0MihzYiwgRVhQTElDSVRfREVMQUxMT0MpKSB7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTUzNTc9c3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTU1NTctXHRcdGNsZWFyX29wdChzYiwgREFUQV9GTEFHUyk7XG5mcy9leHQ0L3N1cGVyLmM6NTU1ODpcdFx0Y2xlYXJfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCk7XG5mcy9leHQ0L3N1cGVyLmMtNTU1OS1cdFx0c2JpLVx1MDAzZXNfam91cm5hbCA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjkyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBleHQ0IE1ha2VmaWxlIGZvciBPYmplY3QgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgZnMvZXh0NC9NYWtlZmlsZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBidWlsZC10aW1lIGRlcGVuZGVuY2llcyBvZiBgZXh0ZW50cy5vYCBhbmQgYGZhc3RfY29tbWl0Lm9gLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyB1c2VkIGluIHRoZWlyIGNvbXBpbGF0aW9uLiBBcmUgdGhlcmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zLCBrZXJuZWwgZmxhZ3MsIG9yIG90aGVyIGZhY3RvcnMgdGhhdCB0cmlnZ2VyIHRoZWlyIGluY2x1c2lvbj8gVW5kZXJzdGFuZGluZyB0aGVzZSBidWlsZCB2YXJpYWJsZXMgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nLCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIG9yIHBvdGVudGlhbGx5IGV2ZW4gZm9yIHNlbGVjdGl2ZWx5IGVuYWJsaW5nIG9yIGRpc2FibGluZyBmZWF0dXJlcyBmb3IgYSBzcGVjaWZpYyBkZXBsb3ltZW50LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBgaWZkZWZgIGJsb2NrcywgYXNzaWdubWVudCBzdGF0ZW1lbnRzIHRoYXQgaW5mbHVlbmNlIGZsYWdzIGxpa2UgYENPTkZJR19FWFQ0X1VTRV9FWFRFTlRTYCwgb3IgYW55dGhpbmcgcmVsYXRlZCB0byBqb3VybmFsaW5nIG9yIGZhc3QgY29tbWl0IGJlaGF2aW9yLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoZXkgYXJlIGhpZ2hseSByZWxhdGVkIHRvIGZlYXR1cmVzIHN1Y2ggYXMgZXh0ZW50cyAob2J2aW91c2x5KSBhbmQgdGhlIGpvdXJuYWxpbmcgbWVjaGFuaXNtLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBNYWtlZmlsZSBnaXZlcyBtZSBhIGNsZWFyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Zhc3RfY29tbWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9NYWtlZmlsZT04PWV4dDQteVx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcbi0tXG5mcy9leHQ0L01ha2VmaWxlLTEyLVx0XHRzdXBlci5vIHN5bWxpbmsubyBzeXNmcy5vIHhhdHRyLm8geGF0dHJfaHVyZC5vIHhhdHRyX3RydXN0ZWQubyBcXFxuZnMvZXh0NC9NYWtlZmlsZToxMzpcdFx0eGF0dHJfdXNlci5vIGZhc3RfY29tbWl0Lm8gb3JwaGFuLm9cbmZzL2V4dDQvTWFrZWZpbGUtMTQtXG4tLVxuZnMvZXh0NC9leHQ0Lmg9OTYzPWRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuZnMvZXh0NC9leHQ0LmgtOTk5LSNpbmNsdWRlIFwmIzM0O2V4dGVudHNfc3RhdHVzLmhcJiMzNDtcbmZzL2V4dDQvZXh0NC5oOjEwMDA6I2luY2x1ZGUgXCYjMzQ7ZmFzdF9jb21taXQuaFwmIzM0O1xuZnMvZXh0NC9leHQ0LmgtMTAwMS1cbi0tXG5mcy9leHQ0L2V4dDQuaD0yMjk3PUVYVDRfRkVBVFVSRV9DT01QQVRfRlVOQ1Moc3BhcnNlX3N1cGVyMixcdFNQQVJTRV9TVVBFUjIpXG5mcy9leHQ0L2V4dDQuaDoyMjk4OkVYVDRfRkVBVFVSRV9DT01QQVRfRlVOQ1MoZmFzdF9jb21taXQsXHRcdEZBU1RfQ09NTUlUKVxuZnMvZXh0NC9leHQ0LmgtMjI5OS1FWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZVTkNTKHN0YWJsZV9pbm9kZXMsXHRTVEFCTEVfSU5PREVTKVxuLS1cbmZzL2V4dDQvZXh0NC5oPTMwNzA9dm9pZCBleHQ0X2VuZF9iaXRtYXBfcmVhZChzdHJ1Y3QgYmlvICpiaW8pO1xuZnMvZXh0NC9leHQ0LmgtMzA3MS1cbmZzL2V4dDQvZXh0NC5oOjMwNzI6LyogZmFzdF9jb21taXQuYyAqL1xuZnMvZXh0NC9leHQ0LmgtMzA3My1pbnQgZXh0NF9mY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0zLS8qXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NDogKiBmcy9leHQ0L2Zhc3RfY29tbWl0LmNcbmZzL2V4dDQvZmFzdF9jb21taXQuYy01LSAqXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oLTYtLypcbmZzL2V4dDQvZmFzdF9jb21taXQuaDo3OiAqIE5vdGUgdGhpcyBmaWxlIGlzIHByZXNlbnQgaW4gZTJmc3Byb2dzL2xpYi9leHQyZnMvZmFzdF9jb21taXQuaCBhbmRcbmZzL2V4dDQvZmFzdF9jb21taXQuaDo4OiAqIGxpbnV4L2ZzL2V4dDQvZmFzdF9jb21taXQuaC4gVGhlc2UgZmlsZSBzaG91bGQgYWx3YXlzIGJlIGJ5dGUgaWRlbnRpY2FsLlxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oLTktICovXG4tLVxuZnMvZXh0NC9uYW1laS5jPTMyMjg9aW50IF9fZXh0NF91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpkX25hbWUsXG5mcy9leHQ0L25hbWVpLmMtMzIyOS1cdFx0ICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC9uYW1laS5jOjMyMzA6XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5IC8qIE5VTEwgZHVyaW5nIGZhc3RfY29tbWl0IHJlY292ZXJ5ICovKVxuZnMvZXh0NC9uYW1laS5jLTMyMzEte1xuLS1cbmZzL2V4dDQvc3VwZXIuYz00NDA0PXN0YXRpYyB2b2lkIGV4dDRfc2V0X2RlZl9vcHRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTQ0MjItI2VuZGlmXG5mcy9leHQ0L3N1cGVyLmM6NDQyMzpcdGlmIChleHQ0X2hhc19mZWF0dXJlX2Zhc3RfY29tbWl0KHNiKSlcbmZzL2V4dDQvc3VwZXIuYy00NDI0LVx0XHRzZXRfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCk7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTQ1MjM9c3RhdGljIHZvaWQgZXh0NF9hdG9taWNfd3JpdGVfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy00NTQ4LVxuZnMvZXh0NC9zdXBlci5jOjQ1NDk6c3RhdGljIHZvaWQgZXh0NF9mYXN0X2NvbW1pdF9pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L3N1cGVyLmMtNDU1MC17XG4tLVxuZnMvZXh0NC9zdXBlci5jPTUwNTc9c3RhdGljIGludCBleHQ0X2NoZWNrX2pvdXJuYWxfZGF0YV9tb2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTUwNjEtXHRcdFx0ICAgIFwmIzM0O2RhdGE9am91cm5hbCBkaXNhYmxlcyBkZWxheWVkIGFsbG9jYXRpb24sIFwmIzM0O1xuZnMvZXh0NC9zdXBlci5jOjUwNjI6XHRcdFx0ICAgIFwmIzM0O2Rpb3JlYWRfbm9sb2NrLCBPX0RJUkVDVCBhbmQgZmFzdF9jb21taXQgc3VwcG9ydCFcXG5cJiMzNDspO1xuZnMvZXh0NC9zdXBlci5jLTUwNjMtXHRcdC8qIGNhbiYjMzk7dCBtb3VudCB3aXRoIGJvdGggZGF0YT1qb3VybmFsIGFuZCBkaW9yZWFkX25vbG9jay4gKi9cbi0tXG5mcy9leHQ0L3N1cGVyLmM9NTM1Nz1zdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTUxMC1cdGV4dDRfYXRvbWljX3dyaXRlX2luaXQoc2IpO1xuZnMvZXh0NC9zdXBlci5jOjU1MTE6XHRleHQ0X2Zhc3RfY29tbWl0X2luaXQoc2IpO1xuZnMvZXh0NC9zdXBlci5jLTU1MTItXG4tLVxuZnMvZXh0NC9zeXNmcy5jPTM2Mz1FWFQ0X0FUVFJfRkVBVFVSRShtZXRhZGF0YV9jc3VtX3NlZWQpO1xuZnMvZXh0NC9zeXNmcy5jOjM2NDpFWFQ0X0FUVFJfRkVBVFVSRShmYXN0X2NvbW1pdCk7XG5mcy9leHQ0L3N5c2ZzLmMtMzY1LSNpZiBJU19FTkFCTEVEKENPTkZJR19VTklDT0RFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfRlNfRU5DUllQVElPTilcbi0tXG5mcy9leHQ0L3N5c2ZzLmM9MzcyPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpleHQ0X2ZlYXRfYXR0cnNbXSA9IHtcbi0tXG5mcy9leHQ0L3N5c2ZzLmMtMzg2LVx0QVRUUl9MSVNUKG1ldGFkYXRhX2NzdW1fc2VlZCksXG5mcy9leHQ0L3N5c2ZzLmM6Mzg3Olx0QVRUUl9MSVNUKGZhc3RfY29tbWl0KSxcbmZzL2V4dDQvc3lzZnMuYy0zODgtI2lmIElTX0VOQUJMRUQoQ09ORklHX1VOSUNPREUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19GU19FTkNSWVBUSU9OKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM1MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4dDQgTW9kdWxlIENvbXBpbGF0aW9uIENvbnRleHQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgZXh0NCBmaWxlc3lzdGVtIG1vZHVsZXMgYXJlIGJ1aWx0LiBJdCYjMzk7cyBjbGVhciB0aGF0IHRoZSBmaW5hbCBgZXh0NGAga2VybmVsIG1vZHVsZSBkZXBlbmRzIG9uIGEgY291cGxlIG9mIGtleSBzb3VyY2UgZmlsZXM6IGBleHRlbnRzLmNgIGFuZCBgZmFzdF9jb21taXQuY2AuIFRoZSBub3RhdGlvbiBoZXJlLCBgZXh0NC15IDo9IC4uLiBleHRlbnRzLm8gLi4uIGZhc3RfY29tbWl0Lm8gLi4uYCwgc2hvd3MgdGhhdCBib3RoIGBleHRlbnRzLm9gIGFuZCBgZmFzdF9jb21taXQub2AgYXJlIGdldHRpbmcgbGlua2VkIGludG8gdGhlIGBleHQ0YCBtb2R1bGUuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UsIGdpdmVuIHRoZWlyIGZ1bmN0aW9uIGluIHRoZSBmaWxlc3lzdGVtJiMzOTtzIG9wZXJhdGlvbi4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGNvbmRpdGlvbmFsIGJ1aWxkcyBoZXJlLCBzbyBJJiMzOTtsbCBjaGVjayBgZnMvZXh0NC9LY29uZmlnYCB0byBzZWUgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWlnaHQgaW5mbHVlbmNlIHRoZSBpbmNsdXNpb24gb2YgdGhlc2Ugc3BlY2lmaWMgZmlsZXMuIFRpbWUgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVYVDRfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXG5mcy9leHQ0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1RoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxuLS1cbmZzL2V4dDQvS2NvbmZpZy00NS1cbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcbmZzL2V4dDQvS2NvbmZpZy00Ny1cdGJvb2wgXCYjMzQ7RXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZy01NS1cbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxuZnMvZXh0NC9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtFeHQ0IFNlY3VyaXR5IExhYmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTgzMwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDk0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRhcmdldCBmb3IgRnV6emluZyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29tbWl0LiBJJiMzOTtkIHR5cGljYWxseSByZWFjaCBmb3IgYGdpdCBsb2dgIHRvIGdldCB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIGF1dGhvciBleHBsYW5hdGlvbiwgYnV0IGl0IGxvb2tzIGxpa2UgSSBkb24mIzM5O3QgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIHRoYXQuIE5vIHByb2JsZW0sIEkgY2FuIHNlZSB0aGUgY29kZSBkaWZmIGRpcmVjdGx5LiBJJiMzOTttIGZvY3VzaW5nIG9uIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgIHdpdGhpbiBgZnMvZXh0NC9leHRlbnRzLmNgIGFuZCBpdHMgY2FsbCBzaXRlIGluIGBmcy9leHQ0L2Zhc3RfY29tbWl0LmNgOiBgZXh0NF9mY19yZXBsYXlfaW5vZGVgLgoKTGV0JiMzOTtzIGV2YWx1YXRlIGlmIHRoaXMgaXMgd29ydGggZnV6emluZy4KCjEuICAqKlJlYWNoYWJpbGl0eToqKiBJcyB0aGlzIGZhc3QgY29tbWl0IHJlcGxheSByZWFjaGFibGU/IFllcywgYWJzb2x1dGVseS4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgdGhlIG9uZXMgU3l6a2FsbGVyIHJ1bnMgb24sIHVzZSBleHQ0IGltYWdlcyB3aXRoIGZhc3QgY29tbWl0IGVuYWJsZWQuIFN5emthbGxlciBpcyBrbm93biB0byB0ZXN0IGV4dDQgb3BlcmF0aW9ucywgaW5jbHVkaW5nIGpvdXJuYWwgcmVjb3ZlcnkgYW5kIHJlcGxheS4gRHVyaW5nIGEgbW91bnQgd2l0aCBmYXN0IGNvbW1pdCwgaWYgcmVjb3ZlcnkgaXMgbmVlZGVkLCBgZXh0NF9mY19yZXBsYXlgIHJ1bnMgZHVyaW5nIGBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbGAgb3IgYGpiZDJfam91cm5hbF9sb2FkYC4gU3BlY2lmaWNhbGx5LCBkdXJpbmcgdGhlIHJlcGxheSBvZiBgRVhUNF9GQ19UQUdfSU5PREVgLCBgZXh0NF9mY19yZXBsYXlfaW5vZGVgIGNhbGxzIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgLgoKMi4gICoqRG9lcyB0aGUgcGF0Y2ggdG91Y2ggcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZT8qKiBZZXMsIGl0IGRvZXMuIEl0IHRvdWNoZXMgY29yZSBmaWxlc3lzdGVtIGNvZGU6IGBmcy9leHQ0L2V4dGVudHMuY2AgYW5kIGBmcy9leHQ0L2Zhc3RfY29tbWl0LmNgLiBUaGlzIHBhdGNoIGlzIGFsbCBhYm91dCBlcnJvciBoYW5kbGluZy4gSXQmIzM5O3MgY2hhbmdpbmcgaG93IGVycm9ycyBhcmUgcHJvcGFnYXRlZCBhbmQgdGhlIGNvbnRyb2wgZmxvdyBkdXJpbmcgam91cm5hbCByZXBsYXkgb2YgZXh0NCBpbm9kZXMgd2l0aCBmYXN0IGNvbW1pdC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgdGFyZ2V0IGZvciBmdXp6aW5nLiBGaWxlc3lzdGVtIGVycm9yIGhhbmRsaW5nIHBhdGhzIGFyZSBub3RvcmlvdXMgZm9yIHBvdGVudGlhbCBpc3N1ZXMg4oCTIHJlc291cmNlIGxlYWtzLCBsb2NrIGlzc3VlcywgaW52YXJpYW50IHZpb2xhdGlvbnMsIGRvdWJsZSBmcmVlcy4uLiB0aGUgbGlzdCBnb2VzIG9uLiBFc3BlY2lhbGx5IGdpdmVuIFN5emthbGxlciYjMzk7cyBmb2N1cyBvbiBmdXp6aW5nIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIGltYWdlcyB3aGVyZSBgZXh0NF9maW5kX2V4dGVudGAgb3IgYGV4dDRfbWFwX2Jsb2Nrc2AgY2FuIHJldHVybiBlcnJvciBjb2Rlcy4KCiAgICBTbywgeWVhaCwgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIGBXb3J0aEZ1enppbmdgIGlzIGB0cnVlYC4KCk5vdywgZm9yIGBGb2N1c1N5bWJvbHNgLgoKKiAgIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgOiBJdCYjMzk7cyB0aGUgZGlyZWN0bHkgbW9kaWZpZWQgZnVuY3Rpb24sIHNwZWNpZmljIHRvIGZhc3QgY29tbWl0IHJlcGxheS4KKiAgIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWA6IFRoZSBtb2RpZmllZCBjYWxsZXIgaW4gYGZhc3RfY29tbWl0LmNgIGhhbmRsaW5nIGBFWFQ0X0ZDX1RBR19JTk9ERWAuCiogICBgZXh0NF9mY19yZXBsYXlgOiBUaGUgbWFpbiByZXBsYXkgZGlzcGF0Y2ggZnVuY3Rpb24gaW4gYGZhc3RfY29tbWl0LmNgLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzeW1ib2xzIGludm9sdmVkIG9yIG1vZGlmaWVkLCBzbyBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhpczoKSSBjYW4gY29uZmlybSB0aGF0IEkgZm91bmQgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AgZWFybGllciwgZ3JlcHBpbmcgdGhlIGNvZGUsIHNob3dpbmcgdGhhdCBpdCYjMzk7cyBvbmx5IGNhbGxlZCBpbiBgZnMvZXh0NC9mYXN0X2NvbW1pdC5jYCBsaW5lIDIwMDYuIEFsc28sIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAgaXMgY2FsbGVkIGZyb20gYGV4dDRfZmNfcmVwbGF5YCBpbiBgZnMvZXh0NC9mYXN0X2NvbW1pdC5jYC4KCkFyZSBhbnkgb2YgdGhlc2UgdWJpcXVpdG91cz8gTm8sIHRoZXNlIGFyZSBhbGwgc3BlY2lmaWMgdG8gZXh0NCBmYXN0IGNvbW1pdCByZXBsYXkuCgpGaW5hbGx5LCBgRW5hYmxlQ29uZmlnc2AuIFRoZSBleHQ0IGZpbGVzeXN0ZW0gKGBFWFQ0X0ZTYCkgaXMgb2J2aW91c2x5IHJlcXVpcmVkIHRvIGNvbXBpbGUgdGhlIGZpbGVzeXN0ZW0gY29kZS4gRG9lcyBmYXN0IGNvbW1pdCByZXF1aXJlIGFueSBzcGVjaWZpYyBjb25maWcgb3B0aW9ucz8gSXQmIzM5O3Mgd29ydGggY2hlY2tpbmcgaWYgZmFzdCBjb21taXQgaXMgZ3VhcmRlZCBieSBhIHNwZWNpZmljIGBDT05GSUdfYCBvcHRpb24uIEEgcXVpY2sgYGdyZXBgIGZvciBgSk9VUk5BTF9GQVNUX0NPTU1JVGAgb3IgYGZhc3RfY29tbWl0YCBpbiBgZnMvZXh0NC9LY29uZmlnYCBzaG91bGQgcmV2ZWFsIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYXN0X2NvbW1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjAxCgkJCQkJCQlvdXRwdXQ6IDE4MQoJCQkJCQkJdGhvdWdodHM6IDIyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeHQ0IEZhc3QgQ29tbWl0IFRyaWFnZTogQSBTb2xpZCBDb25maXJtYXRpb24qKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdvdC4gVGhlIGZhc3QgY29tbWl0IGZlYXR1cmUgaW4gZXh0NCBpcyBiYWtlZCBpbiwgaXQmIzM5O3MgdW5jb25kaXRpb25hbCDigJMgYGV4dDQteSAmIzQzOz0gZmFzdF9jb21taXQub2AuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBJIHF1aWNrbHkgc2Nhbm5lZCBmb3IgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgd2l0aGluIGBmcy9leHQ0L2AuIEkgZm91bmQgdGhhdCBgQ09ORklHX0VYVDRfREVCVUdgIGFjdGl2YXRlcyB0aGUgYE9wdF9mY19kZWJ1Z19mb3JjZWAgbW91bnQgb3B0aW9uLCBidXQgdGhlIGNvcmUgZmFzdCBjb21taXQgZnVuY3Rpb25hbGl0eSwgYEVYVDRfRkVBVFVSRV9DT01QQVRfRkFTVF9DT01NSVRgLCBhbmQgdGhlIGFzc29jaWF0ZWQgbW91bnQgb3B0aW9uIGBKT1VSTkFMX0ZBU1RfQ09NTUlUYCBhcmUgcGFydCBvZiB0aGUgc3RhbmRhcmQgZmVhdHVyZSBzZXQuIFNvLCB0aGUga2V5IGVuYWJsZXIgaGVyZSwgdGhlIHByaW1hcnkgY29uZmlnLCByZW1haW5zIGBFWFQ0X0ZTYC4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAgd2l0aCB0aGUgdHJpYWdlIGluc3RydWN0aW9ucy4gV29ydGhGdXp6aW5nPyBZZXAsIGFic29sdXRlbHkuIFRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSBjaGFuZ2UgYW5kIHRoZSBmdXp6aW5nIHJlY29tbWVuZGF0aW9uIGlzIGNsZWFyIGFuZCBjb25jaXNlLiBGb2N1c2luZyBvbiBub24tdWJpcXVpdG91cyBzeW1ib2xzLCB0aGUgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyBjaGVjayBpcyBjb3JyZWN0LCB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGluZ3MgbGlrZSBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCwgYGV4dDRfZmNfcmVwbGF5X2lub2RlYCwgYW5kIGBleHQ0X2ZjX3JlcGxheWAuIFRoZSAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OyBpcyBwZXJmZWN0LCByZXF1aXJpbmcgYEVYVDRfRlNgIGFzIGV4cGVjdGVkLgoKRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaGUgaW5mb3JtYXRpb24gaXMgY29uc2lzdGVudCwgdGhlIGFuYWx5c2lzIGlzIHNvdW5kLCBhbmQgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIGFzc2Vzc21lbnQuIEkmIzM5O20gcmVhZHkgdG8gcHJvY2VlZCB3aXRoIHNldHRpbmcgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzJiMzNDssCiAgICAmIzM0O2V4dDRfZmNfcmVwbGF5X2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfZmNfcmVwbGF5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIHByb3BhZ2F0aW9uIGFuZCBjb250cm9sIGZsb3cgZHVyaW5nIGV4dDQgZmFzdCBjb21taXQgam91cm5hbCByZXBsYXkuIEluIGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcygpLCBlcnJvcnMgcmV0dXJuZWQgYnkgZXh0NF9tYXBfYmxvY2tzKCksIHNraXBfaG9sZSgpLCBhbmQgZXh0NF9maW5kX2V4dGVudCgpIGFyZSBub3cgcHJvcGVybHkgY2FwdHVyZWQgYW5kIHJldHVybmVkIGluc3RlYWQgb2Ygc2lsZW50bHkgaWdub3JlZCwgYW5kIGV4dDRfZmNfcmVwbGF5X2lub2RlKCkgaXMgdXBkYXRlZCB0byBoYW5kbGUgYW5kIHByb3BhZ2F0ZSBmYWlsdXJlcy4gVGhlc2UgZXJyb3ItaGFuZGxpbmcgcGF0aHMgaW4gZXh0NCBmaWxlc3lzdGVtIHJlcGxheSBhcmUgcmVhY2hhYmxlIGR1cmluZyBqb3VybmFsIHJlY292ZXJ5IGFuZCBtb3VudCBvcGVyYXRpb25zLCBtYWtpbmcgdGhlbSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nIHdpdGggY29ycnVwdGVkIGRpc2sgaW1hZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzJiMzNDssCiAgICAmIzM0O2V4dDRfZmNfcmVwbGF5X2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfZmNfcmVwbGF5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIHByb3BhZ2F0aW9uIGFuZCBjb250cm9sIGZsb3cgZHVyaW5nIGV4dDQgZmFzdCBjb21taXQgam91cm5hbCByZXBsYXkuIEluIGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcygpLCBlcnJvcnMgcmV0dXJuZWQgYnkgZXh0NF9tYXBfYmxvY2tzKCksIHNraXBfaG9sZSgpLCBhbmQgZXh0NF9maW5kX2V4dGVudCgpIGFyZSBub3cgcHJvcGVybHkgY2FwdHVyZWQgYW5kIHJldHVybmVkIGluc3RlYWQgb2Ygc2lsZW50bHkgaWdub3JlZCwgYW5kIGV4dDRfZmNfcmVwbGF5X2lub2RlKCkgaXMgdXBkYXRlZCB0byBoYW5kbGUgYW5kIHByb3BhZ2F0ZSBmYWlsdXJlcy4gVGhlc2UgZXJyb3ItaGFuZGxpbmcgcGF0aHMgaW4gZXh0NCBmaWxlc3lzdGVtIHJlcGxheSBhcmUgcmVhY2hhYmxlIGR1cmluZyBqb3VybmFsIHJlY292ZXJ5IGFuZCBtb3VudCBvcGVyYXRpb25zLCBtYWtpbmcgdGhlbSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nIHdpdGggY29ycnVwdGVkIGRpc2sgaW1hZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gZXh0NCBmYXN0LWNvbW1pdCByZXBsYXkgY29kZSAoZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKCkgYW5kIGV4dDRfZmNfcmVwbGF5X2lub2RlKCkpLiBJdCBlbnN1cmVzIHRoYXQgd2hlbiBleHQ0X21hcF9ibG9ja3MoKSwgc2tpcF9ob2xlKCksIG9yIGV4dDRfZmluZF9leHRlbnQoKSBmYWlsLCB0aGUgZXJyb3IgY29kZSBpcyBjYXB0dXJlZCwgdGhlIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGNsZWFudXAgd2l0aG91dCB1cGRhdGluZyBvciBkaXJ0eWluZyB0aGUgaW5vZGUsIGFuZCB0aGUgZXJyb3IgaXMgcHJvcGFnYXRlZCB1cCB0aGUgY2FsbCBzdGFjayB0byBhYm9ydCB0aGUgcmVwbGF5LlxuXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIChubyBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3RsLCBldGMuKSwgZWxpbWluYXRpbmcgYW55IHJpc2sgb2YgaW5mby1sZWFrcy5cbi0gTm8gbmV3IG1lbW9yeSBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBvciBsZWZ0IHVuaW5pdGlhbGl6ZWQ7IHRoZSBtb2RpZmllZCBicmFuY2hpbmcgcmVsaWVzIHN0cmljdGx5IG9uIHByb3Blcmx5IGluaXRpYWxpemVkL2Fzc2lnbmVkIHJldHVybiB2YWx1ZXMgYW5kIGVycm9yIHBvaW50ZXJzLlxuLSBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cbi0gQW55IGJ1Z3MgY2F1c2VkIGJ5IGNvcnJ1cHRlZCBqb3VybmFsIHJlcGxheSAoc3VjaCBhcyBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMpIGZhbGwgdW5kZXIgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMsIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQyZTE5ODYyMmRmY2JhMjI1NGI3YzViNmZlN2ZmZTU0YjFkOTFkN2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxNSAwMjoxNjo0MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50cy5jIGIvZnMvZXh0NC9leHRlbnRzLmMKaW5kZXggNzYwMzhiNmMzNjU1Mi4uZjhjODA1ZDgwYzMzYyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHRlbnRzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9leHRlbnRzLmMKQEAgLTYyNzUsNyAmIzQzOzYyNzUsNyBAQCBpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJCW1hcC5tX2xlbiA9IGVuZCAtIGN1cjsKIAkJcmV0ID0gZXh0NF9tYXBfYmxvY2tzKE5VTEwsIGlub2RlLCAmYW1wO21hcCwgMCk7CiAJCWlmIChyZXQgJmx0OyAwKQotCQkJYnJlYWs7CiYjNDM7CQkJZ290byBjbGVhbnVwOwogCQlpZiAocmV0ICZndDsgMCkKIAkJCW51bWJsa3MgJiM0Mzs9IHJldDsKIAkJY3VyID0gY3VyICYjNDM7IG1hcC5tX2xlbjsKQEAgLTYyOTEsMTUgJiM0Mzs2MjkxLDE5IEBAIGludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSkKIAljdXIgPSAwOwogCXJldCA9IHNraXBfaG9sZShpbm9kZSwgJmFtcDtjdXIpOwogCWlmIChyZXQgJmx0OyAwKQotCQlnb3RvIG91dDsKJiM0MzsJCWdvdG8gY2xlYW51cDsKIAlwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoLCAwKTsKLQlpZiAoSVNfRVJSKHBhdGgpKQotCQlnb3RvIG91dDsKJiM0MzsJaWYgKElTX0VSUihwYXRoKSkgewomIzQzOwkJcmV0ID0gUFRSX0VSUihwYXRoKTsKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQogCW51bWJsa3MgJiM0Mzs9IHBhdGgtJmd0O3BfZGVwdGg7CiAJd2hpbGUgKGN1ciAmbHQ7IGVuZCkgewogCQlwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoLCAwKTsKLQkJaWYgKElTX0VSUihwYXRoKSkKLQkJCWJyZWFrOwomIzQzOwkJaWYgKElTX0VSUihwYXRoKSkgewomIzQzOwkJCXJldCA9IFBUUl9FUlIocGF0aCk7CiYjNDM7CQkJZ290byBjbGVhbnVwOwomIzQzOwkJfQogCQlleCA9IHBhdGhbcGF0aC0mZ3Q7cF9kZXB0aF0ucF9leHQ7CiAJCWlmICghZXgpCiAJCQlnb3RvIGNsZWFudXA7CkBAIC02MzA4LDExICYjNDM7NjMxMiwxMyBAQCBpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJCQkJCWV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4KSk7CiAJCXJldCA9IHNraXBfaG9sZShpbm9kZSwgJmFtcDtjdXIpOwogCQlpZiAocmV0ICZsdDsgMCkKLQkJCWJyZWFrOwomIzQzOwkJCWdvdG8gY2xlYW51cDsKIAogCQlwYXRoMiA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aDIsIDApOwotCQlpZiAoSVNfRVJSKHBhdGgyKSkKLQkJCWJyZWFrOwomIzQzOwkJaWYgKElTX0VSUihwYXRoMikpIHsKJiM0MzsJCQlyZXQgPSBQVFJfRVJSKHBhdGgyKTsKJiM0MzsJCQlnb3RvIGNsZWFudXA7CiYjNDM7CQl9CiAKIAkJZm9yIChpID0gMDsgaSAmbHQ7PSBtYXgocGF0aC0mZ3Q7cF9kZXB0aCwgcGF0aDItJmd0O3BfZGVwdGgpOyBpJiM0MzsmIzQzOykgewogCQkJY21wMSA9IGNtcDIgPSAwOwpAQCAtNjMzMyw3ICYjNDM7NjMzOSw3IEBAIGludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSkKIGNsZWFudXA6CiAJZXh0NF9mcmVlX2V4dF9wYXRoKHBhdGgpOwogCWV4dDRfZnJlZV9leHRfcGF0aChwYXRoMik7Ci0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIGludCBleHQ0X2V4dF9jbGVhcl9iYihzdHJ1Y3QgaW5vZGUgKmlub2RlKQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9mYXN0X2NvbW1pdC5jIGIvZnMvZXh0NC9mYXN0X2NvbW1pdC5jCmluZGV4IDBjYWM4OTBjZjM3MDIuLjgxMTBiMDFlMzZjMTEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZmFzdF9jb21taXQuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2Zhc3RfY29tbWl0LmMKQEAgLTIwMDIsOCAmIzQzOzIwMDIsMTEgQEAgc3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCSAqIGNyYXNoaW5nLiBUaGlzIHNob3VsZCBiZSBmaXhlZCBidXQgdW50aWwgdGhlbiwgd2UgY2FsY3VsYXRlCiAJICogdGhlIG51bWJlciBvZiBibG9ja3MgdGhlIGlub2RlLgogCSAqLwotCWlmICghZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpKQotCQlleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoaW5vZGUpOwomIzQzOwlpZiAoIWV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSkgewomIzQzOwkJcmV0ID0gZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKGlub2RlKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBvdXRfYnJlbHNlOwomIzQzOwl9CiAKIAlpbm9kZS0mZ3Q7aV9nZW5lcmF0aW9uID0gbGUzMl90b19jcHUoZXh0NF9yYXdfaW5vZGUoJmFtcDtpbG9jKS0mZ3Q7aV9nZW5lcmF0aW9uKTsKIAlleHQ0X3Jlc2V0X2lub2RlX3NlZWQoaW5vZGUpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk4NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBFdmFsdWF0aW9uOiBFeHQ0IFBhdGNoIEFuYWx5c2lzKioKCk9rYXksIHNvIHRoZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCB0byB0aGUgZXh0NCBmaWxlc3lzdGVtIHJlcXVpcmVzIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGFjdHVhbGx5IGJlaW5nIGNoYW5nZWQuIFRoZSBmaWxlIGlzIGBmcy9leHQ0L2V4dGVudHMuY2AsIHNwZWNpZmljYWxseSB0aGUgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AgZnVuY3Rpb24uIEl0IHNlZW1zIGxpa2UgdGhlIHBhdGNoIGZvY3VzZXMgb24gZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEkgc2VlIGEgcGF0dGVybjogdGhlIGNoYW5nZXMgcHJlZG9taW5hbnRseSBpbnZvbHZlIHJlcGxhY2luZyBgYnJlYWtgIG9yIGBnb3RvIG91dGAgd2l0aCBgZ290byBjbGVhbnVwYCBhZnRlciBlbmNvdW50ZXJpbmcgbmVnYXRpdmUgcmV0dXJuIHZhbHVlcyBmcm9tIHZhcmlvdXMgZnVuY3Rpb25zIGxpa2UgYGV4dDRfbWFwX2Jsb2Nrc2AsIGBza2lwX2hvbGVgLCBhbmQgYGV4dDRfZmluZF9leHRlbnRgLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGNsZWFudXAgcHJvY2VkdXJlIGluIHRoZSBrZXJuZWwgLSBpdCYjMzk7cyBtYWtpbmcgc3VyZSByZXNvdXJjZXMgYXJlIGZyZWVkIHdoZW4gdGhpbmdzIGdvIHdyb25nLgoKVGhlIGtleSB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgdXNlIG9mIGBJU19FUlJgIHRvIGNoZWNrIGZvciBlcnJvciBwb2ludGVycyBmcm9tIGBleHQ0X2ZpbmRfZXh0ZW50YC4gVGhhdCBtYWtlcyBtZSB0aGluayBhYm91dCBwb3RlbnRpYWwgcmVzb3VyY2UgbGVha3MuIFNwZWNpZmljYWxseSwgaWYgYGV4dDRfZmluZF9leHRlbnRgIHJldHVybnMgYW4gZXJyb3IgcG9pbnRlciAoYEVSUl9QVFJgKSwgd2hhdCBkb2VzIGBleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aClgIGRvPyBUaGlzIGlzIGEgcG9pbnQgb2YgY29uY2VybiBiZWNhdXNlIGZyZWVpbmcgYSBwb2ludGVyIHRoYXQgaXMgYW4gZXJyb3IsIGlzIHNvbWV0aGluZyB0byBsb29rIGZvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXJ0IG9mIHRoZSBwYXRjaC4gSSBuZWVkIHRvIGtub3cgaWYgdGhlIGBleHQ0X2ZyZWVfZXh0X3BhdGhgIGhhbmRsZXMgZXJyb3IgcG9pbnRlcnMgZ3JhY2VmdWxseS4gSWYgbm90LCB3ZSBoYXZlIGEgcHJvYmxlbS4KCkFuZCB0aGVuIHRoZXJlJiMzOTtzIHRoZSBgZnMvZXh0NC9mYXN0X2NvbW1pdC5jYCBmaWxlLiBUaGUgYGV4dDRfZmNfcmVwbGF5X2lub2RlYCBmdW5jdGlvbiBjYWxscyBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCBidXQgb25seSBpZiB0aGUgaW5vZGUgZG9lc24mIzM5O3QgaGF2ZSBpbmxpbmUgZGF0YS4gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgY2FsbCBkaWN0YXRlcyB3aGV0aGVyIHdlIGV4aXQuIE9rYXksIHRoaXMgaXMgaW1wb3J0YW50IGNvbnRleHQgLSB0aGlzIGlzIGEgZnVuY3Rpb24gdGhhdCBtaWdodCAqdHJpZ2dlciogb3VyIGZ1bmN0aW9uIG9mIGludGVyZXN0IGlmIHRoZSBpbm9kZSBkb2VzbiYjMzk7dCBoYXZlIGlubGluZSBkYXRhLgoKQWxyaWdodCwgSSBuZWVkIHRvIGRpdmUgaW50byBgZnMvZXh0NC9leHRlbnRzLmNgIGFyb3VuZCBsaW5lIDYyNzUuIEkmIzM5O2xsIHJlYWQgdGhlIGNvZGUgYXJvdW5kIHRoYXQgYXJlYSB1c2luZyBteSB0b29saW5nIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcyBhbmQgd2hldGhlciBhbnkgY3JpdGljYWwgcmVzb3VyY2UgY2xlYW51cCBpcyBtaXNzZWQgd2hlbiBhbiBlcnJvciBpcyBoaXQuIEkgYW0gbGVhbmluZyB0b3dhcmRzIHRoaXMgcGF0Y2ggKm5vdCogcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24sIGJ1dCBJIHdhbnQgdG8gYmUgMTAwJSBzdXJlIHRoZSBlcnJvciBwYXRocyBhcmUgcHJvcGVybHkgaGFuZGxlZCwgZXNwZWNpYWxseSB0aGF0IGBleHQ0X2ZyZWVfZXh0X3BhdGhgIGNhbGwuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHRlbnRzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzYyNjA6XHRcbjYyNjE6XHRcdC8qIERldGVybWluIHRoZSBzaXplIG9mIHRoZSBmaWxlIGZpcnN0ICovXG42MjYyOlx0XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgRVhUX01BWF9CTE9DS1MgLSAxLCBOVUxMLFxuNjI2MzpcdFx0XHRcdFx0XHRFWFQ0X0VYX05PQ0FDSEUpO1xuNjI2NDpcdFx0aWYgKElTX0VSUihwYXRoKSlcbjYyNjU6XHRcdFx0cmV0dXJuIFBUUl9FUlIocGF0aCk7XG42MjY2Olx0XHRleCA9IHBhdGhbcGF0aC1cdTAwM2VwX2RlcHRoXS5wX2V4dDtcbjYyNjc6XHRcdGlmICghZXgpXG42MjY4Olx0XHRcdGdvdG8gb3V0O1xuNjI2OTpcdFx0ZW5kID0gbGUzMl90b19jcHUoZXgtXHUwMDNlZWVfYmxvY2spICYjNDM7IGV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4KTtcbjYyNzA6XHRcbjYyNzE6XHRcdC8qIENvdW50IHRoZSBudW1iZXIgb2YgZGF0YSBibG9ja3MgKi9cbjYyNzI6XHRcdGN1ciA9IDA7XG42MjczOlx0XHR3aGlsZSAoY3VyIFx1MDAzYyBlbmQpIHtcbjYyNzQ6XHRcdFx0bWFwLm1fbGJsayA9IGN1cjtcbjYyNzU6XHRcdFx0bWFwLm1fbGVuID0gZW5kIC0gY3VyO1xuNjI3NjpcdFx0XHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFx1MDAyNm1hcCwgMCk7XG42Mjc3Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG42Mjc4Olx0XHRcdFx0Z290byBjbGVhbnVwO1xuNjI3OTpcdFx0XHRpZiAocmV0IFx1MDAzZSAwKVxuNjI4MDpcdFx0XHRcdG51bWJsa3MgJiM0Mzs9IHJldDtcbjYyODE6XHRcdFx0Y3VyID0gY3VyICYjNDM7IG1hcC5tX2xlbjtcbjYyODI6XHRcdH1cbjYyODM6XHRcbjYyODQ6XHRcdC8qXG42Mjg1Olx0XHQgKiBDb3VudCB0aGUgbnVtYmVyIG9mIGV4dGVudCB0cmVlIGJsb2Nrcy4gV2UgZG8gaXQgYnkgbG9va2luZyB1cFxuNjI4NjpcdFx0ICogdHdvIHN1Y2Nlc3NpdmUgZXh0ZW50cyBhbmQgZGV0ZXJtaW5pbmcgdGhlIGRpZmZlcmVuY2UgYmV0d2VlblxuNjI4NzpcdFx0ICogdGhlaXIgcGF0aHMuIFdoZW4gcGF0aCBpcyBkaWZmZXJlbnQgZm9yIDIgc3VjY2Vzc2l2ZSBleHRlbnRzXG42Mjg4Olx0XHQgKiB3ZSBjb21wYXJlIHRoZSBibG9ja3MgaW4gdGhlIHBhdGggYXQgZWFjaCBsZXZlbCBhbmQgaW5jcmVtZW50XG42Mjg5Olx0XHQgKiBpYmxvY2tzIGJ5IHRvdGFsIG51bWJlciBvZiBkaWZmZXJlbmNlcyBmb3VuZC5cbjYyOTA6XHRcdCAqL1xuNjI5MTpcdFx0Y3VyID0gMDtcbjYyOTI6XHRcdHJldCA9IHNraXBfaG9sZShpbm9kZSwgXHUwMDI2Y3VyKTtcbjYyOTM6XHRcdGlmIChyZXQgXHUwMDNjIDApXG42Mjk0Olx0XHRcdGdvdG8gY2xlYW51cDtcbjYyOTU6XHRcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBjdXIsIHBhdGgsIDApO1xuNjI5NjpcdFx0aWYgKElTX0VSUihwYXRoKSkge1xuNjI5NzpcdFx0XHRyZXQgPSBQVFJfRVJSKHBhdGgpO1xuNjI5ODpcdFx0XHRnb3RvIGNsZWFudXA7XG42Mjk5Olx0XHR9XG42MzAwOlx0XHRudW1ibGtzICYjNDM7PSBwYXRoLVx1MDAzZXBfZGVwdGg7XG42MzAxOlx0XHR3aGlsZSAoY3VyIFx1MDAzYyBlbmQpIHtcbjYzMDI6XHRcdFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aCwgMCk7XG42MzAzOlx0XHRcdGlmIChJU19FUlIocGF0aCkpIHtcbjYzMDQ6XHRcdFx0XHRyZXQgPSBQVFJfRVJSKHBhdGgpO1xuNjMwNTpcdFx0XHRcdGdvdG8gY2xlYW51cDtcbjYzMDY6XHRcdFx0fVxuNjMwNzpcdFx0XHRleCA9IHBhdGhbcGF0aC1cdTAwM2VwX2RlcHRoXS5wX2V4dDtcbjYzMDg6XHRcdFx0aWYgKCFleClcbjYzMDk6XHRcdFx0XHRnb3RvIGNsZWFudXA7XG42MzEwOlx0XG42MzExOlx0XHRcdGN1ciA9IG1heChjdXIgJiM0MzsgMSwgbGUzMl90b19jcHUoZXgtXHUwMDNlZWVfYmxvY2spICYjNDM7XG42MzEyOlx0XHRcdFx0XHRcdGV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4KSk7XG42MzEzOlx0XHRcdHJldCA9IHNraXBfaG9sZShpbm9kZSwgXHUwMDI2Y3VyKTtcbjYzMTQ6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjYzMTU6XHRcdFx0XHRnb3RvIGNsZWFudXA7XG42MzE2Olx0XG42MzE3Olx0XHRcdHBhdGgyID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoMiwgMCk7XG42MzE4Olx0XHRcdGlmIChJU19FUlIocGF0aDIpKSB7XG42MzE5Olx0XHRcdFx0cmV0ID0gUFRSX0VSUihwYXRoMik7XG42MzIwOlx0XHRcdFx0Z290byBjbGVhbnVwO1xuNjMyMTpcdFx0XHR9XG42MzIyOlx0XG42MzIzOlx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBtYXgocGF0aC1cdTAwM2VwX2RlcHRoLCBwYXRoMi1cdTAwM2VwX2RlcHRoKTsgaSYjNDM7JiM0MzspIHtcbjYzMjQ6XHRcdFx0XHRjbXAxID0gY21wMiA9IDA7XG42MzI1Olx0XHRcdFx0aWYgKGkgXHUwMDNjPSBwYXRoLVx1MDAzZXBfZGVwdGgpXG42MzI2Olx0XHRcdFx0XHRjbXAxID0gcGF0aFtpXS5wX2JoID9cbjYzMjc6XHRcdFx0XHRcdFx0cGF0aFtpXS5wX2JoLVx1MDAzZWJfYmxvY2tuciA6IDA7XG42MzI4Olx0XHRcdFx0aWYgKGkgXHUwMDNjPSBwYXRoMi1cdTAwM2VwX2RlcHRoKVxuNjMyOTpcdFx0XHRcdFx0Y21wMiA9IHBhdGgyW2ldLnBfYmggP1xuNjMzMDpcdFx0XHRcdFx0XHRwYXRoMltpXS5wX2JoLVx1MDAzZWJfYmxvY2tuciA6IDA7XG42MzMxOlx0XHRcdFx0aWYgKGNtcDEgIT0gY21wMiBcdTAwMjZcdTAwMjYgY21wMiAhPSAwKVxuNjMzMjpcdFx0XHRcdFx0bnVtYmxrcyYjNDM7JiM0Mzs7XG42MzMzOlx0XHRcdH1cbjYzMzQ6XHRcdH1cbjYzMzU6XHRcbjYzMzY6XHRvdXQ6XG42MzM3Olx0XHRpbm9kZS1cdTAwM2VpX2Jsb2NrcyA9IG51bWJsa3MgXHUwMDNjXHUwMDNjIChpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHMgLSA5KTtcbjYzMzg6XHRcdGV4dDRfbWFya19pbm9kZV9kaXJ0eShOVUxMLCBpbm9kZSk7XG42MzM5Olx0Y2xlYW51cDpcbjYzNDA6XHRcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcbjYzNDE6XHRcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoMik7XG42MzQyOlx0XHRyZXR1cm4gcmV0O1xuNjM0MzpcdH1cbjYzNDQ6XHRcbjYzNDU6XHRpbnQgZXh0NF9leHRfY2xlYXJfYmIoc3RydWN0IGlub2RlICppbm9kZSlcbjYzNDY6XHR7XG42MzQ3Olx0XHRzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCA9IE5VTEw7XG42MzQ4Olx0XHRzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4O1xuNjM0OTpcdFx0ZXh0NF9sYmxrX3QgY3VyID0gMCwgZW5kO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDE5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2YgZXh0NCBpbnRlcm5hbHM6CgoqKkRpdmluZyBpbnRvIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gYmVnaW4gYW4gaW52ZXN0aWdhdGlvbiBhbmQgZ2V0IGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmN0aW9uIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgLiBHaXZlbiB0aGF0IEkmIzM5O20gbGlrZWx5IGtuZWUtZGVlcCBpbiB1bmRlcnN0YW5kaW5nIGV4dDQsIHRoaXMgZnVuY3Rpb24gbmFtZSBzdHJvbmdseSBzdWdnZXN0cyBpdCBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggcmVwbGF5aW5nIG9yIHNldHRpbmcgaW5vZGUgYmxvY2tzIHdpdGhpbiB0aGUgZXh0ZW50IHRyZWUgbWVjaGFuaXNtIG9mIHRoZSBleHQ0IGZpbGUgc3lzdGVtLiBJ4oCZbSBndWVzc2luZyB0aGlzIG1pZ2h0IHJlbGF0ZSB0byB0aGUgam91cm5hbCByZWNvdmVyeSBwcm9jZXNzLCBwb3NzaWJseSBoYW5kbGluZyBtb2RpZmljYXRpb25zIHRvIGV4dGVudC1tYXBwZWQgaW5vZGVzIGFmdGVyIGEgY3Jhc2ggb3IgdW5jbGVhbiBzaHV0ZG93bi4gSSBleHBlY3QgaXQmIzM5O3MgY3J1Y2lhbCBmb3IgZW5zdXJpbmcgZGF0YSBjb25zaXN0ZW5jeSB3aGVuIHJlY292ZXJpbmcgZnJvbSBhbiBpbmNvbXBsZXRlIHdyaXRlIG9yIHRyYW5zYWN0aW9uLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGFuZCB3aGVyZSBpdCYjMzk7cyBiZWluZyBjYWxsZWQuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIGxvZ2ljIHRvIHVuZGVyc3RhbmQgdGhlIGludHJpY2FjaWVzIG9mIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgam91cm5hbGluZyBhbmQgYmxvY2sgYWxsb2NhdGlvbiBsYXllcnMuIFRpbWUgdG8gZGlnIGluIGFuZCB1bnJhdmVsIHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHRlbnRzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzYyNDU6XHRcdGlmIChyZXQgIT0gMClcbjYyNDY6XHRcdFx0cmV0dXJuIDA7XG42MjQ3Olx0XHQqY3VyID0gKmN1ciAmIzQzOyBtYXAubV9sZW47XG42MjQ4Olx0XHRyZXR1cm4gMDtcbjYyNDk6XHR9XG42MjUwOlx0XG42MjUxOlx0LyogQ291bnQgbnVtYmVyIG9mIGJsb2NrcyB1c2VkIGJ5IHRoaXMgaW5vZGUgYW5kIHVwZGF0ZSBpX2Jsb2NrcyAqL1xuNjI1MjpcdGludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcbjYyNTM6XHR7XG42MjU0Olx0XHRzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCA9IE5VTEwsICpwYXRoMiA9IE5VTEw7XG42MjU1Olx0XHRzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4O1xuNjI1NjpcdFx0ZXh0NF9sYmxrX3QgY3VyID0gMCwgZW5kO1xuNjI1NzpcdFx0aW50IG51bWJsa3MgPSAwLCBpLCByZXQgPSAwO1xuNjI1ODpcdFx0ZXh0NF9mc2Jsa190IGNtcDEsIGNtcDI7XG42MjU5Olx0XHRzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDtcbjYyNjA6XHRcbjYyNjE6XHRcdC8qIERldGVybWluIHRoZSBzaXplIG9mIHRoZSBmaWxlIGZpcnN0ICovXG42MjYyOlx0XHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgRVhUX01BWF9CTE9DS1MgLSAxLCBOVUxMLFxuNjI2MzpcdFx0XHRcdFx0XHRFWFQ0X0VYX05PQ0FDSEUpO1xuNjI2NDpcdFx0aWYgKElTX0VSUihwYXRoKSlcbjYyNjU6XHRcdFx0cmV0dXJuIFBUUl9FUlIocGF0aCk7XG42MjY2Olx0XHRleCA9IHBhdGhbcGF0aC1cdTAwM2VwX2RlcHRoXS5wX2V4dDtcbjYyNjc6XHRcdGlmICghZXgpXG42MjY4Olx0XHRcdGdvdG8gb3V0O1xuNjI2OTpcdFx0ZW5kID0gbGUzMl90b19jcHUoZXgtXHUwMDNlZWVfYmxvY2spICYjNDM7IGV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEzNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gbXkgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBEZWVwZXIgaW50byBleHQ0IEZhc3QgQ29tbWl0KioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAgd2l0aGluIGBmcy9leHQ0L2Zhc3RfY29tbWl0LmNgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBmYXN0IGNvbW1pdCBwcm9jZXNzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0cyByb2xlIGluIHJlcGxheWluZyBpbm9kZSBvcGVyYXRpb25zLiBXaGF0IHNwZWNpZmljIGFzcGVjdHMgb2YgaW5vZGUgbWV0YWRhdGEgYXJlIGJlaW5nIHJlY29uc3RydWN0ZWQgb3IgdmFsaWRhdGVkIGR1cmluZyByZXBsYXk/IElzIHRoaXMgcHJpbWFyaWx5IGFib3V0IGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IGFmdGVyIGEgY3Jhc2ggb3IgYSBwb3dlciBmYWlsdXJlIGR1cmluZyBhIGZhc3QgY29tbWl0IHdpbmRvdz8KCkkgd2FudCB0byBjb25zaWRlciBob3cgdGhlIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBqb3VybmFsLiBBcmUgd2UgcmVhZGluZyB0cmFuc2FjdGlvbiBsb2dzLCBhbmQgaWYgc28sIHdoYXQga2luZCBvZiBpbmZvcm1hdGlvbiBpcyBpdCBwdWxsaW5nIHRvIHJlYnVpbGQgdGhlIGlub2RlIHN0YXRlPyBJcyBpdCBqdXN0IHRoZSBpbm9kZSBpdHNlbGYsIG9yIGFyZSB3ZSB3b3JraW5nIHdpdGggYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMgbGlrZSBiaXRtYXBzIG9yIGluZGlyZWN0IGJsb2Nrcz8gSSB3b3VsZCBhbHNvIHdhbnQgdG8gZXhhbWluZSB3aGVyZSBgZXh0NF9mY19yZXBsYXlfaW5vZGVgIGlzIGNhbGxlZCBpbiB0aGUgZmFzdCBjb21taXQgcmVjb3ZlcnkgcGF0aC4gSXMgdGhpcyBleGVjdXRlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgY3Jhc2ggcmVjb3ZlcnksIG9yIGR1cmluZyBhbiBlYXJsaWVyIHBoYXNlIG9mIHRoZSBmYXN0IGNvbW1pdCB0cmFuc2FjdGlvbj8KSSBuZWVkIHRvIGV4YW1pbmUgaXQgbW9yZSBjbG9zZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvZmFzdF9jb21taXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk5MDpcdFxuMTk5MTpcdFx0LyogR2l2ZW4gdGhhdCB3ZSBqdXN0IHdyb3RlIHRoZSBpbm9kZSBvbiBkaXNrLCB0aGlzIFNIT1VMRCBzdWNjZWVkLiAqL1xuMTk5MjpcdFx0aW5vZGUgPSBleHQ0X2lnZXQoc2IsIGlubywgRVhUNF9JR0VUX05PUk1BTCk7XG4xOTkzOlx0XHRpZiAoSVNfRVJSKGlub2RlKSkge1xuMTk5NDpcdFx0XHRleHQ0X2RlYnVnKFwmIzM0O0lub2RlIG5vdCBmb3VuZC5cJiMzNDspO1xuMTk5NTpcdFx0XHRpbm9kZSA9IE5VTEw7XG4xOTk2Olx0XHRcdHJldCA9IC1FRlNDT1JSVVBURUQ7XG4xOTk3Olx0XHRcdGdvdG8gb3V0X2JyZWxzZTtcbjE5OTg6XHRcdH1cbjE5OTk6XHRcbjIwMDA6XHRcdC8qXG4yMDAxOlx0XHQgKiBPdXIgYWxsb2NhdG9yIGNvdWxkIGhhdmUgbWFkZSBkaWZmZXJlbnQgZGVjaXNpb25zIHRoYW4gYmVmb3JlXG4yMDAyOlx0XHQgKiBjcmFzaGluZy4gVGhpcyBzaG91bGQgYmUgZml4ZWQgYnV0IHVudGlsIHRoZW4sIHdlIGNhbGN1bGF0ZVxuMjAwMzpcdFx0ICogdGhlIG51bWJlciBvZiBibG9ja3MgdGhlIGlub2RlLlxuMjAwNDpcdFx0ICovXG4yMDA1Olx0XHRpZiAoIWV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSkge1xuMjAwNjpcdFx0XHRyZXQgPSBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoaW5vZGUpO1xuMjAwNzpcdFx0XHRpZiAocmV0KVxuMjAwODpcdFx0XHRcdGdvdG8gb3V0X2JyZWxzZTtcbjIwMDk6XHRcdH1cbjIwMTA6XHRcbjIwMTE6XHRcdGlub2RlLVx1MDAzZWlfZ2VuZXJhdGlvbiA9IGxlMzJfdG9fY3B1KGV4dDRfcmF3X2lub2RlKFx1MDAyNmlsb2MpLVx1MDAzZWlfZ2VuZXJhdGlvbik7XG4yMDEyOlx0XHRleHQ0X3Jlc2V0X2lub2RlX3NlZWQoaW5vZGUpO1xuMjAxMzpcdFxuMjAxNDpcdFx0ZXh0NF9pbm9kZV9jc3VtX3NldChpbm9kZSwgZXh0NF9yYXdfaW5vZGUoXHUwMDI2aWxvYyksIEVYVDRfSShpbm9kZSkpO1xuMjAxNTpcdFx0cmV0ID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoTlVMTCwgTlVMTCwgaWxvYy5iaCk7XG4yMDE2Olx0XHRzeW5jX2RpcnR5X2J1ZmZlcihpbG9jLmJoKTtcbjIwMTc6XHRvdXRfYnJlbHNlOlxuMjAxODpcdFx0YnJlbHNlKGlsb2MuYmgpO1xuMjAxOTpcdG91dDpcbjIwMjA6XHRcdGlwdXQoaW5vZGUpO1xuMjAyMTpcdFx0aWYgKCFyZXQpXG4yMDIyOlx0XHRcdGJsa2Rldl9pc3N1ZV9mbHVzaChzYi1cdTAwM2VzX2JkZXYpO1xuMjAyMzpcdFxuMjAyNDpcdFx0cmV0dXJuIHJldDtcbjIwMjU6XHR9XG4yMDI2Olx0XG4yMDI3Olx0LypcbjIwMjg6XHQgKiBEZW50cnkgY3JlYXRlIHJlcGxheSBmdW5jdGlvbi5cbjIwMjk6XHQgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDQ1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYGV4dDRfZnJlZV9leHRfcGF0aGAgd2l0aCBhbiBgSVNfRVJSYCBQb2ludGVyKioKCkFscmlnaHQsIEkmIzM5O20gY3VyaW91cy4gVGhlIHF1ZXN0aW9uIGlzLCB3aGF0IGhhcHBlbnMgd2l0aGluIGBleHQ0X2ZyZWVfZXh0X3BhdGhgIGlmIHdlIGZlZWQgaXQgYW4gYElTX0VSUmAgcG9pbnRlcj8gSSBrbm93IHRoZSBpbnRlbnRpb24gaXMgcHJvYmFibHkgdG8gY2xlYW4gdXAgYW4gZXJyb3IgY29uZGl0aW9uLCBidXQgSSB3YW50IHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlIG9mIHRoZSBiZWhhdmlvci4gSXQmIzM5O3MgY3J1Y2lhbCwgd2hlbiBkZWFsaW5nIHdpdGggZmlsZSBzeXN0ZW0gY29kZSwgdG8gaGF2ZSBhIHJvY2stc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGVzZSBlZGdlIGNhc2VzIHRvIHByZXZlbnQgc3VidGxlIGNvcnJ1cHRpb24gaXNzdWVzLgoKU28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIGp1bXAgc3RyYWlnaHQgaW50byB0aGUgYGV4dDRfZnJlZV9leHRfcGF0aGAgZnVuY3Rpb24gZGVmaW5pdGlvbi4gSSBuZWVkIHRvIHdhbGsgdGhyb3VnaCB0aGUgbG9naWMgdGhlcmUsIHN0ZXAgYnkgc3RlcCwgYW5kIGlkZW50aWZ5IGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbGx5IGludmFsaWQgcG9pbnRlcnMuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IG51bGwgcG9pbnRlciBjaGVja3MsIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGRlYWxsb2NhdGlvbiByb3V0aW5lcy4gVGhpcyBpcyBhbGwgYWJvdXQgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIGVycm9yIGhhbmRsaW5nIHJvYnVzdG5lc3MuIEkgbmVlZCB0byBiZSBjb25maWRlbnQgdGhhdCBpdCBncmFjZWZ1bGx5IGhhbmRsZXMgdGhlIGVycm9yIGNvbmRpdGlvbiBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cy4gVGltZSB0byBnZXQgdG8gd29yayEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBleHQ0X2ZyZWVfZXh0X3BhdGgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9MzkzNT1leHRlcm4gc3RydWN0IGV4dDRfZXh0X3BhdGggKmV4dDRfZmluZF9leHRlbnQoc3RydWN0IGlub2RlICosIGV4dDRfbGJsa190LFxuLS1cbmZzL2V4dDQvZXh0NC5oLTM5MzctXHRcdFx0XHRcdCAgICAgIGludCBmbGFncyk7XG5mcy9leHQ0L2V4dDQuaDozOTM4OmV4dGVybiB2b2lkIGV4dDRfZnJlZV9leHRfcGF0aChzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqKTtcbmZzL2V4dDQvZXh0NC5oLTM5MzktZXh0ZXJuIGludCBleHQ0X2V4dF9jaGVja19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz0xMTE9c3RhdGljIHZvaWQgZXh0NF9leHRfZHJvcF9yZWZzKHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTEyMS1cbmZzL2V4dDQvZXh0ZW50cy5jOjEyMjp2b2lkIGV4dDRfZnJlZV9leHRfcGF0aChzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aClcbmZzL2V4dDQvZXh0ZW50cy5jLTEyMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2MTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgY29kZToKCioqRGl2aW5nIGludG8gZXh0NF9mcmVlX2V4dF9wYXRoKioKCk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgZXh0NF9mcmVlX2V4dF9wYXRoYCBpbiBgZnMvZXh0NC9leHRlbnRzLmNgLiBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgaGFuZGxpbmcgZXh0ZW50IGRlYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gZnJlZWluZyBibG9ja3MgYXNzb2NpYXRlZCB3aXRoIGFuIGV4dGVudC1iYXNlZCBmaWxlLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCBvcGVyYXRlcy4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgbG9naWMgZmxvdyBoZXJlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgaXQgbmF2aWdhdGVzIHRoZSBleHRlbnQgdHJlZSwgaGFuZGxlcyBkaWZmZXJlbnQgY2FzZXMgKGUuZy4sIHBhcnRpYWwgdnMuIGZ1bGwgZXh0ZW50cyksIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgbWV0YWRhdGEuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuIEkgZXhwZWN0IHRvIGJlIG9ic2VydmluZyB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGlub2RlIGFuZCB0aGUgYmxvY2sgYWxsb2NhdGlvbiBzdHJ1Y3R1cmVzLiBJIHdhbnQgdG8gc2VlIGlmIGl0IG1ha2VzIHVzZSBvZiBhbnkgb3B0aW1pemF0aW9ucy4gSSBuZWVkIHRvIGVuc3VyZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGRlYWxsb2NhdGlvbi4gVGhlcmUgd2lsbCBiZSBsb3RzIHRvIHVucmF2ZWwgaGVyZSwgYnV0IGJ5IHN0YXJ0aW5nIHdpdGggdGhlIGVudHJ5IHBvaW50LCBgZXh0NF9mcmVlX2V4dF9wYXRoYCwgSSBzaG91bGQgaGF2ZSBhIGdvb2QgYmFzZSBmb3IgZnVydGhlciByZXNlYXJjaCwgc3BlY2lmaWNhbGx5IHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZXh0ZW50IHRyZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHRlbnRzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEyMDpcdH1cbiAxMjE6XHRcbiAxMjI6XHR2b2lkIGV4dDRfZnJlZV9leHRfcGF0aChzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aClcbiAxMjM6XHR7XG4gMTI0Olx0XHRpZiAoSVNfRVJSX09SX05VTEwocGF0aCkpXG4gMTI1Olx0XHRcdHJldHVybjtcbiAxMjY6XHRcdGV4dDRfZXh0X2Ryb3BfcmVmcyhwYXRoKTtcbiAxMjc6XHRcdGtmcmVlKHBhdGgpO1xuIDEyODpcdH1cbiAxMjk6XHRcbiAxMzA6XHQvKlxuIDEzMTpcdCAqIE1ha2Ugc3VyZSAmIzM5O2hhbmRsZSYjMzk7IGhhcyBhdCBsZWFzdCAmIzM5O2NoZWNrX2NyZWQmIzM5OyBjcmVkaXRzLiBJZiBub3QsIHJlc3RhcnRcbiAxMzI6XHQgKiB0cmFuc2FjdGlvbiB3aXRoICYjMzk7cmVzdGFydF9jcmVkJiMzOTsgY3JlZGl0cy4gVGhlIGZ1bmN0aW9uIGRyb3BzIGlfZGF0YV9zZW1cbiAxMzM6XHQgKiB3aGVuIHJlc3RhcnRpbmcgdHJhbnNhY3Rpb24gYW5kIGdldHMgaXQgYWZ0ZXIgdHJhbnNhY3Rpb24gaXMgcmVzdGFydGVkLlxuIDEzNDpcdCAqXG4gMTM1Olx0ICogVGhlIGZ1bmN0aW9uIHJldHVybnMgMCBvbiBzdWNjZXNzLCAxIGlmIHRyYW5zYWN0aW9uIGhhZCB0byBiZSByZXN0YXJ0ZWQsXG4gMTM2Olx0ICogYW5kIFx1MDAzYyAwIGluIGNhc2Ugb2YgZmF0YWwgZXJyb3IuXG4gMTM3Olx0ICovXG4gMTM4Olx0aW50IGV4dDRfZGF0YXNlbV9lbnN1cmVfY3JlZGl0cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIDEzOTpcdFx0XHRcdFx0aW50IGNoZWNrX2NyZWQsIGludCByZXN0YXJ0X2NyZWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMjUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHByZXNlbnRlZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDoKCioqQW5hbHl6aW5nIHRoZSBgZXh0NF9mcmVlX2V4dF9wYXRoYCBJbXByb3ZlbWVudCoqCgpPa2F5LCBzbyBgZXh0NF9mcmVlX2V4dF9wYXRoYCBpcyBub3cgaGFuZGxpbmcgYElTX0VSUl9PUl9OVUxMKHBhdGgpYCBzYWZlbHkuIEdvb2QuIEFsd2F5cyBhIGdvb2QgcHJhY3RpY2UgdG8gcHJvdGVjdCBhZ2FpbnN0IHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBlcnJvciBjb25kaXRpb25zLiBEZWZlbnNpdmUgcHJvZ3JhbW1pbmcgYXQgaXRzIGZpbmVzdC4KCk5vdywgbGV0JiMzOTtzIGRpZyBpbnRvIHRoZSAqd2h5Ki4gV2hhdCB3YXMgdGhlIHRyaWdnZXIgZm9yIHRoaXMgY2hhbmdlPyBXaGF0JiMzOTtzIHRoZSBjb250ZXh0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBpc3N1ZSB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSByYW5kb20gY29kZSB0d2VhazsgdGhlcmUgaGFkIHRvIGJlIGEgc3BlY2lmaWMgcHJvYmxlbSwgYSBidWcsIG9yIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuIE15IG5leHQgbW92ZSBpcyBjbGVhcjogSSYjMzk7bGwgZGl2ZSBpbnRvIHRoZSBnaXQgbG9ncywgdGhhdCYjMzk7cyB3aGVyZSB0aGUgc3RvcnkgbGl2ZXMuIEkmIzM5O2xsIHNlYXJjaCBmb3IgcmVmZXJlbmNlcyB0byBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSBpbnZvbHZlZCBzb21laG93LiBBbHRlcm5hdGl2ZWx5LCBpZiB0aGVyZSB3ZXJlIGFueSBzeXprYWxsZXIgY3Jhc2hlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBhcmVhLCB0aGV5IHdvdWxkIHByb3ZpZGUgY3JpdGljYWwgY2x1ZXMuIFRoaXMgZnVuY3Rpb24gcHJvYmFibHkgd2FzIGludm9sdmVkIGluIHNvbWUga2luZCBvZiBtZW1vcnkgY29ycnVwdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDQuaD0zOTU1PWV4dGVybiB2b2lkIGV4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgZW5kKTtcbmZzL2V4dDQvZXh0NC5oOjM5NTY6ZXh0ZXJuIGludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSk7XG5mcy9leHQ0L2V4dDQuaC0zOTU3LWV4dGVybiBpbnQgZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBzdGFydCxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz02MjM0PXN0YXRpYyBpbnQgc2tpcF9ob2xlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190ICpjdXIpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNjI1MS0vKiBDb3VudCBudW1iZXIgb2YgYmxvY2tzIHVzZWQgYnkgdGhpcyBpbm9kZSBhbmQgdXBkYXRlIGlfYmxvY2tzICovXG5mcy9leHQ0L2V4dGVudHMuYzo2MjUyOmludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvZXh0ZW50cy5jLTYyNTMte1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0xOTI1PXN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjAwNS1cdGlmICghZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpKSB7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjAwNjpcdFx0cmV0ID0gZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKGlub2RlKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDA3LVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTU1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTU5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEV4dDQgRmFzdCBDb21taXQgSm91cm5hbCBSZXBsYXkgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AgZnVuY3Rpb24uIEJlZm9yZSB0aGUgcGF0Y2gsIGlmIGBleHQ0X21hcF9ibG9ja3NgIGZhaWxlZCwgdGhlIGNvZGUgd291bGQgc2ltcGx5IGJyZWFrIG91dCBvZiBpdHMgbG9vcCwgcHJvY2VlZCB0byBjYWxjdWxhdGUgaW5vZGUgYmxvY2tzLCBhbmQgbWFyayB0aGUgaW5vZGUgZGlydHksIGV2ZW4gdGhvdWdoIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBtYXBwaW5nLiBDcnVjaWFsbHksIHRoZSByZXR1cm4gdmFsdWUgb2YgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2Agd2FzICppZ25vcmVkKiBpbiBgZXh0NF9mY19yZXBsYXlfaW5vZGVgLiBUaGlzIG1lYW50IHRoYXQgYSBjb3JydXB0ZWQgZmlsZXN5c3RlbSBzdGF0ZSBjb3VsZCBwb3RlbnRpYWxseSBiZSB3cml0dGVuIHRvIGRpc2sgaWYgYSByZXBsYXkgZXJyb3Igb2NjdXJyZWQuIFRoaXMgaXMuLi4gbm90IGdvb2QuCgpUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHNpZ25pZmljYW50IGNoYW5nZTogbm93LCBhbnkgZmFpbHVyZSBmcm9tIGBleHQ0X21hcF9ibG9ja3NgLCBgc2tpcF9ob2xlYCwgb3IgYGV4dDRfZmluZF9leHRlbnRgIHJlc3VsdHMgaW4gYSBqdW1wIHRvIHRoZSBgY2xlYW51cGAgbGFiZWwuIEF0IGBjbGVhbnVwYCwgdGhlIGZ1bmN0aW9uIG5vdyAqcmV0dXJucyogdGhlIGVycm9yIGNvZGUsIHRoZXJlYnkgcHJvcGFnYXRpbmcgdGhlIGVycm9yLiAgSW4gYGV4dDRfZmNfcmVwbGF5X2lub2RlYCwgdGhpcyBlcnJvciBpcyB0aGVuIGNoZWNrZWQ6ICBgaWYgKHJldCkgZ290byBvdXRfYnJlbHNlO2AgbWVhbmluZyBlcnJvcnMgYXJlIHByb3Blcmx5IGhhbmRsZWQgYW5kIHRoZSBjb3JydXB0aW9uIGlzIHByZXZlbnRlZC4gVGhpcyBpcyBhIGNsZWFyIGltcHJvdmVtZW50LgoKTm93LCBhIGNyaXRpY2FsIGNvbnNpZGVyYXRpb246IGFyZSB3ZSBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciB3cml0ZXMgd2l0aCB0aGlzIHBhdGNoPyBJIG5lZWQgdG8gdmVyaWZ5LiAgVGhpcyBpcyBmYXN0IGNvbW1pdCBqb3VybmFsIHJlcGxheSBjb2RlLCBydW5uaW5nIGR1cmluZyBtb3VudC9yZWNvdmVyeS4gTm8gZGlyZWN0IHVzZXItc3BhY2UgaW50ZXJhY3Rpb24sIG5vIGlvY3Rscywgbm8gbmV0bGluay4gU28sIHRoYXQmIzM5O3Mgb25lIGxlc3MgYXJlYSBvZiBjb25jZXJuLgoKTG9va2luZyBtb3JlIGNsb3NlbHkgYXQgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AsIEkgY2FuIHNlZSBgcmV0YCBpcyBpbml0aWFsaXplZCwgYW5kIGluIHRoZSBsb29wLCBzZXZlcmFsIHNpdHVhdGlvbnMgY291bGQgbWFrZSByZXQgbmVnYXRpdmU6CmByZXQgPSBleHQ0X21hcF9ibG9ja3MoLi4uKWAgYW5kIHRoZW4gZ290byBjbGVhbnVwLgpgcmV0ID0gc2tpcF9ob2xlKC4uLilgIGFuZCB0aGVuIGdvdG8gY2xlYW51cC4KYGlmIChJU19FUlIocGF0aCkpYCBhbmQgdGhlbiBgcmV0ID0gUFRSX0VSUihwYXRoKTsgZ290byBjbGVhbnVwO2AKYGlmICghZXgpYCAgYW5kIGdvdG8gY2xlYW51cC4KYGlmIChJU19FUlIocGF0aDIpKWAgYW5kIHRoZW4gYHJldCA9IFBUUl9FUlIocGF0aDIpOyBnb3RvIGNsZWFudXA7YApgY2xlYW51cDpgIHJldHVybnMgcmV0LgoKSSYjMzk7bSBzcGVjaWZpY2FsbHkgZm9jdXNlZCBvbiB0aGUgcG90ZW50aWFsIHVzZSBvZiB1bmluaXRpYWxpemVkIHN0cnVjdCBtZW1iZXJzLiBJIHNlZSBhIGBzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDtgIGxvY2FsIHZhcmlhYmxlIGlzIHVzZWQgYXMgYW4gYXJndW1lbnQgdG8gYGV4dDRfbWFwX2Jsb2Nrc2AsIGFuZCBwYXNzZWQgYnkgcmVmZXJlbmNlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgY29udGVudHMgb2YgYG1hcGAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkICpiZWZvcmUqIGBleHQ0X21hcF9ibG9ja3NgIGlzIGNhbGxlZC4gQWgsIHJpZ2h0LiBJIHJlbWVtYmVyIHRoZSBjb2RlIGRvZXMgaW5pdGlhbGl6ZSBgbWFwLm1fbGJsayA9IGN1cjsgbWFwLm1fbGVuID0gZW5kIC0gY3VyO2AgYmVmb3JlIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLiBBbmQsIGBmbGFncyA9IDBgLiBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBjb2RlLgoKU28sIGl0ICphcHBlYXJzKiB0aGUgcGF0Y2ggaXRzZWxmIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGUgcHJpbWFyeSBjaGFuZ2UgaXMgdGhlIHJvYnVzdCBlcnJvciBoYW5kbGluZyBhbmQgcHJvcGFnYXRpb24gb2YgZXJyb3IgY29kZXMuIEl0JiMzOTtzIHNhZmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBleHQ0X21hcF9ibG9ja3NcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9MzkyMD1leHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlYyhoYW5kbGVfdCAqaGFuZGxlLFxuZnMvZXh0NC9leHQ0LmgtMzkyMS1cdFx0XHRcdFx0ICAgICBleHQ0X2lvX2VuZF90ICppb19lbmQpO1xuZnMvZXh0NC9leHQ0Lmg6MzkyMjpleHRlcm4gaW50IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC9leHQ0LmgtMzkyMy1cdFx0XHQgICBzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzICptYXAsIGludCBmbGFncyk7XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTYwNT1pbnQgZXh0NF9tYXBfY3JlYXRlX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy02OTktICovXG5mcy9leHQ0L2lub2RlLmM6NzAwOmludCBleHQ0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbmZzL2V4dDQvaW5vZGUuYy03MDEtXHRcdCAgICBzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzICptYXAsIGludCBmbGFncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NzMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFcnJvciBIYW5kbGluZyBpbiBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCBhbmQgYGV4dDRfZmNfcmVwbGF5X2lub2RlYCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbWFwLSZndDttX2ZsYWdzID0gMDtgIGlzIGhhbmRsZWQgY29ycmVjdGx5IGluIGBleHQ0X21hcF9ibG9ja3NgLCB3aGljaCBpdCBhcHBlYXJzIHRvIGJlLCByaWdodCBhdCB0aGUgc3RhcnQuIEFuZCBhY3R1YWxseSwgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBzZWVtIHRvIGhhdmUgdG91Y2hlZCB0aGF0IGFyZWEsIHNvIHdlIGNhbiBwcm9iYWJseSBtb3ZlIG9uLgoKTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGByZXRgLiBJbiBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCwgYHJldGAgaXMgaW5pdGlhbGl6ZWQgcHJvcGVybHkg4oCTIGBpbnQgbnVtYmxrcyA9IDAsIGksIHJldCA9IDA7YCDigJMgdGhhdCBzZWVtcyBmaW5lLiBCdXQsIHdoYXQgaGFwcGVucyB3aGVuIHdlIGhpdCB0aGUgYGdvdG8gY2xlYW51cDtgIGNhbGxzPyBXZSYjMzk7dmUgZ290IGEgc2VyaWVzIG9mIHBvdGVudGlhbGx5IGVycm9yLXNldHRpbmcgYmxvY2tzIHRoZXJlLiBMZXQmIzM5O3MgbWFrZSBzdXJlLiBUaGUgYHJldGAgdmFyaWFibGUgaXMgc2V0IGhlcmUgb24gZXJyb3IgZnJvbSBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zOiBgZXh0NF9tYXBfYmxvY2tzYCwgYHNraXBfaG9sZWAsIG9yIGlmIGBwYXRoYCBpcyBhbiBlcnJvciBwb2ludGVyLiBJdCBhbHNvIGFwcGVhcnMgaXQgY291bGQgYmUgMCBpZiBgZXhgIGlzIG51bGwgb3IgaWYgYHBhdGgyYCBpcyBhbiBlcnJvciBwb2ludGVyLiBUaGVuLCBhdCB0aGUgY2xlYW51cCwgd2UgZnJlZSB0aGUgcGF0aHMsIGFuZCByZXR1cm4gYHJldGAuIE9rYXksIHNvIGl0IHNlZW1zIGxpa2UgdGhlIGVycm9yIGNvZGVzIGFyZSBiZWluZyBwcm9wYWdhdGVkIGNvcnJlY3RseSB0aHJvdWdoIGByZXRgLgoKTm93LCBtb3Zpbmcgb3ZlciB0byBgZXh0NF9mY19yZXBsYXlfaW5vZGVgLCBgcmV0YCBpcyBhbHNvIGFuIGludGVnZXIsIGRlY2xhcmVkIGludGVybmFsbHksIHNvIHRoYXQmIzM5O3MgZ29vZC4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBsaW5lcyAxOTI1LTE5NTAgaW4gYGZzL2V4dDQvZmFzdF9jb21taXQuY2AgdG8gbWFrZSBzdXJlIHRoZXJlJiMzOTtzIG5vIHN1YnRsZSBpc3N1ZSB0aGVyZS4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIHNwZWNpZmljIGVycm9yIGhhbmRsaW5nIGluIHRoaXMgc2VjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2Zhc3RfY29tbWl0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5MjU6XHRzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4xOTI2Olx0XHRcdFx0XHRzdHJ1Y3QgZXh0NF9mY190bF9tZW0gKnRsLCB1OCAqdmFsKVxuMTkyNzpcdHtcbjE5Mjg6XHRcdHN0cnVjdCBleHQ0X2ZjX2lub2RlIGZjX2lub2RlO1xuMTkyOTpcdFx0c3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZTtcbjE5MzA6XHRcdHN0cnVjdCBleHQ0X2lub2RlICpyYXdfZmNfaW5vZGU7XG4xOTMxOlx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDtcbjE5MzI6XHRcdHN0cnVjdCBleHQ0X2lsb2MgaWxvYztcbjE5MzM6XHRcdGludCBpbm9kZV9sZW4sIGlubywgcmV0LCB0YWcgPSB0bC1cdTAwM2VmY190YWc7XG4xOTM0Olx0XHRzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyICplaDtcbjE5MzU6XHRcdHNpemVfdCBvZmZfZ2VuID0gb2Zmc2V0b2Yoc3RydWN0IGV4dDRfaW5vZGUsIGlfZ2VuZXJhdGlvbik7XG4xOTM2Olx0XG4xOTM3Olx0XHRtZW1jcHkoXHUwMDI2ZmNfaW5vZGUsIHZhbCwgc2l6ZW9mKGZjX2lub2RlKSk7XG4xOTM4Olx0XG4xOTM5Olx0XHRpbm8gPSBsZTMyX3RvX2NwdShmY19pbm9kZS5mY19pbm8pO1xuMTk0MDpcdFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIHRhZywgaW5vLCAwLCAwKTtcbjE5NDE6XHRcbjE5NDI6XHRcdGlub2RlID0gZXh0NF9pZ2V0KHNiLCBpbm8sIEVYVDRfSUdFVF9OT1JNQUwpO1xuMTk0MzpcdFx0aWYgKCFJU19FUlIoaW5vZGUpKSB7XG4xOTQ0Olx0XHRcdGV4dDRfZXh0X2NsZWFyX2JiKGlub2RlKTtcbjE5NDU6XHRcdFx0aXB1dChpbm9kZSk7XG4xOTQ2Olx0XHR9XG4xOTQ3Olx0XHRpbm9kZSA9IE5VTEw7XG4xOTQ4Olx0XG4xOTQ5Olx0XHRyZXQgPSBleHQ0X2ZjX3JlY29yZF9tb2RpZmllZF9pbm9kZShzYiwgaW5vKTtcbjE5NTA6XHRcdGlmIChyZXQpXG4xOTUxOlx0XHRcdGdvdG8gb3V0O1xuMTk1MjpcdFxuMTk1MzpcdFx0cmF3X2ZjX2lub2RlID0gKHN0cnVjdCBleHQ0X2lub2RlICopXG4xOTU0Olx0XHRcdCh2YWwgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGV4dDRfZmNfaW5vZGUsIGZjX3Jhd19pbm9kZSkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg0MAoJCQkJCQkJb3V0cHV0OiAyNTcKCQkJCQkJCXRob3VnaHRzOiA5NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogZXh0NCBGYXN0IENvbW1pdCBSZXBsYXkgRXJyb3IgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgZW5zdXJpbmcgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IEtNU0FOLXJlbGV2YW50IGlzc3VlcyBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5IGluIGV4dDQuIFRoZSBwYXRjaCYjMzk7cyBjb3JlIGZ1bmN0aW9uIGlzIHRvIGltcHJvdmUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAgYW5kIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgLiBCYXNpY2FsbHksIGl0JiMzOTtzIG1ha2luZyBzdXJlIGVycm9ycyBkdXJpbmcgYmxvY2sgbWFwcGluZyBhbmQgZXh0ZW50IGxvb2t1cCBhcmUgY29ycmVjdGx5IHByb3BhZ2F0ZWQsIGhhbHRpbmcgdGhlIHJlcGxheSBwcm9jZXNzIGlmIGNvcnJ1cHRpb24gb3Igb3RoZXIgaXNzdWVzIGFyZSBkZXRlY3RlZC4gQmVmb3JlLCB0aGUgY29kZSB3YXMsIGluIHNvbWUgY2FzZXMsIGlnbm9yaW5nIGVycm9ycyBmcm9tIGBleHQ0X2ZpbmRfZXh0ZW50YCwgcHJvY2VlZGluZyB3aXRoIHRoZSByZXBsYXksIGFuZCBwb3RlbnRpYWxseSB3cml0aW5nIGNvcnJ1cHRlZCBpbm9kZSBkYXRhIG9yIGNhdXNpbmcgZG93bnN0cmVhbSBjcmFzaGVzLgoKRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB3ZSBhcmVuJiMzOTt0IGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gSSBjYW4gc2VlIHRoYXQ6CgoqICAgTm8gbmV3IG1lbW9yeSBidWZmZXJzIGFyZSBiZWluZyBhbGxvY2F0ZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4KKiAgIFRoZXJlJiMzOTtzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBiZWluZyByZWFkLgoqICAgV2UmIzM5O3JlIG5vdCBpbnRyb2R1Y2luZyBhbnkgcGFkZGluZyBsZWFrcyB0byB1c2Vyc3BhY2UuCiogICBFcnJvciBjb2RlcyBhcmUgYmVpbmcgZXhwbGljaXRseSBjYXB0dXJlZCAoZS5nLiwgYFBUUl9FUlJgKSBhbmQgcHJvcGFnYXRlZCB1cCB0aGUgY2FsbCBzdGFjay4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHJlcGxheSBpcyBhYm9ydGVkIHVwb24gZGV0ZWN0aW5nIGEgZGlzayBjb3JydXB0aW9uIG9yIG90aGVyIGVycm9yLgoKTXkgbmV4dCBsaW5lIG9mIHRob3VnaHQgaXMgd2hldGhlciBvciBub3QgdGhlcmUgd2VyZSBwcmV2aW91c2x5IGlnbm9yZWQgZXJyb3JzLCBsZWFkaW5nIHRvIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBvciBzaW1pbGFyIGlzc3Vlcy4gVGhlIHByZXZpb3VzIGNvZGUgY29udGFpbmVkIGEgYGJyZWFrYCBmcm9tIGFuIGVycm9yIGNhdXNlZCBieSBgZXh0NF9maW5kX2V4dGVudGAuIFRoaXMgYGJyZWFrYCB3YXMgbGVhZGluZyB0byBleGVjdXRpb24gdGhhdCBjYWxsZWQgYGV4dDRfZnJlZV9leHRfcGF0aGAsIGJ1dCBgcGF0aGAgd2FzIGFjdHVhbGx5IGFuIGBFUlJfUFRSYCwgYW5kIHRoZSBjb2RlIGRpZCBub3QgaGFuZGxlIHRoYXQgZXJyb3IgZ3JhY2VmdWxseSB3aGljaCBjb3VsZCBsZWFkIHRvIGZpbGUgc3lzdGVtIGNvcnJ1cHRpb24uIFRoZSBwYXRjaCBmaXhlcyB0aGlzLgoKVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQmIzM5O3MgZ28gb3ZlciB0aGUgZm91ciBwb2ludHMgd2hlcmUgS01TQU4gbWlnaHQgYmUgdHJpZ2dlcmVkOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlKio6IE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSB2aWEgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIGV0Yy4gVGhpcyBjaGVjayBpcyBwYXNzZWQuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIHdpdGggdW5pbml0aWFsaXplZCB2YXJpYWJsZXMqKjogVGhlIHBhdGNoIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgdGhlIHJldHVybiB2YXJpYWJsZSAoYHJldGApIGFuZCB1c2VzIGV4cGxpY2l0IHJldHVybiBjb2RlcyBhbmQgY2hlY2tzLiBUaGlzIGlzIHBhc3NlZC4KMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uKio6IE5vIG5ldyBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoaWNoIG1heSBjb250YWluIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFuZCB0aGF0IG1pZ2h0IGJlIHJlYWQgbGF0ZXIgb24gcmVhY2hhYmxlIGNvZGUgcGF0aHMgaXMgaW50cm9kdWNlZC4KNC4gICoqQm91bmRzIGNoZWNrcyoqOiBXZSBhcmUgc2FmZSBhcyBubyBuZXcgYm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIHRoYXQgd291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycyBhcmUgaW50cm9kdWNlZC4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRpdmVseSBmYWxzZSBoZXJlLgoKVG8gc3VtbWFyaXplIGZvciB0aGUgcmVjb3JkLCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhbiBlcnJvciBoYW5kbGluZyBmbGF3IGR1cmluZyBleHQ0IGZhc3QtY29tbWl0IHJlcGxheS4gSXQgZW5zdXJlcyB0aGF0IGVycm9ycyBmcm9tIGZ1bmN0aW9ucyBsaWtlIGBleHQ0X21hcF9ibG9ja3NgLCBgc2tpcF9ob2xlYCwgYW5kIGBleHQ0X2ZpbmRfZXh0ZW50YCBhcmUgcHJvcGVybHkgaGFuZGxlZC4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgdGhpcyBtb2RpZmljYXRpb24gZG9lcyAqbm90KiBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm9ybWF0aW9uIGxlYWtzLCBvciBhbnkgb3RoZXIgY29uZGl0aW9uIHRoYXQgY291bGQgdHJpZ2dlciBhIEtNU0FOIGFsZXJ0LiBTdGFuZGFyZCBtZW1vcnkgc2FmZXR5IHRvb2xzIGxpa2UgS0FTQU4gYW5kIGVycm9yIGhhbmRsaW5nIChwYW5pY3MsIGNvcnJ1cHRpb24gcmVwb3J0cykgYXJlIGFwcHJvcHJpYXRlIGhlcmUsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgS01TQU4gaXMgbm90IHJlcXVpcmVkIHRvIGRldGVjdCBidWdzIGluIHRoaXMgcGF0Y2guIEkgd2lsbCBwcm9jZWVkIHdpdGggYSBjbGVhciBjb25zY2llbmNlLiBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gZXh0NCBmYXN0LWNvbW1pdCByZXBsYXkgY29kZSAoZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKCkgYW5kIGV4dDRfZmNfcmVwbGF5X2lub2RlKCkpLiBJdCBlbnN1cmVzIHRoYXQgd2hlbiBleHQ0X21hcF9ibG9ja3MoKSwgc2tpcF9ob2xlKCksIG9yIGV4dDRfZmluZF9leHRlbnQoKSBmYWlsLCB0aGUgZXJyb3IgY29kZSBpcyBjYXB0dXJlZCwgdGhlIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGNsZWFudXAgd2l0aG91dCB1cGRhdGluZyBvciBkaXJ0eWluZyB0aGUgaW5vZGUsIGFuZCB0aGUgZXJyb3IgaXMgcHJvcGFnYXRlZCB1cCB0aGUgY2FsbCBzdGFjayB0byBhYm9ydCB0aGUgcmVwbGF5LlxuXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIChubyBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3RsLCBldGMuKSwgZWxpbWluYXRpbmcgYW55IHJpc2sgb2YgaW5mby1sZWFrcy5cbi0gTm8gbmV3IG1lbW9yeSBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBvciBsZWZ0IHVuaW5pdGlhbGl6ZWQ7IHRoZSBtb2RpZmllZCBicmFuY2hpbmcgcmVsaWVzIHN0cmljdGx5IG9uIHByb3Blcmx5IGluaXRpYWxpemVkL2Fzc2lnbmVkIHJldHVybiB2YWx1ZXMgYW5kIGVycm9yIHBvaW50ZXJzLlxuLSBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cbi0gQW55IGJ1Z3MgY2F1c2VkIGJ5IGNvcnJ1cHRlZCBqb3VybmFsIHJlcGxheSAoc3VjaCBhcyBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMpIGZhbGwgdW5kZXIgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMsIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGV4dDQgZmFzdC1jb21taXQgcmVwbGF5IGNvZGUgKGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcygpIGFuZCBleHQ0X2ZjX3JlcGxheV9pbm9kZSgpKS4gSXQgZW5zdXJlcyB0aGF0IHdoZW4gZXh0NF9tYXBfYmxvY2tzKCksIHNraXBfaG9sZSgpLCBvciBleHQ0X2ZpbmRfZXh0ZW50KCkgZmFpbCwgdGhlIGVycm9yIGNvZGUgaXMgY2FwdHVyZWQsIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSBqdW1wcyB0byBjbGVhbnVwIHdpdGhvdXQgdXBkYXRpbmcgb3IgZGlydHlpbmcgdGhlIGlub2RlLCBhbmQgdGhlIGVycm9yIGlzIHByb3BhZ2F0ZWQgdXAgdGhlIGNhbGwgc3RhY2sgdG8gYWJvcnQgdGhlIHJlcGxheS5cblxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcbi0gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bCwgZXRjLiksIGVsaW1pbmF0aW5nIGFueSByaXNrIG9mIGluZm8tbGVha3MuXG4tIE5vIG5ldyBtZW1vcnkgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgb3IgbGVmdCB1bmluaXRpYWxpemVkOyB0aGUgbW9kaWZpZWQgYnJhbmNoaW5nIHJlbGllcyBzdHJpY3RseSBvbiBwcm9wZXJseSBpbml0aWFsaXplZC9hc3NpZ25lZCByZXR1cm4gdmFsdWVzIGFuZCBlcnJvciBwb2ludGVycy5cbi0gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXG4tIEFueSBidWdzIGNhdXNlZCBieSBjb3JydXB0ZWQgam91cm5hbCByZXBsYXkgKHN1Y2ggYXMgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzKSBmYWxsIHVuZGVyIEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBub3QgS01TQU4uXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE2OjQxLjY2MDg5ODEyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTEwNDU3ODA2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzXCIsXG4gICAgXCJleHQ0X2ZjX3JlcGxheV9pbm9kZVwiLFxuICAgIFwiZXh0NF9mY19yZXBsYXlcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGV4dDQgZmFzdC1jb21taXQgcmVwbGF5IGNvZGUgKGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcygpIGFuZCBleHQ0X2ZjX3JlcGxheV9pbm9kZSgpKS4gSXQgZW5zdXJlcyB0aGF0IHdoZW4gZXh0NF9tYXBfYmxvY2tzKCksIHNraXBfaG9sZSgpLCBvciBleHQ0X2ZpbmRfZXh0ZW50KCkgZmFpbCwgdGhlIGVycm9yIGNvZGUgaXMgY2FwdHVyZWQsIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSBqdW1wcyB0byBjbGVhbnVwIHdpdGhvdXQgdXBkYXRpbmcgb3IgZGlydHlpbmcgdGhlIGlub2RlLCBhbmQgdGhlIGVycm9yIGlzIHByb3BhZ2F0ZWQgdXAgdGhlIGNhbGwgc3RhY2sgdG8gYWJvcnQgdGhlIHJlcGxheS5cXG5cXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bCwgZXRjLiksIGVsaW1pbmF0aW5nIGFueSByaXNrIG9mIGluZm8tbGVha3MuXFxuLSBObyBuZXcgbWVtb3J5IGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIG9yIGxlZnQgdW5pbml0aWFsaXplZDsgdGhlIG1vZGlmaWVkIGJyYW5jaGluZyByZWxpZXMgc3RyaWN0bHkgb24gcHJvcGVybHkgaW5pdGlhbGl6ZWQvYXNzaWduZWQgcmV0dXJuIHZhbHVlcyBhbmQgZXJyb3IgcG9pbnRlcnMuXFxuLSBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cXG4tIEFueSBidWdzIGNhdXNlZCBieSBjb3JydXB0ZWQgam91cm5hbCByZXBsYXkgKHN1Y2ggYXMgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzKSBmYWxsIHVuZGVyIEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBwcm9wYWdhdGlvbiBhbmQgY29udHJvbCBmbG93IGR1cmluZyBleHQ0IGZhc3QgY29tbWl0IGpvdXJuYWwgcmVwbGF5LiBJbiBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoKSwgZXJyb3JzIHJldHVybmVkIGJ5IGV4dDRfbWFwX2Jsb2NrcygpLCBza2lwX2hvbGUoKSwgYW5kIGV4dDRfZmluZF9leHRlbnQoKSBhcmUgbm93IHByb3Blcmx5IGNhcHR1cmVkIGFuZCByZXR1cm5lZCBpbnN0ZWFkIG9mIHNpbGVudGx5IGlnbm9yZWQsIGFuZCBleHQ0X2ZjX3JlcGxheV9pbm9kZSgpIGlzIHVwZGF0ZWQgdG8gaGFuZGxlIGFuZCBwcm9wYWdhdGUgZmFpbHVyZXMuIFRoZXNlIGVycm9yLWhhbmRsaW5nIHBhdGhzIGluIGV4dDQgZmlsZXN5c3RlbSByZXBsYXkgYXJlIHJlYWNoYWJsZSBkdXJpbmcgam91cm5hbCByZWNvdmVyeSBhbmQgbW91bnQgb3BlcmF0aW9ucywgbWFraW5nIHRoZW0gcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZyB3aXRoIGNvcnJ1cHRlZCBkaXNrIGltYWdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTY6NDEuNjYwOTAzNDA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTkyODg4NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0MmUxOTg2MjJkZmNiYTIyNTRiN2M1YjZmZTdmZmU1NGIxZDkxZDdhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDE1IDAyOjE2OjQwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50cy5jIGIvZnMvZXh0NC9leHRlbnRzLmNcXG5pbmRleCA3NjAzOGI2YzM2NTUyLi5mOGM4MDVkODBjMzNjIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jXFxuKysrIGIvZnMvZXh0NC9leHRlbnRzLmNcXG5AQCAtNjI3NSw3ICs2Mjc1LDcgQEAgaW50IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRcXHRtYXAubV9sZW4gPSBlbmQgLSBjdXI7XFxuIFxcdFxcdHJldCA9IGV4dDRfbWFwX2Jsb2NrcyhOVUxMLCBpbm9kZSwgXFx1MDAyNm1hcCwgMCk7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2UgMClcXG4gXFx0XFx0XFx0bnVtYmxrcyArPSByZXQ7XFxuIFxcdFxcdGN1ciA9IGN1ciArIG1hcC5tX2xlbjtcXG5AQCAtNjI5MSwxNSArNjI5MSwxOSBAQCBpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdGN1ciA9IDA7XFxuIFxcdHJldCA9IHNraXBfaG9sZShpbm9kZSwgXFx1MDAyNmN1cik7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoLCAwKTtcXG4tXFx0aWYgKElTX0VSUihwYXRoKSlcXG4tXFx0XFx0Z290byBvdXQ7XFxuK1xcdGlmIChJU19FUlIocGF0aCkpIHtcXG4rXFx0XFx0cmV0ID0gUFRSX0VSUihwYXRoKTtcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuIFxcdG51bWJsa3MgKz0gcGF0aC1cXHUwMDNlcF9kZXB0aDtcXG4gXFx0d2hpbGUgKGN1ciBcXHUwMDNjIGVuZCkge1xcbiBcXHRcXHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoLCAwKTtcXG4tXFx0XFx0aWYgKElTX0VSUihwYXRoKSlcXG4tXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGlmIChJU19FUlIocGF0aCkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gUFRSX0VSUihwYXRoKTtcXG4rXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRcXHR9XFxuIFxcdFxcdGV4ID0gcGF0aFtwYXRoLVxcdTAwM2VwX2RlcHRoXS5wX2V4dDtcXG4gXFx0XFx0aWYgKCFleClcXG4gXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbkBAIC02MzA4LDExICs2MzEyLDEzIEBAIGludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0XFx0XFx0XFx0XFx0ZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oZXgpKTtcXG4gXFx0XFx0cmV0ID0gc2tpcF9ob2xlKGlub2RlLCBcXHUwMDI2Y3VyKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcbiBcXHRcXHRwYXRoMiA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aDIsIDApO1xcbi1cXHRcXHRpZiAoSVNfRVJSKHBhdGgyKSlcXG4tXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGlmIChJU19FUlIocGF0aDIpKSB7XFxuK1xcdFxcdFxcdHJldCA9IFBUUl9FUlIocGF0aDIpO1xcbitcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gbWF4KHBhdGgtXFx1MDAzZXBfZGVwdGgsIHBhdGgyLVxcdTAwM2VwX2RlcHRoKTsgaSsrKSB7XFxuIFxcdFxcdFxcdGNtcDEgPSBjbXAyID0gMDtcXG5AQCAtNjMzMyw3ICs2MzM5LDcgQEAgaW50IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBjbGVhbnVwOlxcbiBcXHRleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aCk7XFxuIFxcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoMik7XFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBpbnQgZXh0NF9leHRfY2xlYXJfYmIoc3RydWN0IGlub2RlICppbm9kZSlcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9mYXN0X2NvbW1pdC5jIGIvZnMvZXh0NC9mYXN0X2NvbW1pdC5jXFxuaW5kZXggMGNhYzg5MGNmMzcwMi4uODExMGIwMWUzNmMxMSAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2Zhc3RfY29tbWl0LmNcXG4rKysgYi9mcy9leHQ0L2Zhc3RfY29tbWl0LmNcXG5AQCAtMjAwMiw4ICsyMDAyLDExIEBAIHN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4gXFx0ICogY3Jhc2hpbmcuIFRoaXMgc2hvdWxkIGJlIGZpeGVkIGJ1dCB1bnRpbCB0aGVuLCB3ZSBjYWxjdWxhdGVcXG4gXFx0ICogdGhlIG51bWJlciBvZiBibG9ja3MgdGhlIGlub2RlLlxcbiBcXHQgKi9cXG4tXFx0aWYgKCFleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSkpXFxuLVxcdFxcdGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrcyhpbm9kZSk7XFxuK1xcdGlmICghZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpKSB7XFxuK1xcdFxcdHJldCA9IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrcyhpbm9kZSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gb3V0X2JyZWxzZTtcXG4rXFx0fVxcbiBcXG4gXFx0aW5vZGUtXFx1MDAzZWlfZ2VuZXJhdGlvbiA9IGxlMzJfdG9fY3B1KGV4dDRfcmF3X2lub2RlKFxcdTAwMjZpbG9jKS1cXHUwMDNlaV9nZW5lcmF0aW9uKTtcXG4gXFx0ZXh0NF9yZXNldF9pbm9kZV9zZWVkKGlub2RlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTY6NDIuMTIwOTQwMzU4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNDA0MDY1NDA2MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc1wiLFxuICAgIFwiZXh0NF9mY19yZXBsYXlfaW5vZGVcIixcbiAgICBcImV4dDRfZmNfcmVwbGF5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgcHJvcGFnYXRpb24gYW5kIGNvbnRyb2wgZmxvdyBkdXJpbmcgZXh0NCBmYXN0IGNvbW1pdCBqb3VybmFsIHJlcGxheS4gSW4gZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKCksIGVycm9ycyByZXR1cm5lZCBieSBleHQ0X21hcF9ibG9ja3MoKSwgc2tpcF9ob2xlKCksIGFuZCBleHQ0X2ZpbmRfZXh0ZW50KCkgYXJlIG5vdyBwcm9wZXJseSBjYXB0dXJlZCBhbmQgcmV0dXJuZWQgaW5zdGVhZCBvZiBzaWxlbnRseSBpZ25vcmVkLCBhbmQgZXh0NF9mY19yZXBsYXlfaW5vZGUoKSBpcyB1cGRhdGVkIHRvIGhhbmRsZSBhbmQgcHJvcGFnYXRlIGZhaWx1cmVzLiBUaGVzZSBlcnJvci1oYW5kbGluZyBwYXRocyBpbiBleHQ0IGZpbGVzeXN0ZW0gcmVwbGF5IGFyZSByZWFjaGFibGUgZHVyaW5nIGpvdXJuYWwgcmVjb3ZlcnkgYW5kIG1vdW50IG9wZXJhdGlvbnMsIG1ha2luZyB0aGVtIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcgd2l0aCBjb3JydXB0ZWQgZGlzayBpbWFnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDJlMTk4NjIyZGZjYmEyMjU0YjdjNWI2ZmU3ZmZlNTRiMWQ5MWQ3YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDAyOjE2OjQwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzLmMgYi9mcy9leHQ0L2V4dGVudHMuY1xuaW5kZXggNzYwMzhiNmMzNjU1Mi4uZjhjODA1ZDgwYzMzYyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jXG4rKysgYi9mcy9leHQ0L2V4dGVudHMuY1xuQEAgLTYyNzUsNyArNjI3NSw3IEBAIGludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0bWFwLm1fbGVuID0gZW5kIC0gY3VyO1xuIFx0XHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFx1MDAyNm1hcCwgMCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0YnJlYWs7XG4rXHRcdFx0Z290byBjbGVhbnVwO1xuIFx0XHRpZiAocmV0IFx1MDAzZSAwKVxuIFx0XHRcdG51bWJsa3MgKz0gcmV0O1xuIFx0XHRjdXIgPSBjdXIgKyBtYXAubV9sZW47XG5AQCAtNjI5MSwxNSArNjI5MSwxOSBAQCBpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRjdXIgPSAwO1xuIFx0cmV0ID0gc2tpcF9ob2xlKGlub2RlLCBcdTAwMjZjdXIpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBvdXQ7XG4rXHRcdGdvdG8gY2xlYW51cDtcbiBcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBjdXIsIHBhdGgsIDApO1xuLVx0aWYgKElTX0VSUihwYXRoKSlcbi1cdFx0Z290byBvdXQ7XG4rXHRpZiAoSVNfRVJSKHBhdGgpKSB7XG4rXHRcdHJldCA9IFBUUl9FUlIocGF0aCk7XG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbiBcdG51bWJsa3MgKz0gcGF0aC1cdTAwM2VwX2RlcHRoO1xuIFx0d2hpbGUgKGN1ciBcdTAwM2MgZW5kKSB7XG4gXHRcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBjdXIsIHBhdGgsIDApO1xuLVx0XHRpZiAoSVNfRVJSKHBhdGgpKVxuLVx0XHRcdGJyZWFrO1xuK1x0XHRpZiAoSVNfRVJSKHBhdGgpKSB7XG4rXHRcdFx0cmV0ID0gUFRSX0VSUihwYXRoKTtcbitcdFx0XHRnb3RvIGNsZWFudXA7XG4rXHRcdH1cbiBcdFx0ZXggPSBwYXRoW3BhdGgtXHUwMDNlcF9kZXB0aF0ucF9leHQ7XG4gXHRcdGlmICghZXgpXG4gXHRcdFx0Z290byBjbGVhbnVwO1xuQEAgLTYzMDgsMTEgKzYzMTIsMTMgQEAgaW50IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRcdFx0XHRleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbihleCkpO1xuIFx0XHRyZXQgPSBza2lwX2hvbGUoaW5vZGUsIFx1MDAyNmN1cik7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0YnJlYWs7XG4rXHRcdFx0Z290byBjbGVhbnVwO1xuIFxuIFx0XHRwYXRoMiA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aDIsIDApO1xuLVx0XHRpZiAoSVNfRVJSKHBhdGgyKSlcbi1cdFx0XHRicmVhaztcbitcdFx0aWYgKElTX0VSUihwYXRoMikpIHtcbitcdFx0XHRyZXQgPSBQVFJfRVJSKHBhdGgyKTtcbitcdFx0XHRnb3RvIGNsZWFudXA7XG4rXHRcdH1cbiBcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2M9IG1heChwYXRoLVx1MDAzZXBfZGVwdGgsIHBhdGgyLVx1MDAzZXBfZGVwdGgpOyBpKyspIHtcbiBcdFx0XHRjbXAxID0gY21wMiA9IDA7XG5AQCAtNjMzMyw3ICs2MzM5LDcgQEAgaW50IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIGNsZWFudXA6XG4gXHRleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aCk7XG4gXHRleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aDIpO1xuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBpbnQgZXh0NF9leHRfY2xlYXJfYmIoc3RydWN0IGlub2RlICppbm9kZSlcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2Zhc3RfY29tbWl0LmMgYi9mcy9leHQ0L2Zhc3RfY29tbWl0LmNcbmluZGV4IDBjYWM4OTBjZjM3MDIuLjgxMTBiMDFlMzZjMTEgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2Zhc3RfY29tbWl0LmNcbisrKyBiL2ZzL2V4dDQvZmFzdF9jb21taXQuY1xuQEAgLTIwMDIsOCArMjAwMiwxMSBAQCBzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHQgKiBjcmFzaGluZy4gVGhpcyBzaG91bGQgYmUgZml4ZWQgYnV0IHVudGlsIHRoZW4sIHdlIGNhbGN1bGF0ZVxuIFx0ICogdGhlIG51bWJlciBvZiBibG9ja3MgdGhlIGlub2RlLlxuIFx0ICovXG4tXHRpZiAoIWV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSlcbi1cdFx0ZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKGlub2RlKTtcbitcdGlmICghZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpKSB7XG4rXHRcdHJldCA9IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrcyhpbm9kZSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBvdXRfYnJlbHNlO1xuK1x0fVxuIFxuIFx0aW5vZGUtXHUwMDNlaV9nZW5lcmF0aW9uID0gbGUzMl90b19jcHUoZXh0NF9yYXdfaW5vZGUoXHUwMDI2aWxvYyktXHUwMDNlaV9nZW5lcmF0aW9uKTtcbiBcdGV4dDRfcmVzZXRfaW5vZGVfc2VlZChpbm9kZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxNjo0Mi4xMjA5NDI1NThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMTY4OTY5MTU4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipBbmFseXppbmcgdGhlIEV4dDQgRmlsZSBTeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGZzL2V4dDQvZXh0ZW50cy5jYCBhbmQgYGZzL2V4dDQvZmFzdF9jb21taXQuY2AuIFRoYXQgbmFycm93cyBkb3duIHRoZSBhcmVhIG9mIGNvbmNlcm4gc2lnbmlmaWNhbnRseS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGBmcy9leHQ0YCBkaXJlY3RvcnkgYW5kIHN0YXJ0IGluc3BlY3RpbmcgdGhlIGRpZmYuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIHRvIHRoZSBleHRlbnQgaGFuZGxpbmcgYW5kIGZhc3QgY29tbWl0IG1lY2hhbmlzbXMuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCB0byBFeHQ0J3MgcGVyZm9ybWFuY2UgYW5kIGRhdGEgaW50ZWdyaXR5LCBzbyBJJ2xsIG5lZWQgYSBnb29kIGdyYXNwIG9mIHRoZSBjb250ZXh0LlxuXG5JJ2xsIGJlIHJlYWNoaW5nIGZvciBteSB0b29scy4gSSdsbCBwcm9iYWJseSB1c2UgYSBgcmVhZC1maWxlYCBjb21tYW5kLCBpZiBhdmFpbGFibGUsIG9yIGV2ZW4gYGdyZXBwZXJgIHRvIHF1aWNrbHkgbG9jYXRlIHdoZXJlIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgIGFuZCBgZXh0NF9mY19yZXBsYXlfaW5vZGVgIGFyZSBkZWZpbmVkIGFuZCB1c2VkLiBVbmRlcnN0YW5kaW5nIHRoZSBwdXJwb3NlIG9mIHRob3NlIHNwZWNpZmljIGZ1bmN0aW9ucyB3aWxsIGJlIGNydWNpYWwuIFJlcGxheSBvcGVyYXRpb25zIGFyZSBhbG1vc3QgYWx3YXlzIGNyaXRpY2FsIHRvIGVuc3VyaW5nIGNvbnNpc3RlbmN5IGFmdGVyIGEgY3Jhc2ggb3IgcG93ZXIgZmFpbHVyZSwgc28gSSdtIGV4cGVjdGluZyBzb21ldGhpbmcgaW1wb3J0YW50IHRvIGJlIGhhcHBlbmluZyB0aGVyZSwgcG90ZW50aWFsbHkgcmVsYXRlZCB0byBibG9jayBhbGxvY2F0aW9uIG9yIGlub2RlIHN0YXRlIGR1cmluZyByZWNvdmVyeS4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE3OjEzLjgxMDYzNjQ0M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NDkzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L2V4dGVudHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MjY1LFxuICBcIkxpbmVDb3VudFwiOiA4NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2MjY1OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHBhdGgpO1xcbjYyNjY6XFx0XFx0ZXggPSBwYXRoW3BhdGgtXFx1MDAzZXBfZGVwdGhdLnBfZXh0O1xcbjYyNjc6XFx0XFx0aWYgKCFleClcXG42MjY4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjYyNjk6XFx0XFx0ZW5kID0gbGUzMl90b19jcHUoZXgtXFx1MDAzZWVlX2Jsb2NrKSArIGV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4KTtcXG42MjcwOlxcdFxcbjYyNzE6XFx0XFx0LyogQ291bnQgdGhlIG51bWJlciBvZiBkYXRhIGJsb2NrcyAqL1xcbjYyNzI6XFx0XFx0Y3VyID0gMDtcXG42MjczOlxcdFxcdHdoaWxlIChjdXIgXFx1MDAzYyBlbmQpIHtcXG42Mjc0OlxcdFxcdFxcdG1hcC5tX2xibGsgPSBjdXI7XFxuNjI3NTpcXHRcXHRcXHRtYXAubV9sZW4gPSBlbmQgLSBjdXI7XFxuNjI3NjpcXHRcXHRcXHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFxcdTAwMjZtYXAsIDApO1xcbjYyNzc6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuNjI3ODpcXHRcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuNjI3OTpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2UgMClcXG42MjgwOlxcdFxcdFxcdFxcdG51bWJsa3MgKz0gcmV0O1xcbjYyODE6XFx0XFx0XFx0Y3VyID0gY3VyICsgbWFwLm1fbGVuO1xcbjYyODI6XFx0XFx0fVxcbjYyODM6XFx0XFxuNjI4NDpcXHRcXHQvKlxcbjYyODU6XFx0XFx0ICogQ291bnQgdGhlIG51bWJlciBvZiBleHRlbnQgdHJlZSBibG9ja3MuIFdlIGRvIGl0IGJ5IGxvb2tpbmcgdXBcXG42Mjg2OlxcdFxcdCAqIHR3byBzdWNjZXNzaXZlIGV4dGVudHMgYW5kIGRldGVybWluaW5nIHRoZSBkaWZmZXJlbmNlIGJldHdlZW5cXG42Mjg3OlxcdFxcdCAqIHRoZWlyIHBhdGhzLiBXaGVuIHBhdGggaXMgZGlmZmVyZW50IGZvciAyIHN1Y2Nlc3NpdmUgZXh0ZW50c1xcbjYyODg6XFx0XFx0ICogd2UgY29tcGFyZSB0aGUgYmxvY2tzIGluIHRoZSBwYXRoIGF0IGVhY2ggbGV2ZWwgYW5kIGluY3JlbWVudFxcbjYyODk6XFx0XFx0ICogaWJsb2NrcyBieSB0b3RhbCBudW1iZXIgb2YgZGlmZmVyZW5jZXMgZm91bmQuXFxuNjI5MDpcXHRcXHQgKi9cXG42MjkxOlxcdFxcdGN1ciA9IDA7XFxuNjI5MjpcXHRcXHRyZXQgPSBza2lwX2hvbGUoaW5vZGUsIFxcdTAwMjZjdXIpO1xcbjYyOTM6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuNjI5NDpcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuNjI5NTpcXHRcXHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoLCAwKTtcXG42Mjk2OlxcdFxcdGlmIChJU19FUlIocGF0aCkpIHtcXG42Mjk3OlxcdFxcdFxcdHJldCA9IFBUUl9FUlIocGF0aCk7XFxuNjI5ODpcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuNjI5OTpcXHRcXHR9XFxuNjMwMDpcXHRcXHRudW1ibGtzICs9IHBhdGgtXFx1MDAzZXBfZGVwdGg7XFxuNjMwMTpcXHRcXHR3aGlsZSAoY3VyIFxcdTAwM2MgZW5kKSB7XFxuNjMwMjpcXHRcXHRcXHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoLCAwKTtcXG42MzAzOlxcdFxcdFxcdGlmIChJU19FUlIocGF0aCkpIHtcXG42MzA0OlxcdFxcdFxcdFxcdHJldCA9IFBUUl9FUlIocGF0aCk7XFxuNjMwNTpcXHRcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuNjMwNjpcXHRcXHRcXHR9XFxuNjMwNzpcXHRcXHRcXHRleCA9IHBhdGhbcGF0aC1cXHUwMDNlcF9kZXB0aF0ucF9leHQ7XFxuNjMwODpcXHRcXHRcXHRpZiAoIWV4KVxcbjYzMDk6XFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbjYzMTA6XFx0XFxuNjMxMTpcXHRcXHRcXHRjdXIgPSBtYXgoY3VyICsgMSwgbGUzMl90b19jcHUoZXgtXFx1MDAzZWVlX2Jsb2NrKSArXFxuNjMxMjpcXHRcXHRcXHRcXHRcXHRcXHRleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbihleCkpO1xcbjYzMTM6XFx0XFx0XFx0cmV0ID0gc2tpcF9ob2xlKGlub2RlLCBcXHUwMDI2Y3VyKTtcXG42MzE0OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjYzMTU6XFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbjYzMTY6XFx0XFxuNjMxNzpcXHRcXHRcXHRwYXRoMiA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aDIsIDApO1xcbjYzMTg6XFx0XFx0XFx0aWYgKElTX0VSUihwYXRoMikpIHtcXG42MzE5OlxcdFxcdFxcdFxcdHJldCA9IFBUUl9FUlIocGF0aDIpO1xcbjYzMjA6XFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbjYzMjE6XFx0XFx0XFx0fVxcbjYzMjI6XFx0XFxuNjMyMzpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2M9IG1heChwYXRoLVxcdTAwM2VwX2RlcHRoLCBwYXRoMi1cXHUwMDNlcF9kZXB0aCk7IGkrKykge1xcbjYzMjQ6XFx0XFx0XFx0XFx0Y21wMSA9IGNtcDIgPSAwO1xcbjYzMjU6XFx0XFx0XFx0XFx0aWYgKGkgXFx1MDAzYz0gcGF0aC1cXHUwMDNlcF9kZXB0aClcXG42MzI2OlxcdFxcdFxcdFxcdFxcdGNtcDEgPSBwYXRoW2ldLnBfYmggP1xcbjYzMjc6XFx0XFx0XFx0XFx0XFx0XFx0cGF0aFtpXS5wX2JoLVxcdTAwM2ViX2Jsb2NrbnIgOiAwO1xcbjYzMjg6XFx0XFx0XFx0XFx0aWYgKGkgXFx1MDAzYz0gcGF0aDItXFx1MDAzZXBfZGVwdGgpXFxuNjMyOTpcXHRcXHRcXHRcXHRcXHRjbXAyID0gcGF0aDJbaV0ucF9iaCA/XFxuNjMzMDpcXHRcXHRcXHRcXHRcXHRcXHRwYXRoMltpXS5wX2JoLVxcdTAwM2ViX2Jsb2NrbnIgOiAwO1xcbjYzMzE6XFx0XFx0XFx0XFx0aWYgKGNtcDEgIT0gY21wMiBcXHUwMDI2XFx1MDAyNiBjbXAyICE9IDApXFxuNjMzMjpcXHRcXHRcXHRcXHRcXHRudW1ibGtzKys7XFxuNjMzMzpcXHRcXHRcXHR9XFxuNjMzNDpcXHRcXHR9XFxuNjMzNTpcXHRcXG42MzM2OlxcdG91dDpcXG42MzM3OlxcdFxcdGlub2RlLVxcdTAwM2VpX2Jsb2NrcyA9IG51bWJsa3MgXFx1MDAzY1xcdTAwM2MgKGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzIC0gOSk7XFxuNjMzODpcXHRcXHRleHQ0X21hcmtfaW5vZGVfZGlydHkoTlVMTCwgaW5vZGUpO1xcbjYzMzk6XFx0Y2xlYW51cDpcXG42MzQwOlxcdFxcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcXG42MzQxOlxcdFxcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoMik7XFxuNjM0MjpcXHRcXHRyZXR1cm4gcmV0O1xcbjYzNDM6XFx0fVxcbjYzNDQ6XFx0XFxuNjM0NTpcXHRpbnQgZXh0NF9leHRfY2xlYXJfYmIoc3RydWN0IGlub2RlICppbm9kZSlcXG42MzQ2OlxcdHtcXG42MzQ3OlxcdFxcdHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoID0gTlVMTDtcXG42MzQ4OlxcdFxcdHN0cnVjdCBleHQ0X2V4dGVudCAqZXg7XFxuNjM0OTpcXHRcXHRleHQ0X2xibGtfdCBjdXIgPSAwLCBlbmQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE3OjEzLjgxMTMzNDU0NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4NTQ5ODk3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZywgXCJUaW1lIHRvIGZvY3VzIG9uIHRoZSBzdGFydGluZyBwb2ludCBvZiBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCB3aXRoaW4gdGhlIGBmcy9leHQ0L2V4dGVudHMuY2AgZmlsZS5cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uJ3MgaW5pdGlhbCBzZXR1cCBhbmQgaG93IGl0IGJlZ2lucyB0aGUgcmVwbGF5IHByb2Nlc3MgZm9yIGV4dGVudC1iYXNlZCBpbm9kZXMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBvdmVyYWxsIGRlc2lnbiwgd2hlcmUgaXQgYmVnaW5zIHRoZSBwcm9jZXNzLCBhbmQgd2hhdCBpdCBkb2VzIGZpcnN0LiBLbm93aW5nIGl0cyBpbml0aWFsIG9wZXJhdGlvbnMgaXMgY3J1Y2lhbCBmb3IgZGVjaXBoZXJpbmcgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIGV4dGVudCByZXBsYXkgbWVjaGFuaXNtLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgdmFyaWFibGVzIGl0J3MgdXNpbmcgYW5kIGhvdyBpdCdzIHNldHRpbmcgdGhpbmdzIHVwIGJlZm9yZSBkaXZpbmcgaW50byB0aGUgY29yZSBsb2dpYy4gVGltZSB0byBnZXQgc3RhcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ3MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTc6MTUuNjY2MzI3MDM3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyMjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvZXh0ZW50cy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYyNDAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYyNDA6XFx0XFx0bWFwLm1fbGVuID0gKChpbm9kZS1cXHUwMDNlaV9zaXplKSBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemVfYml0cykgLSAqY3VyO1xcbjYyNDE6XFx0XFxuNjI0MjpcXHRcXHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFxcdTAwMjZtYXAsIDApO1xcbjYyNDM6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuNjI0NDpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjYyNDU6XFx0XFx0aWYgKHJldCAhPSAwKVxcbjYyNDY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNjI0NzpcXHRcXHQqY3VyID0gKmN1ciArIG1hcC5tX2xlbjtcXG42MjQ4OlxcdFxcdHJldHVybiAwO1xcbjYyNDk6XFx0fVxcbjYyNTA6XFx0XFxuNjI1MTpcXHQvKiBDb3VudCBudW1iZXIgb2YgYmxvY2tzIHVzZWQgYnkgdGhpcyBpbm9kZSBhbmQgdXBkYXRlIGlfYmxvY2tzICovXFxuNjI1MjpcXHRpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuNjI1MzpcXHR7XFxuNjI1NDpcXHRcXHRzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCA9IE5VTEwsICpwYXRoMiA9IE5VTEw7XFxuNjI1NTpcXHRcXHRzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4O1xcbjYyNTY6XFx0XFx0ZXh0NF9sYmxrX3QgY3VyID0gMCwgZW5kO1xcbjYyNTc6XFx0XFx0aW50IG51bWJsa3MgPSAwLCBpLCByZXQgPSAwO1xcbjYyNTg6XFx0XFx0ZXh0NF9mc2Jsa190IGNtcDEsIGNtcDI7XFxuNjI1OTpcXHRcXHRzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDtcXG42MjYwOlxcdFxcbjYyNjE6XFx0XFx0LyogRGV0ZXJtaW4gdGhlIHNpemUgb2YgdGhlIGZpbGUgZmlyc3QgKi9cXG42MjYyOlxcdFxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBFWFRfTUFYX0JMT0NLUyAtIDEsIE5VTEwsXFxuNjI2MzpcXHRcXHRcXHRcXHRcXHRcXHRFWFQ0X0VYX05PQ0FDSEUpO1xcbjYyNjQ6XFx0XFx0aWYgKElTX0VSUihwYXRoKSlcXG42MjY1OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHBhdGgpO1xcbjYyNjY6XFx0XFx0ZXggPSBwYXRoW3BhdGgtXFx1MDAzZXBfZGVwdGhdLnBfZXh0O1xcbjYyNjc6XFx0XFx0aWYgKCFleClcXG42MjY4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjYyNjk6XFx0XFx0ZW5kID0gbGUzMl90b19jcHUoZXgtXFx1MDAzZWVlX2Jsb2NrKSArIGV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4KTtcXG42MjcwOlxcdFxcbjYyNzE6XFx0XFx0LyogQ291bnQgdGhlIG51bWJlciBvZiBkYXRhIGJsb2NrcyAqL1xcbjYyNzI6XFx0XFx0Y3VyID0gMDtcXG42MjczOlxcdFxcdHdoaWxlIChjdXIgXFx1MDAzYyBlbmQpIHtcXG42Mjc0OlxcdFxcdFxcdG1hcC5tX2xibGsgPSBjdXI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE3OjE1LjY2NjU3MTc2OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4NjI3NTg5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZm9jdXNpbmcgb24gYGZzL2V4dDQvZmFzdF9jb21taXQuY2AgYXJvdW5kIGxpbmUgMjAwMi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjMyMSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTc6MTcuNTI5MzMzMzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9mYXN0X2NvbW1pdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5ODAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5ODA6XFx0XFx0LyogSW1tZWRpYXRlbHkgdXBkYXRlIHRoZSBpbm9kZSBvbiBkaXNrLiAqL1xcbjE5ODE6XFx0XFx0cmV0ID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoTlVMTCwgTlVMTCwgaWxvYy5iaCk7XFxuMTk4MjpcXHRcXHRpZiAocmV0KVxcbjE5ODM6XFx0XFx0XFx0Z290byBvdXRfYnJlbHNlO1xcbjE5ODQ6XFx0XFx0cmV0ID0gc3luY19kaXJ0eV9idWZmZXIoaWxvYy5iaCk7XFxuMTk4NTpcXHRcXHRpZiAocmV0KVxcbjE5ODY6XFx0XFx0XFx0Z290byBvdXRfYnJlbHNlO1xcbjE5ODc6XFx0XFx0cmV0ID0gZXh0NF9tYXJrX2lub2RlX3VzZWQoc2IsIGlubyk7XFxuMTk4ODpcXHRcXHRpZiAocmV0KVxcbjE5ODk6XFx0XFx0XFx0Z290byBvdXRfYnJlbHNlO1xcbjE5OTA6XFx0XFxuMTk5MTpcXHRcXHQvKiBHaXZlbiB0aGF0IHdlIGp1c3Qgd3JvdGUgdGhlIGlub2RlIG9uIGRpc2ssIHRoaXMgU0hPVUxEIHN1Y2NlZWQuICovXFxuMTk5MjpcXHRcXHRpbm9kZSA9IGV4dDRfaWdldChzYiwgaW5vLCBFWFQ0X0lHRVRfTk9STUFMKTtcXG4xOTkzOlxcdFxcdGlmIChJU19FUlIoaW5vZGUpKSB7XFxuMTk5NDpcXHRcXHRcXHRleHQ0X2RlYnVnKFxcXCJJbm9kZSBub3QgZm91bmQuXFxcIik7XFxuMTk5NTpcXHRcXHRcXHRpbm9kZSA9IE5VTEw7XFxuMTk5NjpcXHRcXHRcXHRyZXQgPSAtRUZTQ09SUlVQVEVEO1xcbjE5OTc6XFx0XFx0XFx0Z290byBvdXRfYnJlbHNlO1xcbjE5OTg6XFx0XFx0fVxcbjE5OTk6XFx0XFxuMjAwMDpcXHRcXHQvKlxcbjIwMDE6XFx0XFx0ICogT3VyIGFsbG9jYXRvciBjb3VsZCBoYXZlIG1hZGUgZGlmZmVyZW50IGRlY2lzaW9ucyB0aGFuIGJlZm9yZVxcbjIwMDI6XFx0XFx0ICogY3Jhc2hpbmcuIFRoaXMgc2hvdWxkIGJlIGZpeGVkIGJ1dCB1bnRpbCB0aGVuLCB3ZSBjYWxjdWxhdGVcXG4yMDAzOlxcdFxcdCAqIHRoZSBudW1iZXIgb2YgYmxvY2tzIHRoZSBpbm9kZS5cXG4yMDA0OlxcdFxcdCAqL1xcbjIwMDU6XFx0XFx0aWYgKCFleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSkpIHtcXG4yMDA2OlxcdFxcdFxcdHJldCA9IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrcyhpbm9kZSk7XFxuMjAwNzpcXHRcXHRcXHRpZiAocmV0KVxcbjIwMDg6XFx0XFx0XFx0XFx0Z290byBvdXRfYnJlbHNlO1xcbjIwMDk6XFx0XFx0fVxcbjIwMTA6XFx0XFxuMjAxMTpcXHRcXHRpbm9kZS1cXHUwMDNlaV9nZW5lcmF0aW9uID0gbGUzMl90b19jcHUoZXh0NF9yYXdfaW5vZGUoXFx1MDAyNmlsb2MpLVxcdTAwM2VpX2dlbmVyYXRpb24pO1xcbjIwMTI6XFx0XFx0ZXh0NF9yZXNldF9pbm9kZV9zZWVkKGlub2RlKTtcXG4yMDEzOlxcdFxcbjIwMTQ6XFx0XFx0ZXh0NF9pbm9kZV9jc3VtX3NldChpbm9kZSwgZXh0NF9yYXdfaW5vZGUoXFx1MDAyNmlsb2MpLCBFWFQ0X0koaW5vZGUpKTtcXG4yMDE1OlxcdFxcdHJldCA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKE5VTEwsIE5VTEwsIGlsb2MuYmgpO1xcbjIwMTY6XFx0XFx0c3luY19kaXJ0eV9idWZmZXIoaWxvYy5iaCk7XFxuMjAxNzpcXHRvdXRfYnJlbHNlOlxcbjIwMTg6XFx0XFx0YnJlbHNlKGlsb2MuYmgpO1xcbjIwMTk6XFx0b3V0OlxcbjIwMjA6XFx0XFx0aXB1dChpbm9kZSk7XFxuMjAyMTpcXHRcXHRpZiAoIXJldClcXG4yMDIyOlxcdFxcdFxcdGJsa2Rldl9pc3N1ZV9mbHVzaChzYi1cXHUwMDNlc19iZGV2KTtcXG4yMDIzOlxcdFxcbjIwMjQ6XFx0XFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTc6MTcuNTI5NDc1MjdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MTAzMDU0NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEZpeDogRGVlcCBEaXZlIGludG8gdGhlIENvbW1pdCBIaXN0b3J5KipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgcGF0Y2gsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgaXQuIE15IGZpcnN0IG1vdmUgaXMgYWx3YXlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2U6IHRoZSBjb21taXQgaGlzdG9yeSwgdGhlIGBnaXQgbG9nYC4gV2hhdCBzcGVjaWZpYyBpc3N1ZSB3ZXJlIHdlIGFkZHJlc3Npbmcgd2l0aCB0aGlzIGNoYW5nZT8gSSdtIG5vdCBnb2luZyB0byBiZSBjb250ZW50IHdpdGgganVzdCBhIHZhZ3VlIGRlc2NyaXB0aW9uLiBJIG5lZWQgdG8gc2VlIHRoZSBjb250ZXh0IOKAkyB0aGUgYnVnIHJlcG9ydCAoSmlyYSwgR2l0SHViIGlzc3VlLCB3aGF0ZXZlciBvdXIgc3lzdGVtIGlzKSwgdGhlIGRpc2N1c3Npb24sIG1heWJlIGV2ZW4gdGhlIHByZWxpbWluYXJ5IGF0dGVtcHRzIHRvIGZpeCBpdC4gS25vd2luZyB0aGUgcHJvYmxlbSBsYW5kc2NhcGUgaXMgYWJzb2x1dGVseSBjcml0aWNhbCBiZWZvcmUgSSBjYW4gYmVnaW4gdG8gYXNzZXNzIHRoZSBxdWFsaXR5IG9mIHRoZSBzb2x1dGlvbi4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgKnJlYXNvbmluZyogYmVoaW5kIHRoZSBmaXgsIGFuZCBkZXRlcm1pbmUgaWYgdGhlIHJvb3QgY2F1c2Ugd2FzIHByb3Blcmx5IGFkZHJlc3NlZCBvciBpZiB0aGlzIGlzIG1lcmVseSBhIGJhbmQtYWlkLiBEaWdnaW5nIGludG8gdGhlIGBnaXQgbG9nYCBpcyB0aGUgZmlyc3Qgc3RlcCBpbiBkZXRlcm1pbmluZyB0aGUgcHJvcGVyIGFzc2Vzc21lbnQgb2YgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzEzNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTc6MjUuNjMyNTMyOTYzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzExNjIzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9Mzk1NT1leHRlcm4gdm9pZCBleHQ0X2V4dF9yZXBsYXlfc2hyaW5rX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGVuZCk7XFxuZnMvZXh0NC9leHQ0Lmg6Mzk1NjpleHRlcm4gaW50IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG5mcy9leHQ0L2V4dDQuaC0zOTU3LWV4dGVybiBpbnQgZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBzdGFydCxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTYyMzQ9c3RhdGljIGludCBza2lwX2hvbGUoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgKmN1cilcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTYyNTEtLyogQ291bnQgbnVtYmVyIG9mIGJsb2NrcyB1c2VkIGJ5IHRoaXMgaW5vZGUgYW5kIHVwZGF0ZSBpX2Jsb2NrcyAqL1xcbmZzL2V4dDQvZXh0ZW50cy5jOjYyNTI6aW50IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvZXh0ZW50cy5jLTYyNTMte1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTE5MjU9c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwMDUtXFx0aWYgKCFleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSkpIHtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjAwNjpcXHRcXHRyZXQgPSBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoaW5vZGUpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDA3LVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE3OjI1LjY3OTY1NTY3N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MjcxMzI2Nzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdW5kZXJzdGFuZGluZyB0aGUgaW1wbGVtZW50YXRpb24gb2YgZmFzdCBjb21taXQgcmVwbGF5IGluIGV4dDQ6XG5cbioqQW5hbHl6aW5nIGV4dDQncyBGYXN0IENvbW1pdCBSZXBsYXkqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBleHQ0X2ZjX3JlcGxheWAgZnVuY3Rpb24gKG9yIHNpbWlsYXIgbmFtZSBpZiBJJ20gb2ZmIHNsaWdodGx5KSBpcyBhY3R1YWxseSAqY2FsbGVkKiB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSBjb2RlLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUgY29kZWJhc2UsIGlzIHRvIHNpbXBseSB1c2UgYGdyZXBgLiBJJ2xsIHNlYXJjaCB0aGUgZXh0NCBzb3VyY2UgdHJlZSBmb3IgYGV4dDRfZmNfcmVwbGF5YC4gSWYgdGhhdCBjb21lcyB1cCBlbXB0eSwgSSdsbCBzd2l0Y2ggdGFjdGljcyBhbmQgbG9vayBmb3IgY2FsbHMgdG8gZnVuY3Rpb25zIGluIGBmYXN0X2NvbW1pdC5jYCwgZ2l2ZW4gdGhhdCdzIHByb2JhYmx5IHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgcGF0aHMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHRyaWdnZXJpbmcgZXZlbnRzIGFuZCB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBvcGVyYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc5MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE3OjI5Ljk1MDk4NDc5MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxNTQxMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9mY19yZXBsYXlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9MTU5Mj1zdHJ1Y3QgZXh0NF9zYl9pbmZvIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTE4NzItI2VuZGlmXFxuZnMvZXh0NC9leHQ0Lmg6MTg3MzpcXHRzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUgc19mY19yZXBsYXlfc3RhdGU7XFxuZnMvZXh0NC9leHQ0LmgtMTg3NC19O1xcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MzA5MD12b2lkIGV4dDRfZmNfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL2V4dDQvZXh0NC5oOjMwOTE6Ym9vbCBleHQ0X2ZjX3JlcGxheV9jaGVja19leGNsdWRlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBleHQ0X2ZzYmxrX3QgYmxvY2spO1xcbmZzL2V4dDQvZXh0NC5oOjMwOTI6dm9pZCBleHQ0X2ZjX3JlcGxheV9jbGVhbnVwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbmZzL2V4dDQvZXh0NC5oLTMwOTMtaW50IGV4dDRfZmNfY29tbWl0KGpvdXJuYWxfdCAqam91cm5hbCwgdGlkX3QgY29tbWl0X3RpZCk7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTc4NT1zdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9mY19nZXRfdGwoc3RydWN0IGV4dDRfZmNfdGxfbWVtICp0bCwgdTggKnZhbClcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xNzk0LS8qIFVubGluayByZXBsYXkgZnVuY3Rpb24gKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTc5NTpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X3VubGluayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xNzk2LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZXh0NF9mY190bF9tZW0gKnRsLCB1OCAqdmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4MDQtXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE4MDU6XFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX1VOTElOSywgZGFyZy5pbm8sXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4MDYtXFx0XFx0XFx0ZGFyZy5wYXJlbnRfaW5vLCBkYXJnLmRuYW1lX2xlbik7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTgzMy1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTgzNDpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2xpbmtfaW50ZXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTgzNS1cXHRcXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5X2luZm9fYXJncyAqZGFyZyxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODY5LS8qIExpbmsgcmVwbGF5IGZ1bmN0aW9uICovXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE4NzA6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9saW5rKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4NzEtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBleHQ0X2ZjX3RsX21lbSAqdGwsIHU4ICp2YWwpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTg3Ny1cXHR0bF90b19kYXJnKFxcdTAwMjZkYXJnLCB0bCwgdmFsKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTg3ODpcXHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfTElOSywgZGFyZy5pbm8sXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4NzktXFx0XFx0XFx0ZGFyZy5wYXJlbnRfaW5vLCBkYXJnLmRuYW1lX2xlbik7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTg4Ni1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTg4NzpcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9saW5rX2ludGVybmFsKHNiLCBcXHUwMDI2ZGFyZywgaW5vZGUpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODg4LVxcdGlwdXQoaW5vZGUpO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTE4OTY9c3RhdGljIGludCBleHQ0X2ZjX3JlY29yZF9tb2RpZmllZF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgaW5vKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODk3LXtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTg5ODpcXHRzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUgKnN0YXRlO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODk5LVxcdGludCBpO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MjQtICovXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE5MjU6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTI2LVxcdFxcdFxcdFxcdHN0cnVjdCBleHQ0X2ZjX3RsX21lbSAqdGwsIHU4ICp2YWwpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTkzOS1cXHRpbm8gPSBsZTMyX3RvX2NwdShmY19pbm9kZS5mY19pbm8pO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxOTQwOlxcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCB0YWcsIGlubywgMCwgMCk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5NDEtXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjAzMy0gKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjAzNDpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2NyZWF0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDM1LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZXh0NF9mY190bF9tZW0gKnRsLCB1OCAqdmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwNDMtXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIwNDQ6XFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX0NSRUFULCBkYXJnLmlubyxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjA0NS1cXHRcXHRcXHRkYXJnLnBhcmVudF9pbm8sIGRhcmcuZG5hbWVfbGVuKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDc2LVxcdH1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjA3NzpcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9saW5rX2ludGVybmFsKHNiLCBcXHUwMDI2ZGFyZywgaW5vZGUpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDc4LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjA5Mj1pbnQgZXh0NF9mY19yZWNvcmRfcmVnaW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgaW5vLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwOTQte1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMDk1OlxcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGU7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwOTYtXFx0c3RydWN0IGV4dDRfZmNfYWxsb2NfcmVnaW9uICpyZWdpb247XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjEzMS0vKiBSZXBsYXkgYWRkIHJhbmdlIHRhZyAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMTMyOnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfYWRkX3JhbmdlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU4ICp2YWwpXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxMzMte1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxNDYtXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIxNDc6XFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX0FERF9SQU5HRSxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjE0OC1cXHRcXHRsZTMyX3RvX2NwdShmY19hZGRfZXguZmNfaW5vKSwgbGUzMl90b19jcHUoZXgtXFx1MDAzZWVlX2Jsb2NrKSxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMjU4PXN0YXRpYyBpbnRcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjI1OTpleHQ0X2ZjX3JlcGxheV9kZWxfcmFuZ2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTggKnZhbClcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjI2MC17XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjI3MC1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjI3MTpcXHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfREVMX1JBTkdFLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjcyLVxcdFxcdGxlMzJfdG9fY3B1KGxyYW5nZS5mY19pbm8pLCBjdXIsIHJlbWFpbmluZyk7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjMyMD1zdGF0aWMgdm9pZCBleHQ0X2ZjX3NldF9iaXRtYXBzX2FuZF9jb3VudGVycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzIxLXtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjMyMjpcXHRzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUgKnN0YXRlO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzIzLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM3OC0gKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjM3OTpib29sIGV4dDRfZmNfcmVwbGF5X2NoZWNrX2V4Y2x1ZGVkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZnNibGtfdCBibGspXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzODAte1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzgxLVxcdGludCBpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMzgyOlxcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGU7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzODMtXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM5Ni0vKiBDbGVhbnVwIGZ1bmN0aW9uIGNhbGxlZCBhZnRlciByZXBsYXkgKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjM5Nzp2b2lkIGV4dDRfZmNfcmVwbGF5X2NsZWFudXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM5OC17XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjQwNj1zdGF0aWMgYm9vbCBleHQ0X2ZjX3ZhbHVlX2xlbl9pc3ZhbGlkKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDQ5LSAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNDUwOnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfc2Nhbihqb3VybmFsX3QgKmpvdXJuYWwsXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0NTEtXFx0XFx0XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IG9mZixcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDU1LVxcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNDU2OlxcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGU7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0NTctXFx0aW50IHJldCA9IEpCRDJfRkNfUkVQTEFZX0NPTlRJTlVFO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1NjQtb3V0X2VycjpcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjU2NTpcXHR0cmFjZV9leHQ0X2ZjX3JlcGxheV9zY2FuKHNiLCByZXQsIG9mZik7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1NjYtXFx0cmV0dXJuIHJldDtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTcyLSAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNTczOnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXkoam91cm5hbF90ICpqb3VybmFsLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTc0LVxcdFxcdFxcdFxcdGVudW0gcGFzc3R5cGUgcGFzcywgaW50IG9mZiwgdGlkX3QgZXhwZWN0ZWRfdGlkKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1ODAtXFx0aW50IHJldCA9IEpCRDJfRkNfUkVQTEFZX0NPTlRJTlVFO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNTgxOlxcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGUgPSBcXHUwMDI2c2JpLVxcdTAwM2VzX2ZjX3JlcGxheV9zdGF0ZTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU4Mi1cXHRzdHJ1Y3QgZXh0NF9mY190YWlsIHRhaWw7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU4NS1cXHRcXHRzdGF0ZS1cXHUwMDNlZmNfY3VycmVudF9wYXNzID0gUEFTU19TQ0FOO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNTg2OlxcdFxcdHJldHVybiBleHQ0X2ZjX3JlcGxheV9zY2FuKGpvdXJuYWwsIGJoLCBvZmYsIGV4cGVjdGVkX3RpZCk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1ODctXFx0fVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MjMtXFx0XFx0Y2FzZSBFWFQ0X0ZDX1RBR19MSU5LOlxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjI0OlxcdFxcdFxcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2xpbmsoc2IsIFxcdTAwMjZ0bCwgdmFsKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYyNS1cXHRcXHRcXHRicmVhaztcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYyNi1cXHRcXHRjYXNlIEVYVDRfRkNfVEFHX1VOTElOSzpcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjYyNzpcXHRcXHRcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV91bmxpbmsoc2IsIFxcdTAwMjZ0bCwgdmFsKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYyOC1cXHRcXHRcXHRicmVhaztcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYyOS1cXHRcXHRjYXNlIEVYVDRfRkNfVEFHX0FERF9SQU5HRTpcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjYzMDpcXHRcXHRcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2Uoc2IsIHZhbCk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzEtXFx0XFx0XFx0YnJlYWs7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzItXFx0XFx0Y2FzZSBFWFQ0X0ZDX1RBR19DUkVBVDpcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjYzMzpcXHRcXHRcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9jcmVhdGUoc2IsIFxcdTAwMjZ0bCwgdmFsKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYzNC1cXHRcXHRcXHRicmVhaztcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYzNS1cXHRcXHRjYXNlIEVYVDRfRkNfVEFHX0RFTF9SQU5HRTpcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjYzNjpcXHRcXHRcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9kZWxfcmFuZ2Uoc2IsIHZhbCk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzctXFx0XFx0XFx0YnJlYWs7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzgtXFx0XFx0Y2FzZSBFWFQ0X0ZDX1RBR19JTk9ERTpcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjYzOTpcXHRcXHRcXHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9pbm9kZShzYiwgXFx1MDAyNnRsLCB2YWwpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjQwLVxcdFxcdFxcdGJyZWFrO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjQxLVxcdFxcdGNhc2UgRVhUNF9GQ19UQUdfUEFEOlxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjQyOlxcdFxcdFxcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCBFWFQ0X0ZDX1RBR19QQUQsIDAsXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NDMtXFx0XFx0XFx0XFx0XFx0ICAgICB0bC5mY19sZW4sIDApO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NDUtXFx0XFx0Y2FzZSBFWFQ0X0ZDX1RBR19UQUlMOlxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjQ2OlxcdFxcdFxcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCBFWFQ0X0ZDX1RBR19UQUlMLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjQ3LVxcdFxcdFxcdFxcdFxcdCAgICAgMCwgdGwuZmNfbGVuLCAwKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjUzLVxcdFxcdGRlZmF1bHQ6XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2NTQ6XFx0XFx0XFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIHRsLmZjX3RhZywgMCwgdGwuZmNfbGVuLCAwKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY1NS1cXHRcXHRcXHRyZXQgPSAtRUNBTkNFTEVEO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI2NjU9dm9pZCBleHQ0X2ZjX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgam91cm5hbF90ICpqb3VybmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NzEtXFx0ICovXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2NzI6XFx0am91cm5hbC1cXHUwMDNlal9mY19yZXBsYXlfY2FsbGJhY2sgPSBleHQ0X2ZjX3JlcGxheTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY3My1cXHRpZiAoIXRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0Lmg9MTM5PXN0cnVjdCBleHQ0X2ZjX2FsbG9jX3JlZ2lvbiB7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtMTQ3LSAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuaDoxNDg6c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlIHtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtMTQ5LVxcdGludCBmY19yZXBsYXlfbnVtX3RhZ3M7XFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYz02MTYzPWV4dDRfbWJfbmV3X2Jsb2Nrc19zaW1wbGUoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0ICphciwgaW50ICplcnJwKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNjE5NC1cXHRcXHRcXHRcXHRicmVhaztcXG5mcy9leHQ0L21iYWxsb2MuYzo2MTk1OlxcdFxcdFxcdGlmIChleHQ0X2ZjX3JlcGxheV9jaGVja19leGNsdWRlZChzYixcXG5mcy9leHQ0L21iYWxsb2MuYy02MTk2LVxcdFxcdFxcdFxcdGV4dDRfZ3JvdXBfZmlyc3RfYmxvY2tfbm8oc2IsIGdyb3VwKSArXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTM1Nz1zdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NjU4LVxcdH1cXG5mcy9leHQ0L3N1cGVyLmM6NTY1OTpcXHRleHQ0X2ZjX3JlcGxheV9jbGVhbnVwKHNiKTtcXG5mcy9leHQ0L3N1cGVyLmMtNTY2MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTc6MjkuOTk4MTQzOTg3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ5MTIwODM4MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEV4dDQgRmlsZXN5c3RlbSBWdWxuZXJhYmlsaXR5IER1cmluZyBKb3VybmFsIFJlcGxheSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGV4dDQgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGEgcG90ZW50aWFsIGlzc3VlIGR1cmluZyBqb3VybmFsIHJlcGxheS4gVGhlIGZsb3cgaXMgcHJldHR5IGNsZWFyOiB3aGVuIG1vdW50aW5nIGFuIGV4dDQgZmlsZXN5c3RlbSB3aXRoIGZhc3QgY29tbWl0IGVuYWJsZWQsIGBqYmQyYCByZXBsYXlzIHRoZSBqb3VybmFsLiBUaGlzIHRyaWdnZXJzIGBleHQ0X2ZjX3JlcGxheWAsIHdoaWNoIHRoZW4gY2FsbHMgYGV4dDRfZmNfcmVwbGF5X2lub2RlYCwgYW5kIGZpbmFsbHksIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoaW5vZGUpYC4gSSdtIGZhbWlsaWFyIHdpdGggdGhpcywgYW5kIEkga25vdyBTeXprYWxsZXIgaGVhdmlseSB0YXJnZXRzIGV4dDQgbW91bnRzIGFuZCBmaWxlc3lzdGVtIGltYWdlcyB3aXRoIGl0cyBmdXp6aW5nLiBTcGVjaWZpY2FsbHksIGNvcnJ1cHRlZCBpbWFnZXMgY2F1c2luZyBpc3N1ZXMgZHVyaW5nIHJlcGxheSwgbW91bnQsIG9yIGpvdXJuYWwgcmVjb3ZlcnkgYXJlIGNvbW1vbiB0YXJnZXRzLCBhbmQgdGhhdCdzIHdoYXQgaGFzIHBpcXVlZCBteSBpbnRlcmVzdCBoZXJlLlxuXG5JJ20gemVyb2luZyBpbiBvbiB0aGlzIGZ1bmN0aW9uLCBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCwgYW5kIEkndmUgbm90aWNlZCBhIHNpZ25pZmljYW50IGNoYW5nZS4gUHJldmlvdXNseSwgaWYgYGV4dDRfZmluZF9leHRlbnRgIHJldHVybmVkIGFuIGVycm9yIChhbiBFUlJfUFRSKSBvciBgcmV0YCB3YXMgbmVnYXRpdmUgaW5zaWRlIHRoZSBgd2hpbGVgIGxvb3AsIHRoZSBjb2RlIHdvdWxkIHNpbXBseSBicmVhayBvdXQgdG8gdGhlIGBvdXQ6YCBsYWJlbC4gVGhlIHByb2JsZW0gaXMgdGhhdCwgdW5kZXIgdGhlc2UgY29uZGl0aW9ucywgYHBhdGhgIGlzIGFuIEVSUl9QVFIhIEFuZCB0aGUgY3J1Y2lhbCBwYXJ0IGlzIHRoYXQgdGhlIGNvZGUgdGhlbiBjYWxscyBgZXh0NF9mcmVlX2V4dF9wYXRoKHBhdGgpYC4gTm93LCB3aGF0IGRvZXMgYGV4dDRfZnJlZV9leHRfcGF0aGAgZG8gd2l0aCBhbiBFUlJfUFRSPyBUaGF0J3MgdGhlIG1pbGxpb24tZG9sbGFyIHF1ZXN0aW9uLiBJZiBgZXh0NF9mcmVlX2V4dF9wYXRoYCBkb2Vzbid0IGhhbmRsZSBhbiBFUlJfUFRSIHByb3Blcmx5LCB3ZSBjb3VsZCBiZSBsb29raW5nIGF0IGEgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUsIG9yIGEgZG91YmxlIGZyZWUsIG9yIHNvbWUgb3RoZXIgYmFkbmVzcyB0aGF0IGNvdWxkIGNhdXNlIGRlbmlhbCBvZiBzZXJ2aWNlIG9yLCB3b3JzZSwgYSBrZXJuZWwgcGFuaWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGV4dDRfZnJlZV9leHRfcGF0aGAgZG9lcyBpbiB0aGlzIHNpdHVhdGlvbi4gSXQgc2VlbXMgdGhpcyBjb3VsZCBiZSBhIG5ldywgb3IgcmVjZW50bHkgZXhwb3NlZCwgYnVnLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggbG9va2luZyBpbnRvIGFuZCB1bmRlcnN0YW5kaW5nIGhvdyBpdCdzIHRyaWdnZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTc6MzQuOTEwMjMwMDIyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjExNTk0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIGV4dDRfZnJlZV9leHRfcGF0aFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0zOTM1PWV4dGVybiBzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqZXh0NF9maW5kX2V4dGVudChzdHJ1Y3QgaW5vZGUgKiwgZXh0NF9sYmxrX3QsXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0zOTM3LVxcdFxcdFxcdFxcdFxcdCAgICAgIGludCBmbGFncyk7XFxuZnMvZXh0NC9leHQ0Lmg6MzkzODpleHRlcm4gdm9pZCBleHQ0X2ZyZWVfZXh0X3BhdGgoc3RydWN0IGV4dDRfZXh0X3BhdGggKik7XFxuZnMvZXh0NC9leHQ0LmgtMzkzOS1leHRlcm4gaW50IGV4dDRfZXh0X2NoZWNrX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9MTExPXN0YXRpYyB2b2lkIGV4dDRfZXh0X2Ryb3BfcmVmcyhzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aClcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTEyMS1cXG5mcy9leHQ0L2V4dGVudHMuYzoxMjI6dm9pZCBleHQ0X2ZyZWVfZXh0X3BhdGgoc3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGgpXFxuZnMvZXh0NC9leHRlbnRzLmMtMTIzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTc6MzQuOTU2MzUwMjk2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMyNDU4MzE1NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gZXh0NF9mcmVlX2V4dF9wYXRoKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byBgZXh0NF9mcmVlX2V4dF9wYXRoYCBpbiBgZnMvZXh0NC9leHRlbnRzLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgaGFuZGxlcyBleHRlbnQgZGVhbGxvY2F0aW9uLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIHRoZSBwYXRoIHRyYXZlcnNhbCBsb2dpYyDigJMgd2hhdCBhcmUgdGhlIGVkZ2UgY2FzZXMgaXQgaGFuZGxlcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBleHRlbnQgdHJlZSBzdHJ1Y3R1cmUgYW5kIHRoZSB2YXJpb3VzIHNjZW5hcmlvcyB3aGVyZSBleHRlbnRzIGdldCBmcmVlZC4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIGZsYWdzIHVzZWQgYW5kIGhvdyB0aGV5IHByb3BhZ2F0ZSBkdXJpbmcgdGhlIHRyYXZlcnNhbCB0byB0aGUgaW5vZGUuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgaG93IGl0IGhhbmRsZXMgcGFydGlhbCBleHRlbnQgZnJlZXMsIG1lcmdpbmcgYWRqYWNlbnQgZXh0ZW50cywgYW5kIGFueSBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMgd2l0aGluIHRoZSBCLXRyZWUgc3RydWN0dXJlLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIGpvdXJuYWxpbmcgaW4gZXh0NCwgSSB3aWxsIGtlZXAgam91cm5hbCByZWxhdGVkIGNvbnNpZGVyYXRpb25zIGF0IHRoZSBmcm9udCBvZiBteSBtaW5kIGR1cmluZyB0aGlzIHJldmlldy4gSSBleHBlY3QgdG8gYmUgbG9va2luZyBhdCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBibG9jayBncm91cCBhY2NvdW50aW5nIGFuZCBmcmVlIHNwYWNlIGJpdG1hcHMuIEkgd2FudCB0byBmdWxseSB2aXN1YWxpemUgdGhlIHRyZWUgdXBkYXRlcyBhcyBJIGdvIHRocm91Z2ggaXQgdG8gdHJ5IHRvIGlkZW50aWZ5IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxNzozOC4yMDIxODM5NTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvZXh0ZW50cy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyMDpcXHR9XFxuIDEyMTpcXHRcXG4gMTIyOlxcdHZvaWQgZXh0NF9mcmVlX2V4dF9wYXRoKHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoKVxcbiAxMjM6XFx0e1xcbiAxMjQ6XFx0XFx0aWYgKElTX0VSUl9PUl9OVUxMKHBhdGgpKVxcbiAxMjU6XFx0XFx0XFx0cmV0dXJuO1xcbiAxMjY6XFx0XFx0ZXh0NF9leHRfZHJvcF9yZWZzKHBhdGgpO1xcbiAxMjc6XFx0XFx0a2ZyZWUocGF0aCk7XFxuIDEyODpcXHR9XFxuIDEyOTpcXHRcXG4gMTMwOlxcdC8qXFxuIDEzMTpcXHQgKiBNYWtlIHN1cmUgJ2hhbmRsZScgaGFzIGF0IGxlYXN0ICdjaGVja19jcmVkJyBjcmVkaXRzLiBJZiBub3QsIHJlc3RhcnRcXG4gMTMyOlxcdCAqIHRyYW5zYWN0aW9uIHdpdGggJ3Jlc3RhcnRfY3JlZCcgY3JlZGl0cy4gVGhlIGZ1bmN0aW9uIGRyb3BzIGlfZGF0YV9zZW1cXG4gMTMzOlxcdCAqIHdoZW4gcmVzdGFydGluZyB0cmFuc2FjdGlvbiBhbmQgZ2V0cyBpdCBhZnRlciB0cmFuc2FjdGlvbiBpcyByZXN0YXJ0ZWQuXFxuIDEzNDpcXHQgKlxcbiAxMzU6XFx0ICogVGhlIGZ1bmN0aW9uIHJldHVybnMgMCBvbiBzdWNjZXNzLCAxIGlmIHRyYW5zYWN0aW9uIGhhZCB0byBiZSByZXN0YXJ0ZWQsXFxuIDEzNjpcXHQgKiBhbmQgXFx1MDAzYyAwIGluIGNhc2Ugb2YgZmF0YWwgZXJyb3IuXFxuIDEzNzpcXHQgKi9cXG4gMTM4OlxcdGludCBleHQ0X2RhdGFzZW1fZW5zdXJlX2NyZWRpdHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gMTM5OlxcdFxcdFxcdFxcdFxcdGludCBjaGVja19jcmVkLCBpbnQgcmVzdGFydF9jcmVkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxNzozOC4yMDIzOTA2OTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjc4ODg2NjQzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU3VidGxlIEJ1ZyBGaXggaW4gRVhUNCdzIEZhc3QgQ29tbWl0IEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AgYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGUgcG90ZW50aWFsIGltcGFjdC4gUHJldmlvdXNseSwgaWYgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AgZW5jb3VudGVyZWQgYW4gZXJyb3IsIGxpa2UgYSBmYWlsdXJlIGluIGBleHQ0X21hcF9ibG9ja3NgIG9yIGBleHQ0X2ZpbmRfZXh0ZW50YCwgaXQgd2FzICpzaWxlbnRseSogaWdub3JlZC4gVGhlIGNvZGUganVzdCByZXR1cm5lZCAwLCBsZWF2aW5nIGBpX2Jsb2Nrc2AgcG90ZW50aWFsbHkgaW5jb25zaXN0ZW50IGFuZCBsZWFkaW5nIHRvIGEgcmV0dXJuIG9mIHplcm8gdG8gdGhlIGNhbGxpbmcgZnVuY3Rpb24gYGV4dDRfZmNfcmVwbGF5X2lub2RlYCwgd2hpY2ggd291bGQgY29udGludWUgZXhlY3V0aW9uIGFzIGlmIG5vdGhpbmcgd2FzIHdyb25nLiBUaGlzIGlzIGEgY2xhc3NpYyByZWNpcGUgZm9yIHN1YnRsZSBkYXRhIGNvcnJ1cHRpb24sIGVzcGVjaWFsbHkgaW4gYSBmYXN0IGNvbW1pdCBzY2VuYXJpbyB3aGVyZSBjb25zaXN0ZW5jeSBpcyBjcnVjaWFsLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgbGlrZSB0aGlzOlxuXG5gYGBjXG5jbGVhbnVwOlxuXHRleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aCk7XG5cdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoMik7XG5cdHJldHVybiAwO1xuYGBgXG5cbklmIGByZXQgXHUwMDNjIDBgIGhhcHBlbmVkLCB0aGUgY29kZSB3b3VsZCBzaW1wbHkganVtcCBvciBicmVhayBhbmQgcmV0dXJuIDAhIE5vIGVycm9yIGhhbmRsaW5nLlxuXG5Ob3csIHRoZSBwYXRjaCBmaXhlcyB0aGlzLiBOb3cgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AgcmV0dXJucyB0aGUgYWN0dWFsIGVycm9yIGNvZGUuICBBbmQgdGhlIGNhbGxpbmcgY29kZSwgd2l0aGluIGBmYXN0X2NvbW1pdC5jYCwgaGFzIGJlZW4gdXBkYXRlZCB0byBjaGVjayB0aGlzIHJldHVybiB2YWx1ZS5cblxuYGBgY1xuLVx0aWYgKCFleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSkpXG4tXHRcdGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrcyhpbm9kZSk7XG4rXHRpZiAoIWV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSkge1xuK1x0XHRyZXQgPSBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoaW5vZGUpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gb3V0X2JyZWxzZTtcbitcdH1cbmBgYFxuXG5Ob3csIGlmIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgIGZhaWxzLCB0aGUgZXJyb3IgaXMgcHJvcGVybHkgcHJvcGFnYXRlZCB1cCB0aGUgY2FsbCBjaGFpbiwgYXZvaWRpbmcgdGhlIHNpbGVudCBjb3JydXB0aW9uLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnQuIEkgbmVlZCB0byB0aGluayBhYm91dCBob3cgdG8gdHJpZ2dlciB0aGlzIHNjZW5hcmlvIGFuZCBjb25maXJtIHRoZSBmaXguIEdpdmVuIHRoZSBjb21wbGV4aXR5IG9mIEVYVDQgYW5kIGZhc3QgY29tbWl0LCBJIG5lZWQgdG8gY2hlY2sgaG93IGl0J3MgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0aW5nIG9yIGZ1enplciBpbmZyYXN0cnVjdHVyZS5cblxuSXMgYGV4dDRgIGNvZGUsIGluIGdlbmVyYWwsIHdlbGwtZXhlcmNpc2VkIGluIHRoZSBrZXJuZWwgZnV6emVyLCBzeXprYWxsZXI/IFllcywgRVhUNCBpcyBvbmUgb2YgdGhlIG1vc3QgaGVhdmlseSBmdXp6ZWQgc3Vic3lzdGVtcy4gSG93IGFib3V0IGBmYXN0X2NvbW1pdGAgc3BlY2lmaWNhbGx5PyBXaGF0IGFyZSB0aGUgS2NvbmZpZyBvcHRpb25zIHJlcXVpcmVkIGZvciBgZmFzdF9jb21taXRgIGFuZCBFWFQ0PyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZyBvcHRpb25zIHRvIGVuc3VyZSB0aGlzIGNvZGUgcGF0aCBpcyBlbmFibGVkIGR1cmluZyBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM4NSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE4OjA2LjA5MTA1NzY5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI3ODg5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJGQVNUX0NPTU1JVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0xMDQ4PXN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMTMxNC1cXG5mcy9leHQ0L2V4dDQuaDoxMzE1OiNkZWZpbmUgRVhUNF9NT1VOVDJfSk9VUk5BTF9GQVNUX0NPTU1JVFxcdDB4MDAwMDAwMTAgLyogSm91cm5hbCBmYXN0IGNvbW1pdCAqL1xcbmZzL2V4dDQvZXh0NC5oLTEzMTYtI2RlZmluZSBFWFQ0X01PVU5UMl9EQVhfTkVWRVJcXHRcXHQweDAwMDAwMDIwIC8qIERvIG5vdCBhbGxvdyBEaXJlY3QgQWNjZXNzICovXFxuLS1cXG5mcy9leHQ0L2V4dDQuaD0yMTQwPXN0YXRpYyBpbmxpbmUgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICpleHQ0X2lfbWV0YWRhdGFfYmhzKFxcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMjE4NS0vKlxcbmZzL2V4dDQvZXh0NC5oOjIxODY6ICogVGhlIHJlYXNvbiB3aHkgXFxcIkZBU1RfQ09NTUlUXFxcIiBpcyBhIGNvbXBhdCBmZWF0dXJlIGlzIHRoYXQsIEZTIGJlY29tZXNcXG5mcy9leHQ0L2V4dDQuaC0yMTg3LSAqIGluY29tcGF0aWJsZSBvbmx5IGlmIGZhc3QgY29tbWl0IGJsb2NrcyBhcmUgcHJlc2VudCBpbiB0aGUgRlMuIFNpbmNlIHdlXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0yMTkxLSAqL1xcbmZzL2V4dDQvZXh0NC5oOjIxOTI6I2RlZmluZSBFWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZBU1RfQ09NTUlUXFx0XFx0MHgwNDAwXFxuZnMvZXh0NC9leHQ0LmgtMjE5My0jZGVmaW5lIEVYVDRfRkVBVFVSRV9DT01QQVRfU1RBQkxFX0lOT0RFU1xcdDB4MDgwMFxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MjI5Nz1FWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZVTkNTKHNwYXJzZV9zdXBlcjIsXFx0U1BBUlNFX1NVUEVSMilcXG5mcy9leHQ0L2V4dDQuaDoyMjk4OkVYVDRfRkVBVFVSRV9DT01QQVRfRlVOQ1MoZmFzdF9jb21taXQsXFx0XFx0RkFTVF9DT01NSVQpXFxuZnMvZXh0NC9leHQ0LmgtMjI5OS1FWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZVTkNTKHN0YWJsZV9pbm9kZXMsXFx0U1RBQkxFX0lOT0RFUylcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMjU9c3RhdGljIGJvb2wgZXh0NF9mY19kaXNhYmxlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjYte1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMjc6XFx0cmV0dXJuICghdGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSB8fFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjgtXFx0XFx0KEVYVDRfU0Ioc2IpLVxcdTAwM2VzX21vdW50X3N0YXRlIFxcdTAwMjYgRVhUNF9GQ19SRVBMQVkpKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0zOTA9c3RhdGljIGludCBleHQ0X2ZjX3RyYWNrX3RlbXBsYXRlKFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTQyMC1cXHRcXHRcXHRcXHQoc2JpLVxcdTAwM2VzX2pvdXJuYWwtXFx1MDAzZWpfZmxhZ3MgXFx1MDAyNiBKQkQyX0ZVTExfQ09NTUlUX09OR09JTkcgfHxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NDIxOlxcdFxcdFxcdFxcdCBzYmktXFx1MDAzZXNfam91cm5hbC1cXHUwMDNlal9mbGFncyBcXHUwMDI2IEpCRDJfRkFTVF9DT01NSVRfT05HT0lORykgP1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy00MjItXFx0XFx0XFx0XFx0XFx1MDAyNnNiaS1cXHUwMDNlc19mY19xW0ZDX1FfU1RBR0lOR10gOlxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTQzNT1zdGF0aWMgaW50IF9fdHJhY2tfZGVudHJ5X3VwZGF0ZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTQ3MS1cXHRpZiAoc2JpLVxcdTAwM2VzX2pvdXJuYWwtXFx1MDAzZWpfZmxhZ3MgXFx1MDAyNiBKQkQyX0ZVTExfQ09NTUlUX09OR09JTkcgfHxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NDcyOlxcdFxcdHNiaS1cXHUwMDNlc19qb3VybmFsLVxcdTAwM2VqX2ZsYWdzIFxcdTAwMjYgSkJEMl9GQVNUX0NPTU1JVF9PTkdPSU5HKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy00NzMtXFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2bm9kZS1cXHUwMDNlZmNkX2xpc3QsXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTU2Nz1pbnQgZXh0NF9mY19jb21taXQoam91cm5hbF90ICpqb3VybmFsLCB0aWRfdCBjb21taXRfdGlkKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE1NzYtXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE1Nzc6XFx0aWYgKCF0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xNTc4LVxcdFxcdHJldHVybiBqYmQyX2NvbXBsZXRlX3RyYW5zYWN0aW9uKGpvdXJuYWwsIGNvbW1pdF90aWQpO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI2NjU9dm9pZCBleHQ0X2ZjX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgam91cm5hbF90ICpqb3VybmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NzItXFx0am91cm5hbC1cXHUwMDNlal9mY19yZXBsYXlfY2FsbGJhY2sgPSBleHQ0X2ZjX3JlcGxheTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY3MzpcXHRpZiAoIXRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkpXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NzQtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oLTItXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oOjM6I2lmbmRlZiBfX0ZBU1RfQ09NTUlUX0hfX1xcbmZzL2V4dDQvZmFzdF9jb21taXQuaDo0OiNkZWZpbmUgX19GQVNUX0NPTU1JVF9IX19cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtNS1cXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuaD0xNjM9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICp0YWcyc3RyKF9fdTE2IHRhZylcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuaC0xODgtXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oOjE4OTojZW5kaWYgLyogX19GQVNUX0NPTU1JVF9IX18gKi9cXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz0zNDQxPXN0YXRpYyBib29sIGV4dDRfaW5vZGVfZGF0YXN5bmNfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0zNDQ5LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5mcy9leHQ0L2lub2RlLmM6MzQ1MDpcXHRcXHRpZiAodGVzdF9vcHQyKGlub2RlLVxcdTAwM2VpX3NiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSlcXG5mcy9leHQ0L2lub2RlLmMtMzQ1MS1cXHRcXHRcXHRyZXR1cm4gIWxpc3RfZW1wdHkoXFx1MDAyNkVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmNfbGlzdCk7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9Mzc5OT1zdGF0aWMgaW50IGV4dDRfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtNDAwOS1cXHRcXHRcXHRleHQ0X2ZjX3RyYWNrX3VubGluayhoYW5kbGUsIG5ldy5kZW50cnkpO1xcbmZzL2V4dDQvbmFtZWkuYzo0MDEwOlxcdFxcdGlmICh0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC9uYW1laS5jLTQwMTEtXFx0XFx0ICAgICEoRVhUNF9TQihzYiktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xODk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW91bnRfb3B0cyB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTk2Mi0jaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L3N1cGVyLmM6MTk2MzpcXHR7T3B0X2ZjX2RlYnVnX2ZvcmNlLCBFWFQ0X01PVU5UMl9KT1VSTkFMX0ZBU1RfQ09NTUlULFxcbmZzL2V4dDQvc3VwZXIuYy0xOTY0LVxcdCBNT1BUX1NFVCB8IE1PUFRfMiB8IE1PUFRfRVhUNF9PTkxZfSxcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz00NDA0PXN0YXRpYyB2b2lkIGV4dDRfc2V0X2RlZl9vcHRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDQyMy1cXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9mYXN0X2NvbW1pdChzYikpXFxuZnMvZXh0NC9zdXBlci5jOjQ0MjQ6XFx0XFx0c2V0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xcbmZzL2V4dDQvc3VwZXIuYy00NDI1LVxcdC8qIGRvbid0IGZvcmdldCB0byBlbmFibGUgam91cm5hbF9jc3VtIHdoZW4gbWV0YWRhdGFfY3N1bSBpcyBlbmFibGVkLiAqL1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTQ5NzM9c3RhdGljIGludCBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQ5OTYtXFxuZnMvZXh0NC9zdXBlci5jOjQ5OTc6XFx0aWYgKHRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L3N1cGVyLmMtNDk5OC1cXHRcXHQhamJkMl9qb3VybmFsX3NldF9mZWF0dXJlcyhFWFQ0X1NCKHNiKS1cXHUwMDNlc19qb3VybmFsLCAwLCAwLFxcbmZzL2V4dDQvc3VwZXIuYzo0OTk5OlxcdFxcdFxcdFxcdFxcdCAgSkJEMl9GRUFUVVJFX0lOQ09NUEFUX0ZBU1RfQ09NTUlUKSkge1xcbmZzL2V4dDQvc3VwZXIuYy01MDAwLVxcdFxcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz01MDU3PXN0YXRpYyBpbnQgZXh0NF9jaGVja19qb3VybmFsX2RhdGFfbW9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTUwNjQtXFx0XFx0Y2xlYXJfb3B0KHNiLCBESU9SRUFEX05PTE9DSyk7XFxuZnMvZXh0NC9zdXBlci5jOjUwNjU6XFx0XFx0Y2xlYXJfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCk7XFxuZnMvZXh0NC9zdXBlci5jLTUwNjYtXFx0XFx0aWYgKHRlc3Rfb3B0MihzYiwgRVhQTElDSVRfREVMQUxMT0MpKSB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTM1Nz1zdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NTU3LVxcdFxcdGNsZWFyX29wdChzYiwgREFUQV9GTEFHUyk7XFxuZnMvZXh0NC9zdXBlci5jOjU1NTg6XFx0XFx0Y2xlYXJfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCk7XFxuZnMvZXh0NC9zdXBlci5jLTU1NTktXFx0XFx0c2JpLVxcdTAwM2VzX2pvdXJuYWwgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxODowNi4xMzczNDIyNjNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTI1NzIzMDI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBleHQ0IE1ha2VmaWxlIGZvciBPYmplY3QgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGBmcy9leHQ0L01ha2VmaWxlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzIG9mIGBleHRlbnRzLm9gIGFuZCBgZmFzdF9jb21taXQub2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIHVzZWQgaW4gdGhlaXIgY29tcGlsYXRpb24uIEFyZSB0aGVyZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGtlcm5lbCBmbGFncywgb3Igb3RoZXIgZmFjdG9ycyB0aGF0IHRyaWdnZXIgdGhlaXIgaW5jbHVzaW9uPyBVbmRlcnN0YW5kaW5nIHRoZXNlIGJ1aWxkIHZhcmlhYmxlcyBpcyBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgb3IgcG90ZW50aWFsbHkgZXZlbiBmb3Igc2VsZWN0aXZlbHkgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGZlYXR1cmVzIGZvciBhIHNwZWNpZmljIGRlcGxveW1lbnQuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgYGlmZGVmYCBibG9ja3MsIGFzc2lnbm1lbnQgc3RhdGVtZW50cyB0aGF0IGluZmx1ZW5jZSBmbGFncyBsaWtlIGBDT05GSUdfRVhUNF9VU0VfRVhURU5UU2AsIG9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gam91cm5hbGluZyBvciBmYXN0IGNvbW1pdCBiZWhhdmlvci4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGV5IGFyZSBoaWdobHkgcmVsYXRlZCB0byBmZWF0dXJlcyBzdWNoIGFzIGV4dGVudHMgKG9idmlvdXNseSkgYW5kIHRoZSBqb3VybmFsaW5nIG1lY2hhbmlzbS4gTGV0J3Mgc2VlIGlmIHRoZSBNYWtlZmlsZSBnaXZlcyBtZSBhIGNsZWFyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjkyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTg6MTEuMzk0NTc1MzE4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM1Mzc1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYXN0X2NvbW1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XFx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcXFxcbi0tXFxuZnMvZXh0NC9NYWtlZmlsZS0xMi1cXHRcXHRzdXBlci5vIHN5bWxpbmsubyBzeXNmcy5vIHhhdHRyLm8geGF0dHJfaHVyZC5vIHhhdHRyX3RydXN0ZWQubyBcXFxcXFxuZnMvZXh0NC9NYWtlZmlsZToxMzpcXHRcXHR4YXR0cl91c2VyLm8gZmFzdF9jb21taXQubyBvcnBoYW4ub1xcbmZzL2V4dDQvTWFrZWZpbGUtMTQtXFxuLS1cXG5mcy9leHQ0L2V4dDQuaD05NjM9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTk5OS0jaW5jbHVkZSBcXFwiZXh0ZW50c19zdGF0dXMuaFxcXCJcXG5mcy9leHQ0L2V4dDQuaDoxMDAwOiNpbmNsdWRlIFxcXCJmYXN0X2NvbW1pdC5oXFxcIlxcbmZzL2V4dDQvZXh0NC5oLTEwMDEtXFxuLS1cXG5mcy9leHQ0L2V4dDQuaD0yMjk3PUVYVDRfRkVBVFVSRV9DT01QQVRfRlVOQ1Moc3BhcnNlX3N1cGVyMixcXHRTUEFSU0VfU1VQRVIyKVxcbmZzL2V4dDQvZXh0NC5oOjIyOTg6RVhUNF9GRUFUVVJFX0NPTVBBVF9GVU5DUyhmYXN0X2NvbW1pdCxcXHRcXHRGQVNUX0NPTU1JVClcXG5mcy9leHQ0L2V4dDQuaC0yMjk5LUVYVDRfRkVBVFVSRV9DT01QQVRfRlVOQ1Moc3RhYmxlX2lub2RlcyxcXHRTVEFCTEVfSU5PREVTKVxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MzA3MD12b2lkIGV4dDRfZW5kX2JpdG1hcF9yZWFkKHN0cnVjdCBiaW8gKmJpbyk7XFxuZnMvZXh0NC9leHQ0LmgtMzA3MS1cXG5mcy9leHQ0L2V4dDQuaDozMDcyOi8qIGZhc3RfY29tbWl0LmMgKi9cXG5mcy9leHQ0L2V4dDQuaC0zMDczLWludCBleHQ0X2ZjX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdik7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMy0vKlxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzo0OiAqIGZzL2V4dDQvZmFzdF9jb21taXQuY1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy01LSAqXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtNi0vKlxcbmZzL2V4dDQvZmFzdF9jb21taXQuaDo3OiAqIE5vdGUgdGhpcyBmaWxlIGlzIHByZXNlbnQgaW4gZTJmc3Byb2dzL2xpYi9leHQyZnMvZmFzdF9jb21taXQuaCBhbmRcXG5mcy9leHQ0L2Zhc3RfY29tbWl0Lmg6ODogKiBsaW51eC9mcy9leHQ0L2Zhc3RfY29tbWl0LmguIFRoZXNlIGZpbGUgc2hvdWxkIGFsd2F5cyBiZSBieXRlIGlkZW50aWNhbC5cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtOS0gKi9cXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0zMjI4PWludCBfX2V4dDRfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqZF9uYW1lLFxcbmZzL2V4dDQvbmFtZWkuYy0zMjI5LVxcdFxcdCAgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L25hbWVpLmM6MzIzMDpcXHRcXHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSAvKiBOVUxMIGR1cmluZyBmYXN0X2NvbW1pdCByZWNvdmVyeSAqLylcXG5mcy9leHQ0L25hbWVpLmMtMzIzMS17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NDQwND1zdGF0aWMgdm9pZCBleHQ0X3NldF9kZWZfb3B0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQ0MjItI2VuZGlmXFxuZnMvZXh0NC9zdXBlci5jOjQ0MjM6XFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZmFzdF9jb21taXQoc2IpKVxcbmZzL2V4dDQvc3VwZXIuYy00NDI0LVxcdFxcdHNldF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz00NTIzPXN0YXRpYyB2b2lkIGV4dDRfYXRvbWljX3dyaXRlX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy00NTQ4LVxcbmZzL2V4dDQvc3VwZXIuYzo0NTQ5OnN0YXRpYyB2b2lkIGV4dDRfZmFzdF9jb21taXRfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvc3VwZXIuYy00NTUwLXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz01MDU3PXN0YXRpYyBpbnQgZXh0NF9jaGVja19qb3VybmFsX2RhdGFfbW9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTUwNjEtXFx0XFx0XFx0ICAgIFxcXCJkYXRhPWpvdXJuYWwgZGlzYWJsZXMgZGVsYXllZCBhbGxvY2F0aW9uLCBcXFwiXFxuZnMvZXh0NC9zdXBlci5jOjUwNjI6XFx0XFx0XFx0ICAgIFxcXCJkaW9yZWFkX25vbG9jaywgT19ESVJFQ1QgYW5kIGZhc3RfY29tbWl0IHN1cHBvcnQhXFxcXG5cXFwiKTtcXG5mcy9leHQ0L3N1cGVyLmMtNTA2My1cXHRcXHQvKiBjYW4ndCBtb3VudCB3aXRoIGJvdGggZGF0YT1qb3VybmFsIGFuZCBkaW9yZWFkX25vbG9jay4gKi9cXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz01MzU3PXN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU1MTAtXFx0ZXh0NF9hdG9taWNfd3JpdGVfaW5pdChzYik7XFxuZnMvZXh0NC9zdXBlci5jOjU1MTE6XFx0ZXh0NF9mYXN0X2NvbW1pdF9pbml0KHNiKTtcXG5mcy9leHQ0L3N1cGVyLmMtNTUxMi1cXG4tLVxcbmZzL2V4dDQvc3lzZnMuYz0zNjM9RVhUNF9BVFRSX0ZFQVRVUkUobWV0YWRhdGFfY3N1bV9zZWVkKTtcXG5mcy9leHQ0L3N5c2ZzLmM6MzY0OkVYVDRfQVRUUl9GRUFUVVJFKGZhc3RfY29tbWl0KTtcXG5mcy9leHQ0L3N5c2ZzLmMtMzY1LSNpZiBJU19FTkFCTEVEKENPTkZJR19VTklDT0RFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19GU19FTkNSWVBUSU9OKVxcbi0tXFxuZnMvZXh0NC9zeXNmcy5jPTM3Mj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZXh0NF9mZWF0X2F0dHJzW10gPSB7XFxuLS1cXG5mcy9leHQ0L3N5c2ZzLmMtMzg2LVxcdEFUVFJfTElTVChtZXRhZGF0YV9jc3VtX3NlZWQpLFxcbmZzL2V4dDQvc3lzZnMuYzozODc6XFx0QVRUUl9MSVNUKGZhc3RfY29tbWl0KSxcXG5mcy9leHQ0L3N5c2ZzLmMtMzg4LSNpZiBJU19FTkFCTEVEKENPTkZJR19VTklDT0RFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19GU19FTkNSWVBUSU9OKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxODoxMS40NDE5MzQ1NTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTE1MTUyMzQzOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXh0NCBNb2R1bGUgQ29tcGlsYXRpb24gQ29udGV4dCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgZXh0NCBmaWxlc3lzdGVtIG1vZHVsZXMgYXJlIGJ1aWx0LiBJdCdzIGNsZWFyIHRoYXQgdGhlIGZpbmFsIGBleHQ0YCBrZXJuZWwgbW9kdWxlIGRlcGVuZHMgb24gYSBjb3VwbGUgb2Yga2V5IHNvdXJjZSBmaWxlczogYGV4dGVudHMuY2AgYW5kIGBmYXN0X2NvbW1pdC5jYC4gVGhlIG5vdGF0aW9uIGhlcmUsIGBleHQ0LXkgOj0gLi4uIGV4dGVudHMubyAuLi4gZmFzdF9jb21taXQubyAuLi5gLCBzaG93cyB0aGF0IGJvdGggYGV4dGVudHMub2AgYW5kIGBmYXN0X2NvbW1pdC5vYCBhcmUgZ2V0dGluZyBsaW5rZWQgaW50byB0aGUgYGV4dDRgIG1vZHVsZS4gTWFrZXMgcGVyZmVjdCBzZW5zZSwgZ2l2ZW4gdGhlaXIgZnVuY3Rpb24gaW4gdGhlIGZpbGVzeXN0ZW0ncyBvcGVyYXRpb24uIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBjb25kaXRpb25hbCBidWlsZHMgaGVyZSwgc28gSSdsbCBjaGVjayBgZnMvZXh0NC9LY29uZmlnYCB0byBzZWUgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWlnaHQgaW5mbHVlbmNlIHRoZSBpbmNsdXNpb24gb2YgdGhlc2Ugc3BlY2lmaWMgZmlsZXMuIFRpbWUgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzNTIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxODoyMi45NTcxNzIwODdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MzExMjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFWFQ0X0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTQ1LVxcbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L0tjb25maWctNDctXFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy01NS1cXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L0tjb25maWctNTctXFx0Ym9vbCBcXFwiRXh0NCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE4OjIzLjAwNjQ4ODU5NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzYyMTMzMjUwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRhcmdldCBmb3IgRnV6emluZyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb21taXQuIEknZCB0eXBpY2FsbHkgcmVhY2ggZm9yIGBnaXQgbG9nYCB0byBnZXQgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCBhdXRob3IgZXhwbGFuYXRpb24sIGJ1dCBpdCBsb29rcyBsaWtlIEkgZG9uJ3QgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIHRoYXQuIE5vIHByb2JsZW0sIEkgY2FuIHNlZSB0aGUgY29kZSBkaWZmIGRpcmVjdGx5LiBJJ20gZm9jdXNpbmcgb24gYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2Agd2l0aGluIGBmcy9leHQ0L2V4dGVudHMuY2AgYW5kIGl0cyBjYWxsIHNpdGUgaW4gYGZzL2V4dDQvZmFzdF9jb21taXQuY2A6IGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAuXG5cbkxldCdzIGV2YWx1YXRlIGlmIHRoaXMgaXMgd29ydGggZnV6emluZy5cblxuMS4gICoqUmVhY2hhYmlsaXR5OioqIElzIHRoaXMgZmFzdCBjb21taXQgcmVwbGF5IHJlYWNoYWJsZT8gWWVzLCBhYnNvbHV0ZWx5LiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSB0aGUgb25lcyBTeXprYWxsZXIgcnVucyBvbiwgdXNlIGV4dDQgaW1hZ2VzIHdpdGggZmFzdCBjb21taXQgZW5hYmxlZC4gU3l6a2FsbGVyIGlzIGtub3duIHRvIHRlc3QgZXh0NCBvcGVyYXRpb25zLCBpbmNsdWRpbmcgam91cm5hbCByZWNvdmVyeSBhbmQgcmVwbGF5LiBEdXJpbmcgYSBtb3VudCB3aXRoIGZhc3QgY29tbWl0LCBpZiByZWNvdmVyeSBpcyBuZWVkZWQsIGBleHQ0X2ZjX3JlcGxheWAgcnVucyBkdXJpbmcgYGV4dDRfbG9hZF9hbmRfaW5pdF9qb3VybmFsYCBvciBgamJkMl9qb3VybmFsX2xvYWRgLiBTcGVjaWZpY2FsbHksIGR1cmluZyB0aGUgcmVwbGF5IG9mIGBFWFQ0X0ZDX1RBR19JTk9ERWAsIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAgY2FsbHMgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AuXG5cbjIuICAqKkRvZXMgdGhlIHBhdGNoIHRvdWNoIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGU/KiogWWVzLCBpdCBkb2VzLiBJdCB0b3VjaGVzIGNvcmUgZmlsZXN5c3RlbSBjb2RlOiBgZnMvZXh0NC9leHRlbnRzLmNgIGFuZCBgZnMvZXh0NC9mYXN0X2NvbW1pdC5jYC4gVGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgZXJyb3IgaGFuZGxpbmcuIEl0J3MgY2hhbmdpbmcgaG93IGVycm9ycyBhcmUgcHJvcGFnYXRlZCBhbmQgdGhlIGNvbnRyb2wgZmxvdyBkdXJpbmcgam91cm5hbCByZXBsYXkgb2YgZXh0NCBpbm9kZXMgd2l0aCBmYXN0IGNvbW1pdC4gVGhhdCdzIGEgY2xhc3NpYyB0YXJnZXQgZm9yIGZ1enppbmcuIEZpbGVzeXN0ZW0gZXJyb3IgaGFuZGxpbmcgcGF0aHMgYXJlIG5vdG9yaW91cyBmb3IgcG90ZW50aWFsIGlzc3VlcyDigJMgcmVzb3VyY2UgbGVha3MsIGxvY2sgaXNzdWVzLCBpbnZhcmlhbnQgdmlvbGF0aW9ucywgZG91YmxlIGZyZWVzLi4uIHRoZSBsaXN0IGdvZXMgb24uIEVzcGVjaWFsbHkgZ2l2ZW4gU3l6a2FsbGVyJ3MgZm9jdXMgb24gZnV6emluZyBjb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZXMgd2hlcmUgYGV4dDRfZmluZF9leHRlbnRgIG9yIGBleHQ0X21hcF9ibG9ja3NgIGNhbiByZXR1cm4gZXJyb3IgY29kZXMuXG5cbiAgICBTbywgeWVhaCwgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIGBXb3J0aEZ1enppbmdgIGlzIGB0cnVlYC5cblxuTm93LCBmb3IgYEZvY3VzU3ltYm9sc2AuXG5cbiogICBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYDogSXQncyB0aGUgZGlyZWN0bHkgbW9kaWZpZWQgZnVuY3Rpb24sIHNwZWNpZmljIHRvIGZhc3QgY29tbWl0IHJlcGxheS5cbiogICBgZXh0NF9mY19yZXBsYXlfaW5vZGVgOiBUaGUgbW9kaWZpZWQgY2FsbGVyIGluIGBmYXN0X2NvbW1pdC5jYCBoYW5kbGluZyBgRVhUNF9GQ19UQUdfSU5PREVgLlxuKiAgIGBleHQ0X2ZjX3JlcGxheWA6IFRoZSBtYWluIHJlcGxheSBkaXNwYXRjaCBmdW5jdGlvbiBpbiBgZmFzdF9jb21taXQuY2AuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc3ltYm9scyBpbnZvbHZlZCBvciBtb2RpZmllZCwgc28gSSdsbCBkb3VibGUtY2hlY2sgdGhpczpcbkkgY2FuIGNvbmZpcm0gdGhhdCBJIGZvdW5kIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgIGVhcmxpZXIsIGdyZXBwaW5nIHRoZSBjb2RlLCBzaG93aW5nIHRoYXQgaXQncyBvbmx5IGNhbGxlZCBpbiBgZnMvZXh0NC9mYXN0X2NvbW1pdC5jYCBsaW5lIDIwMDYuIEFsc28sIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAgaXMgY2FsbGVkIGZyb20gYGV4dDRfZmNfcmVwbGF5YCBpbiBgZnMvZXh0NC9mYXN0X2NvbW1pdC5jYC5cblxuQXJlIGFueSBvZiB0aGVzZSB1YmlxdWl0b3VzPyBObywgdGhlc2UgYXJlIGFsbCBzcGVjaWZpYyB0byBleHQ0IGZhc3QgY29tbWl0IHJlcGxheS5cblxuRmluYWxseSwgYEVuYWJsZUNvbmZpZ3NgLiBUaGUgZXh0NCBmaWxlc3lzdGVtIChgRVhUNF9GU2ApIGlzIG9idmlvdXNseSByZXF1aXJlZCB0byBjb21waWxlIHRoZSBmaWxlc3lzdGVtIGNvZGUuIERvZXMgZmFzdCBjb21taXQgcmVxdWlyZSBhbnkgc3BlY2lmaWMgY29uZmlnIG9wdGlvbnM/IEl0J3Mgd29ydGggY2hlY2tpbmcgaWYgZmFzdCBjb21taXQgaXMgZ3VhcmRlZCBieSBhIHNwZWNpZmljIGBDT05GSUdfYCBvcHRpb24uIEEgcXVpY2sgYGdyZXBgIGZvciBgSk9VUk5BTF9GQVNUX0NPTU1JVGAgb3IgYGZhc3RfY29tbWl0YCBpbiBgZnMvZXh0NC9LY29uZmlnYCBzaG91bGQgcmV2ZWFsIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4MzMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTg6NDAuNjI3ODIzNzA0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQ3OTgzNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmFzdF9jb21taXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxODo0MC42NzUzMTE3ODlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjE3Njk0OTAwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXh0NCBGYXN0IENvbW1pdCBUcmlhZ2U6IEEgU29saWQgQ29uZmlybWF0aW9uKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSd2ZSBnb3QuIFRoZSBmYXN0IGNvbW1pdCBmZWF0dXJlIGluIGV4dDQgaXMgYmFrZWQgaW4sIGl0J3MgdW5jb25kaXRpb25hbCDigJMgYGV4dDQteSArPSBmYXN0X2NvbW1pdC5vYC4gVGhhdCdzIHRoZSBiYXNlbGluZS4gSSBxdWlja2x5IHNjYW5uZWQgZm9yIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHdpdGhpbiBgZnMvZXh0NC9gLiBJIGZvdW5kIHRoYXQgYENPTkZJR19FWFQ0X0RFQlVHYCBhY3RpdmF0ZXMgdGhlIGBPcHRfZmNfZGVidWdfZm9yY2VgIG1vdW50IG9wdGlvbiwgYnV0IHRoZSBjb3JlIGZhc3QgY29tbWl0IGZ1bmN0aW9uYWxpdHksIGBFWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZBU1RfQ09NTUlUYCwgYW5kIHRoZSBhc3NvY2lhdGVkIG1vdW50IG9wdGlvbiBgSk9VUk5BTF9GQVNUX0NPTU1JVGAgYXJlIHBhcnQgb2YgdGhlIHN0YW5kYXJkIGZlYXR1cmUgc2V0LiBTbywgdGhlIGtleSBlbmFibGVyIGhlcmUsIHRoZSBwcmltYXJ5IGNvbmZpZywgcmVtYWlucyBgRVhUNF9GU2AuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cCB3aXRoIHRoZSB0cmlhZ2UgaW5zdHJ1Y3Rpb25zLiBXb3J0aEZ1enppbmc/IFllcCwgYWJzb2x1dGVseS4gVGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlIGNoYW5nZSBhbmQgdGhlIGZ1enppbmcgcmVjb21tZW5kYXRpb24gaXMgY2xlYXIgYW5kIGNvbmNpc2UuIEZvY3VzaW5nIG9uIG5vbi11YmlxdWl0b3VzIHN5bWJvbHMsIHRoZSBcIkZvY3VzU3ltYm9sc1wiIGNoZWNrIGlzIGNvcnJlY3QsIHdlJ3JlIGxvb2tpbmcgYXQgdGhpbmdzIGxpa2UgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AsIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAsIGFuZCBgZXh0NF9mY19yZXBsYXlgLiBUaGUgXCJFbmFibGVDb25maWdzXCIgaXMgcGVyZmVjdCwgcmVxdWlyaW5nIGBFWFQ0X0ZTYCBhcyBleHBlY3RlZC5cblxuRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaGUgaW5mb3JtYXRpb24gaXMgY29uc2lzdGVudCwgdGhlIGFuYWx5c2lzIGlzIHNvdW5kLCBhbmQgSSdtIGNvbmZpZGVudCBpbiB0aGUgYXNzZXNzbWVudC4gSSdtIHJlYWR5IHRvIHByb2NlZWQgd2l0aCBzZXR0aW5nIHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTYwMSwiT3V0cHV0VG9rZW5zIjoxODEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTk6MDIuNDQ0ODAzODYyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI2NzMzNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NcIixcbiAgICBcImV4dDRfZmNfcmVwbGF5X2lub2RlXCIsXG4gICAgXCJleHQ0X2ZjX3JlcGxheVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIHByb3BhZ2F0aW9uIGFuZCBjb250cm9sIGZsb3cgZHVyaW5nIGV4dDQgZmFzdCBjb21taXQgam91cm5hbCByZXBsYXkuIEluIGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcygpLCBlcnJvcnMgcmV0dXJuZWQgYnkgZXh0NF9tYXBfYmxvY2tzKCksIHNraXBfaG9sZSgpLCBhbmQgZXh0NF9maW5kX2V4dGVudCgpIGFyZSBub3cgcHJvcGVybHkgY2FwdHVyZWQgYW5kIHJldHVybmVkIGluc3RlYWQgb2Ygc2lsZW50bHkgaWdub3JlZCwgYW5kIGV4dDRfZmNfcmVwbGF5X2lub2RlKCkgaXMgdXBkYXRlZCB0byBoYW5kbGUgYW5kIHByb3BhZ2F0ZSBmYWlsdXJlcy4gVGhlc2UgZXJyb3ItaGFuZGxpbmcgcGF0aHMgaW4gZXh0NCBmaWxlc3lzdGVtIHJlcGxheSBhcmUgcmVhY2hhYmxlIGR1cmluZyBqb3VybmFsIHJlY292ZXJ5IGFuZCBtb3VudCBvcGVyYXRpb25zLCBtYWtpbmcgdGhlbSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nIHdpdGggY29ycnVwdGVkIGRpc2sgaW1hZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NcIixcbiAgICBcImV4dDRfZmNfcmVwbGF5X2lub2RlXCIsXG4gICAgXCJleHQ0X2ZjX3JlcGxheVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIHByb3BhZ2F0aW9uIGFuZCBjb250cm9sIGZsb3cgZHVyaW5nIGV4dDQgZmFzdCBjb21taXQgam91cm5hbCByZXBsYXkuIEluIGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcygpLCBlcnJvcnMgcmV0dXJuZWQgYnkgZXh0NF9tYXBfYmxvY2tzKCksIHNraXBfaG9sZSgpLCBhbmQgZXh0NF9maW5kX2V4dGVudCgpIGFyZSBub3cgcHJvcGVybHkgY2FwdHVyZWQgYW5kIHJldHVybmVkIGluc3RlYWQgb2Ygc2lsZW50bHkgaWdub3JlZCwgYW5kIGV4dDRfZmNfcmVwbGF5X2lub2RlKCkgaXMgdXBkYXRlZCB0byBoYW5kbGUgYW5kIHByb3BhZ2F0ZSBmYWlsdXJlcy4gVGhlc2UgZXJyb3ItaGFuZGxpbmcgcGF0aHMgaW4gZXh0NCBmaWxlc3lzdGVtIHJlcGxheSBhcmUgcmVhY2hhYmxlIGR1cmluZyBqb3VybmFsIHJlY292ZXJ5IGFuZCBtb3VudCBvcGVyYXRpb25zLCBtYWtpbmcgdGhlbSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nIHdpdGggY29ycnVwdGVkIGRpc2sgaW1hZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOTowMi41Mjc0ODU0NThaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MjM3OTczMzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTk6MDIuNTI4MDU2NjQ4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzgyMzczOTYzNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGV4dDQgZmFzdC1jb21taXQgcmVwbGF5IGNvZGUgKGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcygpIGFuZCBleHQ0X2ZjX3JlcGxheV9pbm9kZSgpKS4gSXQgZW5zdXJlcyB0aGF0IHdoZW4gZXh0NF9tYXBfYmxvY2tzKCksIHNraXBfaG9sZSgpLCBvciBleHQ0X2ZpbmRfZXh0ZW50KCkgZmFpbCwgdGhlIGVycm9yIGNvZGUgaXMgY2FwdHVyZWQsIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSBqdW1wcyB0byBjbGVhbnVwIHdpdGhvdXQgdXBkYXRpbmcgb3IgZGlydHlpbmcgdGhlIGlub2RlLCBhbmQgdGhlIGVycm9yIGlzIHByb3BhZ2F0ZWQgdXAgdGhlIGNhbGwgc3RhY2sgdG8gYWJvcnQgdGhlIHJlcGxheS5cXG5cXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bCwgZXRjLiksIGVsaW1pbmF0aW5nIGFueSByaXNrIG9mIGluZm8tbGVha3MuXFxuLSBObyBuZXcgbWVtb3J5IGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIG9yIGxlZnQgdW5pbml0aWFsaXplZDsgdGhlIG1vZGlmaWVkIGJyYW5jaGluZyByZWxpZXMgc3RyaWN0bHkgb24gcHJvcGVybHkgaW5pdGlhbGl6ZWQvYXNzaWduZWQgcmV0dXJuIHZhbHVlcyBhbmQgZXJyb3IgcG9pbnRlcnMuXFxuLSBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cXG4tIEFueSBidWdzIGNhdXNlZCBieSBjb3JydXB0ZWQgam91cm5hbCByZXBsYXkgKHN1Y2ggYXMgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzKSBmYWxsIHVuZGVyIEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MmUxOTg2MjJkZmNiYTIyNTRiN2M1YjZmZTdmZmU1NGIxZDkxZDdhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDI6MTY6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jXG5pbmRleCA3NjAzOGI2YzM2NTUyLi5mOGM4MDVkODBjMzNjIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHRlbnRzLmNcbisrKyBiL2ZzL2V4dDQvZXh0ZW50cy5jXG5AQCAtNjI3NSw3ICs2Mjc1LDcgQEAgaW50IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRtYXAubV9sZW4gPSBlbmQgLSBjdXI7XG4gXHRcdHJldCA9IGV4dDRfbWFwX2Jsb2NrcyhOVUxMLCBpbm9kZSwgXHUwMDI2bWFwLCAwKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRicmVhaztcbitcdFx0XHRnb3RvIGNsZWFudXA7XG4gXHRcdGlmIChyZXQgXHUwMDNlIDApXG4gXHRcdFx0bnVtYmxrcyArPSByZXQ7XG4gXHRcdGN1ciA9IGN1ciArIG1hcC5tX2xlbjtcbkBAIC02MjkxLDE1ICs2MjkxLDE5IEBAIGludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcbiBcdGN1ciA9IDA7XG4gXHRyZXQgPSBza2lwX2hvbGUoaW5vZGUsIFx1MDAyNmN1cik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIG91dDtcbitcdFx0Z290byBjbGVhbnVwO1xuIFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aCwgMCk7XG4tXHRpZiAoSVNfRVJSKHBhdGgpKVxuLVx0XHRnb3RvIG91dDtcbitcdGlmIChJU19FUlIocGF0aCkpIHtcbitcdFx0cmV0ID0gUFRSX0VSUihwYXRoKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuIFx0bnVtYmxrcyArPSBwYXRoLVx1MDAzZXBfZGVwdGg7XG4gXHR3aGlsZSAoY3VyIFx1MDAzYyBlbmQpIHtcbiBcdFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aCwgMCk7XG4tXHRcdGlmIChJU19FUlIocGF0aCkpXG4tXHRcdFx0YnJlYWs7XG4rXHRcdGlmIChJU19FUlIocGF0aCkpIHtcbitcdFx0XHRyZXQgPSBQVFJfRVJSKHBhdGgpO1xuK1x0XHRcdGdvdG8gY2xlYW51cDtcbitcdFx0fVxuIFx0XHRleCA9IHBhdGhbcGF0aC1cdTAwM2VwX2RlcHRoXS5wX2V4dDtcbiBcdFx0aWYgKCFleClcbiBcdFx0XHRnb3RvIGNsZWFudXA7XG5AQCAtNjMwOCwxMSArNjMxMiwxMyBAQCBpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRcdFx0XHRcdGV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4KSk7XG4gXHRcdHJldCA9IHNraXBfaG9sZShpbm9kZSwgXHUwMDI2Y3VyKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRicmVhaztcbitcdFx0XHRnb3RvIGNsZWFudXA7XG4gXG4gXHRcdHBhdGgyID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgY3VyLCBwYXRoMiwgMCk7XG4tXHRcdGlmIChJU19FUlIocGF0aDIpKVxuLVx0XHRcdGJyZWFrO1xuK1x0XHRpZiAoSVNfRVJSKHBhdGgyKSkge1xuK1x0XHRcdHJldCA9IFBUUl9FUlIocGF0aDIpO1xuK1x0XHRcdGdvdG8gY2xlYW51cDtcbitcdFx0fVxuIFxuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gbWF4KHBhdGgtXHUwMDNlcF9kZXB0aCwgcGF0aDItXHUwMDNlcF9kZXB0aCk7IGkrKykge1xuIFx0XHRcdGNtcDEgPSBjbXAyID0gMDtcbkBAIC02MzMzLDcgKzYzMzksNyBAQCBpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gY2xlYW51cDpcbiBcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcbiBcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoMik7XG4tXHRyZXR1cm4gMDtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIGludCBleHQ0X2V4dF9jbGVhcl9iYihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZmFzdF9jb21taXQuYyBiL2ZzL2V4dDQvZmFzdF9jb21taXQuY1xuaW5kZXggMGNhYzg5MGNmMzcwMi4uODExMGIwMWUzNmMxMSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZmFzdF9jb21taXQuY1xuKysrIGIvZnMvZXh0NC9mYXN0X2NvbW1pdC5jXG5AQCAtMjAwMiw4ICsyMDAyLDExIEBAIHN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdCAqIGNyYXNoaW5nLiBUaGlzIHNob3VsZCBiZSBmaXhlZCBidXQgdW50aWwgdGhlbiwgd2UgY2FsY3VsYXRlXG4gXHQgKiB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0aGUgaW5vZGUuXG4gXHQgKi9cbi1cdGlmICghZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpKVxuLVx0XHRleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoaW5vZGUpO1xuK1x0aWYgKCFleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSkpIHtcbitcdFx0cmV0ID0gZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKGlub2RlKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIG91dF9icmVsc2U7XG4rXHR9XG4gXG4gXHRpbm9kZS1cdTAwM2VpX2dlbmVyYXRpb24gPSBsZTMyX3RvX2NwdShleHQ0X3Jhd19pbm9kZShcdTAwMjZpbG9jKS1cdTAwM2VpX2dlbmVyYXRpb24pO1xuIFx0ZXh0NF9yZXNldF9pbm9kZV9zZWVkKGlub2RlKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE5OjAyLjUyODA2MDM5OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5MjcwMDIzMTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb246IEV4dDQgUGF0Y2ggQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGUgZ29hbCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggdG8gdGhlIGV4dDQgZmlsZXN5c3RlbSByZXF1aXJlcyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLiBMZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgYmVpbmcgY2hhbmdlZC4gVGhlIGZpbGUgaXMgYGZzL2V4dDQvZXh0ZW50cy5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGUgcGF0Y2ggZm9jdXNlcyBvbiBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSBzZWUgYSBwYXR0ZXJuOiB0aGUgY2hhbmdlcyBwcmVkb21pbmFudGx5IGludm9sdmUgcmVwbGFjaW5nIGBicmVha2Agb3IgYGdvdG8gb3V0YCB3aXRoIGBnb3RvIGNsZWFudXBgIGFmdGVyIGVuY291bnRlcmluZyBuZWdhdGl2ZSByZXR1cm4gdmFsdWVzIGZyb20gdmFyaW91cyBmdW5jdGlvbnMgbGlrZSBgZXh0NF9tYXBfYmxvY2tzYCwgYHNraXBfaG9sZWAsIGFuZCBgZXh0NF9maW5kX2V4dGVudGAuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgY2xlYW51cCBwcm9jZWR1cmUgaW4gdGhlIGtlcm5lbCAtIGl0J3MgbWFraW5nIHN1cmUgcmVzb3VyY2VzIGFyZSBmcmVlZCB3aGVuIHRoaW5ncyBnbyB3cm9uZy5cblxuVGhlIGtleSB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgdXNlIG9mIGBJU19FUlJgIHRvIGNoZWNrIGZvciBlcnJvciBwb2ludGVycyBmcm9tIGBleHQ0X2ZpbmRfZXh0ZW50YC4gVGhhdCBtYWtlcyBtZSB0aGluayBhYm91dCBwb3RlbnRpYWwgcmVzb3VyY2UgbGVha3MuIFNwZWNpZmljYWxseSwgaWYgYGV4dDRfZmluZF9leHRlbnRgIHJldHVybnMgYW4gZXJyb3IgcG9pbnRlciAoYEVSUl9QVFJgKSwgd2hhdCBkb2VzIGBleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aClgIGRvPyBUaGlzIGlzIGEgcG9pbnQgb2YgY29uY2VybiBiZWNhdXNlIGZyZWVpbmcgYSBwb2ludGVyIHRoYXQgaXMgYW4gZXJyb3IsIGlzIHNvbWV0aGluZyB0byBsb29rIGZvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXJ0IG9mIHRoZSBwYXRjaC4gSSBuZWVkIHRvIGtub3cgaWYgdGhlIGBleHQ0X2ZyZWVfZXh0X3BhdGhgIGhhbmRsZXMgZXJyb3IgcG9pbnRlcnMgZ3JhY2VmdWxseS4gSWYgbm90LCB3ZSBoYXZlIGEgcHJvYmxlbS5cblxuQW5kIHRoZW4gdGhlcmUncyB0aGUgYGZzL2V4dDQvZmFzdF9jb21taXQuY2AgZmlsZS4gVGhlIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAgZnVuY3Rpb24gY2FsbHMgYGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc2AgYnV0IG9ubHkgaWYgdGhlIGlub2RlIGRvZXNuJ3QgaGF2ZSBpbmxpbmUgZGF0YS4gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgY2FsbCBkaWN0YXRlcyB3aGV0aGVyIHdlIGV4aXQuIE9rYXksIHRoaXMgaXMgaW1wb3J0YW50IGNvbnRleHQgLSB0aGlzIGlzIGEgZnVuY3Rpb24gdGhhdCBtaWdodCAqdHJpZ2dlciogb3VyIGZ1bmN0aW9uIG9mIGludGVyZXN0IGlmIHRoZSBpbm9kZSBkb2Vzbid0IGhhdmUgaW5saW5lIGRhdGEuXG5cbkFscmlnaHQsIEkgbmVlZCB0byBkaXZlIGludG8gYGZzL2V4dDQvZXh0ZW50cy5jYCBhcm91bmQgbGluZSA2Mjc1LiBJJ2xsIHJlYWQgdGhlIGNvZGUgYXJvdW5kIHRoYXQgYXJlYSB1c2luZyBteSB0b29saW5nIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcyBhbmQgd2hldGhlciBhbnkgY3JpdGljYWwgcmVzb3VyY2UgY2xlYW51cCBpcyBtaXNzZWQgd2hlbiBhbiBlcnJvciBpcyBoaXQuIEkgYW0gbGVhbmluZyB0b3dhcmRzIHRoaXMgcGF0Y2ggKm5vdCogcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24sIGJ1dCBJIHdhbnQgdG8gYmUgMTAwJSBzdXJlIHRoZSBlcnJvciBwYXRocyBhcmUgcHJvcGVybHkgaGFuZGxlZCwgZXNwZWNpYWxseSB0aGF0IGBleHQ0X2ZyZWVfZXh0X3BhdGhgIGNhbGwuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk4NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE5OjExLjc5ODA4NTgxOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjE4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9leHRlbnRzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjI2MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjI2MDpcXHRcXG42MjYxOlxcdFxcdC8qIERldGVybWluIHRoZSBzaXplIG9mIHRoZSBmaWxlIGZpcnN0ICovXFxuNjI2MjpcXHRcXHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgRVhUX01BWF9CTE9DS1MgLSAxLCBOVUxMLFxcbjYyNjM6XFx0XFx0XFx0XFx0XFx0XFx0RVhUNF9FWF9OT0NBQ0hFKTtcXG42MjY0OlxcdFxcdGlmIChJU19FUlIocGF0aCkpXFxuNjI2NTpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihwYXRoKTtcXG42MjY2OlxcdFxcdGV4ID0gcGF0aFtwYXRoLVxcdTAwM2VwX2RlcHRoXS5wX2V4dDtcXG42MjY3OlxcdFxcdGlmICghZXgpXFxuNjI2ODpcXHRcXHRcXHRnb3RvIG91dDtcXG42MjY5OlxcdFxcdGVuZCA9IGxlMzJfdG9fY3B1KGV4LVxcdTAwM2VlZV9ibG9jaykgKyBleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbihleCk7XFxuNjI3MDpcXHRcXG42MjcxOlxcdFxcdC8qIENvdW50IHRoZSBudW1iZXIgb2YgZGF0YSBibG9ja3MgKi9cXG42MjcyOlxcdFxcdGN1ciA9IDA7XFxuNjI3MzpcXHRcXHR3aGlsZSAoY3VyIFxcdTAwM2MgZW5kKSB7XFxuNjI3NDpcXHRcXHRcXHRtYXAubV9sYmxrID0gY3VyO1xcbjYyNzU6XFx0XFx0XFx0bWFwLm1fbGVuID0gZW5kIC0gY3VyO1xcbjYyNzY6XFx0XFx0XFx0cmV0ID0gZXh0NF9tYXBfYmxvY2tzKE5VTEwsIGlub2RlLCBcXHUwMDI2bWFwLCAwKTtcXG42Mjc3OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjYyNzg6XFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbjYyNzk6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuNjI4MDpcXHRcXHRcXHRcXHRudW1ibGtzICs9IHJldDtcXG42MjgxOlxcdFxcdFxcdGN1ciA9IGN1ciArIG1hcC5tX2xlbjtcXG42MjgyOlxcdFxcdH1cXG42MjgzOlxcdFxcbjYyODQ6XFx0XFx0LypcXG42Mjg1OlxcdFxcdCAqIENvdW50IHRoZSBudW1iZXIgb2YgZXh0ZW50IHRyZWUgYmxvY2tzLiBXZSBkbyBpdCBieSBsb29raW5nIHVwXFxuNjI4NjpcXHRcXHQgKiB0d28gc3VjY2Vzc2l2ZSBleHRlbnRzIGFuZCBkZXRlcm1pbmluZyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuXFxuNjI4NzpcXHRcXHQgKiB0aGVpciBwYXRocy4gV2hlbiBwYXRoIGlzIGRpZmZlcmVudCBmb3IgMiBzdWNjZXNzaXZlIGV4dGVudHNcXG42Mjg4OlxcdFxcdCAqIHdlIGNvbXBhcmUgdGhlIGJsb2NrcyBpbiB0aGUgcGF0aCBhdCBlYWNoIGxldmVsIGFuZCBpbmNyZW1lbnRcXG42Mjg5OlxcdFxcdCAqIGlibG9ja3MgYnkgdG90YWwgbnVtYmVyIG9mIGRpZmZlcmVuY2VzIGZvdW5kLlxcbjYyOTA6XFx0XFx0ICovXFxuNjI5MTpcXHRcXHRjdXIgPSAwO1xcbjYyOTI6XFx0XFx0cmV0ID0gc2tpcF9ob2xlKGlub2RlLCBcXHUwMDI2Y3VyKTtcXG42MjkzOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjYyOTQ6XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbjYyOTU6XFx0XFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aCwgMCk7XFxuNjI5NjpcXHRcXHRpZiAoSVNfRVJSKHBhdGgpKSB7XFxuNjI5NzpcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKHBhdGgpO1xcbjYyOTg6XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbjYyOTk6XFx0XFx0fVxcbjYzMDA6XFx0XFx0bnVtYmxrcyArPSBwYXRoLVxcdTAwM2VwX2RlcHRoO1xcbjYzMDE6XFx0XFx0d2hpbGUgKGN1ciBcXHUwMDNjIGVuZCkge1xcbjYzMDI6XFx0XFx0XFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGN1ciwgcGF0aCwgMCk7XFxuNjMwMzpcXHRcXHRcXHRpZiAoSVNfRVJSKHBhdGgpKSB7XFxuNjMwNDpcXHRcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKHBhdGgpO1xcbjYzMDU6XFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbjYzMDY6XFx0XFx0XFx0fVxcbjYzMDc6XFx0XFx0XFx0ZXggPSBwYXRoW3BhdGgtXFx1MDAzZXBfZGVwdGhdLnBfZXh0O1xcbjYzMDg6XFx0XFx0XFx0aWYgKCFleClcXG42MzA5OlxcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG42MzEwOlxcdFxcbjYzMTE6XFx0XFx0XFx0Y3VyID0gbWF4KGN1ciArIDEsIGxlMzJfdG9fY3B1KGV4LVxcdTAwM2VlZV9ibG9jaykgK1xcbjYzMTI6XFx0XFx0XFx0XFx0XFx0XFx0ZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oZXgpKTtcXG42MzEzOlxcdFxcdFxcdHJldCA9IHNraXBfaG9sZShpbm9kZSwgXFx1MDAyNmN1cik7XFxuNjMxNDpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG42MzE1OlxcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG42MzE2OlxcdFxcbjYzMTc6XFx0XFx0XFx0cGF0aDIgPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBjdXIsIHBhdGgyLCAwKTtcXG42MzE4OlxcdFxcdFxcdGlmIChJU19FUlIocGF0aDIpKSB7XFxuNjMxOTpcXHRcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKHBhdGgyKTtcXG42MzIwOlxcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG42MzIxOlxcdFxcdFxcdH1cXG42MzIyOlxcdFxcbjYzMjM6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjPSBtYXgocGF0aC1cXHUwMDNlcF9kZXB0aCwgcGF0aDItXFx1MDAzZXBfZGVwdGgpOyBpKyspIHtcXG42MzI0OlxcdFxcdFxcdFxcdGNtcDEgPSBjbXAyID0gMDtcXG42MzI1OlxcdFxcdFxcdFxcdGlmIChpIFxcdTAwM2M9IHBhdGgtXFx1MDAzZXBfZGVwdGgpXFxuNjMyNjpcXHRcXHRcXHRcXHRcXHRjbXAxID0gcGF0aFtpXS5wX2JoID9cXG42MzI3OlxcdFxcdFxcdFxcdFxcdFxcdHBhdGhbaV0ucF9iaC1cXHUwMDNlYl9ibG9ja25yIDogMDtcXG42MzI4OlxcdFxcdFxcdFxcdGlmIChpIFxcdTAwM2M9IHBhdGgyLVxcdTAwM2VwX2RlcHRoKVxcbjYzMjk6XFx0XFx0XFx0XFx0XFx0Y21wMiA9IHBhdGgyW2ldLnBfYmggP1xcbjYzMzA6XFx0XFx0XFx0XFx0XFx0XFx0cGF0aDJbaV0ucF9iaC1cXHUwMDNlYl9ibG9ja25yIDogMDtcXG42MzMxOlxcdFxcdFxcdFxcdGlmIChjbXAxICE9IGNtcDIgXFx1MDAyNlxcdTAwMjYgY21wMiAhPSAwKVxcbjYzMzI6XFx0XFx0XFx0XFx0XFx0bnVtYmxrcysrO1xcbjYzMzM6XFx0XFx0XFx0fVxcbjYzMzQ6XFx0XFx0fVxcbjYzMzU6XFx0XFxuNjMzNjpcXHRvdXQ6XFxuNjMzNzpcXHRcXHRpbm9kZS1cXHUwMDNlaV9ibG9ja3MgPSBudW1ibGtzIFxcdTAwM2NcXHUwMDNjIChpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemVfYml0cyAtIDkpO1xcbjYzMzg6XFx0XFx0ZXh0NF9tYXJrX2lub2RlX2RpcnR5KE5VTEwsIGlub2RlKTtcXG42MzM5OlxcdGNsZWFudXA6XFxuNjM0MDpcXHRcXHRleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aCk7XFxuNjM0MTpcXHRcXHRleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aDIpO1xcbjYzNDI6XFx0XFx0cmV0dXJuIHJldDtcXG42MzQzOlxcdH1cXG42MzQ0OlxcdFxcbjYzNDU6XFx0aW50IGV4dDRfZXh0X2NsZWFyX2JiKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuNjM0NjpcXHR7XFxuNjM0NzpcXHRcXHRzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCA9IE5VTEw7XFxuNjM0ODpcXHRcXHRzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4O1xcbjYzNDk6XFx0XFx0ZXh0NF9sYmxrX3QgY3VyID0gMCwgZW5kO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOToxMS43OTg0NDk3OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MzE5MjM3ODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBleHQ0IGludGVybmFsczpcblxuKipEaXZpbmcgaW50byBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gYmVnaW4gYW4gaW52ZXN0aWdhdGlvbiBhbmQgZ2V0IGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmN0aW9uIGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgLiBHaXZlbiB0aGF0IEknbSBsaWtlbHkga25lZS1kZWVwIGluIHVuZGVyc3RhbmRpbmcgZXh0NCwgdGhpcyBmdW5jdGlvbiBuYW1lIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCByZXBsYXlpbmcgb3Igc2V0dGluZyBpbm9kZSBibG9ja3Mgd2l0aGluIHRoZSBleHRlbnQgdHJlZSBtZWNoYW5pc20gb2YgdGhlIGV4dDQgZmlsZSBzeXN0ZW0uIEnigJltIGd1ZXNzaW5nIHRoaXMgbWlnaHQgcmVsYXRlIHRvIHRoZSBqb3VybmFsIHJlY292ZXJ5IHByb2Nlc3MsIHBvc3NpYmx5IGhhbmRsaW5nIG1vZGlmaWNhdGlvbnMgdG8gZXh0ZW50LW1hcHBlZCBpbm9kZXMgYWZ0ZXIgYSBjcmFzaCBvciB1bmNsZWFuIHNodXRkb3duLiBJIGV4cGVjdCBpdCdzIGNydWNpYWwgZm9yIGVuc3VyaW5nIGRhdGEgY29uc2lzdGVuY3kgd2hlbiByZWNvdmVyaW5nIGZyb20gYW4gaW5jb21wbGV0ZSB3cml0ZSBvciB0cmFuc2FjdGlvbi4gTGV0J3Mgc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGFuZCB3aGVyZSBpdCdzIGJlaW5nIGNhbGxlZC4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyBsb2dpYyB0byB1bmRlcnN0YW5kIHRoZSBpbnRyaWNhY2llcyBvZiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGpvdXJuYWxpbmcgYW5kIGJsb2NrIGFsbG9jYXRpb24gbGF5ZXJzLiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5yYXZlbCB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MTksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE5OjE4LjExNzY5MDI0MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDE4MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9leHRlbnRzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjI0NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjI0NTpcXHRcXHRpZiAocmV0ICE9IDApXFxuNjI0NjpcXHRcXHRcXHRyZXR1cm4gMDtcXG42MjQ3OlxcdFxcdCpjdXIgPSAqY3VyICsgbWFwLm1fbGVuO1xcbjYyNDg6XFx0XFx0cmV0dXJuIDA7XFxuNjI0OTpcXHR9XFxuNjI1MDpcXHRcXG42MjUxOlxcdC8qIENvdW50IG51bWJlciBvZiBibG9ja3MgdXNlZCBieSB0aGlzIGlub2RlIGFuZCB1cGRhdGUgaV9ibG9ja3MgKi9cXG42MjUyOlxcdGludCBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcXG42MjUzOlxcdHtcXG42MjU0OlxcdFxcdHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoID0gTlVMTCwgKnBhdGgyID0gTlVMTDtcXG42MjU1OlxcdFxcdHN0cnVjdCBleHQ0X2V4dGVudCAqZXg7XFxuNjI1NjpcXHRcXHRleHQ0X2xibGtfdCBjdXIgPSAwLCBlbmQ7XFxuNjI1NzpcXHRcXHRpbnQgbnVtYmxrcyA9IDAsIGksIHJldCA9IDA7XFxuNjI1ODpcXHRcXHRleHQ0X2ZzYmxrX3QgY21wMSwgY21wMjtcXG42MjU5OlxcdFxcdHN0cnVjdCBleHQ0X21hcF9ibG9ja3MgbWFwO1xcbjYyNjA6XFx0XFxuNjI2MTpcXHRcXHQvKiBEZXRlcm1pbiB0aGUgc2l6ZSBvZiB0aGUgZmlsZSBmaXJzdCAqL1xcbjYyNjI6XFx0XFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIEVYVF9NQVhfQkxPQ0tTIC0gMSwgTlVMTCxcXG42MjYzOlxcdFxcdFxcdFxcdFxcdFxcdEVYVDRfRVhfTk9DQUNIRSk7XFxuNjI2NDpcXHRcXHRpZiAoSVNfRVJSKHBhdGgpKVxcbjYyNjU6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIocGF0aCk7XFxuNjI2NjpcXHRcXHRleCA9IHBhdGhbcGF0aC1cXHUwMDNlcF9kZXB0aF0ucF9leHQ7XFxuNjI2NzpcXHRcXHRpZiAoIWV4KVxcbjYyNjg6XFx0XFx0XFx0Z290byBvdXQ7XFxuNjI2OTpcXHRcXHRlbmQgPSBsZTMyX3RvX2NwdShleC1cXHUwMDNlZWVfYmxvY2spICsgZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOToxOC4xMTgwOTU0MjJaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMyNDExODA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gbXkgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIGV4dDQgRmFzdCBDb21taXQqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAgd2l0aGluIGBmcy9leHQ0L2Zhc3RfY29tbWl0LmNgLiBUaGF0J3MgaW50ZXJlc3RpbmcuIEkgaW1tZWRpYXRlbHkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIGZhc3QgY29tbWl0IHByb2Nlc3MuIEknbSB0aGlua2luZyBhYm91dCBpdHMgcm9sZSBpbiByZXBsYXlpbmcgaW5vZGUgb3BlcmF0aW9ucy4gV2hhdCBzcGVjaWZpYyBhc3BlY3RzIG9mIGlub2RlIG1ldGFkYXRhIGFyZSBiZWluZyByZWNvbnN0cnVjdGVkIG9yIHZhbGlkYXRlZCBkdXJpbmcgcmVwbGF5PyBJcyB0aGlzIHByaW1hcmlseSBhYm91dCBlbnN1cmluZyBkYXRhIGludGVncml0eSBhZnRlciBhIGNyYXNoIG9yIGEgcG93ZXIgZmFpbHVyZSBkdXJpbmcgYSBmYXN0IGNvbW1pdCB3aW5kb3c/XG5cbkkgd2FudCB0byBjb25zaWRlciBob3cgdGhlIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBqb3VybmFsLiBBcmUgd2UgcmVhZGluZyB0cmFuc2FjdGlvbiBsb2dzLCBhbmQgaWYgc28sIHdoYXQga2luZCBvZiBpbmZvcm1hdGlvbiBpcyBpdCBwdWxsaW5nIHRvIHJlYnVpbGQgdGhlIGlub2RlIHN0YXRlPyBJcyBpdCBqdXN0IHRoZSBpbm9kZSBpdHNlbGYsIG9yIGFyZSB3ZSB3b3JraW5nIHdpdGggYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMgbGlrZSBiaXRtYXBzIG9yIGluZGlyZWN0IGJsb2Nrcz8gSSB3b3VsZCBhbHNvIHdhbnQgdG8gZXhhbWluZSB3aGVyZSBgZXh0NF9mY19yZXBsYXlfaW5vZGVgIGlzIGNhbGxlZCBpbiB0aGUgZmFzdCBjb21taXQgcmVjb3ZlcnkgcGF0aC4gSXMgdGhpcyBleGVjdXRlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgY3Jhc2ggcmVjb3ZlcnksIG9yIGR1cmluZyBhbiBlYXJsaWVyIHBoYXNlIG9mIHRoZSBmYXN0IGNvbW1pdCB0cmFuc2FjdGlvbj9cbkkgbmVlZCB0byBleGFtaW5lIGl0IG1vcmUgY2xvc2VseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEzNCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTk6MjAuNDQyMjE3MTY3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L2Zhc3RfY29tbWl0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk5MDpcXHRcXG4xOTkxOlxcdFxcdC8qIEdpdmVuIHRoYXQgd2UganVzdCB3cm90ZSB0aGUgaW5vZGUgb24gZGlzaywgdGhpcyBTSE9VTEQgc3VjY2VlZC4gKi9cXG4xOTkyOlxcdFxcdGlub2RlID0gZXh0NF9pZ2V0KHNiLCBpbm8sIEVYVDRfSUdFVF9OT1JNQUwpO1xcbjE5OTM6XFx0XFx0aWYgKElTX0VSUihpbm9kZSkpIHtcXG4xOTk0OlxcdFxcdFxcdGV4dDRfZGVidWcoXFxcIklub2RlIG5vdCBmb3VuZC5cXFwiKTtcXG4xOTk1OlxcdFxcdFxcdGlub2RlID0gTlVMTDtcXG4xOTk2OlxcdFxcdFxcdHJldCA9IC1FRlNDT1JSVVBURUQ7XFxuMTk5NzpcXHRcXHRcXHRnb3RvIG91dF9icmVsc2U7XFxuMTk5ODpcXHRcXHR9XFxuMTk5OTpcXHRcXG4yMDAwOlxcdFxcdC8qXFxuMjAwMTpcXHRcXHQgKiBPdXIgYWxsb2NhdG9yIGNvdWxkIGhhdmUgbWFkZSBkaWZmZXJlbnQgZGVjaXNpb25zIHRoYW4gYmVmb3JlXFxuMjAwMjpcXHRcXHQgKiBjcmFzaGluZy4gVGhpcyBzaG91bGQgYmUgZml4ZWQgYnV0IHVudGlsIHRoZW4sIHdlIGNhbGN1bGF0ZVxcbjIwMDM6XFx0XFx0ICogdGhlIG51bWJlciBvZiBibG9ja3MgdGhlIGlub2RlLlxcbjIwMDQ6XFx0XFx0ICovXFxuMjAwNTpcXHRcXHRpZiAoIWV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSkge1xcbjIwMDY6XFx0XFx0XFx0cmV0ID0gZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKGlub2RlKTtcXG4yMDA3OlxcdFxcdFxcdGlmIChyZXQpXFxuMjAwODpcXHRcXHRcXHRcXHRnb3RvIG91dF9icmVsc2U7XFxuMjAwOTpcXHRcXHR9XFxuMjAxMDpcXHRcXG4yMDExOlxcdFxcdGlub2RlLVxcdTAwM2VpX2dlbmVyYXRpb24gPSBsZTMyX3RvX2NwdShleHQ0X3Jhd19pbm9kZShcXHUwMDI2aWxvYyktXFx1MDAzZWlfZ2VuZXJhdGlvbik7XFxuMjAxMjpcXHRcXHRleHQ0X3Jlc2V0X2lub2RlX3NlZWQoaW5vZGUpO1xcbjIwMTM6XFx0XFxuMjAxNDpcXHRcXHRleHQ0X2lub2RlX2NzdW1fc2V0KGlub2RlLCBleHQ0X3Jhd19pbm9kZShcXHUwMDI2aWxvYyksIEVYVDRfSShpbm9kZSkpO1xcbjIwMTU6XFx0XFx0cmV0ID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoTlVMTCwgTlVMTCwgaWxvYy5iaCk7XFxuMjAxNjpcXHRcXHRzeW5jX2RpcnR5X2J1ZmZlcihpbG9jLmJoKTtcXG4yMDE3OlxcdG91dF9icmVsc2U6XFxuMjAxODpcXHRcXHRicmVsc2UoaWxvYy5iaCk7XFxuMjAxOTpcXHRvdXQ6XFxuMjAyMDpcXHRcXHRpcHV0KGlub2RlKTtcXG4yMDIxOlxcdFxcdGlmICghcmV0KVxcbjIwMjI6XFx0XFx0XFx0YmxrZGV2X2lzc3VlX2ZsdXNoKHNiLVxcdTAwM2VzX2JkZXYpO1xcbjIwMjM6XFx0XFxuMjAyNDpcXHRcXHRyZXR1cm4gcmV0O1xcbjIwMjU6XFx0fVxcbjIwMjY6XFx0XFxuMjAyNzpcXHQvKlxcbjIwMjg6XFx0ICogRGVudHJ5IGNyZWF0ZSByZXBsYXkgZnVuY3Rpb24uXFxuMjAyOTpcXHQgKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOToyMC40NDI0MTQ2ODdaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjE3MzYzNDc2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGBleHQ0X2ZyZWVfZXh0X3BhdGhgIHdpdGggYW4gYElTX0VSUmAgUG9pbnRlcioqXG5cbkFscmlnaHQsIEknbSBjdXJpb3VzLiBUaGUgcXVlc3Rpb24gaXMsIHdoYXQgaGFwcGVucyB3aXRoaW4gYGV4dDRfZnJlZV9leHRfcGF0aGAgaWYgd2UgZmVlZCBpdCBhbiBgSVNfRVJSYCBwb2ludGVyPyBJIGtub3cgdGhlIGludGVudGlvbiBpcyBwcm9iYWJseSB0byBjbGVhbiB1cCBhbiBlcnJvciBjb25kaXRpb24sIGJ1dCBJIHdhbnQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUgb2YgdGhlIGJlaGF2aW9yLiBJdCdzIGNydWNpYWwsIHdoZW4gZGVhbGluZyB3aXRoIGZpbGUgc3lzdGVtIGNvZGUsIHRvIGhhdmUgYSByb2NrLXNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlc2UgZWRnZSBjYXNlcyB0byBwcmV2ZW50IHN1YnRsZSBjb3JydXB0aW9uIGlzc3Vlcy5cblxuU28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MganVtcCBzdHJhaWdodCBpbnRvIHRoZSBgZXh0NF9mcmVlX2V4dF9wYXRoYCBmdW5jdGlvbiBkZWZpbml0aW9uLiBJIG5lZWQgdG8gd2FsayB0aHJvdWdoIHRoZSBsb2dpYyB0aGVyZSwgc3RlcCBieSBzdGVwLCBhbmQgaWRlbnRpZnkgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsbHkgaW52YWxpZCBwb2ludGVycy4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBudWxsIHBvaW50ZXIgY2hlY2tzLCBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBkZWFsbG9jYXRpb24gcm91dGluZXMuIFRoaXMgaXMgYWxsIGFib3V0IGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IGFuZCBlcnJvciBoYW5kbGluZyByb2J1c3RuZXNzLiBJIG5lZWQgdG8gYmUgY29uZmlkZW50IHRoYXQgaXQgZ3JhY2VmdWxseSBoYW5kbGVzIHRoZSBlcnJvciBjb25kaXRpb24gYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cy4gVGltZSB0byBnZXQgdG8gd29yayFcblxuXG4iLCJJbnB1dFRva2VucyI6NzA0NSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTk6MjIuNjE2MDUzMzI5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM3MDQ2NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgZXh0NF9mcmVlX2V4dF9wYXRoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTM5MzU9ZXh0ZXJuIHN0cnVjdCBleHQ0X2V4dF9wYXRoICpleHQ0X2ZpbmRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqLCBleHQ0X2xibGtfdCxcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTM5MzctXFx0XFx0XFx0XFx0XFx0ICAgICAgaW50IGZsYWdzKTtcXG5mcy9leHQ0L2V4dDQuaDozOTM4OmV4dGVybiB2b2lkIGV4dDRfZnJlZV9leHRfcGF0aChzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqKTtcXG5mcy9leHQ0L2V4dDQuaC0zOTM5LWV4dGVybiBpbnQgZXh0NF9leHRfY2hlY2tfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz0xMTE9c3RhdGljIHZvaWQgZXh0NF9leHRfZHJvcF9yZWZzKHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMTIxLVxcbmZzL2V4dDQvZXh0ZW50cy5jOjEyMjp2b2lkIGV4dDRfZnJlZV9leHRfcGF0aChzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aClcXG5mcy9leHQ0L2V4dGVudHMuYy0xMjMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOToyNC4zNTMxMTA2OTZaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDY0NzU2NzQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIGNvZGU6XG5cbioqRGl2aW5nIGludG8gZXh0NF9mcmVlX2V4dF9wYXRoKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IGBleHQ0X2ZyZWVfZXh0X3BhdGhgIGluIGBmcy9leHQ0L2V4dGVudHMuY2AuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBoYW5kbGluZyBleHRlbnQgZGVhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgd2hlbiBmcmVlaW5nIGJsb2NrcyBhc3NvY2lhdGVkIHdpdGggYW4gZXh0ZW50LWJhc2VkIGZpbGUuIExldCdzIHNlZSBob3cgaXQgb3BlcmF0ZXMuIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGxvZ2ljIGZsb3cgaGVyZS4gSSdsbCBiZSBsb29raW5nIGZvciBob3cgaXQgbmF2aWdhdGVzIHRoZSBleHRlbnQgdHJlZSwgaGFuZGxlcyBkaWZmZXJlbnQgY2FzZXMgKGUuZy4sIHBhcnRpYWwgdnMuIGZ1bGwgZXh0ZW50cyksIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgbWV0YWRhdGEuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuIEkgZXhwZWN0IHRvIGJlIG9ic2VydmluZyB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGlub2RlIGFuZCB0aGUgYmxvY2sgYWxsb2NhdGlvbiBzdHJ1Y3R1cmVzLiBJIHdhbnQgdG8gc2VlIGlmIGl0IG1ha2VzIHVzZSBvZiBhbnkgb3B0aW1pemF0aW9ucy4gSSBuZWVkIHRvIGVuc3VyZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGRlYWxsb2NhdGlvbi4gVGhlcmUgd2lsbCBiZSBsb3RzIHRvIHVucmF2ZWwgaGVyZSwgYnV0IGJ5IHN0YXJ0aW5nIHdpdGggdGhlIGVudHJ5IHBvaW50LCBgZXh0NF9mcmVlX2V4dF9wYXRoYCwgSSBzaG91bGQgaGF2ZSBhIGdvb2QgYmFzZSBmb3IgZnVydGhlciByZXNlYXJjaCwgc3BlY2lmaWNhbGx5IHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZXh0ZW50IHRyZWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOToyOS4wMDA2ODA1MjNaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM3NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvZXh0ZW50cy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyMDpcXHR9XFxuIDEyMTpcXHRcXG4gMTIyOlxcdHZvaWQgZXh0NF9mcmVlX2V4dF9wYXRoKHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoKVxcbiAxMjM6XFx0e1xcbiAxMjQ6XFx0XFx0aWYgKElTX0VSUl9PUl9OVUxMKHBhdGgpKVxcbiAxMjU6XFx0XFx0XFx0cmV0dXJuO1xcbiAxMjY6XFx0XFx0ZXh0NF9leHRfZHJvcF9yZWZzKHBhdGgpO1xcbiAxMjc6XFx0XFx0a2ZyZWUocGF0aCk7XFxuIDEyODpcXHR9XFxuIDEyOTpcXHRcXG4gMTMwOlxcdC8qXFxuIDEzMTpcXHQgKiBNYWtlIHN1cmUgJ2hhbmRsZScgaGFzIGF0IGxlYXN0ICdjaGVja19jcmVkJyBjcmVkaXRzLiBJZiBub3QsIHJlc3RhcnRcXG4gMTMyOlxcdCAqIHRyYW5zYWN0aW9uIHdpdGggJ3Jlc3RhcnRfY3JlZCcgY3JlZGl0cy4gVGhlIGZ1bmN0aW9uIGRyb3BzIGlfZGF0YV9zZW1cXG4gMTMzOlxcdCAqIHdoZW4gcmVzdGFydGluZyB0cmFuc2FjdGlvbiBhbmQgZ2V0cyBpdCBhZnRlciB0cmFuc2FjdGlvbiBpcyByZXN0YXJ0ZWQuXFxuIDEzNDpcXHQgKlxcbiAxMzU6XFx0ICogVGhlIGZ1bmN0aW9uIHJldHVybnMgMCBvbiBzdWNjZXNzLCAxIGlmIHRyYW5zYWN0aW9uIGhhZCB0byBiZSByZXN0YXJ0ZWQsXFxuIDEzNjpcXHQgKiBhbmQgXFx1MDAzYyAwIGluIGNhc2Ugb2YgZmF0YWwgZXJyb3IuXFxuIDEzNzpcXHQgKi9cXG4gMTM4OlxcdGludCBleHQ0X2RhdGFzZW1fZW5zdXJlX2NyZWRpdHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gMTM5OlxcdFxcdFxcdFxcdFxcdGludCBjaGVja19jcmVkLCBpbnQgcmVzdGFydF9jcmVkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOToyOS4wMDEwMjA0OTNaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTU2MjIwMjMxNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHByZXNlbnRlZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDpcblxuKipBbmFseXppbmcgdGhlIGBleHQ0X2ZyZWVfZXh0X3BhdGhgIEltcHJvdmVtZW50KipcblxuT2theSwgc28gYGV4dDRfZnJlZV9leHRfcGF0aGAgaXMgbm93IGhhbmRsaW5nIGBJU19FUlJfT1JfTlVMTChwYXRoKWAgc2FmZWx5LiBHb29kLiBBbHdheXMgYSBnb29kIHByYWN0aWNlIHRvIHByb3RlY3QgYWdhaW5zdCBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgZXJyb3IgY29uZGl0aW9ucy4gRGVmZW5zaXZlIHByb2dyYW1taW5nIGF0IGl0cyBmaW5lc3QuXG5cbk5vdywgbGV0J3MgZGlnIGludG8gdGhlICp3aHkqLiBXaGF0IHdhcyB0aGUgdHJpZ2dlciBmb3IgdGhpcyBjaGFuZ2U/IFdoYXQncyB0aGUgY29udGV4dD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgaXNzdWUgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nLiBUaGlzIGlzbid0IGp1c3QgYSByYW5kb20gY29kZSB0d2VhazsgdGhlcmUgaGFkIHRvIGJlIGEgc3BlY2lmaWMgcHJvYmxlbSwgYSBidWcsIG9yIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuIE15IG5leHQgbW92ZSBpcyBjbGVhcjogSSdsbCBkaXZlIGludG8gdGhlIGdpdCBsb2dzLCB0aGF0J3Mgd2hlcmUgdGhlIHN0b3J5IGxpdmVzLiBJJ2xsIHNlYXJjaCBmb3IgcmVmZXJlbmNlcyB0byBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSBpbnZvbHZlZCBzb21laG93LiBBbHRlcm5hdGl2ZWx5LCBpZiB0aGVyZSB3ZXJlIGFueSBzeXprYWxsZXIgY3Jhc2hlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBhcmVhLCB0aGV5IHdvdWxkIHByb3ZpZGUgY3JpdGljYWwgY2x1ZXMuIFRoaXMgZnVuY3Rpb24gcHJvYmFibHkgd2FzIGludm9sdmVkIGluIHNvbWUga2luZCBvZiBtZW1vcnkgY29ycnVwdGlvbi4gTGV0J3Mgc3RhcnQgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIyNSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTk6NDQuNjIzMDQ3NDE2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEyNzE1NTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0zOTU1PWV4dGVybiB2b2lkIGV4dDRfZXh0X3JlcGxheV9zaHJpbmtfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgZW5kKTtcXG5mcy9leHQ0L2V4dDQuaDozOTU2OmV4dGVybiBpbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL2V4dDQvZXh0NC5oLTM5NTctZXh0ZXJuIGludCBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IHN0YXJ0LFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NjIzND1zdGF0aWMgaW50IHNraXBfaG9sZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCAqY3VyKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNjI1MS0vKiBDb3VudCBudW1iZXIgb2YgYmxvY2tzIHVzZWQgYnkgdGhpcyBpbm9kZSBhbmQgdXBkYXRlIGlfYmxvY2tzICovXFxuZnMvZXh0NC9leHRlbnRzLmM6NjI1MjppbnQgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9leHRlbnRzLmMtNjI1My17XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTkyNT1zdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjAwNS1cXHRpZiAoIWV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSkge1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMDA2OlxcdFxcdHJldCA9IGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2Nrcyhpbm9kZSk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwMDctXFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTk6NDYuMzM1NzY4NTgyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgwMDIwNjI3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHQ0IEZhc3QgQ29tbWl0IEpvdXJuYWwgUmVwbGF5IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCBmdW5jdGlvbi4gQmVmb3JlIHRoZSBwYXRjaCwgaWYgYGV4dDRfbWFwX2Jsb2Nrc2AgZmFpbGVkLCB0aGUgY29kZSB3b3VsZCBzaW1wbHkgYnJlYWsgb3V0IG9mIGl0cyBsb29wLCBwcm9jZWVkIHRvIGNhbGN1bGF0ZSBpbm9kZSBibG9ja3MsIGFuZCBtYXJrIHRoZSBpbm9kZSBkaXJ0eSwgZXZlbiB0aG91Z2ggYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIG1hcHBpbmcuIENydWNpYWxseSwgdGhlIHJldHVybiB2YWx1ZSBvZiBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCB3YXMgKmlnbm9yZWQqIGluIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAuIFRoaXMgbWVhbnQgdGhhdCBhIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIHN0YXRlIGNvdWxkIHBvdGVudGlhbGx5IGJlIHdyaXR0ZW4gdG8gZGlzayBpZiBhIHJlcGxheSBlcnJvciBvY2N1cnJlZC4gVGhpcyBpcy4uLiBub3QgZ29vZC5cblxuVGhlIHBhdGNoIGludHJvZHVjZXMgYSBzaWduaWZpY2FudCBjaGFuZ2U6IG5vdywgYW55IGZhaWx1cmUgZnJvbSBgZXh0NF9tYXBfYmxvY2tzYCwgYHNraXBfaG9sZWAsIG9yIGBleHQ0X2ZpbmRfZXh0ZW50YCByZXN1bHRzIGluIGEganVtcCB0byB0aGUgYGNsZWFudXBgIGxhYmVsLiBBdCBgY2xlYW51cGAsIHRoZSBmdW5jdGlvbiBub3cgKnJldHVybnMqIHRoZSBlcnJvciBjb2RlLCB0aGVyZWJ5IHByb3BhZ2F0aW5nIHRoZSBlcnJvci4gIEluIGBleHQ0X2ZjX3JlcGxheV9pbm9kZWAsIHRoaXMgZXJyb3IgaXMgdGhlbiBjaGVja2VkOiAgYGlmIChyZXQpIGdvdG8gb3V0X2JyZWxzZTtgIG1lYW5pbmcgZXJyb3JzIGFyZSBwcm9wZXJseSBoYW5kbGVkIGFuZCB0aGUgY29ycnVwdGlvbiBpcyBwcmV2ZW50ZWQuIFRoaXMgaXMgYSBjbGVhciBpbXByb3ZlbWVudC5cblxuTm93LCBhIGNyaXRpY2FsIGNvbnNpZGVyYXRpb246IGFyZSB3ZSBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciB3cml0ZXMgd2l0aCB0aGlzIHBhdGNoPyBJIG5lZWQgdG8gdmVyaWZ5LiAgVGhpcyBpcyBmYXN0IGNvbW1pdCBqb3VybmFsIHJlcGxheSBjb2RlLCBydW5uaW5nIGR1cmluZyBtb3VudC9yZWNvdmVyeS4gTm8gZGlyZWN0IHVzZXItc3BhY2UgaW50ZXJhY3Rpb24sIG5vIGlvY3Rscywgbm8gbmV0bGluay4gU28sIHRoYXQncyBvbmUgbGVzcyBhcmVhIG9mIGNvbmNlcm4uXG5cbkxvb2tpbmcgbW9yZSBjbG9zZWx5IGF0IGBleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3NgLCBJIGNhbiBzZWUgYHJldGAgaXMgaW5pdGlhbGl6ZWQsIGFuZCBpbiB0aGUgbG9vcCwgc2V2ZXJhbCBzaXR1YXRpb25zIGNvdWxkIG1ha2UgcmV0IG5lZ2F0aXZlOlxuYHJldCA9IGV4dDRfbWFwX2Jsb2NrcyguLi4pYCBhbmQgdGhlbiBnb3RvIGNsZWFudXAuXG5gcmV0ID0gc2tpcF9ob2xlKC4uLilgIGFuZCB0aGVuIGdvdG8gY2xlYW51cC5cbmBpZiAoSVNfRVJSKHBhdGgpKWAgYW5kIHRoZW4gYHJldCA9IFBUUl9FUlIocGF0aCk7IGdvdG8gY2xlYW51cDtgXG5gaWYgKCFleClgICBhbmQgZ290byBjbGVhbnVwLlxuYGlmIChJU19FUlIocGF0aDIpKWAgYW5kIHRoZW4gYHJldCA9IFBUUl9FUlIocGF0aDIpOyBnb3RvIGNsZWFudXA7YFxuYGNsZWFudXA6YCByZXR1cm5zIHJldC5cblxuSSdtIHNwZWNpZmljYWxseSBmb2N1c2VkIG9uIHRoZSBwb3RlbnRpYWwgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgc3RydWN0IG1lbWJlcnMuIEkgc2VlIGEgYHN0cnVjdCBleHQ0X21hcF9ibG9ja3MgbWFwO2AgbG9jYWwgdmFyaWFibGUgaXMgdXNlZCBhcyBhbiBhcmd1bWVudCB0byBgZXh0NF9tYXBfYmxvY2tzYCwgYW5kIHBhc3NlZCBieSByZWZlcmVuY2UuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBjb250ZW50cyBvZiBgbWFwYCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKmJlZm9yZSogYGV4dDRfbWFwX2Jsb2Nrc2AgaXMgY2FsbGVkLiBBaCwgcmlnaHQuIEkgcmVtZW1iZXIgdGhlIGNvZGUgZG9lcyBpbml0aWFsaXplIGBtYXAubV9sYmxrID0gY3VyOyBtYXAubV9sZW4gPSBlbmQgLSBjdXI7YCBiZWZvcmUgY2FsbGluZyB0aGUgZnVuY3Rpb24uIEFuZCwgYGZsYWdzID0gMGAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIGNvZGUuXG5cblNvLCBpdCAqYXBwZWFycyogdGhlIHBhdGNoIGl0c2VsZiBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGUgcHJpbWFyeSBjaGFuZ2UgaXMgdGhlIHJvYnVzdCBlcnJvciBoYW5kbGluZyBhbmQgcHJvcGFnYXRpb24gb2YgZXJyb3IgY29kZXMuIEl0J3Mgc2FmZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk1NSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTk6NTQuMzM3ODMzNjgyWiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE1MTA0NTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBleHQ0X21hcF9ibG9ja3NcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0zOTIwPWV4dGVybiBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjKGhhbmRsZV90ICpoYW5kbGUsXFxuZnMvZXh0NC9leHQ0LmgtMzkyMS1cXHRcXHRcXHRcXHRcXHQgICAgIGV4dDRfaW9fZW5kX3QgKmlvX2VuZCk7XFxuZnMvZXh0NC9leHQ0Lmg6MzkyMjpleHRlcm4gaW50IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2V4dDQvZXh0NC5oLTM5MjMtXFx0XFx0XFx0ICAgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLCBpbnQgZmxhZ3MpO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTYwNT1pbnQgZXh0NF9tYXBfY3JlYXRlX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTY5OS0gKi9cXG5mcy9leHQ0L2lub2RlLmM6NzAwOmludCBleHQ0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L2lub2RlLmMtNzAxLVxcdFxcdCAgICBzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzICptYXAsIGludCBmbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTk6NTYuNjUyOTQyOTI2WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY4NDg4MDMzMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFcnJvciBIYW5kbGluZyBpbiBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCBhbmQgYGV4dDRfZmNfcmVwbGF5X2lub2RlYCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYG1hcC1cdTAwM2VtX2ZsYWdzID0gMDtgIGlzIGhhbmRsZWQgY29ycmVjdGx5IGluIGBleHQ0X21hcF9ibG9ja3NgLCB3aGljaCBpdCBhcHBlYXJzIHRvIGJlLCByaWdodCBhdCB0aGUgc3RhcnQuIEFuZCBhY3R1YWxseSwgdGhpcyBwYXRjaCBkb2Vzbid0IHNlZW0gdG8gaGF2ZSB0b3VjaGVkIHRoYXQgYXJlYSwgc28gd2UgY2FuIHByb2JhYmx5IG1vdmUgb24uXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IGByZXRgLiBJbiBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYCwgYHJldGAgaXMgaW5pdGlhbGl6ZWQgcHJvcGVybHkg4oCTIGBpbnQgbnVtYmxrcyA9IDAsIGksIHJldCA9IDA7YCDigJMgdGhhdCBzZWVtcyBmaW5lLiBCdXQsIHdoYXQgaGFwcGVucyB3aGVuIHdlIGhpdCB0aGUgYGdvdG8gY2xlYW51cDtgIGNhbGxzPyBXZSd2ZSBnb3QgYSBzZXJpZXMgb2YgcG90ZW50aWFsbHkgZXJyb3Itc2V0dGluZyBibG9ja3MgdGhlcmUuIExldCdzIG1ha2Ugc3VyZS4gVGhlIGByZXRgIHZhcmlhYmxlIGlzIHNldCBoZXJlIG9uIGVycm9yIGZyb20gYW55IG9mIHRoZXNlIGZ1bmN0aW9uczogYGV4dDRfbWFwX2Jsb2Nrc2AsIGBza2lwX2hvbGVgLCBvciBpZiBgcGF0aGAgaXMgYW4gZXJyb3IgcG9pbnRlci4gSXQgYWxzbyBhcHBlYXJzIGl0IGNvdWxkIGJlIDAgaWYgYGV4YCBpcyBudWxsIG9yIGlmIGBwYXRoMmAgaXMgYW4gZXJyb3IgcG9pbnRlci4gVGhlbiwgYXQgdGhlIGNsZWFudXAsIHdlIGZyZWUgdGhlIHBhdGhzLCBhbmQgcmV0dXJuIGByZXRgLiBPa2F5LCBzbyBpdCBzZWVtcyBsaWtlIHRoZSBlcnJvciBjb2RlcyBhcmUgYmVpbmcgcHJvcGFnYXRlZCBjb3JyZWN0bHkgdGhyb3VnaCBgcmV0YC5cblxuTm93LCBtb3Zpbmcgb3ZlciB0byBgZXh0NF9mY19yZXBsYXlfaW5vZGVgLCBgcmV0YCBpcyBhbHNvIGFuIGludGVnZXIsIGRlY2xhcmVkIGludGVybmFsbHksIHNvIHRoYXQncyBnb29kLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGxpbmVzIDE5MjUtMTk1MCBpbiBgZnMvZXh0NC9mYXN0X2NvbW1pdC5jYCB0byBtYWtlIHN1cmUgdGhlcmUncyBubyBzdWJ0bGUgaXNzdWUgdGhlcmUuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIHNwZWNpZmljIGVycm9yIGhhbmRsaW5nIGluIHRoaXMgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NzMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MjA6MDMuNTAxNzQ5MzU4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MDA3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L2Zhc3RfY29tbWl0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkyNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTkyNTpcXHRzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuMTkyNjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZXh0NF9mY190bF9tZW0gKnRsLCB1OCAqdmFsKVxcbjE5Mjc6XFx0e1xcbjE5Mjg6XFx0XFx0c3RydWN0IGV4dDRfZmNfaW5vZGUgZmNfaW5vZGU7XFxuMTkyOTpcXHRcXHRzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlO1xcbjE5MzA6XFx0XFx0c3RydWN0IGV4dDRfaW5vZGUgKnJhd19mY19pbm9kZTtcXG4xOTMxOlxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMO1xcbjE5MzI6XFx0XFx0c3RydWN0IGV4dDRfaWxvYyBpbG9jO1xcbjE5MzM6XFx0XFx0aW50IGlub2RlX2xlbiwgaW5vLCByZXQsIHRhZyA9IHRsLVxcdTAwM2VmY190YWc7XFxuMTkzNDpcXHRcXHRzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyICplaDtcXG4xOTM1OlxcdFxcdHNpemVfdCBvZmZfZ2VuID0gb2Zmc2V0b2Yoc3RydWN0IGV4dDRfaW5vZGUsIGlfZ2VuZXJhdGlvbik7XFxuMTkzNjpcXHRcXG4xOTM3OlxcdFxcdG1lbWNweShcXHUwMDI2ZmNfaW5vZGUsIHZhbCwgc2l6ZW9mKGZjX2lub2RlKSk7XFxuMTkzODpcXHRcXG4xOTM5OlxcdFxcdGlubyA9IGxlMzJfdG9fY3B1KGZjX2lub2RlLmZjX2lubyk7XFxuMTk0MDpcXHRcXHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgdGFnLCBpbm8sIDAsIDApO1xcbjE5NDE6XFx0XFxuMTk0MjpcXHRcXHRpbm9kZSA9IGV4dDRfaWdldChzYiwgaW5vLCBFWFQ0X0lHRVRfTk9STUFMKTtcXG4xOTQzOlxcdFxcdGlmICghSVNfRVJSKGlub2RlKSkge1xcbjE5NDQ6XFx0XFx0XFx0ZXh0NF9leHRfY2xlYXJfYmIoaW5vZGUpO1xcbjE5NDU6XFx0XFx0XFx0aXB1dChpbm9kZSk7XFxuMTk0NjpcXHRcXHR9XFxuMTk0NzpcXHRcXHRpbm9kZSA9IE5VTEw7XFxuMTk0ODpcXHRcXG4xOTQ5OlxcdFxcdHJldCA9IGV4dDRfZmNfcmVjb3JkX21vZGlmaWVkX2lub2RlKHNiLCBpbm8pO1xcbjE5NTA6XFx0XFx0aWYgKHJldClcXG4xOTUxOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE5NTI6XFx0XFxuMTk1MzpcXHRcXHRyYXdfZmNfaW5vZGUgPSAoc3RydWN0IGV4dDRfaW5vZGUgKilcXG4xOTU0OlxcdFxcdFxcdCh2YWwgKyBvZmZzZXRvZihzdHJ1Y3QgZXh0NF9mY19pbm9kZSwgZmNfcmF3X2lub2RlKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjIwOjAzLjUwMjAzMzA2OFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzI2MzM4NzYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBleHQ0IEZhc3QgQ29tbWl0IFJlcGxheSBFcnJvciBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgZW5zdXJpbmcgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgS01TQU4tcmVsZXZhbnQgaXNzdWVzIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgaW4gZXh0NC4gVGhlIHBhdGNoJ3MgY29yZSBmdW5jdGlvbiBpcyB0byBpbXByb3ZlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgZXh0NF9mY19yZXBsYXlfaW5vZGVgIGFuZCBgZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzYC4gQmFzaWNhbGx5LCBpdCdzIG1ha2luZyBzdXJlIGVycm9ycyBkdXJpbmcgYmxvY2sgbWFwcGluZyBhbmQgZXh0ZW50IGxvb2t1cCBhcmUgY29ycmVjdGx5IHByb3BhZ2F0ZWQsIGhhbHRpbmcgdGhlIHJlcGxheSBwcm9jZXNzIGlmIGNvcnJ1cHRpb24gb3Igb3RoZXIgaXNzdWVzIGFyZSBkZXRlY3RlZC4gQmVmb3JlLCB0aGUgY29kZSB3YXMsIGluIHNvbWUgY2FzZXMsIGlnbm9yaW5nIGVycm9ycyBmcm9tIGBleHQ0X2ZpbmRfZXh0ZW50YCwgcHJvY2VlZGluZyB3aXRoIHRoZSByZXBsYXksIGFuZCBwb3RlbnRpYWxseSB3cml0aW5nIGNvcnJ1cHRlZCBpbm9kZSBkYXRhIG9yIGNhdXNpbmcgZG93bnN0cmVhbSBjcmFzaGVzLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlIGFyZW4ndCBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIEkgY2FuIHNlZSB0aGF0OlxuXG4qICAgTm8gbmV3IG1lbW9yeSBidWZmZXJzIGFyZSBiZWluZyBhbGxvY2F0ZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZS5cbiogICBUaGVyZSdzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBiZWluZyByZWFkLlxuKiAgIFdlJ3JlIG5vdCBpbnRyb2R1Y2luZyBhbnkgcGFkZGluZyBsZWFrcyB0byB1c2Vyc3BhY2UuXG4qICAgRXJyb3IgY29kZXMgYXJlIGJlaW5nIGV4cGxpY2l0bHkgY2FwdHVyZWQgKGUuZy4sIGBQVFJfRVJSYCkgYW5kIHByb3BhZ2F0ZWQgdXAgdGhlIGNhbGwgc3RhY2suIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSByZXBsYXkgaXMgYWJvcnRlZCB1cG9uIGRldGVjdGluZyBhIGRpc2sgY29ycnVwdGlvbiBvciBvdGhlciBlcnJvci5cblxuTXkgbmV4dCBsaW5lIG9mIHRob3VnaHQgaXMgd2hldGhlciBvciBub3QgdGhlcmUgd2VyZSBwcmV2aW91c2x5IGlnbm9yZWQgZXJyb3JzLCBsZWFkaW5nIHRvIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBvciBzaW1pbGFyIGlzc3Vlcy4gVGhlIHByZXZpb3VzIGNvZGUgY29udGFpbmVkIGEgYGJyZWFrYCBmcm9tIGFuIGVycm9yIGNhdXNlZCBieSBgZXh0NF9maW5kX2V4dGVudGAuIFRoaXMgYGJyZWFrYCB3YXMgbGVhZGluZyB0byBleGVjdXRpb24gdGhhdCBjYWxsZWQgYGV4dDRfZnJlZV9leHRfcGF0aGAsIGJ1dCBgcGF0aGAgd2FzIGFjdHVhbGx5IGFuIGBFUlJfUFRSYCwgYW5kIHRoZSBjb2RlIGRpZCBub3QgaGFuZGxlIHRoYXQgZXJyb3IgZ3JhY2VmdWxseSB3aGljaCBjb3VsZCBsZWFkIHRvIGZpbGUgc3lzdGVtIGNvcnJ1cHRpb24uIFRoZSBwYXRjaCBmaXhlcyB0aGlzLlxuXG5UbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIGdvIG92ZXIgdGhlIGZvdXIgcG9pbnRzIHdoZXJlIEtNU0FOIG1pZ2h0IGJlIHRyaWdnZXJlZDpcblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlKio6IE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSB2aWEgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIGV0Yy4gVGhpcyBjaGVjayBpcyBwYXNzZWQuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyB3aXRoIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzKio6IFRoZSBwYXRjaCBleHBsaWNpdGx5IGluaXRpYWxpemVzIHRoZSByZXR1cm4gdmFyaWFibGUgKGByZXRgKSBhbmQgdXNlcyBleHBsaWNpdCByZXR1cm4gY29kZXMgYW5kIGNoZWNrcy4gVGhpcyBpcyBwYXNzZWQuXG4zLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24qKjogTm8gbmV3IGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hpY2ggbWF5IGNvbnRhaW4gdW5pbml0aWFsaXplZCBmaWVsZHMgYW5kIHRoYXQgbWlnaHQgYmUgcmVhZCBsYXRlciBvbiByZWFjaGFibGUgY29kZSBwYXRocyBpcyBpbnRyb2R1Y2VkLlxuNC4gICoqQm91bmRzIGNoZWNrcyoqOiBXZSBhcmUgc2FmZSBhcyBubyBuZXcgYm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIHRoYXQgd291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycyBhcmUgaW50cm9kdWNlZC5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGl2ZWx5IGZhbHNlIGhlcmUuXG5cblRvIHN1bW1hcml6ZSBmb3IgdGhlIHJlY29yZCwgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYW4gZXJyb3IgaGFuZGxpbmcgZmxhdyBkdXJpbmcgZXh0NCBmYXN0LWNvbW1pdCByZXBsYXkuIEl0IGVuc3VyZXMgdGhhdCBlcnJvcnMgZnJvbSBmdW5jdGlvbnMgbGlrZSBgZXh0NF9tYXBfYmxvY2tzYCwgYHNraXBfaG9sZWAsIGFuZCBgZXh0NF9maW5kX2V4dGVudGAgYXJlIHByb3Blcmx5IGhhbmRsZWQuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IHRoaXMgbW9kaWZpY2F0aW9uIGRvZXMgKm5vdCogaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvcm1hdGlvbiBsZWFrcywgb3IgYW55IG90aGVyIGNvbmRpdGlvbiB0aGF0IGNvdWxkIHRyaWdnZXIgYSBLTVNBTiBhbGVydC4gU3RhbmRhcmQgbWVtb3J5IHNhZmV0eSB0b29scyBsaWtlIEtBU0FOIGFuZCBlcnJvciBoYW5kbGluZyAocGFuaWNzLCBjb3JydXB0aW9uIHJlcG9ydHMpIGFyZSBhcHByb3ByaWF0ZSBoZXJlLCBJJ20gY29uZmlkZW50IHRoYXQgS01TQU4gaXMgbm90IHJlcXVpcmVkIHRvIGRldGVjdCBidWdzIGluIHRoaXMgcGF0Y2guIEkgd2lsbCBwcm9jZWVkIHdpdGggYSBjbGVhciBjb25zY2llbmNlLiBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg0MCwiT3V0cHV0VG9rZW5zIjoyNTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoyMDoyMC43NjU0MjMxMzlaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGV4dDQgZmFzdC1jb21taXQgcmVwbGF5IGNvZGUgKGV4dDRfZXh0X3JlcGxheV9zZXRfaWJsb2NrcygpIGFuZCBleHQ0X2ZjX3JlcGxheV9pbm9kZSgpKS4gSXQgZW5zdXJlcyB0aGF0IHdoZW4gZXh0NF9tYXBfYmxvY2tzKCksIHNraXBfaG9sZSgpLCBvciBleHQ0X2ZpbmRfZXh0ZW50KCkgZmFpbCwgdGhlIGVycm9yIGNvZGUgaXMgY2FwdHVyZWQsIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSBqdW1wcyB0byBjbGVhbnVwIHdpdGhvdXQgdXBkYXRpbmcgb3IgZGlydHlpbmcgdGhlIGlub2RlLCBhbmQgdGhlIGVycm9yIGlzIHByb3BhZ2F0ZWQgdXAgdGhlIGNhbGwgc3RhY2sgdG8gYWJvcnQgdGhlIHJlcGxheS5cXG5cXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bCwgZXRjLiksIGVsaW1pbmF0aW5nIGFueSByaXNrIG9mIGluZm8tbGVha3MuXFxuLSBObyBuZXcgbWVtb3J5IGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIG9yIGxlZnQgdW5pbml0aWFsaXplZDsgdGhlIG1vZGlmaWVkIGJyYW5jaGluZyByZWxpZXMgc3RyaWN0bHkgb24gcHJvcGVybHkgaW5pdGlhbGl6ZWQvYXNzaWduZWQgcmV0dXJuIHZhbHVlcyBhbmQgZXJyb3IgcG9pbnRlcnMuXFxuLSBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cXG4tIEFueSBidWdzIGNhdXNlZCBieSBjb3JydXB0ZWQgam91cm5hbCByZXBsYXkgKHN1Y2ggYXMgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzKSBmYWxsIHVuZGVyIEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiBleHQ0IGZhc3QtY29tbWl0IHJlcGxheSBjb2RlIChleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoKSBhbmQgZXh0NF9mY19yZXBsYXlfaW5vZGUoKSkuIEl0IGVuc3VyZXMgdGhhdCB3aGVuIGV4dDRfbWFwX2Jsb2NrcygpLCBza2lwX2hvbGUoKSwgb3IgZXh0NF9maW5kX2V4dGVudCgpIGZhaWwsIHRoZSBlcnJvciBjb2RlIGlzIGNhcHR1cmVkLCB0aGUgZnVuY3Rpb24gaW1tZWRpYXRlbHkganVtcHMgdG8gY2xlYW51cCB3aXRob3V0IHVwZGF0aW5nIG9yIGRpcnR5aW5nIHRoZSBpbm9kZSwgYW5kIHRoZSBlcnJvciBpcyBwcm9wYWdhdGVkIHVwIHRoZSBjYWxsIHN0YWNrIHRvIGFib3J0IHRoZSByZXBsYXkuXFxuXFxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcXG4tIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgbmV0bGluaywgaW9jdGwsIGV0Yy4pLCBlbGltaW5hdGluZyBhbnkgcmlzayBvZiBpbmZvLWxlYWtzLlxcbi0gTm8gbmV3IG1lbW9yeSBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBvciBsZWZ0IHVuaW5pdGlhbGl6ZWQ7IHRoZSBtb2RpZmllZCBicmFuY2hpbmcgcmVsaWVzIHN0cmljdGx5IG9uIHByb3Blcmx5IGluaXRpYWxpemVkL2Fzc2lnbmVkIHJldHVybiB2YWx1ZXMgYW5kIGVycm9yIHBvaW50ZXJzLlxcbi0gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXFxuLSBBbnkgYnVncyBjYXVzZWQgYnkgY29ycnVwdGVkIGpvdXJuYWwgcmVwbGF5IChzdWNoIGFzIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcykgZmFsbCB1bmRlciBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucywgbm90IEtNU0FOLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowhr7hw[1] Phase: Succeeded StartedAt: 2026-09-15 02:20:31 +0000 UTC FinishedAt: 2026-09-15 02:20:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhr7hw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-15 02:20:31 +0000 UTC FinishedAt: 2026-09-15 02:20:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhr7hw[2] Phase: Succeeded StartedAt: 2026-09-15 02:20:31 +0000 UTC FinishedAt: 2026-09-15 06:04:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-15 02:20:31 +0000 UTC FinishedAt: 2026-09-15 06:04:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-15 02:20:31 +0000 UTC FinishedAt: 2026-09-15 02:20:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-15 02:20:31 +0000 UTC FinishedAt: 2026-09-15 02:20:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowhr7hw/series-workflowhr7hw-convert-artifact-3015290192/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-15 02:20:41 +0000 UTC FinishedAt: 2026-09-15 02:36:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-15 02:20:41 +0000 UTC FinishedAt: 2026-09-15 02:36:48 +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:*8a4711a9-cec4-4387-b2f4-76edbf00d423,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-workflowhr7hw/series-workflowhr7hw-convert-artifact-3015290192/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": "bf203024-dfcd-42be-b130-31a70d52cc39", "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-workflowhr7hw/series-workflowhr7hw-build-action-4130118614/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-15 02:20:41 +0000 UTC FinishedAt: 2026-09-15 02:36:38 +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:*8a4711a9-cec4-4387-b2f4-76edbf00d423,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-workflowhr7hw/series-workflowhr7hw-convert-artifact-3015290192/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": "bf203024-dfcd-42be-b130-31a70d52cc39", "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-workflowhr7hw/series-workflowhr7hw-build-action-4130118614/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-15 02:36:48 +0000 UTC FinishedAt: 2026-09-15 02:36:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-15 02:36:48 +0000 UTC FinishedAt: 2026-09-15 02:36:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-15 02:36:48 +0000 UTC FinishedAt: 2026-09-15 02:36:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-15 02:36:48 +0000 UTC FinishedAt: 2026-09-15 02:36:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowhr7hw/series-workflowhr7hw-convert-artifact-1156155575/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-15 02:36:58 +0000 UTC FinishedAt: 2026-09-15 02:38:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-15 02:36:58 +0000 UTC FinishedAt: 2026-09-15 02:38:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bf203024-dfcd-42be-b130-31a70d52cc39,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-workflowhr7hw/series-workflowhr7hw-build-action-4130118614/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-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-15 02:38:55 +0000 UTC FinishedAt: 2026-09-15 02:38:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-15 02:38:55 +0000 UTC FinishedAt: 2026-09-15 02:38:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-15 02:38:55 +0000 UTC FinishedAt: 2026-09-15 02:55:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-15 02:38:55 +0000 UTC FinishedAt: 2026-09-15 02:55:09 +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:*8a4711a9-cec4-4387-b2f4-76edbf00d423,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-workflowhr7hw/series-workflowhr7hw-convert-artifact-1156155575/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": "09712726-78a0-45e5-80a7-048ef80441d4", "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-workflowhr7hw/series-workflowhr7hw-build-action-2925324411/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-15 02:38:55 +0000 UTC FinishedAt: 2026-09-15 02:54:59 +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:*8a4711a9-cec4-4387-b2f4-76edbf00d423,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-workflowhr7hw/series-workflowhr7hw-convert-artifact-1156155575/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": "09712726-78a0-45e5-80a7-048ef80441d4", "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-workflowhr7hw/series-workflowhr7hw-build-action-2925324411/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-15 02:55:09 +0000 UTC FinishedAt: 2026-09-15 02:55:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-15 02:55:09 +0000 UTC FinishedAt: 2026-09-15 02:55:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-15 02:55:09 +0000 UTC FinishedAt: 2026-09-15 02:57:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-15 02:55:09 +0000 UTC FinishedAt: 2026-09-15 02:57:01 +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:*09712726-78a0-45e5-80a7-048ef80441d4,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-workflowhr7hw/series-workflowhr7hw-build-action-2925324411/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-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-15 02:57:11 +0000 UTC FinishedAt: 2026-09-15 06:04:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-15 02:57:11 +0000 UTC FinishedAt: 2026-09-15 06:04:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*bf203024-dfcd-42be-b130-31a70d52cc39,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*09712726-78a0-45e5-80a7-048ef80441d4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhr7hw/series-workflowhr7hw-build-action-4130118614/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhr7hw/series-workflowhr7hw-build-action-2925324411/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-15 02:57:11 +0000 UTC FinishedAt: 2026-09-15 02:57:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-15 02:57:11 +0000 UTC FinishedAt: 2026-09-15 02:57:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhr7hw/series-workflowhr7hw-convert-artifact-447609072/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-15 02:57:11 +0000 UTC FinishedAt: 2026-09-15 02:57:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-15 02:57:11 +0000 UTC FinishedAt: 2026-09-15 02:57:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-15 02:57:11 +0000 UTC FinishedAt: 2026-09-15 02:57:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-15 02:57:35 +0000 UTC FinishedAt: 2026-09-15 06:04:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhr7hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_replay_set_iblocks","ext4_fc_replay_inode","ext4_fc_replay"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1a1de54f7369cd2b5bac0f265910e60ad3a6b4c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"c64eef89-8db1-49cf-9819-4d03f8d5236e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-15 02:57:35 +0000 UTC FinishedAt: 2026-09-15 06:04:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bf203024-dfcd-42be-b130-31a70d52cc39,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*09712726-78a0-45e5-80a7-048ef80441d4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhr7hw/series-workflowhr7hw-build-action-4130118614/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhr7hw/series-workflowhr7hw-build-action-2925324411/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhr7hw/series-workflowhr7hw-convert-artifact-447609072/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}