Name: series-workflowgt4k8 Phase: Running StartedAt: 2026-08-17 11:58:55 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgt4k8[0] Phase: Succeeded StartedAt: 2026-08-17 11:58:55 +0000 UTC FinishedAt: 2026-08-17 12:41:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgt4k8[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 11:58:55 +0000 UTC FinishedAt: 2026-08-17 12:41:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "3aa1dcaa4f6f5ae08936491e08bd456f331f2d40", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KASAN", "KASAN_GENERIC", "HOTPLUG_CPU" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "3aa1dcaa4f6f5ae08936491e08bd456f331f2d40", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KASAN", "KASAN_GENERIC", "HOTPLUG_CPU" ], "series_id": "e90b7431-a06c-4cb3-9f54-4ce8f222fe4e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "arch_enter_lazy_mmu_mode", "arch_enter_lazy_mmu_mode_with_ptes", "arch_leave_lazy_mmu_mode", "arch_flush_lazy_mmu_mode", "lazy_mmu_online_cpu", "lazy_mmu_offline_cpu", "__kasan_poison_pte", "__kasan_unpoison_pte", "___ptep_modify_prot_start", "___ptep_modify_prot_commit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tBU0FOJiMzNDssCiAgICAmIzM0O0tBU0FOX0dFTkVSSUMmIzM0OywKICAgICYjMzQ7SE9UUExVR19DUFUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcmNoX2VudGVyX2xhenlfbW11X21vZGUmIzM0OywKICAgICYjMzQ7YXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcyYjMzQ7LAogICAgJiMzNDthcmNoX2xlYXZlX2xhenlfbW11X21vZGUmIzM0OywKICAgICYjMzQ7YXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlJiMzNDssCiAgICAmIzM0O2xhenlfbW11X29ubGluZV9jcHUmIzM0OywKICAgICYjMzQ7bGF6eV9tbXVfb2ZmbGluZV9jcHUmIzM0OywKICAgICYjMzQ7X19rYXNhbl9wb2lzb25fcHRlJiMzNDssCiAgICAmIzM0O19fa2FzYW5fdW5wb2lzb25fcHRlJiMzNDssCiAgICAmIzM0O19fX3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQmIzM0OywKICAgICYjMzQ7X19fcHRlcF9tb2RpZnlfcHJvdF9jb21taXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbGF6eSBNTVUgbW9kZSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIHRvIGJ1ZmZlciBwYWdlIHRhYmxlIGVudHJ5IChQVEUpIHVwZGF0ZXMuIEl0IGFsc28gZXhwbGljaXRseSBhZGRzIEtBU0FOIHBvaXNvbmluZy91bnBvaXNvbmluZyB0byBkZXRlY3QgaW52YWxpZCBkaXJlY3QgYWNjZXNzZXMgdG8gUFRFcyB3aGlsZSB0aGUgbGF6eSBNTVUgbW9kZSBpcyBhY3RpdmUsIGludHJvZHVjaW5nIGEgbmV3IEtBU0FOIGJ1ZyB0eXBlIChgbGF6eS1tbXUtcHRlLWFjY2Vzc2ApLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgdGFibGUgb3BlcmF0aW9ucy4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgYWxsIG5ld2x5IGFsbG9jYXRlZCBzdHJ1Y3R1cmVzIChlLmcuLCBgc3RydWN0IGlwdGVfcmFuZ2VgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGUuZy4sIHZpYSB6ZXJvLWFsbG9jYXRpb24gYW5kIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIG9mIHRoZSBgY2FjaGVgIGFycmF5IHRvIGBQVEVfUE9JU09OYCkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGlzIHBlcmZlY3RseSBzdWl0ZWQgYW5kIGV4cGxpY2l0bHkgZW5oYW5jZWQgYnkgdGhpcyBwYXRjaCB0byBjYXRjaCBhbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbGF6eSBNTVUgbW9kZSBmb3IgczM5MCBhcmNoaXRlY3R1cmUsIHdoaWNoIGJhdGNoZXMgUFRFIGludmFsaWRhdGlvbnMgdXNpbmcgdGhlIElQVEUtcmFuZ2UgZmFjaWxpdHkuIEl0IGhvb2tzIGludG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzeXNjYWxscyAobWFkdmlzZSwgbXByb3RlY3QsIG1yZW1hcCwgdm1hbGxvYykgYW5kIENQVSBob3RwbHVnIHBhdGhzLiBJdCBhbHNvIGFkZHMgS0FTQU4gaW5zdHJ1bWVudGF0aW9uIGZvciBkaXJlY3QgUFRFIGFjY2Vzc2VzIGluIGxhenkgTU1VIG1vZGUuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzNmMxMjY3M2YzNWRkZjJhMTQ3OTExNjRiNWRjZjlkNGMzY2Y1NGMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTI6Mzc6NDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcgYi9hcmNoL3MzOTAvS2NvbmZpZ1xuaW5kZXggODQ0MDRlNjc3OGQ1MC4uNzg0NjMzMmRjZDBhNiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvS2NvbmZpZ1xuQEAgLTk3LDYgJiM0Mzs5Nyw3IEBAIGNvbmZpZyBTMzkwXG4gXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxuIFx0c2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VcbiBcdHNlbGVjdCBBUkNIX0hBU19LQ09WXG4mIzQzO1x0c2VsZWN0IEFSQ0hfSEFTX0xBWllfTU1VX01PREVcbiBcdHNlbGVjdCBBUkNIX0hBU19NRU1CQVJSSUVSX1NZTkNfQ09SRVxuIFx0c2VsZWN0IEFSQ0hfSEFTX01FTV9FTkNSWVBUXG4gXHRzZWxlY3QgQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xhenlfbW11LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbGF6eV9tbXUuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk4MzY2ZTlkZTliYzNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sYXp5X21tdS5oXG5AQCAtMCwwICYjNDM7MSw5IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOyNpZm5kZWYgX19MQVpZX01NVV9IXG4mIzQzOyNkZWZpbmUgX19MQVpZX01NVV9IXG4mIzQzO1xuJiM0Mzt2b2lkIGxhenlfbW11X29ubGluZV9ib290X2NwdSh2b2lkKTtcbiYjNDM7aW50IGxhenlfbW11X29ubGluZV9jcHUoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgY3B1KTtcbiYjNDM7dm9pZCBsYXp5X21tdV9vZmZsaW5lX2NwdSh1bnNpZ25lZCBpbnQgY3B1KTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfX0xBWllfTU1VX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaFxuaW5kZXggM2IzZWNjNjQ3OTkzZi4uZGJhMjM2NjY0ZGE5MCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmhcbkBAIC0xNjMsNyAmIzQzOzE2Myw3IEBAIHN0cnVjdCBsb3djb3JlIHtcbiBcdF9fczMyXHRwcmVlbXB0X2NvdW50O1x0XHRcdC8qIDB4MDNhOCAqL1xuIFx0X191MzJcdHNwaW5sb2NrX2xvY2t2YWw7XHRcdC8qIDB4MDNhYyAqL1xuIFx0X191MzJcdHNwaW5sb2NrX2luZGV4O1x0XHRcdC8qIDB4MDNiMCAqL1xuLVx0X191OFx0cGFkXzB4MDNiNFsweDAzYjgtMHgwM2I0XTtcdC8qIDB4MDNiNCAqL1xuJiM0MztcdF9fczMyXHRsYXp5X21tdV9jb3VudDtcdFx0XHQvKiAweDAzYjQgKi9cbiBcdF9fdTY0XHRwZXJjcHVfb2Zmc2V0O1x0XHRcdC8qIDB4MDNiOCAqL1xuIFx0X191OFx0cGVyY3B1X3JlZ2lzdGVyO1x0XHQvKiAweDAzYzAgKi9cbiBcdF9fdThcdHBhZF8weDAzYzFbMHgwNDAwLTB4MDNjMV07XHQvKiAweDAzYzEgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggODU5Y2U3YzdkNDU0NC4uMWU4YTc5OTg5ZWQ2ZSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC0zOSw2ICYjNDM7MzksNjQgQEAgZW51bSB7XG4gXG4gZXh0ZXJuIGF0b21pY19sb25nX3QgZGlyZWN0X3BhZ2VzX2NvdW50W1BHX0RJUkVDVF9NQVBfTUFYXTtcbiBcbiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgaW50ICpyZXMpO1xuJiM0Mztib29sIF9fbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpO1xuJiM0Mztib29sIF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKTtcbiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IG9sZF9wdGUsIHB0ZV90IHB0ZSk7XG4mIzQzO2Jvb2wgX19sYXp5X21tdV9wdGVwX3NldF93cnByb3RlY3QodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCk7XG4mIzQzO2Jvb2wgX19sYXp5X21tdV9zZXRfcHRlKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpO1xuJiM0Mztib29sIF9fbGF6eV9tbXVfcHRlcF9nZXQocHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpO1xuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX2xhenlfbW11X2FjdGl2ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKF9faXNfZGVmaW5lZChfX0RFQ09NUFJFU1NPUikpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKCFnZXRfbG93Y29yZSgpLVx1MDAzZWxhenlfbW11X2NvdW50KVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lXG4mIzQzO2Jvb2wgbGF6eV9tbXVfcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBpbnQgKnJlcylcbiYjNDM7e1xuJiM0MztcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0cmV0dXJuIF9fbGF6eV9tbXVfcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyhhZGRyLCBwdGVwLCByZXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lXG4mIzQzO2Jvb2wgbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWlzX2xhenlfbW11X2FjdGl2ZSgpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdHJldHVybiBfX2xhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcihhZGRyLCBwdGVwLCByZXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lXG4mIzQzO2Jvb2wgbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRyZXR1cm4gX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X3N0YXJ0KGFkZHIsIHB0ZXAsIHJlcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmVcbiYjNDM7Ym9vbCBsYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxuJiM0MztcdFx0XHRcdCAgICAgIHB0ZV90IG9sZF9wdGUsIHB0ZV90IHB0ZSlcbiYjNDM7e1xuJiM0MztcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0cmV0dXJuIF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoYWRkciwgcHRlcCwgb2xkX3B0ZSwgcHRlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZVxuJiM0Mztib29sIGxhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRyZXR1cm4gX19sYXp5X21tdV9wdGVwX3NldF93cnByb3RlY3QoYWRkciwgcHRlcCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9wYWdlX2NvdW50KGludCBsZXZlbCwgbG9uZyBjb3VudClcbiB7XG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJPQ19GUykpXG5AQCAtOTc4LDE3ICYjNDM7MTAzNiwzOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BtZChwbWRfdCAqcG1kcCwgcG1kX3QgcG1kKVxuIFx0V1JJVEVfT05DRSgqcG1kcCwgcG1kKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSlcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIF9fc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxuIHtcbiBcdGlmIChwdGVfcHJlc2VudChwdGUpKVxuIFx0XHRwdGUgPSBjbGVhcl9wdGVfYml0KHB0ZSwgX19wZ3Byb3QoX1BBR0VfVU5VU0VEKSk7XG4gXHRXUklURV9PTkNFKCpwdGVwLCBwdGUpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSlcbiYjNDM7e1xuJiM0MztcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkgfHwgIV9fbGF6eV9tbXVfc2V0X3B0ZShwdGVwLCBwdGUpKVxuJiM0MztcdFx0X19zZXRfcHRlKHB0ZXAsIHB0ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNkZWZpbmUgcHRlcF9nZXRfbG9ja2xlc3MgcHRlcF9nZXRfbG9ja2xlc3NcbiYjNDM7c3RhdGljIGlubGluZSBfX25vX3Nhbml0aXplX2FkZHJlc3MgcHRlX3QgcHRlcF9nZXRfbG9ja2xlc3MocHRlX3QgKnB0ZXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gUkVBRF9PTkNFKCpwdGVwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBwdGVfdCBfX3B0ZXBfZ2V0KHB0ZV90ICpwdGVwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIFJFQURfT05DRSgqcHRlcCk7XG4mIzQzO31cbiYjNDM7XG4gI2RlZmluZSBwdGVwX2dldCBwdGVwX2dldFxuIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9nZXQocHRlX3QgKnB0ZXApXG4ge1xuLVx0cmV0dXJuIFJFQURfT05DRSgqcHRlcCk7XG4mIzQzO1x0cHRlX3QgcmVzO1xuJiM0MztcbiYjNDM7XHRpZiAoIWlzX2xhenlfbW11X2FjdGl2ZSgpIHx8ICFfX2xhenlfbW11X3B0ZXBfZ2V0KHB0ZXAsIFx1MDAyNnJlcykpXG4mIzQzO1x0XHRyZXMgPSBfX3B0ZXBfZ2V0KHB0ZXApO1xuJiM0MztcdHJldHVybiByZXM7XG4gfVxuIFxuICNkZWZpbmUgcG1kcF9nZXQgcG1kcF9nZXRcbkBAIC0xMTgxLDYgJiM0MzsxMjYwLDE1IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3B0ZXBfaXB0ZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCBucixcbiBcdH0gd2hpbGUgKG5yICE9IDI1NSk7XG4gfVxuIFxuJiM0Mzt2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuJiM0MztcdFx0XHRcdFx0cHRlX3QgKnB0ZSk7XG4mIzQzOyNkZWZpbmUgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcyBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzXG4mIzQzO1xuJiM0Mzt2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSh2b2lkKTtcbiYjNDM7dm9pZCBhcmNoX2xlYXZlX2xhenlfbW11X21vZGUodm9pZCk7XG4mIzQzO3ZvaWQgYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlKHZvaWQpO1xuJiM0MztcbiAvKlxuICAqIFRoaXMgaXMgaGFyZCB0byB1bmRlcnN0YW5kLiBwdGVwX2dldF9hbmRfY2xlYXIgYW5kIHB0ZXBfY2xlYXJfZmx1c2hcbiAgKiBib3RoIGNsZWFyIHRoZSBUTEIgZm9yIHRoZSB1bm1hcHBlZCBwdGUuIFRoZSByZWFzb24gaXMgdGhhdFxuQEAgLTEyMDEsMTAgJiM0MzsxMjg5LDE2IEBAIHB0ZV90IHB0ZXBfeGNoZ19sYXp5KHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKiwgcHRlX3QpO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxuIHtcbi1cdHB0ZV90IHB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xuJiM0MztcdHB0ZV90IHB0ZTtcbiYjNDM7XHRpbnQgcmVzO1xuIFxuLVx0cHRlID0gcHRlcF94Y2hnX2RpcmVjdCh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXAsIHB0ZV9ta29sZChwdGUpKTtcbi1cdHJldHVybiBwdGVfeW91bmcocHRlKTtcbiYjNDM7XHRpZiAoIWxhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoYWRkciwgcHRlcCwgXHUwMDI2cmVzKSkge1xuJiM0MztcdFx0cHRlID0gX19wdGVwX2dldChwdGVwKTtcbiYjNDM7XHRcdHB0ZSA9IHB0ZV9ta29sZChwdGUpO1xuJiM0MztcdFx0cHRlID0gcHRlcF94Y2hnX2RpcmVjdCh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXAsIHB0ZSk7XG4mIzQzO1x0XHRyZXMgPSBwdGVfeW91bmcocHRlKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHJlcztcbiB9XG4gXG4gI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSX1lPVU5HX0ZMVVNIXG5AQCAtMTIyMCw3ICYjNDM7MTMxNCw4IEBAIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIHtcbiBcdHB0ZV90IHJlcztcbiBcbi1cdHJlcyA9IHB0ZXBfeGNoZ19sYXp5KG1tLCBhZGRyLCBwdGVwLCBfX3B0ZShfUEFHRV9JTlZBTElEKSk7XG4mIzQzO1x0aWYgKCFsYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIoYWRkciwgcHRlcCwgXHUwMDI2cmVzKSlcbiYjNDM7XHRcdHJlcyA9IHB0ZXBfeGNoZ19sYXp5KG1tLCBhZGRyLCBwdGVwLCBfX3B0ZShfUEFHRV9JTlZBTElEKSk7XG4gXHRwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcihtbSwgYWRkciwgcmVzKTtcbiBcdC8qIEF0IHRoaXMgcG9pbnQgdGhlIHJlZmVyZW5jZSB0aHJvdWdoIHRoZSBtYXBwaW5nIGlzIHN0aWxsIHByZXNlbnQgKi9cbiBcdGlmIChtbV9pc19wcm90ZWN0ZWQobW0pIFx1MDAyNlx1MDAyNiBwdGVfcHJlc2VudChyZXMpKVxuQEAgLTEyMjksOSAmIzQzOzEzMjQsMjggQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gfVxuIFxuICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9NT0RJRllfUFJPVF9UUkFOU0FDVElPTlxuLXB0ZV90IHB0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHB0ZV90ICopO1xuLXZvaWQgcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsXG4tXHRcdFx0ICAgICBwdGVfdCAqLCBwdGVfdCwgcHRlX3QpO1xuJiM0MztwdGVfdCBfX19wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBwdGVfdCAqKTtcbiYjNDM7dm9pZCBfX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyxcbiYjNDM7XHRcdFx0XHRwdGVfdCAqLCBwdGVfdCwgcHRlX3QpO1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZVxuJiM0MztwdGVfdCBwdGVwX21vZGlmeV9wcm90X3N0YXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiM0MztcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXG4mIzQzO3tcbiYjNDM7XHRwdGVfdCByZXM7XG4mIzQzO1xuJiM0MztcdGlmICghbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydChhZGRyLCBwdGVwLCBcdTAwMjZyZXMpKVxuJiM0MztcdFx0cmVzID0gX19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydCh2bWEsIGFkZHIsIHB0ZXApO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmVcbiYjNDM7dm9pZCBwdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuJiM0MztcdFx0XHQgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWxhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KGFkZHIsIHB0ZXAsIG9sZF9wdGUsIHB0ZSkpXG4mIzQzO1x0XHRfX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdCh2bWEsIGFkZHIsIHB0ZXAsIG9sZF9wdGUsIHB0ZSk7XG4mIzQzO31cbiBcbiAjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfQ0xFQVJfRkxVU0hcbiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5AQCAtMTI2MSwxMSAmIzQzOzEzNzUsMTMgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXJfZnVsbChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiB7XG4gXHRwdGVfdCByZXM7XG4gXG4tXHRpZiAoZnVsbCkge1xuLVx0XHRyZXMgPSBwdGVwX2dldChwdGVwKTtcbi1cdFx0c2V0X3B0ZShwdGVwLCBfX3B0ZShfUEFHRV9JTlZBTElEKSk7XG4tXHR9IGVsc2Uge1xuLVx0XHRyZXMgPSBwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpO1xuJiM0MztcdGlmICghbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKGFkZHIsIHB0ZXAsIFx1MDAyNnJlcykpIHtcbiYjNDM7XHRcdGlmIChmdWxsKSB7XG4mIzQzO1x0XHRcdHJlcyA9IF9fcHRlcF9nZXQocHRlcCk7XG4mIzQzO1x0XHRcdF9fc2V0X3B0ZShwdGVwLCBfX3B0ZShfUEFHRV9JTlZBTElEKSk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRyZXMgPSBwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpO1xuJiM0MztcdFx0fVxuIFx0fVxuIFx0cGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXIobW0sIGFkZHIsIHJlcyk7XG4gXHQvKiBBdCB0aGlzIHBvaW50IHRoZSByZWZlcmVuY2UgdGhyb3VnaCB0aGUgbWFwcGluZyBpcyBzdGlsbCBwcmVzZW50ICovXG5AQCAtMTI5MSwxMCAmIzQzOzE0MDcsMTUgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXJfZnVsbChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBzdGF0aWMgaW5saW5lIHZvaWQgcHRlcF9zZXRfd3Jwcm90ZWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcbiB7XG4tXHRwdGVfdCBwdGUgPSBwdGVwX2dldChwdGVwKTtcbiYjNDM7XHRwdGVfdCBwdGU7XG4gXG4tXHRpZiAocHRlX3dyaXRlKHB0ZSkpXG4tXHRcdHB0ZXBfeGNoZ19sYXp5KG1tLCBhZGRyLCBwdGVwLCBwdGVfd3Jwcm90ZWN0KHB0ZSkpO1xuJiM0MztcdGlmICghbGF6eV9tbXVfcHRlcF9zZXRfd3Jwcm90ZWN0KGFkZHIsIHB0ZXApKSB7XG4mIzQzO1x0XHRwdGUgPSBfX3B0ZXBfZ2V0KHB0ZXApO1xuJiM0MztcdFx0aWYgKHB0ZV93cml0ZShwdGUpKSB7XG4mIzQzO1x0XHRcdHB0ZSA9IHB0ZV93cnByb3RlY3QocHRlKTtcbiYjNDM7XHRcdFx0cHRlcF94Y2hnX2xhenkobW0sIGFkZHIsIHB0ZXAsIHB0ZSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIH1cbiBcbiAvKlxuQEAgLTEzMjcsNyAmIzQzOzE0NDgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2ZpeF9zcHVyaW91c19mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdCAqIFBURSBkb2VzIG5vdCBoYXZlIF9QQUdFX1BST1RFQ1Qgc2V0LCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBvdmVyaGVhZC5cbiBcdCAqIEEgbG9jYWwgUkRQIGNhbiBiZSB1c2VkIHRvIGRvIHRoZSBmbHVzaC5cbiBcdCAqL1xuLVx0aWYgKGNwdV9oYXNfcmRwKCkgXHUwMDI2XHUwMDI2ICEocHRlX3ZhbChwdGVwX2dldChwdGVwKSkgXHUwMDI2IF9QQUdFX1BST1RFQ1QpKVxuJiM0MztcdGlmIChjcHVfaGFzX3JkcCgpIFx1MDAyNlx1MDAyNiAhKHB0ZV92YWwoX19wdGVwX2dldChwdGVwKSkgXHUwMDI2IF9QQUdFX1BST1RFQ1QpKVxuIFx0XHRfX3B0ZXBfcmRwKGFkZHJlc3MsIHB0ZXAsIDEpO1xuIH1cbiAjZGVmaW5lIGZsdXNoX3RsYl9maXhfc3B1cmlvdXNfZmF1bHQgZmx1c2hfdGxiX2ZpeF9zcHVyaW91c19mYXVsdFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuY1xuaW5kZXggYjYwMjg0MzI4ZmUzZC4uZjVhM2M5ZTFiNmI4OCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jXG5AQCAtNzcsNiAmIzQzOzc3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vbWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3V2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vYXNtLW9mZnNldHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20vbGF6eV9tbXUuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2VudHJ5LmhcJiMzNDtcbiBcbiAvKlxuQEAgLTEwMTIsNSAmIzQzOzEwMTMsNiBAQCB2b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXG4gXG4gdm9pZCBfX2luaXQgYXJjaF9jcHVfZmluYWxpemVfaW5pdCh2b2lkKVxuIHtcbiYjNDM7XHRsYXp5X21tdV9vbmxpbmVfYm9vdF9jcHUoKTtcbiBcdHNjbHBfaW5pdCgpO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuY1xuaW5kZXggMGJhN2Y4OWI4MTYxMS4uMGE4MjZiYmFmMWRkYyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmNcbkBAIC01OSw2ICYjNDM7NTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS90b3BvbG9neS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Zkc28uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9tYWNjZXNzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL2xhenlfbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtlbnRyeS5oXCYjMzQ7XG4gXG4gZW51bSB7XG5AQCAtODY2LDYgJiM0Mzs4NjcsMTEgQEAgaW50IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGlkbGUpXG4gXHRyYyA9IHBjcHVfYWxsb2NfbG93Y29yZShwY3B1LCBjcHUpO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG4mIzQzO1x0cmMgPSBsYXp5X21tdV9vbmxpbmVfY3B1KEdGUF9LRVJORUwsIGNwdSk7XG4mIzQzO1x0aWYgKHJjKSB7XG4mIzQzO1x0XHRwY3B1X2ZyZWVfbG93Y29yZShwY3B1LCBjcHUpO1xuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcdH1cbiBcdC8qXG4gXHQgKiBNYWtlIHN1cmUgZ2xvYmFsIGNvbnRyb2wgcmVnaXN0ZXIgY29udGVudHMgZG8gbm90IGNoYW5nZVxuIFx0ICogdW50aWwgbmV3IENQVSBoYXMgaW5pdGlhbGl6ZWQgY29udHJvbCByZWdpc3RlcnMuXG5AQCAtOTIxLDYgJiM0Mzs5MjcsNyBAQCB2b2lkIF9fY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KVxuIFx0cGNwdSA9IHBlcl9jcHVfcHRyKFx1MDAyNnBjcHVfZGV2aWNlcywgY3B1KTtcbiBcdHdoaWxlICghcGNwdV9zdG9wcGVkKHBjcHUpKVxuIFx0XHRjcHVfcmVsYXgoKTtcbiYjNDM7XHRsYXp5X21tdV9vZmZsaW5lX2NwdShjcHUpO1xuIFx0cGNwdV9mcmVlX2xvd2NvcmUocGNwdSwgY3B1KTtcbiBcdGNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbW1fY3B1bWFzayhcdTAwMjZpbml0X21tKSk7XG4gXHRjcHVtYXNrX2NsZWFyX2NwdShjcHUsIFx1MDAyNmluaXRfbW0uY29udGV4dC5jcHVfYXR0YWNoX21hc2spO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9NYWtlZmlsZSBiL2FyY2gvczM5MC9tbS9NYWtlZmlsZVxuaW5kZXggMTkzODk5YzM5Y2E3Zi4uOTZjYWMzZTk5ZjUxNiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9tbS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL21tL01ha2VmaWxlXG5AQCAtNCw2ICYjNDM7NCw3IEBAXG4gI1xuIFxuIG9iai15XHRcdDo9IGluaXQubyBmYXVsdC5vIGV4dG1lbS5vIG1tYXAubyB2bWVtLm8gbWFjY2Vzcy5vXG4mIzQzO29iai15XHRcdDo9IGluaXQubyBmYXVsdC5vIGV4dG1lbS5vIG1tYXAubyB2bWVtLm8gbWFjY2Vzcy5vIGxhenlfbW11Lm9cbiBvYmoteVx0XHQmIzQzOz0gcGFnZS1zdGF0ZXMubyBwYWdlYXR0ci5vIHBndGFibGUubyBwZ2FsbG9jLm8gZXh0YWJsZS5vXG4gXG4gb2JqLSQoQ09ORklHX0NNTSlcdFx0JiM0Mzs9IGNtbS5vXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2xhenlfbW11LmMgYi9hcmNoL3MzOTAvbW0vbGF6eV9tbXUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdlM2E0MTE1ZWEwNDhcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9sYXp5X21tdS5jXG5AQCAtMCwwICYjNDM7MSw0MTggQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGd0YWJsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2thc2FuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9mYWNpbGl0eS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9sYXp5X21tdS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2t1bml0L3Zpc2liaWxpdHkuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBQVEVfUE9JU09OXHRfUEFHRV9MQVJHRVxuJiM0MztcbiYjNDM7c3RydWN0IGlwdGVfcmFuZ2Uge1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYmFzZV9lbmQ7XG4mIzQzO1x0cHRlX3QgKmJhc2VfcHRlO1xuJiM0MztcdHB0ZV90ICpzdGFydF9wdGU7XG4mIzQzO1x0cHRlX3QgKmVuZF9wdGU7XG4mIzQzO1x0cHRlX3QgY2FjaGVbUFRSU19QRVJfUFRFXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgaXB0ZV9yYW5nZSAqLCBpcHRlX3JhbmdlKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgY291bnRfY29udGlndW91cyhwdGVfdCAqc3RhcnQsIHB0ZV90ICplbmQsIGJvb2wgKnZhbGlkKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwYWdlX2ludmFsaWRfYml0O1xuJiM0MztcdHB0ZV90ICpwdGVwLCBwdGU7XG4mIzQzO1xuJiM0MztcdHB0ZSA9IF9fcHRlcF9nZXQoc3RhcnQpO1xuJiM0MztcdHBhZ2VfaW52YWxpZF9iaXQgPSBwdGVfdmFsKHB0ZSkgXHUwMDI2IF9QQUdFX0lOVkFMSUQ7XG4mIzQzO1xuJiM0MztcdGZvciAocHRlcCA9IHN0YXJ0ICYjNDM7IDE7IHB0ZXAgXHUwMDNjIGVuZDsgcHRlcCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHB0ZSA9IF9fcHRlcF9nZXQocHRlcCk7XG4mIzQzO1x0XHRpZiAoKHB0ZV92YWwocHRlKSBcdTAwMjYgX1BBR0VfSU5WQUxJRCkgIT0gcGFnZV9pbnZhbGlkX2JpdClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqdmFsaWQgPSAhKHBhZ2VfaW52YWxpZF9iaXQpO1xuJiM0MztcdHJldHVybiBwdGVwIC0gc3RhcnQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIF9faW52YWxpZGF0ZV9wdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdFx0XHQgICBpbnQgbnJfcHRlcywgcHRlX3QgKnB0ZXApXG4mIzQzO3tcbiYjNDM7XHRhdG9taWNfaW5jKFx1MDAyNm1tLVx1MDAzZWNvbnRleHQuZmx1c2hfY291bnQpO1xuJiM0MztcdGlmIChjcHVfaGFzX3RsYl9sYygpIFx1MDAyNlx1MDAyNiBjcHVtYXNrX2VxdWFsKG1tX2NwdW1hc2sobW0pLCBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSkpKVxuJiM0MztcdFx0X19wdGVwX2lwdGVfcmFuZ2UoYWRkciwgbnJfcHRlcyAtIDEsIHB0ZXAsIElQVEVfTE9DQUwpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdF9fcHRlcF9pcHRlX3JhbmdlKGFkZHIsIG5yX3B0ZXMgLSAxLCBwdGVwLCBJUFRFX0dMT0JBTCk7XG4mIzQzO1x0YXRvbWljX2RlYyhcdTAwMjZtbS1cdTAwM2Vjb250ZXh0LmZsdXNoX2NvdW50KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBpbnZhbGlkYXRlX3B0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuJiM0MztcdFx0XHRcdHB0ZV90ICpzdGFydCwgcHRlX3QgKmVuZClcbiYjNDM7e1xuJiM0MztcdGludCBucl9wdGVzO1xuJiM0MztcdGJvb2wgdmFsaWQ7XG4mIzQzO1xuJiM0MztcdG5yX3B0ZXMgPSBjb3VudF9jb250aWd1b3VzKHN0YXJ0LCBlbmQsIFx1MDAyNnZhbGlkKTtcbiYjNDM7XHRpZiAodmFsaWQpXG4mIzQzO1x0XHRfX2ludmFsaWRhdGVfcHRlX3JhbmdlKG1tLCBhZGRyLCBucl9wdGVzLCBzdGFydCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBucl9wdGVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzZXRfcHRlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4mIzQzO1x0XHRcdCAgcHRlX3QgKnN0YXJ0LCBwdGVfdCAqZW5kLCBwdGVfdCAqY2FjaGUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgbnJfcHRlcywgbnJfdG90YWwgPSBlbmQgLSBzdGFydDtcbiYjNDM7XHRwdGVfdCAqcHRlcCA9IHN0YXJ0O1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRrYXNhbl91bnBvaXNvbl9wdGUoc3RhcnQsIG5yX3RvdGFsKTtcbiYjNDM7XHR3aGlsZSAocHRlcCBcdTAwM2MgZW5kKSB7XG4mIzQzO1x0XHRucl9wdGVzID0gaW52YWxpZGF0ZV9wdGVfcmFuZ2UobW0sIGFkZHIsIHB0ZXAsIGVuZCk7XG4mIzQzO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcHRlczsgaSYjNDM7JiM0MzssIHB0ZXAmIzQzOyYjNDM7LCBjYWNoZSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0X19zZXRfcHRlKHB0ZXAsICpjYWNoZSk7XG4mIzQzO1x0XHRcdCpjYWNoZSA9IF9fcHRlKFBURV9QT0lTT04pO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGFkZHIgJiM0Mzs9IG5yX3B0ZXMgKiBQQUdFX1NJWkU7XG4mIzQzO1x0fVxuJiM0MztcdGthc2FuX3BvaXNvbl9wdGUoc3RhcnQsIG5yX3RvdGFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW50ZXJfaXB0ZV9ub3JhbmdlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaXB0ZV9yYW5nZSBfX21heWJlX3VudXNlZCAqcmFuZ2U7XG4mIzQzO1xuJiM0MztcdGlmICghdGVzdF9mYWNpbGl0eSgxMykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiYjNDM7XG4mIzQzO1x0cmFuZ2UgPSBnZXRfY3B1X3ZhcihpcHRlX3JhbmdlKTtcbiYjNDM7XHRnZXRfbG93Y29yZSgpLVx1MDAzZWxhenlfbW11X2NvdW50JiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0bG9jYWxfYmhfZW5hYmxlKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGVudGVyX2lwdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4mIzQzO1x0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgcHRlX3QgKnB0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbnJfcHRlcztcbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2ZhY2lsaXR5KDEzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuJiM0MztcbiYjNDM7XHRyYW5nZSA9IGdldF9jcHVfdmFyKGlwdGVfcmFuZ2UpO1xuJiM0MztcdGdldF9sb3djb3JlKCktXHUwMDNlbGF6eV9tbXVfY291bnQmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRpZiAobW1faXNfcHJvdGVjdGVkKG1tKSkge1xuJiM0MztcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYW5nZS1cdTAwM2VtbSA9IG1tO1xuJiM0MztcdHJhbmdlLVx1MDAzZWJhc2VfYWRkciA9IGFkZHI7XG4mIzQzO1x0cmFuZ2UtXHUwMDNlYmFzZV9lbmQgPSBlbmQ7XG4mIzQzO1x0cmFuZ2UtXHUwMDNlYmFzZV9wdGUgPSBwdGU7XG4mIzQzO1xuJiM0MztcdG5yX3B0ZXMgPSAocmFuZ2UtXHUwMDNlYmFzZV9lbmQgLSByYW5nZS1cdTAwM2ViYXNlX2FkZHIpIC8gUEFHRV9TSVpFO1xuJiM0MztcdGthc2FuX3BvaXNvbl9wdGUocmFuZ2UtXHUwMDNlYmFzZV9wdGUsIG5yX3B0ZXMpO1xuJiM0MztcbiYjNDM7XHRsb2NhbF9iaF9lbmFibGUoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbGVhdmVfaXB0ZV9yYW5nZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cHRlX3QgKnB0ZXAsICpzdGFydCwgKnN0YXJ0X2NhY2hlLCAqY2FjaGU7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzdGFydF9hZGRyLCBhZGRyO1xuJiM0MztcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbnJfcHRlcztcbiYjNDM7XHRpbnQgc3RhcnRfaWR4O1xuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X3ByZWVtcHRpb25fZGlzYWJsZWQoKTtcbiYjNDM7XHRyYW5nZSA9IHRoaXNfY3B1X3JlYWQoaXB0ZV9yYW5nZSk7XG4mIzQzO1x0aWYgKCFyYW5nZS1cdTAwM2VtbSlcbiYjNDM7XHRcdGdvdG8gbm9yYW5nZTtcbiYjNDM7XHRpZiAoIXJhbmdlLVx1MDAzZXN0YXJ0X3B0ZSlcbiYjNDM7XHRcdGdvdG8gZG9uZTtcbiYjNDM7XG4mIzQzO1x0c3RhcnQgPSByYW5nZS1cdTAwM2VzdGFydF9wdGU7XG4mIzQzO1x0c3RhcnRfaWR4ID0gcmFuZ2UtXHUwMDNlc3RhcnRfcHRlIC0gcmFuZ2UtXHUwMDNlYmFzZV9wdGU7XG4mIzQzO1x0c3RhcnRfYWRkciA9IHJhbmdlLVx1MDAzZWJhc2VfYWRkciAmIzQzOyBzdGFydF9pZHggKiBQQUdFX1NJWkU7XG4mIzQzO1x0YWRkciA9IHN0YXJ0X2FkZHI7XG4mIzQzO1x0c3RhcnRfY2FjaGUgPSBcdTAwMjZyYW5nZS1cdTAwM2VjYWNoZVtzdGFydF9pZHhdO1xuJiM0MztcdGNhY2hlID0gc3RhcnRfY2FjaGU7XG4mIzQzO1x0Zm9yIChwdGVwID0gc3RhcnQ7IHB0ZXAgXHUwMDNjIHJhbmdlLVx1MDAzZWVuZF9wdGU7IHB0ZXAmIzQzOyYjNDM7LCBjYWNoZSYjNDM7JiM0MzssIGFkZHIgJiM0Mzs9IFBBR0VfU0laRSkge1xuJiM0MztcdFx0aWYgKHB0ZV92YWwoKmNhY2hlKSA9PSBQVEVfUE9JU09OKSB7XG4mIzQzO1x0XHRcdGlmIChzdGFydCkge1xuJiM0MztcdFx0XHRcdHNldF9wdGVfcmFuZ2UocmFuZ2UtXHUwMDNlbW0sIHN0YXJ0X2FkZHIsIHN0YXJ0LCBwdGVwLCBzdGFydF9jYWNoZSk7XG4mIzQzO1x0XHRcdFx0c3RhcnQgPSBOVUxMO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9IGVsc2UgaWYgKCFzdGFydCkge1xuJiM0MztcdFx0XHRzdGFydCA9IHB0ZXA7XG4mIzQzO1x0XHRcdHN0YXJ0X2FkZHIgPSBhZGRyO1xuJiM0MztcdFx0XHRzdGFydF9jYWNoZSA9IGNhY2hlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRzZXRfcHRlX3JhbmdlKHJhbmdlLVx1MDAzZW1tLCBzdGFydF9hZGRyLCBzdGFydCwgcHRlcCwgc3RhcnRfY2FjaGUpO1xuJiM0MztcbiYjNDM7XHRyYW5nZS1cdTAwM2VzdGFydF9wdGUgPSBOVUxMO1xuJiM0MztcdHJhbmdlLVx1MDAzZWVuZF9wdGUgPSBOVUxMO1xuJiM0MztcbiYjNDM7ZG9uZTpcbiYjNDM7XHRucl9wdGVzID0gKHJhbmdlLVx1MDAzZWJhc2VfZW5kIC0gcmFuZ2UtXHUwMDNlYmFzZV9hZGRyKSAvIFBBR0VfU0laRTtcbiYjNDM7XHRrYXNhbl91bnBvaXNvbl9wdGUocmFuZ2UtXHUwMDNlYmFzZV9wdGUsIG5yX3B0ZXMpO1xuJiM0MztcbiYjNDM7XHRyYW5nZS1cdTAwM2VtbSA9IE5VTEw7XG4mIzQzO1x0cmFuZ2UtXHUwMDNlYmFzZV9hZGRyID0gMDtcbiYjNDM7XHRyYW5nZS1cdTAwM2ViYXNlX2VuZCA9IDA7XG4mIzQzO1x0cmFuZ2UtXHUwMDNlYmFzZV9wdGUgPSBOVUxMO1xuJiM0MztcbiYjNDM7bm9yYW5nZTpcbiYjNDM7XHRnZXRfbG93Y29yZSgpLVx1MDAzZWxhenlfbW11X2NvdW50LS07XG4mIzQzO1x0cHV0X2NwdV92YXIoaXB0ZV9yYW5nZSk7XG4mIzQzO1xuJiM0MztcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBmbHVzaF9sYXp5X21tdV9tb2RlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGFkZHIsIGVuZDtcbiYjNDM7XHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4mIzQzO1x0cHRlX3QgKnB0ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2ZhY2lsaXR5KDEzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cmFuZ2UgPSBnZXRfY3B1X3ZhcihpcHRlX3JhbmdlKTtcbiYjNDM7XHRpZiAocmFuZ2UtXHUwMDNlbW0pIHtcbiYjNDM7XHRcdG1tID0gcmFuZ2UtXHUwMDNlbW07XG4mIzQzO1x0XHRhZGRyID0gcmFuZ2UtXHUwMDNlYmFzZV9hZGRyO1xuJiM0MztcdFx0ZW5kID0gcmFuZ2UtXHUwMDNlYmFzZV9lbmQ7XG4mIzQzO1x0XHRwdGUgPSByYW5nZS1cdTAwM2ViYXNlX3B0ZTtcbiYjNDM7XG4mIzQzO1x0XHRsZWF2ZV9pcHRlX3JhbmdlKCk7XG4mIzQzO1x0XHRlbnRlcl9pcHRlX3JhbmdlKG1tLCBhZGRyLCBlbmQsIHB0ZSk7XG4mIzQzO1x0fVxuJiM0MztcdHB1dF9jcHVfdmFyKGlwdGVfcmFuZ2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0ZW50ZXJfaXB0ZV9ub3JhbmdlKCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9JRl9LVU5JVChhcmNoX2VudGVyX2xhenlfbW11X21vZGUpO1xuJiM0MztcbiYjNDM7dm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuJiM0MztcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiYjNDM7XHRcdFx0XHRcdHB0ZV90ICpwdGUpXG4mIzQzO3tcbiYjNDM7XHRlbnRlcl9pcHRlX3JhbmdlKG1tLCBhZGRyLCBlbmQsIHB0ZSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9JRl9LVU5JVChhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKTtcbiYjNDM7XG4mIzQzO3ZvaWQgYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRsZWF2ZV9pcHRlX3JhbmdlKCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9JRl9LVU5JVChhcmNoX2xlYXZlX2xhenlfbW11X21vZGUpO1xuJiM0MztcbiYjNDM7dm9pZCBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUodm9pZClcbiYjNDM7e1xuJiM0MztcdGZsdXNoX2xhenlfbW11X21vZGUoKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGFyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZSk7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2UsIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaWR4ID0gcHRlcCAtIHJhbmdlLVx1MDAzZWJhc2VfcHRlO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9wcmVlbXB0aW9uX2Rpc2FibGVkKCk7XG4mIzQzO1x0cmFuZ2UtXHUwMDNlY2FjaGVbaWR4XSA9IHB0ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyYW5nZS1cdTAwM2VzdGFydF9wdGUpIHtcbiYjNDM7XHRcdHJhbmdlLVx1MDAzZXN0YXJ0X3B0ZSA9IHB0ZXA7XG4mIzQzO1x0XHRyYW5nZS1cdTAwM2VlbmRfcHRlID0gcHRlcCAmIzQzOyAxO1xuJiM0MztcdH0gZWxzZSBpZiAocHRlcCBcdTAwM2MgcmFuZ2UtXHUwMDNlc3RhcnRfcHRlKSB7XG4mIzQzO1x0XHRyYW5nZS1cdTAwM2VzdGFydF9wdGUgPSBwdGVwO1xuJiM0MztcdH0gZWxzZSBpZiAocHRlcCAmIzQzOyAxIFx1MDAzZSByYW5nZS1cdTAwM2VlbmRfcHRlKSB7XG4mIzQzO1x0XHRyYW5nZS1cdTAwM2VlbmRfcHRlID0gcHRlcCAmIzQzOyAxO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHB0ZV90IF9faXB0ZV9yYW5nZV9wdGVwX2dldChzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2UsIHB0ZV90ICpwdGVwKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGlkeCA9IHB0ZXAgLSByYW5nZS1cdTAwM2ViYXNlX3B0ZTtcbiYjNDM7XHRwdGVfdCBwdGU7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X3ByZWVtcHRpb25fZGlzYWJsZWQoKTtcbiYjNDM7XHRpZiAocHRlX3ZhbChyYW5nZS1cdTAwM2VjYWNoZVtpZHhdKSA9PSBQVEVfUE9JU09OKSB7XG4mIzQzO1x0XHRrYXNhbl91bnBvaXNvbl9wdGUocHRlcCwgMSk7XG4mIzQzO1x0XHRwdGUgPSBfX3B0ZXBfZ2V0KHB0ZXApO1xuJiM0MztcdFx0a2FzYW5fcG9pc29uX3B0ZShwdGVwLCAxKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gcHRlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJhbmdlLVx1MDAzZWNhY2hlW2lkeF07XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgaXB0ZV9yYW5nZSAqdGhpc19pcHRlX3JhbmdlKHB0ZV90ICpwdGVwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xuJiM0MztcdHVuc2lnbmVkIGludCBucl9wdGVzO1xuJiM0MztcbiYjNDM7XHRyYW5nZSA9IHRoaXNfY3B1X3JlYWQoaXB0ZV9yYW5nZSk7XG4mIzQzO1x0aWYgKHB0ZXAgXHUwMDNjIHJhbmdlLVx1MDAzZWJhc2VfcHRlKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0bnJfcHRlcyA9IChyYW5nZS1cdTAwM2ViYXNlX2VuZCAtIHJhbmdlLVx1MDAzZWJhc2VfYWRkcikgLyBQQUdFX1NJWkU7XG4mIzQzO1x0aWYgKHB0ZXAgXHUwMDNlPSByYW5nZS1cdTAwM2ViYXNlX3B0ZSAmIzQzOyBucl9wdGVzKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHJldHVybiByYW5nZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Ym9vbCBfX2xhenlfbW11X3NldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcbiYjNDM7XG4mIzQzO1x0cmFuZ2UgPSB0aGlzX2lwdGVfcmFuZ2UocHRlcCk7XG4mIzQzO1x0aWYgKCFyYW5nZSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0X19pcHRlX3JhbmdlX3NldF9wdGUocmFuZ2UsIHB0ZXAsIHB0ZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztib29sIF9fbGF6eV9tbXVfcHRlcF9nZXQocHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XG4mIzQzO1xuJiM0MztcdHJhbmdlID0gdGhpc19pcHRlX3JhbmdlKHB0ZXApO1xuJiM0MztcdGlmICghcmFuZ2UpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdCpyZXMgPSBfX2lwdGVfcmFuZ2VfcHRlcF9nZXQocmFuZ2UsIHB0ZXApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgaW50ICpyZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XG4mIzQzO1x0cHRlX3QgcHRlLCBvbGQ7XG4mIzQzO1xuJiM0MztcdHJhbmdlID0gdGhpc19pcHRlX3JhbmdlKHB0ZXApO1xuJiM0MztcdGlmICghcmFuZ2UpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG9sZCA9IF9faXB0ZV9yYW5nZV9wdGVwX2dldChyYW5nZSwgcHRlcCk7XG4mIzQzO1x0cHRlID0gcHRlX21rb2xkKG9sZCk7XG4mIzQzO1x0X19pcHRlX3JhbmdlX3NldF9wdGUocmFuZ2UsIHB0ZXAsIHB0ZSk7XG4mIzQzO1x0KnJlcyA9IHB0ZV95b3VuZyhvbGQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcih1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xuJiM0MztcdHB0ZV90IHB0ZSwgb2xkO1xuJiM0MztcbiYjNDM7XHRyYW5nZSA9IHRoaXNfaXB0ZV9yYW5nZShwdGVwKTtcbiYjNDM7XHRpZiAoIXJhbmdlKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRvbGQgPSBfX2lwdGVfcmFuZ2VfcHRlcF9nZXQocmFuZ2UsIHB0ZXApO1xuJiM0MztcdHB0ZSA9IF9fcHRlKF9QQUdFX0lOVkFMSUQpO1xuJiM0MztcdF9faXB0ZV9yYW5nZV9zZXRfcHRlKHJhbmdlLCBwdGVwLCBwdGUpO1xuJiM0MztcdCpyZXMgPSBvbGQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztib29sIF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKGFkZHIsIHB0ZXAsIHJlcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2Jvb2wgX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxuJiM0MztcdFx0XHRcdFx0cHRlX3Qgb2xkX3B0ZSwgcHRlX3QgcHRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xuJiM0MztcbiYjNDM7XHRyYW5nZSA9IHRoaXNfaXB0ZV9yYW5nZShwdGVwKTtcbiYjNDM7XHRpZiAoIXJhbmdlKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2Jvb2wgX19sYXp5X21tdV9wdGVwX3NldF93cnByb3RlY3QodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcbiYjNDM7XHRwdGVfdCBwdGU7XG4mIzQzO1xuJiM0MztcdHJhbmdlID0gdGhpc19pcHRlX3JhbmdlKHB0ZXApO1xuJiM0MztcdGlmICghcmFuZ2UpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHB0ZSA9IF9faXB0ZV9yYW5nZV9wdGVwX2dldChyYW5nZSwgcHRlcCk7XG4mIzQzO1x0aWYgKHB0ZV93cml0ZShwdGUpKSB7XG4mIzQzO1x0XHRwdGUgPSBwdGVfd3Jwcm90ZWN0KHB0ZSk7XG4mIzQzO1x0XHRfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbGF6eV9tbXVfb25saW5lX2NwdShnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmICghdGVzdF9mYWNpbGl0eSgxMykpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmFuZ2UgPSBremFsbG9jX29iaigqcmFuZ2UsIGdmcCk7XG4mIzQzO1x0aWYgKCFyYW5nZSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocmFuZ2UtXHUwMDNlY2FjaGUpOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHJhbmdlLVx1MDAzZWNhY2hlW2ldID0gX19wdGUoUFRFX1BPSVNPTik7XG4mIzQzO1x0cGVyX2NwdShpcHRlX3JhbmdlLCBjcHUpID0gcmFuZ2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGxhenlfbW11X29mZmxpbmVfY3B1KHVuc2lnbmVkIGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XG4mIzQzO1xuJiM0MztcdGlmICghdGVzdF9mYWNpbGl0eSgxMykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJhbmdlID0gcGVyX2NwdShpcHRlX3JhbmdlLCBjcHUpO1xuJiM0MztcdHBlcl9jcHUoaXB0ZV9yYW5nZSwgY3B1KSA9IE5VTEw7XG4mIzQzO1x0a2ZyZWUocmFuZ2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIF9faW5pdCBsYXp5X21tdV9vbmxpbmVfYm9vdF9jcHUodm9pZClcbiYjNDM7e1xuJiM0MztcdGxhenlfbW11X29ubGluZV9jcHUoR0ZQX0FUT01JQywgMCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jIGIvYXJjaC9zMzkwL21tL3BndGFibGUuY1xuaW5kZXggNGFjZDhiMTQwYzRiZC4uZGYzNjUyM2JjYmJiYiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmNcbkBAIC0xNjYsMTQgJiM0MzsxNjYsMTQgQEAgcHRlX3QgcHRlcF94Y2hnX2xhenkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiB9XG4gRVhQT1JUX1NZTUJPTChwdGVwX3hjaGdfbGF6eSk7XG4gXG4tcHRlX3QgcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdCAgICAgcHRlX3QgKnB0ZXApXG4mIzQzO3B0ZV90IF9fX3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdFx0XHRwdGVfdCAqcHRlcClcbiB7XG4gXHRyZXR1cm4gcHRlcF9mbHVzaF9sYXp5KHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgcHRlcCwgMSk7XG4gfVxuIFxuLXZvaWQgcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHQgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpXG4mIzQzO3ZvaWQgX19fcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdFx0XHRwdGVfdCAqcHRlcCwgcHRlX3Qgb2xkX3B0ZSwgcHRlX3QgcHRlKVxuIHtcbiBcdHNldF9wdGUocHRlcCwgcHRlKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jXG5pbmRleCAyMjlkMWZjM2Q3ZjFjLi45MTY3ODVjM2IyZTBiIDEwMDY0NFxuLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9wcm9jL3Rhc2tfbW11LmNcbkBAIC0yODUyLDcgJiM0MzsyODUyLDcgQEAgc3RhdGljIGludCBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbiYjNDM7XHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXModm1hLVx1MDAzZXZtX21tLCBzdGFydCwgZW5kLCBzdGFydF9wdGUpO1xuIFxuIFx0aWYgKChwLVx1MDAzZWFyZy5mbGFncyBcdTAwMjYgUE1fU0NBTl9XUF9NQVRDSElORykgXHUwMDI2XHUwMDI2ICFwLVx1MDAzZXZlY19vdXQpIHtcbiBcdFx0LyogRmFzdCBwYXRoIGZvciBwZXJmb3JtaW5nIGV4Y2x1c2l2ZSBXUCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2FzYW4uaCBiL2luY2x1ZGUvbGludXgva2FzYW4uaFxuaW5kZXggYmYyMzNiZGU2OGM3ZS4uMWFhNGQ5ZGQyNDg1YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva2FzYW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rYXNhbi5oXG5AQCAtNiw2ICYjNDM7Niw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2FzYW4tZW5hYmxlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2FzYW4tdGFncy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGd0YWJsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RhdGljX2tleS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuQEAgLTM1LDggJiM0MzszNiw2IEBAIHR5cGVkZWYgdW5zaWduZWQgaW50IF9fYml0d2lzZSBrYXNhbl92bWFsbG9jX2ZsYWdzX3Q7XG4gXG4gI2lmIGRlZmluZWQoQ09ORklHX0tBU0FOX0dFTkVSSUMpIHx8IGRlZmluZWQoQ09ORklHX0tBU0FOX1NXX1RBR1MpXG4gXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvcGd0YWJsZS5oXHUwMDNlXG4tXG4gLyogU29mdHdhcmUgS0FTQU4gaW1wbGVtZW50YXRpb25zIHVzZSBzaGFkb3cgbWVtb3J5LiAqL1xuIFxuICNpZmRlZiBDT05GSUdfS0FTQU5fU1dfVEFHU1xuQEAgLTEzNCw2ICYjNDM7MTMzLDIwIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcdFx0X19rYXNhbl9wb2lzb25fc2xhYihzbGFiKTtcbiB9XG4gXG4mIzQzO3ZvaWQgX19rYXNhbl9wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucik7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucilcbiYjNDM7e1xuJiM0MztcdGlmIChrYXNhbl9lbmFibGVkKCkpXG4mIzQzO1x0XHRfX2thc2FuX3BvaXNvbl9wdGUocHRlLCBucik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgX19rYXNhbl91bnBvaXNvbl9wdGUocHRlX3QgKnB0ZSwgaW50IG5yKTtcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGthc2FuX3VucG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpXG4mIzQzO3tcbiYjNDM7XHRpZiAoa2FzYW5fZW5hYmxlZCgpKVxuJiM0MztcdFx0X19rYXNhbl91bnBvaXNvbl9wdGUocHRlLCBucik7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBfX2thc2FuX3VucG9pc29uX25ld19vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB2b2lkICpvYmplY3QpO1xuIC8qKlxuICAqIGthc2FuX3VucG9pc29uX25ld19vYmplY3QgLSBUZW1wb3JhcmlseSB1bnBvaXNvbiBhIG5ldyBzbGFiIG9iamVjdC5cbkBAIC00MTQsNiAmIzQzOzQyNyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrYXNhbl91bnBvaXNvbl9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBzdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fcG9pc29uX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIpIHt9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucikge31cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGthc2FuX3VucG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGthc2FuX3VucG9pc29uX25ld19vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLFxuIFx0XHRcdFx0XHR2b2lkICpvYmplY3QpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGthc2FuX3BvaXNvbl9uZXdfb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaCBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG5pbmRleCAyOTgxZTM4NmRhN2IzLi5jYzg1ZGFmMzA3MzllIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG5AQCAtMjcxLDYgJiM0MzsyNzEsNTAgQEAgc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfZW5hYmxlKHZvaWQpXG4gXHRcdGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSgpO1xuIH1cbiBcbiYjNDM7I2lmbmRlZiBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgcHRlX3QgKnB0ZXApXG4mIzQzO3tcbiYjNDM7XHRhcmNoX2VudGVyX2xhenlfbW11X21vZGUoKTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMoKSAtIEVuYWJsZSB0aGUgbGF6eSBNTVUgbW9kZSB3aXRoIGEgc3BlZWR1cCBoaW50LlxuJiM0MzsgKiBAbW06IEFkZHJlc3Mgc3BhY2UgdGhlIHBhZ2VzIGFyZSBtYXBwZWQgaW50by5cbiYjNDM7ICogQGFkZHI6IFN0YXJ0IGFkZHJlc3Mgb2YgdGhlIHJhbmdlLlxuJiM0MzsgKiBAZW5kOiBFbmQgYWRkcmVzcyBvZiB0aGUgcmFuZ2UuXG4mIzQzOyAqIEBwdGVwOiBQYWdlIHRhYmxlIHBvaW50ZXIgZm9yIHRoZSBmaXJzdCBlbnRyeS5cbiYjNDM7ICpcbiYjNDM7ICogRW50ZXJzIGEgbmV3IGxhenkgTU1VIG1vZGUgc2VjdGlvbjsgaWYgdGhlIG1vZGUgd2FzIG5vdCBhbHJlYWR5IGVuYWJsZWQsXG4mIzQzOyAqIGVuYWJsZXMgaXQgYW5kIGNhbGxzIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMoKS5cbiYjNDM7ICpcbiYjNDM7ICogUFRFcyB0aGF0IGZhbGwgd2l0aGluIHRoZSBzcGVjaWZpZWQgcmFuZ2UgbWlnaHQgb2JzZXJ2ZSB1cGRhdGUgc3BlZWR1cHMuXG4mIzQzOyAqIFRoZSBQVEVzIG11c3QgYmVsb25nIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBzcGFjZSBhbmQgYmUgaW4gdGhlIHNhbWUgUE1ELlxuJiM0MzsgKlxuJiM0MzsgKiBUaGVyZSBhcmUgbm8gcmVxdWlyZW1lbnRzIG9uIHRoZSBvcmRlciBvciByYW5nZSBjb21wbGV0ZW5lc3Mgb2YgUFRFXG4mIzQzOyAqIHVwZGF0ZXMgZm9yIHRoZSBzcGVjaWZpZWQgcmFuZ2UuXG4mIzQzOyAqXG4mIzQzOyAqIE11c3QgYmUgcGFpcmVkIHdpdGggYSBjYWxsIHRvIGxhenlfbW11X21vZGVfZGlzYWJsZSgpLlxuJiM0MzsgKlxuJiM0MzsgKiBIYXMgbm8gZWZmZWN0IGlmIGNhbGxlZDpcbiYjNDM7ICogLSBXaGlsZSBwYXVzZWQgLSBzZWUgbGF6eV9tbXVfbW9kZV9wYXVzZSgpXG4mIzQzOyAqIC0gSW4gaW50ZXJydXB0IGNvbnRleHRcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBwdGVfdCAqcHRlcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBsYXp5X21tdV9zdGF0ZSAqc3RhdGUgPSBcdTAwMjZjdXJyZW50LVx1MDAzZWxhenlfbW11X3N0YXRlO1xuJiM0MztcbiYjNDM7XHRpZiAoaW5faW50ZXJydXB0KCkgfHwgc3RhdGUtXHUwMDNlcGF1c2VfY291bnQgXHUwMDNlIDApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdFZNX1dBUk5fT05fT05DRShzdGF0ZS1cdTAwM2VlbmFibGVfY291bnQgPT0gVThfTUFYKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHN0YXRlLVx1MDAzZWVuYWJsZV9jb3VudCYjNDM7JiM0MzsgPT0gMClcbiYjNDM7XHRcdGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgcHRlcCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCkgLSBEaXNhYmxlIHRoZSBsYXp5IE1NVSBtb2RlLlxuICAqXG5AQCAtMzg3LDYgJiM0Mzs0MzEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9yZXN1bWUodm9pZClcbiB9XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9lbmFibGUodm9pZCkge31cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHB0ZV90ICpwdGVwKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBsYXp5X21tdV9tb2RlX2Rpc2FibGUodm9pZCkge31cbiBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9wYXVzZSh2b2lkKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBsYXp5X21tdV9tb2RlX3Jlc3VtZSh2b2lkKSB7fVxuZGlmZiAtLWdpdCBhL21tL2thc2FuL2NvbW1vbi5jIGIvbW0va2FzYW4vY29tbW9uLmNcbmluZGV4IGI3ZDA1YzJhNmQ5M2QuLjk0ZDEwNjA5NDk4OTEgMTAwNjQ0XG4tLS0gYS9tbS9rYXNhbi9jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0va2FzYW4vY29tbW9uLmNcbkBAIC0xNjMsNiAmIzQzOzE2MywyMCBAQCB2b2lkIF9fa2FzYW5fcG9pc29uX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIpXG4gXHRcdCAgICAgS0FTQU5fU0xBQl9SRURaT05FLCBmYWxzZSk7XG4gfVxuIFxuJiM0Mzt2b2lkIF9fa2FzYW5fcG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpXG4mIzQzO3tcbiYjNDM7XHRpZiAoSVNfQUxJR05FRChzaXplb2YoKnB0ZSksIEtBU0FOX0dSQU5VTEVfU0laRSkpXG4mIzQzO1x0XHRrYXNhbl9wb2lzb24ocHRlLCBzaXplb2YoKnB0ZSkgKiBuciwgS0FTQU5fTEFaWV9NTVVfUFRFLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoX19rYXNhbl9wb2lzb25fcHRlKTtcbiYjNDM7XG4mIzQzO3ZvaWQgX19rYXNhbl91bnBvaXNvbl9wdGUocHRlX3QgKnB0ZSwgaW50IG5yKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKElTX0FMSUdORUQoc2l6ZW9mKCpwdGUpLCBLQVNBTl9HUkFOVUxFX1NJWkUpKVxuJiM0MztcdFx0a2FzYW5fdW5wb2lzb24ocHRlLCBzaXplb2YoKnB0ZSkgKiBuciwgZmFsc2UpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKF9fa2FzYW5fdW5wb2lzb25fcHRlKTtcbiYjNDM7XG4gdm9pZCBfX2thc2FuX3VucG9pc29uX25ld19vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB2b2lkICpvYmplY3QpXG4ge1xuIFx0a2FzYW5fdW5wb2lzb24ob2JqZWN0LCBjYWNoZS1cdTAwM2VvYmplY3Rfc2l6ZSwgZmFsc2UpO1xuZGlmZiAtLWdpdCBhL21tL2thc2FuL2thc2FuLmggYi9tbS9rYXNhbi9rYXNhbi5oXG5pbmRleCBmYzkxNjlhNTQ3NjYyLi4xYTJkMThjZGIyMWQ5IDEwMDY0NFxuLS0tIGEvbW0va2FzYW4va2FzYW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0va2FzYW4va2FzYW4uaFxuQEAgLTE0NCwxMiAmIzQzOzE0NCwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wga2FzYW5fcmVxdWlyZXNfbWV0YSh2b2lkKVxuICNkZWZpbmUgS0FTQU5fUEFHRV9SRURaT05FXHQweEZFICAvKiByZWR6b25lIGZvciBrbWFsbG9jX2xhcmdlIGFsbG9jYXRpb24gKi9cbiAjZGVmaW5lIEtBU0FOX1NMQUJfUkVEWk9ORVx0MHhGQyAgLyogcmVkem9uZSBmb3Igc2xhYiBvYmplY3QgKi9cbiAjZGVmaW5lIEtBU0FOX1NMQUJfRlJFRVx0XHQweEZCICAvKiBmcmVlZCBzbGFiIG9iamVjdCAqL1xuJiM0MzsjZGVmaW5lIEtBU0FOX0xBWllfTU1VX1BURVx0MHhGRCAgLyogZGlyZWN0IHB0ZSBhY2Nlc3MgaW4gbGF6eSBtbXUgbW9kZSAqL1xuICNkZWZpbmUgS0FTQU5fVk1BTExPQ19JTlZBTElEXHQweEY4ICAvKiBpbmFjY2Vzc2libGUgc3BhY2UgaW4gdm1hcCBhcmVhICovXG4gI2Vsc2VcbiAjZGVmaW5lIEtBU0FOX1BBR0VfRlJFRVx0XHRLQVNBTl9UQUdfSU5WQUxJRFxuICNkZWZpbmUgS0FTQU5fUEFHRV9SRURaT05FXHRLQVNBTl9UQUdfSU5WQUxJRFxuICNkZWZpbmUgS0FTQU5fU0xBQl9SRURaT05FXHRLQVNBTl9UQUdfSU5WQUxJRFxuICNkZWZpbmUgS0FTQU5fU0xBQl9GUkVFXHRcdEtBU0FOX1RBR19JTlZBTElEXG4mIzQzOyNkZWZpbmUgS0FTQU5fTEFaWV9NTVVfUFRFXHRLQVNBTl9UQUdfSU5WQUxJRFxuICNkZWZpbmUgS0FTQU5fVk1BTExPQ19JTlZBTElEXHRLQVNBTl9UQUdfSU5WQUxJRCAvKiBvbmx5IHVzZWQgZm9yIFNXX1RBR1MgKi9cbiAjZW5kaWZcbiBcbmRpZmYgLS1naXQgYS9tbS9rYXNhbi9yZXBvcnRfZ2VuZXJpYy5jIGIvbW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuY1xuaW5kZXggZjViOGUzN2IzODA1Yy4uNDg5ZDRhOGQ2OTAyZCAxMDA2NDRcbi0tLSBhL21tL2thc2FuL3JlcG9ydF9nZW5lcmljLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2thc2FuL3JlcG9ydF9nZW5lcmljLmNcbkBAIC0xMTMsNiAmIzQzOzExMyw5IEBAIHN0YXRpYyBjb25zdCBjaGFyICpnZXRfc2hhZG93X2J1Z190eXBlKHN0cnVjdCBrYXNhbl9yZXBvcnRfaW5mbyAqaW5mbylcbiBcdGNhc2UgS0FTQU5fU0xBQl9GUkVFX01FVEE6XG4gXHRcdGJ1Z190eXBlID0gXCYjMzQ7c2xhYi11c2UtYWZ0ZXItZnJlZVwmIzM0OztcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBLQVNBTl9MQVpZX01NVV9QVEU6XG4mIzQzO1x0XHRidWdfdHlwZSA9IFwmIzM0O2xhenktbW11LXB0ZS1hY2Nlc3NcJiMzNDs7XG4mIzQzO1x0XHRicmVhaztcbiBcdGNhc2UgS0FTQU5fQUxMT0NBX0xFRlQ6XG4gXHRjYXNlIEtBU0FOX0FMTE9DQV9SSUdIVDpcbiBcdFx0YnVnX3R5cGUgPSBcJiMzNDthbGxvY2Etb3V0LW9mLWJvdW5kc1wmIzM0OztcbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcbmluZGV4IDc3NTUyYjAzZDMxOGQuLjQ0MTlkMTZiMzlmOTYgMTAwNjQ0XG4tLS0gYS9tbS9tYWR2aXNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21hZHZpc2UuY1xuQEAgLTQ1Miw3ICYjNDM7NDUyLDcgQEAgc3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcbiBcdGlmICghc3RhcnRfcHRlKVxuIFx0XHRyZXR1cm4gMDtcbiBcdGZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pO1xuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbiYjNDM7XHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgc3RhcnRfcHRlKTtcbiBcdGZvciAoOyBhZGRyIFx1MDAzYyBlbmQ7IHB0ZSAmIzQzOz0gbnIsIGFkZHIgJiM0Mzs9IG5yICogUEFHRV9TSVpFKSB7XG4gXHRcdG5yID0gMTtcbiBcdFx0cHRlbnQgPSBwdGVwX2dldChwdGUpO1xuQEAgLTUwNyw3ICYjNDM7NTA3LDcgQEAgc3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcbiBcdFx0XHRcdGlmICghc3RhcnRfcHRlKVxuIFx0XHRcdFx0XHRicmVhaztcbiBcdFx0XHRcdGZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pO1xuLVx0XHRcdFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbiYjNDM7XHRcdFx0XHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgc3RhcnRfcHRlKTtcbiBcdFx0XHRcdGlmICghZXJyKVxuIFx0XHRcdFx0XHRuciA9IDA7XG4gXHRcdFx0XHRjb250aW51ZTtcbkBAIC02NzQsNyAmIzQzOzY3NCw3IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRpZiAoIXN0YXJ0X3B0ZSlcbiBcdFx0cmV0dXJuIDA7XG4gXHRmbHVzaF90bGJfYmF0Y2hlZF9wZW5kaW5nKG1tKTtcbi1cdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4mIzQzO1x0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIHN0YXJ0X3B0ZSk7XG4gXHRmb3IgKDsgYWRkciAhPSBlbmQ7IHB0ZSAmIzQzOz0gbnIsIGFkZHIgJiM0Mzs9IFBBR0VfU0laRSAqIG5yKSB7XG4gXHRcdG5yID0gMTtcbiBcdFx0cHRlbnQgPSBwdGVwX2dldChwdGUpO1xuQEAgLTczNCw3ICYjNDM7NzM0LDcgQEAgc3RhdGljIGludCBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRcdGlmICghc3RhcnRfcHRlKVxuIFx0XHRcdFx0XHRicmVhaztcbiBcdFx0XHRcdGZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pO1xuLVx0XHRcdFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbiYjNDM7XHRcdFx0XHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgcHRlKTtcbiBcdFx0XHRcdGlmICghZXJyKVxuIFx0XHRcdFx0XHRuciA9IDA7XG4gXHRcdFx0XHRjb250aW51ZTtcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA2YjgyODBjZmMxZGJlLi4wY2MwN2IwNDMzODRiIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jXG5AQCAtMTI3Miw3ICYjNDM7MTI3Miw3IEBAIGNvcHlfcHRlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hLFxuIFx0c3Bpbl9sb2NrX25lc3RlZChzcmNfcHRsLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4gXHRvcmlnX3NyY19wdGUgPSBzcmNfcHRlO1xuIFx0b3JpZ19kc3RfcHRlID0gZHN0X3B0ZTtcbi1cdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4mIzQzO1x0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKHNyY19tbSwgYWRkciwgZW5kLCBzcmNfcHRlKTtcbiBcbiBcdGRvIHtcbiBcdFx0bnIgPSAxO1xuQEAgLTE5MjIsNyAmIzQzOzE5MjIsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB6YXBfcHRlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4gXHRcdHJldHVybiBhZGRyO1xuIFxuIFx0Zmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyhtbSk7XG4tXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuJiM0MztcdGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgYWRkciwgZW5kLCBzdGFydF9wdGUpO1xuIFx0ZG8ge1xuIFx0XHRib29sIGFueV9za2lwcGVkID0gZmFsc2U7XG4gXG5AQCAtMjkxOSw3ICYjNDM7MjkxOSw3IEBAIHN0YXRpYyBpbnQgcmVtYXBfcHRlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxuIFx0bWFwcGVkX3B0ZSA9IHB0ZSA9IHB0ZV9hbGxvY19tYXBfbG9jayhtbSwgcG1kLCBhZGRyLCBcdTAwMjZwdGwpO1xuIFx0aWYgKCFwdGUpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbiYjNDM7XHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgbWFwcGVkX3B0ZSk7XG4gXHRkbyB7XG4gXHRcdEJVR19PTighcHRlX25vbmUocHRlcF9nZXQocHRlKSkpO1xuIFx0XHRpZiAoIXBmbl9tb2RpZnlfYWxsb3dlZChwZm4sIHByb3QpKSB7XG5AQCAtMzMzMCw3ICYjNDM7MzMzMCw3IEBAIHN0YXRpYyBpbnQgYXBwbHlfdG9fcHRlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbiYjNDM7XHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgbWFwcGVkX3B0ZSk7XG4gXG4gXHRpZiAoZm4pIHtcbiBcdFx0ZG8ge1xuZGlmZiAtLWdpdCBhL21tL21wcm90ZWN0LmMgYi9tbS9tcHJvdGVjdC5jXG5pbmRleCA5Y2JmOTMyYjAyOGNmLi4zZmMyNjQxOGU4MzdkIDEwMDY0NFxuLS0tIGEvbW0vbXByb3RlY3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbXByb3RlY3QuY1xuQEAgLTMzNyw3ICYjNDM7MzM3LDcgQEAgc3RhdGljIGxvbmcgY2hhbmdlX3B0ZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuIFx0XHRpc19wcml2YXRlX3NpbmdsZV90aHJlYWRlZCA9IHZtYV9pc19zaW5nbGVfdGhyZWFkZWRfcHJpdmF0ZSh2bWEpO1xuIFxuIFx0Zmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyh2bWEtXHUwMDNldm1fbW0pO1xuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbiYjNDM7XHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXModm1hLVx1MDAzZXZtX21tLCBhZGRyLCBlbmQsIHB0ZSk7XG4gXHRkbyB7XG4gXHRcdG5yX3B0ZXMgPSAxO1xuIFx0XHRvbGRwdGUgPSBwdGVwX2dldChwdGUpO1xuZGlmZiAtLWdpdCBhL21tL21yZW1hcC5jIGIvbW0vbXJlbWFwLmNcbmluZGV4IGU5YzhiMWQwNTgzMmIuLjBkZmUzZGUzOWNjYzcgMTAwNjQ0XG4tLS0gYS9tbS9tcmVtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbXJlbWFwLmNcbkBAIC0yNjAsNyAmIzQzOzI2MCw3IEBAIHN0YXRpYyBpbnQgbW92ZV9wdGVzKHN0cnVjdCBwYWdldGFibGVfbW92ZV9jb250cm9sICpwbWMsXG4gXHRpZiAobmV3X3B0bCAhPSBvbGRfcHRsKVxuIFx0XHRzcGluX2xvY2tfbmVzdGVkKG5ld19wdGwsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbiBcdGZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcodm1hLVx1MDAzZXZtX21tKTtcbi1cdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4mIzQzO1x0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBvbGRfYWRkciwgb2xkX2VuZCwgb2xkX3B0ZXApO1xuIFxuIFx0Zm9yICg7IG9sZF9hZGRyIFx1MDAzYyBvbGRfZW5kOyBvbGRfcHRlcCAmIzQzOz0gbnJfcHRlcywgb2xkX2FkZHIgJiM0Mzs9IG5yX3B0ZXMgKiBQQUdFX1NJWkUsXG4gXHRcdG5ld19wdGVwICYjNDM7PSBucl9wdGVzLCBuZXdfYWRkciAmIzQzOz0gbnJfcHRlcyAqIFBBR0VfU0laRSkge1xuZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuY1xuaW5kZXggZjRmYTIyN2E4ZDdmMC4uMWM2ZWY4ZmQwNzllMCAxMDA2NDRcbi0tLSBhL21tL3ZtYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hbGxvYy5jXG5AQCAtMTA5LDcgJiM0MzsxMDksNyBAQCBzdGF0aWMgaW50IHZtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRpZiAoIXB0ZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuJiM0MztcdGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhcdTAwMjZpbml0X21tLCBhZGRyLCBlbmQsIHB0ZSk7XG4gXG4gXHRkbyB7XG4gXHRcdGlmICh1bmxpa2VseSghcHRlX25vbmUocHRlcF9nZXQocHRlKSkpKSB7XG5AQCAtMzkzLDcgJiM0MzszOTMsNyBAQCBzdGF0aWMgdm9pZCB2dW5tYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHR1bnNpZ25lZCBsb25nIHNpemUgPSBQQUdFX1NJWkU7XG4gXG4gXHRwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHIpO1xuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbiYjNDM7XHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMoXHUwMDI2aW5pdF9tbSwgYWRkciwgZW5kLCBwdGUpO1xuIFxuIFx0ZG8ge1xuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5AQCAtNTYwLDcgJiM0Mzs1NjAsNyBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGlmICghcHRlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4mIzQzO1x0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKFx1MDAyNmluaXRfbW0sIGFkZHIsIGVuZCwgcHRlKTtcbiBcbiBcdGRvIHtcbiBcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwYWdlc1sqbnJdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLQVNBTiYjMzQ7LAogICAgJiMzNDtLQVNBTl9HRU5FUklDJiMzNDssCiAgICAmIzM0O0hPVFBMVUdfQ1BVJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlJiMzNDssCiAgICAmIzM0O2FyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMmIzM0OywKICAgICYjMzQ7YXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlJiMzNDssCiAgICAmIzM0O2FyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZSYjMzQ7LAogICAgJiMzNDtsYXp5X21tdV9vbmxpbmVfY3B1JiMzNDssCiAgICAmIzM0O2xhenlfbW11X29mZmxpbmVfY3B1JiMzNDssCiAgICAmIzM0O19fa2FzYW5fcG9pc29uX3B0ZSYjMzQ7LAogICAgJiMzNDtfX2thc2FuX3VucG9pc29uX3B0ZSYjMzQ7LAogICAgJiMzNDtfX19wdGVwX21vZGlmeV9wcm90X3N0YXJ0JiMzNDssCiAgICAmIzM0O19fX3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbGF6eSBNTVUgbW9kZSBmb3IgczM5MCBhcmNoaXRlY3R1cmUsIHdoaWNoIGJhdGNoZXMgUFRFIGludmFsaWRhdGlvbnMgdXNpbmcgdGhlIElQVEUtcmFuZ2UgZmFjaWxpdHkuIEl0IGhvb2tzIGludG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzeXNjYWxscyAobWFkdmlzZSwgbXByb3RlY3QsIG1yZW1hcCwgdm1hbGxvYykgYW5kIENQVSBob3RwbHVnIHBhdGhzLiBJdCBhbHNvIGFkZHMgS0FTQU4gaW5zdHJ1bWVudGF0aW9uIGZvciBkaXJlY3QgUFRFIGFjY2Vzc2VzIGluIGxhenkgTU1VIG1vZGUuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNmMxMjY3M2YzNWRkZjJhMTQ3OTExNjRiNWRjZjlkNGMzY2Y1NGMyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMTI6Mzc6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IDg0NDA0ZTY3NzhkNTAuLjc4NDYzMzJkY2QwYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9LY29uZmlnCkBAIC05Nyw2ICYjNDM7OTcsNyBAQCBjb25maWcgUzM5MAogCXNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMCiAJc2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0UKIAlzZWxlY3QgQVJDSF9IQVNfS0NPVgomIzQzOwlzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERQogCXNlbGVjdCBBUkNIX0hBU19NRU1CQVJSSUVSX1NZTkNfQ09SRQogCXNlbGVjdCBBUkNIX0hBU19NRU1fRU5DUllQVAogCXNlbGVjdCBBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sYXp5X21tdS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xhenlfbW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uOTgzNjZlOWRlOWJjMwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sYXp5X21tdS5oCkBAIC0wLDAgJiM0MzsxLDkgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOyNpZm5kZWYgX19MQVpZX01NVV9ICiYjNDM7I2RlZmluZSBfX0xBWllfTU1VX0gKJiM0MzsKJiM0Mzt2b2lkIGxhenlfbW11X29ubGluZV9ib290X2NwdSh2b2lkKTsKJiM0MztpbnQgbGF6eV9tbXVfb25saW5lX2NwdShnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBjcHUpOwomIzQzO3ZvaWQgbGF6eV9tbXVfb2ZmbGluZV9jcHUodW5zaWduZWQgaW50IGNwdSk7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9fTEFaWV9NTVVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmgKaW5kZXggM2IzZWNjNjQ3OTkzZi4uZGJhMjM2NjY0ZGE5MCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oCkBAIC0xNjMsNyAmIzQzOzE2Myw3IEBAIHN0cnVjdCBsb3djb3JlIHsKIAlfX3MzMglwcmVlbXB0X2NvdW50OwkJCS8qIDB4MDNhOCAqLwogCV9fdTMyCXNwaW5sb2NrX2xvY2t2YWw7CQkvKiAweDAzYWMgKi8KIAlfX3UzMglzcGlubG9ja19pbmRleDsJCQkvKiAweDAzYjAgKi8KLQlfX3U4CXBhZF8weDAzYjRbMHgwM2I4LTB4MDNiNF07CS8qIDB4MDNiNCAqLwomIzQzOwlfX3MzMglsYXp5X21tdV9jb3VudDsJCQkvKiAweDAzYjQgKi8KIAlfX3U2NAlwZXJjcHVfb2Zmc2V0OwkJCS8qIDB4MDNiOCAqLwogCV9fdTgJcGVyY3B1X3JlZ2lzdGVyOwkJLyogMHgwM2MwICovCiAJX191OAlwYWRfMHgwM2MxWzB4MDQwMC0weDAzYzFdOwkvKiAweDAzYzEgKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDg1OWNlN2M3ZDQ1NDQuLjFlOGE3OTk4OWVkNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMzksNiAmIzQzOzM5LDY0IEBAIGVudW0gewogCiBleHRlcm4gYXRvbWljX2xvbmdfdCBkaXJlY3RfcGFnZXNfY291bnRbUEdfRElSRUNUX01BUF9NQVhdOwogCiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgaW50ICpyZXMpOwomIzQzO2Jvb2wgX19sYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcyk7CiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcyk7CiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IG9sZF9wdGUsIHB0ZV90IHB0ZSk7CiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTsKJiM0Mztib29sIF9fbGF6eV9tbXVfc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKTsKJiM0Mztib29sIF9fbGF6eV9tbXVfcHRlcF9nZXQocHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpOwomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19sYXp5X21tdV9hY3RpdmUodm9pZCkKJiM0Mzt7CiYjNDM7CWlmIChfX2lzX2RlZmluZWQoX19ERUNPTVBSRVNTT1IpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlpZiAoIWdldF9sb3djb3JlKCktJmd0O2xhenlfbW11X2NvdW50KQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZQomIzQzO2Jvb2wgbGF6eV9tbXVfcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBpbnQgKnJlcykKJiM0Mzt7CiYjNDM7CWlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CXJldHVybiBfX2xhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoYWRkciwgcHRlcCwgcmVzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZQomIzQzO2Jvb2wgbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpCiYjNDM7ewomIzQzOwlpZiAoIWlzX2xhenlfbW11X2FjdGl2ZSgpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlyZXR1cm4gX19sYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIoYWRkciwgcHRlcCwgcmVzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZQomIzQzO2Jvb2wgbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKQomIzQzO3sKJiM0MzsJaWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJcmV0dXJuIF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydChhZGRyLCBwdGVwLCByZXMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7Ym9vbCBsYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLAomIzQzOwkJCQkgICAgICBwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpCiYjNDM7ewomIzQzOwlpZiAoIWlzX2xhenlfbW11X2FjdGl2ZSgpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlyZXR1cm4gX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdChhZGRyLCBwdGVwLCBvbGRfcHRlLCBwdGUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7Ym9vbCBsYXp5X21tdV9wdGVwX3NldF93cnByb3RlY3QodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKJiM0Mzt7CiYjNDM7CWlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CXJldHVybiBfX2xhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdChhZGRyLCBwdGVwKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3BhZ2VfY291bnQoaW50IGxldmVsLCBsb25nIGNvdW50KQogewogCWlmIChJU19FTkFCTEVEKENPTkZJR19QUk9DX0ZTKSkKQEAgLTk3OCwxNyAmIzQzOzEwMzYsMzggQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wbWQocG1kX3QgKnBtZHAsIHBtZF90IHBtZCkKIAlXUklURV9PTkNFKCpwbWRwLCBwbWQpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKIHsKIAlpZiAocHRlX3ByZXNlbnQocHRlKSkKIAkJcHRlID0gY2xlYXJfcHRlX2JpdChwdGUsIF9fcGdwcm90KF9QQUdFX1VOVVNFRCkpOwogCVdSSVRFX09OQ0UoKnB0ZXAsIHB0ZSk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQomIzQzO3sKJiM0MzsJaWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSB8fCAhX19sYXp5X21tdV9zZXRfcHRlKHB0ZXAsIHB0ZSkpCiYjNDM7CQlfX3NldF9wdGUocHRlcCwgcHRlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBwdGVwX2dldF9sb2NrbGVzcyBwdGVwX2dldF9sb2NrbGVzcwomIzQzO3N0YXRpYyBpbmxpbmUgX19ub19zYW5pdGl6ZV9hZGRyZXNzIHB0ZV90IHB0ZXBfZ2V0X2xvY2tsZXNzKHB0ZV90ICpwdGVwKQomIzQzO3sKJiM0MzsJcmV0dXJuIFJFQURfT05DRSgqcHRlcCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgcHRlX3QgX19wdGVwX2dldChwdGVfdCAqcHRlcCkKJiM0Mzt7CiYjNDM7CXJldHVybiBSRUFEX09OQ0UoKnB0ZXApOwomIzQzO30KJiM0MzsKICNkZWZpbmUgcHRlcF9nZXQgcHRlcF9nZXQKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9nZXQocHRlX3QgKnB0ZXApCiB7Ci0JcmV0dXJuIFJFQURfT05DRSgqcHRlcCk7CiYjNDM7CXB0ZV90IHJlczsKJiM0MzsKJiM0MzsJaWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSB8fCAhX19sYXp5X21tdV9wdGVwX2dldChwdGVwLCAmYW1wO3JlcykpCiYjNDM7CQlyZXMgPSBfX3B0ZXBfZ2V0KHB0ZXApOwomIzQzOwlyZXR1cm4gcmVzOwogfQogCiAjZGVmaW5lIHBtZHBfZ2V0IHBtZHBfZ2V0CkBAIC0xMTgxLDYgJiM0MzsxMjYwLDE1IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3B0ZXBfaXB0ZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCBuciwKIAl9IHdoaWxlIChuciAhPSAyNTUpOwogfQogCiYjNDM7dm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJCQkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKJiM0MzsJCQkJCXB0ZV90ICpwdGUpOwomIzQzOyNkZWZpbmUgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcyBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzCiYjNDM7CiYjNDM7dm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGUodm9pZCk7CiYjNDM7dm9pZCBhcmNoX2xlYXZlX2xhenlfbW11X21vZGUodm9pZCk7CiYjNDM7dm9pZCBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUodm9pZCk7CiYjNDM7CiAvKgogICogVGhpcyBpcyBoYXJkIHRvIHVuZGVyc3RhbmQuIHB0ZXBfZ2V0X2FuZF9jbGVhciBhbmQgcHRlcF9jbGVhcl9mbHVzaAogICogYm90aCBjbGVhciB0aGUgVExCIGZvciB0aGUgdW5tYXBwZWQgcHRlLiBUaGUgcmVhc29uIGlzIHRoYXQKQEAgLTEyMDEsMTAgJiM0MzsxMjg5LDE2IEBAIHB0ZV90IHB0ZXBfeGNoZ19sYXp5KHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKiwgcHRlX3QpOwogc3RhdGljIGlubGluZSBib29sIHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCXVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCiB7Ci0JcHRlX3QgcHRlID0gcHRlcF9nZXQocHRlcCk7CiYjNDM7CXB0ZV90IHB0ZTsKJiM0MzsJaW50IHJlczsKIAotCXB0ZSA9IHB0ZXBfeGNoZ19kaXJlY3Qodm1hLSZndDt2bV9tbSwgYWRkciwgcHRlcCwgcHRlX21rb2xkKHB0ZSkpOwotCXJldHVybiBwdGVfeW91bmcocHRlKTsKJiM0MzsJaWYgKCFsYXp5X21tdV9wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKGFkZHIsIHB0ZXAsICZhbXA7cmVzKSkgewomIzQzOwkJcHRlID0gX19wdGVwX2dldChwdGVwKTsKJiM0MzsJCXB0ZSA9IHB0ZV9ta29sZChwdGUpOwomIzQzOwkJcHRlID0gcHRlcF94Y2hnX2RpcmVjdCh2bWEtJmd0O3ZtX21tLCBhZGRyLCBwdGVwLCBwdGUpOwomIzQzOwkJcmVzID0gcHRlX3lvdW5nKHB0ZSk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHJlczsKIH0KIAogI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSX1lPVU5HX0ZMVVNICkBAIC0xMjIwLDcgJiM0MzsxMzE0LDggQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiB7CiAJcHRlX3QgcmVzOwogCi0JcmVzID0gcHRlcF94Y2hnX2xhenkobW0sIGFkZHIsIHB0ZXAsIF9fcHRlKF9QQUdFX0lOVkFMSUQpKTsKJiM0MzsJaWYgKCFsYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIoYWRkciwgcHRlcCwgJmFtcDtyZXMpKQomIzQzOwkJcmVzID0gcHRlcF94Y2hnX2xhenkobW0sIGFkZHIsIHB0ZXAsIF9fcHRlKF9QQUdFX0lOVkFMSUQpKTsKIAlwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcihtbSwgYWRkciwgcmVzKTsKIAkvKiBBdCB0aGlzIHBvaW50IHRoZSByZWZlcmVuY2UgdGhyb3VnaCB0aGUgbWFwcGluZyBpcyBzdGlsbCBwcmVzZW50ICovCiAJaWYgKG1tX2lzX3Byb3RlY3RlZChtbSkgJmFtcDsmYW1wOyBwdGVfcHJlc2VudChyZXMpKQpAQCAtMTIyOSw5ICYjNDM7MTMyNCwyOCBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIH0KIAogI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX01PRElGWV9QUk9UX1RSQU5TQUNUSU9OCi1wdGVfdCBwdGVwX21vZGlmeV9wcm90X3N0YXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBwdGVfdCAqKTsKLXZvaWQgcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsCi0JCQkgICAgIHB0ZV90ICosIHB0ZV90LCBwdGVfdCk7CiYjNDM7cHRlX3QgX19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKik7CiYjNDM7dm9pZCBfX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywKJiM0MzsJCQkJcHRlX3QgKiwgcHRlX3QsIHB0ZV90KTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7cHRlX3QgcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKJiM0MzsJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCiYjNDM7ewomIzQzOwlwdGVfdCByZXM7CiYjNDM7CiYjNDM7CWlmICghbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydChhZGRyLCBwdGVwLCAmYW1wO3JlcykpCiYjNDM7CQlyZXMgPSBfX19wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHZtYSwgYWRkciwgcHRlcCk7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUKJiM0Mzt2b2lkIHB0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJICAgICBwdGVfdCAqcHRlcCwgcHRlX3Qgb2xkX3B0ZSwgcHRlX3QgcHRlKQomIzQzO3sKJiM0MzsJaWYgKCFsYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdChhZGRyLCBwdGVwLCBvbGRfcHRlLCBwdGUpKQomIzQzOwkJX19fcHRlcF9tb2RpZnlfcHJvdF9jb21taXQodm1hLCBhZGRyLCBwdGVwLCBvbGRfcHRlLCBwdGUpOwomIzQzO30KIAogI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSX0ZMVVNICiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCkBAIC0xMjYxLDExICYjNDM7MTM3NSwxMyBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogewogCXB0ZV90IHJlczsKIAotCWlmIChmdWxsKSB7Ci0JCXJlcyA9IHB0ZXBfZ2V0KHB0ZXApOwotCQlzZXRfcHRlKHB0ZXAsIF9fcHRlKF9QQUdFX0lOVkFMSUQpKTsKLQl9IGVsc2UgewotCQlyZXMgPSBwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpOwomIzQzOwlpZiAoIWxhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcihhZGRyLCBwdGVwLCAmYW1wO3JlcykpIHsKJiM0MzsJCWlmIChmdWxsKSB7CiYjNDM7CQkJcmVzID0gX19wdGVwX2dldChwdGVwKTsKJiM0MzsJCQlfX3NldF9wdGUocHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlyZXMgPSBwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpOwomIzQzOwkJfQogCX0KIAlwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcihtbSwgYWRkciwgcmVzKTsKIAkvKiBBdCB0aGlzIHBvaW50IHRoZSByZWZlcmVuY2UgdGhyb3VnaCB0aGUgbWFwcGluZyBpcyBzdGlsbCBwcmVzZW50ICovCkBAIC0xMjkxLDEwICYjNDM7MTQwNywxNSBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogc3RhdGljIGlubGluZSB2b2lkIHB0ZXBfc2V0X3dycHJvdGVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQogewotCXB0ZV90IHB0ZSA9IHB0ZXBfZ2V0KHB0ZXApOwomIzQzOwlwdGVfdCBwdGU7CiAKLQlpZiAocHRlX3dyaXRlKHB0ZSkpCi0JCXB0ZXBfeGNoZ19sYXp5KG1tLCBhZGRyLCBwdGVwLCBwdGVfd3Jwcm90ZWN0KHB0ZSkpOwomIzQzOwlpZiAoIWxhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdChhZGRyLCBwdGVwKSkgewomIzQzOwkJcHRlID0gX19wdGVwX2dldChwdGVwKTsKJiM0MzsJCWlmIChwdGVfd3JpdGUocHRlKSkgewomIzQzOwkJCXB0ZSA9IHB0ZV93cnByb3RlY3QocHRlKTsKJiM0MzsJCQlwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgcHRlKTsKJiM0MzsJCX0KJiM0MzsJfQogfQogCiAvKgpAQCAtMTMyNyw3ICYjNDM7MTQ0OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfZml4X3NwdXJpb3VzX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCSAqIFBURSBkb2VzIG5vdCBoYXZlIF9QQUdFX1BST1RFQ1Qgc2V0LCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBvdmVyaGVhZC4KIAkgKiBBIGxvY2FsIFJEUCBjYW4gYmUgdXNlZCB0byBkbyB0aGUgZmx1c2guCiAJICovCi0JaWYgKGNwdV9oYXNfcmRwKCkgJmFtcDsmYW1wOyAhKHB0ZV92YWwocHRlcF9nZXQocHRlcCkpICZhbXA7IF9QQUdFX1BST1RFQ1QpKQomIzQzOwlpZiAoY3B1X2hhc19yZHAoKSAmYW1wOyZhbXA7ICEocHRlX3ZhbChfX3B0ZXBfZ2V0KHB0ZXApKSAmYW1wOyBfUEFHRV9QUk9URUNUKSkKIAkJX19wdGVwX3JkcChhZGRyZXNzLCBwdGVwLCAxKTsKIH0KICNkZWZpbmUgZmx1c2hfdGxiX2ZpeF9zcHVyaW91c19mYXVsdCBmbHVzaF90bGJfZml4X3NwdXJpb3VzX2ZhdWx0CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKaW5kZXggYjYwMjg0MzI4ZmUzZC4uZjVhM2M5ZTFiNmI4OCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwpAQCAtNzcsNiAmIzQzOzc3LDcgQEAKICNpbmNsdWRlICZsdDthc20vbWFjY2Vzcy5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS91di5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9hc20tb2Zmc2V0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vbGF6eV9tbXUuaCZndDsKICNpbmNsdWRlICYjMzQ7ZW50cnkuaCYjMzQ7CiAKIC8qCkBAIC0xMDEyLDUgJiM0MzsxMDEzLDYgQEAgdm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKQogCiB2b2lkIF9faW5pdCBhcmNoX2NwdV9maW5hbGl6ZV9pbml0KHZvaWQpCiB7CiYjNDM7CWxhenlfbW11X29ubGluZV9ib290X2NwdSgpOwogCXNjbHBfaW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKaW5kZXggMGJhN2Y4OWI4MTYxMS4uMGE4MjZiYmFmMWRkYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCkBAIC01OSw2ICYjNDM7NTksNyBAQAogI2luY2x1ZGUgJmx0O2FzbS90b3BvbG9neS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS92ZHNvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL21hY2Nlc3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2xhenlfbW11LmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2VudHJ5LmgmIzM0OwogCiBlbnVtIHsKQEAgLTg2Niw2ICYjNDM7ODY3LDExIEBAIGludCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRpZGxlKQogCXJjID0gcGNwdV9hbGxvY19sb3djb3JlKHBjcHUsIGNwdSk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiYjNDM7CXJjID0gbGF6eV9tbXVfb25saW5lX2NwdShHRlBfS0VSTkVMLCBjcHUpOwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCXBjcHVfZnJlZV9sb3djb3JlKHBjcHUsIGNwdSk7CiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CX0KIAkvKgogCSAqIE1ha2Ugc3VyZSBnbG9iYWwgY29udHJvbCByZWdpc3RlciBjb250ZW50cyBkbyBub3QgY2hhbmdlCiAJICogdW50aWwgbmV3IENQVSBoYXMgaW5pdGlhbGl6ZWQgY29udHJvbCByZWdpc3RlcnMuCkBAIC05MjEsNiAmIzQzOzkyNyw3IEBAIHZvaWQgX19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCiAJcGNwdSA9IHBlcl9jcHVfcHRyKCZhbXA7cGNwdV9kZXZpY2VzLCBjcHUpOwogCXdoaWxlICghcGNwdV9zdG9wcGVkKHBjcHUpKQogCQljcHVfcmVsYXgoKTsKJiM0MzsJbGF6eV9tbXVfb2ZmbGluZV9jcHUoY3B1KTsKIAlwY3B1X2ZyZWVfbG93Y29yZShwY3B1LCBjcHUpOwogCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbW1fY3B1bWFzaygmYW1wO2luaXRfbW0pKTsKIAljcHVtYXNrX2NsZWFyX2NwdShjcHUsICZhbXA7aW5pdF9tbS5jb250ZXh0LmNwdV9hdHRhY2hfbWFzayk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vTWFrZWZpbGUgYi9hcmNoL3MzOTAvbW0vTWFrZWZpbGUKaW5kZXggMTkzODk5YzM5Y2E3Zi4uOTZjYWMzZTk5ZjUxNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9NYWtlZmlsZQpAQCAtNCw2ICYjNDM7NCw3IEBACiAjCiAKIG9iai15CQk6PSBpbml0Lm8gZmF1bHQubyBleHRtZW0ubyBtbWFwLm8gdm1lbS5vIG1hY2Nlc3MubwomIzQzO29iai15CQk6PSBpbml0Lm8gZmF1bHQubyBleHRtZW0ubyBtbWFwLm8gdm1lbS5vIG1hY2Nlc3MubyBsYXp5X21tdS5vCiBvYmoteQkJJiM0Mzs9IHBhZ2Utc3RhdGVzLm8gcGFnZWF0dHIubyBwZ3RhYmxlLm8gcGdhbGxvYy5vIGV4dGFibGUubwogCiBvYmotJChDT05GSUdfQ01NKQkJJiM0Mzs9IGNtbS5vCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYyBiL2FyY2gvczM5MC9tbS9sYXp5X21tdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjdlM2E0MTE1ZWEwNDgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYwpAQCAtMCwwICYjNDM7MSw0MTggQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wZ3RhYmxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2thc2FuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2ZhY2lsaXR5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9sYXp5X21tdS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtrdW5pdC92aXNpYmlsaXR5LmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBQVEVfUE9JU09OCV9QQUdFX0xBUkdFCiYjNDM7CiYjNDM7c3RydWN0IGlwdGVfcmFuZ2UgewomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKJiM0MzsJdW5zaWduZWQgbG9uZyBiYXNlX2FkZHI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYmFzZV9lbmQ7CiYjNDM7CXB0ZV90ICpiYXNlX3B0ZTsKJiM0MzsJcHRlX3QgKnN0YXJ0X3B0ZTsKJiM0MzsJcHRlX3QgKmVuZF9wdGU7CiYjNDM7CXB0ZV90IGNhY2hlW1BUUlNfUEVSX1BURV07CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGlwdGVfcmFuZ2UgKiwgaXB0ZV9yYW5nZSk7CiYjNDM7CiYjNDM7c3RhdGljIGludCBjb3VudF9jb250aWd1b3VzKHB0ZV90ICpzdGFydCwgcHRlX3QgKmVuZCwgYm9vbCAqdmFsaWQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHBhZ2VfaW52YWxpZF9iaXQ7CiYjNDM7CXB0ZV90ICpwdGVwLCBwdGU7CiYjNDM7CiYjNDM7CXB0ZSA9IF9fcHRlcF9nZXQoc3RhcnQpOwomIzQzOwlwYWdlX2ludmFsaWRfYml0ID0gcHRlX3ZhbChwdGUpICZhbXA7IF9QQUdFX0lOVkFMSUQ7CiYjNDM7CiYjNDM7CWZvciAocHRlcCA9IHN0YXJ0ICYjNDM7IDE7IHB0ZXAgJmx0OyBlbmQ7IHB0ZXAmIzQzOyYjNDM7KSB7CiYjNDM7CQlwdGUgPSBfX3B0ZXBfZ2V0KHB0ZXApOwomIzQzOwkJaWYgKChwdGVfdmFsKHB0ZSkgJmFtcDsgX1BBR0VfSU5WQUxJRCkgIT0gcGFnZV9pbnZhbGlkX2JpdCkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwkqdmFsaWQgPSAhKHBhZ2VfaW52YWxpZF9iaXQpOwomIzQzOwlyZXR1cm4gcHRlcCAtIHN0YXJ0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX2ludmFsaWRhdGVfcHRlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJCSAgIGludCBucl9wdGVzLCBwdGVfdCAqcHRlcCkKJiM0Mzt7CiYjNDM7CWF0b21pY19pbmMoJmFtcDttbS0mZ3Q7Y29udGV4dC5mbHVzaF9jb3VudCk7CiYjNDM7CWlmIChjcHVfaGFzX3RsYl9sYygpICZhbXA7JmFtcDsgY3B1bWFza19lcXVhbChtbV9jcHVtYXNrKG1tKSwgY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKSkKJiM0MzsJCV9fcHRlcF9pcHRlX3JhbmdlKGFkZHIsIG5yX3B0ZXMgLSAxLCBwdGVwLCBJUFRFX0xPQ0FMKTsKJiM0MzsJZWxzZQomIzQzOwkJX19wdGVwX2lwdGVfcmFuZ2UoYWRkciwgbnJfcHRlcyAtIDEsIHB0ZXAsIElQVEVfR0xPQkFMKTsKJiM0MzsJYXRvbWljX2RlYygmYW1wO21tLSZndDtjb250ZXh0LmZsdXNoX2NvdW50KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpbnZhbGlkYXRlX3B0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCQlwdGVfdCAqc3RhcnQsIHB0ZV90ICplbmQpCiYjNDM7ewomIzQzOwlpbnQgbnJfcHRlczsKJiM0MzsJYm9vbCB2YWxpZDsKJiM0MzsKJiM0MzsJbnJfcHRlcyA9IGNvdW50X2NvbnRpZ3VvdXMoc3RhcnQsIGVuZCwgJmFtcDt2YWxpZCk7CiYjNDM7CWlmICh2YWxpZCkKJiM0MzsJCV9faW52YWxpZGF0ZV9wdGVfcmFuZ2UobW0sIGFkZHIsIG5yX3B0ZXMsIHN0YXJ0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIG5yX3B0ZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldF9wdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCQkgIHB0ZV90ICpzdGFydCwgcHRlX3QgKmVuZCwgcHRlX3QgKmNhY2hlKQomIzQzO3sKJiM0MzsJaW50IG5yX3B0ZXMsIG5yX3RvdGFsID0gZW5kIC0gc3RhcnQ7CiYjNDM7CXB0ZV90ICpwdGVwID0gc3RhcnQ7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlrYXNhbl91bnBvaXNvbl9wdGUoc3RhcnQsIG5yX3RvdGFsKTsKJiM0MzsJd2hpbGUgKHB0ZXAgJmx0OyBlbmQpIHsKJiM0MzsJCW5yX3B0ZXMgPSBpbnZhbGlkYXRlX3B0ZV9yYW5nZShtbSwgYWRkciwgcHRlcCwgZW5kKTsKJiM0MzsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBucl9wdGVzOyBpJiM0MzsmIzQzOywgcHRlcCYjNDM7JiM0MzssIGNhY2hlJiM0MzsmIzQzOykgewomIzQzOwkJCV9fc2V0X3B0ZShwdGVwLCAqY2FjaGUpOwomIzQzOwkJCSpjYWNoZSA9IF9fcHRlKFBURV9QT0lTT04pOwomIzQzOwkJfQomIzQzOwomIzQzOwkJYWRkciAmIzQzOz0gbnJfcHRlcyAqIFBBR0VfU0laRTsKJiM0MzsJfQomIzQzOwlrYXNhbl9wb2lzb25fcHRlKHN0YXJ0LCBucl90b3RhbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVudGVyX2lwdGVfbm9yYW5nZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGlwdGVfcmFuZ2UgX19tYXliZV91bnVzZWQgKnJhbmdlOwomIzQzOwomIzQzOwlpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlsb2NhbF9iaF9kaXNhYmxlKCk7CiYjNDM7CiYjNDM7CXJhbmdlID0gZ2V0X2NwdV92YXIoaXB0ZV9yYW5nZSk7CiYjNDM7CWdldF9sb3djb3JlKCktJmd0O2xhenlfbW11X2NvdW50JiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVudGVyX2lwdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiYjNDM7CQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBwdGVfdCAqcHRlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlOwomIzQzOwl1bnNpZ25lZCBpbnQgbnJfcHRlczsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2ZhY2lsaXR5KDEzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbG9jYWxfYmhfZGlzYWJsZSgpOwomIzQzOwomIzQzOwlyYW5nZSA9IGdldF9jcHVfdmFyKGlwdGVfcmFuZ2UpOwomIzQzOwlnZXRfbG93Y29yZSgpLSZndDtsYXp5X21tdV9jb3VudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CWlmIChtbV9pc19wcm90ZWN0ZWQobW0pKSB7CiYjNDM7CQlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlyYW5nZS0mZ3Q7bW0gPSBtbTsKJiM0MzsJcmFuZ2UtJmd0O2Jhc2VfYWRkciA9IGFkZHI7CiYjNDM7CXJhbmdlLSZndDtiYXNlX2VuZCA9IGVuZDsKJiM0MzsJcmFuZ2UtJmd0O2Jhc2VfcHRlID0gcHRlOwomIzQzOwomIzQzOwlucl9wdGVzID0gKHJhbmdlLSZndDtiYXNlX2VuZCAtIHJhbmdlLSZndDtiYXNlX2FkZHIpIC8gUEFHRV9TSVpFOwomIzQzOwlrYXNhbl9wb2lzb25fcHRlKHJhbmdlLSZndDtiYXNlX3B0ZSwgbnJfcHRlcyk7CiYjNDM7CiYjNDM7CWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBsZWF2ZV9pcHRlX3JhbmdlKHZvaWQpCiYjNDM7ewomIzQzOwlwdGVfdCAqcHRlcCwgKnN0YXJ0LCAqc3RhcnRfY2FjaGUsICpjYWNoZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyLCBhZGRyOwomIzQzOwlzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7CiYjNDM7CXVuc2lnbmVkIGludCBucl9wdGVzOwomIzQzOwlpbnQgc3RhcnRfaWR4OwomIzQzOwomIzQzOwlpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlsb2NhbF9iaF9kaXNhYmxlKCk7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X3ByZWVtcHRpb25fZGlzYWJsZWQoKTsKJiM0MzsJcmFuZ2UgPSB0aGlzX2NwdV9yZWFkKGlwdGVfcmFuZ2UpOwomIzQzOwlpZiAoIXJhbmdlLSZndDttbSkKJiM0MzsJCWdvdG8gbm9yYW5nZTsKJiM0MzsJaWYgKCFyYW5nZS0mZ3Q7c3RhcnRfcHRlKQomIzQzOwkJZ290byBkb25lOwomIzQzOwomIzQzOwlzdGFydCA9IHJhbmdlLSZndDtzdGFydF9wdGU7CiYjNDM7CXN0YXJ0X2lkeCA9IHJhbmdlLSZndDtzdGFydF9wdGUgLSByYW5nZS0mZ3Q7YmFzZV9wdGU7CiYjNDM7CXN0YXJ0X2FkZHIgPSByYW5nZS0mZ3Q7YmFzZV9hZGRyICYjNDM7IHN0YXJ0X2lkeCAqIFBBR0VfU0laRTsKJiM0MzsJYWRkciA9IHN0YXJ0X2FkZHI7CiYjNDM7CXN0YXJ0X2NhY2hlID0gJmFtcDtyYW5nZS0mZ3Q7Y2FjaGVbc3RhcnRfaWR4XTsKJiM0MzsJY2FjaGUgPSBzdGFydF9jYWNoZTsKJiM0MzsJZm9yIChwdGVwID0gc3RhcnQ7IHB0ZXAgJmx0OyByYW5nZS0mZ3Q7ZW5kX3B0ZTsgcHRlcCYjNDM7JiM0MzssIGNhY2hlJiM0MzsmIzQzOywgYWRkciAmIzQzOz0gUEFHRV9TSVpFKSB7CiYjNDM7CQlpZiAocHRlX3ZhbCgqY2FjaGUpID09IFBURV9QT0lTT04pIHsKJiM0MzsJCQlpZiAoc3RhcnQpIHsKJiM0MzsJCQkJc2V0X3B0ZV9yYW5nZShyYW5nZS0mZ3Q7bW0sIHN0YXJ0X2FkZHIsIHN0YXJ0LCBwdGVwLCBzdGFydF9jYWNoZSk7CiYjNDM7CQkJCXN0YXJ0ID0gTlVMTDsKJiM0MzsJCQl9CiYjNDM7CQl9IGVsc2UgaWYgKCFzdGFydCkgewomIzQzOwkJCXN0YXJ0ID0gcHRlcDsKJiM0MzsJCQlzdGFydF9hZGRyID0gYWRkcjsKJiM0MzsJCQlzdGFydF9jYWNoZSA9IGNhY2hlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXNldF9wdGVfcmFuZ2UocmFuZ2UtJmd0O21tLCBzdGFydF9hZGRyLCBzdGFydCwgcHRlcCwgc3RhcnRfY2FjaGUpOwomIzQzOwomIzQzOwlyYW5nZS0mZ3Q7c3RhcnRfcHRlID0gTlVMTDsKJiM0MzsJcmFuZ2UtJmd0O2VuZF9wdGUgPSBOVUxMOwomIzQzOwomIzQzO2RvbmU6CiYjNDM7CW5yX3B0ZXMgPSAocmFuZ2UtJmd0O2Jhc2VfZW5kIC0gcmFuZ2UtJmd0O2Jhc2VfYWRkcikgLyBQQUdFX1NJWkU7CiYjNDM7CWthc2FuX3VucG9pc29uX3B0ZShyYW5nZS0mZ3Q7YmFzZV9wdGUsIG5yX3B0ZXMpOwomIzQzOwomIzQzOwlyYW5nZS0mZ3Q7bW0gPSBOVUxMOwomIzQzOwlyYW5nZS0mZ3Q7YmFzZV9hZGRyID0gMDsKJiM0MzsJcmFuZ2UtJmd0O2Jhc2VfZW5kID0gMDsKJiM0MzsJcmFuZ2UtJmd0O2Jhc2VfcHRlID0gTlVMTDsKJiM0MzsKJiM0Mztub3JhbmdlOgomIzQzOwlnZXRfbG93Y29yZSgpLSZndDtsYXp5X21tdV9jb3VudC0tOwomIzQzOwlwdXRfY3B1X3ZhcihpcHRlX3JhbmdlKTsKJiM0MzsKJiM0MzsJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGZsdXNoX2xhenlfbW11X21vZGUodm9pZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWRkciwgZW5kOwomIzQzOwlzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwomIzQzOwlwdGVfdCAqcHRlOwomIzQzOwomIzQzOwlpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlyYW5nZSA9IGdldF9jcHVfdmFyKGlwdGVfcmFuZ2UpOwomIzQzOwlpZiAocmFuZ2UtJmd0O21tKSB7CiYjNDM7CQltbSA9IHJhbmdlLSZndDttbTsKJiM0MzsJCWFkZHIgPSByYW5nZS0mZ3Q7YmFzZV9hZGRyOwomIzQzOwkJZW5kID0gcmFuZ2UtJmd0O2Jhc2VfZW5kOwomIzQzOwkJcHRlID0gcmFuZ2UtJmd0O2Jhc2VfcHRlOwomIzQzOwomIzQzOwkJbGVhdmVfaXB0ZV9yYW5nZSgpOwomIzQzOwkJZW50ZXJfaXB0ZV9yYW5nZShtbSwgYWRkciwgZW5kLCBwdGUpOwomIzQzOwl9CiYjNDM7CXB1dF9jcHVfdmFyKGlwdGVfcmFuZ2UpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSh2b2lkKQomIzQzO3sKJiM0MzsJZW50ZXJfaXB0ZV9ub3JhbmdlKCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfSUZfS1VOSVQoYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKTsKJiM0MzsKJiM0Mzt2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiYjNDM7CQkJCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAomIzQzOwkJCQkJcHRlX3QgKnB0ZSkKJiM0Mzt7CiYjNDM7CWVudGVyX2lwdGVfcmFuZ2UobW0sIGFkZHIsIGVuZCwgcHRlKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9JRl9LVU5JVChhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKTsKJiM0MzsKJiM0Mzt2b2lkIGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSh2b2lkKQomIzQzO3sKJiM0MzsJbGVhdmVfaXB0ZV9yYW5nZSgpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSk7CiYjNDM7CiYjNDM7dm9pZCBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUodm9pZCkKJiM0Mzt7CiYjNDM7CWZsdXNoX2xhenlfbW11X21vZGUoKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9JRl9LVU5JVChhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUpOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9faXB0ZV9yYW5nZV9zZXRfcHRlKHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZSwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpZHggPSBwdGVwIC0gcmFuZ2UtJmd0O2Jhc2VfcHRlOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9wcmVlbXB0aW9uX2Rpc2FibGVkKCk7CiYjNDM7CXJhbmdlLSZndDtjYWNoZVtpZHhdID0gcHRlOwomIzQzOwomIzQzOwlpZiAoIXJhbmdlLSZndDtzdGFydF9wdGUpIHsKJiM0MzsJCXJhbmdlLSZndDtzdGFydF9wdGUgPSBwdGVwOwomIzQzOwkJcmFuZ2UtJmd0O2VuZF9wdGUgPSBwdGVwICYjNDM7IDE7CiYjNDM7CX0gZWxzZSBpZiAocHRlcCAmbHQ7IHJhbmdlLSZndDtzdGFydF9wdGUpIHsKJiM0MzsJCXJhbmdlLSZndDtzdGFydF9wdGUgPSBwdGVwOwomIzQzOwl9IGVsc2UgaWYgKHB0ZXAgJiM0MzsgMSAmZ3Q7IHJhbmdlLSZndDtlbmRfcHRlKSB7CiYjNDM7CQlyYW5nZS0mZ3Q7ZW5kX3B0ZSA9IHB0ZXAgJiM0MzsgMTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgcHRlX3QgX19pcHRlX3JhbmdlX3B0ZXBfZ2V0KHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZSwgcHRlX3QgKnB0ZXApCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgaWR4ID0gcHRlcCAtIHJhbmdlLSZndDtiYXNlX3B0ZTsKJiM0MzsJcHRlX3QgcHRlOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9wcmVlbXB0aW9uX2Rpc2FibGVkKCk7CiYjNDM7CWlmIChwdGVfdmFsKHJhbmdlLSZndDtjYWNoZVtpZHhdKSA9PSBQVEVfUE9JU09OKSB7CiYjNDM7CQlrYXNhbl91bnBvaXNvbl9wdGUocHRlcCwgMSk7CiYjNDM7CQlwdGUgPSBfX3B0ZXBfZ2V0KHB0ZXApOwomIzQzOwkJa2FzYW5fcG9pc29uX3B0ZShwdGVwLCAxKTsKJiM0MzsKJiM0MzsJCXJldHVybiBwdGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJhbmdlLSZndDtjYWNoZVtpZHhdOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGlwdGVfcmFuZ2UgKnRoaXNfaXB0ZV9yYW5nZShwdGVfdCAqcHRlcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTsKJiM0MzsJdW5zaWduZWQgaW50IG5yX3B0ZXM7CiYjNDM7CiYjNDM7CXJhbmdlID0gdGhpc19jcHVfcmVhZChpcHRlX3JhbmdlKTsKJiM0MzsJaWYgKHB0ZXAgJmx0OyByYW5nZS0mZ3Q7YmFzZV9wdGUpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJbnJfcHRlcyA9IChyYW5nZS0mZ3Q7YmFzZV9lbmQgLSByYW5nZS0mZ3Q7YmFzZV9hZGRyKSAvIFBBR0VfU0laRTsKJiM0MzsJaWYgKHB0ZXAgJmd0Oz0gcmFuZ2UtJmd0O2Jhc2VfcHRlICYjNDM7IG5yX3B0ZXMpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHJhbmdlOwomIzQzO30KJiM0MzsKJiM0Mztib29sIF9fbGF6eV9tbXVfc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlOwomIzQzOwomIzQzOwlyYW5nZSA9IHRoaXNfaXB0ZV9yYW5nZShwdGVwKTsKJiM0MzsJaWYgKCFyYW5nZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJX19pcHRlX3JhbmdlX3NldF9wdGUocmFuZ2UsIHB0ZXAsIHB0ZSk7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0Mztib29sIF9fbGF6eV9tbXVfcHRlcF9nZXQocHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7CiYjNDM7CiYjNDM7CXJhbmdlID0gdGhpc19pcHRlX3JhbmdlKHB0ZXApOwomIzQzOwlpZiAoIXJhbmdlKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkqcmVzID0gX19pcHRlX3JhbmdlX3B0ZXBfZ2V0KHJhbmdlLCBwdGVwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgX19sYXp5X21tdV9wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIGludCAqcmVzKQomIzQzO3sKJiM0MzsJc3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlOwomIzQzOwlwdGVfdCBwdGUsIG9sZDsKJiM0MzsKJiM0MzsJcmFuZ2UgPSB0aGlzX2lwdGVfcmFuZ2UocHRlcCk7CiYjNDM7CWlmICghcmFuZ2UpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW9sZCA9IF9faXB0ZV9yYW5nZV9wdGVwX2dldChyYW5nZSwgcHRlcCk7CiYjNDM7CXB0ZSA9IHB0ZV9ta29sZChvbGQpOwomIzQzOwlfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTsKJiM0MzsJKnJlcyA9IHB0ZV95b3VuZyhvbGQpOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcih1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKQomIzQzO3sKJiM0MzsJc3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlOwomIzQzOwlwdGVfdCBwdGUsIG9sZDsKJiM0MzsKJiM0MzsJcmFuZ2UgPSB0aGlzX2lwdGVfcmFuZ2UocHRlcCk7CiYjNDM7CWlmICghcmFuZ2UpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW9sZCA9IF9faXB0ZV9yYW5nZV9wdGVwX2dldChyYW5nZSwgcHRlcCk7CiYjNDM7CXB0ZSA9IF9fcHRlKF9QQUdFX0lOVkFMSUQpOwomIzQzOwlfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTsKJiM0MzsJKnJlcyA9IG9sZDsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19sYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIoYWRkciwgcHRlcCwgcmVzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsCiYjNDM7CQkJCQlwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7CiYjNDM7CiYjNDM7CXJhbmdlID0gdGhpc19pcHRlX3JhbmdlKHB0ZXApOwomIzQzOwlpZiAoIXJhbmdlKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgX19sYXp5X21tdV9wdGVwX3NldF93cnByb3RlY3QodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTsKJiM0MzsJcHRlX3QgcHRlOwomIzQzOwomIzQzOwlyYW5nZSA9IHRoaXNfaXB0ZV9yYW5nZShwdGVwKTsKJiM0MzsJaWYgKCFyYW5nZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcHRlID0gX19pcHRlX3JhbmdlX3B0ZXBfZ2V0KHJhbmdlLCBwdGVwKTsKJiM0MzsJaWYgKHB0ZV93cml0ZShwdGUpKSB7CiYjNDM7CQlwdGUgPSBwdGVfd3Jwcm90ZWN0KHB0ZSk7CiYjNDM7CQlfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGxhenlfbW11X29ubGluZV9jcHUoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgY3B1KQomIzQzO3sKJiM0MzsJc3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2ZhY2lsaXR5KDEzKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyYW5nZSA9IGt6YWxsb2Nfb2JqKCpyYW5nZSwgZ2ZwKTsKJiM0MzsJaWYgKCFyYW5nZSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShyYW5nZS0mZ3Q7Y2FjaGUpOyBpJiM0MzsmIzQzOykKJiM0MzsJCXJhbmdlLSZndDtjYWNoZVtpXSA9IF9fcHRlKFBURV9QT0lTT04pOwomIzQzOwlwZXJfY3B1KGlwdGVfcmFuZ2UsIGNwdSkgPSByYW5nZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbGF6eV9tbXVfb2ZmbGluZV9jcHUodW5zaWduZWQgaW50IGNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2ZhY2lsaXR5KDEzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcmFuZ2UgPSBwZXJfY3B1KGlwdGVfcmFuZ2UsIGNwdSk7CiYjNDM7CXBlcl9jcHUoaXB0ZV9yYW5nZSwgY3B1KSA9IE5VTEw7CiYjNDM7CWtmcmVlKHJhbmdlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX2luaXQgbGF6eV9tbXVfb25saW5lX2Jvb3RfY3B1KHZvaWQpCiYjNDM7ewomIzQzOwlsYXp5X21tdV9vbmxpbmVfY3B1KEdGUF9BVE9NSUMsIDApOwomIzQzO30KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCmluZGV4IDRhY2Q4YjE0MGM0YmQuLmRmMzY1MjNiY2JiYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL21tL3BndGFibGUuYwpAQCAtMTY2LDE0ICYjNDM7MTY2LDE0IEBAIHB0ZV90IHB0ZXBfeGNoZ19sYXp5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiB9CiBFWFBPUlRfU1lNQk9MKHB0ZXBfeGNoZ19sYXp5KTsKIAotcHRlX3QgcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgICBwdGVfdCAqcHRlcCkKJiM0MztwdGVfdCBfX19wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJCXB0ZV90ICpwdGVwKQogewogCXJldHVybiBwdGVwX2ZsdXNoX2xhenkodm1hLSZndDt2bV9tbSwgYWRkciwgcHRlcCwgMSk7CiB9CiAKLXZvaWQgcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IG9sZF9wdGUsIHB0ZV90IHB0ZSkKJiM0Mzt2b2lkIF9fX3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJCXB0ZV90ICpwdGVwLCBwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpCiB7CiAJc2V0X3B0ZShwdGVwLCBwdGUpOwogfQpkaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jCmluZGV4IDIyOWQxZmMzZDdmMWMuLjkxNjc4NWMzYjJlMGIgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvdGFza19tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9wcm9jL3Rhc2tfbW11LmMKQEAgLTI4NTIsNyAmIzQzOzI4NTIsNyBAQCBzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJcmV0dXJuIDA7CiAJfQogCi0JbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKJiM0MzsJbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKHZtYS0mZ3Q7dm1fbW0sIHN0YXJ0LCBlbmQsIHN0YXJ0X3B0ZSk7CiAKIAlpZiAoKHAtJmd0O2FyZy5mbGFncyAmYW1wOyBQTV9TQ0FOX1dQX01BVENISU5HKSAmYW1wOyZhbXA7ICFwLSZndDt2ZWNfb3V0KSB7CiAJCS8qIEZhc3QgcGF0aCBmb3IgcGVyZm9ybWluZyBleGNsdXNpdmUgV1AgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2FzYW4uaCBiL2luY2x1ZGUvbGludXgva2FzYW4uaAppbmRleCBiZjIzM2JkZTY4YzdlLi4xYWE0ZDlkZDI0ODVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2thc2FuLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rYXNhbi5oCkBAIC02LDYgJiM0Mzs2LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9rYXNhbi1lbmFibGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2FzYW4tdGFncy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wZ3RhYmxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RhdGljX2tleS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKQEAgLTM1LDggJiM0MzszNiw2IEBAIHR5cGVkZWYgdW5zaWduZWQgaW50IF9fYml0d2lzZSBrYXNhbl92bWFsbG9jX2ZsYWdzX3Q7CiAKICNpZiBkZWZpbmVkKENPTkZJR19LQVNBTl9HRU5FUklDKSB8fCBkZWZpbmVkKENPTkZJR19LQVNBTl9TV19UQUdTKQogCi0jaW5jbHVkZSAmbHQ7bGludXgvcGd0YWJsZS5oJmd0OwotCiAvKiBTb2Z0d2FyZSBLQVNBTiBpbXBsZW1lbnRhdGlvbnMgdXNlIHNoYWRvdyBtZW1vcnkuICovCiAKICNpZmRlZiBDT05GSUdfS0FTQU5fU1dfVEFHUwpAQCAtMTM0LDYgJiM0MzsxMzMsMjAgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGthc2FuX3BvaXNvbl9zbGFiKHN0cnVjdCBzbGFiICpzbGFiKQogCQlfX2thc2FuX3BvaXNvbl9zbGFiKHNsYWIpOwogfQogCiYjNDM7dm9pZCBfX2thc2FuX3BvaXNvbl9wdGUocHRlX3QgKnB0ZSwgaW50IG5yKTsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQga2FzYW5fcG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpCiYjNDM7ewomIzQzOwlpZiAoa2FzYW5fZW5hYmxlZCgpKQomIzQzOwkJX19rYXNhbl9wb2lzb25fcHRlKHB0ZSwgbnIpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIF9fa2FzYW5fdW5wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucik7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGthc2FuX3VucG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpCiYjNDM7ewomIzQzOwlpZiAoa2FzYW5fZW5hYmxlZCgpKQomIzQzOwkJX19rYXNhbl91bnBvaXNvbl9wdGUocHRlLCBucik7CiYjNDM7fQomIzQzOwogdm9pZCBfX2thc2FuX3VucG9pc29uX25ld19vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB2b2lkICpvYmplY3QpOwogLyoqCiAgKiBrYXNhbl91bnBvaXNvbl9uZXdfb2JqZWN0IC0gVGVtcG9yYXJpbHkgdW5wb2lzb24gYSBuZXcgc2xhYiBvYmplY3QuCkBAIC00MTQsNiAmIzQzOzQyNyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrYXNhbl91bnBvaXNvbl9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLAogCXJldHVybiBmYWxzZTsKIH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYikge30KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fcG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpIHt9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGthc2FuX3VucG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fdW5wb2lzb25fbmV3X29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsCiAJCQkJCXZvaWQgKm9iamVjdCkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fbmV3X29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaCBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCmluZGV4IDI5ODFlMzg2ZGE3YjMuLmNjODVkYWYzMDczOWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCkBAIC0yNzEsNiAmIzQzOzI3MSw1MCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9lbmFibGUodm9pZCkKIAkJYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7CiB9CiAKJiM0MzsjaWZuZGVmIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHB0ZV90ICpwdGVwKQomIzQzO3sKJiM0MzsJYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwomIzQzOy8qKgomIzQzOyAqIGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcygpIC0gRW5hYmxlIHRoZSBsYXp5IE1NVSBtb2RlIHdpdGggYSBzcGVlZHVwIGhpbnQuCiYjNDM7ICogQG1tOiBBZGRyZXNzIHNwYWNlIHRoZSBwYWdlcyBhcmUgbWFwcGVkIGludG8uCiYjNDM7ICogQGFkZHI6IFN0YXJ0IGFkZHJlc3Mgb2YgdGhlIHJhbmdlLgomIzQzOyAqIEBlbmQ6IEVuZCBhZGRyZXNzIG9mIHRoZSByYW5nZS4KJiM0MzsgKiBAcHRlcDogUGFnZSB0YWJsZSBwb2ludGVyIGZvciB0aGUgZmlyc3QgZW50cnkuCiYjNDM7ICoKJiM0MzsgKiBFbnRlcnMgYSBuZXcgbGF6eSBNTVUgbW9kZSBzZWN0aW9uOyBpZiB0aGUgbW9kZSB3YXMgbm90IGFscmVhZHkgZW5hYmxlZCwKJiM0MzsgKiBlbmFibGVzIGl0IGFuZCBjYWxscyBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKCkuCiYjNDM7ICoKJiM0MzsgKiBQVEVzIHRoYXQgZmFsbCB3aXRoaW4gdGhlIHNwZWNpZmllZCByYW5nZSBtaWdodCBvYnNlcnZlIHVwZGF0ZSBzcGVlZHVwcy4KJiM0MzsgKiBUaGUgUFRFcyBtdXN0IGJlbG9uZyB0byB0aGUgc3BlY2lmaWVkIGFkZHJlc3Mgc3BhY2UgYW5kIGJlIGluIHRoZSBzYW1lIFBNRC4KJiM0MzsgKgomIzQzOyAqIFRoZXJlIGFyZSBubyByZXF1aXJlbWVudHMgb24gdGhlIG9yZGVyIG9yIHJhbmdlIGNvbXBsZXRlbmVzcyBvZiBQVEUKJiM0MzsgKiB1cGRhdGVzIGZvciB0aGUgc3BlY2lmaWVkIHJhbmdlLgomIzQzOyAqCiYjNDM7ICogTXVzdCBiZSBwYWlyZWQgd2l0aCBhIGNhbGwgdG8gbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCkuCiYjNDM7ICoKJiM0MzsgKiBIYXMgbm8gZWZmZWN0IGlmIGNhbGxlZDoKJiM0MzsgKiAtIFdoaWxlIHBhdXNlZCAtIHNlZSBsYXp5X21tdV9tb2RlX3BhdXNlKCkKJiM0MzsgKiAtIEluIGludGVycnVwdCBjb250ZXh0CiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHB0ZV90ICpwdGVwKQomIzQzO3sKJiM0MzsJc3RydWN0IGxhenlfbW11X3N0YXRlICpzdGF0ZSA9ICZhbXA7Y3VycmVudC0mZ3Q7bGF6eV9tbXVfc3RhdGU7CiYjNDM7CiYjNDM7CWlmIChpbl9pbnRlcnJ1cHQoKSB8fCBzdGF0ZS0mZ3Q7cGF1c2VfY291bnQgJmd0OyAwKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlWTV9XQVJOX09OX09OQ0Uoc3RhdGUtJmd0O2VuYWJsZV9jb3VudCA9PSBVOF9NQVgpOwomIzQzOwomIzQzOwlpZiAoc3RhdGUtJmd0O2VuYWJsZV9jb3VudCYjNDM7JiM0MzsgPT0gMCkKJiM0MzsJCWFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgcHRlcCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBsYXp5X21tdV9tb2RlX2Rpc2FibGUoKSAtIERpc2FibGUgdGhlIGxhenkgTU1VIG1vZGUuCiAgKgpAQCAtMzg3LDYgJiM0Mzs0MzEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9yZXN1bWUodm9pZCkKIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9lbmFibGUodm9pZCkge30KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgcHRlX3QgKnB0ZXApIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9kaXNhYmxlKHZvaWQpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9wYXVzZSh2b2lkKSB7fQogc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfcmVzdW1lKHZvaWQpIHt9CmRpZmYgLS1naXQgYS9tbS9rYXNhbi9jb21tb24uYyBiL21tL2thc2FuL2NvbW1vbi5jCmluZGV4IGI3ZDA1YzJhNmQ5M2QuLjk0ZDEwNjA5NDk4OTEgMTAwNjQ0Ci0tLSBhL21tL2thc2FuL2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2thc2FuL2NvbW1vbi5jCkBAIC0xNjMsNiAmIzQzOzE2MywyMCBAQCB2b2lkIF9fa2FzYW5fcG9pc29uX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIpCiAJCSAgICAgS0FTQU5fU0xBQl9SRURaT05FLCBmYWxzZSk7CiB9CiAKJiM0Mzt2b2lkIF9fa2FzYW5fcG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpCiYjNDM7ewomIzQzOwlpZiAoSVNfQUxJR05FRChzaXplb2YoKnB0ZSksIEtBU0FOX0dSQU5VTEVfU0laRSkpCiYjNDM7CQlrYXNhbl9wb2lzb24ocHRlLCBzaXplb2YoKnB0ZSkgKiBuciwgS0FTQU5fTEFaWV9NTVVfUFRFLCBmYWxzZSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKF9fa2FzYW5fcG9pc29uX3B0ZSk7CiYjNDM7CiYjNDM7dm9pZCBfX2thc2FuX3VucG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpCiYjNDM7ewomIzQzOwlpZiAoSVNfQUxJR05FRChzaXplb2YoKnB0ZSksIEtBU0FOX0dSQU5VTEVfU0laRSkpCiYjNDM7CQlrYXNhbl91bnBvaXNvbihwdGUsIHNpemVvZigqcHRlKSAqIG5yLCBmYWxzZSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKF9fa2FzYW5fdW5wb2lzb25fcHRlKTsKJiM0MzsKIHZvaWQgX19rYXNhbl91bnBvaXNvbl9uZXdfb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSwgdm9pZCAqb2JqZWN0KQogewogCWthc2FuX3VucG9pc29uKG9iamVjdCwgY2FjaGUtJmd0O29iamVjdF9zaXplLCBmYWxzZSk7CmRpZmYgLS1naXQgYS9tbS9rYXNhbi9rYXNhbi5oIGIvbW0va2FzYW4va2FzYW4uaAppbmRleCBmYzkxNjlhNTQ3NjYyLi4xYTJkMThjZGIyMWQ5IDEwMDY0NAotLS0gYS9tbS9rYXNhbi9rYXNhbi5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2thc2FuL2thc2FuLmgKQEAgLTE0NCwxMiAmIzQzOzE0NCwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wga2FzYW5fcmVxdWlyZXNfbWV0YSh2b2lkKQogI2RlZmluZSBLQVNBTl9QQUdFX1JFRFpPTkUJMHhGRSAgLyogcmVkem9uZSBmb3Iga21hbGxvY19sYXJnZSBhbGxvY2F0aW9uICovCiAjZGVmaW5lIEtBU0FOX1NMQUJfUkVEWk9ORQkweEZDICAvKiByZWR6b25lIGZvciBzbGFiIG9iamVjdCAqLwogI2RlZmluZSBLQVNBTl9TTEFCX0ZSRUUJCTB4RkIgIC8qIGZyZWVkIHNsYWIgb2JqZWN0ICovCiYjNDM7I2RlZmluZSBLQVNBTl9MQVpZX01NVV9QVEUJMHhGRCAgLyogZGlyZWN0IHB0ZSBhY2Nlc3MgaW4gbGF6eSBtbXUgbW9kZSAqLwogI2RlZmluZSBLQVNBTl9WTUFMTE9DX0lOVkFMSUQJMHhGOCAgLyogaW5hY2Nlc3NpYmxlIHNwYWNlIGluIHZtYXAgYXJlYSAqLwogI2Vsc2UKICNkZWZpbmUgS0FTQU5fUEFHRV9GUkVFCQlLQVNBTl9UQUdfSU5WQUxJRAogI2RlZmluZSBLQVNBTl9QQUdFX1JFRFpPTkUJS0FTQU5fVEFHX0lOVkFMSUQKICNkZWZpbmUgS0FTQU5fU0xBQl9SRURaT05FCUtBU0FOX1RBR19JTlZBTElECiAjZGVmaW5lIEtBU0FOX1NMQUJfRlJFRQkJS0FTQU5fVEFHX0lOVkFMSUQKJiM0MzsjZGVmaW5lIEtBU0FOX0xBWllfTU1VX1BURQlLQVNBTl9UQUdfSU5WQUxJRAogI2RlZmluZSBLQVNBTl9WTUFMTE9DX0lOVkFMSUQJS0FTQU5fVEFHX0lOVkFMSUQgLyogb25seSB1c2VkIGZvciBTV19UQUdTICovCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuYyBiL21tL2thc2FuL3JlcG9ydF9nZW5lcmljLmMKaW5kZXggZjViOGUzN2IzODA1Yy4uNDg5ZDRhOGQ2OTAyZCAxMDA2NDQKLS0tIGEvbW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9rYXNhbi9yZXBvcnRfZ2VuZXJpYy5jCkBAIC0xMTMsNiAmIzQzOzExMyw5IEBAIHN0YXRpYyBjb25zdCBjaGFyICpnZXRfc2hhZG93X2J1Z190eXBlKHN0cnVjdCBrYXNhbl9yZXBvcnRfaW5mbyAqaW5mbykKIAljYXNlIEtBU0FOX1NMQUJfRlJFRV9NRVRBOgogCQlidWdfdHlwZSA9ICYjMzQ7c2xhYi11c2UtYWZ0ZXItZnJlZSYjMzQ7OwogCQlicmVhazsKJiM0MzsJY2FzZSBLQVNBTl9MQVpZX01NVV9QVEU6CiYjNDM7CQlidWdfdHlwZSA9ICYjMzQ7bGF6eS1tbXUtcHRlLWFjY2VzcyYjMzQ7OwomIzQzOwkJYnJlYWs7CiAJY2FzZSBLQVNBTl9BTExPQ0FfTEVGVDoKIAljYXNlIEtBU0FOX0FMTE9DQV9SSUdIVDoKIAkJYnVnX3R5cGUgPSAmIzM0O2FsbG9jYS1vdXQtb2YtYm91bmRzJiMzNDs7CmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmMKaW5kZXggNzc1NTJiMDNkMzE4ZC4uNDQxOWQxNmIzOWY5NiAxMDA2NDQKLS0tIGEvbW0vbWFkdmlzZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21hZHZpc2UuYwpAQCAtNDUyLDcgJiM0Mzs0NTIsNyBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLAogCWlmICghc3RhcnRfcHRlKQogCQlyZXR1cm4gMDsKIAlmbHVzaF90bGJfYmF0Y2hlZF9wZW5kaW5nKG1tKTsKLQlsYXp5X21tdV9tb2RlX2VuYWJsZSgpOwomIzQzOwlsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgc3RhcnRfcHRlKTsKIAlmb3IgKDsgYWRkciAmbHQ7IGVuZDsgcHRlICYjNDM7PSBuciwgYWRkciAmIzQzOz0gbnIgKiBQQUdFX1NJWkUpIHsKIAkJbnIgPSAxOwogCQlwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7CkBAIC01MDcsNyAmIzQzOzUwNyw3IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsCiAJCQkJaWYgKCFzdGFydF9wdGUpCiAJCQkJCWJyZWFrOwogCQkJCWZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pOwotCQkJCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CiYjNDM7CQkJCWxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgYWRkciwgZW5kLCBzdGFydF9wdGUpOwogCQkJCWlmICghZXJyKQogCQkJCQluciA9IDA7CiAJCQkJY29udGludWU7CkBAIC02NzQsNyAmIzQzOzY3NCw3IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJaWYgKCFzdGFydF9wdGUpCiAJCXJldHVybiAwOwogCWZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pOwotCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CiYjNDM7CWxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgYWRkciwgZW5kLCBzdGFydF9wdGUpOwogCWZvciAoOyBhZGRyICE9IGVuZDsgcHRlICYjNDM7PSBuciwgYWRkciAmIzQzOz0gUEFHRV9TSVpFICogbnIpIHsKIAkJbnIgPSAxOwogCQlwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7CkBAIC03MzQsNyAmIzQzOzczNCw3IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkJaWYgKCFzdGFydF9wdGUpCiAJCQkJCWJyZWFrOwogCQkJCWZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pOwotCQkJCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CiYjNDM7CQkJCWxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgYWRkciwgZW5kLCBwdGUpOwogCQkJCWlmICghZXJyKQogCQkJCQluciA9IDA7CiAJCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDZiODI4MGNmYzFkYmUuLjBjYzA3YjA0MzM4NGIgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC0xMjcyLDcgJiM0MzsxMjcyLDcgQEAgY29weV9wdGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsCiAJc3Bpbl9sb2NrX25lc3RlZChzcmNfcHRsLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAJb3JpZ19zcmNfcHRlID0gc3JjX3B0ZTsKIAlvcmlnX2RzdF9wdGUgPSBkc3RfcHRlOwotCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CiYjNDM7CWxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhzcmNfbW0sIGFkZHIsIGVuZCwgc3JjX3B0ZSk7CiAKIAlkbyB7CiAJCW5yID0gMTsKQEAgLTE5MjIsNyAmIzQzOzE5MjIsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB6YXBfcHRlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsCiAJCXJldHVybiBhZGRyOwogCiAJZmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyhtbSk7Ci0JbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKJiM0MzsJbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIHN0YXJ0X3B0ZSk7CiAJZG8gewogCQlib29sIGFueV9za2lwcGVkID0gZmFsc2U7CiAKQEAgLTI5MTksNyAmIzQzOzI5MTksNyBAQCBzdGF0aWMgaW50IHJlbWFwX3B0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwKIAltYXBwZWRfcHRlID0gcHRlID0gcHRlX2FsbG9jX21hcF9sb2NrKG1tLCBwbWQsIGFkZHIsICZhbXA7cHRsKTsKIAlpZiAoIXB0ZSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKJiM0MzsJbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIG1hcHBlZF9wdGUpOwogCWRvIHsKIAkJQlVHX09OKCFwdGVfbm9uZShwdGVwX2dldChwdGUpKSk7CiAJCWlmICghcGZuX21vZGlmeV9hbGxvd2VkKHBmbiwgcHJvdCkpIHsKQEAgLTMzMzAsNyAmIzQzOzMzMzAsNyBAQCBzdGF0aWMgaW50IGFwcGx5X3RvX3B0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CiYjNDM7CWxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgYWRkciwgZW5kLCBtYXBwZWRfcHRlKTsKIAogCWlmIChmbikgewogCQlkbyB7CmRpZmYgLS1naXQgYS9tbS9tcHJvdGVjdC5jIGIvbW0vbXByb3RlY3QuYwppbmRleCA5Y2JmOTMyYjAyOGNmLi4zZmMyNjQxOGU4MzdkIDEwMDY0NAotLS0gYS9tbS9tcHJvdGVjdC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21wcm90ZWN0LmMKQEAgLTMzNyw3ICYjNDM7MzM3LDcgQEAgc3RhdGljIGxvbmcgY2hhbmdlX3B0ZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLAogCQlpc19wcml2YXRlX3NpbmdsZV90aHJlYWRlZCA9IHZtYV9pc19zaW5nbGVfdGhyZWFkZWRfcHJpdmF0ZSh2bWEpOwogCiAJZmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyh2bWEtJmd0O3ZtX21tKTsKLQlsYXp5X21tdV9tb2RlX2VuYWJsZSgpOwomIzQzOwlsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXModm1hLSZndDt2bV9tbSwgYWRkciwgZW5kLCBwdGUpOwogCWRvIHsKIAkJbnJfcHRlcyA9IDE7CiAJCW9sZHB0ZSA9IHB0ZXBfZ2V0KHB0ZSk7CmRpZmYgLS1naXQgYS9tbS9tcmVtYXAuYyBiL21tL21yZW1hcC5jCmluZGV4IGU5YzhiMWQwNTgzMmIuLjBkZmUzZGUzOWNjYzcgMTAwNjQ0Ci0tLSBhL21tL21yZW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21yZW1hcC5jCkBAIC0yNjAsNyAmIzQzOzI2MCw3IEBAIHN0YXRpYyBpbnQgbW92ZV9wdGVzKHN0cnVjdCBwYWdldGFibGVfbW92ZV9jb250cm9sICpwbWMsCiAJaWYgKG5ld19wdGwgIT0gb2xkX3B0bCkKIAkJc3Bpbl9sb2NrX25lc3RlZChuZXdfcHRsLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAJZmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyh2bWEtJmd0O3ZtX21tKTsKLQlsYXp5X21tdV9tb2RlX2VuYWJsZSgpOwomIzQzOwlsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIG9sZF9hZGRyLCBvbGRfZW5kLCBvbGRfcHRlcCk7CiAKIAlmb3IgKDsgb2xkX2FkZHIgJmx0OyBvbGRfZW5kOyBvbGRfcHRlcCAmIzQzOz0gbnJfcHRlcywgb2xkX2FkZHIgJiM0Mzs9IG5yX3B0ZXMgKiBQQUdFX1NJWkUsCiAJCW5ld19wdGVwICYjNDM7PSBucl9wdGVzLCBuZXdfYWRkciAmIzQzOz0gbnJfcHRlcyAqIFBBR0VfU0laRSkgewpkaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jCmluZGV4IGY0ZmEyMjdhOGQ3ZjAuLjFjNmVmOGZkMDc5ZTAgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bWFsbG9jLmMKQEAgLTEwOSw3ICYjNDM7MTA5LDcgQEAgc3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCWlmICghcHRlKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CiYjNDM7CWxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcygmYW1wO2luaXRfbW0sIGFkZHIsIGVuZCwgcHRlKTsKIAogCWRvIHsKIAkJaWYgKHVubGlrZWx5KCFwdGVfbm9uZShwdGVwX2dldChwdGUpKSkpIHsKQEAgLTM5Myw3ICYjNDM7MzkzLDcgQEAgc3RhdGljIHZvaWQgdnVubWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IFBBR0VfU0laRTsKIAogCXB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcik7Ci0JbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKJiM0MzsJbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKCZhbXA7aW5pdF9tbSwgYWRkciwgZW5kLCBwdGUpOwogCiAJZG8gewogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKQEAgLTU2MCw3ICYjNDM7NTYwLDcgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJaWYgKCFwdGUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKJiM0MzsJbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKCZhbXA7aW5pdF9tbSwgYWRkciwgZW5kLCBwdGUpOwogCiAJZG8gewogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBhZ2VzWypucl07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDA0CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gdGhlIExhenkgTU1VIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgbmV3IHBhdGNoIHNlcmllcyBoZXJlIHRhcmdldGluZyB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIGFuZCBpdCBzZWVtcyB0byBiZSBhYm91dCBpbXBsZW1lbnRpbmcgYSAmIzM0O2xhenkgTU1VJiMzNDsgbW9kZS4gSW50ZXJlc3RpbmchIFRoZSBsaXN0IG9mIG1vZGlmaWVkIGZpbGVzIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgYXR0ZW50aW9uOiBgbGF6eV9tbXUuY2AsIG9mIGNvdXJzZSwgYnV0IGFsc28gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmaWxlcyBsaWtlIGBwZ3RhYmxlLmhgLCBgbWFkdmlzZS5jYCwgYG1lbW9yeS5jYCwgYW5kIGV2ZW4gS0FTQU4tcmVsYXRlZCBjb2RlLiBUaGlzIHN1Z2dlc3RzIGEgcHJldHR5IGZ1bmRhbWVudGFsIHNoaWZ0IGluIGhvdyBtZW1vcnkgbWFuYWdlbWVudCBpcyBoYW5kbGVkLCBwb3RlbnRpYWxseSBpbXBhY3RpbmcgYSB3aWRlIHJhbmdlIG9mIG9wZXJhdGlvbnMuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGNlbnRlciBhcm91bmQgYGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlc2AgY2FsbGluZyBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCB0byBhY3RpdmF0ZSB0aGlzIG5ldyBtb2RlLiBBbmQgaXQgbG9va3MgbGlrZSB0aGUgczM5MCBpbXBsZW1lbnRhdGlvbiBpbiBgYXJjaC9zMzkwL21tL2xhenlfbW11LmNgIGlzIGxldmVyYWdpbmcgZmFjaWxpdHkgMTMsIHRoZSBJUFRFLXJhbmdlIGZhY2lsaXR5LCB0byBoYW5kbGUgUFRFIGludmFsaWRhdGlvbnMgaW4gYmF0Y2hlcy4gVGhhdCYjMzk7cyBhIGNsZXZlciBhcHByb2FjaCwgYXNzdW1pbmcgaXQmIzM5O3MgZG9uZSBlZmZpY2llbnRseS4KCk5vdywgbXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBJcyB0aGlzIGdvaW5nIHRvIHdvcmsgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzPyBUaGUgZmFjdCB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBpbiBgY29yZSBtbS9gIGFuZCBgYXJjaC9zMzkwL21tL2AgdGVsbHMgbWUgaXQgY291bGQgYmUsIGJ1dCB5b3UgbmV2ZXIga25vdy4gVGhhbmtmdWxseSwgdGhlIHRleHQgZXhwbGljaXRseSBtZW50aW9ucyB0aGF0IHMzOTB4IFFFTVUvS1ZNIHN1cHBvcnRzIGZhY2lsaXR5IDEzIChJUFRFLXJhbmdlKSwgc28gdGhhdCYjMzk7cyBhIGNoZWNrIGluIHRoZSBhZmZpcm1hdGl2ZS4gVGhhdCYjMzk7cyBhIGh1Z2UgcmVsaWVmLgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaW1wbGljYXRpb25zLiBJIHNlZSBhIGBzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERWAgaW4gYGFyY2gvczM5MC9LY29uZmlnYC4gVGhhdCYjMzk7cyBhIGNsZWFyIGluZGljYXRvciB0aGF0IHRoZXJlJiMzOTtzIHByb2JhYmx5IGEgY29ycmVzcG9uZGluZyBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgd2hhdCB0aGlzIG1vZGUgKmVuYWJsZXMqIGFuZCAqZGlzYWJsZXMqLiBUaW1lIHRvIGdyZXAgdGhlIGNvZGUgZm9yIGBBUkNIX0hBU19MQVpZX01NVV9NT0RFYCBvciBzb21ldGhpbmcgc2ltaWxhciB0byBmaW5kIHRoZSBhY3R1YWwgY29uZmlnIG5hbWUuIEkgbmVlZCB0byBrbm93IGV4YWN0bHkgd2hhdCBuZWVkcyB0byBiZSBlbmFibGVkIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoaXMgbmV3IGxhenkgTU1VIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QVJDSF9IQVNfTEFaWV9NTVVfTU9ERSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcbi0tXG5hcmNoL2FybTY0L0tjb25maWctMzYtXHRzZWxlY3QgQVJDSF9IQVNfS0VFUElOSVRSRFxuYXJjaC9hcm02NC9LY29uZmlnOjM3Olx0c2VsZWN0IEFSQ0hfSEFTX0xBWllfTU1VX01PREVcbmFyY2gvYXJtNjQvS2NvbmZpZy0zOC1cdHNlbGVjdCBBUkNIX0hBU19NRU1CQVJSSUVSX1NZTkNfQ09SRVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlPTgzPWNvbmZpZyBQUENfQk9PSzNTXzY0XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUtOTUtXHRzZWxlY3QgS0FTQU5fVk1BTExPQyBpZiBLQVNBTlxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGU6OTY6XHRzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUtOTctXG4tLVxuYXJjaC9zMzkwL0tjb25maWc9NzU9Y29uZmlnIFMzOTBcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy05OS1cdHNlbGVjdCBBUkNIX0hBU19LQ09WXG5hcmNoL3MzOTAvS2NvbmZpZzoxMDA6XHRzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERVxuYXJjaC9zMzkwL0tjb25maWctMTAxLVx0c2VsZWN0IEFSQ0hfSEFTX01FTUJBUlJJRVJfU1lOQ19DT1JFXG4tLVxuYXJjaC9zcGFyYy9LY29uZmlnPTcwPWNvbmZpZyBTUEFSQzY0XG4tLVxuYXJjaC9zcGFyYy9LY29uZmlnLTExNC1cdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1NDSEVEX01DICBpZiBTTVBcbmFyY2gvc3BhcmMvS2NvbmZpZzoxMTU6XHRzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERVxuYXJjaC9zcGFyYy9LY29uZmlnLTExNi1cdHNlbGVjdCBIQVZFX0dFTkVSSUNfVkRTT1xuLS1cbmFyY2gveDg2L0tjb25maWc9ODA1PWNvbmZpZyBQQVJBVklSVF9YWExcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTgwNy1cdGRlcGVuZHMgb24gWDg2XzY0XG5hcmNoL3g4Ni9LY29uZmlnOjgwODpcdHNlbGVjdCBBUkNIX0hBU19MQVpZX01NVV9NT0RFXG5hcmNoL3g4Ni9LY29uZmlnLTgwOS1cbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5oLTEzLSN1bmRlZiBDT05GSUdfUEFSQVZJUlRfU1BJTkxPQ0tTXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5oOjE0OiN1bmRlZiBDT05GSUdfQVJDSF9IQVNfTEFaWV9NTVVfTU9ERVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuaC0xNS0jdW5kZWYgQ09ORklHX0tBU0FOXG4tLVxuYXJjaC94ODYvYm9vdC9zdGFydHVwL3NtZS5jLTI2LSN1bmRlZiBDT05GSUdfUEFSQVZJUlRfU1BJTkxPQ0tTXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvc21lLmM6Mjc6I3VuZGVmIENPTkZJR19BUkNIX0hBU19MQVpZX01NVV9NT0RFXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvc21lLmMtMjgtXG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MTkwPXN0YXRpYyBpbmxpbmUgaW50IHBtZF9kaXJ0eShwbWRfdCBwbWQpXG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjQ3LSAqL1xuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MjQ4OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfTEFaWV9NTVVfTU9ERVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjQ5LS8qKlxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaD04MjY9c3RydWN0IHRhc2tfc3RydWN0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTQzOC1cbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxNDM5OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfTEFaWV9NTVVfTU9ERVxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE0NDAtXHRzdHJ1Y3QgbGF6eV9tbXVfc3RhdGVcdFx0bGF6eV9tbXVfc3RhdGU7XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oPTE3MjQ9c3RhdGljIGlubGluZSBjaGFyIHRhc2tfc3RhdGVfdG9fY2hhcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTcyOC1cbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxNzI5OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfTEFaWV9NTVVfTU9ERVxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE3MzAtLyoqXG4tLVxubW0vS2NvbmZpZz0xNDkwPWNvbmZpZyBGSU5EX05PUk1BTF9QQUdFXG4tLVxubW0vS2NvbmZpZy0xNDkyLVxubW0vS2NvbmZpZzoxNDkzOmNvbmZpZyBBUkNIX0hBU19MQVpZX01NVV9NT0RFXG5tbS9LY29uZmlnLTE0OTQtXHRib29sXG4tLVxubW0vS2NvbmZpZz0xNTAwPWNvbmZpZyBMQVpZX01NVV9NT0RFX0tVTklUX1RFU1Rcbm1tL0tjb25maWctMTUwMS1cdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciB0aGUgbGF6eSBNTVUgbW9kZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9LY29uZmlnOjE1MDI6XHRkZXBlbmRzIG9uIEFSQ0hfSEFTX0xBWllfTU1VX01PREVcbm1tL0tjb25maWctMTUwMy1cdGRlcGVuZHMgb24gS1VOSVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM2OQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDYzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExhenkgTU1VIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGludHJvZHVjaW5nIGBDT05GSUdfTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUYC4gVGhlIGluaXRpYWwgY2x1ZSBpcyB0aGUgYWRkaXRpb24gb2YgYGxhenlfbW11LmNgIHRvIHRoZSBgYXJjaC9zMzkwL21tL01ha2VmaWxlYC4gSXQmIzM5O3MgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5LCBzbyBpdCYjMzk7cyBhbHdheXMgaW5jbHVkZWQgd2hlbiB0aGUga2VybmVsIGlzIGJ1aWx0IGZvciBzMzkwLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgaW50ZXJhY3Rpb24gd2l0aCBLQVNBTiwgYW5kIHllcCwgdGhlcmUgYXJlIGNoYW5nZXMgdG8gYGluY2x1ZGUvbGludXgva2FzYW4uaGAgYW5kIGBtbS9rYXNhbi9jb21tb24uY2AsIHNwZWNpZmljYWxseSBhZGRpbmcgYF9fa2FzYW5fcG9pc29uX3B0ZWAsIGBfX2thc2FuX3VucG9pc29uX3B0ZWAsIGFuZCBgS0FTQU5fTEFaWV9NTVVfUFRFYC4gVGhpcyBtZWFucyBgQ09ORklHX0tBU0FOYCBpcyBnb2luZyB0byBiZSByZWxldmFudCB3aGVuIHRlc3RpbmcuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvcmUgb2YgYGFyY2gvczM5MC9tbS9sYXp5X21tdS5jYC4gVGhlIHBhdGNoIGludHJvZHVjZXMgdGhlc2UgZnVuY3Rpb25zOiBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlYCwgYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXNgLCBgYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlYCwgYGFyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZWAsIGBfX2xhenlfbW11X3NldF9wdGVgLCBgX19sYXp5X21tdV9wdGVwX2dldGAsIGBfX2xhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmdgLCBgX19sYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXJgLCBgX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X3N0YXJ0YCwgYF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9jb21taXRgLCBhbmQgYF9fbGF6eV9tbXVfcHRlcF9zZXRfd3Jwcm90ZWN0YC4KClRoZXNlIGZ1bmN0aW9ucyBhcmUga2V5IGJlY2F1c2UgdGhleSBhcmUgaW52b2tlZCBmcm9tIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oYCBpbmxpbmUgZnVuY3Rpb25zIGxpa2UgYGxhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmdgLCBgc2V0X3B0ZWAsIGBwdGVwX2dldGAsIGV0Yy4gVGhlc2UgYXJlICp2ZXJ5KiBob3QgcGF0aCBmdW5jdGlvbnMuIFRoZSBgX19sYXp5X21tdV8qYCB2YXJpYW50cyBhcmUgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbnMuIFRoZSBwcm9tcHQgd2FudHMgbWUgdG8gYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zLiBXaGlsZSB0aGUgYF9fbGF6eV9tbXVfKmAgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBhbmQgbm90IGlubGluZWQsIHRoZXkgYXJlIGNhbGxlZCBvbiAqZXZlcnkqIFBURSBvcGVyYXRpb24gd2hlbiB0aGUgbGF6eSBNTVUgaXMgYWN0aXZlLiBUZWNobmljYWxseSB0aGV5IGFyZSBub3Qgc3RhdGljLCBhbmQgbm90IGlubGluZWQgYnV0IHRoZXkgYXJlIGhvdC1wYXRoLiAKCkhvd2V2ZXIsIGBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzYCwgYGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZWAsIGFuZCBgYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlYCBhcmUgZ29vZCBlbnRyeSBwb2ludHMgdGhhdCBzaG91bGQgYmUgdGVzdGVkIGJlY2F1c2UgdGhleSBhcmUgdGhlIGVudHJ5IHBvaW50cyB0byB0aGUgbGF6eSBNTVUgbW9kZS4KSSYjMzk7bGwga2VlcCBgYXJjaC9zMzkwL21tL2xhenlfbW11LmNgIG9wZW4gYXMgSSBjb250aW51ZSB0byBleGFtaW5lIHRoZSBleGFjdCBmdW5jdGlvbnMgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MTI0OT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19wdGVwX2lwdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgbnIsXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xMjYyLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMjYzOnZvaWQgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTI2NC1cdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEyNjctXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjEyNjg6dm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGUodm9pZCk7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEyNjktdm9pZCBhcmNoX2xlYXZlX2xhenlfbW11X21vZGUodm9pZCk7XG4tLVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM9MTkwPXN0YXRpYyB2b2lkIGZsdXNoX2xhenlfbW11X21vZGUodm9pZClcbi0tXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0yMTItXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYzoyMTM6dm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGUodm9pZClcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTIxNC17XG4tLVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM9MjE3PUVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKTtcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTIxOC1cbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jOjIxOTp2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0yMjAtXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90bGJmbHVzaF82NC5oPTQxPXZvaWQgZmx1c2hfdGxiX3BlbmRpbmcodm9pZCk7XG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYmZsdXNoXzY0Lmg6NDI6dm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGUodm9pZCk7XG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYmZsdXNoXzY0LmgtNDMtdm9pZCBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUodm9pZCk7XG4tLVxuYXJjaC9zcGFyYy9tbS90bGIuYz0yNT12b2lkIGZsdXNoX3RsYl9wZW5kaW5nKHZvaWQpXG4tLVxuYXJjaC9zcGFyYy9tbS90bGIuYy01NC1cbmFyY2gvc3BhcmMvbW0vdGxiLmM6NTU6dm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGUodm9pZClcbmFyY2gvc3BhcmMvbW0vdGxiLmMtNTYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzU5CgkJCQkJCQlvdXRwdXQ6IDc0CgkJCQkJCQl0aG91Z2h0czogNDA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIGluamVjdCBmdXp6aW5nIGludG8gdGhpcyBsYXp5IE1NVSBpbXBsZW1lbnRhdGlvbi4gVGhlIGdvYWwsIGFzIGFsd2F5cywgaXMgdG8gZmluZCBnb29kIGNhbmRpZGF0ZXMgdGhhdCBhcmUgYm90aCBpbXBhY3RmdWwgYW5kIHdvbiYjMzk7dCBsZWFkIHRvIHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMgYnkgZm9jdXNpbmcgb24gdGhlIGluc2FuZWx5IGhvdCBwYXRocy4KCkluaXRpYWxseSwgSSBjb25zaWRlcmVkIHRoZSBjb3JlIFBURSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zOiBgX19sYXp5X21tdV9zZXRfcHRlYCwgYF9fbGF6eV9tbXVfcHRlcF9nZXRgLCBgX19sYXp5X21tdV9wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nYCwgYW5kIHRoZSBvdGhlcnMuIFRoZXNlIGFyZSB0aGUgd29ya2hvcnNlcyDigJMgZGlyZWN0IG9wZXJhdGlvbnMgb24gcGFnZSB0YWJsZSBlbnRyaWVzLiBCdXQgdGhlbiB0aGUgcHJvbXB0IHJlbWluZGVkIG1lIHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBhbmQgdGhlc2UgYXJlICpkZWZpbml0ZWx5KiBob3QgcGF0aCwgY2FsbGVkIHJlcGVhdGVkbHkgZm9yIGV2ZXJ5IHNpbmdsZSBwYWdlIGFjY2Vzcy4gU28sIHNjcmF0Y2ggdGhvc2UuCgpIb3dldmVyLCBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc2AgY2F1Z2h0IG15IGV5ZSBhZ2Fpbi4gV2hpbGUgbm90IGRpcmVjdGx5IG9wZXJhdGluZyBvbiBpbmRpdmlkdWFsIHBhZ2VzLCBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIG9wZXJhdGlvbnMgdGhhdCAqbWFuYWdlKiB2aXJ0dWFsIG1lbW9yeSByYW5nZXMg4oCTIHRoaW5ncyBsaWtlIGBtYWR2aXNlYCwgYG1wcm90ZWN0YCwgYG1yZW1hcGAsIGB2bWFsbG9jYCwgYW5kIHdoYXQgbG9va3MgbGlrZSBgdGFza19tbXUuY2AuIFRoZXNlIGFyZSBzeXNjYWxscywgbm90IHRoZSBzdHVmZiB0aGF0JiMzOTtzIGhhcHBlbmluZyBvbiBldmVyeSBzaW5nbGUgbWVtb3J5IGFjY2Vzcy4gQW5kLCBsb29raW5nIGF0IHRoZSBjb2RlLCBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc2Agc2VlbXMgdG8gYmUgaW52b2tlZCBvbmNlIHBlciBWTUEgcmFuZ2Ugb3BlcmF0aW9uLiBUaGF0IG1ha2VzIGl0IGEgc29saWQgY2FuZGlkYXRlLiBJdCBiYWxhbmNlcyBpbXBhY3Qgd2l0aCBhdm9pZGluZyB0aGUgdHJ1bHkgaW5zYW5lIGhvdCBwYXRoLgoKTm93LCBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSB0byBjb25maXJtIG15IGluaXRpYWwgdGhvdWdodHMuIEkmIzM5O2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgYGFyY2gvczM5MC9tbS9sYXp5X21tdS5jYCBzb3VyY2UgZmlsZSB0byBzZWUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIGl0cyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRoYXQmIzM5O2xsIHByb3ZpZGUgYSBiZXR0ZXIgb3ZlcmFsbCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCguKlxcKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9tbS9sYXp5X21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9tbS9sYXp5X21tdS5jPTExPXN0cnVjdCBpcHRlX3JhbmdlIHtcbi0tXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0yMC1cbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jOjIxOnN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgaXB0ZV9yYW5nZSAqLCBpcHRlX3JhbmdlKTtcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTIyLVxuLS1cbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jPTE5MD1zdGF0aWMgdm9pZCBmbHVzaF9sYXp5X21tdV9tb2RlKHZvaWQpXG4tLVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMjEyLVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM6MjEzOnZvaWQgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKHZvaWQpXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0yMTQte1xuLS1cbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jPTIyNT1FWFBPUlRfU1lNQk9MX0lGX0tVTklUKGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMpO1xuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMjI2LVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM6MjI3OnZvaWQgYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKHZvaWQpXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0yMjgte1xuLS1cbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jPTIzMT1FWFBPUlRfU1lNQk9MX0lGX0tVTklUKGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSk7XG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0yMzItXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYzoyMzM6dm9pZCBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUodm9pZClcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTIzNC17XG4tLVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM9MjczPXN0YXRpYyBzdHJ1Y3QgaXB0ZV9yYW5nZSAqdGhpc19pcHRlX3JhbmdlKHB0ZV90ICpwdGVwKVxuLS1cbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTI4Ny1cbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jOjI4ODpib29sIF9fbGF6eV9tbXVfc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMjg5LXtcbi0tXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0zMDAtXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYzozMDE6Ym9vbCBfX2xhenlfbW11X3B0ZXBfZ2V0KHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMzAyLXtcbi0tXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0zMTMtXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYzozMTQ6Ym9vbCBfX2xhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgaW50ICpyZXMpXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0zMTUte1xuLS1cbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTMzMC1cbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jOjMzMTpib29sIF9fbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0zMzIte1xuLS1cbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTM0Ny1cbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jOjM0ODpib29sIF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMzQ5LXtcbi0tXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYz0zNTM9Ym9vbCBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4tLVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMzY2LVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM6MzY3OmJvb2wgX19sYXp5X21tdV9wdGVwX3NldF93cnByb3RlY3QodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTM2OC17XG4tLVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMzg0LVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM6Mzg1OmludCBsYXp5X21tdV9vbmxpbmVfY3B1KGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGNwdSlcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTM4Ni17XG4tLVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtNDAyLVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM6NDAzOnZvaWQgbGF6eV9tbXVfb2ZmbGluZV9jcHUodW5zaWduZWQgaW50IGNwdSlcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTQwNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1MzgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBMYXp5IE1NVSBNb2RlIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHByb3Bvc2VkIGxhenkgTU1VIG1vZGUgaW1wbGVtZW50YXRpb24uIEZyb20gdGhlIGluaXRpYWwgc2NhbiwgYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZWAsIGBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzYCwgYGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZWAsIGFuZCBgYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlYCBhbGwgc2VlbSBsaWtlIHByb21pc2luZyBjYW5kaWRhdGVzIGZvciBtb2RpZmljYXRpb24uIFRoZSBDUFUgb25saW5lL29mZmxpbmUgZnVuY3Rpb25zLCBgbGF6eV9tbXVfb25saW5lX2NwdWAgYW5kIGBsYXp5X21tdV9vZmZsaW5lX2NwdWAsIGFsc28gYXBwZWFyIHJlbGV2YW50LiBIb3dldmVyLCBJIG5lZWQgdG8gYmUgY2F1dGlvdXMgYWJvdXQgZnVuY3Rpb25zIGxpa2UgYF9fbGF6eV9tbXVfc2V0X3B0ZWAgYW5kIHNpbWlsYXIgbG93ZXItbGV2ZWwgUFRFIG1hbmlwdWxhdGlvbiByb3V0aW5lcy4gV2hpbGUgdGhleSBhcmUgY2FsbGVkIGZyb20gYHNldF9wdGVgLCB3aGljaCBpcyBhIG5vdG9yaW91c2x5IGhvdCBwYXRoLCBtb2RpZnlpbmcgdGhlbSBjb3VsZCBpbnRyb2R1Y2Ugc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMuIEkmIzM5O2xsIGV4Y2x1ZGUgdGhlbSBmcm9tIGluaXRpYWwgY29uc2lkZXJhdGlvbiB0byBhdm9pZCBhbnkgaW1tZWRpYXRlIGltcGFjdC4KCk5vdywgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEdpdmVuIHRoZSBjb250ZXh0LCBgQ09ORklHX0tBU0FOYCBpcyBvYnZpb3VzbHkgbmVlZGVkIHRvIGVuYWJsZSBLQVNBTi1yZWxhdGVkIGNoYW5nZXMsIGJ1dCBhcmUgdGhlcmUgbW9yZSBzcGVjaWZpYyBLQVNBTiBjb25maWd1cmF0aW9ucyBpbnZvbHZlZCwgc3VjaCBhcyBgQ09ORklHX0tBU0FOX0dFTkVSSUNgIG9yIGBDT05GSUdfS0FTQU5fU1dfVEFHU2AgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IFRoZSBwYXRjaCB0b3VjaGVzIGBtbS9rYXNhbi9jb21tb24uY2AgYW5kIGBpbmNsdWRlL2xpbnV4L2thc2FuLmhgLCB3aGljaCBzdWdnZXN0cyBLQVNBTiBpbnRlZ3JhdGlvbiBpcyBjcnVjaWFsIHRvIHRoZSBkZXNpZ24uIFRoZSBhZGRpdGlvbiBvZiBgX19rYXNhbl9wb2lzb25fcHRlYCBhbmQgYF9fa2FzYW5fdW5wb2lzb25fcHRlYCBmdW5jdGlvbnMgcmVpbmZvcmNlcyB0aGlzLgoKSSYjMzk7bGwgc3BlY2lmaWNhbGx5IG5lZWQgdG8gZXhhbWluZSBgbW0va2FzYW4vY29tbW9uLmNgIGluIGRldGFpbCB0byBjb25maXJtIHRoYXQgdGhlIHJlbGV2YW50IHNlY3Rpb25zIGFyZSBpbmRlZWQgY29tcGlsZWQgb25seSB3aGVuIGBDT05GSUdfS0FTQU5gIGlzIGRlZmluZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCB0byBlbnN1cmUgd2UgZG9uJiMzOTt0IGludHJvZHVjZSBLQVNBTi1zcGVjaWZpYyBjb2RlIGludG8gbm9uLUtBU0FOIGJ1aWxkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteb2JqLVxcJFxcKENPTkZJR19LQVNBTlxcKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2thc2FuL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyNTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBwcm92aWRlZCB0ZXh0OgoKKipEaXZpbmcgaW50byB0aGUgS0FTQU4gTWFrZWZpbGUqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYG1tL2thc2FuL01ha2VmaWxlYC4gSSBrbm93IHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyIChLQVNBTikgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gcmVzaWRlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQmIzM5O3MgZGVmaW5lZCB0aGVyZSwgYW5kIGhvdyB0aGV5IGhvb2sgaW50byB0aGUgYnJvYWRlciBidWlsZCBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQ6CgoqICAgKipRdWlja2x5IHNjYW4gZm9yIGtleSB2YXJpYWJsZXM6KiogSSBleHBlY3QgdG8gZmluZCBmbGFncyByZWxhdGVkIHRvIGNvbXBpbGVyIG9wdGlvbnMsIG9iamVjdCBmaWxlIGluY2x1c2lvbiwgYW5kIHBvdGVudGlhbGx5IHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgb3Igc3BlY2lmaWMgS0FTQU4gZmVhdHVyZXMuCiogICAqKkxvb2sgZm9yIGRlcGVuZGVuY2llczoqKiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBNYWtlZmlsZSBpbnRlcmFjdHMgd2l0aCBvdGhlciBgTWFrZWZpbGVzYCBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgKGBtbWApIGRpcmVjdG9yeSBhbmQgcG90ZW50aWFsbHkgaGlnaGVyIHVwIGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgaGllcmFyY2h5LiBXaGF0IGRvZXMgaXQgZGVwZW5kIG9uLCBhbmQgd2hhdCBkb2VzIGl0IHByb3ZpZGU/CiogICAqKkZvY3VzIG9uIHRoZSBidWlsZCB0YXJnZXRzOioqIEFyZSB0aGVyZSBzcGVjaWZpYyB0YXJnZXRzIGRlZmluZWQgZm9yIGRpZmZlcmVudCBLQVNBTiBjb21wb25lbnRzLCBvciBpcyBpdCBhIG1vcmUgbW9ub2xpdGhpYyBidWlsZCBhcHByb2FjaD8gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgbW9kdWxhciB0aGUgS0FTQU4gaW1wbGVtZW50YXRpb24gaXMuCiogICAqKklkZW50aWZ5IHBvdGVudGlhbCBlbnRyeSBwb2ludHM6KiogTG9vayBmb3Igd2hlcmUgdGhlIEtBU0FOIGNvZGUgZ2V0cyBpbnRlZ3JhdGVkIGR1cmluZyBrZXJuZWwgY29tcGlsYXRpb24sIHdoaWNoIGNvdWxkIGJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lLgoKRXNzZW50aWFsbHksIEkgd2FudCB0byBmb3JtIGEgbWVudGFsIG1vZGVsIG9mIEtBU0FOJiMzOTtzIGJ1aWxkIHByb2Nlc3Mgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBmcmFtZXdvcmsuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9rYXNhbi9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRLQVNBTl9TQU5JVElaRSA6PSBuXG4gICAzOlx0VUJTQU5fU0FOSVRJWkUgOj0gblxuICAgNDpcdEtDT1ZfSU5TVFJVTUVOVCA6PSBuXG4gICA1Olx0XG4gICA2Olx0IyBEaXNhYmxlIGZ0cmFjZSB0byBhdm9pZCByZWN1cnNpb24uXG4gICA3Olx0Q0ZMQUdTX1JFTU9WRV9jb21tb24ubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxuICAgODpcdENGTEFHU19SRU1PVkVfZ2VuZXJpYy5vID0gJChDQ19GTEFHU19GVFJBQ0UpXG4gICA5Olx0Q0ZMQUdTX1JFTU9WRV9pbml0Lm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcbiAgMTA6XHRDRkxBR1NfUkVNT1ZFX3F1YXJhbnRpbmUubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxuICAxMTpcdENGTEFHU19SRU1PVkVfcmVwb3J0Lm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcbiAgMTI6XHRDRkxBR1NfUkVNT1ZFX3JlcG9ydF9nZW5lcmljLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcbiAgMTM6XHRDRkxBR1NfUkVNT1ZFX3JlcG9ydF9od190YWdzLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcbiAgMTQ6XHRDRkxBR1NfUkVNT1ZFX3JlcG9ydF9zd190YWdzLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcbiAgMTU6XHRDRkxBR1NfUkVNT1ZFX3NoYWRvdy5vID0gJChDQ19GTEFHU19GVFJBQ0UpXG4gIDE2Olx0Q0ZMQUdTX1JFTU9WRV9od190YWdzLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcbiAgMTc6XHRDRkxBR1NfUkVNT1ZFX3N3X3RhZ3MubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxuICAxODpcdFxuICAxOTpcdCMgRnVuY3Rpb24gc3BsaXR0ZXIgY2F1c2VzIHVubmVjZXNzYXJ5IHNwbGl0cyBpbiBfX2FzYW5fbG9hZDEvX19hc2FuX3N0b3JlMVxuICAyMDpcdCMgc2VlOiBodHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD02MzUzM1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDAyMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LiBIZXJlJiMzOTtzIGEgc3VtbWFyeToKCioqRGlnZ2luZyBEZWVwZXI6IFRoZSBVcmdlIHRvIFVuZGVyc3RhbmQqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBpcyBjbGVhcjogSSBuZWVkIHRvIGRlbHZlIGZ1cnRoZXIuIEl0JiMzOTtzIHRoYXQgaW1tZWRpYXRlLCBhbG1vc3QgaW52b2x1bnRhcnkgcmVhY3Rpb24gSSBnZXQgd2hlbiBwcmVzZW50ZWQgd2l0aCBzb21ldGhpbmcgbmV3LCBzb21ldGhpbmcgdGhhdCBzcGFya3MgbXkgY3VyaW9zaXR5LiBNeSBleHBlcmllbmNlIGhhcyB0YXVnaHQgbWUgdGhhdCBpbml0aWFsIHN1cmZhY2UgaW1wcmVzc2lvbnMgYXJlIHJhcmVseSBlbm91Z2guIFRoZXJlJiMzOTtzIGFsd2F5cyBhIGhpZGRlbiBjb21wbGV4aXR5LCBhIG51YW5jZSwgYSBkZWVwZXIgbGF5ZXIgb2YgbWVhbmluZyB3YWl0aW5nIHRvIGJlIHVuY292ZXJlZC4gUmVhZGluZyBtb3JlLCBhbmFseXppbmcgbW9yZSwgaW52ZXN0aWdhdGluZyBtb3JlIOKAkyB0aGF0JiMzOTtzIHRoZSBvbmx5IHdheSB0byB0cnVseSBncmFzcCB0aGUgc3ViamVjdCBhdCBoYW5kIGFuZCBhc3Nlc3MgaXRzIHNpZ25pZmljYW5jZSB3aXRoaW4gdGhlIGJyb2FkZXIgZnJhbWV3b3JrIG9mIG15IGV4cGVydGlzZS4gVGhpcyB1cmdlLCB0aGlzIGNvbXB1bHNpb24gdG8gdW5kZXJzdGFuZCB0aG9yb3VnaGx5LCBpcyBmdW5kYW1lbnRhbCB0byBob3cgSSBhcHByb2FjaCBteSB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2thc2FuL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMTpcdENDX0ZMQUdTX0tBU0FOX1JVTlRJTUUgOj0gJChjYWxsIGNjLW9wdGlvbiwgLWZuby1jb25zZXJ2ZS1zdGFjaylcbiAgMjI6XHRDQ19GTEFHU19LQVNBTl9SVU5USU1FICYjNDM7PSAtZm5vLXN0YWNrLXByb3RlY3RvclxuICAyMzpcdCMgRGlzYWJsZSBicmFuY2ggdHJhY2luZyB0byBhdm9pZCByZWN1cnNpb24uXG4gIDI0Olx0Q0NfRkxBR1NfS0FTQU5fUlVOVElNRSAmIzQzOz0gLURESVNBQkxFX0JSQU5DSF9QUk9GSUxJTkdcbiAgMjU6XHRcbiAgMjY6XHRDRkxBR1NfY29tbW9uLm8gOj0gJChDQ19GTEFHU19LQVNBTl9SVU5USU1FKVxuICAyNzpcdENGTEFHU19nZW5lcmljLm8gOj0gJChDQ19GTEFHU19LQVNBTl9SVU5USU1FKVxuICAyODpcdENGTEFHU19pbml0Lm8gOj0gJChDQ19GTEFHU19LQVNBTl9SVU5USU1FKVxuICAyOTpcdENGTEFHU19xdWFyYW50aW5lLm8gOj0gJChDQ19GTEFHU19LQVNBTl9SVU5USU1FKVxuICAzMDpcdENGTEFHU19yZXBvcnQubyA6PSAkKENDX0ZMQUdTX0tBU0FOX1JVTlRJTUUpXG4gIDMxOlx0Q0ZMQUdTX3JlcG9ydF9nZW5lcmljLm8gOj0gJChDQ19GTEFHU19LQVNBTl9SVU5USU1FKVxuICAzMjpcdENGTEFHU19yZXBvcnRfaHdfdGFncy5vIDo9ICQoQ0NfRkxBR1NfS0FTQU5fUlVOVElNRSlcbiAgMzM6XHRDRkxBR1NfcmVwb3J0X3N3X3RhZ3MubyA6PSAkKENDX0ZMQUdTX0tBU0FOX1JVTlRJTUUpXG4gIDM0Olx0Q0ZMQUdTX3NoYWRvdy5vIDo9ICQoQ0NfRkxBR1NfS0FTQU5fUlVOVElNRSlcbiAgMzU6XHRDRkxBR1NfaHdfdGFncy5vIDo9ICQoQ0NfRkxBR1NfS0FTQU5fUlVOVElNRSlcbiAgMzY6XHRDRkxBR1Nfc3dfdGFncy5vIDo9ICQoQ0NfRkxBR1NfS0FTQU5fUlVOVElNRSlcbiAgMzc6XHRcbiAgMzg6XHRDRkxBR1NfS0FTQU5fVEVTVCA6PSAkKENGTEFHU19LQVNBTilcbiAgMzk6XHRpZm5kZWYgQ09ORklHX0NDX0hBU19LQVNBTl9NRU1JTlRSSU5TSUNfUFJFRklYXG4gIDQwOlx0IyBJZiBjb21waWxlciBpbnN0cnVtZW50cyBtZW1pbnRyaW5zaWNzIGJ5IHByZWZpeGluZyB0aGVtIHdpdGggX19hc2FuL19faHdhc2FuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDY4MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LiBIZXJlJiMzOTtzIGEgc3VtbWFyeToKCioqRGlnZ2luZyBEZWVwZXI6IFRoZSBVcmdlIHRvIFVuZGVyc3RhbmQqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBpcyBjbGVhcjogSSBuZWVkIHRvIGRlbHZlIGZ1cnRoZXIuIEl0JiMzOTtzIHRoYXQgaW1tZWRpYXRlLCBhbG1vc3QgaW52b2x1bnRhcnkgcmVhY3Rpb24gSSBnZXQgd2hlbiBwcmVzZW50ZWQgd2l0aCBzb21ldGhpbmcgbmV3LCBzb21ldGhpbmcgdGhhdCBzcGFya3MgbXkgY3VyaW9zaXR5LiBNeSBleHBlcmllbmNlIGhhcyB0YXVnaHQgbWUgdGhhdCBpbml0aWFsIHN1cmZhY2UgaW1wcmVzc2lvbnMgYXJlIHJhcmVseSBlbm91Z2guIFRoZXJlJiMzOTtzIGFsd2F5cyBhIGhpZGRlbiBjb21wbGV4aXR5LCBhIG51YW5jZSwgYSBkZWVwZXIgbGF5ZXIgb2YgbWVhbmluZyB3YWl0aW5nIHRvIGJlIHVuY292ZXJlZC4gUmVhZGluZyBtb3JlLCBhbmFseXppbmcgbW9yZSwgaW52ZXN0aWdhdGluZyBtb3JlIOKAkyB0aGF0JiMzOTtzIHRoZSBvbmx5IHdheSB0byB0cnVseSBncmFzcCB0aGUgc3ViamVjdCBhdCBoYW5kIGFuZCBhc3Nlc3MgaXRzIHNpZ25pZmljYW5jZSB3aXRoaW4gdGhlIGJyb2FkZXIgZnJhbWV3b3JrIG9mIG15IGV4cGVydGlzZS4gVGhpcyB1cmdlLCB0aGlzIGNvbXB1bHNpb24gdG8gdW5kZXJzdGFuZCB0aG9yb3VnaGx5LCBpcyBmdW5kYW1lbnRhbCB0byBob3cgSSBhcHByb2FjaCBteSB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2thc2FuL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MTpcdCMgd2UgbmVlZCB0byB0cmVhdCB0aGVtIG5vcm1hbGx5IChhcyBidWlsdGlucyksIG90aGVyd2lzZSB0aGUgY29tcGlsZXIgd29uJiMzOTt0XG4gIDQyOlx0IyByZWNvZ25pemUgdGhlbSBhcyBpbnN0cnVtZW50YWJsZS4gSWYgaXQgZG9lc24mIzM5O3QgaW5zdHJ1bWVudCB0aGVtLCB3ZSBuZWVkIHRvXG4gIDQzOlx0IyBwYXNzIC1mbm8tYnVpbHRpbiwgc28gdGhlIGNvbXBpbGVyIGRvZXNuJiMzOTt0IGlubGluZSB0aGVtLlxuICA0NDpcdENGTEFHU19LQVNBTl9URVNUICYjNDM7PSAtZm5vLWJ1aWx0aW5cbiAgNDU6XHRlbmRpZlxuICA0NjpcdFxuICA0NzpcdENGTEFHU19SRU1PVkVfa2FzYW5fdGVzdF9jLm8gJiM0Mzs9ICQoY2FsbCBjYy1vcHRpb24sIC1XdmxhLWxhcmdlci10aGFuPTEpXG4gIDQ4Olx0Q0ZMQUdTX2thc2FuX3Rlc3RfYy5vIDo9ICQoQ0ZMQUdTX0tBU0FOX1RFU1QpXG4gIDQ5Olx0UlVTVEZMQUdTX2thc2FuX3Rlc3RfcnVzdC5vIDo9ICQoUlVTVEZMQUdTX0tBU0FOKVxuICA1MDpcdFxuICA1MTpcdG9iai15IDo9IGNvbW1vbi5vIHJlcG9ydC5vXG4gIDUyOlx0b2JqLSQoQ09ORklHX0tBU0FOX0dFTkVSSUMpICYjNDM7PSBpbml0Lm8gZ2VuZXJpYy5vIHJlcG9ydF9nZW5lcmljLm8gc2hhZG93Lm8gcXVhcmFudGluZS5vXG4gIDUzOlx0b2JqLSQoQ09ORklHX0tBU0FOX0hXX1RBR1MpICYjNDM7PSBod190YWdzLm8gcmVwb3J0X2h3X3RhZ3MubyB0YWdzLm8gcmVwb3J0X3RhZ3Mub1xuICA1NDpcdG9iai0kKENPTkZJR19LQVNBTl9TV19UQUdTKSAmIzQzOz0gaW5pdC5vIHJlcG9ydF9zd190YWdzLm8gc2hhZG93Lm8gc3dfdGFncy5vIHRhZ3MubyByZXBvcnRfdGFncy5vXG4gIDU1Olx0XG4gIDU2Olx0a2FzYW5fdGVzdC1vYmpzIDo9IGthc2FuX3Rlc3RfYy5vXG4gIDU3Olx0aWZkZWYgQ09ORklHX1JVU1RcbiAgNTg6XHRcdGthc2FuX3Rlc3Qtb2JqcyAmIzQzOz0ga2FzYW5fdGVzdF9ydXN0Lm9cbiAgNTk6XHRlbmRpZlxuICA2MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTMwNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEtBU0FOIENvbXBpbGF0aW9uIERlZHVjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhyb3VnaCB0aGlzIGNvbXBpbGF0aW9uIHByb2Nlc3MgYW5kIHNvbWV0aGluZyBpcyBpbW1lZGlhdGVseSBjbGVhcjogYGNvbW1vbi5vYCBpbiB0aGUga2VybmVsIGJ1aWxkIGlzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCAqaWYqIHRoZSBLQVNBTiBtZW1vcnkgc2FmZXR5IGZlYXR1cmUgaXMgZW5hYmxlZC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGBtbS9rYXNhbmAgaXMgdGhlIHNwZWNpZmljIHN1YnN5c3RlbSByZXNwb25zaWJsZSBmb3IgS0FTQU4sIHNvIHRoYXQmIzM5O3Mgd2hlcmUgdG8gc3RhcnQuIFRoZSBjcnVjaWFsIHBpZWNlIGhlcmUgaXMgZmlndXJpbmcgb3V0IHRoZSBjb25kaXRpb24gdGhhdCBnZXRzIHVzICppbnRvKiBgbW0va2FzYW5gLiBCYXNlZCBvbiB0aGlzLCBpdCYjMzk7cyBwcmV0dHkgb2J2aW91cyB0aGF0IGBDT05GSUdfS0FTQU5gIGlzIHRoZSBkZWNpZGluZyBmYWN0b3IuCgpUaW1lIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9ucyBhbmQgdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMuIEkgc2hvdWxkIGNoZWNrIHRoZSBgbW0vTWFrZWZpbGVgIHRvIHNlZSBob3cgdGhlIGJ1aWxkIHN5c3RlbSBoYW5kbGVzIHRoZSBgbW0va2FzYW5gIGRpcmVjdG9yeSBhbmQgd2hhdCBjb25kaXRpb25zIGFyZSBzcGVjaWZpZWQuIEEgcXVpY2sgbG9vayBhdCB0aGUgTWFrZWZpbGUgc2hvdWxkIHRlbGwgbWUgaWYgdGhlIGBDT05GSUdfS0FTQU5gIG9wdGlvbiB0cnVseSBkaWN0YXRlcyB0aGUgZW50cnkgaW50byBgbW0va2FzYW5gIGFuZCwgdGhlcmVmb3JlLCB0aGUgaW5jbHVzaW9uIG9mIGBjb21tb24ub2AuIExldCBtZSBkaXZlIGluIGFuZCB2ZXJpZnkgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xm9iai1cXCRcXChDT05GSUdfS0FTQU5cXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT05MT1vYmotJChDT05GSUdfUEFHRV9QT0lTT05JTkcpICYjNDM7PSBwYWdlX3BvaXNvbi5vXG5tbS9NYWtlZmlsZTo5MjpvYmotJChDT05GSUdfS0FTQU4pXHQmIzQzOz0ga2FzYW4vXG5tbS9NYWtlZmlsZS05My1vYmotJChDT05GSUdfS0ZFTkNFKSAmIzQzOz0ga2ZlbmNlL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTY4MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLQVNBTiBhbmQgTGF6eSBNTVUgTW9kZSBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcyByZWxhdGVkIHRvIEtBU0FOIGFuZCB0aGUgbGF6eSBNTVUgbW9kZSwgc3BlY2lmaWNhbGx5IGZvciBzMzkwLiBGaXJzdCBvZmYsIEkmIzM5O20gdGhpbmtpbmcsIGBDT05GSUdfS0FTQU5gIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUsIHRoYXQmIzM5O3MgY2xlYXIuIEJ1dCBhcmUgdGhlcmUgYW55IG90aGVyIGNydWNpYWwgY29uZmlndXJhdGlvbnMgdG8gY29uc2lkZXI/IFRoZSBwYXRjaCBhZGRzIGBzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERWAgdG8gYGFyY2gvczM5MC9LY29uZmlnYC4gUmlnaHQsIGxhenkgTU1VIG1vZGUgZ2V0cyBlbmFibGVkIGlmIGBBUkNIX0hBU19MQVpZX01NVV9NT0RFYCBpcyBzZXQuIE5vdywgYEFSQ0hfSEFTX0xBWllfTU1VX01PREVgIGlzIGEgYm9vbGVhbiBjb25maWcgZGVmaW5lZCBpbiBgbW0vS2NvbmZpZ2AsIGl0IHNlZW1zIHRvIGJlIHNlbGVjdGVkIGJ5IGBTMzkwYCBpdHNlbGYuIFRoZXJlZm9yZSwgb24gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCB0aGUgbGF6eSBNTVUgbW9kZSBpcyBpbmhlcmVudGx5IGVuYWJsZWQuCgpOb3csIGFzaWRlIGZyb20gYENPTkZJR19LQVNBTmAsIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgc2hvdWxkIGJlIGhpZ2hsaWdodGVkPyBUaGUgcGF0Y2ggdG91Y2hlcyBgbW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuY2AsIHdoaWNoIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19LQVNBTl9HRU5FUklDYCBpcyBlbmFibGVkLiBTZWVtcyBsaWtlIGBLQVNBTl9HRU5FUklDYCBpcyBnb2luZyB0byBiZSBhbm90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24uCgpEaWdnaW5nIGRlZXBlciwgSSBleGFtaW5lZCBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc2AgaW4gYGFyY2gvczM5MC9tbS9sYXp5X21tdS5jYC4gSXQmIzM5O3MgY2FsbGluZyBgZW50ZXJfaXB0ZV9yYW5nZWAsIHdoaWNoLCBpbiB0dXJuLCBpcyB1c2luZyBgdGVzdF9mYWNpbGl0eSgxMylgLiBGYWNpbGl0eSAxMyByZXByZXNlbnRzIHRoZSBJUFRFLXJhbmdlIGZhY2lsaXR5LCBhbmQgdGhhbmtmdWxseSwgaXQmIzM5O3MgYXZhaWxhYmxlIG9uIHoxMCBhbmQgbGF0ZXIgc3lzdGVtcyBhbmQgaXMgc3VwcG9ydGVkIGluIFFFTVUuCgpTbywgdGhlIGtleSBmdW5jdGlvbnMgdG8ga2VlcCBpbiBtaW5kIGFyZTogYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZWAsIGBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzYCwgYGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZWAsIGBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGVgLCBgbGF6eV9tbXVfb25saW5lX2NwdWAsIGFuZCBgbGF6eV9tbXVfb2ZmbGluZV9jcHVgLgoKSnVzdCBkb3VibGUtY2hlY2tpbmcsIEkgc2VlIGBsYXp5X21tdV9vbmxpbmVfY3B1YCBhbmQgYGxhenlfbW11X29mZmxpbmVfY3B1YCBhcmVuJiMzOTt0IHN0YXRpYyBmdW5jdGlvbnMuIEFuZCwgdGhlIG90aGVyIGBhcmNoXypgIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgdXNpbmcgYEVYUE9SVF9TWU1CT0xfSUZfS1VOSVRgLiBPa2F5LCB0aGVzZSBhcmUgbm90IHN0YXRpYywgZWl0aGVyLgoKTm93LCBhcmUgdGhlcmUgYW55IG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IFllcyEgYGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlc2AgaXMgY2FsbGVkIGluIHZhcmlvdXMgcGxhY2VzOiBgZnMvcHJvYy90YXNrX21tdS5jYCwgYG1tL21hZHZpc2UuY2AsIGBtbS9tZW1vcnkuY2AsIGBtbS9tcHJvdGVjdC5jYCwgYG1tL21yZW1hcC5jYCwgYW5kIGBtbS92bWFsbG9jLmNgLiBJbnRlcmVzdGluZy4KCkFsbCBvZiB0aGVzZSBhcmUgaW5saW5lIGZ1bmN0aW9ucyBpbiBgaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhgIHRoYXQgY2FsbCBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc2AsIG1ha2luZyBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc2AgdGhlIG1haW4gZW50cnkgcG9pbnQgdG8gZm9jdXMgb24uCgpDaXJjbGluZyBiYWNrIHRvIHRoZSBjb25maWd1cmF0aW9ucywgaXMgYEtBU0FOX0dFTkVSSUNgIGRlZmluaXRlbHkgdGhlIHJpZ2h0IG9uZT8gTGV0JiMzOTtzIGNvbmZpcm0gYnkgbG9va2luZyBhdCBgbW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuY2AgYWdhaW4uIFRoZSBjb2RlIGluY2x1ZGVzIGEgY2FzZSBmb3IgYEtBU0FOX0xBWllfTU1VX1BURWAsIHdoaWNoIHRyaWdnZXJzIHRoZSAmIzM0O2xhenktbW11LXB0ZS1hY2Nlc3MmIzM0OyBidWcgdHlwZS4gVGhpcyBjb2RlIHBhdGggaXMgY29tcGlsZWQgb25seSBpZiBgQ09ORklHX0tBU0FOX0dFTkVSSUNgIGlzIGVuYWJsZWQuIFRoZXJlZm9yZSwgYEtBU0FOX0dFTkVSSUNgIGlzIGRlZmluaXRlbHkgYSByZWxldmFudCBjb25maWd1cmF0aW9uIHRvIGNvbnNpZGVyLgoKTm93LCB3aGF0IGFib3V0IGBLQVNBTl9TV19UQUdTYCBvciBgS0FTQU5fSFdfVEFHU2A/IFRoZSBwYXRjaCBtb2RpZmllcyBgbW0va2FzYW4va2FzYW4uaGAgdG8gaW50cm9kdWNlIGBLQVNBTl9MQVpZX01NVV9QVEVgLCB3aGljaCBpcyB1c2VkIGluIGByZXBvcnRfZ2VuZXJpYy5jYC4gQnV0IHRoZXJlJiMzOTtzIG5vIG1vZGlmaWNhdGlvbiBvZiBgcmVwb3J0X3N3X3RhZ3MuY2Agb3IgYHJlcG9ydF9od190YWdzLmNgLiBTbyBpdCBsb29rcyBsaWtlIGBLQVNBTl9HRU5FUklDYCBpcyB0aGUgbW9zdCBwZXJ0aW5lbnQgb25lIGhlcmUuCgpGaW5hbGx5LCBhcmUgdGhlcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnM/IGBDT05GSUdfU01QYCBpcyByZXF1aXJlZCBkdWUgdG8gdGhlIGBzbXAuY2AgY2hhbmdlcywgYnV0IHRoYXQmIzM5O3MgdXN1YWxseSBlbmFibGVkLiBOb3csIHJlZ2FyZGluZyBgQ09ORklHX0hPVFBMVUdfQ1BVYCwgaXMgaXQgbmVlZGVkIGZvciBgX19jcHVfZGllYCBhbmQgYF9fY3B1X3VwYCB3aXRoaW4gYHNtcC5jYD8gT2theSwgdGltZSB0byBjaGVjayBgYXJjaC9zMzkwL2tlcm5lbC9zbXAuY2AgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19jcHVfdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva2VybmVsL3NtcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rZXJuZWwvc21wLmM9ODI0PXN0YXRpYyB2b2lkIHNtcF9zdGFydF9zZWNvbmRhcnkodm9pZCAqY3B1dm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jLTg1NS0vKiBVcHBpbmcgYW5kIGRvd25pbmcgb2YgQ1BVcyAqL1xuYXJjaC9zMzkwL2tlcm5lbC9zbXAuYzo4NTY6aW50IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGlkbGUpXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jLTg1Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MDA3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2Ugc3RhdGVtZW50cywgYXMgaWYgdGhleSB3ZXJlIG15IG93biBpbW1lZGlhdGUgdGhvdWdodHMgYXMgYW4gZW1iZWRkZWQgc3lzdGVtcyBleHBlcnQ6CgoqKkNQVSBIb3RwbHVnICZhbXA7IFNNUCBDb21waWxhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpSaWdodCwgc28gdGhlc2UgbWFjcm9zLCBgX19jcHVfdXBgIGFuZCBgX19jcHVfZGllYCwgYXJlIGNsZWFybHkgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgQ1BVcyB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGZpcnN0IG9uZSwgYF9fY3B1X3VwYCwgaXMgb25seSBnb2luZyB0byBiZSBjb21waWxlZCBpbnRvIHRoZSBzeXN0ZW0gd2hlbiBgQ09ORklHX1NNUGAgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBgX19jcHVfdXBgIGlzIGxpa2VseSByZWxhdGVkIHRvIGJyaW5naW5nIGEgQ1BVIG9ubGluZSwgd2hpY2ggaXMgYSBmZWF0dXJlIHByaW1hcmlseSBhc3NvY2lhdGVkIHdpdGggU3ltbWV0cmljIE11bHRpLVByb2Nlc3NpbmcuIElmIHlvdSBvbmx5IGhhdmUgYSBzaW5nbGUgQ1BVLCB5b3UgdHlwaWNhbGx5IGRvbiYjMzk7dCBuZWVkIHRvIGR5bmFtaWNhbGx5ICYjMzk7YnJpbmcgaXQgdXAmIzM5Oy4KCk5vdywgbG9va2luZyBhdCBgX19jcHVfZGllYCwgdGhpcyBvbmUmIzM5O3MgY29uZGl0aW9uYWwgb24gYENPTkZJR19IT1RQTFVHX0NQVWAuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhhdCB0aGlzIG1hY3JvIGlzIGZvciB0YWtpbmcgYSBDUFUgb2ZmbGluZSwgd2hpY2ggaXMgYSBjb3JlIGNvbmNlcHQgdG8gQ1BVIGhvdHBsdWcuIElmIGhvdHBsdWdnaW5nIGlzIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZSwgdGhlbiB0aGVyZSYjMzk7cyBubyB3YXkgdG8gYnJpbmcgYSBDUFUgb2ZmbGluZSAoYXNpZGUgZnJvbSBwb3dlcmluZyB0aGUgc3lzdGVtIGRvd24gb3Igb3RoZXJ3aXNlKS4gSSB3b3VsZCBleHBlY3QgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYF9fY3B1X2RpZWAgdG8gYmUgZm9yIHRoZSByZXZlcnNlIG9mIGBfX2NwdV91cGAuIEl0IHdvdWxkIGxpa2VseSBpbnZvbHZlIGEgc2VyaWVzIG9mIHN0ZXBzIHRvIHNhZmVseSB0YWtlIGEgQ1BVIG9mZiB0aGUgc3lzdGVtLCBzdWNoIGFzIG1pZ3JhdGluZyBhbnkgcmVsZXZhbnQgcHJvY2Vzc2VzIG9mZiB0aGF0IENQVSwgZmx1c2hpbmcgY2FjaGVzLCBhbmQgcG90ZW50aWFsbHkgc3RvcHBpbmcgZXhlY3V0aW9uIG9uIHRoYXQgQ1BVLgoKRXNzZW50aWFsbHksIHRoZXNlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHRlbGwgbWUgaG93IHRoZSBjb2RlIGlzIHN0cnVjdHVyZWQgdG8gaGFuZGxlIFNNUCBhbmQgQ1BVIGhvdHBsdWcuIFRoZSBpbmNsdXNpb24gb3IgZXhjbHVzaW9uIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBkZWZpbmVkIGNvbXBpbGUtdGltZSBjb25maWd1cmF0aW9uIG9mIHRoZSBzeXN0ZW0uIEkgd291bGQgbmV4dCBsb29rIGF0IHRoZXNlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IG1lY2hhbmlzbXMgYW5kIHRoZSBhcmNoaXRlY3R1cmUgdGhhdCB0aGV5IGhhbmRsZSB0byBiZXN0IHVuZGVyc3RhbmQgQ1BVIGhhbmRsaW5nIGZvciB0aGF0IHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19jcHVfZGllJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2tlcm5lbC9zbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva2VybmVsL3NtcC5jPTg5OT1pbnQgX19jcHVfZGlzYWJsZSh2b2lkKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvc21wLmMtOTIxLVxuYXJjaC9zMzkwL2tlcm5lbC9zbXAuYzo5MjI6dm9pZCBfX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSlcbmFyY2gvczM5MC9rZXJuZWwvc21wLmMtOTIzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1NTUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBUZXN0aW5nIFBsYW4qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgYEhPVFBMVUdfQ1BVYCBjb3VsZCByZWFsbHkgaGVscCBtZSBuYWlsIGRvd24gdGhlIENQVSBob3RwbHVnIGNvZGUgcGF0aHMgZHVyaW5nIHRlc3RpbmcuIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2QgYXZlbnVlIHRvIGV4cGxvcmUgZnVydGhlci4KCkxldCYjMzk7cyBzZWUsIEkgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZC4gSSYjMzk7bSBmb2N1c2luZyBvbjoKCiogICBgS0FTQU5gCiogICBgS0FTQU5fR0VORVJJQ2AKKiAgIGBIT1RQTFVHX0NQVWAKCldhaXQgYSBtaW51dGUsIGBLQVNBTl9HRU5FUklDYCBpcyBkZXBlbmRlbnQgb24gYEtBU0FOYCByaWdodD8gT2YgY291cnNlLCB0aGF0JiMzOTtzIGltcG9ydGFudCB0byByZW1lbWJlci4gTm93LCBJIGhhdmUgdG8gZW5zdXJlIHRoZSBmdWxsIHRlc3Qgc3VpdGUgY2FuIGV2ZW4gYmUgZXhlY3V0ZWQuCgpJcyBgS0FTQU5gIGV2ZW4gc3VwcG9ydGVkIG9uIHRoZSBzMzkwIGFyY2hpdGVjdHVyZT8gTGV0IG1lIGNoZWNrIHF1aWNrbHkuLi4gQWgsIHllcywgYWNjb3JkaW5nIHRvIHRoZSBgYXJjaC9zMzkwL0tjb25maWdgIGZpbGUsIGl0ICpkb2VzKiBoYXZlIGBzZWxlY3QgQVJDSF9IQVNfS0FTQU5fR0VORVJJQ2AuIEdyZWF0LiBOb3cgSSBjYW4gY29udGludWUgbXkgcGxhbm5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QVJDSF9IQVNfS0FTQU5fR0VORVJJQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5MzcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBBZGRyZXNzU2FuaXRpemVyIChLQVNBTikgQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGtlcm5lbCBjb2RlIGFuZCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBzYWZldHkgY29udGV4dC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IG1pbmQgaXMgd2hldGhlciBLQVNBTiwgb3Igc29tZXRoaW5nIGFuYWxvZ291cywgaXMgZW5hYmxlZC4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIHdlJiMzOTtyZSBydW5uaW5nIHdpdGggdGhpcyBydW50aW1lIG1lbW9yeSBlcnJvciBkZXRlY3Rpb24sIHdoaWNoIHdvdWxkIGZ1bmRhbWVudGFsbHkgYWx0ZXIgaG93IEkgaW50ZXJwcmV0IHBvdGVudGlhbCBpc3N1ZXMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHByZXByb2Nlc3NvciBkZWZpbml0aW9ucy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYEhBVkVfQVJDSF9LQVNBTmAsIG9yIHNvbWV0aGluZyBlcXVpdmFsZW50LiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgdGhlIG1vc3QgZGlyZWN0IGluZGljYXRvciwgYnV0IGl0IGNvdWxkIGJlIG5hbWVkIGRpZmZlcmVudGx5IGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlLiBBbHNvLCBJJiMzOTtsbCBrZWVwIGluIG1pbmQgdGhhdCBvdGhlciBpbnN0cnVtZW50YXRpb24gY291bGQgYmUgZW5hYmxlZCwgYW5kIEkmIzM5O2xsIGtlZXAgdGhpcyBpbiB0aGUgYmFjayBvZiBteSBoZWFkIHRvIGNoZWNrIGZvciBpbiB0aGUgc3Vycm91bmRpbmcgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S0FTQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZz0zOD1jb25maWcgQVJDSF9TVVBQT1JUU19VUFJPQkVTXG4tLVxuYXJjaC9zMzkwL0tjb25maWctNDAtXG5hcmNoL3MzOTAvS2NvbmZpZzo0MTpjb25maWcgS0FTQU5fU0hBRE9XX09GRlNFVFxuYXJjaC9zMzkwL0tjb25maWctNDItXHRoZXhcbmFyY2gvczM5MC9LY29uZmlnOjQzOlx0ZGVwZW5kcyBvbiBLQVNBTlxuYXJjaC9zMzkwL0tjb25maWctNDQtXHRkZWZhdWx0IDB4MUMwMDAwMDAwMDAwMDBcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz03NT1jb25maWcgUzM5MFxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTE4My1cdHNlbGVjdCBIQVZFX0FSQ0hfSlVNUF9MQUJFTF9SRUxBVElWRVxuYXJjaC9zMzkwL0tjb25maWc6MTg0Olx0c2VsZWN0IEhBVkVfQVJDSF9LQVNBTlxuYXJjaC9zMzkwL0tjb25maWc6MTg1Olx0c2VsZWN0IEhBVkVfQVJDSF9LQVNBTl9WTUFMTE9DXG5hcmNoL3MzOTAvS2NvbmZpZy0xODYtXHRzZWxlY3QgSEFWRV9BUkNIX0tDU0FOXG4tLVxuYXJjaC9zMzkwL0tjb25maWctMjYwLVx0c2VsZWN0IElSUV9NU0lfTElCXHRcdGlmIFBDSVxuYXJjaC9zMzkwL0tjb25maWc6MjYxOlx0c2VsZWN0IEtBU0FOX1ZNQUxMT0MgaWYgS0FTQU5cbmFyY2gvczM5MC9LY29uZmlnLTI2Mi1cdHNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQVxuLS1cbmFyY2gvczM5MC9LY29uZmlnPTY4OD1jb25maWcgS0VSTkVMX0lNQUdFX0JBU0VcbmFyY2gvczM5MC9LY29uZmlnLTY4OS1cdGhleCBcJiMzNDtLZXJuZWwgaW1hZ2UgYmFzZSBhZGRyZXNzXCYjMzQ7XG5hcmNoL3MzOTAvS2NvbmZpZzo2OTA6XHRyYW5nZSAweDEwMDAwMCAweDFGRkZGRkUwMDAwMDAwIGlmICFLQVNBTlxuYXJjaC9zMzkwL0tjb25maWc6NjkxOlx0cmFuZ2UgMHgxMDAwMDAgMHgxQkZGRkZFMDAwMDAwMCBpZiBLQVNBTlxuYXJjaC9zMzkwL0tjb25maWc6NjkyOlx0ZGVmYXVsdCAweDNGRkUwMDAwMDAwIGlmICFLQVNBTlxuYXJjaC9zMzkwL0tjb25maWc6NjkzOlx0ZGVmYXVsdCAweDdGRkZFMDAwMDAwMCBpZiBLQVNBTlxuYXJjaC9zMzkwL0tjb25maWctNjk0LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTc0NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQgZm9yIFRlc3RpbmcgYExBWllfTU1VX01PREVgKioKCk9rYXksIHNvIGBIQVZFX0FSQ0hfS0FTQU5gIGlzIGRlZmluaXRlbHkgZW5hYmxlZCwgZ29vZCBzdGFydC4gTm93LCBsZXQmIzM5O3MgbG9vayBhdCBgTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUYC4gSSBmb3VuZCBpdCBpbiBgbW0vS2NvbmZpZ2AsIHdoaWNoIGlzIGEgZ29vZCBzaWduLiBUaGUgcHJvbXB0IHdhbnRzIG1lIHRvIGlkZW50aWZ5IGFueSAqc3BlY2lmaWMqIENPTkZJRyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBmZWF0dXJlLiBTaW5jZSBpdCYjMzk7cyBhIEtVbml0IHRlc3QsIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZW5hYmxlIGl0LiBFdmVuIHRob3VnaCBzeXprYWxsZXIgZG9lc24mIzM5O3QgdHlwaWNhbGx5IHJ1biBLVW5pdCB0ZXN0cyB1bmxlc3MgZXhwbGljaXRseSBjb25maWd1cmVkLCBoYXZpbmcgaXQgZW5hYmxlZCAqY291bGQqIGJlIGJlbmVmaWNpYWwsIHlvdSBuZXZlciBrbm93LiBJdCYjMzk7cyBhIEtVbml0IHRlc3QsIHNvLCBJIHdpbGwganVzdCBlbmFibGUgaXQuCgpOb3csIGFzIHBlciB0aGUgcHJvbXB0LCBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgYEtBU0FOYCwgYEtBU0FOX0dFTkVSSUNgLCBhbmQgYEhPVFBMVUdfQ1BVYCBhcmUgaW5jbHVkZWQgdG8gdGhvcm91Z2hseSB0ZXN0IHRoaXMgbmV3IGZlYXR1cmUsIGFuZCBlbnN1cmUgY292ZXJhZ2UuCgpOZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIHRoaXMgdGVzdGluZy4gTG9va2luZyBhdCB0aGUgaW1wbGVtZW50YXRpb24sIEkgd2FudCB0byBrZWVwIGEgY2xvc2UgZXllIG9uOiBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlYCwgYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXNgLCBgYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlYCwgYGFyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZWAsIGBsYXp5X21tdV9vbmxpbmVfY3B1YCwgYW5kIGBsYXp5X21tdV9vZmZsaW5lX2NwdWAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgY29yZSBlbnRyeS9leGl0IHBvaW50cyBhbmQgbWFuYWdlbWVudCBmdW5jdGlvbnMgZm9yIGBMQVpZX01NVV9NT0RFYC4KCldhaXQsIHRoZXJlIGFyZSBtb3JlLCBhbmQgbm90IHN0YXRpYyBlaXRoZXIuIEkgc2VlIGBfX2thc2FuX3BvaXNvbl9wdGVgIGFuZCBgX19rYXNhbl91bnBvaXNvbl9wdGVgIGluIGBtbS9rYXNhbi9jb21tb24uY2AuIFRoZXNlIGFyZSBleHBvcnRlZCBhbmQgYXJlIGNhbGxlZCBieSB0aGUgaW5saW5lIGZ1bmN0aW9ucywgYGthc2FuX3BvaXNvbl9wdGVgIGFuZCBga2FzYW5fdW5wb2lzb25fcHRlYC4gVGhleSBhcmUgKmV4Y2VsbGVudCogY2FuZGlkYXRlcyBmb3IgdGVzdGluZyEgSSB3aWxsIGtlZXAgdGhlc2Ugb24gdGhlIGxpc3QsIHRvby4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYF9fa2FzYW5fcG9pc29uX3B0ZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fa2FzYW5fcG9pc29uX3B0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2thc2FuL2NvbW1vbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2thc2FuL2NvbW1vbi5jPTE1NT12b2lkIF9fa2FzYW5fcG9pc29uX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0va2FzYW4vY29tbW9uLmMtMTY1LVxubW0va2FzYW4vY29tbW9uLmM6MTY2OnZvaWQgX19rYXNhbl9wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucilcbm1tL2thc2FuL2NvbW1vbi5jLTE2Ny17XG4tLVxubW0va2FzYW4vY29tbW9uLmMtMTcwLX1cbm1tL2thc2FuL2NvbW1vbi5jOjE3MTpFWFBPUlRfU1lNQk9MX0dQTChfX2thc2FuX3BvaXNvbl9wdGUpO1xubW0va2FzYW4vY29tbW9uLmMtMTcyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDgwMgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDU2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipMYXp5IE1NVSBGdW5jdGlvbmFsaXR5IEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7bSBldmFsdWF0aW5nIHRoZSBmdW5jdGlvbnMgd2l0aGluIGBhcmNoL3MzOTAvbW0vbGF6eV9tbXUuY2AuIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZXNlIGZ1bmN0aW9ucywgbGlrZSB0aGUgb25lcyBkZWFsaW5nIHdpdGggUFRFIG1hbmlwdWxhdGlvbiwgYXJlIGluZGVlZCBleHBvcnRlZC4gTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIHRoYXQgYXJlIHJlbGV2YW50LiBMb29raW5nIGF0IHRoZSBjb2RlYmFzZSwgSSBzZWUgYSBzZXQgb2YgZnVuY3Rpb25zOiBgX19sYXp5X21tdV9zZXRfcHRlYCwgYF9fbGF6eV9tbXVfcHRlcF9nZXRgLCBgX19sYXp5X21tdV9wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nYCwgYF9fbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyYCwgYF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydGAsIGBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0YCwgYW5kIGBfX2xhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdGAuCgpUaGVzZSBhcmVuJiMzOTt0IHN0YXRpYywgYnV0IHRoZXkgKmFyZSogY2FsbGVkIGZyb20gaW5saW5lIGZ1bmN0aW9ucyB3aXRoaW4gYHBndGFibGUuaGAuIFRoZSBxdWVzdGlvbiBiZWNvbWVzIHdoZXRoZXIgdGhlc2UgYXJlIGhvdCBwYXRoIGZ1bmN0aW9ucy4gSXQgc2VlbXMgdGhleSBhcmU7IHRoZXkmIzM5O3JlIGNhbGxlZCBkdXJpbmcgZXZlcnkgUFRFIG9wZXJhdGlvbiB3aGVuIHRoZSBsYXp5IE1NVSBtb2RlIGlzIGFjdGl2ZS4gSG93ZXZlciwgd2FpdCwgbGF6eSBNTVUgbW9kZSBpcyBvbmx5IGVuYWJsZWQgZm9yIHNwZWNpZmljIG9wZXJhdGlvbnMgbGlrZSBgbWFkdmlzZWAsIGBtcHJvdGVjdGAsIGBtcmVtYXBgLCBgdm1hbGxvY2AsIGFuZCBvcGVyYXRpb25zIHdpdGhpbiBgdGFza19tbXUuY2AuIEl0JiMzOTtzIG5vdCBhIGdsb2JhbCwgYWx3YXlzLW9uIGZlYXR1cmUuIGBpc19sYXp5X21tdV9hY3RpdmUoKWAgY2hlY2tzIGBnZXRfbG93Y29yZSgpLSZndDtsYXp5X21tdV9jb3VudGAuIFNvLCB0aGVzZSBwYXJ0aWN1bGFyIGZ1bmN0aW9ucyBhcmUgb25seSBleGVjdXRlZCB3aGVuIGBsYXp5X21tdV9jb3VudCAmZ3Q7IDBgLiBUaGlzIGlzIGNsZWFybHkgcGFydCBvZiB0aGUgbmV3IGZlYXR1cmUuCgpUaGUgcHJvbXB0IGluc3RydWN0cyBtZSB0byBhdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBCdXQsIHNpbmNlIHRoZXNlIGFyZSB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGxhenkgTU1VIG1vZGUgUFRFIG9wZXJhdGlvbnMsIGFuZCB0aGV5IGFyZSBub24tc3RhdGljLCB0aGV5IGFyZSBwb3RlbnRpYWwgY2FuZGlkYXRlcy4KCkhvd2V2ZXIsIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBhcmUgYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXNgLiBBZnRlciBjYXJlZnVsIGNvbnNpZGVyYXRpb24sIEkmIzM5O2xsIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6IGBhcmNoX2VudGVyX2xhenlfbW11X21vZGVgLCBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc2AsIGBhcmNoX2xlYXZlX2xhenlfbW11X21vZGVgLCBgYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlYCwgYGxhenlfbW11X29ubGluZV9jcHVgLCBgbGF6eV9tbXVfb2ZmbGluZV9jcHVgLCBgX19rYXNhbl9wb2lzb25fcHRlYCwgYW5kIGBfX2thc2FuX3VucG9pc29uX3B0ZWAuIFRoZXNlIHJlcHJlc2VudCB0aGUgcHJpbWFyeSBjb250cm9sIGFuZCBtYW5hZ2VtZW50IHBvaW50cyBvZiB0aGUgbGF6eSBNTVUgbW9kZS4KCk1vdmluZyBvbiwgSSYjMzk7bGwgZXhhbWluZSBgYXJjaC9zMzkwL21tL3BndGFibGUuY2AuIEkgZmluZCBgX19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydGAgYW5kIGBfX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdGAuIFRoZXNlIHdlcmUgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL21tL3BndGFibGUuYz0xNjc9RVhQT1JUX1NZTUJPTChwdGVwX3hjaGdfbGF6eSk7XG5hcmNoL3MzOTAvbW0vcGd0YWJsZS5jLTE2OC1cbmFyY2gvczM5MC9tbS9wZ3RhYmxlLmM6MTY5OnB0ZV90IF9fX3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbmFyY2gvczM5MC9tbS9wZ3RhYmxlLmMtMTcwLVx0XHRcdFx0cHRlX3QgKnB0ZXApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTYxCgkJCQkJCQlvdXRwdXQ6IDI2OAoJCQkJCQkJdGhvdWdodHM6IDEyODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIGFuZCBGb2N1cyBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgeWVzLCB0aGVzZSBjb25zaWRlcmF0aW9ucyBhcmUgbm90IHN0YXRpYzsgdGhleSBldm9sdmUgd2l0aCB0aGUgYW5hbHlzaXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBjYXB0dXJpbmcgZXZlcnl0aGluZywgc28gSSYjMzk7bGwgcmV2aWV3IHRoZSBjb25maWdzIG9uZSBtb3JlIHRpbWUuCgpBbHJpZ2h0LCB0aGUgY29yZSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIgYXJlIGBLQVNBTmAsIGBLQVNBTl9HRU5FUklDYCwgYW5kIGBIT1RQTFVHX0NQVWAuIEkgaW5pdGlhbGx5IGxvb2tlZCBhdCBgTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUYCwgYnV0IHNpbmNlIHN5emthbGxlciBkb2VzbiYjMzk7dCB0eXBpY2FsbHkgcnVuIEtVbml0IHRlc3RzIGJ5IGRlZmF1bHQsIEkmIzM5O2xsIHNraXAgdGhhdCBvbmUgZm9yIG5vdy4gSXQgZG9lc24mIzM5O3QgaHVydCB0byBpbmNsdWRlIGl0LCBidXQgaXQmIzM5O3Mgbm90IGVzc2VudGlhbC4KCk5vdywgYSBxdWljayBjaGVjayByZWdhcmRpbmcgYExBWllfTU1VX01PREVfS1VOSVRfVEVTVGAuIERvZXMgdGhpcyBwYXRjaCBhY3R1YWxseSAqYWRkKiB0aGF0IGNvbmZpZz8gTGV0JiMzOTtzIHZlcmlmeSBieSBjaGVja2luZyBgbW0vS2NvbmZpZ2AgYWdhaW5zdCB0aGUgcGF0Y2guIFRoZSBkaWZmIGRvZXNuJiMzOTt0IHNob3cgYW55IG1vZGlmaWNhdGlvbnMgdG8gYG1tL0tjb25maWdgLiBIYW5nIG9uLi4uIHRoZSBncmVwIEkgZGlkIGZvciBgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERWAgc2hvd2VkIGBMQVpZX01NVV9NT0RFX0tVTklUX1RFU1RgIGluIGBtbS9LY29uZmlnYCwgYnV0IHRoZSBwYXRjaCBkaWZmIGRvZXNuJiMzOTt0IGluY2x1ZGUgYG1tL0tjb25maWdgLiBBaCwgdGhlIHBhdGNoIGRpZmYgSSB3YXMgcHJvdmlkZWQ6IChmb2xsb3dzIHRoZSBwYXRjaCBkaWZmIHByb3ZpZGVkIGluIHRoZSBwcm9tcHQpLiBPa2F5LCBzbyBgbW0vS2NvbmZpZ2AgaXNuJiMzOTt0IG1vZGlmaWVkLiBJdCBtdXN0IGhhdmUgYmVlbiBhZGRlZCBpbiBhbiBlYXJsaWVyIHBhdGNoIG9yIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgdHJlZS4gVGhlIHByb21wdCBzYXlzLCAmIzM0O1RoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4geW91ciB3b3Jrc3BhY2UuJiMzNDsgVGhpcyBtZWFucyB0aGF0IGBBUkNIX0hBU19MQVpZX01NVV9NT0RFYCBpcyAqYWxyZWFkeSogaW4gYG1tL0tjb25maWdgLiBUaGUgY3VycmVudCBwYXRjaCAqZG9lcyogYWRkIGBzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERWAgdG8gYGFyY2gvczM5MC9LY29uZmlnYC4gVGh1cywgYEFSQ0hfSEFTX0xBWllfTU1VX01PREVgIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgb24gczM5MCwgc28gdGhlcmUmIzM5O3Mgbm8gbmVlZCB0byBleHBsaWNpdGx5IHNwZWNpZnkgaXQuCgpSZWdhcmRpbmcgYEtBU0FOYCwgaXQmIzM5O3MgYSBzdGFuZGFyZCBjb25maWcuIGBLQVNBTl9HRU5FUklDYCBpcyBhbHNvIHN0YW5kYXJkLiBBbmQgYEhPVFBMVUdfQ1BVYCBpcyBhbHNvIHN0YW5kYXJkLgoKVGhlcmVmb3JlLCB0aGUgZmluYWwgb3V0cHV0IHdpbGwgYmU6CgoqKldvcnRoRnV6emluZzogdHJ1ZSoqCgoqKkZvY3VzU3ltYm9sczoqKgoKLSAgIGBhcmNoX2VudGVyX2xhenlfbW11X21vZGVgCi0gICBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc2AKLSAgIGBhcmNoX2xlYXZlX2xhenlfbW11X21vZGVgCi0gICBgYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlYAotICAgYGxhenlfbW11X29ubGluZV9jcHVgCi0gICBgbGF6eV9tbXVfb2ZmbGluZV9jcHVgCi0gICBgX19rYXNhbl9wb2lzb25fcHRlYAotICAgYF9fa2FzYW5fdW5wb2lzb25fcHRlYAotICAgYF9fX3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnRgCi0gICBgX19fcHRlcF9tb2RpZnlfcHJvdF9jb21taXRgCgoqKkVuYWJsZUNvbmZpZ3M6KioKCi0gICBgS0FTQU5gCi0gICBgS0FTQU5fR0VORVJJQ2AKLSAgIGBIT1RQTFVHX0NQVWAKCioqUmVhc29uaW5nOioqCgpUaGUgcGF0Y2ggaW50cm9kdWNlcyBsYXp5IE1NVSBtb2RlIGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIGxldmVyYWdpbmcgdGhlIElQVEUtcmFuZ2UgZmFjaWxpdHkgZm9yIGJhdGNoZWQgUFRFIGludmFsaWRhdGlvbnMuIEl0JiMzOTtzIGhvb2tpbmcgaW50byBrZXkgbWVtb3J5IG1hbmFnZW1lbnQgc3lzY2FsbHMgKG1hZHZpc2UsIG1wcm90ZWN0LCBtcmVtYXAsIHZtYWxsb2MpIGFuZCBDUFUgaG90cGx1ZyBwYXRocy4gQ3J1Y2lhbGx5LCBpdCBpbmNsdWRlcyBLQVNBTiBpbnN0cnVtZW50YXRpb24gZm9yIGRpcmVjdCBQVEUgYWNjZXNzIGluIGxhenkgTU1VIG1vZGUuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCBrZXJuZWwgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyByaXBlIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S0FTQU4mIzM0OywKICAgICYjMzQ7S0FTQU5fR0VORVJJQyYjMzQ7LAogICAgJiMzNDtIT1RQTFVHX0NQVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSYjMzQ7LAogICAgJiMzNDthcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzJiMzNDssCiAgICAmIzM0O2FyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSYjMzQ7LAogICAgJiMzNDthcmNoX2ZsdXNoX2xhenlfbW11X21vZGUmIzM0OywKICAgICYjMzQ7bGF6eV9tbXVfb25saW5lX2NwdSYjMzQ7LAogICAgJiMzNDtsYXp5X21tdV9vZmZsaW5lX2NwdSYjMzQ7LAogICAgJiMzNDtfX2thc2FuX3BvaXNvbl9wdGUmIzM0OywKICAgICYjMzQ7X19rYXNhbl91bnBvaXNvbl9wdGUmIzM0OywKICAgICYjMzQ7X19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydCYjMzQ7LAogICAgJiMzNDtfX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGxhenkgTU1VIG1vZGUgZm9yIHMzOTAgYXJjaGl0ZWN0dXJlLCB3aGljaCBiYXRjaGVzIFBURSBpbnZhbGlkYXRpb25zIHVzaW5nIHRoZSBJUFRFLXJhbmdlIGZhY2lsaXR5LiBJdCBob29rcyBpbnRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzY2FsbHMgKG1hZHZpc2UsIG1wcm90ZWN0LCBtcmVtYXAsIHZtYWxsb2MpIGFuZCBDUFUgaG90cGx1ZyBwYXRocy4gSXQgYWxzbyBhZGRzIEtBU0FOIGluc3RydW1lbnRhdGlvbiBmb3IgZGlyZWN0IFBURSBhY2Nlc3NlcyBpbiBsYXp5IE1NVSBtb2RlLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGFuZCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLQVNBTiYjMzQ7LAogICAgJiMzNDtLQVNBTl9HRU5FUklDJiMzNDssCiAgICAmIzM0O0hPVFBMVUdfQ1BVJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlJiMzNDssCiAgICAmIzM0O2FyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMmIzM0OywKICAgICYjMzQ7YXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlJiMzNDssCiAgICAmIzM0O2FyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZSYjMzQ7LAogICAgJiMzNDtsYXp5X21tdV9vbmxpbmVfY3B1JiMzNDssCiAgICAmIzM0O2xhenlfbW11X29mZmxpbmVfY3B1JiMzNDssCiAgICAmIzM0O19fa2FzYW5fcG9pc29uX3B0ZSYjMzQ7LAogICAgJiMzNDtfX2thc2FuX3VucG9pc29uX3B0ZSYjMzQ7LAogICAgJiMzNDtfX19wdGVwX21vZGlmeV9wcm90X3N0YXJ0JiMzNDssCiAgICAmIzM0O19fX3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbGF6eSBNTVUgbW9kZSBmb3IgczM5MCBhcmNoaXRlY3R1cmUsIHdoaWNoIGJhdGNoZXMgUFRFIGludmFsaWRhdGlvbnMgdXNpbmcgdGhlIElQVEUtcmFuZ2UgZmFjaWxpdHkuIEl0IGhvb2tzIGludG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzeXNjYWxscyAobWFkdmlzZSwgbXByb3RlY3QsIG1yZW1hcCwgdm1hbGxvYykgYW5kIENQVSBob3RwbHVnIHBhdGhzLiBJdCBhbHNvIGFkZHMgS0FTQU4gaW5zdHJ1bWVudGF0aW9uIGZvciBkaXJlY3QgUFRFIGFjY2Vzc2VzIGluIGxhenkgTU1VIG1vZGUuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxhenkgTU1VIG1vZGUgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSB0byBidWZmZXIgcGFnZSB0YWJsZSBlbnRyeSAoUFRFKSB1cGRhdGVzLiBJdCBhbHNvIGV4cGxpY2l0bHkgYWRkcyBLQVNBTiBwb2lzb25pbmcvdW5wb2lzb25pbmcgdG8gZGV0ZWN0IGludmFsaWQgZGlyZWN0IGFjY2Vzc2VzIHRvIFBURXMgd2hpbGUgdGhlIGxhenkgTU1VIG1vZGUgaXMgYWN0aXZlLCBpbnRyb2R1Y2luZyBhIG5ldyBLQVNBTiBidWcgdHlwZSAoYGxhenktbW11LXB0ZS1hY2Nlc3NgKS4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IGNvbmZpbmVkIHRvIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHRhYmxlIG9wZXJhdGlvbnMuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIGFsbCBuZXdseSBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoZS5nLiwgYHN0cnVjdCBpcHRlX3JhbmdlYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlLmcuLCB2aWEgemVyby1hbGxvY2F0aW9uIGFuZCBleHBsaWNpdCBpbml0aWFsaXphdGlvbiBvZiB0aGUgYGNhY2hlYCBhcnJheSB0byBgUFRFX1BPSVNPTmApLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBpcyBwZXJmZWN0bHkgc3VpdGVkIGFuZCBleHBsaWNpdGx5IGVuaGFuY2VkIGJ5IHRoaXMgcGF0Y2ggdG8gY2F0Y2ggYW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNmMxMjY3M2YzNWRkZjJhMTQ3OTExNjRiNWRjZjlkNGMzY2Y1NGMyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMTI6Mzc6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IDg0NDA0ZTY3NzhkNTAuLjc4NDYzMzJkY2QwYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9LY29uZmlnCkBAIC05Nyw2ICYjNDM7OTcsNyBAQCBjb25maWcgUzM5MAogCXNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMCiAJc2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0UKIAlzZWxlY3QgQVJDSF9IQVNfS0NPVgomIzQzOwlzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERQogCXNlbGVjdCBBUkNIX0hBU19NRU1CQVJSSUVSX1NZTkNfQ09SRQogCXNlbGVjdCBBUkNIX0hBU19NRU1fRU5DUllQVAogCXNlbGVjdCBBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sYXp5X21tdS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xhenlfbW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uOTgzNjZlOWRlOWJjMwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sYXp5X21tdS5oCkBAIC0wLDAgJiM0MzsxLDkgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOyNpZm5kZWYgX19MQVpZX01NVV9ICiYjNDM7I2RlZmluZSBfX0xBWllfTU1VX0gKJiM0MzsKJiM0Mzt2b2lkIGxhenlfbW11X29ubGluZV9ib290X2NwdSh2b2lkKTsKJiM0MztpbnQgbGF6eV9tbXVfb25saW5lX2NwdShnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBjcHUpOwomIzQzO3ZvaWQgbGF6eV9tbXVfb2ZmbGluZV9jcHUodW5zaWduZWQgaW50IGNwdSk7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9fTEFaWV9NTVVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmgKaW5kZXggM2IzZWNjNjQ3OTkzZi4uZGJhMjM2NjY0ZGE5MCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oCkBAIC0xNjMsNyAmIzQzOzE2Myw3IEBAIHN0cnVjdCBsb3djb3JlIHsKIAlfX3MzMglwcmVlbXB0X2NvdW50OwkJCS8qIDB4MDNhOCAqLwogCV9fdTMyCXNwaW5sb2NrX2xvY2t2YWw7CQkvKiAweDAzYWMgKi8KIAlfX3UzMglzcGlubG9ja19pbmRleDsJCQkvKiAweDAzYjAgKi8KLQlfX3U4CXBhZF8weDAzYjRbMHgwM2I4LTB4MDNiNF07CS8qIDB4MDNiNCAqLwomIzQzOwlfX3MzMglsYXp5X21tdV9jb3VudDsJCQkvKiAweDAzYjQgKi8KIAlfX3U2NAlwZXJjcHVfb2Zmc2V0OwkJCS8qIDB4MDNiOCAqLwogCV9fdTgJcGVyY3B1X3JlZ2lzdGVyOwkJLyogMHgwM2MwICovCiAJX191OAlwYWRfMHgwM2MxWzB4MDQwMC0weDAzYzFdOwkvKiAweDAzYzEgKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDg1OWNlN2M3ZDQ1NDQuLjFlOGE3OTk4OWVkNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMzksNiAmIzQzOzM5LDY0IEBAIGVudW0gewogCiBleHRlcm4gYXRvbWljX2xvbmdfdCBkaXJlY3RfcGFnZXNfY291bnRbUEdfRElSRUNUX01BUF9NQVhdOwogCiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgaW50ICpyZXMpOwomIzQzO2Jvb2wgX19sYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcyk7CiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcyk7CiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IG9sZF9wdGUsIHB0ZV90IHB0ZSk7CiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTsKJiM0Mztib29sIF9fbGF6eV9tbXVfc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKTsKJiM0Mztib29sIF9fbGF6eV9tbXVfcHRlcF9nZXQocHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpOwomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19sYXp5X21tdV9hY3RpdmUodm9pZCkKJiM0Mzt7CiYjNDM7CWlmIChfX2lzX2RlZmluZWQoX19ERUNPTVBSRVNTT1IpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlpZiAoIWdldF9sb3djb3JlKCktJmd0O2xhenlfbW11X2NvdW50KQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZQomIzQzO2Jvb2wgbGF6eV9tbXVfcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBpbnQgKnJlcykKJiM0Mzt7CiYjNDM7CWlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CXJldHVybiBfX2xhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoYWRkciwgcHRlcCwgcmVzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZQomIzQzO2Jvb2wgbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpCiYjNDM7ewomIzQzOwlpZiAoIWlzX2xhenlfbW11X2FjdGl2ZSgpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlyZXR1cm4gX19sYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIoYWRkciwgcHRlcCwgcmVzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZQomIzQzO2Jvb2wgbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKQomIzQzO3sKJiM0MzsJaWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJcmV0dXJuIF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydChhZGRyLCBwdGVwLCByZXMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7Ym9vbCBsYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLAomIzQzOwkJCQkgICAgICBwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpCiYjNDM7ewomIzQzOwlpZiAoIWlzX2xhenlfbW11X2FjdGl2ZSgpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlyZXR1cm4gX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdChhZGRyLCBwdGVwLCBvbGRfcHRlLCBwdGUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7Ym9vbCBsYXp5X21tdV9wdGVwX3NldF93cnByb3RlY3QodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKJiM0Mzt7CiYjNDM7CWlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CXJldHVybiBfX2xhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdChhZGRyLCBwdGVwKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3BhZ2VfY291bnQoaW50IGxldmVsLCBsb25nIGNvdW50KQogewogCWlmIChJU19FTkFCTEVEKENPTkZJR19QUk9DX0ZTKSkKQEAgLTk3OCwxNyAmIzQzOzEwMzYsMzggQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wbWQocG1kX3QgKnBtZHAsIHBtZF90IHBtZCkKIAlXUklURV9PTkNFKCpwbWRwLCBwbWQpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKIHsKIAlpZiAocHRlX3ByZXNlbnQocHRlKSkKIAkJcHRlID0gY2xlYXJfcHRlX2JpdChwdGUsIF9fcGdwcm90KF9QQUdFX1VOVVNFRCkpOwogCVdSSVRFX09OQ0UoKnB0ZXAsIHB0ZSk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQomIzQzO3sKJiM0MzsJaWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSB8fCAhX19sYXp5X21tdV9zZXRfcHRlKHB0ZXAsIHB0ZSkpCiYjNDM7CQlfX3NldF9wdGUocHRlcCwgcHRlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBwdGVwX2dldF9sb2NrbGVzcyBwdGVwX2dldF9sb2NrbGVzcwomIzQzO3N0YXRpYyBpbmxpbmUgX19ub19zYW5pdGl6ZV9hZGRyZXNzIHB0ZV90IHB0ZXBfZ2V0X2xvY2tsZXNzKHB0ZV90ICpwdGVwKQomIzQzO3sKJiM0MzsJcmV0dXJuIFJFQURfT05DRSgqcHRlcCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgcHRlX3QgX19wdGVwX2dldChwdGVfdCAqcHRlcCkKJiM0Mzt7CiYjNDM7CXJldHVybiBSRUFEX09OQ0UoKnB0ZXApOwomIzQzO30KJiM0MzsKICNkZWZpbmUgcHRlcF9nZXQgcHRlcF9nZXQKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9nZXQocHRlX3QgKnB0ZXApCiB7Ci0JcmV0dXJuIFJFQURfT05DRSgqcHRlcCk7CiYjNDM7CXB0ZV90IHJlczsKJiM0MzsKJiM0MzsJaWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSB8fCAhX19sYXp5X21tdV9wdGVwX2dldChwdGVwLCAmYW1wO3JlcykpCiYjNDM7CQlyZXMgPSBfX3B0ZXBfZ2V0KHB0ZXApOwomIzQzOwlyZXR1cm4gcmVzOwogfQogCiAjZGVmaW5lIHBtZHBfZ2V0IHBtZHBfZ2V0CkBAIC0xMTgxLDYgJiM0MzsxMjYwLDE1IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3B0ZXBfaXB0ZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCBuciwKIAl9IHdoaWxlIChuciAhPSAyNTUpOwogfQogCiYjNDM7dm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJCQkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKJiM0MzsJCQkJCXB0ZV90ICpwdGUpOwomIzQzOyNkZWZpbmUgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcyBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzCiYjNDM7CiYjNDM7dm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGUodm9pZCk7CiYjNDM7dm9pZCBhcmNoX2xlYXZlX2xhenlfbW11X21vZGUodm9pZCk7CiYjNDM7dm9pZCBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUodm9pZCk7CiYjNDM7CiAvKgogICogVGhpcyBpcyBoYXJkIHRvIHVuZGVyc3RhbmQuIHB0ZXBfZ2V0X2FuZF9jbGVhciBhbmQgcHRlcF9jbGVhcl9mbHVzaAogICogYm90aCBjbGVhciB0aGUgVExCIGZvciB0aGUgdW5tYXBwZWQgcHRlLiBUaGUgcmVhc29uIGlzIHRoYXQKQEAgLTEyMDEsMTAgJiM0MzsxMjg5LDE2IEBAIHB0ZV90IHB0ZXBfeGNoZ19sYXp5KHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKiwgcHRlX3QpOwogc3RhdGljIGlubGluZSBib29sIHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCXVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCiB7Ci0JcHRlX3QgcHRlID0gcHRlcF9nZXQocHRlcCk7CiYjNDM7CXB0ZV90IHB0ZTsKJiM0MzsJaW50IHJlczsKIAotCXB0ZSA9IHB0ZXBfeGNoZ19kaXJlY3Qodm1hLSZndDt2bV9tbSwgYWRkciwgcHRlcCwgcHRlX21rb2xkKHB0ZSkpOwotCXJldHVybiBwdGVfeW91bmcocHRlKTsKJiM0MzsJaWYgKCFsYXp5X21tdV9wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKGFkZHIsIHB0ZXAsICZhbXA7cmVzKSkgewomIzQzOwkJcHRlID0gX19wdGVwX2dldChwdGVwKTsKJiM0MzsJCXB0ZSA9IHB0ZV9ta29sZChwdGUpOwomIzQzOwkJcHRlID0gcHRlcF94Y2hnX2RpcmVjdCh2bWEtJmd0O3ZtX21tLCBhZGRyLCBwdGVwLCBwdGUpOwomIzQzOwkJcmVzID0gcHRlX3lvdW5nKHB0ZSk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHJlczsKIH0KIAogI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSX1lPVU5HX0ZMVVNICkBAIC0xMjIwLDcgJiM0MzsxMzE0LDggQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiB7CiAJcHRlX3QgcmVzOwogCi0JcmVzID0gcHRlcF94Y2hnX2xhenkobW0sIGFkZHIsIHB0ZXAsIF9fcHRlKF9QQUdFX0lOVkFMSUQpKTsKJiM0MzsJaWYgKCFsYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIoYWRkciwgcHRlcCwgJmFtcDtyZXMpKQomIzQzOwkJcmVzID0gcHRlcF94Y2hnX2xhenkobW0sIGFkZHIsIHB0ZXAsIF9fcHRlKF9QQUdFX0lOVkFMSUQpKTsKIAlwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcihtbSwgYWRkciwgcmVzKTsKIAkvKiBBdCB0aGlzIHBvaW50IHRoZSByZWZlcmVuY2UgdGhyb3VnaCB0aGUgbWFwcGluZyBpcyBzdGlsbCBwcmVzZW50ICovCiAJaWYgKG1tX2lzX3Byb3RlY3RlZChtbSkgJmFtcDsmYW1wOyBwdGVfcHJlc2VudChyZXMpKQpAQCAtMTIyOSw5ICYjNDM7MTMyNCwyOCBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIH0KIAogI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX01PRElGWV9QUk9UX1RSQU5TQUNUSU9OCi1wdGVfdCBwdGVwX21vZGlmeV9wcm90X3N0YXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBwdGVfdCAqKTsKLXZvaWQgcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsCi0JCQkgICAgIHB0ZV90ICosIHB0ZV90LCBwdGVfdCk7CiYjNDM7cHRlX3QgX19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKik7CiYjNDM7dm9pZCBfX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywKJiM0MzsJCQkJcHRlX3QgKiwgcHRlX3QsIHB0ZV90KTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7cHRlX3QgcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKJiM0MzsJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCiYjNDM7ewomIzQzOwlwdGVfdCByZXM7CiYjNDM7CiYjNDM7CWlmICghbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydChhZGRyLCBwdGVwLCAmYW1wO3JlcykpCiYjNDM7CQlyZXMgPSBfX19wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHZtYSwgYWRkciwgcHRlcCk7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUKJiM0Mzt2b2lkIHB0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJICAgICBwdGVfdCAqcHRlcCwgcHRlX3Qgb2xkX3B0ZSwgcHRlX3QgcHRlKQomIzQzO3sKJiM0MzsJaWYgKCFsYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdChhZGRyLCBwdGVwLCBvbGRfcHRlLCBwdGUpKQomIzQzOwkJX19fcHRlcF9tb2RpZnlfcHJvdF9jb21taXQodm1hLCBhZGRyLCBwdGVwLCBvbGRfcHRlLCBwdGUpOwomIzQzO30KIAogI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSX0ZMVVNICiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCkBAIC0xMjYxLDExICYjNDM7MTM3NSwxMyBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogewogCXB0ZV90IHJlczsKIAotCWlmIChmdWxsKSB7Ci0JCXJlcyA9IHB0ZXBfZ2V0KHB0ZXApOwotCQlzZXRfcHRlKHB0ZXAsIF9fcHRlKF9QQUdFX0lOVkFMSUQpKTsKLQl9IGVsc2UgewotCQlyZXMgPSBwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpOwomIzQzOwlpZiAoIWxhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcihhZGRyLCBwdGVwLCAmYW1wO3JlcykpIHsKJiM0MzsJCWlmIChmdWxsKSB7CiYjNDM7CQkJcmVzID0gX19wdGVwX2dldChwdGVwKTsKJiM0MzsJCQlfX3NldF9wdGUocHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlyZXMgPSBwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpOwomIzQzOwkJfQogCX0KIAlwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcihtbSwgYWRkciwgcmVzKTsKIAkvKiBBdCB0aGlzIHBvaW50IHRoZSByZWZlcmVuY2UgdGhyb3VnaCB0aGUgbWFwcGluZyBpcyBzdGlsbCBwcmVzZW50ICovCkBAIC0xMjkxLDEwICYjNDM7MTQwNywxNSBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogc3RhdGljIGlubGluZSB2b2lkIHB0ZXBfc2V0X3dycHJvdGVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQogewotCXB0ZV90IHB0ZSA9IHB0ZXBfZ2V0KHB0ZXApOwomIzQzOwlwdGVfdCBwdGU7CiAKLQlpZiAocHRlX3dyaXRlKHB0ZSkpCi0JCXB0ZXBfeGNoZ19sYXp5KG1tLCBhZGRyLCBwdGVwLCBwdGVfd3Jwcm90ZWN0KHB0ZSkpOwomIzQzOwlpZiAoIWxhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdChhZGRyLCBwdGVwKSkgewomIzQzOwkJcHRlID0gX19wdGVwX2dldChwdGVwKTsKJiM0MzsJCWlmIChwdGVfd3JpdGUocHRlKSkgewomIzQzOwkJCXB0ZSA9IHB0ZV93cnByb3RlY3QocHRlKTsKJiM0MzsJCQlwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgcHRlKTsKJiM0MzsJCX0KJiM0MzsJfQogfQogCiAvKgpAQCAtMTMyNyw3ICYjNDM7MTQ0OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfZml4X3NwdXJpb3VzX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCSAqIFBURSBkb2VzIG5vdCBoYXZlIF9QQUdFX1BST1RFQ1Qgc2V0LCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBvdmVyaGVhZC4KIAkgKiBBIGxvY2FsIFJEUCBjYW4gYmUgdXNlZCB0byBkbyB0aGUgZmx1c2guCiAJICovCi0JaWYgKGNwdV9oYXNfcmRwKCkgJmFtcDsmYW1wOyAhKHB0ZV92YWwocHRlcF9nZXQocHRlcCkpICZhbXA7IF9QQUdFX1BST1RFQ1QpKQomIzQzOwlpZiAoY3B1X2hhc19yZHAoKSAmYW1wOyZhbXA7ICEocHRlX3ZhbChfX3B0ZXBfZ2V0KHB0ZXApKSAmYW1wOyBfUEFHRV9QUk9URUNUKSkKIAkJX19wdGVwX3JkcChhZGRyZXNzLCBwdGVwLCAxKTsKIH0KICNkZWZpbmUgZmx1c2hfdGxiX2ZpeF9zcHVyaW91c19mYXVsdCBmbHVzaF90bGJfZml4X3NwdXJpb3VzX2ZhdWx0CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKaW5kZXggYjYwMjg0MzI4ZmUzZC4uZjVhM2M5ZTFiNmI4OCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwpAQCAtNzcsNiAmIzQzOzc3LDcgQEAKICNpbmNsdWRlICZsdDthc20vbWFjY2Vzcy5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS91di5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9hc20tb2Zmc2V0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vbGF6eV9tbXUuaCZndDsKICNpbmNsdWRlICYjMzQ7ZW50cnkuaCYjMzQ7CiAKIC8qCkBAIC0xMDEyLDUgJiM0MzsxMDEzLDYgQEAgdm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKQogCiB2b2lkIF9faW5pdCBhcmNoX2NwdV9maW5hbGl6ZV9pbml0KHZvaWQpCiB7CiYjNDM7CWxhenlfbW11X29ubGluZV9ib290X2NwdSgpOwogCXNjbHBfaW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKaW5kZXggMGJhN2Y4OWI4MTYxMS4uMGE4MjZiYmFmMWRkYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCkBAIC01OSw2ICYjNDM7NTksNyBAQAogI2luY2x1ZGUgJmx0O2FzbS90b3BvbG9neS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS92ZHNvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL21hY2Nlc3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2xhenlfbW11LmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2VudHJ5LmgmIzM0OwogCiBlbnVtIHsKQEAgLTg2Niw2ICYjNDM7ODY3LDExIEBAIGludCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRpZGxlKQogCXJjID0gcGNwdV9hbGxvY19sb3djb3JlKHBjcHUsIGNwdSk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiYjNDM7CXJjID0gbGF6eV9tbXVfb25saW5lX2NwdShHRlBfS0VSTkVMLCBjcHUpOwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCXBjcHVfZnJlZV9sb3djb3JlKHBjcHUsIGNwdSk7CiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CX0KIAkvKgogCSAqIE1ha2Ugc3VyZSBnbG9iYWwgY29udHJvbCByZWdpc3RlciBjb250ZW50cyBkbyBub3QgY2hhbmdlCiAJICogdW50aWwgbmV3IENQVSBoYXMgaW5pdGlhbGl6ZWQgY29udHJvbCByZWdpc3RlcnMuCkBAIC05MjEsNiAmIzQzOzkyNyw3IEBAIHZvaWQgX19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCiAJcGNwdSA9IHBlcl9jcHVfcHRyKCZhbXA7cGNwdV9kZXZpY2VzLCBjcHUpOwogCXdoaWxlICghcGNwdV9zdG9wcGVkKHBjcHUpKQogCQljcHVfcmVsYXgoKTsKJiM0MzsJbGF6eV9tbXVfb2ZmbGluZV9jcHUoY3B1KTsKIAlwY3B1X2ZyZWVfbG93Y29yZShwY3B1LCBjcHUpOwogCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbW1fY3B1bWFzaygmYW1wO2luaXRfbW0pKTsKIAljcHVtYXNrX2NsZWFyX2NwdShjcHUsICZhbXA7aW5pdF9tbS5jb250ZXh0LmNwdV9hdHRhY2hfbWFzayk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vTWFrZWZpbGUgYi9hcmNoL3MzOTAvbW0vTWFrZWZpbGUKaW5kZXggMTkzODk5YzM5Y2E3Zi4uOTZjYWMzZTk5ZjUxNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9NYWtlZmlsZQpAQCAtNCw2ICYjNDM7NCw3IEBACiAjCiAKIG9iai15CQk6PSBpbml0Lm8gZmF1bHQubyBleHRtZW0ubyBtbWFwLm8gdm1lbS5vIG1hY2Nlc3MubwomIzQzO29iai15CQk6PSBpbml0Lm8gZmF1bHQubyBleHRtZW0ubyBtbWFwLm8gdm1lbS5vIG1hY2Nlc3MubyBsYXp5X21tdS5vCiBvYmoteQkJJiM0Mzs9IHBhZ2Utc3RhdGVzLm8gcGFnZWF0dHIubyBwZ3RhYmxlLm8gcGdhbGxvYy5vIGV4dGFibGUubwogCiBvYmotJChDT05GSUdfQ01NKQkJJiM0Mzs9IGNtbS5vCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYyBiL2FyY2gvczM5MC9tbS9sYXp5X21tdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjdlM2E0MTE1ZWEwNDgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYwpAQCAtMCwwICYjNDM7MSw0MTggQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wZ3RhYmxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2thc2FuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2ZhY2lsaXR5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9sYXp5X21tdS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtrdW5pdC92aXNpYmlsaXR5LmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBQVEVfUE9JU09OCV9QQUdFX0xBUkdFCiYjNDM7CiYjNDM7c3RydWN0IGlwdGVfcmFuZ2UgewomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKJiM0MzsJdW5zaWduZWQgbG9uZyBiYXNlX2FkZHI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYmFzZV9lbmQ7CiYjNDM7CXB0ZV90ICpiYXNlX3B0ZTsKJiM0MzsJcHRlX3QgKnN0YXJ0X3B0ZTsKJiM0MzsJcHRlX3QgKmVuZF9wdGU7CiYjNDM7CXB0ZV90IGNhY2hlW1BUUlNfUEVSX1BURV07CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGlwdGVfcmFuZ2UgKiwgaXB0ZV9yYW5nZSk7CiYjNDM7CiYjNDM7c3RhdGljIGludCBjb3VudF9jb250aWd1b3VzKHB0ZV90ICpzdGFydCwgcHRlX3QgKmVuZCwgYm9vbCAqdmFsaWQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHBhZ2VfaW52YWxpZF9iaXQ7CiYjNDM7CXB0ZV90ICpwdGVwLCBwdGU7CiYjNDM7CiYjNDM7CXB0ZSA9IF9fcHRlcF9nZXQoc3RhcnQpOwomIzQzOwlwYWdlX2ludmFsaWRfYml0ID0gcHRlX3ZhbChwdGUpICZhbXA7IF9QQUdFX0lOVkFMSUQ7CiYjNDM7CiYjNDM7CWZvciAocHRlcCA9IHN0YXJ0ICYjNDM7IDE7IHB0ZXAgJmx0OyBlbmQ7IHB0ZXAmIzQzOyYjNDM7KSB7CiYjNDM7CQlwdGUgPSBfX3B0ZXBfZ2V0KHB0ZXApOwomIzQzOwkJaWYgKChwdGVfdmFsKHB0ZSkgJmFtcDsgX1BBR0VfSU5WQUxJRCkgIT0gcGFnZV9pbnZhbGlkX2JpdCkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwkqdmFsaWQgPSAhKHBhZ2VfaW52YWxpZF9iaXQpOwomIzQzOwlyZXR1cm4gcHRlcCAtIHN0YXJ0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX2ludmFsaWRhdGVfcHRlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJCSAgIGludCBucl9wdGVzLCBwdGVfdCAqcHRlcCkKJiM0Mzt7CiYjNDM7CWF0b21pY19pbmMoJmFtcDttbS0mZ3Q7Y29udGV4dC5mbHVzaF9jb3VudCk7CiYjNDM7CWlmIChjcHVfaGFzX3RsYl9sYygpICZhbXA7JmFtcDsgY3B1bWFza19lcXVhbChtbV9jcHVtYXNrKG1tKSwgY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKSkKJiM0MzsJCV9fcHRlcF9pcHRlX3JhbmdlKGFkZHIsIG5yX3B0ZXMgLSAxLCBwdGVwLCBJUFRFX0xPQ0FMKTsKJiM0MzsJZWxzZQomIzQzOwkJX19wdGVwX2lwdGVfcmFuZ2UoYWRkciwgbnJfcHRlcyAtIDEsIHB0ZXAsIElQVEVfR0xPQkFMKTsKJiM0MzsJYXRvbWljX2RlYygmYW1wO21tLSZndDtjb250ZXh0LmZsdXNoX2NvdW50KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpbnZhbGlkYXRlX3B0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCQlwdGVfdCAqc3RhcnQsIHB0ZV90ICplbmQpCiYjNDM7ewomIzQzOwlpbnQgbnJfcHRlczsKJiM0MzsJYm9vbCB2YWxpZDsKJiM0MzsKJiM0MzsJbnJfcHRlcyA9IGNvdW50X2NvbnRpZ3VvdXMoc3RhcnQsIGVuZCwgJmFtcDt2YWxpZCk7CiYjNDM7CWlmICh2YWxpZCkKJiM0MzsJCV9faW52YWxpZGF0ZV9wdGVfcmFuZ2UobW0sIGFkZHIsIG5yX3B0ZXMsIHN0YXJ0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIG5yX3B0ZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldF9wdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCQkgIHB0ZV90ICpzdGFydCwgcHRlX3QgKmVuZCwgcHRlX3QgKmNhY2hlKQomIzQzO3sKJiM0MzsJaW50IG5yX3B0ZXMsIG5yX3RvdGFsID0gZW5kIC0gc3RhcnQ7CiYjNDM7CXB0ZV90ICpwdGVwID0gc3RhcnQ7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlrYXNhbl91bnBvaXNvbl9wdGUoc3RhcnQsIG5yX3RvdGFsKTsKJiM0MzsJd2hpbGUgKHB0ZXAgJmx0OyBlbmQpIHsKJiM0MzsJCW5yX3B0ZXMgPSBpbnZhbGlkYXRlX3B0ZV9yYW5nZShtbSwgYWRkciwgcHRlcCwgZW5kKTsKJiM0MzsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBucl9wdGVzOyBpJiM0MzsmIzQzOywgcHRlcCYjNDM7JiM0MzssIGNhY2hlJiM0MzsmIzQzOykgewomIzQzOwkJCV9fc2V0X3B0ZShwdGVwLCAqY2FjaGUpOwomIzQzOwkJCSpjYWNoZSA9IF9fcHRlKFBURV9QT0lTT04pOwomIzQzOwkJfQomIzQzOwomIzQzOwkJYWRkciAmIzQzOz0gbnJfcHRlcyAqIFBBR0VfU0laRTsKJiM0MzsJfQomIzQzOwlrYXNhbl9wb2lzb25fcHRlKHN0YXJ0LCBucl90b3RhbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVudGVyX2lwdGVfbm9yYW5nZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGlwdGVfcmFuZ2UgX19tYXliZV91bnVzZWQgKnJhbmdlOwomIzQzOwomIzQzOwlpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlsb2NhbF9iaF9kaXNhYmxlKCk7CiYjNDM7CiYjNDM7CXJhbmdlID0gZ2V0X2NwdV92YXIoaXB0ZV9yYW5nZSk7CiYjNDM7CWdldF9sb3djb3JlKCktJmd0O2xhenlfbW11X2NvdW50JiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVudGVyX2lwdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiYjNDM7CQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBwdGVfdCAqcHRlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlOwomIzQzOwl1bnNpZ25lZCBpbnQgbnJfcHRlczsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2ZhY2lsaXR5KDEzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbG9jYWxfYmhfZGlzYWJsZSgpOwomIzQzOwomIzQzOwlyYW5nZSA9IGdldF9jcHVfdmFyKGlwdGVfcmFuZ2UpOwomIzQzOwlnZXRfbG93Y29yZSgpLSZndDtsYXp5X21tdV9jb3VudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CWlmIChtbV9pc19wcm90ZWN0ZWQobW0pKSB7CiYjNDM7CQlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlyYW5nZS0mZ3Q7bW0gPSBtbTsKJiM0MzsJcmFuZ2UtJmd0O2Jhc2VfYWRkciA9IGFkZHI7CiYjNDM7CXJhbmdlLSZndDtiYXNlX2VuZCA9IGVuZDsKJiM0MzsJcmFuZ2UtJmd0O2Jhc2VfcHRlID0gcHRlOwomIzQzOwomIzQzOwlucl9wdGVzID0gKHJhbmdlLSZndDtiYXNlX2VuZCAtIHJhbmdlLSZndDtiYXNlX2FkZHIpIC8gUEFHRV9TSVpFOwomIzQzOwlrYXNhbl9wb2lzb25fcHRlKHJhbmdlLSZndDtiYXNlX3B0ZSwgbnJfcHRlcyk7CiYjNDM7CiYjNDM7CWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBsZWF2ZV9pcHRlX3JhbmdlKHZvaWQpCiYjNDM7ewomIzQzOwlwdGVfdCAqcHRlcCwgKnN0YXJ0LCAqc3RhcnRfY2FjaGUsICpjYWNoZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyLCBhZGRyOwomIzQzOwlzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7CiYjNDM7CXVuc2lnbmVkIGludCBucl9wdGVzOwomIzQzOwlpbnQgc3RhcnRfaWR4OwomIzQzOwomIzQzOwlpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlsb2NhbF9iaF9kaXNhYmxlKCk7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X3ByZWVtcHRpb25fZGlzYWJsZWQoKTsKJiM0MzsJcmFuZ2UgPSB0aGlzX2NwdV9yZWFkKGlwdGVfcmFuZ2UpOwomIzQzOwlpZiAoIXJhbmdlLSZndDttbSkKJiM0MzsJCWdvdG8gbm9yYW5nZTsKJiM0MzsJaWYgKCFyYW5nZS0mZ3Q7c3RhcnRfcHRlKQomIzQzOwkJZ290byBkb25lOwomIzQzOwomIzQzOwlzdGFydCA9IHJhbmdlLSZndDtzdGFydF9wdGU7CiYjNDM7CXN0YXJ0X2lkeCA9IHJhbmdlLSZndDtzdGFydF9wdGUgLSByYW5nZS0mZ3Q7YmFzZV9wdGU7CiYjNDM7CXN0YXJ0X2FkZHIgPSByYW5nZS0mZ3Q7YmFzZV9hZGRyICYjNDM7IHN0YXJ0X2lkeCAqIFBBR0VfU0laRTsKJiM0MzsJYWRkciA9IHN0YXJ0X2FkZHI7CiYjNDM7CXN0YXJ0X2NhY2hlID0gJmFtcDtyYW5nZS0mZ3Q7Y2FjaGVbc3RhcnRfaWR4XTsKJiM0MzsJY2FjaGUgPSBzdGFydF9jYWNoZTsKJiM0MzsJZm9yIChwdGVwID0gc3RhcnQ7IHB0ZXAgJmx0OyByYW5nZS0mZ3Q7ZW5kX3B0ZTsgcHRlcCYjNDM7JiM0MzssIGNhY2hlJiM0MzsmIzQzOywgYWRkciAmIzQzOz0gUEFHRV9TSVpFKSB7CiYjNDM7CQlpZiAocHRlX3ZhbCgqY2FjaGUpID09IFBURV9QT0lTT04pIHsKJiM0MzsJCQlpZiAoc3RhcnQpIHsKJiM0MzsJCQkJc2V0X3B0ZV9yYW5nZShyYW5nZS0mZ3Q7bW0sIHN0YXJ0X2FkZHIsIHN0YXJ0LCBwdGVwLCBzdGFydF9jYWNoZSk7CiYjNDM7CQkJCXN0YXJ0ID0gTlVMTDsKJiM0MzsJCQl9CiYjNDM7CQl9IGVsc2UgaWYgKCFzdGFydCkgewomIzQzOwkJCXN0YXJ0ID0gcHRlcDsKJiM0MzsJCQlzdGFydF9hZGRyID0gYWRkcjsKJiM0MzsJCQlzdGFydF9jYWNoZSA9IGNhY2hlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXNldF9wdGVfcmFuZ2UocmFuZ2UtJmd0O21tLCBzdGFydF9hZGRyLCBzdGFydCwgcHRlcCwgc3RhcnRfY2FjaGUpOwomIzQzOwomIzQzOwlyYW5nZS0mZ3Q7c3RhcnRfcHRlID0gTlVMTDsKJiM0MzsJcmFuZ2UtJmd0O2VuZF9wdGUgPSBOVUxMOwomIzQzOwomIzQzO2RvbmU6CiYjNDM7CW5yX3B0ZXMgPSAocmFuZ2UtJmd0O2Jhc2VfZW5kIC0gcmFuZ2UtJmd0O2Jhc2VfYWRkcikgLyBQQUdFX1NJWkU7CiYjNDM7CWthc2FuX3VucG9pc29uX3B0ZShyYW5nZS0mZ3Q7YmFzZV9wdGUsIG5yX3B0ZXMpOwomIzQzOwomIzQzOwlyYW5nZS0mZ3Q7bW0gPSBOVUxMOwomIzQzOwlyYW5nZS0mZ3Q7YmFzZV9hZGRyID0gMDsKJiM0MzsJcmFuZ2UtJmd0O2Jhc2VfZW5kID0gMDsKJiM0MzsJcmFuZ2UtJmd0O2Jhc2VfcHRlID0gTlVMTDsKJiM0MzsKJiM0Mztub3JhbmdlOgomIzQzOwlnZXRfbG93Y29yZSgpLSZndDtsYXp5X21tdV9jb3VudC0tOwomIzQzOwlwdXRfY3B1X3ZhcihpcHRlX3JhbmdlKTsKJiM0MzsKJiM0MzsJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGZsdXNoX2xhenlfbW11X21vZGUodm9pZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWRkciwgZW5kOwomIzQzOwlzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwomIzQzOwlwdGVfdCAqcHRlOwomIzQzOwomIzQzOwlpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlyYW5nZSA9IGdldF9jcHVfdmFyKGlwdGVfcmFuZ2UpOwomIzQzOwlpZiAocmFuZ2UtJmd0O21tKSB7CiYjNDM7CQltbSA9IHJhbmdlLSZndDttbTsKJiM0MzsJCWFkZHIgPSByYW5nZS0mZ3Q7YmFzZV9hZGRyOwomIzQzOwkJZW5kID0gcmFuZ2UtJmd0O2Jhc2VfZW5kOwomIzQzOwkJcHRlID0gcmFuZ2UtJmd0O2Jhc2VfcHRlOwomIzQzOwomIzQzOwkJbGVhdmVfaXB0ZV9yYW5nZSgpOwomIzQzOwkJZW50ZXJfaXB0ZV9yYW5nZShtbSwgYWRkciwgZW5kLCBwdGUpOwomIzQzOwl9CiYjNDM7CXB1dF9jcHVfdmFyKGlwdGVfcmFuZ2UpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSh2b2lkKQomIzQzO3sKJiM0MzsJZW50ZXJfaXB0ZV9ub3JhbmdlKCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfSUZfS1VOSVQoYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKTsKJiM0MzsKJiM0Mzt2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiYjNDM7CQkJCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAomIzQzOwkJCQkJcHRlX3QgKnB0ZSkKJiM0Mzt7CiYjNDM7CWVudGVyX2lwdGVfcmFuZ2UobW0sIGFkZHIsIGVuZCwgcHRlKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9JRl9LVU5JVChhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKTsKJiM0MzsKJiM0Mzt2b2lkIGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSh2b2lkKQomIzQzO3sKJiM0MzsJbGVhdmVfaXB0ZV9yYW5nZSgpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSk7CiYjNDM7CiYjNDM7dm9pZCBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUodm9pZCkKJiM0Mzt7CiYjNDM7CWZsdXNoX2xhenlfbW11X21vZGUoKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9JRl9LVU5JVChhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUpOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9faXB0ZV9yYW5nZV9zZXRfcHRlKHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZSwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpZHggPSBwdGVwIC0gcmFuZ2UtJmd0O2Jhc2VfcHRlOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9wcmVlbXB0aW9uX2Rpc2FibGVkKCk7CiYjNDM7CXJhbmdlLSZndDtjYWNoZVtpZHhdID0gcHRlOwomIzQzOwomIzQzOwlpZiAoIXJhbmdlLSZndDtzdGFydF9wdGUpIHsKJiM0MzsJCXJhbmdlLSZndDtzdGFydF9wdGUgPSBwdGVwOwomIzQzOwkJcmFuZ2UtJmd0O2VuZF9wdGUgPSBwdGVwICYjNDM7IDE7CiYjNDM7CX0gZWxzZSBpZiAocHRlcCAmbHQ7IHJhbmdlLSZndDtzdGFydF9wdGUpIHsKJiM0MzsJCXJhbmdlLSZndDtzdGFydF9wdGUgPSBwdGVwOwomIzQzOwl9IGVsc2UgaWYgKHB0ZXAgJiM0MzsgMSAmZ3Q7IHJhbmdlLSZndDtlbmRfcHRlKSB7CiYjNDM7CQlyYW5nZS0mZ3Q7ZW5kX3B0ZSA9IHB0ZXAgJiM0MzsgMTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgcHRlX3QgX19pcHRlX3JhbmdlX3B0ZXBfZ2V0KHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZSwgcHRlX3QgKnB0ZXApCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgaWR4ID0gcHRlcCAtIHJhbmdlLSZndDtiYXNlX3B0ZTsKJiM0MzsJcHRlX3QgcHRlOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9wcmVlbXB0aW9uX2Rpc2FibGVkKCk7CiYjNDM7CWlmIChwdGVfdmFsKHJhbmdlLSZndDtjYWNoZVtpZHhdKSA9PSBQVEVfUE9JU09OKSB7CiYjNDM7CQlrYXNhbl91bnBvaXNvbl9wdGUocHRlcCwgMSk7CiYjNDM7CQlwdGUgPSBfX3B0ZXBfZ2V0KHB0ZXApOwomIzQzOwkJa2FzYW5fcG9pc29uX3B0ZShwdGVwLCAxKTsKJiM0MzsKJiM0MzsJCXJldHVybiBwdGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJhbmdlLSZndDtjYWNoZVtpZHhdOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGlwdGVfcmFuZ2UgKnRoaXNfaXB0ZV9yYW5nZShwdGVfdCAqcHRlcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTsKJiM0MzsJdW5zaWduZWQgaW50IG5yX3B0ZXM7CiYjNDM7CiYjNDM7CXJhbmdlID0gdGhpc19jcHVfcmVhZChpcHRlX3JhbmdlKTsKJiM0MzsJaWYgKHB0ZXAgJmx0OyByYW5nZS0mZ3Q7YmFzZV9wdGUpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJbnJfcHRlcyA9IChyYW5nZS0mZ3Q7YmFzZV9lbmQgLSByYW5nZS0mZ3Q7YmFzZV9hZGRyKSAvIFBBR0VfU0laRTsKJiM0MzsJaWYgKHB0ZXAgJmd0Oz0gcmFuZ2UtJmd0O2Jhc2VfcHRlICYjNDM7IG5yX3B0ZXMpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHJhbmdlOwomIzQzO30KJiM0MzsKJiM0Mztib29sIF9fbGF6eV9tbXVfc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlOwomIzQzOwomIzQzOwlyYW5nZSA9IHRoaXNfaXB0ZV9yYW5nZShwdGVwKTsKJiM0MzsJaWYgKCFyYW5nZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJX19pcHRlX3JhbmdlX3NldF9wdGUocmFuZ2UsIHB0ZXAsIHB0ZSk7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0Mztib29sIF9fbGF6eV9tbXVfcHRlcF9nZXQocHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7CiYjNDM7CiYjNDM7CXJhbmdlID0gdGhpc19pcHRlX3JhbmdlKHB0ZXApOwomIzQzOwlpZiAoIXJhbmdlKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkqcmVzID0gX19pcHRlX3JhbmdlX3B0ZXBfZ2V0KHJhbmdlLCBwdGVwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgX19sYXp5X21tdV9wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIGludCAqcmVzKQomIzQzO3sKJiM0MzsJc3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlOwomIzQzOwlwdGVfdCBwdGUsIG9sZDsKJiM0MzsKJiM0MzsJcmFuZ2UgPSB0aGlzX2lwdGVfcmFuZ2UocHRlcCk7CiYjNDM7CWlmICghcmFuZ2UpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW9sZCA9IF9faXB0ZV9yYW5nZV9wdGVwX2dldChyYW5nZSwgcHRlcCk7CiYjNDM7CXB0ZSA9IHB0ZV9ta29sZChvbGQpOwomIzQzOwlfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTsKJiM0MzsJKnJlcyA9IHB0ZV95b3VuZyhvbGQpOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcih1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKQomIzQzO3sKJiM0MzsJc3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlOwomIzQzOwlwdGVfdCBwdGUsIG9sZDsKJiM0MzsKJiM0MzsJcmFuZ2UgPSB0aGlzX2lwdGVfcmFuZ2UocHRlcCk7CiYjNDM7CWlmICghcmFuZ2UpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW9sZCA9IF9faXB0ZV9yYW5nZV9wdGVwX2dldChyYW5nZSwgcHRlcCk7CiYjNDM7CXB0ZSA9IF9fcHRlKF9QQUdFX0lOVkFMSUQpOwomIzQzOwlfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTsKJiM0MzsJKnJlcyA9IG9sZDsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19sYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIoYWRkciwgcHRlcCwgcmVzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsCiYjNDM7CQkJCQlwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7CiYjNDM7CiYjNDM7CXJhbmdlID0gdGhpc19pcHRlX3JhbmdlKHB0ZXApOwomIzQzOwlpZiAoIXJhbmdlKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgX19sYXp5X21tdV9wdGVwX3NldF93cnByb3RlY3QodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTsKJiM0MzsJcHRlX3QgcHRlOwomIzQzOwomIzQzOwlyYW5nZSA9IHRoaXNfaXB0ZV9yYW5nZShwdGVwKTsKJiM0MzsJaWYgKCFyYW5nZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcHRlID0gX19pcHRlX3JhbmdlX3B0ZXBfZ2V0KHJhbmdlLCBwdGVwKTsKJiM0MzsJaWYgKHB0ZV93cml0ZShwdGUpKSB7CiYjNDM7CQlwdGUgPSBwdGVfd3Jwcm90ZWN0KHB0ZSk7CiYjNDM7CQlfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGxhenlfbW11X29ubGluZV9jcHUoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgY3B1KQomIzQzO3sKJiM0MzsJc3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2ZhY2lsaXR5KDEzKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyYW5nZSA9IGt6YWxsb2Nfb2JqKCpyYW5nZSwgZ2ZwKTsKJiM0MzsJaWYgKCFyYW5nZSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShyYW5nZS0mZ3Q7Y2FjaGUpOyBpJiM0MzsmIzQzOykKJiM0MzsJCXJhbmdlLSZndDtjYWNoZVtpXSA9IF9fcHRlKFBURV9QT0lTT04pOwomIzQzOwlwZXJfY3B1KGlwdGVfcmFuZ2UsIGNwdSkgPSByYW5nZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbGF6eV9tbXVfb2ZmbGluZV9jcHUodW5zaWduZWQgaW50IGNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2ZhY2lsaXR5KDEzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcmFuZ2UgPSBwZXJfY3B1KGlwdGVfcmFuZ2UsIGNwdSk7CiYjNDM7CXBlcl9jcHUoaXB0ZV9yYW5nZSwgY3B1KSA9IE5VTEw7CiYjNDM7CWtmcmVlKHJhbmdlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX2luaXQgbGF6eV9tbXVfb25saW5lX2Jvb3RfY3B1KHZvaWQpCiYjNDM7ewomIzQzOwlsYXp5X21tdV9vbmxpbmVfY3B1KEdGUF9BVE9NSUMsIDApOwomIzQzO30KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCmluZGV4IDRhY2Q4YjE0MGM0YmQuLmRmMzY1MjNiY2JiYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL21tL3BndGFibGUuYwpAQCAtMTY2LDE0ICYjNDM7MTY2LDE0IEBAIHB0ZV90IHB0ZXBfeGNoZ19sYXp5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiB9CiBFWFBPUlRfU1lNQk9MKHB0ZXBfeGNoZ19sYXp5KTsKIAotcHRlX3QgcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgICBwdGVfdCAqcHRlcCkKJiM0MztwdGVfdCBfX19wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJCXB0ZV90ICpwdGVwKQogewogCXJldHVybiBwdGVwX2ZsdXNoX2xhenkodm1hLSZndDt2bV9tbSwgYWRkciwgcHRlcCwgMSk7CiB9CiAKLXZvaWQgcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IG9sZF9wdGUsIHB0ZV90IHB0ZSkKJiM0Mzt2b2lkIF9fX3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJCXB0ZV90ICpwdGVwLCBwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpCiB7CiAJc2V0X3B0ZShwdGVwLCBwdGUpOwogfQpkaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jCmluZGV4IDIyOWQxZmMzZDdmMWMuLjkxNjc4NWMzYjJlMGIgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvdGFza19tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9wcm9jL3Rhc2tfbW11LmMKQEAgLTI4NTIsNyAmIzQzOzI4NTIsNyBAQCBzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJcmV0dXJuIDA7CiAJfQogCi0JbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKJiM0MzsJbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKHZtYS0mZ3Q7dm1fbW0sIHN0YXJ0LCBlbmQsIHN0YXJ0X3B0ZSk7CiAKIAlpZiAoKHAtJmd0O2FyZy5mbGFncyAmYW1wOyBQTV9TQ0FOX1dQX01BVENISU5HKSAmYW1wOyZhbXA7ICFwLSZndDt2ZWNfb3V0KSB7CiAJCS8qIEZhc3QgcGF0aCBmb3IgcGVyZm9ybWluZyBleGNsdXNpdmUgV1AgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2FzYW4uaCBiL2luY2x1ZGUvbGludXgva2FzYW4uaAppbmRleCBiZjIzM2JkZTY4YzdlLi4xYWE0ZDlkZDI0ODVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2thc2FuLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rYXNhbi5oCkBAIC02LDYgJiM0Mzs2LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9rYXNhbi1lbmFibGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2FzYW4tdGFncy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wZ3RhYmxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RhdGljX2tleS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKQEAgLTM1LDggJiM0MzszNiw2IEBAIHR5cGVkZWYgdW5zaWduZWQgaW50IF9fYml0d2lzZSBrYXNhbl92bWFsbG9jX2ZsYWdzX3Q7CiAKICNpZiBkZWZpbmVkKENPTkZJR19LQVNBTl9HRU5FUklDKSB8fCBkZWZpbmVkKENPTkZJR19LQVNBTl9TV19UQUdTKQogCi0jaW5jbHVkZSAmbHQ7bGludXgvcGd0YWJsZS5oJmd0OwotCiAvKiBTb2Z0d2FyZSBLQVNBTiBpbXBsZW1lbnRhdGlvbnMgdXNlIHNoYWRvdyBtZW1vcnkuICovCiAKICNpZmRlZiBDT05GSUdfS0FTQU5fU1dfVEFHUwpAQCAtMTM0LDYgJiM0MzsxMzMsMjAgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGthc2FuX3BvaXNvbl9zbGFiKHN0cnVjdCBzbGFiICpzbGFiKQogCQlfX2thc2FuX3BvaXNvbl9zbGFiKHNsYWIpOwogfQogCiYjNDM7dm9pZCBfX2thc2FuX3BvaXNvbl9wdGUocHRlX3QgKnB0ZSwgaW50IG5yKTsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQga2FzYW5fcG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpCiYjNDM7ewomIzQzOwlpZiAoa2FzYW5fZW5hYmxlZCgpKQomIzQzOwkJX19rYXNhbl9wb2lzb25fcHRlKHB0ZSwgbnIpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIF9fa2FzYW5fdW5wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucik7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGthc2FuX3VucG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpCiYjNDM7ewomIzQzOwlpZiAoa2FzYW5fZW5hYmxlZCgpKQomIzQzOwkJX19rYXNhbl91bnBvaXNvbl9wdGUocHRlLCBucik7CiYjNDM7fQomIzQzOwogdm9pZCBfX2thc2FuX3VucG9pc29uX25ld19vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB2b2lkICpvYmplY3QpOwogLyoqCiAgKiBrYXNhbl91bnBvaXNvbl9uZXdfb2JqZWN0IC0gVGVtcG9yYXJpbHkgdW5wb2lzb24gYSBuZXcgc2xhYiBvYmplY3QuCkBAIC00MTQsNiAmIzQzOzQyNyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrYXNhbl91bnBvaXNvbl9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLAogCXJldHVybiBmYWxzZTsKIH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYikge30KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fcG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpIHt9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGthc2FuX3VucG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fdW5wb2lzb25fbmV3X29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsCiAJCQkJCXZvaWQgKm9iamVjdCkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fbmV3X29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaCBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCmluZGV4IDI5ODFlMzg2ZGE3YjMuLmNjODVkYWYzMDczOWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCkBAIC0yNzEsNiAmIzQzOzI3MSw1MCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9lbmFibGUodm9pZCkKIAkJYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7CiB9CiAKJiM0MzsjaWZuZGVmIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHB0ZV90ICpwdGVwKQomIzQzO3sKJiM0MzsJYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwomIzQzOy8qKgomIzQzOyAqIGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcygpIC0gRW5hYmxlIHRoZSBsYXp5IE1NVSBtb2RlIHdpdGggYSBzcGVlZHVwIGhpbnQuCiYjNDM7ICogQG1tOiBBZGRyZXNzIHNwYWNlIHRoZSBwYWdlcyBhcmUgbWFwcGVkIGludG8uCiYjNDM7ICogQGFkZHI6IFN0YXJ0IGFkZHJlc3Mgb2YgdGhlIHJhbmdlLgomIzQzOyAqIEBlbmQ6IEVuZCBhZGRyZXNzIG9mIHRoZSByYW5nZS4KJiM0MzsgKiBAcHRlcDogUGFnZSB0YWJsZSBwb2ludGVyIGZvciB0aGUgZmlyc3QgZW50cnkuCiYjNDM7ICoKJiM0MzsgKiBFbnRlcnMgYSBuZXcgbGF6eSBNTVUgbW9kZSBzZWN0aW9uOyBpZiB0aGUgbW9kZSB3YXMgbm90IGFscmVhZHkgZW5hYmxlZCwKJiM0MzsgKiBlbmFibGVzIGl0IGFuZCBjYWxscyBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKCkuCiYjNDM7ICoKJiM0MzsgKiBQVEVzIHRoYXQgZmFsbCB3aXRoaW4gdGhlIHNwZWNpZmllZCByYW5nZSBtaWdodCBvYnNlcnZlIHVwZGF0ZSBzcGVlZHVwcy4KJiM0MzsgKiBUaGUgUFRFcyBtdXN0IGJlbG9uZyB0byB0aGUgc3BlY2lmaWVkIGFkZHJlc3Mgc3BhY2UgYW5kIGJlIGluIHRoZSBzYW1lIFBNRC4KJiM0MzsgKgomIzQzOyAqIFRoZXJlIGFyZSBubyByZXF1aXJlbWVudHMgb24gdGhlIG9yZGVyIG9yIHJhbmdlIGNvbXBsZXRlbmVzcyBvZiBQVEUKJiM0MzsgKiB1cGRhdGVzIGZvciB0aGUgc3BlY2lmaWVkIHJhbmdlLgomIzQzOyAqCiYjNDM7ICogTXVzdCBiZSBwYWlyZWQgd2l0aCBhIGNhbGwgdG8gbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCkuCiYjNDM7ICoKJiM0MzsgKiBIYXMgbm8gZWZmZWN0IGlmIGNhbGxlZDoKJiM0MzsgKiAtIFdoaWxlIHBhdXNlZCAtIHNlZSBsYXp5X21tdV9tb2RlX3BhdXNlKCkKJiM0MzsgKiAtIEluIGludGVycnVwdCBjb250ZXh0CiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHB0ZV90ICpwdGVwKQomIzQzO3sKJiM0MzsJc3RydWN0IGxhenlfbW11X3N0YXRlICpzdGF0ZSA9ICZhbXA7Y3VycmVudC0mZ3Q7bGF6eV9tbXVfc3RhdGU7CiYjNDM7CiYjNDM7CWlmIChpbl9pbnRlcnJ1cHQoKSB8fCBzdGF0ZS0mZ3Q7cGF1c2VfY291bnQgJmd0OyAwKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlWTV9XQVJOX09OX09OQ0Uoc3RhdGUtJmd0O2VuYWJsZV9jb3VudCA9PSBVOF9NQVgpOwomIzQzOwomIzQzOwlpZiAoc3RhdGUtJmd0O2VuYWJsZV9jb3VudCYjNDM7JiM0MzsgPT0gMCkKJiM0MzsJCWFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgcHRlcCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBsYXp5X21tdV9tb2RlX2Rpc2FibGUoKSAtIERpc2FibGUgdGhlIGxhenkgTU1VIG1vZGUuCiAgKgpAQCAtMzg3LDYgJiM0Mzs0MzEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9yZXN1bWUodm9pZCkKIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9lbmFibGUodm9pZCkge30KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgcHRlX3QgKnB0ZXApIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9kaXNhYmxlKHZvaWQpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9wYXVzZSh2b2lkKSB7fQogc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfcmVzdW1lKHZvaWQpIHt9CmRpZmYgLS1naXQgYS9tbS9rYXNhbi9jb21tb24uYyBiL21tL2thc2FuL2NvbW1vbi5jCmluZGV4IGI3ZDA1YzJhNmQ5M2QuLjk0ZDEwNjA5NDk4OTEgMTAwNjQ0Ci0tLSBhL21tL2thc2FuL2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2thc2FuL2NvbW1vbi5jCkBAIC0xNjMsNiAmIzQzOzE2MywyMCBAQCB2b2lkIF9fa2FzYW5fcG9pc29uX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIpCiAJCSAgICAgS0FTQU5fU0xBQl9SRURaT05FLCBmYWxzZSk7CiB9CiAKJiM0Mzt2b2lkIF9fa2FzYW5fcG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpCiYjNDM7ewomIzQzOwlpZiAoSVNfQUxJR05FRChzaXplb2YoKnB0ZSksIEtBU0FOX0dSQU5VTEVfU0laRSkpCiYjNDM7CQlrYXNhbl9wb2lzb24ocHRlLCBzaXplb2YoKnB0ZSkgKiBuciwgS0FTQU5fTEFaWV9NTVVfUFRFLCBmYWxzZSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKF9fa2FzYW5fcG9pc29uX3B0ZSk7CiYjNDM7CiYjNDM7dm9pZCBfX2thc2FuX3VucG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpCiYjNDM7ewomIzQzOwlpZiAoSVNfQUxJR05FRChzaXplb2YoKnB0ZSksIEtBU0FOX0dSQU5VTEVfU0laRSkpCiYjNDM7CQlrYXNhbl91bnBvaXNvbihwdGUsIHNpemVvZigqcHRlKSAqIG5yLCBmYWxzZSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKF9fa2FzYW5fdW5wb2lzb25fcHRlKTsKJiM0MzsKIHZvaWQgX19rYXNhbl91bnBvaXNvbl9uZXdfb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSwgdm9pZCAqb2JqZWN0KQogewogCWthc2FuX3VucG9pc29uKG9iamVjdCwgY2FjaGUtJmd0O29iamVjdF9zaXplLCBmYWxzZSk7CmRpZmYgLS1naXQgYS9tbS9rYXNhbi9rYXNhbi5oIGIvbW0va2FzYW4va2FzYW4uaAppbmRleCBmYzkxNjlhNTQ3NjYyLi4xYTJkMThjZGIyMWQ5IDEwMDY0NAotLS0gYS9tbS9rYXNhbi9rYXNhbi5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2thc2FuL2thc2FuLmgKQEAgLTE0NCwxMiAmIzQzOzE0NCwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wga2FzYW5fcmVxdWlyZXNfbWV0YSh2b2lkKQogI2RlZmluZSBLQVNBTl9QQUdFX1JFRFpPTkUJMHhGRSAgLyogcmVkem9uZSBmb3Iga21hbGxvY19sYXJnZSBhbGxvY2F0aW9uICovCiAjZGVmaW5lIEtBU0FOX1NMQUJfUkVEWk9ORQkweEZDICAvKiByZWR6b25lIGZvciBzbGFiIG9iamVjdCAqLwogI2RlZmluZSBLQVNBTl9TTEFCX0ZSRUUJCTB4RkIgIC8qIGZyZWVkIHNsYWIgb2JqZWN0ICovCiYjNDM7I2RlZmluZSBLQVNBTl9MQVpZX01NVV9QVEUJMHhGRCAgLyogZGlyZWN0IHB0ZSBhY2Nlc3MgaW4gbGF6eSBtbXUgbW9kZSAqLwogI2RlZmluZSBLQVNBTl9WTUFMTE9DX0lOVkFMSUQJMHhGOCAgLyogaW5hY2Nlc3NpYmxlIHNwYWNlIGluIHZtYXAgYXJlYSAqLwogI2Vsc2UKICNkZWZpbmUgS0FTQU5fUEFHRV9GUkVFCQlLQVNBTl9UQUdfSU5WQUxJRAogI2RlZmluZSBLQVNBTl9QQUdFX1JFRFpPTkUJS0FTQU5fVEFHX0lOVkFMSUQKICNkZWZpbmUgS0FTQU5fU0xBQl9SRURaT05FCUtBU0FOX1RBR19JTlZBTElECiAjZGVmaW5lIEtBU0FOX1NMQUJfRlJFRQkJS0FTQU5fVEFHX0lOVkFMSUQKJiM0MzsjZGVmaW5lIEtBU0FOX0xBWllfTU1VX1BURQlLQVNBTl9UQUdfSU5WQUxJRAogI2RlZmluZSBLQVNBTl9WTUFMTE9DX0lOVkFMSUQJS0FTQU5fVEFHX0lOVkFMSUQgLyogb25seSB1c2VkIGZvciBTV19UQUdTICovCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuYyBiL21tL2thc2FuL3JlcG9ydF9nZW5lcmljLmMKaW5kZXggZjViOGUzN2IzODA1Yy4uNDg5ZDRhOGQ2OTAyZCAxMDA2NDQKLS0tIGEvbW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9rYXNhbi9yZXBvcnRfZ2VuZXJpYy5jCkBAIC0xMTMsNiAmIzQzOzExMyw5IEBAIHN0YXRpYyBjb25zdCBjaGFyICpnZXRfc2hhZG93X2J1Z190eXBlKHN0cnVjdCBrYXNhbl9yZXBvcnRfaW5mbyAqaW5mbykKIAljYXNlIEtBU0FOX1NMQUJfRlJFRV9NRVRBOgogCQlidWdfdHlwZSA9ICYjMzQ7c2xhYi11c2UtYWZ0ZXItZnJlZSYjMzQ7OwogCQlicmVhazsKJiM0MzsJY2FzZSBLQVNBTl9MQVpZX01NVV9QVEU6CiYjNDM7CQlidWdfdHlwZSA9ICYjMzQ7bGF6eS1tbXUtcHRlLWFjY2VzcyYjMzQ7OwomIzQzOwkJYnJlYWs7CiAJY2FzZSBLQVNBTl9BTExPQ0FfTEVGVDoKIAljYXNlIEtBU0FOX0FMTE9DQV9SSUdIVDoKIAkJYnVnX3R5cGUgPSAmIzM0O2FsbG9jYS1vdXQtb2YtYm91bmRzJiMzNDs7CmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmMKaW5kZXggNzc1NTJiMDNkMzE4ZC4uNDQxOWQxNmIzOWY5NiAxMDA2NDQKLS0tIGEvbW0vbWFkdmlzZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21hZHZpc2UuYwpAQCAtNDUyLDcgJiM0Mzs0NTIsNyBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLAogCWlmICghc3RhcnRfcHRlKQogCQlyZXR1cm4gMDsKIAlmbHVzaF90bGJfYmF0Y2hlZF9wZW5kaW5nKG1tKTsKLQlsYXp5X21tdV9tb2RlX2VuYWJsZSgpOwomIzQzOwlsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgc3RhcnRfcHRlKTsKIAlmb3IgKDsgYWRkciAmbHQ7IGVuZDsgcHRlICYjNDM7PSBuciwgYWRkciAmIzQzOz0gbnIgKiBQQUdFX1NJWkUpIHsKIAkJbnIgPSAxOwogCQlwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7CkBAIC01MDcsNyAmIzQzOzUwNyw3IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsCiAJCQkJaWYgKCFzdGFydF9wdGUpCiAJCQkJCWJyZWFrOwogCQkJCWZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pOwotCQkJCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CiYjNDM7CQkJCWxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgYWRkciwgZW5kLCBzdGFydF9wdGUpOwogCQkJCWlmICghZXJyKQogCQkJCQluciA9IDA7CiAJCQkJY29udGludWU7CkBAIC02NzQsNyAmIzQzOzY3NCw3IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJaWYgKCFzdGFydF9wdGUpCiAJCXJldHVybiAwOwogCWZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pOwotCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CiYjNDM7CWxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgYWRkciwgZW5kLCBzdGFydF9wdGUpOwogCWZvciAoOyBhZGRyICE9IGVuZDsgcHRlICYjNDM7PSBuciwgYWRkciAmIzQzOz0gUEFHRV9TSVpFICogbnIpIHsKIAkJbnIgPSAxOwogCQlwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7CkBAIC03MzQsNyAmIzQzOzczNCw3IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkJaWYgKCFzdGFydF9wdGUpCiAJCQkJCWJyZWFrOwogCQkJCWZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pOwotCQkJCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CiYjNDM7CQkJCWxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgYWRkciwgZW5kLCBwdGUpOwogCQkJCWlmICghZXJyKQogCQkJCQluciA9IDA7CiAJCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDZiODI4MGNmYzFkYmUuLjBjYzA3YjA0MzM4NGIgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC0xMjcyLDcgJiM0MzsxMjcyLDcgQEAgY29weV9wdGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsCiAJc3Bpbl9sb2NrX25lc3RlZChzcmNfcHRsLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAJb3JpZ19zcmNfcHRlID0gc3JjX3B0ZTsKIAlvcmlnX2RzdF9wdGUgPSBkc3RfcHRlOwotCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CiYjNDM7CWxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhzcmNfbW0sIGFkZHIsIGVuZCwgc3JjX3B0ZSk7CiAKIAlkbyB7CiAJCW5yID0gMTsKQEAgLTE5MjIsNyAmIzQzOzE5MjIsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB6YXBfcHRlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsCiAJCXJldHVybiBhZGRyOwogCiAJZmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyhtbSk7Ci0JbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKJiM0MzsJbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIHN0YXJ0X3B0ZSk7CiAJZG8gewogCQlib29sIGFueV9za2lwcGVkID0gZmFsc2U7CiAKQEAgLTI5MTksNyAmIzQzOzI5MTksNyBAQCBzdGF0aWMgaW50IHJlbWFwX3B0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwKIAltYXBwZWRfcHRlID0gcHRlID0gcHRlX2FsbG9jX21hcF9sb2NrKG1tLCBwbWQsIGFkZHIsICZhbXA7cHRsKTsKIAlpZiAoIXB0ZSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKJiM0MzsJbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIG1hcHBlZF9wdGUpOwogCWRvIHsKIAkJQlVHX09OKCFwdGVfbm9uZShwdGVwX2dldChwdGUpKSk7CiAJCWlmICghcGZuX21vZGlmeV9hbGxvd2VkKHBmbiwgcHJvdCkpIHsKQEAgLTMzMzAsNyAmIzQzOzMzMzAsNyBAQCBzdGF0aWMgaW50IGFwcGx5X3RvX3B0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CiYjNDM7CWxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgYWRkciwgZW5kLCBtYXBwZWRfcHRlKTsKIAogCWlmIChmbikgewogCQlkbyB7CmRpZmYgLS1naXQgYS9tbS9tcHJvdGVjdC5jIGIvbW0vbXByb3RlY3QuYwppbmRleCA5Y2JmOTMyYjAyOGNmLi4zZmMyNjQxOGU4MzdkIDEwMDY0NAotLS0gYS9tbS9tcHJvdGVjdC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21wcm90ZWN0LmMKQEAgLTMzNyw3ICYjNDM7MzM3LDcgQEAgc3RhdGljIGxvbmcgY2hhbmdlX3B0ZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLAogCQlpc19wcml2YXRlX3NpbmdsZV90aHJlYWRlZCA9IHZtYV9pc19zaW5nbGVfdGhyZWFkZWRfcHJpdmF0ZSh2bWEpOwogCiAJZmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyh2bWEtJmd0O3ZtX21tKTsKLQlsYXp5X21tdV9tb2RlX2VuYWJsZSgpOwomIzQzOwlsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXModm1hLSZndDt2bV9tbSwgYWRkciwgZW5kLCBwdGUpOwogCWRvIHsKIAkJbnJfcHRlcyA9IDE7CiAJCW9sZHB0ZSA9IHB0ZXBfZ2V0KHB0ZSk7CmRpZmYgLS1naXQgYS9tbS9tcmVtYXAuYyBiL21tL21yZW1hcC5jCmluZGV4IGU5YzhiMWQwNTgzMmIuLjBkZmUzZGUzOWNjYzcgMTAwNjQ0Ci0tLSBhL21tL21yZW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21yZW1hcC5jCkBAIC0yNjAsNyAmIzQzOzI2MCw3IEBAIHN0YXRpYyBpbnQgbW92ZV9wdGVzKHN0cnVjdCBwYWdldGFibGVfbW92ZV9jb250cm9sICpwbWMsCiAJaWYgKG5ld19wdGwgIT0gb2xkX3B0bCkKIAkJc3Bpbl9sb2NrX25lc3RlZChuZXdfcHRsLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAJZmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyh2bWEtJmd0O3ZtX21tKTsKLQlsYXp5X21tdV9tb2RlX2VuYWJsZSgpOwomIzQzOwlsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIG9sZF9hZGRyLCBvbGRfZW5kLCBvbGRfcHRlcCk7CiAKIAlmb3IgKDsgb2xkX2FkZHIgJmx0OyBvbGRfZW5kOyBvbGRfcHRlcCAmIzQzOz0gbnJfcHRlcywgb2xkX2FkZHIgJiM0Mzs9IG5yX3B0ZXMgKiBQQUdFX1NJWkUsCiAJCW5ld19wdGVwICYjNDM7PSBucl9wdGVzLCBuZXdfYWRkciAmIzQzOz0gbnJfcHRlcyAqIFBBR0VfU0laRSkgewpkaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jCmluZGV4IGY0ZmEyMjdhOGQ3ZjAuLjFjNmVmOGZkMDc5ZTAgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bWFsbG9jLmMKQEAgLTEwOSw3ICYjNDM7MTA5LDcgQEAgc3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCWlmICghcHRlKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CiYjNDM7CWxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcygmYW1wO2luaXRfbW0sIGFkZHIsIGVuZCwgcHRlKTsKIAogCWRvIHsKIAkJaWYgKHVubGlrZWx5KCFwdGVfbm9uZShwdGVwX2dldChwdGUpKSkpIHsKQEAgLTM5Myw3ICYjNDM7MzkzLDcgQEAgc3RhdGljIHZvaWQgdnVubWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IFBBR0VfU0laRTsKIAogCXB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcik7Ci0JbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKJiM0MzsJbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKCZhbXA7aW5pdF9tbSwgYWRkciwgZW5kLCBwdGUpOwogCiAJZG8gewogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKQEAgLTU2MCw3ICYjNDM7NTYwLDcgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJaWYgKCFwdGUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKJiM0MzsJbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKCZhbXA7aW5pdF9tbSwgYWRkciwgZW5kLCBwdGUpOwogCiAJZG8gewogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBhZ2VzWypucl07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQwMQoJCQkJCQkJb3V0cHV0OiAyMTQKCQkJCQkJCXRob3VnaHRzOiAxMzc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBKdXN0aWZpY2F0aW9uOiBBIERldGFpbGVkIEV4YW1pbmF0aW9uKioKCk9rYXksIHNvIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgcnVuLiBLTVNBTiYjMzk7cyBhbGwgYWJvdXQgY2F0Y2hpbmcgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGhhbmRsZXMgdGhlIHVzdWFsIHN1c3BlY3RzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGFuZCBsb2NraW5nIGJ1Z3MuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhICYjMzQ7bGF6eSBNTVUgbW9kZSYjMzQ7IGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBkaWcgaW4uCgpUaGUgcGF0Y2gmIzM5O3MgZ290IGNoYW5nZXMgYWNyb3NzIHRoZSBib2FyZCwgZnJvbSBgbGF6eV9tbXUuaGAgdG8gbW9kaWZpY2F0aW9ucyBpbiB2YXJpb3VzIGtlcm5lbCBhcmVhcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBLQVNBTi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBpbXBsZW1lbnRpbmcgbGF6eSBQVEUgdXBkYXRlcy4gSW50ZXJlc3Rpbmcg4oCTIGl0JiMzOTtzIGJ1ZmZlcmluZyB0aG9zZSB1cGRhdGVzLiBUaGUgY29kZSB1c2VzIGBsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMoKWAgd2hpY2ggdGFrZXMgYSBgcHRlX3QgKnB0ZXBgLiBBaCwgYW5kIHRoZXJlJiMzOTtzIEtBU0FOIHBvaXNvbmluZy91bnBvaXNvbmluZyBvZiBQVEVzIChgS0FTQU5fTEFaWV9NTVVfUFRFYCkuIFdhaXQsIHRoaXMgaXMgKmV4cGxpY2l0bHkqIGEgS0FTQU4gZmVhdHVyZS4gSXQmIzM5O3MgYWRkaW5nIGEgbmV3IEtBU0FOIHRhZyBhbmQgYSBuZXcgYnVnIHR5cGU6IGAmIzM0O2xhenktbW11LXB0ZS1hY2Nlc3MmIzM0O2AuIFRoaXMgaXNuJiMzOTt0IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IGFsbCwgaXQmIzM5O3MgYWJvdXQgY2F0Y2hpbmcgKmludmFsaWQqIGFjY2Vzc2VzIHRvIFBURXMgZHVyaW5nIGxhenkgbW9kZSB1c2luZyBLQVNBTi4KCkFscmlnaHQsIGxldCYjMzk7cyBwbGF5IGRldmlsJiMzOTtzIGFkdm9jYXRlIGFuZCBjaGVjayBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCBtZSBzZWUuLi4gYHN0cnVjdCBpcHRlX3JhbmdlYCBpcyBhbGxvY2F0ZWQgaW4gYGxhenlfbW11X29ubGluZV9jcHVgIHVzaW5nIGBremFsbG9jX29iaigqcmFuZ2UsIGdmcClgLiBXYWl0LCB3aGF0IGlzIGBremFsbG9jX29iamA/IElzIHRoYXQgYSB0eXBvPyBJdCYjMzk7cyBub3QgYSBzdGFuZGFyZCBrZXJuZWwgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gZmluZCBpdCB3aXRoIGBncmVwYC4gT2ghIEl0JiMzOTtzIHByb2JhYmx5IGEgbWFjcm8gdGhhdCYjMzk7cyBhIHdyYXBwZXIgZm9yIGBremFsbG9jKHNpemVvZigqcmFuZ2UpLCBnZnApYC4gQWN0dWFsbHksIGl0IGRvZXNuJiMzOTt0IG1hdHRlciwgaXQmIzM5O3MgYSB6ZXJvLWFsbG9jYXRpb24hCgpMZXQmIzM5O3MgbG9vayBtb3JlIGNsb3NlbHkgYXQgdGhlIGNvZGUgaW4gYGFyY2gvczM5MC9tbS9sYXp5X21tdS5jYDoKYGBgYwoJcmFuZ2UgPSBremFsbG9jX29iaigqcmFuZ2UsIGdmcCk7CglpZiAoIXJhbmdlKQoJCXJldHVybiAtRU5PTUVNOwoJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUocmFuZ2UtJmd0O2NhY2hlKTsgaSYjNDM7JiM0MzspCgkJcmFuZ2UtJmd0O2NhY2hlW2ldID0gX19wdGUoUFRFX1BPSVNPTik7CmBgYApZZXMsIGRlZmluaXRlbHkgYSB6ZXJvLWFsbG9jYXRpb24sIGFzIGV4cGVjdGVkLiBUaGUgUFRFIGNhY2hlIGlzIHRoZW4gaW5pdGlhbGl6ZWQgd2l0aCBwb2lzb24gdmFsdWVzLgoKSXMgYW55dGhpbmcgaGVyZSBwYXNzZWQgdG8gdXNlciBzcGFjZT8gTm9wZS4gSXQmIzM5O3MgcHVyZWx5IGludGVybmFsIE1NVSBwYWdlIHRhYmxlIG1hbmFnZW1lbnQuIFBURXMgYXJlbiYjMzk7dCBiZWluZyBzZW50IGRpcmVjdGx5IHRvIHVzZXJzcGFjZS4gSW4gZmFjdCwgdGhpcyBwYXRjaCBpcyAqYWRkaW5nKiBLQVNBTiBjaGVja3MgdG8gY2F0Y2ggKmRpcmVjdCogUFRFIGFjY2Vzc2VzIGluIGxhenkgbW9kZS4gU2luY2UgaXQmIzM5O3MgYnVpbHQtaW4sIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIGhlcmUuIEtNU0FOJiMzOTtzIHB1cnBvc2UsIGNhdGNoaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW1zLCBpc24mIzM5O3Qgd2hhdCB0aGlzIHBhdGNoIGRvZXMuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIGp1c3QgdG8gYmUgc3VyZS4uLiB0aGUgYHN0cnVjdCBpcHRlX3JhbmdlYCBoYXMgYSBgcHRlX3QgY2FjaGVbUFRSU19QRVJfUFRFXTtgLiBJdCYjMzk7cyBpbml0aWFsaXplZCB0byBgUFRFX1BPSVNPTmAgaW4gYGxhenlfbW11X29ubGluZV9jcHVgLiBgZW50ZXJfaXB0ZV9yYW5nZWAgc2V0cyB0aGUgYmFzZSBhZGRyZXNzLCBlbmQsIGFuZCBQVEUsIGFuZCBgX19sYXp5X21tdV9zZXRfcHRlYCB3cml0ZXMgdG8gYHJhbmdlLSZndDtjYWNoZVtpZHhdYC4gTm90aGluZyBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIGFuZCBub3RoaW5nIGlzIHJlYWQgdW5pbml0aWFsaXplZC4KClRoZXJlZm9yZSwgbm8uIGBOZWVkc0tNU0FOID0gZmFsc2VgLgoKVGhlIHBhdGNoJiMzOTtzIGFsbCBhYm91dCBsYXp5IFBURSB1cGRhdGVzIG9uIHMzOTAsIGV4cGxpY2l0bHkgYWRkaW5nIEtBU0FOIHBvaXNvbmluZy91bnBvaXNvbmluZyB0byBjYXRjaCBkaXJlY3QgUFRFIGFjY2Vzc2VzLCBpbnRyb2R1Y2luZyBhIG5ldyBLQVNBTiBidWcgdHlwZS4gQWxsIG9mIHRoZSBjaGFuZ2VzIGFyZSBpbnRlcm5hbCwgcGFnZSB0YWJsZSByZWxhdGVkLCBhbmQgbm8gc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZS4gTmV3bHkgYWxsb2NhdGVkIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkICh2aWEgemVyby1hbGxvY2F0aW9uIGFuZCBleHBsaWNpdCBgUFRFX1BPSVNPTmApLiBUaGVyZSYjMzk7cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLCBubyBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBLQVNBTiBpcyB0aGUgcGVyZmVjdCB0b29sIGZvciBjaGVja2luZyB0aGlzLiBga3phbGxvY19vYmpgLCB3aGljaCBpcyB1c2VkLCBkb2VzIHplcm8gYWxsb2NhdGlvbiwgb3IgaXMgaW1wbGVtZW50ZWQgYXMgc3VjaC4KYGBgCmBgYApJJiMzOTttIGNhbGxpbmcgYHNldC1yZXN1bHRzYCBub3cuCmBgYAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbGF6eSBNTVUgbW9kZSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIHRvIGJ1ZmZlciBwYWdlIHRhYmxlIGVudHJ5IChQVEUpIHVwZGF0ZXMuIEl0IGFsc28gZXhwbGljaXRseSBhZGRzIEtBU0FOIHBvaXNvbmluZy91bnBvaXNvbmluZyB0byBkZXRlY3QgaW52YWxpZCBkaXJlY3QgYWNjZXNzZXMgdG8gUFRFcyB3aGlsZSB0aGUgbGF6eSBNTVUgbW9kZSBpcyBhY3RpdmUsIGludHJvZHVjaW5nIGEgbmV3IEtBU0FOIGJ1ZyB0eXBlIChgbGF6eS1tbXUtcHRlLWFjY2Vzc2ApLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgdGFibGUgb3BlcmF0aW9ucy4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgYWxsIG5ld2x5IGFsbG9jYXRlZCBzdHJ1Y3R1cmVzIChlLmcuLCBgc3RydWN0IGlwdGVfcmFuZ2VgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGUuZy4sIHZpYSB6ZXJvLWFsbG9jYXRpb24gYW5kIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIG9mIHRoZSBgY2FjaGVgIGFycmF5IHRvIGBQVEVfUE9JU09OYCkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGlzIHBlcmZlY3RseSBzdWl0ZWQgYW5kIGV4cGxpY2l0bHkgZW5oYW5jZWQgYnkgdGhpcyBwYXRjaCB0byBjYXRjaCBhbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbGF6eSBNTVUgbW9kZSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIHRvIGJ1ZmZlciBwYWdlIHRhYmxlIGVudHJ5IChQVEUpIHVwZGF0ZXMuIEl0IGFsc28gZXhwbGljaXRseSBhZGRzIEtBU0FOIHBvaXNvbmluZy91bnBvaXNvbmluZyB0byBkZXRlY3QgaW52YWxpZCBkaXJlY3QgYWNjZXNzZXMgdG8gUFRFcyB3aGlsZSB0aGUgbGF6eSBNTVUgbW9kZSBpcyBhY3RpdmUsIGludHJvZHVjaW5nIGEgbmV3IEtBU0FOIGJ1ZyB0eXBlIChgbGF6eS1tbXUtcHRlLWFjY2Vzc2ApLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgdGFibGUgb3BlcmF0aW9ucy4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgYWxsIG5ld2x5IGFsbG9jYXRlZCBzdHJ1Y3R1cmVzIChlLmcuLCBgc3RydWN0IGlwdGVfcmFuZ2VgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGUuZy4sIHZpYSB6ZXJvLWFsbG9jYXRpb24gYW5kIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIG9mIHRoZSBgY2FjaGVgIGFycmF5IHRvIGBQVEVfUE9JU09OYCkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGlzIHBlcmZlY3RseSBzdWl0ZWQgYW5kIGV4cGxpY2l0bHkgZW5oYW5jZWQgYnkgdGhpcyBwYXRjaCB0byBjYXRjaCBhbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjM3OjQ0LjA0NjM1MzQ5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4NTUzNDMyNDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktBU0FOXCIsXG4gICAgXCJLQVNBTl9HRU5FUklDXCIsXG4gICAgXCJIT1RQTFVHX0NQVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZVwiLFxuICAgIFwiYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc1wiLFxuICAgIFwiYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlXCIsXG4gICAgXCJhcmNoX2ZsdXNoX2xhenlfbW11X21vZGVcIixcbiAgICBcImxhenlfbW11X29ubGluZV9jcHVcIixcbiAgICBcImxhenlfbW11X29mZmxpbmVfY3B1XCIsXG4gICAgXCJfX2thc2FuX3BvaXNvbl9wdGVcIixcbiAgICBcIl9fa2FzYW5fdW5wb2lzb25fcHRlXCIsXG4gICAgXCJfX19wdGVwX21vZGlmeV9wcm90X3N0YXJ0XCIsXG4gICAgXCJfX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxhenkgTU1VIG1vZGUgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSB0byBidWZmZXIgcGFnZSB0YWJsZSBlbnRyeSAoUFRFKSB1cGRhdGVzLiBJdCBhbHNvIGV4cGxpY2l0bHkgYWRkcyBLQVNBTiBwb2lzb25pbmcvdW5wb2lzb25pbmcgdG8gZGV0ZWN0IGludmFsaWQgZGlyZWN0IGFjY2Vzc2VzIHRvIFBURXMgd2hpbGUgdGhlIGxhenkgTU1VIG1vZGUgaXMgYWN0aXZlLCBpbnRyb2R1Y2luZyBhIG5ldyBLQVNBTiBidWcgdHlwZSAoYGxhenktbW11LXB0ZS1hY2Nlc3NgKS4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IGNvbmZpbmVkIHRvIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHRhYmxlIG9wZXJhdGlvbnMuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIGFsbCBuZXdseSBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoZS5nLiwgYHN0cnVjdCBpcHRlX3JhbmdlYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlLmcuLCB2aWEgemVyby1hbGxvY2F0aW9uIGFuZCBleHBsaWNpdCBpbml0aWFsaXphdGlvbiBvZiB0aGUgYGNhY2hlYCBhcnJheSB0byBgUFRFX1BPSVNPTmApLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBpcyBwZXJmZWN0bHkgc3VpdGVkIGFuZCBleHBsaWNpdGx5IGVuaGFuY2VkIGJ5IHRoaXMgcGF0Y2ggdG8gY2F0Y2ggYW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbGF6eSBNTVUgbW9kZSBmb3IgczM5MCBhcmNoaXRlY3R1cmUsIHdoaWNoIGJhdGNoZXMgUFRFIGludmFsaWRhdGlvbnMgdXNpbmcgdGhlIElQVEUtcmFuZ2UgZmFjaWxpdHkuIEl0IGhvb2tzIGludG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzeXNjYWxscyAobWFkdmlzZSwgbXByb3RlY3QsIG1yZW1hcCwgdm1hbGxvYykgYW5kIENQVSBob3RwbHVnIHBhdGhzLiBJdCBhbHNvIGFkZHMgS0FTQU4gaW5zdHJ1bWVudGF0aW9uIGZvciBkaXJlY3QgUFRFIGFjY2Vzc2VzIGluIGxhenkgTU1VIG1vZGUuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjM3OjQ0LjA0NjM1ODlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjc3MTAxNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNmMxMjY3M2YzNWRkZjJhMTQ3OTExNjRiNWRjZjlkNGMzY2Y1NGMyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDE3IDEyOjM3OjQyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWdcXG5pbmRleCA4NDQwNGU2Nzc4ZDUwLi43ODQ2MzMyZGNkMGE2IDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9LY29uZmlnXFxuKysrIGIvYXJjaC9zMzkwL0tjb25maWdcXG5AQCAtOTcsNiArOTcsNyBAQCBjb25maWcgUzM5MFxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfS0NPVlxcbitcXHRzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERVxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfTUVNQkFSUklFUl9TWU5DX0NPUkVcXG4gXFx0c2VsZWN0IEFSQ0hfSEFTX01FTV9FTkNSWVBUXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFNcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xhenlfbW11LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbGF6eV9tbXUuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTgzNjZlOWRlOWJjM1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbGF6eV9tbXUuaFxcbkBAIC0wLDAgKzEsOSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbisjaWZuZGVmIF9fTEFaWV9NTVVfSFxcbisjZGVmaW5lIF9fTEFaWV9NTVVfSFxcbitcXG4rdm9pZCBsYXp5X21tdV9vbmxpbmVfYm9vdF9jcHUodm9pZCk7XFxuK2ludCBsYXp5X21tdV9vbmxpbmVfY3B1KGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGNwdSk7XFxuK3ZvaWQgbGF6eV9tbXVfb2ZmbGluZV9jcHUodW5zaWduZWQgaW50IGNwdSk7XFxuK1xcbisjZW5kaWYgLyogX19MQVpZX01NVV9IICovXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oXFxuaW5kZXggM2IzZWNjNjQ3OTkzZi4uZGJhMjM2NjY0ZGE5MCAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oXFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaFxcbkBAIC0xNjMsNyArMTYzLDcgQEAgc3RydWN0IGxvd2NvcmUge1xcbiBcXHRfX3MzMlxcdHByZWVtcHRfY291bnQ7XFx0XFx0XFx0LyogMHgwM2E4ICovXFxuIFxcdF9fdTMyXFx0c3BpbmxvY2tfbG9ja3ZhbDtcXHRcXHQvKiAweDAzYWMgKi9cXG4gXFx0X191MzJcXHRzcGlubG9ja19pbmRleDtcXHRcXHRcXHQvKiAweDAzYjAgKi9cXG4tXFx0X191OFxcdHBhZF8weDAzYjRbMHgwM2I4LTB4MDNiNF07XFx0LyogMHgwM2I0ICovXFxuK1xcdF9fczMyXFx0bGF6eV9tbXVfY291bnQ7XFx0XFx0XFx0LyogMHgwM2I0ICovXFxuIFxcdF9fdTY0XFx0cGVyY3B1X29mZnNldDtcXHRcXHRcXHQvKiAweDAzYjggKi9cXG4gXFx0X191OFxcdHBlcmNwdV9yZWdpc3RlcjtcXHRcXHQvKiAweDAzYzAgKi9cXG4gXFx0X191OFxcdHBhZF8weDAzYzFbMHgwNDAwLTB4MDNjMV07XFx0LyogMHgwM2MxICovXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuaW5kZXggODU5Y2U3YzdkNDU0NC4uMWU4YTc5OTg5ZWQ2ZSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbkBAIC0zOSw2ICszOSw2NCBAQCBlbnVtIHtcXG4gXFxuIGV4dGVybiBhdG9taWNfbG9uZ190IGRpcmVjdF9wYWdlc19jb3VudFtQR19ESVJFQ1RfTUFQX01BWF07XFxuIFxcbitib29sIF9fbGF6eV9tbXVfcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBpbnQgKnJlcyk7XFxuK2Jvb2wgX19sYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcyk7XFxuK2Jvb2wgX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpO1xcbitib29sIF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9jb21taXQodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3Qgb2xkX3B0ZSwgcHRlX3QgcHRlKTtcXG4rYm9vbCBfX2xhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTtcXG4rYm9vbCBfX2xhenlfbW11X3NldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSk7XFxuK2Jvb2wgX19sYXp5X21tdV9wdGVwX2dldChwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcyk7XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfbGF6eV9tbXVfYWN0aXZlKHZvaWQpXFxuK3tcXG4rXFx0aWYgKF9faXNfZGVmaW5lZChfX0RFQ09NUFJFU1NPUikpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKCFnZXRfbG93Y29yZSgpLVxcdTAwM2VsYXp5X21tdV9jb3VudClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZVxcbitib29sIGxhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgaW50ICpyZXMpXFxuK3tcXG4rXFx0aWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRyZXR1cm4gX19sYXp5X21tdV9wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKGFkZHIsIHB0ZXAsIHJlcyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmVcXG4rYm9vbCBsYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcylcXG4re1xcbitcXHRpZiAoIWlzX2xhenlfbW11X2FjdGl2ZSgpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdHJldHVybiBfX2xhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcihhZGRyLCBwdGVwLCByZXMpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lXFxuK2Jvb2wgbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKVxcbit7XFxuK1xcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0cmV0dXJuIF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydChhZGRyLCBwdGVwLCByZXMpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lXFxuK2Jvb2wgbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9jb21taXQodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgcHRlX3Qgb2xkX3B0ZSwgcHRlX3QgcHRlKVxcbit7XFxuK1xcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0cmV0dXJuIF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoYWRkciwgcHRlcCwgb2xkX3B0ZSwgcHRlKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZVxcbitib29sIGxhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxcbit7XFxuK1xcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0cmV0dXJuIF9fbGF6eV9tbXVfcHRlcF9zZXRfd3Jwcm90ZWN0KGFkZHIsIHB0ZXApO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3BhZ2VfY291bnQoaW50IGxldmVsLCBsb25nIGNvdW50KVxcbiB7XFxuIFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUk9DX0ZTKSlcXG5AQCAtOTc4LDE3ICsxMDM2LDM4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcG1kKHBtZF90ICpwbWRwLCBwbWRfdCBwbWQpXFxuIFxcdFdSSVRFX09OQ0UoKnBtZHAsIHBtZCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSlcXG4ge1xcbiBcXHRpZiAocHRlX3ByZXNlbnQocHRlKSlcXG4gXFx0XFx0cHRlID0gY2xlYXJfcHRlX2JpdChwdGUsIF9fcGdwcm90KF9QQUdFX1VOVVNFRCkpO1xcbiBcXHRXUklURV9PTkNFKCpwdGVwLCBwdGUpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxcbit7XFxuK1xcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkgfHwgIV9fbGF6eV9tbXVfc2V0X3B0ZShwdGVwLCBwdGUpKVxcbitcXHRcXHRfX3NldF9wdGUocHRlcCwgcHRlKTtcXG4rfVxcbitcXG4rI2RlZmluZSBwdGVwX2dldF9sb2NrbGVzcyBwdGVwX2dldF9sb2NrbGVzc1xcbitzdGF0aWMgaW5saW5lIF9fbm9fc2FuaXRpemVfYWRkcmVzcyBwdGVfdCBwdGVwX2dldF9sb2NrbGVzcyhwdGVfdCAqcHRlcClcXG4re1xcbitcXHRyZXR1cm4gUkVBRF9PTkNFKCpwdGVwKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBwdGVfdCBfX3B0ZXBfZ2V0KHB0ZV90ICpwdGVwKVxcbit7XFxuK1xcdHJldHVybiBSRUFEX09OQ0UoKnB0ZXApO1xcbit9XFxuK1xcbiAjZGVmaW5lIHB0ZXBfZ2V0IHB0ZXBfZ2V0XFxuIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9nZXQocHRlX3QgKnB0ZXApXFxuIHtcXG4tXFx0cmV0dXJuIFJFQURfT05DRSgqcHRlcCk7XFxuK1xcdHB0ZV90IHJlcztcXG4rXFxuK1xcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkgfHwgIV9fbGF6eV9tbXVfcHRlcF9nZXQocHRlcCwgXFx1MDAyNnJlcykpXFxuK1xcdFxcdHJlcyA9IF9fcHRlcF9nZXQocHRlcCk7XFxuK1xcdHJldHVybiByZXM7XFxuIH1cXG4gXFxuICNkZWZpbmUgcG1kcF9nZXQgcG1kcF9nZXRcXG5AQCAtMTE4MSw2ICsxMjYwLDE1IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3B0ZXBfaXB0ZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCBucixcXG4gXFx0fSB3aGlsZSAobnIgIT0gMjU1KTtcXG4gfVxcbiBcXG4rdm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbitcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbitcXHRcXHRcXHRcXHRcXHRwdGVfdCAqcHRlKTtcXG4rI2RlZmluZSBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXNcXG4rXFxuK3ZvaWQgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKHZvaWQpO1xcbit2b2lkIGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSh2b2lkKTtcXG4rdm9pZCBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUodm9pZCk7XFxuK1xcbiAvKlxcbiAgKiBUaGlzIGlzIGhhcmQgdG8gdW5kZXJzdGFuZC4gcHRlcF9nZXRfYW5kX2NsZWFyIGFuZCBwdGVwX2NsZWFyX2ZsdXNoXFxuICAqIGJvdGggY2xlYXIgdGhlIFRMQiBmb3IgdGhlIHVubWFwcGVkIHB0ZS4gVGhlIHJlYXNvbiBpcyB0aGF0XFxuQEAgLTEyMDEsMTAgKzEyODksMTYgQEAgcHRlX3QgcHRlcF94Y2hnX2xhenkoc3RydWN0IG1tX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBwdGVfdCAqLCBwdGVfdCk7XFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxcbiB7XFxuLVxcdHB0ZV90IHB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xcbitcXHRwdGVfdCBwdGU7XFxuK1xcdGludCByZXM7XFxuIFxcbi1cXHRwdGUgPSBwdGVwX3hjaGdfZGlyZWN0KHZtYS1cXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXAsIHB0ZV9ta29sZChwdGUpKTtcXG4tXFx0cmV0dXJuIHB0ZV95b3VuZyhwdGUpO1xcbitcXHRpZiAoIWxhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoYWRkciwgcHRlcCwgXFx1MDAyNnJlcykpIHtcXG4rXFx0XFx0cHRlID0gX19wdGVwX2dldChwdGVwKTtcXG4rXFx0XFx0cHRlID0gcHRlX21rb2xkKHB0ZSk7XFxuK1xcdFxcdHB0ZSA9IHB0ZXBfeGNoZ19kaXJlY3Qodm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgcHRlcCwgcHRlKTtcXG4rXFx0XFx0cmVzID0gcHRlX3lvdW5nKHB0ZSk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHJlcztcXG4gfVxcbiBcXG4gI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSX1lPVU5HX0ZMVVNIXFxuQEAgLTEyMjAsNyArMTMxNCw4IEBAIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiB7XFxuIFxcdHB0ZV90IHJlcztcXG4gXFxuLVxcdHJlcyA9IHB0ZXBfeGNoZ19sYXp5KG1tLCBhZGRyLCBwdGVwLCBfX3B0ZShfUEFHRV9JTlZBTElEKSk7XFxuK1xcdGlmICghbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKGFkZHIsIHB0ZXAsIFxcdTAwMjZyZXMpKVxcbitcXHRcXHRyZXMgPSBwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpO1xcbiBcXHRwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcihtbSwgYWRkciwgcmVzKTtcXG4gXFx0LyogQXQgdGhpcyBwb2ludCB0aGUgcmVmZXJlbmNlIHRocm91Z2ggdGhlIG1hcHBpbmcgaXMgc3RpbGwgcHJlc2VudCAqL1xcbiBcXHRpZiAobW1faXNfcHJvdGVjdGVkKG1tKSBcXHUwMDI2XFx1MDAyNiBwdGVfcHJlc2VudChyZXMpKVxcbkBAIC0xMjI5LDkgKzEzMjQsMjggQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIH1cXG4gXFxuICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9NT0RJRllfUFJPVF9UUkFOU0FDVElPTlxcbi1wdGVfdCBwdGVwX21vZGlmeV9wcm90X3N0YXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBwdGVfdCAqKTtcXG4tdm9pZCBwdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyxcXG4tXFx0XFx0XFx0ICAgICBwdGVfdCAqLCBwdGVfdCwgcHRlX3QpO1xcbitwdGVfdCBfX19wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBwdGVfdCAqKTtcXG4rdm9pZCBfX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyxcXG4rXFx0XFx0XFx0XFx0cHRlX3QgKiwgcHRlX3QsIHB0ZV90KTtcXG4rXFxuK3N0YXRpYyBpbmxpbmVcXG4rcHRlX3QgcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4rXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxcbit7XFxuK1xcdHB0ZV90IHJlcztcXG4rXFxuK1xcdGlmICghbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydChhZGRyLCBwdGVwLCBcXHUwMDI2cmVzKSlcXG4rXFx0XFx0cmVzID0gX19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydCh2bWEsIGFkZHIsIHB0ZXApO1xcbitcXHRyZXR1cm4gcmVzO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lXFxuK3ZvaWQgcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4rXFx0XFx0XFx0ICAgICBwdGVfdCAqcHRlcCwgcHRlX3Qgb2xkX3B0ZSwgcHRlX3QgcHRlKVxcbit7XFxuK1xcdGlmICghbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoYWRkciwgcHRlcCwgb2xkX3B0ZSwgcHRlKSlcXG4rXFx0XFx0X19fcHRlcF9tb2RpZnlfcHJvdF9jb21taXQodm1hLCBhZGRyLCBwdGVwLCBvbGRfcHRlLCBwdGUpO1xcbit9XFxuIFxcbiAjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfQ0xFQVJfRkxVU0hcXG4gc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbkBAIC0xMjYxLDExICsxMzc1LDEzIEBAIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9nZXRfYW5kX2NsZWFyX2Z1bGwoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIHtcXG4gXFx0cHRlX3QgcmVzO1xcbiBcXG4tXFx0aWYgKGZ1bGwpIHtcXG4tXFx0XFx0cmVzID0gcHRlcF9nZXQocHRlcCk7XFxuLVxcdFxcdHNldF9wdGUocHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRyZXMgPSBwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpO1xcbitcXHRpZiAoIWxhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcihhZGRyLCBwdGVwLCBcXHUwMDI2cmVzKSkge1xcbitcXHRcXHRpZiAoZnVsbCkge1xcbitcXHRcXHRcXHRyZXMgPSBfX3B0ZXBfZ2V0KHB0ZXApO1xcbitcXHRcXHRcXHRfX3NldF9wdGUocHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRyZXMgPSBwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFx0cGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXIobW0sIGFkZHIsIHJlcyk7XFxuIFxcdC8qIEF0IHRoaXMgcG9pbnQgdGhlIHJlZmVyZW5jZSB0aHJvdWdoIHRoZSBtYXBwaW5nIGlzIHN0aWxsIHByZXNlbnQgKi9cXG5AQCAtMTI5MSwxMCArMTQwNywxNSBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgcHRlcF9zZXRfd3Jwcm90ZWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxcbiB7XFxuLVxcdHB0ZV90IHB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xcbitcXHRwdGVfdCBwdGU7XFxuIFxcbi1cXHRpZiAocHRlX3dyaXRlKHB0ZSkpXFxuLVxcdFxcdHB0ZXBfeGNoZ19sYXp5KG1tLCBhZGRyLCBwdGVwLCBwdGVfd3Jwcm90ZWN0KHB0ZSkpO1xcbitcXHRpZiAoIWxhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdChhZGRyLCBwdGVwKSkge1xcbitcXHRcXHRwdGUgPSBfX3B0ZXBfZ2V0KHB0ZXApO1xcbitcXHRcXHRpZiAocHRlX3dyaXRlKHB0ZSkpIHtcXG4rXFx0XFx0XFx0cHRlID0gcHRlX3dycHJvdGVjdChwdGUpO1xcbitcXHRcXHRcXHRwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgcHRlKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTEzMjcsNyArMTQ0OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfZml4X3NwdXJpb3VzX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHQgKiBQVEUgZG9lcyBub3QgaGF2ZSBfUEFHRV9QUk9URUNUIHNldCwgdG8gYXZvaWQgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQuXFxuIFxcdCAqIEEgbG9jYWwgUkRQIGNhbiBiZSB1c2VkIHRvIGRvIHRoZSBmbHVzaC5cXG4gXFx0ICovXFxuLVxcdGlmIChjcHVfaGFzX3JkcCgpIFxcdTAwMjZcXHUwMDI2ICEocHRlX3ZhbChwdGVwX2dldChwdGVwKSkgXFx1MDAyNiBfUEFHRV9QUk9URUNUKSlcXG4rXFx0aWYgKGNwdV9oYXNfcmRwKCkgXFx1MDAyNlxcdTAwMjYgIShwdGVfdmFsKF9fcHRlcF9nZXQocHRlcCkpIFxcdTAwMjYgX1BBR0VfUFJPVEVDVCkpXFxuIFxcdFxcdF9fcHRlcF9yZHAoYWRkcmVzcywgcHRlcCwgMSk7XFxuIH1cXG4gI2RlZmluZSBmbHVzaF90bGJfZml4X3NwdXJpb3VzX2ZhdWx0IGZsdXNoX3RsYl9maXhfc3B1cmlvdXNfZmF1bHRcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jXFxuaW5kZXggYjYwMjg0MzI4ZmUzZC4uZjVhM2M5ZTFiNmI4OCAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmNcXG4rKysgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmNcXG5AQCAtNzcsNiArNzcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL21hY2Nlc3MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS91di5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2FzbS1vZmZzZXRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vbGF6eV9tbXUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImVudHJ5LmhcXFwiXFxuIFxcbiAvKlxcbkBAIC0xMDEyLDUgKzEwMTMsNiBAQCB2b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXFxuIFxcbiB2b2lkIF9faW5pdCBhcmNoX2NwdV9maW5hbGl6ZV9pbml0KHZvaWQpXFxuIHtcXG4rXFx0bGF6eV9tbXVfb25saW5lX2Jvb3RfY3B1KCk7XFxuIFxcdHNjbHBfaW5pdCgpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jXFxuaW5kZXggMGJhN2Y4OWI4MTYxMS4uMGE4MjZiYmFmMWRkYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jXFxuKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuY1xcbkBAIC01OSw2ICs1OSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vdG9wb2xvZ3kuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS92ZHNvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vbWFjY2Vzcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL2xhenlfbW11LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJlbnRyeS5oXFxcIlxcbiBcXG4gZW51bSB7XFxuQEAgLTg2Niw2ICs4NjcsMTEgQEAgaW50IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGlkbGUpXFxuIFxcdHJjID0gcGNwdV9hbGxvY19sb3djb3JlKHBjcHUsIGNwdSk7XFxuIFxcdGlmIChyYylcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbitcXHRyYyA9IGxhenlfbW11X29ubGluZV9jcHUoR0ZQX0tFUk5FTCwgY3B1KTtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdHBjcHVfZnJlZV9sb3djb3JlKHBjcHUsIGNwdSk7XFxuK1xcdFxcdHJldHVybiByYztcXG4rXFx0fVxcbiBcXHQvKlxcbiBcXHQgKiBNYWtlIHN1cmUgZ2xvYmFsIGNvbnRyb2wgcmVnaXN0ZXIgY29udGVudHMgZG8gbm90IGNoYW5nZVxcbiBcXHQgKiB1bnRpbCBuZXcgQ1BVIGhhcyBpbml0aWFsaXplZCBjb250cm9sIHJlZ2lzdGVycy5cXG5AQCAtOTIxLDYgKzkyNyw3IEBAIHZvaWQgX19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpXFxuIFxcdHBjcHUgPSBwZXJfY3B1X3B0cihcXHUwMDI2cGNwdV9kZXZpY2VzLCBjcHUpO1xcbiBcXHR3aGlsZSAoIXBjcHVfc3RvcHBlZChwY3B1KSlcXG4gXFx0XFx0Y3B1X3JlbGF4KCk7XFxuK1xcdGxhenlfbW11X29mZmxpbmVfY3B1KGNwdSk7XFxuIFxcdHBjcHVfZnJlZV9sb3djb3JlKHBjcHUsIGNwdSk7XFxuIFxcdGNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbW1fY3B1bWFzayhcXHUwMDI2aW5pdF9tbSkpO1xcbiBcXHRjcHVtYXNrX2NsZWFyX2NwdShjcHUsIFxcdTAwMjZpbml0X21tLmNvbnRleHQuY3B1X2F0dGFjaF9tYXNrKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL01ha2VmaWxlIGIvYXJjaC9zMzkwL21tL01ha2VmaWxlXFxuaW5kZXggMTkzODk5YzM5Y2E3Zi4uOTZjYWMzZTk5ZjUxNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvbW0vTWFrZWZpbGVcXG4rKysgYi9hcmNoL3MzOTAvbW0vTWFrZWZpbGVcXG5AQCAtNCw2ICs0LDcgQEBcXG4gI1xcbiBcXG4gb2JqLXlcXHRcXHQ6PSBpbml0Lm8gZmF1bHQubyBleHRtZW0ubyBtbWFwLm8gdm1lbS5vIG1hY2Nlc3Mub1xcbitvYmoteVxcdFxcdDo9IGluaXQubyBmYXVsdC5vIGV4dG1lbS5vIG1tYXAubyB2bWVtLm8gbWFjY2Vzcy5vIGxhenlfbW11Lm9cXG4gb2JqLXlcXHRcXHQrPSBwYWdlLXN0YXRlcy5vIHBhZ2VhdHRyLm8gcGd0YWJsZS5vIHBnYWxsb2MubyBleHRhYmxlLm9cXG4gXFxuIG9iai0kKENPTkZJR19DTU0pXFx0XFx0Kz0gY21tLm9cXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2xhenlfbW11LmMgYi9hcmNoL3MzOTAvbW0vbGF6eV9tbXUuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2UzYTQxMTVlYTA0OFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9hcmNoL3MzOTAvbW0vbGF6eV9tbXUuY1xcbkBAIC0wLDAgKzEsNDE4IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZ3RhYmxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rYXNhbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL2ZhY2lsaXR5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vbGF6eV9tbXUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2t1bml0L3Zpc2liaWxpdHkuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgUFRFX1BPSVNPTlxcdF9QQUdFX0xBUkdFXFxuK1xcbitzdHJ1Y3QgaXB0ZV9yYW5nZSB7XFxuK1xcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbitcXHR1bnNpZ25lZCBsb25nIGJhc2VfYWRkcjtcXG4rXFx0dW5zaWduZWQgbG9uZyBiYXNlX2VuZDtcXG4rXFx0cHRlX3QgKmJhc2VfcHRlO1xcbitcXHRwdGVfdCAqc3RhcnRfcHRlO1xcbitcXHRwdGVfdCAqZW5kX3B0ZTtcXG4rXFx0cHRlX3QgY2FjaGVbUFRSU19QRVJfUFRFXTtcXG4rfTtcXG4rXFxuK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgaXB0ZV9yYW5nZSAqLCBpcHRlX3JhbmdlKTtcXG4rXFxuK3N0YXRpYyBpbnQgY291bnRfY29udGlndW91cyhwdGVfdCAqc3RhcnQsIHB0ZV90ICplbmQsIGJvb2wgKnZhbGlkKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcGFnZV9pbnZhbGlkX2JpdDtcXG4rXFx0cHRlX3QgKnB0ZXAsIHB0ZTtcXG4rXFxuK1xcdHB0ZSA9IF9fcHRlcF9nZXQoc3RhcnQpO1xcbitcXHRwYWdlX2ludmFsaWRfYml0ID0gcHRlX3ZhbChwdGUpIFxcdTAwMjYgX1BBR0VfSU5WQUxJRDtcXG4rXFxuK1xcdGZvciAocHRlcCA9IHN0YXJ0ICsgMTsgcHRlcCBcXHUwMDNjIGVuZDsgcHRlcCsrKSB7XFxuK1xcdFxcdHB0ZSA9IF9fcHRlcF9nZXQocHRlcCk7XFxuK1xcdFxcdGlmICgocHRlX3ZhbChwdGUpIFxcdTAwMjYgX1BBR0VfSU5WQUxJRCkgIT0gcGFnZV9pbnZhbGlkX2JpdClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdCp2YWxpZCA9ICEocGFnZV9pbnZhbGlkX2JpdCk7XFxuK1xcdHJldHVybiBwdGVwIC0gc3RhcnQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIF9faW52YWxpZGF0ZV9wdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4rXFx0XFx0XFx0XFx0ICAgaW50IG5yX3B0ZXMsIHB0ZV90ICpwdGVwKVxcbit7XFxuK1xcdGF0b21pY19pbmMoXFx1MDAyNm1tLVxcdTAwM2Vjb250ZXh0LmZsdXNoX2NvdW50KTtcXG4rXFx0aWYgKGNwdV9oYXNfdGxiX2xjKCkgXFx1MDAyNlxcdTAwMjYgY3B1bWFza19lcXVhbChtbV9jcHVtYXNrKG1tKSwgY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKSlcXG4rXFx0XFx0X19wdGVwX2lwdGVfcmFuZ2UoYWRkciwgbnJfcHRlcyAtIDEsIHB0ZXAsIElQVEVfTE9DQUwpO1xcbitcXHRlbHNlXFxuK1xcdFxcdF9fcHRlcF9pcHRlX3JhbmdlKGFkZHIsIG5yX3B0ZXMgLSAxLCBwdGVwLCBJUFRFX0dMT0JBTCk7XFxuK1xcdGF0b21pY19kZWMoXFx1MDAyNm1tLVxcdTAwM2Vjb250ZXh0LmZsdXNoX2NvdW50KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBpbnZhbGlkYXRlX3B0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbitcXHRcXHRcXHRcXHRwdGVfdCAqc3RhcnQsIHB0ZV90ICplbmQpXFxuK3tcXG4rXFx0aW50IG5yX3B0ZXM7XFxuK1xcdGJvb2wgdmFsaWQ7XFxuK1xcbitcXHRucl9wdGVzID0gY291bnRfY29udGlndW91cyhzdGFydCwgZW5kLCBcXHUwMDI2dmFsaWQpO1xcbitcXHRpZiAodmFsaWQpXFxuK1xcdFxcdF9faW52YWxpZGF0ZV9wdGVfcmFuZ2UobW0sIGFkZHIsIG5yX3B0ZXMsIHN0YXJ0KTtcXG4rXFxuK1xcdHJldHVybiBucl9wdGVzO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzZXRfcHRlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdFxcdCAgcHRlX3QgKnN0YXJ0LCBwdGVfdCAqZW5kLCBwdGVfdCAqY2FjaGUpXFxuK3tcXG4rXFx0aW50IG5yX3B0ZXMsIG5yX3RvdGFsID0gZW5kIC0gc3RhcnQ7XFxuK1xcdHB0ZV90ICpwdGVwID0gc3RhcnQ7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0a2FzYW5fdW5wb2lzb25fcHRlKHN0YXJ0LCBucl90b3RhbCk7XFxuK1xcdHdoaWxlIChwdGVwIFxcdTAwM2MgZW5kKSB7XFxuK1xcdFxcdG5yX3B0ZXMgPSBpbnZhbGlkYXRlX3B0ZV9yYW5nZShtbSwgYWRkciwgcHRlcCwgZW5kKTtcXG4rXFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9wdGVzOyBpKyssIHB0ZXArKywgY2FjaGUrKykge1xcbitcXHRcXHRcXHRfX3NldF9wdGUocHRlcCwgKmNhY2hlKTtcXG4rXFx0XFx0XFx0KmNhY2hlID0gX19wdGUoUFRFX1BPSVNPTik7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGFkZHIgKz0gbnJfcHRlcyAqIFBBR0VfU0laRTtcXG4rXFx0fVxcbitcXHRrYXNhbl9wb2lzb25fcHRlKHN0YXJ0LCBucl90b3RhbCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVudGVyX2lwdGVfbm9yYW5nZSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBpcHRlX3JhbmdlIF9fbWF5YmVfdW51c2VkICpyYW5nZTtcXG4rXFxuK1xcdGlmICghdGVzdF9mYWNpbGl0eSgxMykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4rXFxuK1xcdHJhbmdlID0gZ2V0X2NwdV92YXIoaXB0ZV9yYW5nZSk7XFxuK1xcdGdldF9sb3djb3JlKCktXFx1MDAzZWxhenlfbW11X2NvdW50Kys7XFxuK1xcbitcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZW50ZXJfaXB0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4rXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBwdGVfdCAqcHRlKVxcbit7XFxuK1xcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcXG4rXFx0dW5zaWduZWQgaW50IG5yX3B0ZXM7XFxuK1xcbitcXHRpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuK1xcbitcXHRyYW5nZSA9IGdldF9jcHVfdmFyKGlwdGVfcmFuZ2UpO1xcbitcXHRnZXRfbG93Y29yZSgpLVxcdTAwM2VsYXp5X21tdV9jb3VudCsrO1xcbitcXG4rXFx0aWYgKG1tX2lzX3Byb3RlY3RlZChtbSkpIHtcXG4rXFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0cmFuZ2UtXFx1MDAzZW1tID0gbW07XFxuK1xcdHJhbmdlLVxcdTAwM2ViYXNlX2FkZHIgPSBhZGRyO1xcbitcXHRyYW5nZS1cXHUwMDNlYmFzZV9lbmQgPSBlbmQ7XFxuK1xcdHJhbmdlLVxcdTAwM2ViYXNlX3B0ZSA9IHB0ZTtcXG4rXFxuK1xcdG5yX3B0ZXMgPSAocmFuZ2UtXFx1MDAzZWJhc2VfZW5kIC0gcmFuZ2UtXFx1MDAzZWJhc2VfYWRkcikgLyBQQUdFX1NJWkU7XFxuK1xcdGthc2FuX3BvaXNvbl9wdGUocmFuZ2UtXFx1MDAzZWJhc2VfcHRlLCBucl9wdGVzKTtcXG4rXFxuK1xcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBsZWF2ZV9pcHRlX3JhbmdlKHZvaWQpXFxuK3tcXG4rXFx0cHRlX3QgKnB0ZXAsICpzdGFydCwgKnN0YXJ0X2NhY2hlLCAqY2FjaGU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkciwgYWRkcjtcXG4rXFx0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xcbitcXHR1bnNpZ25lZCBpbnQgbnJfcHRlcztcXG4rXFx0aW50IHN0YXJ0X2lkeDtcXG4rXFxuK1xcdGlmICghdGVzdF9mYWNpbGl0eSgxMykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X3ByZWVtcHRpb25fZGlzYWJsZWQoKTtcXG4rXFx0cmFuZ2UgPSB0aGlzX2NwdV9yZWFkKGlwdGVfcmFuZ2UpO1xcbitcXHRpZiAoIXJhbmdlLVxcdTAwM2VtbSlcXG4rXFx0XFx0Z290byBub3JhbmdlO1xcbitcXHRpZiAoIXJhbmdlLVxcdTAwM2VzdGFydF9wdGUpXFxuK1xcdFxcdGdvdG8gZG9uZTtcXG4rXFxuK1xcdHN0YXJ0ID0gcmFuZ2UtXFx1MDAzZXN0YXJ0X3B0ZTtcXG4rXFx0c3RhcnRfaWR4ID0gcmFuZ2UtXFx1MDAzZXN0YXJ0X3B0ZSAtIHJhbmdlLVxcdTAwM2ViYXNlX3B0ZTtcXG4rXFx0c3RhcnRfYWRkciA9IHJhbmdlLVxcdTAwM2ViYXNlX2FkZHIgKyBzdGFydF9pZHggKiBQQUdFX1NJWkU7XFxuK1xcdGFkZHIgPSBzdGFydF9hZGRyO1xcbitcXHRzdGFydF9jYWNoZSA9IFxcdTAwMjZyYW5nZS1cXHUwMDNlY2FjaGVbc3RhcnRfaWR4XTtcXG4rXFx0Y2FjaGUgPSBzdGFydF9jYWNoZTtcXG4rXFx0Zm9yIChwdGVwID0gc3RhcnQ7IHB0ZXAgXFx1MDAzYyByYW5nZS1cXHUwMDNlZW5kX3B0ZTsgcHRlcCsrLCBjYWNoZSsrLCBhZGRyICs9IFBBR0VfU0laRSkge1xcbitcXHRcXHRpZiAocHRlX3ZhbCgqY2FjaGUpID09IFBURV9QT0lTT04pIHtcXG4rXFx0XFx0XFx0aWYgKHN0YXJ0KSB7XFxuK1xcdFxcdFxcdFxcdHNldF9wdGVfcmFuZ2UocmFuZ2UtXFx1MDAzZW1tLCBzdGFydF9hZGRyLCBzdGFydCwgcHRlcCwgc3RhcnRfY2FjaGUpO1xcbitcXHRcXHRcXHRcXHRzdGFydCA9IE5VTEw7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fSBlbHNlIGlmICghc3RhcnQpIHtcXG4rXFx0XFx0XFx0c3RhcnQgPSBwdGVwO1xcbitcXHRcXHRcXHRzdGFydF9hZGRyID0gYWRkcjtcXG4rXFx0XFx0XFx0c3RhcnRfY2FjaGUgPSBjYWNoZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdHNldF9wdGVfcmFuZ2UocmFuZ2UtXFx1MDAzZW1tLCBzdGFydF9hZGRyLCBzdGFydCwgcHRlcCwgc3RhcnRfY2FjaGUpO1xcbitcXG4rXFx0cmFuZ2UtXFx1MDAzZXN0YXJ0X3B0ZSA9IE5VTEw7XFxuK1xcdHJhbmdlLVxcdTAwM2VlbmRfcHRlID0gTlVMTDtcXG4rXFxuK2RvbmU6XFxuK1xcdG5yX3B0ZXMgPSAocmFuZ2UtXFx1MDAzZWJhc2VfZW5kIC0gcmFuZ2UtXFx1MDAzZWJhc2VfYWRkcikgLyBQQUdFX1NJWkU7XFxuK1xcdGthc2FuX3VucG9pc29uX3B0ZShyYW5nZS1cXHUwMDNlYmFzZV9wdGUsIG5yX3B0ZXMpO1xcbitcXG4rXFx0cmFuZ2UtXFx1MDAzZW1tID0gTlVMTDtcXG4rXFx0cmFuZ2UtXFx1MDAzZWJhc2VfYWRkciA9IDA7XFxuK1xcdHJhbmdlLVxcdTAwM2ViYXNlX2VuZCA9IDA7XFxuK1xcdHJhbmdlLVxcdTAwM2ViYXNlX3B0ZSA9IE5VTEw7XFxuK1xcbitub3JhbmdlOlxcbitcXHRnZXRfbG93Y29yZSgpLVxcdTAwM2VsYXp5X21tdV9jb3VudC0tO1xcbitcXHRwdXRfY3B1X3ZhcihpcHRlX3JhbmdlKTtcXG4rXFxuK1xcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBmbHVzaF9sYXp5X21tdV9tb2RlKHZvaWQpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBhZGRyLCBlbmQ7XFxuK1xcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuK1xcdHB0ZV90ICpwdGU7XFxuK1xcbitcXHRpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRyYW5nZSA9IGdldF9jcHVfdmFyKGlwdGVfcmFuZ2UpO1xcbitcXHRpZiAocmFuZ2UtXFx1MDAzZW1tKSB7XFxuK1xcdFxcdG1tID0gcmFuZ2UtXFx1MDAzZW1tO1xcbitcXHRcXHRhZGRyID0gcmFuZ2UtXFx1MDAzZWJhc2VfYWRkcjtcXG4rXFx0XFx0ZW5kID0gcmFuZ2UtXFx1MDAzZWJhc2VfZW5kO1xcbitcXHRcXHRwdGUgPSByYW5nZS1cXHUwMDNlYmFzZV9wdGU7XFxuK1xcbitcXHRcXHRsZWF2ZV9pcHRlX3JhbmdlKCk7XFxuK1xcdFxcdGVudGVyX2lwdGVfcmFuZ2UobW0sIGFkZHIsIGVuZCwgcHRlKTtcXG4rXFx0fVxcbitcXHRwdXRfY3B1X3ZhcihpcHRlX3JhbmdlKTtcXG4rfVxcbitcXG4rdm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGUodm9pZClcXG4re1xcbitcXHRlbnRlcl9pcHRlX25vcmFuZ2UoKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSk7XFxuK1xcbit2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuK1xcdFxcdFxcdFxcdFxcdHB0ZV90ICpwdGUpXFxuK3tcXG4rXFx0ZW50ZXJfaXB0ZV9yYW5nZShtbSwgYWRkciwgZW5kLCBwdGUpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfSUZfS1VOSVQoYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcyk7XFxuK1xcbit2b2lkIGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSh2b2lkKVxcbit7XFxuK1xcdGxlYXZlX2lwdGVfcmFuZ2UoKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSk7XFxuK1xcbit2b2lkIGFyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZSh2b2lkKVxcbit7XFxuK1xcdGZsdXNoX2xhenlfbW11X21vZGUoKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGFyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZSk7XFxuK1xcbitzdGF0aWMgdm9pZCBfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2UsIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGlkeCA9IHB0ZXAgLSByYW5nZS1cXHUwMDNlYmFzZV9wdGU7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9wcmVlbXB0aW9uX2Rpc2FibGVkKCk7XFxuK1xcdHJhbmdlLVxcdTAwM2VjYWNoZVtpZHhdID0gcHRlO1xcbitcXG4rXFx0aWYgKCFyYW5nZS1cXHUwMDNlc3RhcnRfcHRlKSB7XFxuK1xcdFxcdHJhbmdlLVxcdTAwM2VzdGFydF9wdGUgPSBwdGVwO1xcbitcXHRcXHRyYW5nZS1cXHUwMDNlZW5kX3B0ZSA9IHB0ZXAgKyAxO1xcbitcXHR9IGVsc2UgaWYgKHB0ZXAgXFx1MDAzYyByYW5nZS1cXHUwMDNlc3RhcnRfcHRlKSB7XFxuK1xcdFxcdHJhbmdlLVxcdTAwM2VzdGFydF9wdGUgPSBwdGVwO1xcbitcXHR9IGVsc2UgaWYgKHB0ZXAgKyAxIFxcdTAwM2UgcmFuZ2UtXFx1MDAzZWVuZF9wdGUpIHtcXG4rXFx0XFx0cmFuZ2UtXFx1MDAzZWVuZF9wdGUgPSBwdGVwICsgMTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgcHRlX3QgX19pcHRlX3JhbmdlX3B0ZXBfZ2V0KHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZSwgcHRlX3QgKnB0ZXApXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGlkeCA9IHB0ZXAgLSByYW5nZS1cXHUwMDNlYmFzZV9wdGU7XFxuK1xcdHB0ZV90IHB0ZTtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X3ByZWVtcHRpb25fZGlzYWJsZWQoKTtcXG4rXFx0aWYgKHB0ZV92YWwocmFuZ2UtXFx1MDAzZWNhY2hlW2lkeF0pID09IFBURV9QT0lTT04pIHtcXG4rXFx0XFx0a2FzYW5fdW5wb2lzb25fcHRlKHB0ZXAsIDEpO1xcbitcXHRcXHRwdGUgPSBfX3B0ZXBfZ2V0KHB0ZXApO1xcbitcXHRcXHRrYXNhbl9wb2lzb25fcHRlKHB0ZXAsIDEpO1xcbitcXG4rXFx0XFx0cmV0dXJuIHB0ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJhbmdlLVxcdTAwM2VjYWNoZVtpZHhdO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGlwdGVfcmFuZ2UgKnRoaXNfaXB0ZV9yYW5nZShwdGVfdCAqcHRlcClcXG4re1xcbitcXHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XFxuK1xcdHVuc2lnbmVkIGludCBucl9wdGVzO1xcbitcXG4rXFx0cmFuZ2UgPSB0aGlzX2NwdV9yZWFkKGlwdGVfcmFuZ2UpO1xcbitcXHRpZiAocHRlcCBcXHUwMDNjIHJhbmdlLVxcdTAwM2ViYXNlX3B0ZSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdG5yX3B0ZXMgPSAocmFuZ2UtXFx1MDAzZWJhc2VfZW5kIC0gcmFuZ2UtXFx1MDAzZWJhc2VfYWRkcikgLyBQQUdFX1NJWkU7XFxuK1xcdGlmIChwdGVwIFxcdTAwM2U9IHJhbmdlLVxcdTAwM2ViYXNlX3B0ZSArIG5yX3B0ZXMpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0cmV0dXJuIHJhbmdlO1xcbit9XFxuK1xcbitib29sIF9fbGF6eV9tbXVfc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxcbit7XFxuK1xcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcXG4rXFxuK1xcdHJhbmdlID0gdGhpc19pcHRlX3JhbmdlKHB0ZXApO1xcbitcXHRpZiAoIXJhbmdlKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTtcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitib29sIF9fbGF6eV9tbXVfcHRlcF9nZXQocHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpXFxuK3tcXG4rXFx0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xcbitcXG4rXFx0cmFuZ2UgPSB0aGlzX2lwdGVfcmFuZ2UocHRlcCk7XFxuK1xcdGlmICghcmFuZ2UpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdCpyZXMgPSBfX2lwdGVfcmFuZ2VfcHRlcF9nZXQocmFuZ2UsIHB0ZXApO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK2Jvb2wgX19sYXp5X21tdV9wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIGludCAqcmVzKVxcbit7XFxuK1xcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcXG4rXFx0cHRlX3QgcHRlLCBvbGQ7XFxuK1xcbitcXHRyYW5nZSA9IHRoaXNfaXB0ZV9yYW5nZShwdGVwKTtcXG4rXFx0aWYgKCFyYW5nZSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0b2xkID0gX19pcHRlX3JhbmdlX3B0ZXBfZ2V0KHJhbmdlLCBwdGVwKTtcXG4rXFx0cHRlID0gcHRlX21rb2xkKG9sZCk7XFxuK1xcdF9faXB0ZV9yYW5nZV9zZXRfcHRlKHJhbmdlLCBwdGVwLCBwdGUpO1xcbitcXHQqcmVzID0gcHRlX3lvdW5nKG9sZCk7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rYm9vbCBfX2xhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcih1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKVxcbit7XFxuK1xcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcXG4rXFx0cHRlX3QgcHRlLCBvbGQ7XFxuK1xcbitcXHRyYW5nZSA9IHRoaXNfaXB0ZV9yYW5nZShwdGVwKTtcXG4rXFx0aWYgKCFyYW5nZSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0b2xkID0gX19pcHRlX3JhbmdlX3B0ZXBfZ2V0KHJhbmdlLCBwdGVwKTtcXG4rXFx0cHRlID0gX19wdGUoX1BBR0VfSU5WQUxJRCk7XFxuK1xcdF9faXB0ZV9yYW5nZV9zZXRfcHRlKHJhbmdlLCBwdGVwLCBwdGUpO1xcbitcXHQqcmVzID0gb2xkO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK2Jvb2wgX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpXFxuK3tcXG4rXFx0cmV0dXJuIF9fbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKGFkZHIsIHB0ZXAsIHJlcyk7XFxuK31cXG4rXFxuK2Jvb2wgX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxcbitcXHRcXHRcXHRcXHRcXHRwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpXFxuK3tcXG4rXFx0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xcbitcXG4rXFx0cmFuZ2UgPSB0aGlzX2lwdGVfcmFuZ2UocHRlcCk7XFxuK1xcdGlmICghcmFuZ2UpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdF9faXB0ZV9yYW5nZV9zZXRfcHRlKHJhbmdlLCBwdGVwLCBwdGUpO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK2Jvb2wgX19sYXp5X21tdV9wdGVwX3NldF93cnByb3RlY3QodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcXG4re1xcbitcXHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XFxuK1xcdHB0ZV90IHB0ZTtcXG4rXFxuK1xcdHJhbmdlID0gdGhpc19pcHRlX3JhbmdlKHB0ZXApO1xcbitcXHRpZiAoIXJhbmdlKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRwdGUgPSBfX2lwdGVfcmFuZ2VfcHRlcF9nZXQocmFuZ2UsIHB0ZXApO1xcbitcXHRpZiAocHRlX3dyaXRlKHB0ZSkpIHtcXG4rXFx0XFx0cHRlID0gcHRlX3dycHJvdGVjdChwdGUpO1xcbitcXHRcXHRfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK2ludCBsYXp5X21tdV9vbmxpbmVfY3B1KGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGNwdSlcXG4re1xcbitcXHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKCF0ZXN0X2ZhY2lsaXR5KDEzKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyYW5nZSA9IGt6YWxsb2Nfb2JqKCpyYW5nZSwgZ2ZwKTtcXG4rXFx0aWYgKCFyYW5nZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHJhbmdlLVxcdTAwM2VjYWNoZSk7IGkrKylcXG4rXFx0XFx0cmFuZ2UtXFx1MDAzZWNhY2hlW2ldID0gX19wdGUoUFRFX1BPSVNPTik7XFxuK1xcdHBlcl9jcHUoaXB0ZV9yYW5nZSwgY3B1KSA9IHJhbmdlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3ZvaWQgbGF6eV9tbXVfb2ZmbGluZV9jcHUodW5zaWduZWQgaW50IGNwdSlcXG4re1xcbitcXHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XFxuK1xcbitcXHRpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRyYW5nZSA9IHBlcl9jcHUoaXB0ZV9yYW5nZSwgY3B1KTtcXG4rXFx0cGVyX2NwdShpcHRlX3JhbmdlLCBjcHUpID0gTlVMTDtcXG4rXFx0a2ZyZWUocmFuZ2UpO1xcbit9XFxuK1xcbit2b2lkIF9faW5pdCBsYXp5X21tdV9vbmxpbmVfYm9vdF9jcHUodm9pZClcXG4re1xcbitcXHRsYXp5X21tdV9vbmxpbmVfY3B1KEdGUF9BVE9NSUMsIDApO1xcbit9XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jXFxuaW5kZXggNGFjZDhiMTQwYzRiZC4uZGYzNjUyM2JjYmJiYiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jXFxuKysrIGIvYXJjaC9zMzkwL21tL3BndGFibGUuY1xcbkBAIC0xNjYsMTQgKzE2NiwxNCBAQCBwdGVfdCBwdGVwX3hjaGdfbGF6eShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiB9XFxuIEVYUE9SVF9TWU1CT0wocHRlcF94Y2hnX2xhenkpO1xcbiBcXG4tcHRlX3QgcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi1cXHRcXHRcXHQgICAgIHB0ZV90ICpwdGVwKVxcbitwdGVfdCBfX19wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdFxcdFxcdHB0ZV90ICpwdGVwKVxcbiB7XFxuIFxcdHJldHVybiBwdGVwX2ZsdXNoX2xhenkodm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgcHRlcCwgMSk7XFxuIH1cXG4gXFxuLXZvaWQgcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tXFx0XFx0XFx0ICAgICBwdGVfdCAqcHRlcCwgcHRlX3Qgb2xkX3B0ZSwgcHRlX3QgcHRlKVxcbit2b2lkIF9fX3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdFxcdFxcdHB0ZV90ICpwdGVwLCBwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpXFxuIHtcXG4gXFx0c2V0X3B0ZShwdGVwLCBwdGUpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuY1xcbmluZGV4IDIyOWQxZmMzZDdmMWMuLjkxNjc4NWMzYjJlMGIgMTAwNjQ0XFxuLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jXFxuKysrIGIvZnMvcHJvYy90YXNrX21tdS5jXFxuQEAgLTI4NTIsNyArMjg1Miw3IEBAIHN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4tXFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG4rXFx0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKHZtYS1cXHUwMDNldm1fbW0sIHN0YXJ0LCBlbmQsIHN0YXJ0X3B0ZSk7XFxuIFxcbiBcXHRpZiAoKHAtXFx1MDAzZWFyZy5mbGFncyBcXHUwMDI2IFBNX1NDQU5fV1BfTUFUQ0hJTkcpIFxcdTAwMjZcXHUwMDI2ICFwLVxcdTAwM2V2ZWNfb3V0KSB7XFxuIFxcdFxcdC8qIEZhc3QgcGF0aCBmb3IgcGVyZm9ybWluZyBleGNsdXNpdmUgV1AgKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rYXNhbi5oIGIvaW5jbHVkZS9saW51eC9rYXNhbi5oXFxuaW5kZXggYmYyMzNiZGU2OGM3ZS4uMWFhNGQ5ZGQyNDg1YSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2thc2FuLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2thc2FuLmhcXG5AQCAtNiw2ICs2LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2thc2FuLWVuYWJsZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2thc2FuLXRhZ3MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGd0YWJsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RhdGljX2tleS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gXFxuQEAgLTM1LDggKzM2LDYgQEAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19iaXR3aXNlIGthc2FuX3ZtYWxsb2NfZmxhZ3NfdDtcXG4gXFxuICNpZiBkZWZpbmVkKENPTkZJR19LQVNBTl9HRU5FUklDKSB8fCBkZWZpbmVkKENPTkZJR19LQVNBTl9TV19UQUdTKVxcbiBcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BndGFibGUuaFxcdTAwM2VcXG4tXFxuIC8qIFNvZnR3YXJlIEtBU0FOIGltcGxlbWVudGF0aW9ucyB1c2Ugc2hhZG93IG1lbW9yeS4gKi9cXG4gXFxuICNpZmRlZiBDT05GSUdfS0FTQU5fU1dfVEFHU1xcbkBAIC0xMzQsNiArMTMzLDIwIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4gXFx0XFx0X19rYXNhbl9wb2lzb25fc2xhYihzbGFiKTtcXG4gfVxcbiBcXG4rdm9pZCBfX2thc2FuX3BvaXNvbl9wdGUocHRlX3QgKnB0ZSwgaW50IG5yKTtcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGthc2FuX3BvaXNvbl9wdGUocHRlX3QgKnB0ZSwgaW50IG5yKVxcbit7XFxuK1xcdGlmIChrYXNhbl9lbmFibGVkKCkpXFxuK1xcdFxcdF9fa2FzYW5fcG9pc29uX3B0ZShwdGUsIG5yKTtcXG4rfVxcbitcXG4rdm9pZCBfX2thc2FuX3VucG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpO1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQga2FzYW5fdW5wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucilcXG4re1xcbitcXHRpZiAoa2FzYW5fZW5hYmxlZCgpKVxcbitcXHRcXHRfX2thc2FuX3VucG9pc29uX3B0ZShwdGUsIG5yKTtcXG4rfVxcbitcXG4gdm9pZCBfX2thc2FuX3VucG9pc29uX25ld19vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB2b2lkICpvYmplY3QpO1xcbiAvKipcXG4gICoga2FzYW5fdW5wb2lzb25fbmV3X29iamVjdCAtIFRlbXBvcmFyaWx5IHVucG9pc29uIGEgbmV3IHNsYWIgb2JqZWN0LlxcbkBAIC00MTQsNiArNDI3LDggQEAgc3RhdGljIGlubGluZSBib29sIGthc2FuX3VucG9pc29uX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fcG9pc29uX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIpIHt9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucikge31cXG4rc3RhdGljIGlubGluZSB2b2lkIGthc2FuX3VucG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl91bnBvaXNvbl9uZXdfb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSxcXG4gXFx0XFx0XFx0XFx0XFx0dm9pZCAqb2JqZWN0KSB7fVxcbiBzdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fcG9pc29uX25ld19vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaCBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXFxuaW5kZXggMjk4MWUzODZkYTdiMy4uY2M4NWRhZjMwNzM5ZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXFxuQEAgLTI3MSw2ICsyNzEsNTAgQEAgc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfZW5hYmxlKHZvaWQpXFxuIFxcdFxcdGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSgpO1xcbiB9XFxuIFxcbisjaWZuZGVmIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXNcXG4rc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHB0ZV90ICpwdGVwKVxcbit7XFxuK1xcdGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSgpO1xcbit9XFxuKyNlbmRpZlxcbitcXG4rLyoqXFxuKyAqIGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcygpIC0gRW5hYmxlIHRoZSBsYXp5IE1NVSBtb2RlIHdpdGggYSBzcGVlZHVwIGhpbnQuXFxuKyAqIEBtbTogQWRkcmVzcyBzcGFjZSB0aGUgcGFnZXMgYXJlIG1hcHBlZCBpbnRvLlxcbisgKiBAYWRkcjogU3RhcnQgYWRkcmVzcyBvZiB0aGUgcmFuZ2UuXFxuKyAqIEBlbmQ6IEVuZCBhZGRyZXNzIG9mIHRoZSByYW5nZS5cXG4rICogQHB0ZXA6IFBhZ2UgdGFibGUgcG9pbnRlciBmb3IgdGhlIGZpcnN0IGVudHJ5LlxcbisgKlxcbisgKiBFbnRlcnMgYSBuZXcgbGF6eSBNTVUgbW9kZSBzZWN0aW9uOyBpZiB0aGUgbW9kZSB3YXMgbm90IGFscmVhZHkgZW5hYmxlZCxcXG4rICogZW5hYmxlcyBpdCBhbmQgY2FsbHMgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcygpLlxcbisgKlxcbisgKiBQVEVzIHRoYXQgZmFsbCB3aXRoaW4gdGhlIHNwZWNpZmllZCByYW5nZSBtaWdodCBvYnNlcnZlIHVwZGF0ZSBzcGVlZHVwcy5cXG4rICogVGhlIFBURXMgbXVzdCBiZWxvbmcgdG8gdGhlIHNwZWNpZmllZCBhZGRyZXNzIHNwYWNlIGFuZCBiZSBpbiB0aGUgc2FtZSBQTUQuXFxuKyAqXFxuKyAqIFRoZXJlIGFyZSBubyByZXF1aXJlbWVudHMgb24gdGhlIG9yZGVyIG9yIHJhbmdlIGNvbXBsZXRlbmVzcyBvZiBQVEVcXG4rICogdXBkYXRlcyBmb3IgdGhlIHNwZWNpZmllZCByYW5nZS5cXG4rICpcXG4rICogTXVzdCBiZSBwYWlyZWQgd2l0aCBhIGNhbGwgdG8gbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCkuXFxuKyAqXFxuKyAqIEhhcyBubyBlZmZlY3QgaWYgY2FsbGVkOlxcbisgKiAtIFdoaWxlIHBhdXNlZCAtIHNlZSBsYXp5X21tdV9tb2RlX3BhdXNlKClcXG4rICogLSBJbiBpbnRlcnJ1cHQgY29udGV4dFxcbisgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgcHRlX3QgKnB0ZXApXFxuK3tcXG4rXFx0c3RydWN0IGxhenlfbW11X3N0YXRlICpzdGF0ZSA9IFxcdTAwMjZjdXJyZW50LVxcdTAwM2VsYXp5X21tdV9zdGF0ZTtcXG4rXFxuK1xcdGlmIChpbl9pbnRlcnJ1cHQoKSB8fCBzdGF0ZS1cXHUwMDNlcGF1c2VfY291bnQgXFx1MDAzZSAwKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRWTV9XQVJOX09OX09OQ0Uoc3RhdGUtXFx1MDAzZWVuYWJsZV9jb3VudCA9PSBVOF9NQVgpO1xcbitcXG4rXFx0aWYgKHN0YXRlLVxcdTAwM2VlbmFibGVfY291bnQrKyA9PSAwKVxcbitcXHRcXHRhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIHB0ZXApO1xcbit9XFxuK1xcbiAvKipcXG4gICogbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCkgLSBEaXNhYmxlIHRoZSBsYXp5IE1NVSBtb2RlLlxcbiAgKlxcbkBAIC0zODcsNiArNDMxLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfcmVzdW1lKHZvaWQpXFxuIH1cXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfZW5hYmxlKHZvaWQpIHt9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHB0ZV90ICpwdGVwKSB7fVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9kaXNhYmxlKHZvaWQpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBsYXp5X21tdV9tb2RlX3BhdXNlKHZvaWQpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBsYXp5X21tdV9tb2RlX3Jlc3VtZSh2b2lkKSB7fVxcbmRpZmYgLS1naXQgYS9tbS9rYXNhbi9jb21tb24uYyBiL21tL2thc2FuL2NvbW1vbi5jXFxuaW5kZXggYjdkMDVjMmE2ZDkzZC4uOTRkMTA2MDk0OTg5MSAxMDA2NDRcXG4tLS0gYS9tbS9rYXNhbi9jb21tb24uY1xcbisrKyBiL21tL2thc2FuL2NvbW1vbi5jXFxuQEAgLTE2Myw2ICsxNjMsMjAgQEAgdm9pZCBfX2thc2FuX3BvaXNvbl9zbGFiKHN0cnVjdCBzbGFiICpzbGFiKVxcbiBcXHRcXHQgICAgIEtBU0FOX1NMQUJfUkVEWk9ORSwgZmFsc2UpO1xcbiB9XFxuIFxcbit2b2lkIF9fa2FzYW5fcG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpXFxuK3tcXG4rXFx0aWYgKElTX0FMSUdORUQoc2l6ZW9mKCpwdGUpLCBLQVNBTl9HUkFOVUxFX1NJWkUpKVxcbitcXHRcXHRrYXNhbl9wb2lzb24ocHRlLCBzaXplb2YoKnB0ZSkgKiBuciwgS0FTQU5fTEFaWV9NTVVfUFRFLCBmYWxzZSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoX19rYXNhbl9wb2lzb25fcHRlKTtcXG4rXFxuK3ZvaWQgX19rYXNhbl91bnBvaXNvbl9wdGUocHRlX3QgKnB0ZSwgaW50IG5yKVxcbit7XFxuK1xcdGlmIChJU19BTElHTkVEKHNpemVvZigqcHRlKSwgS0FTQU5fR1JBTlVMRV9TSVpFKSlcXG4rXFx0XFx0a2FzYW5fdW5wb2lzb24ocHRlLCBzaXplb2YoKnB0ZSkgKiBuciwgZmFsc2UpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKF9fa2FzYW5fdW5wb2lzb25fcHRlKTtcXG4rXFxuIHZvaWQgX19rYXNhbl91bnBvaXNvbl9uZXdfb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSwgdm9pZCAqb2JqZWN0KVxcbiB7XFxuIFxcdGthc2FuX3VucG9pc29uKG9iamVjdCwgY2FjaGUtXFx1MDAzZW9iamVjdF9zaXplLCBmYWxzZSk7XFxuZGlmZiAtLWdpdCBhL21tL2thc2FuL2thc2FuLmggYi9tbS9rYXNhbi9rYXNhbi5oXFxuaW5kZXggZmM5MTY5YTU0NzY2Mi4uMWEyZDE4Y2RiMjFkOSAxMDA2NDRcXG4tLS0gYS9tbS9rYXNhbi9rYXNhbi5oXFxuKysrIGIvbW0va2FzYW4va2FzYW4uaFxcbkBAIC0xNDQsMTIgKzE0NCwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wga2FzYW5fcmVxdWlyZXNfbWV0YSh2b2lkKVxcbiAjZGVmaW5lIEtBU0FOX1BBR0VfUkVEWk9ORVxcdDB4RkUgIC8qIHJlZHpvbmUgZm9yIGttYWxsb2NfbGFyZ2UgYWxsb2NhdGlvbiAqL1xcbiAjZGVmaW5lIEtBU0FOX1NMQUJfUkVEWk9ORVxcdDB4RkMgIC8qIHJlZHpvbmUgZm9yIHNsYWIgb2JqZWN0ICovXFxuICNkZWZpbmUgS0FTQU5fU0xBQl9GUkVFXFx0XFx0MHhGQiAgLyogZnJlZWQgc2xhYiBvYmplY3QgKi9cXG4rI2RlZmluZSBLQVNBTl9MQVpZX01NVV9QVEVcXHQweEZEICAvKiBkaXJlY3QgcHRlIGFjY2VzcyBpbiBsYXp5IG1tdSBtb2RlICovXFxuICNkZWZpbmUgS0FTQU5fVk1BTExPQ19JTlZBTElEXFx0MHhGOCAgLyogaW5hY2Nlc3NpYmxlIHNwYWNlIGluIHZtYXAgYXJlYSAqL1xcbiAjZWxzZVxcbiAjZGVmaW5lIEtBU0FOX1BBR0VfRlJFRVxcdFxcdEtBU0FOX1RBR19JTlZBTElEXFxuICNkZWZpbmUgS0FTQU5fUEFHRV9SRURaT05FXFx0S0FTQU5fVEFHX0lOVkFMSURcXG4gI2RlZmluZSBLQVNBTl9TTEFCX1JFRFpPTkVcXHRLQVNBTl9UQUdfSU5WQUxJRFxcbiAjZGVmaW5lIEtBU0FOX1NMQUJfRlJFRVxcdFxcdEtBU0FOX1RBR19JTlZBTElEXFxuKyNkZWZpbmUgS0FTQU5fTEFaWV9NTVVfUFRFXFx0S0FTQU5fVEFHX0lOVkFMSURcXG4gI2RlZmluZSBLQVNBTl9WTUFMTE9DX0lOVkFMSURcXHRLQVNBTl9UQUdfSU5WQUxJRCAvKiBvbmx5IHVzZWQgZm9yIFNXX1RBR1MgKi9cXG4gI2VuZGlmXFxuIFxcbmRpZmYgLS1naXQgYS9tbS9rYXNhbi9yZXBvcnRfZ2VuZXJpYy5jIGIvbW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuY1xcbmluZGV4IGY1YjhlMzdiMzgwNWMuLjQ4OWQ0YThkNjkwMmQgMTAwNjQ0XFxuLS0tIGEvbW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuY1xcbisrKyBiL21tL2thc2FuL3JlcG9ydF9nZW5lcmljLmNcXG5AQCAtMTEzLDYgKzExMyw5IEBAIHN0YXRpYyBjb25zdCBjaGFyICpnZXRfc2hhZG93X2J1Z190eXBlKHN0cnVjdCBrYXNhbl9yZXBvcnRfaW5mbyAqaW5mbylcXG4gXFx0Y2FzZSBLQVNBTl9TTEFCX0ZSRUVfTUVUQTpcXG4gXFx0XFx0YnVnX3R5cGUgPSBcXFwic2xhYi11c2UtYWZ0ZXItZnJlZVxcXCI7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEtBU0FOX0xBWllfTU1VX1BURTpcXG4rXFx0XFx0YnVnX3R5cGUgPSBcXFwibGF6eS1tbXUtcHRlLWFjY2Vzc1xcXCI7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEtBU0FOX0FMTE9DQV9MRUZUOlxcbiBcXHRjYXNlIEtBU0FOX0FMTE9DQV9SSUdIVDpcXG4gXFx0XFx0YnVnX3R5cGUgPSBcXFwiYWxsb2NhLW91dC1vZi1ib3VuZHNcXFwiO1xcbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcXG5pbmRleCA3NzU1MmIwM2QzMThkLi40NDE5ZDE2YjM5Zjk2IDEwMDY0NFxcbi0tLSBhL21tL21hZHZpc2UuY1xcbisrKyBiL21tL21hZHZpc2UuY1xcbkBAIC00NTIsNyArNDUyLDcgQEAgc3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcXG4gXFx0aWYgKCFzdGFydF9wdGUpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHRmbHVzaF90bGJfYmF0Y2hlZF9wZW5kaW5nKG1tKTtcXG4tXFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG4rXFx0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIHN0YXJ0X3B0ZSk7XFxuIFxcdGZvciAoOyBhZGRyIFxcdTAwM2MgZW5kOyBwdGUgKz0gbnIsIGFkZHIgKz0gbnIgKiBQQUdFX1NJWkUpIHtcXG4gXFx0XFx0bnIgPSAxO1xcbiBcXHRcXHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XFxuQEAgLTUwNyw3ICs1MDcsNyBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxcbiBcXHRcXHRcXHRcXHRpZiAoIXN0YXJ0X3B0ZSlcXG4gXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdFxcdGZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pO1xcbi1cXHRcXHRcXHRcXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xcbitcXHRcXHRcXHRcXHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgc3RhcnRfcHRlKTtcXG4gXFx0XFx0XFx0XFx0aWYgKCFlcnIpXFxuIFxcdFxcdFxcdFxcdFxcdG5yID0gMDtcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTY3NCw3ICs2NzQsNyBAQCBzdGF0aWMgaW50IG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRpZiAoIXN0YXJ0X3B0ZSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdGZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pO1xcbi1cXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xcbitcXHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgc3RhcnRfcHRlKTtcXG4gXFx0Zm9yICg7IGFkZHIgIT0gZW5kOyBwdGUgKz0gbnIsIGFkZHIgKz0gUEFHRV9TSVpFICogbnIpIHtcXG4gXFx0XFx0bnIgPSAxO1xcbiBcXHRcXHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XFxuQEAgLTczNCw3ICs3MzQsNyBAQCBzdGF0aWMgaW50IG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHRcXHRpZiAoIXN0YXJ0X3B0ZSlcXG4gXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdFxcdGZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pO1xcbi1cXHRcXHRcXHRcXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xcbitcXHRcXHRcXHRcXHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgcHRlKTtcXG4gXFx0XFx0XFx0XFx0aWYgKCFlcnIpXFxuIFxcdFxcdFxcdFxcdFxcdG5yID0gMDtcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCA2YjgyODBjZmMxZGJlLi4wY2MwN2IwNDMzODRiIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtMTI3Miw3ICsxMjcyLDcgQEAgY29weV9wdGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsXFxuIFxcdHNwaW5fbG9ja19uZXN0ZWQoc3JjX3B0bCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xcbiBcXHRvcmlnX3NyY19wdGUgPSBzcmNfcHRlO1xcbiBcXHRvcmlnX2RzdF9wdGUgPSBkc3RfcHRlO1xcbi1cXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xcbitcXHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMoc3JjX21tLCBhZGRyLCBlbmQsIHNyY19wdGUpO1xcbiBcXG4gXFx0ZG8ge1xcbiBcXHRcXHRuciA9IDE7XFxuQEAgLTE5MjIsNyArMTkyMiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHphcF9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4gXFx0XFx0cmV0dXJuIGFkZHI7XFxuIFxcbiBcXHRmbHVzaF90bGJfYmF0Y2hlZF9wZW5kaW5nKG1tKTtcXG4tXFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG4rXFx0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIHN0YXJ0X3B0ZSk7XFxuIFxcdGRvIHtcXG4gXFx0XFx0Ym9vbCBhbnlfc2tpcHBlZCA9IGZhbHNlO1xcbiBcXG5AQCAtMjkxOSw3ICsyOTE5LDcgQEAgc3RhdGljIGludCByZW1hcF9wdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsXFxuIFxcdG1hcHBlZF9wdGUgPSBwdGUgPSBwdGVfYWxsb2NfbWFwX2xvY2sobW0sIHBtZCwgYWRkciwgXFx1MDAyNnB0bCk7XFxuIFxcdGlmICghcHRlKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG4rXFx0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIG1hcHBlZF9wdGUpO1xcbiBcXHRkbyB7XFxuIFxcdFxcdEJVR19PTighcHRlX25vbmUocHRlcF9nZXQocHRlKSkpO1xcbiBcXHRcXHRpZiAoIXBmbl9tb2RpZnlfYWxsb3dlZChwZm4sIHByb3QpKSB7XFxuQEAgLTMzMzAsNyArMzMzMCw3IEBAIHN0YXRpYyBpbnQgYXBwbHlfdG9fcHRlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4tXFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG4rXFx0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIG1hcHBlZF9wdGUpO1xcbiBcXG4gXFx0aWYgKGZuKSB7XFxuIFxcdFxcdGRvIHtcXG5kaWZmIC0tZ2l0IGEvbW0vbXByb3RlY3QuYyBiL21tL21wcm90ZWN0LmNcXG5pbmRleCA5Y2JmOTMyYjAyOGNmLi4zZmMyNjQxOGU4MzdkIDEwMDY0NFxcbi0tLSBhL21tL21wcm90ZWN0LmNcXG4rKysgYi9tbS9tcHJvdGVjdC5jXFxuQEAgLTMzNyw3ICszMzcsNyBAQCBzdGF0aWMgbG9uZyBjaGFuZ2VfcHRlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuIFxcdFxcdGlzX3ByaXZhdGVfc2luZ2xlX3RocmVhZGVkID0gdm1hX2lzX3NpbmdsZV90aHJlYWRlZF9wcml2YXRlKHZtYSk7XFxuIFxcbiBcXHRmbHVzaF90bGJfYmF0Y2hlZF9wZW5kaW5nKHZtYS1cXHUwMDNldm1fbW0pO1xcbi1cXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xcbitcXHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXModm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgZW5kLCBwdGUpO1xcbiBcXHRkbyB7XFxuIFxcdFxcdG5yX3B0ZXMgPSAxO1xcbiBcXHRcXHRvbGRwdGUgPSBwdGVwX2dldChwdGUpO1xcbmRpZmYgLS1naXQgYS9tbS9tcmVtYXAuYyBiL21tL21yZW1hcC5jXFxuaW5kZXggZTljOGIxZDA1ODMyYi4uMGRmZTNkZTM5Y2NjNyAxMDA2NDRcXG4tLS0gYS9tbS9tcmVtYXAuY1xcbisrKyBiL21tL21yZW1hcC5jXFxuQEAgLTI2MCw3ICsyNjAsNyBAQCBzdGF0aWMgaW50IG1vdmVfcHRlcyhzdHJ1Y3QgcGFnZXRhYmxlX21vdmVfY29udHJvbCAqcG1jLFxcbiBcXHRpZiAobmV3X3B0bCAhPSBvbGRfcHRsKVxcbiBcXHRcXHRzcGluX2xvY2tfbmVzdGVkKG5ld19wdGwsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcXG4gXFx0Zmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyh2bWEtXFx1MDAzZXZtX21tKTtcXG4tXFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG4rXFx0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBvbGRfYWRkciwgb2xkX2VuZCwgb2xkX3B0ZXApO1xcbiBcXG4gXFx0Zm9yICg7IG9sZF9hZGRyIFxcdTAwM2Mgb2xkX2VuZDsgb2xkX3B0ZXAgKz0gbnJfcHRlcywgb2xkX2FkZHIgKz0gbnJfcHRlcyAqIFBBR0VfU0laRSxcXG4gXFx0XFx0bmV3X3B0ZXAgKz0gbnJfcHRlcywgbmV3X2FkZHIgKz0gbnJfcHRlcyAqIFBBR0VfU0laRSkge1xcbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcXG5pbmRleCBmNGZhMjI3YThkN2YwLi4xYzZlZjhmZDA3OWUwIDEwMDY0NFxcbi0tLSBhL21tL3ZtYWxsb2MuY1xcbisrKyBiL21tL3ZtYWxsb2MuY1xcbkBAIC0xMDksNyArMTA5LDcgQEAgc3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRpZiAoIXB0ZSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xcbitcXHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMoXFx1MDAyNmluaXRfbW0sIGFkZHIsIGVuZCwgcHRlKTtcXG4gXFxuIFxcdGRvIHtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KCFwdGVfbm9uZShwdGVwX2dldChwdGUpKSkpIHtcXG5AQCAtMzkzLDcgKzM5Myw3IEBAIHN0YXRpYyB2b2lkIHZ1bm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0dW5zaWduZWQgbG9uZyBzaXplID0gUEFHRV9TSVpFO1xcbiBcXG4gXFx0cHRlID0gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyKTtcXG4tXFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG4rXFx0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKFxcdTAwMjZpbml0X21tLCBhZGRyLCBlbmQsIHB0ZSk7XFxuIFxcbiBcXHRkbyB7XFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuQEAgLTU2MCw3ICs1NjAsNyBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0aWYgKCFwdGUpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4tXFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG4rXFx0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKFxcdTAwMjZpbml0X21tLCBhZGRyLCBlbmQsIHB0ZSk7XFxuIFxcbiBcXHRkbyB7XFxuIFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gcGFnZXNbKm5yXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6Mzc6NDUuMzc0NzE4ODkzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjEwNDMyNDcyNTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktBU0FOXCIsXG4gICAgXCJLQVNBTl9HRU5FUklDXCIsXG4gICAgXCJIT1RQTFVHX0NQVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZVwiLFxuICAgIFwiYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc1wiLFxuICAgIFwiYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlXCIsXG4gICAgXCJhcmNoX2ZsdXNoX2xhenlfbW11X21vZGVcIixcbiAgICBcImxhenlfbW11X29ubGluZV9jcHVcIixcbiAgICBcImxhenlfbW11X29mZmxpbmVfY3B1XCIsXG4gICAgXCJfX2thc2FuX3BvaXNvbl9wdGVcIixcbiAgICBcIl9fa2FzYW5fdW5wb2lzb25fcHRlXCIsXG4gICAgXCJfX19wdGVwX21vZGlmeV9wcm90X3N0YXJ0XCIsXG4gICAgXCJfX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbGF6eSBNTVUgbW9kZSBmb3IgczM5MCBhcmNoaXRlY3R1cmUsIHdoaWNoIGJhdGNoZXMgUFRFIGludmFsaWRhdGlvbnMgdXNpbmcgdGhlIElQVEUtcmFuZ2UgZmFjaWxpdHkuIEl0IGhvb2tzIGludG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzeXNjYWxscyAobWFkdmlzZSwgbXByb3RlY3QsIG1yZW1hcCwgdm1hbGxvYykgYW5kIENQVSBob3RwbHVnIHBhdGhzLiBJdCBhbHNvIGFkZHMgS0FTQU4gaW5zdHJ1bWVudGF0aW9uIGZvciBkaXJlY3QgUFRFIGFjY2Vzc2VzIGluIGxhenkgTU1VIG1vZGUuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM2YzEyNjczZjM1ZGRmMmExNDc5MTE2NGI1ZGNmOWQ0YzNjZjU0YzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxMjozNzo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWdcbmluZGV4IDg0NDA0ZTY3NzhkNTAuLjc4NDYzMzJkY2QwYTYgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvS2NvbmZpZ1xuKysrIGIvYXJjaC9zMzkwL0tjb25maWdcbkBAIC05Nyw2ICs5Nyw3IEBAIGNvbmZpZyBTMzkwXG4gXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxuIFx0c2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VcbiBcdHNlbGVjdCBBUkNIX0hBU19LQ09WXG4rXHRzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERVxuIFx0c2VsZWN0IEFSQ0hfSEFTX01FTUJBUlJJRVJfU1lOQ19DT1JFXG4gXHRzZWxlY3QgQVJDSF9IQVNfTUVNX0VOQ1JZUFRcbiBcdHNlbGVjdCBBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFNcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbGF6eV9tbXUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sYXp5X21tdS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTgzNjZlOWRlOWJjM1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xhenlfbW11LmhcbkBAIC0wLDAgKzEsOSBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rI2lmbmRlZiBfX0xBWllfTU1VX0hcbisjZGVmaW5lIF9fTEFaWV9NTVVfSFxuK1xuK3ZvaWQgbGF6eV9tbXVfb25saW5lX2Jvb3RfY3B1KHZvaWQpO1xuK2ludCBsYXp5X21tdV9vbmxpbmVfY3B1KGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGNwdSk7XG4rdm9pZCBsYXp5X21tdV9vZmZsaW5lX2NwdSh1bnNpZ25lZCBpbnQgY3B1KTtcbitcbisjZW5kaWYgLyogX19MQVpZX01NVV9IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmhcbmluZGV4IDNiM2VjYzY0Nzk5M2YuLmRiYTIzNjY2NGRhOTAgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oXG5AQCAtMTYzLDcgKzE2Myw3IEBAIHN0cnVjdCBsb3djb3JlIHtcbiBcdF9fczMyXHRwcmVlbXB0X2NvdW50O1x0XHRcdC8qIDB4MDNhOCAqL1xuIFx0X191MzJcdHNwaW5sb2NrX2xvY2t2YWw7XHRcdC8qIDB4MDNhYyAqL1xuIFx0X191MzJcdHNwaW5sb2NrX2luZGV4O1x0XHRcdC8qIDB4MDNiMCAqL1xuLVx0X191OFx0cGFkXzB4MDNiNFsweDAzYjgtMHgwM2I0XTtcdC8qIDB4MDNiNCAqL1xuK1x0X19zMzJcdGxhenlfbW11X2NvdW50O1x0XHRcdC8qIDB4MDNiNCAqL1xuIFx0X191NjRcdHBlcmNwdV9vZmZzZXQ7XHRcdFx0LyogMHgwM2I4ICovXG4gXHRfX3U4XHRwZXJjcHVfcmVnaXN0ZXI7XHRcdC8qIDB4MDNjMCAqL1xuIFx0X191OFx0cGFkXzB4MDNjMVsweDA0MDAtMHgwM2MxXTtcdC8qIDB4MDNjMSAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCA4NTljZTdjN2Q0NTQ0Li4xZThhNzk5ODllZDZlIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTM5LDYgKzM5LDY0IEBAIGVudW0ge1xuIFxuIGV4dGVybiBhdG9taWNfbG9uZ190IGRpcmVjdF9wYWdlc19jb3VudFtQR19ESVJFQ1RfTUFQX01BWF07XG4gXG4rYm9vbCBfX2xhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgaW50ICpyZXMpO1xuK2Jvb2wgX19sYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcyk7XG4rYm9vbCBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcyk7XG4rYm9vbCBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IG9sZF9wdGUsIHB0ZV90IHB0ZSk7XG4rYm9vbCBfX2xhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTtcbitib29sIF9fbGF6eV9tbXVfc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKTtcbitib29sIF9fbGF6eV9tbXVfcHRlcF9nZXQocHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpO1xuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19sYXp5X21tdV9hY3RpdmUodm9pZClcbit7XG4rXHRpZiAoX19pc19kZWZpbmVkKF9fREVDT01QUkVTU09SKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0aWYgKCFnZXRfbG93Y29yZSgpLVx1MDAzZWxhenlfbW11X2NvdW50KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIGlubGluZVxuK2Jvb2wgbGF6eV9tbXVfcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBpbnQgKnJlcylcbit7XG4rXHRpZiAoIWlzX2xhenlfbW11X2FjdGl2ZSgpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRyZXR1cm4gX19sYXp5X21tdV9wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKGFkZHIsIHB0ZXAsIHJlcyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmVcbitib29sIGxhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcih1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKVxuK3tcbitcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdHJldHVybiBfX2xhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcihhZGRyLCBwdGVwLCByZXMpO1xuK31cbitcbitzdGF0aWMgaW5saW5lXG4rYm9vbCBsYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpXG4re1xuK1x0aWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0cmV0dXJuIF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydChhZGRyLCBwdGVwLCByZXMpO1xuK31cbitcbitzdGF0aWMgaW5saW5lXG4rYm9vbCBsYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxuK1x0XHRcdFx0ICAgICAgcHRlX3Qgb2xkX3B0ZSwgcHRlX3QgcHRlKVxuK3tcbitcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdHJldHVybiBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KGFkZHIsIHB0ZXAsIG9sZF9wdGUsIHB0ZSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmVcbitib29sIGxhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxuK3tcbitcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdHJldHVybiBfX2xhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdChhZGRyLCBwdGVwKTtcbit9XG4rXG4gc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9wYWdlX2NvdW50KGludCBsZXZlbCwgbG9uZyBjb3VudClcbiB7XG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJPQ19GUykpXG5AQCAtOTc4LDE3ICsxMDM2LDM4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcG1kKHBtZF90ICpwbWRwLCBwbWRfdCBwbWQpXG4gXHRXUklURV9PTkNFKCpwbWRwLCBwbWQpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSlcbiB7XG4gXHRpZiAocHRlX3ByZXNlbnQocHRlKSlcbiBcdFx0cHRlID0gY2xlYXJfcHRlX2JpdChwdGUsIF9fcGdwcm90KF9QQUdFX1VOVVNFRCkpO1xuIFx0V1JJVEVfT05DRSgqcHRlcCwgcHRlKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSlcbit7XG4rXHRpZiAoIWlzX2xhenlfbW11X2FjdGl2ZSgpIHx8ICFfX2xhenlfbW11X3NldF9wdGUocHRlcCwgcHRlKSlcbitcdFx0X19zZXRfcHRlKHB0ZXAsIHB0ZSk7XG4rfVxuK1xuKyNkZWZpbmUgcHRlcF9nZXRfbG9ja2xlc3MgcHRlcF9nZXRfbG9ja2xlc3NcbitzdGF0aWMgaW5saW5lIF9fbm9fc2FuaXRpemVfYWRkcmVzcyBwdGVfdCBwdGVwX2dldF9sb2NrbGVzcyhwdGVfdCAqcHRlcClcbit7XG4rXHRyZXR1cm4gUkVBRF9PTkNFKCpwdGVwKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBwdGVfdCBfX3B0ZXBfZ2V0KHB0ZV90ICpwdGVwKVxuK3tcbitcdHJldHVybiBSRUFEX09OQ0UoKnB0ZXApO1xuK31cbitcbiAjZGVmaW5lIHB0ZXBfZ2V0IHB0ZXBfZ2V0XG4gc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldChwdGVfdCAqcHRlcClcbiB7XG4tXHRyZXR1cm4gUkVBRF9PTkNFKCpwdGVwKTtcbitcdHB0ZV90IHJlcztcbitcbitcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkgfHwgIV9fbGF6eV9tbXVfcHRlcF9nZXQocHRlcCwgXHUwMDI2cmVzKSlcbitcdFx0cmVzID0gX19wdGVwX2dldChwdGVwKTtcbitcdHJldHVybiByZXM7XG4gfVxuIFxuICNkZWZpbmUgcG1kcF9nZXQgcG1kcF9nZXRcbkBAIC0xMTgxLDYgKzEyNjAsMTUgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fcHRlcF9pcHRlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IG5yLFxuIFx0fSB3aGlsZSAobnIgIT0gMjU1KTtcbiB9XG4gXG4rdm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuK1x0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuK1x0XHRcdFx0XHRwdGVfdCAqcHRlKTtcbisjZGVmaW5lIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc1xuK1xuK3ZvaWQgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKHZvaWQpO1xuK3ZvaWQgYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKHZvaWQpO1xuK3ZvaWQgYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlKHZvaWQpO1xuK1xuIC8qXG4gICogVGhpcyBpcyBoYXJkIHRvIHVuZGVyc3RhbmQuIHB0ZXBfZ2V0X2FuZF9jbGVhciBhbmQgcHRlcF9jbGVhcl9mbHVzaFxuICAqIGJvdGggY2xlYXIgdGhlIFRMQiBmb3IgdGhlIHVubWFwcGVkIHB0ZS4gVGhlIHJlYXNvbiBpcyB0aGF0XG5AQCAtMTIwMSwxMCArMTI4OSwxNiBAQCBwdGVfdCBwdGVwX3hjaGdfbGF6eShzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHB0ZV90ICosIHB0ZV90KTtcbiBzdGF0aWMgaW5saW5lIGJvb2wgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcbiB7XG4tXHRwdGVfdCBwdGUgPSBwdGVwX2dldChwdGVwKTtcbitcdHB0ZV90IHB0ZTtcbitcdGludCByZXM7XG4gXG4tXHRwdGUgPSBwdGVwX3hjaGdfZGlyZWN0KHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgcHRlcCwgcHRlX21rb2xkKHB0ZSkpO1xuLVx0cmV0dXJuIHB0ZV95b3VuZyhwdGUpO1xuK1x0aWYgKCFsYXp5X21tdV9wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKGFkZHIsIHB0ZXAsIFx1MDAyNnJlcykpIHtcbitcdFx0cHRlID0gX19wdGVwX2dldChwdGVwKTtcbitcdFx0cHRlID0gcHRlX21rb2xkKHB0ZSk7XG4rXHRcdHB0ZSA9IHB0ZXBfeGNoZ19kaXJlY3Qodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGVwLCBwdGUpO1xuK1x0XHRyZXMgPSBwdGVfeW91bmcocHRlKTtcbitcdH1cbitcdHJldHVybiByZXM7XG4gfVxuIFxuICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9DTEVBUl9ZT1VOR19GTFVTSFxuQEAgLTEyMjAsNyArMTMxNCw4IEBAIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIHtcbiBcdHB0ZV90IHJlcztcbiBcbi1cdHJlcyA9IHB0ZXBfeGNoZ19sYXp5KG1tLCBhZGRyLCBwdGVwLCBfX3B0ZShfUEFHRV9JTlZBTElEKSk7XG4rXHRpZiAoIWxhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcihhZGRyLCBwdGVwLCBcdTAwMjZyZXMpKVxuK1x0XHRyZXMgPSBwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpO1xuIFx0cGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXIobW0sIGFkZHIsIHJlcyk7XG4gXHQvKiBBdCB0aGlzIHBvaW50IHRoZSByZWZlcmVuY2UgdGhyb3VnaCB0aGUgbWFwcGluZyBpcyBzdGlsbCBwcmVzZW50ICovXG4gXHRpZiAobW1faXNfcHJvdGVjdGVkKG1tKSBcdTAwMjZcdTAwMjYgcHRlX3ByZXNlbnQocmVzKSlcbkBAIC0xMjI5LDkgKzEzMjQsMjggQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gfVxuIFxuICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9NT0RJRllfUFJPVF9UUkFOU0FDVElPTlxuLXB0ZV90IHB0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHB0ZV90ICopO1xuLXZvaWQgcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsXG4tXHRcdFx0ICAgICBwdGVfdCAqLCBwdGVfdCwgcHRlX3QpO1xuK3B0ZV90IF9fX3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHB0ZV90ICopO1xuK3ZvaWQgX19fcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsXG4rXHRcdFx0XHRwdGVfdCAqLCBwdGVfdCwgcHRlX3QpO1xuK1xuK3N0YXRpYyBpbmxpbmVcbitwdGVfdCBwdGVwX21vZGlmeV9wcm90X3N0YXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuK1x0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcbit7XG4rXHRwdGVfdCByZXM7XG4rXG4rXHRpZiAoIWxhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQoYWRkciwgcHRlcCwgXHUwMDI2cmVzKSlcbitcdFx0cmVzID0gX19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydCh2bWEsIGFkZHIsIHB0ZXApO1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIGlubGluZVxuK3ZvaWQgcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHQgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpXG4re1xuK1x0aWYgKCFsYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdChhZGRyLCBwdGVwLCBvbGRfcHRlLCBwdGUpKVxuK1x0XHRfX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdCh2bWEsIGFkZHIsIHB0ZXAsIG9sZF9wdGUsIHB0ZSk7XG4rfVxuIFxuICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9DTEVBUl9GTFVTSFxuIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9jbGVhcl9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbkBAIC0xMjYxLDExICsxMzc1LDEzIEBAIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9nZXRfYW5kX2NsZWFyX2Z1bGwoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4ge1xuIFx0cHRlX3QgcmVzO1xuIFxuLVx0aWYgKGZ1bGwpIHtcbi1cdFx0cmVzID0gcHRlcF9nZXQocHRlcCk7XG4tXHRcdHNldF9wdGUocHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpO1xuLVx0fSBlbHNlIHtcbi1cdFx0cmVzID0gcHRlcF94Y2hnX2xhenkobW0sIGFkZHIsIHB0ZXAsIF9fcHRlKF9QQUdFX0lOVkFMSUQpKTtcbitcdGlmICghbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKGFkZHIsIHB0ZXAsIFx1MDAyNnJlcykpIHtcbitcdFx0aWYgKGZ1bGwpIHtcbitcdFx0XHRyZXMgPSBfX3B0ZXBfZ2V0KHB0ZXApO1xuK1x0XHRcdF9fc2V0X3B0ZShwdGVwLCBfX3B0ZShfUEFHRV9JTlZBTElEKSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmVzID0gcHRlcF94Y2hnX2xhenkobW0sIGFkZHIsIHB0ZXAsIF9fcHRlKF9QQUdFX0lOVkFMSUQpKTtcbitcdFx0fVxuIFx0fVxuIFx0cGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXIobW0sIGFkZHIsIHJlcyk7XG4gXHQvKiBBdCB0aGlzIHBvaW50IHRoZSByZWZlcmVuY2UgdGhyb3VnaCB0aGUgbWFwcGluZyBpcyBzdGlsbCBwcmVzZW50ICovXG5AQCAtMTI5MSwxMCArMTQwNywxNSBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVwX3NldF93cnByb3RlY3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxuIHtcbi1cdHB0ZV90IHB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xuK1x0cHRlX3QgcHRlO1xuIFxuLVx0aWYgKHB0ZV93cml0ZShwdGUpKVxuLVx0XHRwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgcHRlX3dycHJvdGVjdChwdGUpKTtcbitcdGlmICghbGF6eV9tbXVfcHRlcF9zZXRfd3Jwcm90ZWN0KGFkZHIsIHB0ZXApKSB7XG4rXHRcdHB0ZSA9IF9fcHRlcF9nZXQocHRlcCk7XG4rXHRcdGlmIChwdGVfd3JpdGUocHRlKSkge1xuK1x0XHRcdHB0ZSA9IHB0ZV93cnByb3RlY3QocHRlKTtcbitcdFx0XHRwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgcHRlKTtcbitcdFx0fVxuK1x0fVxuIH1cbiBcbiAvKlxuQEAgLTEzMjcsNyArMTQ0OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfZml4X3NwdXJpb3VzX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0ICogUFRFIGRvZXMgbm90IGhhdmUgX1BBR0VfUFJPVEVDVCBzZXQsIHRvIGF2b2lkIHVubmVjZXNzYXJ5IG92ZXJoZWFkLlxuIFx0ICogQSBsb2NhbCBSRFAgY2FuIGJlIHVzZWQgdG8gZG8gdGhlIGZsdXNoLlxuIFx0ICovXG4tXHRpZiAoY3B1X2hhc19yZHAoKSBcdTAwMjZcdTAwMjYgIShwdGVfdmFsKHB0ZXBfZ2V0KHB0ZXApKSBcdTAwMjYgX1BBR0VfUFJPVEVDVCkpXG4rXHRpZiAoY3B1X2hhc19yZHAoKSBcdTAwMjZcdTAwMjYgIShwdGVfdmFsKF9fcHRlcF9nZXQocHRlcCkpIFx1MDAyNiBfUEFHRV9QUk9URUNUKSlcbiBcdFx0X19wdGVwX3JkcChhZGRyZXNzLCBwdGVwLCAxKTtcbiB9XG4gI2RlZmluZSBmbHVzaF90bGJfZml4X3NwdXJpb3VzX2ZhdWx0IGZsdXNoX3RsYl9maXhfc3B1cmlvdXNfZmF1bHRcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmNcbmluZGV4IGI2MDI4NDMyOGZlM2QuLmY1YTNjOWUxYjZiODggMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmNcbisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuY1xuQEAgLTc3LDYgKzc3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vbWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3V2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vYXNtLW9mZnNldHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS9sYXp5X21tdS5oXHUwMDNlXG4gI2luY2x1ZGUgXCJlbnRyeS5oXCJcbiBcbiAvKlxuQEAgLTEwMTIsNSArMTAxMyw2IEBAIHZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcClcbiBcbiB2b2lkIF9faW5pdCBhcmNoX2NwdV9maW5hbGl6ZV9pbml0KHZvaWQpXG4ge1xuK1x0bGF6eV9tbXVfb25saW5lX2Jvb3RfY3B1KCk7XG4gXHRzY2xwX2luaXQoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmNcbmluZGV4IDBiYTdmODliODE2MTEuLjBhODI2YmJhZjFkZGMgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jXG4rKysgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jXG5AQCAtNTksNiArNTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS90b3BvbG9neS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Zkc28uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9tYWNjZXNzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vbGF6eV9tbXUuaFx1MDAzZVxuICNpbmNsdWRlIFwiZW50cnkuaFwiXG4gXG4gZW51bSB7XG5AQCAtODY2LDYgKzg2NywxMSBAQCBpbnQgX19jcHVfdXAodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICp0aWRsZSlcbiBcdHJjID0gcGNwdV9hbGxvY19sb3djb3JlKHBjcHUsIGNwdSk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbitcdHJjID0gbGF6eV9tbXVfb25saW5lX2NwdShHRlBfS0VSTkVMLCBjcHUpO1xuK1x0aWYgKHJjKSB7XG4rXHRcdHBjcHVfZnJlZV9sb3djb3JlKHBjcHUsIGNwdSk7XG4rXHRcdHJldHVybiByYztcbitcdH1cbiBcdC8qXG4gXHQgKiBNYWtlIHN1cmUgZ2xvYmFsIGNvbnRyb2wgcmVnaXN0ZXIgY29udGVudHMgZG8gbm90IGNoYW5nZVxuIFx0ICogdW50aWwgbmV3IENQVSBoYXMgaW5pdGlhbGl6ZWQgY29udHJvbCByZWdpc3RlcnMuXG5AQCAtOTIxLDYgKzkyNyw3IEBAIHZvaWQgX19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpXG4gXHRwY3B1ID0gcGVyX2NwdV9wdHIoXHUwMDI2cGNwdV9kZXZpY2VzLCBjcHUpO1xuIFx0d2hpbGUgKCFwY3B1X3N0b3BwZWQocGNwdSkpXG4gXHRcdGNwdV9yZWxheCgpO1xuK1x0bGF6eV9tbXVfb2ZmbGluZV9jcHUoY3B1KTtcbiBcdHBjcHVfZnJlZV9sb3djb3JlKHBjcHUsIGNwdSk7XG4gXHRjcHVtYXNrX2NsZWFyX2NwdShjcHUsIG1tX2NwdW1hc2soXHUwMDI2aW5pdF9tbSkpO1xuIFx0Y3B1bWFza19jbGVhcl9jcHUoY3B1LCBcdTAwMjZpbml0X21tLmNvbnRleHQuY3B1X2F0dGFjaF9tYXNrKTtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vTWFrZWZpbGUgYi9hcmNoL3MzOTAvbW0vTWFrZWZpbGVcbmluZGV4IDE5Mzg5OWMzOWNhN2YuLjk2Y2FjM2U5OWY1MTYgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvbW0vTWFrZWZpbGVcbisrKyBiL2FyY2gvczM5MC9tbS9NYWtlZmlsZVxuQEAgLTQsNiArNCw3IEBAXG4gI1xuIFxuIG9iai15XHRcdDo9IGluaXQubyBmYXVsdC5vIGV4dG1lbS5vIG1tYXAubyB2bWVtLm8gbWFjY2Vzcy5vXG4rb2JqLXlcdFx0Oj0gaW5pdC5vIGZhdWx0Lm8gZXh0bWVtLm8gbW1hcC5vIHZtZW0ubyBtYWNjZXNzLm8gbGF6eV9tbXUub1xuIG9iai15XHRcdCs9IHBhZ2Utc3RhdGVzLm8gcGFnZWF0dHIubyBwZ3RhYmxlLm8gcGdhbGxvYy5vIGV4dGFibGUub1xuIFxuIG9iai0kKENPTkZJR19DTU0pXHRcdCs9IGNtbS5vXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2xhenlfbW11LmMgYi9hcmNoL3MzOTAvbW0vbGF6eV9tbXUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdlM2E0MTE1ZWEwNDhcbi0tLSAvZGV2L251bGxcbisrKyBiL2FyY2gvczM5MC9tbS9sYXp5X21tdS5jXG5AQCAtMCwwICsxLDQxOCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGd0YWJsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2FzYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS9mYWNpbGl0eS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL2xhenlfbW11LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NrdW5pdC92aXNpYmlsaXR5LmhcdTAwM2VcbitcbisjZGVmaW5lIFBURV9QT0lTT05cdF9QQUdFX0xBUkdFXG4rXG4rc3RydWN0IGlwdGVfcmFuZ2Uge1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4rXHR1bnNpZ25lZCBsb25nIGJhc2VfYWRkcjtcbitcdHVuc2lnbmVkIGxvbmcgYmFzZV9lbmQ7XG4rXHRwdGVfdCAqYmFzZV9wdGU7XG4rXHRwdGVfdCAqc3RhcnRfcHRlO1xuK1x0cHRlX3QgKmVuZF9wdGU7XG4rXHRwdGVfdCBjYWNoZVtQVFJTX1BFUl9QVEVdO1xuK307XG4rXG4rc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBpcHRlX3JhbmdlICosIGlwdGVfcmFuZ2UpO1xuK1xuK3N0YXRpYyBpbnQgY291bnRfY29udGlndW91cyhwdGVfdCAqc3RhcnQsIHB0ZV90ICplbmQsIGJvb2wgKnZhbGlkKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgcGFnZV9pbnZhbGlkX2JpdDtcbitcdHB0ZV90ICpwdGVwLCBwdGU7XG4rXG4rXHRwdGUgPSBfX3B0ZXBfZ2V0KHN0YXJ0KTtcbitcdHBhZ2VfaW52YWxpZF9iaXQgPSBwdGVfdmFsKHB0ZSkgXHUwMDI2IF9QQUdFX0lOVkFMSUQ7XG4rXG4rXHRmb3IgKHB0ZXAgPSBzdGFydCArIDE7IHB0ZXAgXHUwMDNjIGVuZDsgcHRlcCsrKSB7XG4rXHRcdHB0ZSA9IF9fcHRlcF9nZXQocHRlcCk7XG4rXHRcdGlmICgocHRlX3ZhbChwdGUpIFx1MDAyNiBfUEFHRV9JTlZBTElEKSAhPSBwYWdlX2ludmFsaWRfYml0KVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0KnZhbGlkID0gIShwYWdlX2ludmFsaWRfYml0KTtcbitcdHJldHVybiBwdGVwIC0gc3RhcnQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIF9faW52YWxpZGF0ZV9wdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHRcdCAgIGludCBucl9wdGVzLCBwdGVfdCAqcHRlcClcbit7XG4rXHRhdG9taWNfaW5jKFx1MDAyNm1tLVx1MDAzZWNvbnRleHQuZmx1c2hfY291bnQpO1xuK1x0aWYgKGNwdV9oYXNfdGxiX2xjKCkgXHUwMDI2XHUwMDI2IGNwdW1hc2tfZXF1YWwobW1fY3B1bWFzayhtbSksIGNwdW1hc2tfb2Yoc21wX3Byb2Nlc3Nvcl9pZCgpKSkpXG4rXHRcdF9fcHRlcF9pcHRlX3JhbmdlKGFkZHIsIG5yX3B0ZXMgLSAxLCBwdGVwLCBJUFRFX0xPQ0FMKTtcbitcdGVsc2VcbitcdFx0X19wdGVwX2lwdGVfcmFuZ2UoYWRkciwgbnJfcHRlcyAtIDEsIHB0ZXAsIElQVEVfR0xPQkFMKTtcbitcdGF0b21pY19kZWMoXHUwMDI2bW0tXHUwMDNlY29udGV4dC5mbHVzaF9jb3VudCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaW52YWxpZGF0ZV9wdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHRcdHB0ZV90ICpzdGFydCwgcHRlX3QgKmVuZClcbit7XG4rXHRpbnQgbnJfcHRlcztcbitcdGJvb2wgdmFsaWQ7XG4rXG4rXHRucl9wdGVzID0gY291bnRfY29udGlndW91cyhzdGFydCwgZW5kLCBcdTAwMjZ2YWxpZCk7XG4rXHRpZiAodmFsaWQpXG4rXHRcdF9faW52YWxpZGF0ZV9wdGVfcmFuZ2UobW0sIGFkZHIsIG5yX3B0ZXMsIHN0YXJ0KTtcbitcbitcdHJldHVybiBucl9wdGVzO1xuK31cbitcbitzdGF0aWMgdm9pZCBzZXRfcHRlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdFx0ICBwdGVfdCAqc3RhcnQsIHB0ZV90ICplbmQsIHB0ZV90ICpjYWNoZSlcbit7XG4rXHRpbnQgbnJfcHRlcywgbnJfdG90YWwgPSBlbmQgLSBzdGFydDtcbitcdHB0ZV90ICpwdGVwID0gc3RhcnQ7XG4rXHRpbnQgaTtcbitcbitcdGthc2FuX3VucG9pc29uX3B0ZShzdGFydCwgbnJfdG90YWwpO1xuK1x0d2hpbGUgKHB0ZXAgXHUwMDNjIGVuZCkge1xuK1x0XHRucl9wdGVzID0gaW52YWxpZGF0ZV9wdGVfcmFuZ2UobW0sIGFkZHIsIHB0ZXAsIGVuZCk7XG4rXG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3B0ZXM7IGkrKywgcHRlcCsrLCBjYWNoZSsrKSB7XG4rXHRcdFx0X19zZXRfcHRlKHB0ZXAsICpjYWNoZSk7XG4rXHRcdFx0KmNhY2hlID0gX19wdGUoUFRFX1BPSVNPTik7XG4rXHRcdH1cbitcbitcdFx0YWRkciArPSBucl9wdGVzICogUEFHRV9TSVpFO1xuK1x0fVxuK1x0a2FzYW5fcG9pc29uX3B0ZShzdGFydCwgbnJfdG90YWwpO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbnRlcl9pcHRlX25vcmFuZ2Uodm9pZClcbit7XG4rXHRzdHJ1Y3QgaXB0ZV9yYW5nZSBfX21heWJlX3VudXNlZCAqcmFuZ2U7XG4rXG4rXHRpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4rXG4rXHRyYW5nZSA9IGdldF9jcHVfdmFyKGlwdGVfcmFuZ2UpO1xuK1x0Z2V0X2xvd2NvcmUoKS1cdTAwM2VsYXp5X21tdV9jb3VudCsrO1xuK1xuK1x0bG9jYWxfYmhfZW5hYmxlKCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVudGVyX2lwdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBwdGVfdCAqcHRlKVxuK3tcbitcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcbitcdHVuc2lnbmVkIGludCBucl9wdGVzO1xuK1xuK1x0aWYgKCF0ZXN0X2ZhY2lsaXR5KDEzKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuK1xuK1x0cmFuZ2UgPSBnZXRfY3B1X3ZhcihpcHRlX3JhbmdlKTtcbitcdGdldF9sb3djb3JlKCktXHUwMDNlbGF6eV9tbXVfY291bnQrKztcbitcbitcdGlmIChtbV9pc19wcm90ZWN0ZWQobW0pKSB7XG4rXHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRyYW5nZS1cdTAwM2VtbSA9IG1tO1xuK1x0cmFuZ2UtXHUwMDNlYmFzZV9hZGRyID0gYWRkcjtcbitcdHJhbmdlLVx1MDAzZWJhc2VfZW5kID0gZW5kO1xuK1x0cmFuZ2UtXHUwMDNlYmFzZV9wdGUgPSBwdGU7XG4rXG4rXHRucl9wdGVzID0gKHJhbmdlLVx1MDAzZWJhc2VfZW5kIC0gcmFuZ2UtXHUwMDNlYmFzZV9hZGRyKSAvIFBBR0VfU0laRTtcbitcdGthc2FuX3BvaXNvbl9wdGUocmFuZ2UtXHUwMDNlYmFzZV9wdGUsIG5yX3B0ZXMpO1xuK1xuK1x0bG9jYWxfYmhfZW5hYmxlKCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGxlYXZlX2lwdGVfcmFuZ2Uodm9pZClcbit7XG4rXHRwdGVfdCAqcHRlcCwgKnN0YXJ0LCAqc3RhcnRfY2FjaGUsICpjYWNoZTtcbitcdHVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkciwgYWRkcjtcbitcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcbitcdHVuc2lnbmVkIGludCBucl9wdGVzO1xuK1x0aW50IHN0YXJ0X2lkeDtcbitcbitcdGlmICghdGVzdF9mYWNpbGl0eSgxMykpXG4rXHRcdHJldHVybjtcbitcbitcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X3ByZWVtcHRpb25fZGlzYWJsZWQoKTtcbitcdHJhbmdlID0gdGhpc19jcHVfcmVhZChpcHRlX3JhbmdlKTtcbitcdGlmICghcmFuZ2UtXHUwMDNlbW0pXG4rXHRcdGdvdG8gbm9yYW5nZTtcbitcdGlmICghcmFuZ2UtXHUwMDNlc3RhcnRfcHRlKVxuK1x0XHRnb3RvIGRvbmU7XG4rXG4rXHRzdGFydCA9IHJhbmdlLVx1MDAzZXN0YXJ0X3B0ZTtcbitcdHN0YXJ0X2lkeCA9IHJhbmdlLVx1MDAzZXN0YXJ0X3B0ZSAtIHJhbmdlLVx1MDAzZWJhc2VfcHRlO1xuK1x0c3RhcnRfYWRkciA9IHJhbmdlLVx1MDAzZWJhc2VfYWRkciArIHN0YXJ0X2lkeCAqIFBBR0VfU0laRTtcbitcdGFkZHIgPSBzdGFydF9hZGRyO1xuK1x0c3RhcnRfY2FjaGUgPSBcdTAwMjZyYW5nZS1cdTAwM2VjYWNoZVtzdGFydF9pZHhdO1xuK1x0Y2FjaGUgPSBzdGFydF9jYWNoZTtcbitcdGZvciAocHRlcCA9IHN0YXJ0OyBwdGVwIFx1MDAzYyByYW5nZS1cdTAwM2VlbmRfcHRlOyBwdGVwKyssIGNhY2hlKyssIGFkZHIgKz0gUEFHRV9TSVpFKSB7XG4rXHRcdGlmIChwdGVfdmFsKCpjYWNoZSkgPT0gUFRFX1BPSVNPTikge1xuK1x0XHRcdGlmIChzdGFydCkge1xuK1x0XHRcdFx0c2V0X3B0ZV9yYW5nZShyYW5nZS1cdTAwM2VtbSwgc3RhcnRfYWRkciwgc3RhcnQsIHB0ZXAsIHN0YXJ0X2NhY2hlKTtcbitcdFx0XHRcdHN0YXJ0ID0gTlVMTDtcbitcdFx0XHR9XG4rXHRcdH0gZWxzZSBpZiAoIXN0YXJ0KSB7XG4rXHRcdFx0c3RhcnQgPSBwdGVwO1xuK1x0XHRcdHN0YXJ0X2FkZHIgPSBhZGRyO1xuK1x0XHRcdHN0YXJ0X2NhY2hlID0gY2FjaGU7XG4rXHRcdH1cbitcdH1cbitcdHNldF9wdGVfcmFuZ2UocmFuZ2UtXHUwMDNlbW0sIHN0YXJ0X2FkZHIsIHN0YXJ0LCBwdGVwLCBzdGFydF9jYWNoZSk7XG4rXG4rXHRyYW5nZS1cdTAwM2VzdGFydF9wdGUgPSBOVUxMO1xuK1x0cmFuZ2UtXHUwMDNlZW5kX3B0ZSA9IE5VTEw7XG4rXG4rZG9uZTpcbitcdG5yX3B0ZXMgPSAocmFuZ2UtXHUwMDNlYmFzZV9lbmQgLSByYW5nZS1cdTAwM2ViYXNlX2FkZHIpIC8gUEFHRV9TSVpFO1xuK1x0a2FzYW5fdW5wb2lzb25fcHRlKHJhbmdlLVx1MDAzZWJhc2VfcHRlLCBucl9wdGVzKTtcbitcbitcdHJhbmdlLVx1MDAzZW1tID0gTlVMTDtcbitcdHJhbmdlLVx1MDAzZWJhc2VfYWRkciA9IDA7XG4rXHRyYW5nZS1cdTAwM2ViYXNlX2VuZCA9IDA7XG4rXHRyYW5nZS1cdTAwM2ViYXNlX3B0ZSA9IE5VTEw7XG4rXG4rbm9yYW5nZTpcbitcdGdldF9sb3djb3JlKCktXHUwMDNlbGF6eV9tbXVfY291bnQtLTtcbitcdHB1dF9jcHVfdmFyKGlwdGVfcmFuZ2UpO1xuK1xuK1x0bG9jYWxfYmhfZW5hYmxlKCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGZsdXNoX2xhenlfbW11X21vZGUodm9pZClcbit7XG4rXHR1bnNpZ25lZCBsb25nIGFkZHIsIGVuZDtcbitcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuK1x0cHRlX3QgKnB0ZTtcbitcbitcdGlmICghdGVzdF9mYWNpbGl0eSgxMykpXG4rXHRcdHJldHVybjtcbitcbitcdHJhbmdlID0gZ2V0X2NwdV92YXIoaXB0ZV9yYW5nZSk7XG4rXHRpZiAocmFuZ2UtXHUwMDNlbW0pIHtcbitcdFx0bW0gPSByYW5nZS1cdTAwM2VtbTtcbitcdFx0YWRkciA9IHJhbmdlLVx1MDAzZWJhc2VfYWRkcjtcbitcdFx0ZW5kID0gcmFuZ2UtXHUwMDNlYmFzZV9lbmQ7XG4rXHRcdHB0ZSA9IHJhbmdlLVx1MDAzZWJhc2VfcHRlO1xuK1xuK1x0XHRsZWF2ZV9pcHRlX3JhbmdlKCk7XG4rXHRcdGVudGVyX2lwdGVfcmFuZ2UobW0sIGFkZHIsIGVuZCwgcHRlKTtcbitcdH1cbitcdHB1dF9jcHVfdmFyKGlwdGVfcmFuZ2UpO1xuK31cbitcbit2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSh2b2lkKVxuK3tcbitcdGVudGVyX2lwdGVfbm9yYW5nZSgpO1xuK31cbitFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSk7XG4rXG4rdm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuK1x0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuK1x0XHRcdFx0XHRwdGVfdCAqcHRlKVxuK3tcbitcdGVudGVyX2lwdGVfcmFuZ2UobW0sIGFkZHIsIGVuZCwgcHRlKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9JRl9LVU5JVChhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKTtcbitcbit2b2lkIGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSh2b2lkKVxuK3tcbitcdGxlYXZlX2lwdGVfcmFuZ2UoKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9JRl9LVU5JVChhcmNoX2xlYXZlX2xhenlfbW11X21vZGUpO1xuK1xuK3ZvaWQgYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlKHZvaWQpXG4re1xuK1x0Zmx1c2hfbGF6eV9tbXVfbW9kZSgpO1xuK31cbitFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGFyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZSk7XG4rXG4rc3RhdGljIHZvaWQgX19pcHRlX3JhbmdlX3NldF9wdGUoc3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlLCBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxuK3tcbitcdHVuc2lnbmVkIGludCBpZHggPSBwdGVwIC0gcmFuZ2UtXHUwMDNlYmFzZV9wdGU7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9wcmVlbXB0aW9uX2Rpc2FibGVkKCk7XG4rXHRyYW5nZS1cdTAwM2VjYWNoZVtpZHhdID0gcHRlO1xuK1xuK1x0aWYgKCFyYW5nZS1cdTAwM2VzdGFydF9wdGUpIHtcbitcdFx0cmFuZ2UtXHUwMDNlc3RhcnRfcHRlID0gcHRlcDtcbitcdFx0cmFuZ2UtXHUwMDNlZW5kX3B0ZSA9IHB0ZXAgKyAxO1xuK1x0fSBlbHNlIGlmIChwdGVwIFx1MDAzYyByYW5nZS1cdTAwM2VzdGFydF9wdGUpIHtcbitcdFx0cmFuZ2UtXHUwMDNlc3RhcnRfcHRlID0gcHRlcDtcbitcdH0gZWxzZSBpZiAocHRlcCArIDEgXHUwMDNlIHJhbmdlLVx1MDAzZWVuZF9wdGUpIHtcbitcdFx0cmFuZ2UtXHUwMDNlZW5kX3B0ZSA9IHB0ZXAgKyAxO1xuK1x0fVxuK31cbitcbitzdGF0aWMgcHRlX3QgX19pcHRlX3JhbmdlX3B0ZXBfZ2V0KHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZSwgcHRlX3QgKnB0ZXApXG4re1xuK1x0dW5zaWduZWQgaW50IGlkeCA9IHB0ZXAgLSByYW5nZS1cdTAwM2ViYXNlX3B0ZTtcbitcdHB0ZV90IHB0ZTtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X3ByZWVtcHRpb25fZGlzYWJsZWQoKTtcbitcdGlmIChwdGVfdmFsKHJhbmdlLVx1MDAzZWNhY2hlW2lkeF0pID09IFBURV9QT0lTT04pIHtcbitcdFx0a2FzYW5fdW5wb2lzb25fcHRlKHB0ZXAsIDEpO1xuK1x0XHRwdGUgPSBfX3B0ZXBfZ2V0KHB0ZXApO1xuK1x0XHRrYXNhbl9wb2lzb25fcHRlKHB0ZXAsIDEpO1xuK1xuK1x0XHRyZXR1cm4gcHRlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJhbmdlLVx1MDAzZWNhY2hlW2lkeF07XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgaXB0ZV9yYW5nZSAqdGhpc19pcHRlX3JhbmdlKHB0ZV90ICpwdGVwKVxuK3tcbitcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcbitcdHVuc2lnbmVkIGludCBucl9wdGVzO1xuK1xuK1x0cmFuZ2UgPSB0aGlzX2NwdV9yZWFkKGlwdGVfcmFuZ2UpO1xuK1x0aWYgKHB0ZXAgXHUwMDNjIHJhbmdlLVx1MDAzZWJhc2VfcHRlKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcdG5yX3B0ZXMgPSAocmFuZ2UtXHUwMDNlYmFzZV9lbmQgLSByYW5nZS1cdTAwM2ViYXNlX2FkZHIpIC8gUEFHRV9TSVpFO1xuK1x0aWYgKHB0ZXAgXHUwMDNlPSByYW5nZS1cdTAwM2ViYXNlX3B0ZSArIG5yX3B0ZXMpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0cmV0dXJuIHJhbmdlO1xuK31cbitcbitib29sIF9fbGF6eV9tbXVfc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxuK3tcbitcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcbitcbitcdHJhbmdlID0gdGhpc19pcHRlX3JhbmdlKHB0ZXApO1xuK1x0aWYgKCFyYW5nZSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0X19pcHRlX3JhbmdlX3NldF9wdGUocmFuZ2UsIHB0ZXAsIHB0ZSk7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rYm9vbCBfX2xhenlfbW11X3B0ZXBfZ2V0KHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKVxuK3tcbitcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcbitcbitcdHJhbmdlID0gdGhpc19pcHRlX3JhbmdlKHB0ZXApO1xuK1x0aWYgKCFyYW5nZSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0KnJlcyA9IF9faXB0ZV9yYW5nZV9wdGVwX2dldChyYW5nZSwgcHRlcCk7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rYm9vbCBfX2xhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgaW50ICpyZXMpXG4re1xuK1x0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xuK1x0cHRlX3QgcHRlLCBvbGQ7XG4rXG4rXHRyYW5nZSA9IHRoaXNfaXB0ZV9yYW5nZShwdGVwKTtcbitcdGlmICghcmFuZ2UpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG9sZCA9IF9faXB0ZV9yYW5nZV9wdGVwX2dldChyYW5nZSwgcHRlcCk7XG4rXHRwdGUgPSBwdGVfbWtvbGQob2xkKTtcbitcdF9faXB0ZV9yYW5nZV9zZXRfcHRlKHJhbmdlLCBwdGVwLCBwdGUpO1xuK1x0KnJlcyA9IHB0ZV95b3VuZyhvbGQpO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK2Jvb2wgX19sYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcylcbit7XG4rXHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XG4rXHRwdGVfdCBwdGUsIG9sZDtcbitcbitcdHJhbmdlID0gdGhpc19pcHRlX3JhbmdlKHB0ZXApO1xuK1x0aWYgKCFyYW5nZSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0b2xkID0gX19pcHRlX3JhbmdlX3B0ZXBfZ2V0KHJhbmdlLCBwdGVwKTtcbitcdHB0ZSA9IF9fcHRlKF9QQUdFX0lOVkFMSUQpO1xuK1x0X19pcHRlX3JhbmdlX3NldF9wdGUocmFuZ2UsIHB0ZXAsIHB0ZSk7XG4rXHQqcmVzID0gb2xkO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK2Jvb2wgX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpXG4re1xuK1x0cmV0dXJuIF9fbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKGFkZHIsIHB0ZXAsIHJlcyk7XG4rfVxuK1xuK2Jvb2wgX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxuK1x0XHRcdFx0XHRwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpXG4re1xuK1x0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xuK1xuK1x0cmFuZ2UgPSB0aGlzX2lwdGVfcmFuZ2UocHRlcCk7XG4rXHRpZiAoIXJhbmdlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitib29sIF9fbGF6eV9tbXVfcHRlcF9zZXRfd3Jwcm90ZWN0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXG4re1xuK1x0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xuK1x0cHRlX3QgcHRlO1xuK1xuK1x0cmFuZ2UgPSB0aGlzX2lwdGVfcmFuZ2UocHRlcCk7XG4rXHRpZiAoIXJhbmdlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRwdGUgPSBfX2lwdGVfcmFuZ2VfcHRlcF9nZXQocmFuZ2UsIHB0ZXApO1xuK1x0aWYgKHB0ZV93cml0ZShwdGUpKSB7XG4rXHRcdHB0ZSA9IHB0ZV93cnByb3RlY3QocHRlKTtcbitcdFx0X19pcHRlX3JhbmdlX3NldF9wdGUocmFuZ2UsIHB0ZXAsIHB0ZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4raW50IGxhenlfbW11X29ubGluZV9jcHUoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgY3B1KVxuK3tcbitcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcbitcdGludCBpO1xuK1xuK1x0aWYgKCF0ZXN0X2ZhY2lsaXR5KDEzKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyYW5nZSA9IGt6YWxsb2Nfb2JqKCpyYW5nZSwgZ2ZwKTtcbitcdGlmICghcmFuZ2UpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShyYW5nZS1cdTAwM2VjYWNoZSk7IGkrKylcbitcdFx0cmFuZ2UtXHUwMDNlY2FjaGVbaV0gPSBfX3B0ZShQVEVfUE9JU09OKTtcbitcdHBlcl9jcHUoaXB0ZV9yYW5nZSwgY3B1KSA9IHJhbmdlO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3ZvaWQgbGF6eV9tbXVfb2ZmbGluZV9jcHUodW5zaWduZWQgaW50IGNwdSlcbit7XG4rXHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XG4rXG4rXHRpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRyYW5nZSA9IHBlcl9jcHUoaXB0ZV9yYW5nZSwgY3B1KTtcbitcdHBlcl9jcHUoaXB0ZV9yYW5nZSwgY3B1KSA9IE5VTEw7XG4rXHRrZnJlZShyYW5nZSk7XG4rfVxuK1xuK3ZvaWQgX19pbml0IGxhenlfbW11X29ubGluZV9ib290X2NwdSh2b2lkKVxuK3tcbitcdGxhenlfbW11X29ubGluZV9jcHUoR0ZQX0FUT01JQywgMCk7XG4rfVxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jXG5pbmRleCA0YWNkOGIxNDBjNGJkLi5kZjM2NTIzYmNiYmJiIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL21tL3BndGFibGUuY1xuKysrIGIvYXJjaC9zMzkwL21tL3BndGFibGUuY1xuQEAgLTE2NiwxNCArMTY2LDE0IEBAIHB0ZV90IHB0ZXBfeGNoZ19sYXp5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gfVxuIEVYUE9SVF9TWU1CT0wocHRlcF94Y2hnX2xhenkpO1xuIFxuLXB0ZV90IHB0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHQgICAgIHB0ZV90ICpwdGVwKVxuK3B0ZV90IF9fX3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHRcdHB0ZV90ICpwdGVwKVxuIHtcbiBcdHJldHVybiBwdGVwX2ZsdXNoX2xhenkodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGVwLCAxKTtcbiB9XG4gXG4tdm9pZCBwdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdCAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IG9sZF9wdGUsIHB0ZV90IHB0ZSlcbit2b2lkIF9fX3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdFx0XHRwdGVfdCAqcHRlcCwgcHRlX3Qgb2xkX3B0ZSwgcHRlX3QgcHRlKVxuIHtcbiBcdHNldF9wdGUocHRlcCwgcHRlKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jXG5pbmRleCAyMjlkMWZjM2Q3ZjFjLi45MTY3ODVjM2IyZTBiIDEwMDY0NFxuLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jXG4rKysgYi9mcy9wcm9jL3Rhc2tfbW11LmNcbkBAIC0yODUyLDcgKzI4NTIsNyBAQCBzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuK1x0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKHZtYS1cdTAwM2V2bV9tbSwgc3RhcnQsIGVuZCwgc3RhcnRfcHRlKTtcbiBcbiBcdGlmICgocC1cdTAwM2VhcmcuZmxhZ3MgXHUwMDI2IFBNX1NDQU5fV1BfTUFUQ0hJTkcpIFx1MDAyNlx1MDAyNiAhcC1cdTAwM2V2ZWNfb3V0KSB7XG4gXHRcdC8qIEZhc3QgcGF0aCBmb3IgcGVyZm9ybWluZyBleGNsdXNpdmUgV1AgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2thc2FuLmggYi9pbmNsdWRlL2xpbnV4L2thc2FuLmhcbmluZGV4IGJmMjMzYmRlNjhjN2UuLjFhYTRkOWRkMjQ4NWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2thc2FuLmhcbisrKyBiL2luY2x1ZGUvbGludXgva2FzYW4uaFxuQEAgLTYsNiArNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2FzYW4tZW5hYmxlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2FzYW4tdGFncy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wZ3RhYmxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdGF0aWNfa2V5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG5AQCAtMzUsOCArMzYsNiBAQCB0eXBlZGVmIHVuc2lnbmVkIGludCBfX2JpdHdpc2Uga2FzYW5fdm1hbGxvY19mbGFnc190O1xuIFxuICNpZiBkZWZpbmVkKENPTkZJR19LQVNBTl9HRU5FUklDKSB8fCBkZWZpbmVkKENPTkZJR19LQVNBTl9TV19UQUdTKVxuIFxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BndGFibGUuaFx1MDAzZVxuLVxuIC8qIFNvZnR3YXJlIEtBU0FOIGltcGxlbWVudGF0aW9ucyB1c2Ugc2hhZG93IG1lbW9yeS4gKi9cbiBcbiAjaWZkZWYgQ09ORklHX0tBU0FOX1NXX1RBR1NcbkBAIC0xMzQsNiArMTMzLDIwIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcdFx0X19rYXNhbl9wb2lzb25fc2xhYihzbGFiKTtcbiB9XG4gXG4rdm9pZCBfX2thc2FuX3BvaXNvbl9wdGUocHRlX3QgKnB0ZSwgaW50IG5yKTtcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQga2FzYW5fcG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpXG4re1xuK1x0aWYgKGthc2FuX2VuYWJsZWQoKSlcbitcdFx0X19rYXNhbl9wb2lzb25fcHRlKHB0ZSwgbnIpO1xuK31cbitcbit2b2lkIF9fa2FzYW5fdW5wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucik7XG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGthc2FuX3VucG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpXG4re1xuK1x0aWYgKGthc2FuX2VuYWJsZWQoKSlcbitcdFx0X19rYXNhbl91bnBvaXNvbl9wdGUocHRlLCBucik7XG4rfVxuK1xuIHZvaWQgX19rYXNhbl91bnBvaXNvbl9uZXdfb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSwgdm9pZCAqb2JqZWN0KTtcbiAvKipcbiAgKiBrYXNhbl91bnBvaXNvbl9uZXdfb2JqZWN0IC0gVGVtcG9yYXJpbHkgdW5wb2lzb24gYSBuZXcgc2xhYiBvYmplY3QuXG5AQCAtNDE0LDYgKzQyNyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrYXNhbl91bnBvaXNvbl9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBzdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fcG9pc29uX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIpIHt9XG4rc3RhdGljIGlubGluZSB2b2lkIGthc2FuX3BvaXNvbl9wdGUocHRlX3QgKnB0ZSwgaW50IG5yKSB7fVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl91bnBvaXNvbl9wdGUocHRlX3QgKnB0ZSwgaW50IG5yKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl91bnBvaXNvbl9uZXdfb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSxcbiBcdFx0XHRcdFx0dm9pZCAqb2JqZWN0KSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fbmV3X29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmggYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaFxuaW5kZXggMjk4MWUzODZkYTdiMy4uY2M4NWRhZjMwNzM5ZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaFxuQEAgLTI3MSw2ICsyNzEsNTAgQEAgc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfZW5hYmxlKHZvaWQpXG4gXHRcdGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSgpO1xuIH1cbiBcbisjaWZuZGVmIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXNcbitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgcHRlX3QgKnB0ZXApXG4re1xuK1x0YXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7XG4rfVxuKyNlbmRpZlxuK1xuKy8qKlxuKyAqIGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcygpIC0gRW5hYmxlIHRoZSBsYXp5IE1NVSBtb2RlIHdpdGggYSBzcGVlZHVwIGhpbnQuXG4rICogQG1tOiBBZGRyZXNzIHNwYWNlIHRoZSBwYWdlcyBhcmUgbWFwcGVkIGludG8uXG4rICogQGFkZHI6IFN0YXJ0IGFkZHJlc3Mgb2YgdGhlIHJhbmdlLlxuKyAqIEBlbmQ6IEVuZCBhZGRyZXNzIG9mIHRoZSByYW5nZS5cbisgKiBAcHRlcDogUGFnZSB0YWJsZSBwb2ludGVyIGZvciB0aGUgZmlyc3QgZW50cnkuXG4rICpcbisgKiBFbnRlcnMgYSBuZXcgbGF6eSBNTVUgbW9kZSBzZWN0aW9uOyBpZiB0aGUgbW9kZSB3YXMgbm90IGFscmVhZHkgZW5hYmxlZCxcbisgKiBlbmFibGVzIGl0IGFuZCBjYWxscyBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKCkuXG4rICpcbisgKiBQVEVzIHRoYXQgZmFsbCB3aXRoaW4gdGhlIHNwZWNpZmllZCByYW5nZSBtaWdodCBvYnNlcnZlIHVwZGF0ZSBzcGVlZHVwcy5cbisgKiBUaGUgUFRFcyBtdXN0IGJlbG9uZyB0byB0aGUgc3BlY2lmaWVkIGFkZHJlc3Mgc3BhY2UgYW5kIGJlIGluIHRoZSBzYW1lIFBNRC5cbisgKlxuKyAqIFRoZXJlIGFyZSBubyByZXF1aXJlbWVudHMgb24gdGhlIG9yZGVyIG9yIHJhbmdlIGNvbXBsZXRlbmVzcyBvZiBQVEVcbisgKiB1cGRhdGVzIGZvciB0aGUgc3BlY2lmaWVkIHJhbmdlLlxuKyAqXG4rICogTXVzdCBiZSBwYWlyZWQgd2l0aCBhIGNhbGwgdG8gbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCkuXG4rICpcbisgKiBIYXMgbm8gZWZmZWN0IGlmIGNhbGxlZDpcbisgKiAtIFdoaWxlIHBhdXNlZCAtIHNlZSBsYXp5X21tdV9tb2RlX3BhdXNlKClcbisgKiAtIEluIGludGVycnVwdCBjb250ZXh0XG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgcHRlX3QgKnB0ZXApXG4re1xuK1x0c3RydWN0IGxhenlfbW11X3N0YXRlICpzdGF0ZSA9IFx1MDAyNmN1cnJlbnQtXHUwMDNlbGF6eV9tbXVfc3RhdGU7XG4rXG4rXHRpZiAoaW5faW50ZXJydXB0KCkgfHwgc3RhdGUtXHUwMDNlcGF1c2VfY291bnQgXHUwMDNlIDApXG4rXHRcdHJldHVybjtcbitcbitcdFZNX1dBUk5fT05fT05DRShzdGF0ZS1cdTAwM2VlbmFibGVfY291bnQgPT0gVThfTUFYKTtcbitcbitcdGlmIChzdGF0ZS1cdTAwM2VlbmFibGVfY291bnQrKyA9PSAwKVxuK1x0XHRhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIHB0ZXApO1xuK31cbitcbiAvKipcbiAgKiBsYXp5X21tdV9tb2RlX2Rpc2FibGUoKSAtIERpc2FibGUgdGhlIGxhenkgTU1VIG1vZGUuXG4gICpcbkBAIC0zODcsNiArNDMxLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfcmVzdW1lKHZvaWQpXG4gfVxuICNlbHNlXG4gc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfZW5hYmxlKHZvaWQpIHt9XG4rc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgcHRlX3QgKnB0ZXApIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfZGlzYWJsZSh2b2lkKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBsYXp5X21tdV9tb2RlX3BhdXNlKHZvaWQpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfcmVzdW1lKHZvaWQpIHt9XG5kaWZmIC0tZ2l0IGEvbW0va2FzYW4vY29tbW9uLmMgYi9tbS9rYXNhbi9jb21tb24uY1xuaW5kZXggYjdkMDVjMmE2ZDkzZC4uOTRkMTA2MDk0OTg5MSAxMDA2NDRcbi0tLSBhL21tL2thc2FuL2NvbW1vbi5jXG4rKysgYi9tbS9rYXNhbi9jb21tb24uY1xuQEAgLTE2Myw2ICsxNjMsMjAgQEAgdm9pZCBfX2thc2FuX3BvaXNvbl9zbGFiKHN0cnVjdCBzbGFiICpzbGFiKVxuIFx0XHQgICAgIEtBU0FOX1NMQUJfUkVEWk9ORSwgZmFsc2UpO1xuIH1cbiBcbit2b2lkIF9fa2FzYW5fcG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpXG4re1xuK1x0aWYgKElTX0FMSUdORUQoc2l6ZW9mKCpwdGUpLCBLQVNBTl9HUkFOVUxFX1NJWkUpKVxuK1x0XHRrYXNhbl9wb2lzb24ocHRlLCBzaXplb2YoKnB0ZSkgKiBuciwgS0FTQU5fTEFaWV9NTVVfUFRFLCBmYWxzZSk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKF9fa2FzYW5fcG9pc29uX3B0ZSk7XG4rXG4rdm9pZCBfX2thc2FuX3VucG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpXG4re1xuK1x0aWYgKElTX0FMSUdORUQoc2l6ZW9mKCpwdGUpLCBLQVNBTl9HUkFOVUxFX1NJWkUpKVxuK1x0XHRrYXNhbl91bnBvaXNvbihwdGUsIHNpemVvZigqcHRlKSAqIG5yLCBmYWxzZSk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKF9fa2FzYW5fdW5wb2lzb25fcHRlKTtcbitcbiB2b2lkIF9fa2FzYW5fdW5wb2lzb25fbmV3X29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsIHZvaWQgKm9iamVjdClcbiB7XG4gXHRrYXNhbl91bnBvaXNvbihvYmplY3QsIGNhY2hlLVx1MDAzZW9iamVjdF9zaXplLCBmYWxzZSk7XG5kaWZmIC0tZ2l0IGEvbW0va2FzYW4va2FzYW4uaCBiL21tL2thc2FuL2thc2FuLmhcbmluZGV4IGZjOTE2OWE1NDc2NjIuLjFhMmQxOGNkYjIxZDkgMTAwNjQ0XG4tLS0gYS9tbS9rYXNhbi9rYXNhbi5oXG4rKysgYi9tbS9rYXNhbi9rYXNhbi5oXG5AQCAtMTQ0LDEyICsxNDQsMTQgQEAgc3RhdGljIGlubGluZSBib29sIGthc2FuX3JlcXVpcmVzX21ldGEodm9pZClcbiAjZGVmaW5lIEtBU0FOX1BBR0VfUkVEWk9ORVx0MHhGRSAgLyogcmVkem9uZSBmb3Iga21hbGxvY19sYXJnZSBhbGxvY2F0aW9uICovXG4gI2RlZmluZSBLQVNBTl9TTEFCX1JFRFpPTkVcdDB4RkMgIC8qIHJlZHpvbmUgZm9yIHNsYWIgb2JqZWN0ICovXG4gI2RlZmluZSBLQVNBTl9TTEFCX0ZSRUVcdFx0MHhGQiAgLyogZnJlZWQgc2xhYiBvYmplY3QgKi9cbisjZGVmaW5lIEtBU0FOX0xBWllfTU1VX1BURVx0MHhGRCAgLyogZGlyZWN0IHB0ZSBhY2Nlc3MgaW4gbGF6eSBtbXUgbW9kZSAqL1xuICNkZWZpbmUgS0FTQU5fVk1BTExPQ19JTlZBTElEXHQweEY4ICAvKiBpbmFjY2Vzc2libGUgc3BhY2UgaW4gdm1hcCBhcmVhICovXG4gI2Vsc2VcbiAjZGVmaW5lIEtBU0FOX1BBR0VfRlJFRVx0XHRLQVNBTl9UQUdfSU5WQUxJRFxuICNkZWZpbmUgS0FTQU5fUEFHRV9SRURaT05FXHRLQVNBTl9UQUdfSU5WQUxJRFxuICNkZWZpbmUgS0FTQU5fU0xBQl9SRURaT05FXHRLQVNBTl9UQUdfSU5WQUxJRFxuICNkZWZpbmUgS0FTQU5fU0xBQl9GUkVFXHRcdEtBU0FOX1RBR19JTlZBTElEXG4rI2RlZmluZSBLQVNBTl9MQVpZX01NVV9QVEVcdEtBU0FOX1RBR19JTlZBTElEXG4gI2RlZmluZSBLQVNBTl9WTUFMTE9DX0lOVkFMSURcdEtBU0FOX1RBR19JTlZBTElEIC8qIG9ubHkgdXNlZCBmb3IgU1dfVEFHUyAqL1xuICNlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL21tL2thc2FuL3JlcG9ydF9nZW5lcmljLmMgYi9tbS9rYXNhbi9yZXBvcnRfZ2VuZXJpYy5jXG5pbmRleCBmNWI4ZTM3YjM4MDVjLi40ODlkNGE4ZDY5MDJkIDEwMDY0NFxuLS0tIGEvbW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuY1xuKysrIGIvbW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuY1xuQEAgLTExMyw2ICsxMTMsOSBAQCBzdGF0aWMgY29uc3QgY2hhciAqZ2V0X3NoYWRvd19idWdfdHlwZShzdHJ1Y3Qga2FzYW5fcmVwb3J0X2luZm8gKmluZm8pXG4gXHRjYXNlIEtBU0FOX1NMQUJfRlJFRV9NRVRBOlxuIFx0XHRidWdfdHlwZSA9IFwic2xhYi11c2UtYWZ0ZXItZnJlZVwiO1xuIFx0XHRicmVhaztcbitcdGNhc2UgS0FTQU5fTEFaWV9NTVVfUFRFOlxuK1x0XHRidWdfdHlwZSA9IFwibGF6eS1tbXUtcHRlLWFjY2Vzc1wiO1xuK1x0XHRicmVhaztcbiBcdGNhc2UgS0FTQU5fQUxMT0NBX0xFRlQ6XG4gXHRjYXNlIEtBU0FOX0FMTE9DQV9SSUdIVDpcbiBcdFx0YnVnX3R5cGUgPSBcImFsbG9jYS1vdXQtb2YtYm91bmRzXCI7XG5kaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jXG5pbmRleCA3NzU1MmIwM2QzMThkLi40NDE5ZDE2YjM5Zjk2IDEwMDY0NFxuLS0tIGEvbW0vbWFkdmlzZS5jXG4rKysgYi9tbS9tYWR2aXNlLmNcbkBAIC00NTIsNyArNDUyLDcgQEAgc3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcbiBcdGlmICghc3RhcnRfcHRlKVxuIFx0XHRyZXR1cm4gMDtcbiBcdGZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pO1xuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbitcdGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgYWRkciwgZW5kLCBzdGFydF9wdGUpO1xuIFx0Zm9yICg7IGFkZHIgXHUwMDNjIGVuZDsgcHRlICs9IG5yLCBhZGRyICs9IG5yICogUEFHRV9TSVpFKSB7XG4gXHRcdG5yID0gMTtcbiBcdFx0cHRlbnQgPSBwdGVwX2dldChwdGUpO1xuQEAgLTUwNyw3ICs1MDcsNyBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuIFx0XHRcdFx0aWYgKCFzdGFydF9wdGUpXG4gXHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0Zmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyhtbSk7XG4tXHRcdFx0XHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuK1x0XHRcdFx0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIHN0YXJ0X3B0ZSk7XG4gXHRcdFx0XHRpZiAoIWVycilcbiBcdFx0XHRcdFx0bnIgPSAwO1xuIFx0XHRcdFx0Y29udGludWU7XG5AQCAtNjc0LDcgKzY3NCw3IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRpZiAoIXN0YXJ0X3B0ZSlcbiBcdFx0cmV0dXJuIDA7XG4gXHRmbHVzaF90bGJfYmF0Y2hlZF9wZW5kaW5nKG1tKTtcbi1cdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4rXHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgc3RhcnRfcHRlKTtcbiBcdGZvciAoOyBhZGRyICE9IGVuZDsgcHRlICs9IG5yLCBhZGRyICs9IFBBR0VfU0laRSAqIG5yKSB7XG4gXHRcdG5yID0gMTtcbiBcdFx0cHRlbnQgPSBwdGVwX2dldChwdGUpO1xuQEAgLTczNCw3ICs3MzQsNyBAQCBzdGF0aWMgaW50IG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdFx0aWYgKCFzdGFydF9wdGUpXG4gXHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0Zmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyhtbSk7XG4tXHRcdFx0XHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuK1x0XHRcdFx0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIHB0ZSk7XG4gXHRcdFx0XHRpZiAoIWVycilcbiBcdFx0XHRcdFx0bnIgPSAwO1xuIFx0XHRcdFx0Y29udGludWU7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggNmI4MjgwY2ZjMWRiZS4uMGNjMDdiMDQzMzg0YiAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTEyNzIsNyArMTI3Miw3IEBAIGNvcHlfcHRlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hLFxuIFx0c3Bpbl9sb2NrX25lc3RlZChzcmNfcHRsLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4gXHRvcmlnX3NyY19wdGUgPSBzcmNfcHRlO1xuIFx0b3JpZ19kc3RfcHRlID0gZHN0X3B0ZTtcbi1cdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4rXHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMoc3JjX21tLCBhZGRyLCBlbmQsIHNyY19wdGUpO1xuIFxuIFx0ZG8ge1xuIFx0XHRuciA9IDE7XG5AQCAtMTkyMiw3ICsxOTIyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgemFwX3B0ZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuIFx0XHRyZXR1cm4gYWRkcjtcbiBcbiBcdGZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pO1xuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbitcdGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgYWRkciwgZW5kLCBzdGFydF9wdGUpO1xuIFx0ZG8ge1xuIFx0XHRib29sIGFueV9za2lwcGVkID0gZmFsc2U7XG4gXG5AQCAtMjkxOSw3ICsyOTE5LDcgQEAgc3RhdGljIGludCByZW1hcF9wdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsXG4gXHRtYXBwZWRfcHRlID0gcHRlID0gcHRlX2FsbG9jX21hcF9sb2NrKG1tLCBwbWQsIGFkZHIsIFx1MDAyNnB0bCk7XG4gXHRpZiAoIXB0ZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuK1x0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIG1hcHBlZF9wdGUpO1xuIFx0ZG8ge1xuIFx0XHRCVUdfT04oIXB0ZV9ub25lKHB0ZXBfZ2V0KHB0ZSkpKTtcbiBcdFx0aWYgKCFwZm5fbW9kaWZ5X2FsbG93ZWQocGZuLCBwcm90KSkge1xuQEAgLTMzMzAsNyArMzMzMCw3IEBAIHN0YXRpYyBpbnQgYXBwbHlfdG9fcHRlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbitcdGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgYWRkciwgZW5kLCBtYXBwZWRfcHRlKTtcbiBcbiBcdGlmIChmbikge1xuIFx0XHRkbyB7XG5kaWZmIC0tZ2l0IGEvbW0vbXByb3RlY3QuYyBiL21tL21wcm90ZWN0LmNcbmluZGV4IDljYmY5MzJiMDI4Y2YuLjNmYzI2NDE4ZTgzN2QgMTAwNjQ0XG4tLS0gYS9tbS9tcHJvdGVjdC5jXG4rKysgYi9tbS9tcHJvdGVjdC5jXG5AQCAtMzM3LDcgKzMzNyw3IEBAIHN0YXRpYyBsb25nIGNoYW5nZV9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbiBcdFx0aXNfcHJpdmF0ZV9zaW5nbGVfdGhyZWFkZWQgPSB2bWFfaXNfc2luZ2xlX3RocmVhZGVkX3ByaXZhdGUodm1hKTtcbiBcbiBcdGZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcodm1hLVx1MDAzZXZtX21tKTtcbi1cdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4rXHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXModm1hLVx1MDAzZXZtX21tLCBhZGRyLCBlbmQsIHB0ZSk7XG4gXHRkbyB7XG4gXHRcdG5yX3B0ZXMgPSAxO1xuIFx0XHRvbGRwdGUgPSBwdGVwX2dldChwdGUpO1xuZGlmZiAtLWdpdCBhL21tL21yZW1hcC5jIGIvbW0vbXJlbWFwLmNcbmluZGV4IGU5YzhiMWQwNTgzMmIuLjBkZmUzZGUzOWNjYzcgMTAwNjQ0XG4tLS0gYS9tbS9tcmVtYXAuY1xuKysrIGIvbW0vbXJlbWFwLmNcbkBAIC0yNjAsNyArMjYwLDcgQEAgc3RhdGljIGludCBtb3ZlX3B0ZXMoc3RydWN0IHBhZ2V0YWJsZV9tb3ZlX2NvbnRyb2wgKnBtYyxcbiBcdGlmIChuZXdfcHRsICE9IG9sZF9wdGwpXG4gXHRcdHNwaW5fbG9ja19uZXN0ZWQobmV3X3B0bCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuIFx0Zmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyh2bWEtXHUwMDNldm1fbW0pO1xuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbitcdGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgb2xkX2FkZHIsIG9sZF9lbmQsIG9sZF9wdGVwKTtcbiBcbiBcdGZvciAoOyBvbGRfYWRkciBcdTAwM2Mgb2xkX2VuZDsgb2xkX3B0ZXAgKz0gbnJfcHRlcywgb2xkX2FkZHIgKz0gbnJfcHRlcyAqIFBBR0VfU0laRSxcbiBcdFx0bmV3X3B0ZXAgKz0gbnJfcHRlcywgbmV3X2FkZHIgKz0gbnJfcHRlcyAqIFBBR0VfU0laRSkge1xuZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuY1xuaW5kZXggZjRmYTIyN2E4ZDdmMC4uMWM2ZWY4ZmQwNzllMCAxMDA2NDRcbi0tLSBhL21tL3ZtYWxsb2MuY1xuKysrIGIvbW0vdm1hbGxvYy5jXG5AQCAtMTA5LDcgKzEwOSw3IEBAIHN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdGlmICghcHRlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4rXHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMoXHUwMDI2aW5pdF9tbSwgYWRkciwgZW5kLCBwdGUpO1xuIFxuIFx0ZG8ge1xuIFx0XHRpZiAodW5saWtlbHkoIXB0ZV9ub25lKHB0ZXBfZ2V0KHB0ZSkpKSkge1xuQEAgLTM5Myw3ICszOTMsNyBAQCBzdGF0aWMgdm9pZCB2dW5tYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHR1bnNpZ25lZCBsb25nIHNpemUgPSBQQUdFX1NJWkU7XG4gXG4gXHRwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHIpO1xuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbitcdGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhcdTAwMjZpbml0X21tLCBhZGRyLCBlbmQsIHB0ZSk7XG4gXG4gXHRkbyB7XG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbkBAIC01NjAsNyArNTYwLDcgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRpZiAoIXB0ZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuK1x0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKFx1MDAyNmluaXRfbW0sIGFkZHIsIGVuZCwgcHRlKTtcbiBcbiBcdGRvIHtcbiBcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwYWdlc1sqbnJdO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6Mzc6NDUuMzc0NzIwMTg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU4MjA5NjAwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBMYXp5IE1NVSBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBuZXcgcGF0Y2ggc2VyaWVzIGhlcmUgdGFyZ2V0aW5nIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgYW5kIGl0IHNlZW1zIHRvIGJlIGFib3V0IGltcGxlbWVudGluZyBhIFwibGF6eSBNTVVcIiBtb2RlLiBJbnRlcmVzdGluZyEgVGhlIGxpc3Qgb2YgbW9kaWZpZWQgZmlsZXMgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBhdHRlbnRpb246IGBsYXp5X21tdS5jYCwgb2YgY291cnNlLCBidXQgYWxzbyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZpbGVzIGxpa2UgYHBndGFibGUuaGAsIGBtYWR2aXNlLmNgLCBgbWVtb3J5LmNgLCBhbmQgZXZlbiBLQVNBTi1yZWxhdGVkIGNvZGUuIFRoaXMgc3VnZ2VzdHMgYSBwcmV0dHkgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IG1lbW9yeSBtYW5hZ2VtZW50IGlzIGhhbmRsZWQsIHBvdGVudGlhbGx5IGltcGFjdGluZyBhIHdpZGUgcmFuZ2Ugb2Ygb3BlcmF0aW9ucy5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBjZW50ZXIgYXJvdW5kIGBsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXNgIGNhbGxpbmcgYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXNgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIHRoZSBlbnRyeSBwb2ludCB0byBhY3RpdmF0ZSB0aGlzIG5ldyBtb2RlLiBBbmQgaXQgbG9va3MgbGlrZSB0aGUgczM5MCBpbXBsZW1lbnRhdGlvbiBpbiBgYXJjaC9zMzkwL21tL2xhenlfbW11LmNgIGlzIGxldmVyYWdpbmcgZmFjaWxpdHkgMTMsIHRoZSBJUFRFLXJhbmdlIGZhY2lsaXR5LCB0byBoYW5kbGUgUFRFIGludmFsaWRhdGlvbnMgaW4gYmF0Y2hlcy4gVGhhdCdzIGEgY2xldmVyIGFwcHJvYWNoLCBhc3N1bWluZyBpdCdzIGRvbmUgZWZmaWNpZW50bHkuXG5cbk5vdywgbXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBJcyB0aGlzIGdvaW5nIHRvIHdvcmsgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzPyBUaGUgZmFjdCB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBpbiBgY29yZSBtbS9gIGFuZCBgYXJjaC9zMzkwL21tL2AgdGVsbHMgbWUgaXQgY291bGQgYmUsIGJ1dCB5b3UgbmV2ZXIga25vdy4gVGhhbmtmdWxseSwgdGhlIHRleHQgZXhwbGljaXRseSBtZW50aW9ucyB0aGF0IHMzOTB4IFFFTVUvS1ZNIHN1cHBvcnRzIGZhY2lsaXR5IDEzIChJUFRFLXJhbmdlKSwgc28gdGhhdCdzIGEgY2hlY2sgaW4gdGhlIGFmZmlybWF0aXZlLiBUaGF0J3MgYSBodWdlIHJlbGllZi5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaW1wbGljYXRpb25zLiBJIHNlZSBhIGBzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERWAgaW4gYGFyY2gvczM5MC9LY29uZmlnYC4gVGhhdCdzIGEgY2xlYXIgaW5kaWNhdG9yIHRoYXQgdGhlcmUncyBwcm9iYWJseSBhIGNvcnJlc3BvbmRpbmcgY29uZmlndXJhdGlvbiBvcHRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHdoYXQgdGhpcyBtb2RlICplbmFibGVzKiBhbmQgKmRpc2FibGVzKi4gVGltZSB0byBncmVwIHRoZSBjb2RlIGZvciBgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERWAgb3Igc29tZXRoaW5nIHNpbWlsYXIgdG8gZmluZCB0aGUgYWN0dWFsIGNvbmZpZyBuYW1lLiBJIG5lZWQgdG8ga25vdyBleGFjdGx5IHdoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGlzIG5ldyBsYXp5IE1NVSBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQwNCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjM3OjUyLjk1NjgxOTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MTk4MDM5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBUkNIX0hBU19MQVpZX01NVV9NT0RFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTM2LVxcdHNlbGVjdCBBUkNIX0hBU19LRUVQSU5JVFJEXFxuYXJjaC9hcm02NC9LY29uZmlnOjM3OlxcdHNlbGVjdCBBUkNIX0hBU19MQVpZX01NVV9NT0RFXFxuYXJjaC9hcm02NC9LY29uZmlnLTM4LVxcdHNlbGVjdCBBUkNIX0hBU19NRU1CQVJSSUVSX1NZTkNfQ09SRVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGU9ODM9Y29uZmlnIFBQQ19CT09LM1NfNjRcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlLTk1LVxcdHNlbGVjdCBLQVNBTl9WTUFMTE9DIGlmIEtBU0FOXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGU6OTY6XFx0c2VsZWN0IEFSQ0hfSEFTX0xBWllfTU1VX01PREVcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZS05Ny1cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTc1PWNvbmZpZyBTMzkwXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy05OS1cXHRzZWxlY3QgQVJDSF9IQVNfS0NPVlxcbmFyY2gvczM5MC9LY29uZmlnOjEwMDpcXHRzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERVxcbmFyY2gvczM5MC9LY29uZmlnLTEwMS1cXHRzZWxlY3QgQVJDSF9IQVNfTUVNQkFSUklFUl9TWU5DX0NPUkVcXG4tLVxcbmFyY2gvc3BhcmMvS2NvbmZpZz03MD1jb25maWcgU1BBUkM2NFxcbi0tXFxuYXJjaC9zcGFyYy9LY29uZmlnLTExNC1cXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19TQ0hFRF9NQyAgaWYgU01QXFxuYXJjaC9zcGFyYy9LY29uZmlnOjExNTpcXHRzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERVxcbmFyY2gvc3BhcmMvS2NvbmZpZy0xMTYtXFx0c2VsZWN0IEhBVkVfR0VORVJJQ19WRFNPXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTgwNT1jb25maWcgUEFSQVZJUlRfWFhMXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTgwNy1cXHRkZXBlbmRzIG9uIFg4Nl82NFxcbmFyY2gveDg2L0tjb25maWc6ODA4OlxcdHNlbGVjdCBBUkNIX0hBU19MQVpZX01NVV9NT0RFXFxuYXJjaC94ODYvS2NvbmZpZy04MDktXFxuLS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5oLTEzLSN1bmRlZiBDT05GSUdfUEFSQVZJUlRfU1BJTkxPQ0tTXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuaDoxNDojdW5kZWYgQ09ORklHX0FSQ0hfSEFTX0xBWllfTU1VX01PREVcXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5oLTE1LSN1bmRlZiBDT05GSUdfS0FTQU5cXG4tLVxcbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9zbWUuYy0yNi0jdW5kZWYgQ09ORklHX1BBUkFWSVJUX1NQSU5MT0NLU1xcbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9zbWUuYzoyNzojdW5kZWYgQ09ORklHX0FSQ0hfSEFTX0xBWllfTU1VX01PREVcXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvc21lLmMtMjgtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaD0xOTA9c3RhdGljIGlubGluZSBpbnQgcG1kX2RpcnR5KHBtZF90IHBtZClcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTI0Ny0gKi9cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDoyNDg6I2lmZGVmIENPTkZJR19BUkNIX0hBU19MQVpZX01NVV9NT0RFXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjQ5LS8qKlxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oPTgyNj1zdHJ1Y3QgdGFza19zdHJ1Y3Qge1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE0MzgtXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjE0Mzk6I2lmZGVmIENPTkZJR19BUkNIX0hBU19MQVpZX01NVV9NT0RFXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE0NDAtXFx0c3RydWN0IGxhenlfbW11X3N0YXRlXFx0XFx0bGF6eV9tbXVfc3RhdGU7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9MTcyND1zdGF0aWMgaW5saW5lIGNoYXIgdGFza19zdGF0ZV90b19jaGFyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE3MjgtXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjE3Mjk6I2lmZGVmIENPTkZJR19BUkNIX0hBU19MQVpZX01NVV9NT0RFXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE3MzAtLyoqXFxuLS1cXG5tbS9LY29uZmlnPTE0OTA9Y29uZmlnIEZJTkRfTk9STUFMX1BBR0VcXG4tLVxcbm1tL0tjb25maWctMTQ5Mi1cXG5tbS9LY29uZmlnOjE0OTM6Y29uZmlnIEFSQ0hfSEFTX0xBWllfTU1VX01PREVcXG5tbS9LY29uZmlnLTE0OTQtXFx0Ym9vbFxcbi0tXFxubW0vS2NvbmZpZz0xNTAwPWNvbmZpZyBMQVpZX01NVV9NT0RFX0tVTklUX1RFU1RcXG5tbS9LY29uZmlnLTE1MDEtXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciB0aGUgbGF6eSBNTVUgbW9kZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL0tjb25maWc6MTUwMjpcXHRkZXBlbmRzIG9uIEFSQ0hfSEFTX0xBWllfTU1VX01PREVcXG5tbS9LY29uZmlnLTE1MDMtXFx0ZGVwZW5kcyBvbiBLVU5JVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozNzo1NC42Mjg4MDM0MDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTgyNTU4MjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTGF6eSBNTVUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGludHJvZHVjaW5nIGBDT05GSUdfTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUYC4gVGhlIGluaXRpYWwgY2x1ZSBpcyB0aGUgYWRkaXRpb24gb2YgYGxhenlfbW11LmNgIHRvIHRoZSBgYXJjaC9zMzkwL21tL01ha2VmaWxlYC4gSXQncyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHksIHNvIGl0J3MgYWx3YXlzIGluY2x1ZGVkIHdoZW4gdGhlIGtlcm5lbCBpcyBidWlsdCBmb3IgczM5MC5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgaW50ZXJhY3Rpb24gd2l0aCBLQVNBTiwgYW5kIHllcCwgdGhlcmUgYXJlIGNoYW5nZXMgdG8gYGluY2x1ZGUvbGludXgva2FzYW4uaGAgYW5kIGBtbS9rYXNhbi9jb21tb24uY2AsIHNwZWNpZmljYWxseSBhZGRpbmcgYF9fa2FzYW5fcG9pc29uX3B0ZWAsIGBfX2thc2FuX3VucG9pc29uX3B0ZWAsIGFuZCBgS0FTQU5fTEFaWV9NTVVfUFRFYC4gVGhpcyBtZWFucyBgQ09ORklHX0tBU0FOYCBpcyBnb2luZyB0byBiZSByZWxldmFudCB3aGVuIHRlc3RpbmcuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIGBhcmNoL3MzOTAvbW0vbGF6eV9tbXUuY2AuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoZXNlIGZ1bmN0aW9uczogYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZWAsIGBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzYCwgYGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZWAsIGBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGVgLCBgX19sYXp5X21tdV9zZXRfcHRlYCwgYF9fbGF6eV9tbXVfcHRlcF9nZXRgLCBgX19sYXp5X21tdV9wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nYCwgYF9fbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyYCwgYF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydGAsIGBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0YCwgYW5kIGBfX2xhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdGAuXG5cblRoZXNlIGZ1bmN0aW9ucyBhcmUga2V5IGJlY2F1c2UgdGhleSBhcmUgaW52b2tlZCBmcm9tIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oYCBpbmxpbmUgZnVuY3Rpb25zIGxpa2UgYGxhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmdgLCBgc2V0X3B0ZWAsIGBwdGVwX2dldGAsIGV0Yy4gVGhlc2UgYXJlICp2ZXJ5KiBob3QgcGF0aCBmdW5jdGlvbnMuIFRoZSBgX19sYXp5X21tdV8qYCB2YXJpYW50cyBhcmUgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbnMuIFRoZSBwcm9tcHQgd2FudHMgbWUgdG8gYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zLiBXaGlsZSB0aGUgYF9fbGF6eV9tbXVfKmAgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBhbmQgbm90IGlubGluZWQsIHRoZXkgYXJlIGNhbGxlZCBvbiAqZXZlcnkqIFBURSBvcGVyYXRpb24gd2hlbiB0aGUgbGF6eSBNTVUgaXMgYWN0aXZlLiBUZWNobmljYWxseSB0aGV5IGFyZSBub3Qgc3RhdGljLCBhbmQgbm90IGlubGluZWQgYnV0IHRoZXkgYXJlIGhvdC1wYXRoLiBcblxuSG93ZXZlciwgYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXNgLCBgYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlYCwgYW5kIGBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGVgIGFyZSBnb29kIGVudHJ5IHBvaW50cyB0aGF0IHNob3VsZCBiZSB0ZXN0ZWQgYmVjYXVzZSB0aGV5IGFyZSB0aGUgZW50cnkgcG9pbnRzIHRvIHRoZSBsYXp5IE1NVSBtb2RlLlxuSSdsbCBrZWVwIGBhcmNoL3MzOTAvbW0vbGF6eV9tbXUuY2Agb3BlbiBhcyBJIGNvbnRpbnVlIHRvIGV4YW1pbmUgdGhlIGV4YWN0IGZ1bmN0aW9ucyBpbnZvbHZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzNjksIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6Mzg6MDQuNjExMzY0MDM2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDAyOTEwMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnZvaWQgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MTI0OT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19wdGVwX2lwdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgbnIsXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEyNjItXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMjYzOnZvaWQgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEyNjQtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTI2Ny1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjEyNjg6dm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGUodm9pZCk7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xMjY5LXZvaWQgYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKHZvaWQpO1xcbi0tXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM9MTkwPXN0YXRpYyB2b2lkIGZsdXNoX2xhenlfbW11X21vZGUodm9pZClcXG4tLVxcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTIxMi1cXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYzoyMTM6dm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGUodm9pZClcXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0yMTQte1xcbi0tXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM9MjE3PUVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKTtcXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0yMTgtXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM6MjE5OnZvaWQgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0yMjAtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiZmx1c2hfNjQuaD00MT12b2lkIGZsdXNoX3RsYl9wZW5kaW5nKHZvaWQpO1xcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiZmx1c2hfNjQuaDo0Mjp2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSh2b2lkKTtcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYmZsdXNoXzY0LmgtNDMtdm9pZCBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUodm9pZCk7XFxuLS1cXG5hcmNoL3NwYXJjL21tL3RsYi5jPTI1PXZvaWQgZmx1c2hfdGxiX3BlbmRpbmcodm9pZClcXG4tLVxcbmFyY2gvc3BhcmMvbW0vdGxiLmMtNTQtXFxuYXJjaC9zcGFyYy9tbS90bGIuYzo1NTp2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSh2b2lkKVxcbmFyY2gvc3BhcmMvbW0vdGxiLmMtNTYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozODowNi41NTE2NjE1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE0Mzg0NTEwNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIGluamVjdCBmdXp6aW5nIGludG8gdGhpcyBsYXp5IE1NVSBpbXBsZW1lbnRhdGlvbi4gVGhlIGdvYWwsIGFzIGFsd2F5cywgaXMgdG8gZmluZCBnb29kIGNhbmRpZGF0ZXMgdGhhdCBhcmUgYm90aCBpbXBhY3RmdWwgYW5kIHdvbid0IGxlYWQgdG8gc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucyBieSBmb2N1c2luZyBvbiB0aGUgaW5zYW5lbHkgaG90IHBhdGhzLlxuXG5Jbml0aWFsbHksIEkgY29uc2lkZXJlZCB0aGUgY29yZSBQVEUgbWFuaXB1bGF0aW9uIGZ1bmN0aW9uczogYF9fbGF6eV9tbXVfc2V0X3B0ZWAsIGBfX2xhenlfbW11X3B0ZXBfZ2V0YCwgYF9fbGF6eV9tbXVfcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZ2AsIGFuZCB0aGUgb3RoZXJzLiBUaGVzZSBhcmUgdGhlIHdvcmtob3JzZXMg4oCTIGRpcmVjdCBvcGVyYXRpb25zIG9uIHBhZ2UgdGFibGUgZW50cmllcy4gQnV0IHRoZW4gdGhlIHByb21wdCByZW1pbmRlZCBtZSB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgYW5kIHRoZXNlIGFyZSAqZGVmaW5pdGVseSogaG90IHBhdGgsIGNhbGxlZCByZXBlYXRlZGx5IGZvciBldmVyeSBzaW5nbGUgcGFnZSBhY2Nlc3MuIFNvLCBzY3JhdGNoIHRob3NlLlxuXG5Ib3dldmVyLCBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc2AgY2F1Z2h0IG15IGV5ZSBhZ2Fpbi4gV2hpbGUgbm90IGRpcmVjdGx5IG9wZXJhdGluZyBvbiBpbmRpdmlkdWFsIHBhZ2VzLCBpdCdzIGNhbGxlZCBkdXJpbmcgb3BlcmF0aW9ucyB0aGF0ICptYW5hZ2UqIHZpcnR1YWwgbWVtb3J5IHJhbmdlcyDigJMgdGhpbmdzIGxpa2UgYG1hZHZpc2VgLCBgbXByb3RlY3RgLCBgbXJlbWFwYCwgYHZtYWxsb2NgLCBhbmQgd2hhdCBsb29rcyBsaWtlIGB0YXNrX21tdS5jYC4gVGhlc2UgYXJlIHN5c2NhbGxzLCBub3QgdGhlIHN0dWZmIHRoYXQncyBoYXBwZW5pbmcgb24gZXZlcnkgc2luZ2xlIG1lbW9yeSBhY2Nlc3MuIEFuZCwgbG9va2luZyBhdCB0aGUgY29kZSwgYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXNgIHNlZW1zIHRvIGJlIGludm9rZWQgb25jZSBwZXIgVk1BIHJhbmdlIG9wZXJhdGlvbi4gVGhhdCBtYWtlcyBpdCBhIHNvbGlkIGNhbmRpZGF0ZS4gSXQgYmFsYW5jZXMgaW1wYWN0IHdpdGggYXZvaWRpbmcgdGhlIHRydWx5IGluc2FuZSBob3QgcGF0aC5cblxuTm93LCBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSB0byBjb25maXJtIG15IGluaXRpYWwgdGhvdWdodHMuIEknbGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBgYXJjaC9zMzkwL21tL2xhenlfbW11LmNgIHNvdXJjZSBmaWxlIHRvIHNlZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIGV4cG9ydGVkIGFuZCBub24tc3RhdGljIGZ1bmN0aW9ucy4gVGhhdCdsbCBwcm92aWRlIGEgYmV0dGVyIG92ZXJhbGwgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNTksIk91dHB1dFRva2VucyI6NzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6Mzg6MjcuOTkwMTE0OTY3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTY1MTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKC4qXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL21tL2xhenlfbW11LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL21tL2xhenlfbW11LmM9MTE9c3RydWN0IGlwdGVfcmFuZ2Uge1xcbi0tXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMjAtXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM6MjE6c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBpcHRlX3JhbmdlICosIGlwdGVfcmFuZ2UpO1xcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTIyLVxcbi0tXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM9MTkwPXN0YXRpYyB2b2lkIGZsdXNoX2xhenlfbW11X21vZGUodm9pZClcXG4tLVxcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTIxMi1cXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYzoyMTM6dm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGUodm9pZClcXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0yMTQte1xcbi0tXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM9MjI1PUVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcyk7XFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMjI2LVxcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jOjIyNzp2b2lkIGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSh2b2lkKVxcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTIyOC17XFxuLS1cXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYz0yMzE9RVhQT1JUX1NZTUJPTF9JRl9LVU5JVChhcmNoX2xlYXZlX2xhenlfbW11X21vZGUpO1xcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTIzMi1cXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYzoyMzM6dm9pZCBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUodm9pZClcXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0yMzQte1xcbi0tXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM9MjczPXN0YXRpYyBzdHJ1Y3QgaXB0ZV9yYW5nZSAqdGhpc19pcHRlX3JhbmdlKHB0ZV90ICpwdGVwKVxcbi0tXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMjg3LVxcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jOjI4ODpib29sIF9fbGF6eV9tbXVfc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTI4OS17XFxuLS1cXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0zMDAtXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM6MzAxOmJvb2wgX19sYXp5X21tdV9wdGVwX2dldChwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcylcXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0zMDIte1xcbi0tXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMzEzLVxcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jOjMxNDpib29sIF9fbGF6eV9tbXVfcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBpbnQgKnJlcylcXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0zMTUte1xcbi0tXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMzMwLVxcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jOjMzMTpib29sIF9fbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMzMyLXtcXG4tLVxcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTM0Ny1cXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYzozNDg6Ym9vbCBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcylcXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0zNDkte1xcbi0tXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM9MzUzPWJvb2wgX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxcbi0tXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMzY2LVxcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jOjM2Nzpib29sIF9fbGF6eV9tbXVfcHRlcF9zZXRfd3Jwcm90ZWN0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMzY4LXtcXG4tLVxcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTM4NC1cXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYzozODU6aW50IGxhenlfbW11X29ubGluZV9jcHUoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgY3B1KVxcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTM4Ni17XFxuLS1cXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy00MDItXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM6NDAzOnZvaWQgbGF6eV9tbXVfb2ZmbGluZV9jcHUodW5zaWduZWQgaW50IGNwdSlcXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy00MDQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozODoyOC4wMzgwODQ4MDJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTU3NjEzMjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgTGF6eSBNTVUgTW9kZSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcHJvcG9zZWQgbGF6eSBNTVUgbW9kZSBpbXBsZW1lbnRhdGlvbi4gRnJvbSB0aGUgaW5pdGlhbCBzY2FuLCBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlYCwgYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXNgLCBgYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlYCwgYW5kIGBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGVgIGFsbCBzZWVtIGxpa2UgcHJvbWlzaW5nIGNhbmRpZGF0ZXMgZm9yIG1vZGlmaWNhdGlvbi4gVGhlIENQVSBvbmxpbmUvb2ZmbGluZSBmdW5jdGlvbnMsIGBsYXp5X21tdV9vbmxpbmVfY3B1YCBhbmQgYGxhenlfbW11X29mZmxpbmVfY3B1YCwgYWxzbyBhcHBlYXIgcmVsZXZhbnQuIEhvd2V2ZXIsIEkgbmVlZCB0byBiZSBjYXV0aW91cyBhYm91dCBmdW5jdGlvbnMgbGlrZSBgX19sYXp5X21tdV9zZXRfcHRlYCBhbmQgc2ltaWxhciBsb3dlci1sZXZlbCBQVEUgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLiBXaGlsZSB0aGV5IGFyZSBjYWxsZWQgZnJvbSBgc2V0X3B0ZWAsIHdoaWNoIGlzIGEgbm90b3Jpb3VzbHkgaG90IHBhdGgsIG1vZGlmeWluZyB0aGVtIGNvdWxkIGludHJvZHVjZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucy4gSSdsbCBleGNsdWRlIHRoZW0gZnJvbSBpbml0aWFsIGNvbnNpZGVyYXRpb24gdG8gYXZvaWQgYW55IGltbWVkaWF0ZSBpbXBhY3QuXG5cbk5vdywgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEdpdmVuIHRoZSBjb250ZXh0LCBgQ09ORklHX0tBU0FOYCBpcyBvYnZpb3VzbHkgbmVlZGVkIHRvIGVuYWJsZSBLQVNBTi1yZWxhdGVkIGNoYW5nZXMsIGJ1dCBhcmUgdGhlcmUgbW9yZSBzcGVjaWZpYyBLQVNBTiBjb25maWd1cmF0aW9ucyBpbnZvbHZlZCwgc3VjaCBhcyBgQ09ORklHX0tBU0FOX0dFTkVSSUNgIG9yIGBDT05GSUdfS0FTQU5fU1dfVEFHU2AgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IFRoZSBwYXRjaCB0b3VjaGVzIGBtbS9rYXNhbi9jb21tb24uY2AgYW5kIGBpbmNsdWRlL2xpbnV4L2thc2FuLmhgLCB3aGljaCBzdWdnZXN0cyBLQVNBTiBpbnRlZ3JhdGlvbiBpcyBjcnVjaWFsIHRvIHRoZSBkZXNpZ24uIFRoZSBhZGRpdGlvbiBvZiBgX19rYXNhbl9wb2lzb25fcHRlYCBhbmQgYF9fa2FzYW5fdW5wb2lzb25fcHRlYCBmdW5jdGlvbnMgcmVpbmZvcmNlcyB0aGlzLlxuXG5JJ2xsIHNwZWNpZmljYWxseSBuZWVkIHRvIGV4YW1pbmUgYG1tL2thc2FuL2NvbW1vbi5jYCBpbiBkZXRhaWwgdG8gY29uZmlybSB0aGF0IHRoZSByZWxldmFudCBzZWN0aW9ucyBhcmUgaW5kZWVkIGNvbXBpbGVkIG9ubHkgd2hlbiBgQ09ORklHX0tBU0FOYCBpcyBkZWZpbmVkLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgdG8gZW5zdXJlIHdlIGRvbid0IGludHJvZHVjZSBLQVNBTi1zcGVjaWZpYyBjb2RlIGludG8gbm9uLUtBU0FOIGJ1aWxkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1MzgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6Mzg6MzMuOTk1NzAxNjYxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njk3ODk4NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXm9iai1cXFxcJFxcXFwoQ09ORklHX0tBU0FOXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va2FzYW4vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjM4OjM0LjA0MjY5NTA5NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDU5MDQ0MTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgcHJvdmlkZWQgdGV4dDpcblxuKipEaXZpbmcgaW50byB0aGUgS0FTQU4gTWFrZWZpbGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbW0va2FzYW4vTWFrZWZpbGVgLiBJIGtub3cgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBidWlsZCBjb25maWd1cmF0aW9uIGZvciBLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIgKEtBU0FOKSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSByZXNpZGVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCdzIGRlZmluZWQgdGhlcmUsIGFuZCBob3cgdGhleSBob29rIGludG8gdGhlIGJyb2FkZXIgYnVpbGQgcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgSSBzaG91bGQ6XG5cbiogICAqKlF1aWNrbHkgc2NhbiBmb3Iga2V5IHZhcmlhYmxlczoqKiBJIGV4cGVjdCB0byBmaW5kIGZsYWdzIHJlbGF0ZWQgdG8gY29tcGlsZXIgb3B0aW9ucywgb2JqZWN0IGZpbGUgaW5jbHVzaW9uLCBhbmQgcG90ZW50aWFsbHkgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBvciBzcGVjaWZpYyBLQVNBTiBmZWF0dXJlcy5cbiogICAqKkxvb2sgZm9yIGRlcGVuZGVuY2llczoqKiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBNYWtlZmlsZSBpbnRlcmFjdHMgd2l0aCBvdGhlciBgTWFrZWZpbGVzYCBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgKGBtbWApIGRpcmVjdG9yeSBhbmQgcG90ZW50aWFsbHkgaGlnaGVyIHVwIGluIHRoZSBrZXJuZWwncyBidWlsZCBoaWVyYXJjaHkuIFdoYXQgZG9lcyBpdCBkZXBlbmQgb24sIGFuZCB3aGF0IGRvZXMgaXQgcHJvdmlkZT9cbiogICAqKkZvY3VzIG9uIHRoZSBidWlsZCB0YXJnZXRzOioqIEFyZSB0aGVyZSBzcGVjaWZpYyB0YXJnZXRzIGRlZmluZWQgZm9yIGRpZmZlcmVudCBLQVNBTiBjb21wb25lbnRzLCBvciBpcyBpdCBhIG1vcmUgbW9ub2xpdGhpYyBidWlsZCBhcHByb2FjaD8gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgbW9kdWxhciB0aGUgS0FTQU4gaW1wbGVtZW50YXRpb24gaXMuXG4qICAgKipJZGVudGlmeSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzOioqIExvb2sgZm9yIHdoZXJlIHRoZSBLQVNBTiBjb2RlIGdldHMgaW50ZWdyYXRlZCBkdXJpbmcga2VybmVsIGNvbXBpbGF0aW9uLCB3aGljaCBjb3VsZCBiZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZS5cblxuRXNzZW50aWFsbHksIEkgd2FudCB0byBmb3JtIGEgbWVudGFsIG1vZGVsIG9mIEtBU0FOJ3MgYnVpbGQgcHJvY2VzcyB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGZyYW1ld29yay4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyNTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozODo0My41MDE3NDE2OTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va2FzYW4vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRLQVNBTl9TQU5JVElaRSA6PSBuXFxuICAgMzpcXHRVQlNBTl9TQU5JVElaRSA6PSBuXFxuICAgNDpcXHRLQ09WX0lOU1RSVU1FTlQgOj0gblxcbiAgIDU6XFx0XFxuICAgNjpcXHQjIERpc2FibGUgZnRyYWNlIHRvIGF2b2lkIHJlY3Vyc2lvbi5cXG4gICA3OlxcdENGTEFHU19SRU1PVkVfY29tbW9uLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcXG4gICA4OlxcdENGTEFHU19SRU1PVkVfZ2VuZXJpYy5vID0gJChDQ19GTEFHU19GVFJBQ0UpXFxuICAgOTpcXHRDRkxBR1NfUkVNT1ZFX2luaXQubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxcbiAgMTA6XFx0Q0ZMQUdTX1JFTU9WRV9xdWFyYW50aW5lLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcXG4gIDExOlxcdENGTEFHU19SRU1PVkVfcmVwb3J0Lm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcXG4gIDEyOlxcdENGTEFHU19SRU1PVkVfcmVwb3J0X2dlbmVyaWMubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxcbiAgMTM6XFx0Q0ZMQUdTX1JFTU9WRV9yZXBvcnRfaHdfdGFncy5vID0gJChDQ19GTEFHU19GVFJBQ0UpXFxuICAxNDpcXHRDRkxBR1NfUkVNT1ZFX3JlcG9ydF9zd190YWdzLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcXG4gIDE1OlxcdENGTEFHU19SRU1PVkVfc2hhZG93Lm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcXG4gIDE2OlxcdENGTEFHU19SRU1PVkVfaHdfdGFncy5vID0gJChDQ19GTEFHU19GVFJBQ0UpXFxuICAxNzpcXHRDRkxBR1NfUkVNT1ZFX3N3X3RhZ3MubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxcbiAgMTg6XFx0XFxuICAxOTpcXHQjIEZ1bmN0aW9uIHNwbGl0dGVyIGNhdXNlcyB1bm5lY2Vzc2FyeSBzcGxpdHMgaW4gX19hc2FuX2xvYWQxL19fYXNhbl9zdG9yZTFcXG4gIDIwOlxcdCMgc2VlOiBodHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD02MzUzM1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozODo0My41MDE4MDQ3NjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ3MDY2OTQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5LiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuIEhlcmUncyBhIHN1bW1hcnk6XG5cbioqRGlnZ2luZyBEZWVwZXI6IFRoZSBVcmdlIHRvIFVuZGVyc3RhbmQqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIGNsZWFyOiBJIG5lZWQgdG8gZGVsdmUgZnVydGhlci4gSXQncyB0aGF0IGltbWVkaWF0ZSwgYWxtb3N0IGludm9sdW50YXJ5IHJlYWN0aW9uIEkgZ2V0IHdoZW4gcHJlc2VudGVkIHdpdGggc29tZXRoaW5nIG5ldywgc29tZXRoaW5nIHRoYXQgc3BhcmtzIG15IGN1cmlvc2l0eS4gTXkgZXhwZXJpZW5jZSBoYXMgdGF1Z2h0IG1lIHRoYXQgaW5pdGlhbCBzdXJmYWNlIGltcHJlc3Npb25zIGFyZSByYXJlbHkgZW5vdWdoLiBUaGVyZSdzIGFsd2F5cyBhIGhpZGRlbiBjb21wbGV4aXR5LCBhIG51YW5jZSwgYSBkZWVwZXIgbGF5ZXIgb2YgbWVhbmluZyB3YWl0aW5nIHRvIGJlIHVuY292ZXJlZC4gUmVhZGluZyBtb3JlLCBhbmFseXppbmcgbW9yZSwgaW52ZXN0aWdhdGluZyBtb3JlIOKAkyB0aGF0J3MgdGhlIG9ubHkgd2F5IHRvIHRydWx5IGdyYXNwIHRoZSBzdWJqZWN0IGF0IGhhbmQgYW5kIGFzc2VzcyBpdHMgc2lnbmlmaWNhbmNlIHdpdGhpbiB0aGUgYnJvYWRlciBmcmFtZXdvcmsgb2YgbXkgZXhwZXJ0aXNlLiBUaGlzIHVyZ2UsIHRoaXMgY29tcHVsc2lvbiB0byB1bmRlcnN0YW5kIHRob3JvdWdobHksIGlzIGZ1bmRhbWVudGFsIHRvIGhvdyBJIGFwcHJvYWNoIG15IHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDIwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjM4OjUwLjk3MjQ3NjU0M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9rYXNhbi9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAyMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMTpcXHRDQ19GTEFHU19LQVNBTl9SVU5USU1FIDo9ICQoY2FsbCBjYy1vcHRpb24sIC1mbm8tY29uc2VydmUtc3RhY2spXFxuICAyMjpcXHRDQ19GTEFHU19LQVNBTl9SVU5USU1FICs9IC1mbm8tc3RhY2stcHJvdGVjdG9yXFxuICAyMzpcXHQjIERpc2FibGUgYnJhbmNoIHRyYWNpbmcgdG8gYXZvaWQgcmVjdXJzaW9uLlxcbiAgMjQ6XFx0Q0NfRkxBR1NfS0FTQU5fUlVOVElNRSArPSAtRERJU0FCTEVfQlJBTkNIX1BST0ZJTElOR1xcbiAgMjU6XFx0XFxuICAyNjpcXHRDRkxBR1NfY29tbW9uLm8gOj0gJChDQ19GTEFHU19LQVNBTl9SVU5USU1FKVxcbiAgMjc6XFx0Q0ZMQUdTX2dlbmVyaWMubyA6PSAkKENDX0ZMQUdTX0tBU0FOX1JVTlRJTUUpXFxuICAyODpcXHRDRkxBR1NfaW5pdC5vIDo9ICQoQ0NfRkxBR1NfS0FTQU5fUlVOVElNRSlcXG4gIDI5OlxcdENGTEFHU19xdWFyYW50aW5lLm8gOj0gJChDQ19GTEFHU19LQVNBTl9SVU5USU1FKVxcbiAgMzA6XFx0Q0ZMQUdTX3JlcG9ydC5vIDo9ICQoQ0NfRkxBR1NfS0FTQU5fUlVOVElNRSlcXG4gIDMxOlxcdENGTEFHU19yZXBvcnRfZ2VuZXJpYy5vIDo9ICQoQ0NfRkxBR1NfS0FTQU5fUlVOVElNRSlcXG4gIDMyOlxcdENGTEFHU19yZXBvcnRfaHdfdGFncy5vIDo9ICQoQ0NfRkxBR1NfS0FTQU5fUlVOVElNRSlcXG4gIDMzOlxcdENGTEFHU19yZXBvcnRfc3dfdGFncy5vIDo9ICQoQ0NfRkxBR1NfS0FTQU5fUlVOVElNRSlcXG4gIDM0OlxcdENGTEFHU19zaGFkb3cubyA6PSAkKENDX0ZMQUdTX0tBU0FOX1JVTlRJTUUpXFxuICAzNTpcXHRDRkxBR1NfaHdfdGFncy5vIDo9ICQoQ0NfRkxBR1NfS0FTQU5fUlVOVElNRSlcXG4gIDM2OlxcdENGTEFHU19zd190YWdzLm8gOj0gJChDQ19GTEFHU19LQVNBTl9SVU5USU1FKVxcbiAgMzc6XFx0XFxuICAzODpcXHRDRkxBR1NfS0FTQU5fVEVTVCA6PSAkKENGTEFHU19LQVNBTilcXG4gIDM5OlxcdGlmbmRlZiBDT05GSUdfQ0NfSEFTX0tBU0FOX01FTUlOVFJJTlNJQ19QUkVGSVhcXG4gIDQwOlxcdCMgSWYgY29tcGlsZXIgaW5zdHJ1bWVudHMgbWVtaW50cmluc2ljcyBieSBwcmVmaXhpbmcgdGhlbSB3aXRoIF9fYXNhbi9fX2h3YXNhbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6Mzg6NTAuOTcyNTM3ODAzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDY0NDA3MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC4gSGVyZSdzIGEgc3VtbWFyeTpcblxuKipEaWdnaW5nIERlZXBlcjogVGhlIFVyZ2UgdG8gVW5kZXJzdGFuZCoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgY2xlYXI6IEkgbmVlZCB0byBkZWx2ZSBmdXJ0aGVyLiBJdCdzIHRoYXQgaW1tZWRpYXRlLCBhbG1vc3QgaW52b2x1bnRhcnkgcmVhY3Rpb24gSSBnZXQgd2hlbiBwcmVzZW50ZWQgd2l0aCBzb21ldGhpbmcgbmV3LCBzb21ldGhpbmcgdGhhdCBzcGFya3MgbXkgY3VyaW9zaXR5LiBNeSBleHBlcmllbmNlIGhhcyB0YXVnaHQgbWUgdGhhdCBpbml0aWFsIHN1cmZhY2UgaW1wcmVzc2lvbnMgYXJlIHJhcmVseSBlbm91Z2guIFRoZXJlJ3MgYWx3YXlzIGEgaGlkZGVuIGNvbXBsZXhpdHksIGEgbnVhbmNlLCBhIGRlZXBlciBsYXllciBvZiBtZWFuaW5nIHdhaXRpbmcgdG8gYmUgdW5jb3ZlcmVkLiBSZWFkaW5nIG1vcmUsIGFuYWx5emluZyBtb3JlLCBpbnZlc3RpZ2F0aW5nIG1vcmUg4oCTIHRoYXQncyB0aGUgb25seSB3YXkgdG8gdHJ1bHkgZ3Jhc3AgdGhlIHN1YmplY3QgYXQgaGFuZCBhbmQgYXNzZXNzIGl0cyBzaWduaWZpY2FuY2Ugd2l0aGluIHRoZSBicm9hZGVyIGZyYW1ld29yayBvZiBteSBleHBlcnRpc2UuIFRoaXMgdXJnZSwgdGhpcyBjb21wdWxzaW9uIHRvIHVuZGVyc3RhbmQgdGhvcm91Z2hseSwgaXMgZnVuZGFtZW50YWwgdG8gaG93IEkgYXBwcm9hY2ggbXkgd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2ODAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6Mzk6MDIuMDM2OTQ4NTgxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2thc2FuL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQxOlxcdCMgd2UgbmVlZCB0byB0cmVhdCB0aGVtIG5vcm1hbGx5IChhcyBidWlsdGlucyksIG90aGVyd2lzZSB0aGUgY29tcGlsZXIgd29uJ3RcXG4gIDQyOlxcdCMgcmVjb2duaXplIHRoZW0gYXMgaW5zdHJ1bWVudGFibGUuIElmIGl0IGRvZXNuJ3QgaW5zdHJ1bWVudCB0aGVtLCB3ZSBuZWVkIHRvXFxuICA0MzpcXHQjIHBhc3MgLWZuby1idWlsdGluLCBzbyB0aGUgY29tcGlsZXIgZG9lc24ndCBpbmxpbmUgdGhlbS5cXG4gIDQ0OlxcdENGTEFHU19LQVNBTl9URVNUICs9IC1mbm8tYnVpbHRpblxcbiAgNDU6XFx0ZW5kaWZcXG4gIDQ2OlxcdFxcbiAgNDc6XFx0Q0ZMQUdTX1JFTU9WRV9rYXNhbl90ZXN0X2MubyArPSAkKGNhbGwgY2Mtb3B0aW9uLCAtV3ZsYS1sYXJnZXItdGhhbj0xKVxcbiAgNDg6XFx0Q0ZMQUdTX2thc2FuX3Rlc3RfYy5vIDo9ICQoQ0ZMQUdTX0tBU0FOX1RFU1QpXFxuICA0OTpcXHRSVVNURkxBR1Nfa2FzYW5fdGVzdF9ydXN0Lm8gOj0gJChSVVNURkxBR1NfS0FTQU4pXFxuICA1MDpcXHRcXG4gIDUxOlxcdG9iai15IDo9IGNvbW1vbi5vIHJlcG9ydC5vXFxuICA1MjpcXHRvYmotJChDT05GSUdfS0FTQU5fR0VORVJJQykgKz0gaW5pdC5vIGdlbmVyaWMubyByZXBvcnRfZ2VuZXJpYy5vIHNoYWRvdy5vIHF1YXJhbnRpbmUub1xcbiAgNTM6XFx0b2JqLSQoQ09ORklHX0tBU0FOX0hXX1RBR1MpICs9IGh3X3RhZ3MubyByZXBvcnRfaHdfdGFncy5vIHRhZ3MubyByZXBvcnRfdGFncy5vXFxuICA1NDpcXHRvYmotJChDT05GSUdfS0FTQU5fU1dfVEFHUykgKz0gaW5pdC5vIHJlcG9ydF9zd190YWdzLm8gc2hhZG93Lm8gc3dfdGFncy5vIHRhZ3MubyByZXBvcnRfdGFncy5vXFxuICA1NTpcXHRcXG4gIDU2OlxcdGthc2FuX3Rlc3Qtb2JqcyA6PSBrYXNhbl90ZXN0X2Mub1xcbiAgNTc6XFx0aWZkZWYgQ09ORklHX1JVU1RcXG4gIDU4OlxcdFxcdGthc2FuX3Rlc3Qtb2JqcyArPSBrYXNhbl90ZXN0X3J1c3Qub1xcbiAgNTk6XFx0ZW5kaWZcXG4gIDYwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozOTowMi4wMzcwMTM0NzFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMxNzczMzk4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLQVNBTiBDb21waWxhdGlvbiBEZWR1Y3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aHJvdWdoIHRoaXMgY29tcGlsYXRpb24gcHJvY2VzcyBhbmQgc29tZXRoaW5nIGlzIGltbWVkaWF0ZWx5IGNsZWFyOiBgY29tbW9uLm9gIGluIHRoZSBrZXJuZWwgYnVpbGQgaXMgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkICppZiogdGhlIEtBU0FOIG1lbW9yeSBzYWZldHkgZmVhdHVyZSBpcyBlbmFibGVkLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgYG1tL2thc2FuYCBpcyB0aGUgc3BlY2lmaWMgc3Vic3lzdGVtIHJlc3BvbnNpYmxlIGZvciBLQVNBTiwgc28gdGhhdCdzIHdoZXJlIHRvIHN0YXJ0LiBUaGUgY3J1Y2lhbCBwaWVjZSBoZXJlIGlzIGZpZ3VyaW5nIG91dCB0aGUgY29uZGl0aW9uIHRoYXQgZ2V0cyB1cyAqaW50byogYG1tL2thc2FuYC4gQmFzZWQgb24gdGhpcywgaXQncyBwcmV0dHkgb2J2aW91cyB0aGF0IGBDT05GSUdfS0FTQU5gIGlzIHRoZSBkZWNpZGluZyBmYWN0b3IuXG5cblRpbWUgdG8gY29uZmlybSBteSBzdXNwaWNpb25zIGFuZCB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcy4gSSBzaG91bGQgY2hlY2sgdGhlIGBtbS9NYWtlZmlsZWAgdG8gc2VlIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGhhbmRsZXMgdGhlIGBtbS9rYXNhbmAgZGlyZWN0b3J5IGFuZCB3aGF0IGNvbmRpdGlvbnMgYXJlIHNwZWNpZmllZC4gQSBxdWljayBsb29rIGF0IHRoZSBNYWtlZmlsZSBzaG91bGQgdGVsbCBtZSBpZiB0aGUgYENPTkZJR19LQVNBTmAgb3B0aW9uIHRydWx5IGRpY3RhdGVzIHRoZSBlbnRyeSBpbnRvIGBtbS9rYXNhbmAgYW5kLCB0aGVyZWZvcmUsIHRoZSBpbmNsdXNpb24gb2YgYGNvbW1vbi5vYC4gTGV0IG1lIGRpdmUgaW4gYW5kIHZlcmlmeSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTMwNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6Mzk6MDguMzU0NzQ5NzYxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDkxNTQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeb2JqLVxcXFwkXFxcXChDT05GSUdfS0FTQU5cXFxcKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT05MT1vYmotJChDT05GSUdfUEFHRV9QT0lTT05JTkcpICs9IHBhZ2VfcG9pc29uLm9cXG5tbS9NYWtlZmlsZTo5MjpvYmotJChDT05GSUdfS0FTQU4pXFx0Kz0ga2FzYW4vXFxubW0vTWFrZWZpbGUtOTMtb2JqLSQoQ09ORklHX0tGRU5DRSkgKz0ga2ZlbmNlL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozOTowOC4zOTk2Njc5NzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTcxNDkxMzI2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLQVNBTiBhbmQgTGF6eSBNTVUgTW9kZSBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNoYW5nZXMgcmVsYXRlZCB0byBLQVNBTiBhbmQgdGhlIGxhenkgTU1VIG1vZGUsIHNwZWNpZmljYWxseSBmb3IgczM5MC4gRmlyc3Qgb2ZmLCBJJ20gdGhpbmtpbmcsIGBDT05GSUdfS0FTQU5gIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUsIHRoYXQncyBjbGVhci4gQnV0IGFyZSB0aGVyZSBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyB0byBjb25zaWRlcj8gVGhlIHBhdGNoIGFkZHMgYHNlbGVjdCBBUkNIX0hBU19MQVpZX01NVV9NT0RFYCB0byBgYXJjaC9zMzkwL0tjb25maWdgLiBSaWdodCwgbGF6eSBNTVUgbW9kZSBnZXRzIGVuYWJsZWQgaWYgYEFSQ0hfSEFTX0xBWllfTU1VX01PREVgIGlzIHNldC4gTm93LCBgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERWAgaXMgYSBib29sZWFuIGNvbmZpZyBkZWZpbmVkIGluIGBtbS9LY29uZmlnYCwgaXQgc2VlbXMgdG8gYmUgc2VsZWN0ZWQgYnkgYFMzOTBgIGl0c2VsZi4gVGhlcmVmb3JlLCBvbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIHRoZSBsYXp5IE1NVSBtb2RlIGlzIGluaGVyZW50bHkgZW5hYmxlZC5cblxuTm93LCBhc2lkZSBmcm9tIGBDT05GSUdfS0FTQU5gLCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIHNob3VsZCBiZSBoaWdobGlnaHRlZD8gVGhlIHBhdGNoIHRvdWNoZXMgYG1tL2thc2FuL3JlcG9ydF9nZW5lcmljLmNgLCB3aGljaCBpcyBvbmx5IGNvbXBpbGVkIGlmIGBDT05GSUdfS0FTQU5fR0VORVJJQ2AgaXMgZW5hYmxlZC4gU2VlbXMgbGlrZSBgS0FTQU5fR0VORVJJQ2AgaXMgZ29pbmcgdG8gYmUgYW5vdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uLlxuXG5EaWdnaW5nIGRlZXBlciwgSSBleGFtaW5lZCBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc2AgaW4gYGFyY2gvczM5MC9tbS9sYXp5X21tdS5jYC4gSXQncyBjYWxsaW5nIGBlbnRlcl9pcHRlX3JhbmdlYCwgd2hpY2gsIGluIHR1cm4sIGlzIHVzaW5nIGB0ZXN0X2ZhY2lsaXR5KDEzKWAuIEZhY2lsaXR5IDEzIHJlcHJlc2VudHMgdGhlIElQVEUtcmFuZ2UgZmFjaWxpdHksIGFuZCB0aGFua2Z1bGx5LCBpdCdzIGF2YWlsYWJsZSBvbiB6MTAgYW5kIGxhdGVyIHN5c3RlbXMgYW5kIGlzIHN1cHBvcnRlZCBpbiBRRU1VLlxuXG5TbywgdGhlIGtleSBmdW5jdGlvbnMgdG8ga2VlcCBpbiBtaW5kIGFyZTogYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZWAsIGBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzYCwgYGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZWAsIGBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGVgLCBgbGF6eV9tbXVfb25saW5lX2NwdWAsIGFuZCBgbGF6eV9tbXVfb2ZmbGluZV9jcHVgLlxuXG5KdXN0IGRvdWJsZS1jaGVja2luZywgSSBzZWUgYGxhenlfbW11X29ubGluZV9jcHVgIGFuZCBgbGF6eV9tbXVfb2ZmbGluZV9jcHVgIGFyZW4ndCBzdGF0aWMgZnVuY3Rpb25zLiBBbmQsIHRoZSBvdGhlciBgYXJjaF8qYCBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIHVzaW5nIGBFWFBPUlRfU1lNQk9MX0lGX0tVTklUYC4gT2theSwgdGhlc2UgYXJlIG5vdCBzdGF0aWMsIGVpdGhlci5cblxuTm93LCBhcmUgdGhlcmUgYW55IG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IFllcyEgYGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlc2AgaXMgY2FsbGVkIGluIHZhcmlvdXMgcGxhY2VzOiBgZnMvcHJvYy90YXNrX21tdS5jYCwgYG1tL21hZHZpc2UuY2AsIGBtbS9tZW1vcnkuY2AsIGBtbS9tcHJvdGVjdC5jYCwgYG1tL21yZW1hcC5jYCwgYW5kIGBtbS92bWFsbG9jLmNgLiBJbnRlcmVzdGluZy5cblxuQWxsIG9mIHRoZXNlIGFyZSBpbmxpbmUgZnVuY3Rpb25zIGluIGBpbmNsdWRlL2xpbnV4L3BndGFibGUuaGAgdGhhdCBjYWxsIGBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzYCwgbWFraW5nIGBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzYCB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byBmb2N1cyBvbi5cblxuQ2lyY2xpbmcgYmFjayB0byB0aGUgY29uZmlndXJhdGlvbnMsIGlzIGBLQVNBTl9HRU5FUklDYCBkZWZpbml0ZWx5IHRoZSByaWdodCBvbmU/IExldCdzIGNvbmZpcm0gYnkgbG9va2luZyBhdCBgbW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuY2AgYWdhaW4uIFRoZSBjb2RlIGluY2x1ZGVzIGEgY2FzZSBmb3IgYEtBU0FOX0xBWllfTU1VX1BURWAsIHdoaWNoIHRyaWdnZXJzIHRoZSBcImxhenktbW11LXB0ZS1hY2Nlc3NcIiBidWcgdHlwZS4gVGhpcyBjb2RlIHBhdGggaXMgY29tcGlsZWQgb25seSBpZiBgQ09ORklHX0tBU0FOX0dFTkVSSUNgIGlzIGVuYWJsZWQuIFRoZXJlZm9yZSwgYEtBU0FOX0dFTkVSSUNgIGlzIGRlZmluaXRlbHkgYSByZWxldmFudCBjb25maWd1cmF0aW9uIHRvIGNvbnNpZGVyLlxuXG5Ob3csIHdoYXQgYWJvdXQgYEtBU0FOX1NXX1RBR1NgIG9yIGBLQVNBTl9IV19UQUdTYD8gVGhlIHBhdGNoIG1vZGlmaWVzIGBtbS9rYXNhbi9rYXNhbi5oYCB0byBpbnRyb2R1Y2UgYEtBU0FOX0xBWllfTU1VX1BURWAsIHdoaWNoIGlzIHVzZWQgaW4gYHJlcG9ydF9nZW5lcmljLmNgLiBCdXQgdGhlcmUncyBubyBtb2RpZmljYXRpb24gb2YgYHJlcG9ydF9zd190YWdzLmNgIG9yIGByZXBvcnRfaHdfdGFncy5jYC4gU28gaXQgbG9va3MgbGlrZSBgS0FTQU5fR0VORVJJQ2AgaXMgdGhlIG1vc3QgcGVydGluZW50IG9uZSBoZXJlLlxuXG5GaW5hbGx5LCBhcmUgdGhlcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnM/IGBDT05GSUdfU01QYCBpcyByZXF1aXJlZCBkdWUgdG8gdGhlIGBzbXAuY2AgY2hhbmdlcywgYnV0IHRoYXQncyB1c3VhbGx5IGVuYWJsZWQuIE5vdywgcmVnYXJkaW5nIGBDT05GSUdfSE9UUExVR19DUFVgLCBpcyBpdCBuZWVkZWQgZm9yIGBfX2NwdV9kaWVgIGFuZCBgX19jcHVfdXBgIHdpdGhpbiBgc21wLmNgPyBPa2F5LCB0aW1lIHRvIGNoZWNrIGBhcmNoL3MzOTAva2VybmVsL3NtcC5jYCB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTY4MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6Mzk6MjUuNTQ4ODAzMTk3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM1NTQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2NwdV91cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva2VybmVsL3NtcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rZXJuZWwvc21wLmM9ODI0PXN0YXRpYyB2b2lkIHNtcF9zdGFydF9zZWNvbmRhcnkodm9pZCAqY3B1dm9pZClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc21wLmMtODU1LS8qIFVwcGluZyBhbmQgZG93bmluZyBvZiBDUFVzICovXFxuYXJjaC9zMzkwL2tlcm5lbC9zbXAuYzo4NTY6aW50IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGlkbGUpXFxuYXJjaC9zMzkwL2tlcm5lbC9zbXAuYy04NTcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozOToyNS41OTQxNjIwNzJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTI1NjkxNDgxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHN0YXRlbWVudHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIHRob3VnaHRzIGFzIGFuIGVtYmVkZGVkIHN5c3RlbXMgZXhwZXJ0OlxuXG4qKkNQVSBIb3RwbHVnIFx1MDAyNiBTTVAgQ29tcGlsYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5SaWdodCwgc28gdGhlc2UgbWFjcm9zLCBgX19jcHVfdXBgIGFuZCBgX19jcHVfZGllYCwgYXJlIGNsZWFybHkgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgQ1BVcyB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGZpcnN0IG9uZSwgYF9fY3B1X3VwYCwgaXMgb25seSBnb2luZyB0byBiZSBjb21waWxlZCBpbnRvIHRoZSBzeXN0ZW0gd2hlbiBgQ09ORklHX1NNUGAgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBgX19jcHVfdXBgIGlzIGxpa2VseSByZWxhdGVkIHRvIGJyaW5naW5nIGEgQ1BVIG9ubGluZSwgd2hpY2ggaXMgYSBmZWF0dXJlIHByaW1hcmlseSBhc3NvY2lhdGVkIHdpdGggU3ltbWV0cmljIE11bHRpLVByb2Nlc3NpbmcuIElmIHlvdSBvbmx5IGhhdmUgYSBzaW5nbGUgQ1BVLCB5b3UgdHlwaWNhbGx5IGRvbid0IG5lZWQgdG8gZHluYW1pY2FsbHkgJ2JyaW5nIGl0IHVwJy5cblxuTm93LCBsb29raW5nIGF0IGBfX2NwdV9kaWVgLCB0aGlzIG9uZSdzIGNvbmRpdGlvbmFsIG9uIGBDT05GSUdfSE9UUExVR19DUFVgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgdGhpcyBtYWNybyBpcyBmb3IgdGFraW5nIGEgQ1BVIG9mZmxpbmUsIHdoaWNoIGlzIGEgY29yZSBjb25jZXB0IHRvIENQVSBob3RwbHVnLiBJZiBob3RwbHVnZ2luZyBpcyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUsIHRoZW4gdGhlcmUncyBubyB3YXkgdG8gYnJpbmcgYSBDUFUgb2ZmbGluZSAoYXNpZGUgZnJvbSBwb3dlcmluZyB0aGUgc3lzdGVtIGRvd24gb3Igb3RoZXJ3aXNlKS4gSSB3b3VsZCBleHBlY3QgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYF9fY3B1X2RpZWAgdG8gYmUgZm9yIHRoZSByZXZlcnNlIG9mIGBfX2NwdV91cGAuIEl0IHdvdWxkIGxpa2VseSBpbnZvbHZlIGEgc2VyaWVzIG9mIHN0ZXBzIHRvIHNhZmVseSB0YWtlIGEgQ1BVIG9mZiB0aGUgc3lzdGVtLCBzdWNoIGFzIG1pZ3JhdGluZyBhbnkgcmVsZXZhbnQgcHJvY2Vzc2VzIG9mZiB0aGF0IENQVSwgZmx1c2hpbmcgY2FjaGVzLCBhbmQgcG90ZW50aWFsbHkgc3RvcHBpbmcgZXhlY3V0aW9uIG9uIHRoYXQgQ1BVLlxuXG5Fc3NlbnRpYWxseSwgdGhlc2UgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdGVsbCBtZSBob3cgdGhlIGNvZGUgaXMgc3RydWN0dXJlZCB0byBoYW5kbGUgU01QIGFuZCBDUFUgaG90cGx1Zy4gVGhlIGluY2x1c2lvbiBvciBleGNsdXNpb24gb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGRpcmVjdGx5IHRpZWQgdG8gdGhlIGRlZmluZWQgY29tcGlsZS10aW1lIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHN5c3RlbS4gSSB3b3VsZCBuZXh0IGxvb2sgYXQgdGhlc2UgZnVuY3Rpb25zIHRoZW1zZWx2ZXMgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgbWVjaGFuaXNtcyBhbmQgdGhlIGFyY2hpdGVjdHVyZSB0aGF0IHRoZXkgaGFuZGxlIHRvIGJlc3QgdW5kZXJzdGFuZCBDUFUgaGFuZGxpbmcgZm9yIHRoYXQgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODAwNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjM5OjM0Ljg1MTA3OTQ4MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2Mjg2MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jcHVfZGllXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rZXJuZWwvc21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2tlcm5lbC9zbXAuYz04OTk9aW50IF9fY3B1X2Rpc2FibGUodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc21wLmMtOTIxLVxcbmFyY2gvczM5MC9rZXJuZWwvc21wLmM6OTIyOnZvaWQgX19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpXFxuYXJjaC9zMzkwL2tlcm5lbC9zbXAuYy05MjMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozOTozNC44OTU3MTI4MjdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ1NTczOTU2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIFRlc3RpbmcgUGxhbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgYEhPVFBMVUdfQ1BVYCBjb3VsZCByZWFsbHkgaGVscCBtZSBuYWlsIGRvd24gdGhlIENQVSBob3RwbHVnIGNvZGUgcGF0aHMgZHVyaW5nIHRlc3RpbmcuIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2QgYXZlbnVlIHRvIGV4cGxvcmUgZnVydGhlci5cblxuTGV0J3Mgc2VlLCBJIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQuIEknbSBmb2N1c2luZyBvbjpcblxuKiAgIGBLQVNBTmBcbiogICBgS0FTQU5fR0VORVJJQ2BcbiogICBgSE9UUExVR19DUFVgXG5cbldhaXQgYSBtaW51dGUsIGBLQVNBTl9HRU5FUklDYCBpcyBkZXBlbmRlbnQgb24gYEtBU0FOYCByaWdodD8gT2YgY291cnNlLCB0aGF0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyLiBOb3csIEkgaGF2ZSB0byBlbnN1cmUgdGhlIGZ1bGwgdGVzdCBzdWl0ZSBjYW4gZXZlbiBiZSBleGVjdXRlZC5cblxuSXMgYEtBU0FOYCBldmVuIHN1cHBvcnRlZCBvbiB0aGUgczM5MCBhcmNoaXRlY3R1cmU/IExldCBtZSBjaGVjayBxdWlja2x5Li4uIEFoLCB5ZXMsIGFjY29yZGluZyB0byB0aGUgYGFyY2gvczM5MC9LY29uZmlnYCBmaWxlLCBpdCAqZG9lcyogaGF2ZSBgc2VsZWN0IEFSQ0hfSEFTX0tBU0FOX0dFTkVSSUNgLiBHcmVhdC4gTm93IEkgY2FuIGNvbnRpbnVlIG15IHBsYW5uaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODU1NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozOTo0NC4zNTE0NTU5MTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzE4NDc2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBUkNIX0hBU19LQVNBTl9HRU5FUklDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozOTo0NC4zOTU3Nzk1NDVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU2NDUzOTAxNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIEFkZHJlc3NTYW5pdGl6ZXIgKEtBU0FOKSBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGtlcm5lbCBjb2RlIGFuZCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBzYWZldHkgY29udGV4dC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IG1pbmQgaXMgd2hldGhlciBLQVNBTiwgb3Igc29tZXRoaW5nIGFuYWxvZ291cywgaXMgZW5hYmxlZC4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIHdlJ3JlIHJ1bm5pbmcgd2l0aCB0aGlzIHJ1bnRpbWUgbWVtb3J5IGVycm9yIGRldGVjdGlvbiwgd2hpY2ggd291bGQgZnVuZGFtZW50YWxseSBhbHRlciBob3cgSSBpbnRlcnByZXQgcG90ZW50aWFsIGlzc3Vlcy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMuIEknbGwgYmUgbG9va2luZyBmb3IgYEhBVkVfQVJDSF9LQVNBTmAsIG9yIHNvbWV0aGluZyBlcXVpdmFsZW50LiBUaGF0J3MgdGhlIGJhc2VsaW5lLCB0aGUgbW9zdCBkaXJlY3QgaW5kaWNhdG9yLCBidXQgaXQgY291bGQgYmUgbmFtZWQgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUuIEFsc28sIEknbGwga2VlcCBpbiBtaW5kIHRoYXQgb3RoZXIgaW5zdHJ1bWVudGF0aW9uIGNvdWxkIGJlIGVuYWJsZWQsIGFuZCBJJ2xsIGtlZXAgdGhpcyBpbiB0aGUgYmFjayBvZiBteSBoZWFkIHRvIGNoZWNrIGZvciBpbiB0aGUgc3Vycm91bmRpbmcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5MzcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjo0MDowMC4wNDExNzE4MzJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTA0MjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIktBU0FOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9LY29uZmlnPTM4PWNvbmZpZyBBUkNIX1NVUFBPUlRTX1VQUk9CRVNcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTQwLVxcbmFyY2gvczM5MC9LY29uZmlnOjQxOmNvbmZpZyBLQVNBTl9TSEFET1dfT0ZGU0VUXFxuYXJjaC9zMzkwL0tjb25maWctNDItXFx0aGV4XFxuYXJjaC9zMzkwL0tjb25maWc6NDM6XFx0ZGVwZW5kcyBvbiBLQVNBTlxcbmFyY2gvczM5MC9LY29uZmlnLTQ0LVxcdGRlZmF1bHQgMHgxQzAwMDAwMDAwMDAwMFxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9NzU9Y29uZmlnIFMzOTBcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTE4My1cXHRzZWxlY3QgSEFWRV9BUkNIX0pVTVBfTEFCRUxfUkVMQVRJVkVcXG5hcmNoL3MzOTAvS2NvbmZpZzoxODQ6XFx0c2VsZWN0IEhBVkVfQVJDSF9LQVNBTlxcbmFyY2gvczM5MC9LY29uZmlnOjE4NTpcXHRzZWxlY3QgSEFWRV9BUkNIX0tBU0FOX1ZNQUxMT0NcXG5hcmNoL3MzOTAvS2NvbmZpZy0xODYtXFx0c2VsZWN0IEhBVkVfQVJDSF9LQ1NBTlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctMjYwLVxcdHNlbGVjdCBJUlFfTVNJX0xJQlxcdFxcdGlmIFBDSVxcbmFyY2gvczM5MC9LY29uZmlnOjI2MTpcXHRzZWxlY3QgS0FTQU5fVk1BTExPQyBpZiBLQVNBTlxcbmFyY2gvczM5MC9LY29uZmlnLTI2Mi1cXHRzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUFcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTY4OD1jb25maWcgS0VSTkVMX0lNQUdFX0JBU0VcXG5hcmNoL3MzOTAvS2NvbmZpZy02ODktXFx0aGV4IFxcXCJLZXJuZWwgaW1hZ2UgYmFzZSBhZGRyZXNzXFxcIlxcbmFyY2gvczM5MC9LY29uZmlnOjY5MDpcXHRyYW5nZSAweDEwMDAwMCAweDFGRkZGRkUwMDAwMDAwIGlmICFLQVNBTlxcbmFyY2gvczM5MC9LY29uZmlnOjY5MTpcXHRyYW5nZSAweDEwMDAwMCAweDFCRkZGRkUwMDAwMDAwIGlmIEtBU0FOXFxuYXJjaC9zMzkwL0tjb25maWc6NjkyOlxcdGRlZmF1bHQgMHgzRkZFMDAwMDAwMCBpZiAhS0FTQU5cXG5hcmNoL3MzOTAvS2NvbmZpZzo2OTM6XFx0ZGVmYXVsdCAweDdGRkZFMDAwMDAwMCBpZiBLQVNBTlxcbmFyY2gvczM5MC9LY29uZmlnLTY5NC1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjQwOjAwLjA4NDY3OTM5N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzA1Njg1MTM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQgZm9yIFRlc3RpbmcgYExBWllfTU1VX01PREVgKipcblxuT2theSwgc28gYEhBVkVfQVJDSF9LQVNBTmAgaXMgZGVmaW5pdGVseSBlbmFibGVkLCBnb29kIHN0YXJ0LiBOb3csIGxldCdzIGxvb2sgYXQgYExBWllfTU1VX01PREVfS1VOSVRfVEVTVGAuIEkgZm91bmQgaXQgaW4gYG1tL0tjb25maWdgLCB3aGljaCBpcyBhIGdvb2Qgc2lnbi4gVGhlIHByb21wdCB3YW50cyBtZSB0byBpZGVudGlmeSBhbnkgKnNwZWNpZmljKiBDT05GSUcgb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgZmVhdHVyZS4gU2luY2UgaXQncyBhIEtVbml0IHRlc3QsIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZW5hYmxlIGl0LiBFdmVuIHRob3VnaCBzeXprYWxsZXIgZG9lc24ndCB0eXBpY2FsbHkgcnVuIEtVbml0IHRlc3RzIHVubGVzcyBleHBsaWNpdGx5IGNvbmZpZ3VyZWQsIGhhdmluZyBpdCBlbmFibGVkICpjb3VsZCogYmUgYmVuZWZpY2lhbCwgeW91IG5ldmVyIGtub3cuIEl0J3MgYSBLVW5pdCB0ZXN0LCBzbywgSSB3aWxsIGp1c3QgZW5hYmxlIGl0LlxuXG5Ob3csIGFzIHBlciB0aGUgcHJvbXB0LCBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgYEtBU0FOYCwgYEtBU0FOX0dFTkVSSUNgLCBhbmQgYEhPVFBMVUdfQ1BVYCBhcmUgaW5jbHVkZWQgdG8gdGhvcm91Z2hseSB0ZXN0IHRoaXMgbmV3IGZlYXR1cmUsIGFuZCBlbnN1cmUgY292ZXJhZ2UuXG5cbk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgdGhpcyB0ZXN0aW5nLiBMb29raW5nIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiwgSSB3YW50IHRvIGtlZXAgYSBjbG9zZSBleWUgb246IGBhcmNoX2VudGVyX2xhenlfbW11X21vZGVgLCBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc2AsIGBhcmNoX2xlYXZlX2xhenlfbW11X21vZGVgLCBgYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlYCwgYGxhenlfbW11X29ubGluZV9jcHVgLCBhbmQgYGxhenlfbW11X29mZmxpbmVfY3B1YC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIGVudHJ5L2V4aXQgcG9pbnRzIGFuZCBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBmb3IgYExBWllfTU1VX01PREVgLlxuXG5XYWl0LCB0aGVyZSBhcmUgbW9yZSwgYW5kIG5vdCBzdGF0aWMgZWl0aGVyLiBJIHNlZSBgX19rYXNhbl9wb2lzb25fcHRlYCBhbmQgYF9fa2FzYW5fdW5wb2lzb25fcHRlYCBpbiBgbW0va2FzYW4vY29tbW9uLmNgLiBUaGVzZSBhcmUgZXhwb3J0ZWQgYW5kIGFyZSBjYWxsZWQgYnkgdGhlIGlubGluZSBmdW5jdGlvbnMsIGBrYXNhbl9wb2lzb25fcHRlYCBhbmQgYGthc2FuX3VucG9pc29uX3B0ZWAuIFRoZXkgYXJlICpleGNlbGxlbnQqIGNhbmRpZGF0ZXMgZm9yIHRlc3RpbmchIEkgd2lsbCBrZWVwIHRoZXNlIG9uIHRoZSBsaXN0LCB0b28uIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYF9fa2FzYW5fcG9pc29uX3B0ZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzQ3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjQwOjE3LjE0MTUzMjY2OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ0NzY1NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19rYXNhbl9wb2lzb25fcHRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2thc2FuL2NvbW1vbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2thc2FuL2NvbW1vbi5jPTE1NT12b2lkIF9fa2FzYW5fcG9pc29uX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9rYXNhbi9jb21tb24uYy0xNjUtXFxubW0va2FzYW4vY29tbW9uLmM6MTY2OnZvaWQgX19rYXNhbl9wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucilcXG5tbS9rYXNhbi9jb21tb24uYy0xNjcte1xcbi0tXFxubW0va2FzYW4vY29tbW9uLmMtMTcwLX1cXG5tbS9rYXNhbi9jb21tb24uYzoxNzE6RVhQT1JUX1NZTUJPTF9HUEwoX19rYXNhbl9wb2lzb25fcHRlKTtcXG5tbS9rYXNhbi9jb21tb24uYy0xNzItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjQwOjE3LjE4NjAxMjU0M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjAxNTU4MjQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipMYXp5IE1NVSBGdW5jdGlvbmFsaXR5IEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZXZhbHVhdGluZyB0aGUgZnVuY3Rpb25zIHdpdGhpbiBgYXJjaC9zMzkwL21tL2xhenlfbW11LmNgLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZXNlIGZ1bmN0aW9ucywgbGlrZSB0aGUgb25lcyBkZWFsaW5nIHdpdGggUFRFIG1hbmlwdWxhdGlvbiwgYXJlIGluZGVlZCBleHBvcnRlZC4gTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgdGhhdCBhcmUgcmVsZXZhbnQuIExvb2tpbmcgYXQgdGhlIGNvZGViYXNlLCBJIHNlZSBhIHNldCBvZiBmdW5jdGlvbnM6IGBfX2xhenlfbW11X3NldF9wdGVgLCBgX19sYXp5X21tdV9wdGVwX2dldGAsIGBfX2xhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmdgLCBgX19sYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXJgLCBgX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X3N0YXJ0YCwgYF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9jb21taXRgLCBhbmQgYF9fbGF6eV9tbXVfcHRlcF9zZXRfd3Jwcm90ZWN0YC5cblxuVGhlc2UgYXJlbid0IHN0YXRpYywgYnV0IHRoZXkgKmFyZSogY2FsbGVkIGZyb20gaW5saW5lIGZ1bmN0aW9ucyB3aXRoaW4gYHBndGFibGUuaGAuIFRoZSBxdWVzdGlvbiBiZWNvbWVzIHdoZXRoZXIgdGhlc2UgYXJlIGhvdCBwYXRoIGZ1bmN0aW9ucy4gSXQgc2VlbXMgdGhleSBhcmU7IHRoZXkncmUgY2FsbGVkIGR1cmluZyBldmVyeSBQVEUgb3BlcmF0aW9uIHdoZW4gdGhlIGxhenkgTU1VIG1vZGUgaXMgYWN0aXZlLiBIb3dldmVyLCB3YWl0LCBsYXp5IE1NVSBtb2RlIGlzIG9ubHkgZW5hYmxlZCBmb3Igc3BlY2lmaWMgb3BlcmF0aW9ucyBsaWtlIGBtYWR2aXNlYCwgYG1wcm90ZWN0YCwgYG1yZW1hcGAsIGB2bWFsbG9jYCwgYW5kIG9wZXJhdGlvbnMgd2l0aGluIGB0YXNrX21tdS5jYC4gSXQncyBub3QgYSBnbG9iYWwsIGFsd2F5cy1vbiBmZWF0dXJlLiBgaXNfbGF6eV9tbXVfYWN0aXZlKClgIGNoZWNrcyBgZ2V0X2xvd2NvcmUoKS1cdTAwM2VsYXp5X21tdV9jb3VudGAuIFNvLCB0aGVzZSBwYXJ0aWN1bGFyIGZ1bmN0aW9ucyBhcmUgb25seSBleGVjdXRlZCB3aGVuIGBsYXp5X21tdV9jb3VudCBcdTAwM2UgMGAuIFRoaXMgaXMgY2xlYXJseSBwYXJ0IG9mIHRoZSBuZXcgZmVhdHVyZS5cblxuVGhlIHByb21wdCBpbnN0cnVjdHMgbWUgdG8gYXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gQnV0LCBzaW5jZSB0aGVzZSBhcmUgdGhlIGNvcmUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBsYXp5IE1NVSBtb2RlIFBURSBvcGVyYXRpb25zLCBhbmQgdGhleSBhcmUgbm9uLXN0YXRpYywgdGhleSBhcmUgcG90ZW50aWFsIGNhbmRpZGF0ZXMuXG5cbkhvd2V2ZXIsIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBhcmUgYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXNgLiBBZnRlciBjYXJlZnVsIGNvbnNpZGVyYXRpb24sIEknbGwgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczogYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZWAsIGBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzYCwgYGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZWAsIGBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGVgLCBgbGF6eV9tbXVfb25saW5lX2NwdWAsIGBsYXp5X21tdV9vZmZsaW5lX2NwdWAsIGBfX2thc2FuX3BvaXNvbl9wdGVgLCBhbmQgYF9fa2FzYW5fdW5wb2lzb25fcHRlYC4gVGhlc2UgcmVwcmVzZW50IHRoZSBwcmltYXJ5IGNvbnRyb2wgYW5kIG1hbmFnZW1lbnQgcG9pbnRzIG9mIHRoZSBsYXp5IE1NVSBtb2RlLlxuXG5Nb3Zpbmcgb24sIEknbGwgZXhhbWluZSBgYXJjaC9zMzkwL21tL3BndGFibGUuY2AuIEkgZmluZCBgX19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydGAgYW5kIGBfX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdGAuIFRoZXNlIHdlcmUgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA4MDIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6NDA6NDMuMjAxNTk3Nzg5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzkxODQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX19wdGVwX21vZGlmeV9wcm90X3N0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9tbS9wZ3RhYmxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL21tL3BndGFibGUuYz0xNjc9RVhQT1JUX1NZTUJPTChwdGVwX3hjaGdfbGF6eSk7XFxuYXJjaC9zMzkwL21tL3BndGFibGUuYy0xNjgtXFxuYXJjaC9zMzkwL21tL3BndGFibGUuYzoxNjk6cHRlX3QgX19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmFyY2gvczM5MC9tbS9wZ3RhYmxlLmMtMTcwLVxcdFxcdFxcdFxcdHB0ZV90ICpwdGVwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjo0MDo0My4yNzU1MjUzOTdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0MDMwMDc4NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIGFuZCBGb2N1cyBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHllcywgdGhlc2UgY29uc2lkZXJhdGlvbnMgYXJlIG5vdCBzdGF0aWM7IHRoZXkgZXZvbHZlIHdpdGggdGhlIGFuYWx5c2lzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBjYXB0dXJpbmcgZXZlcnl0aGluZywgc28gSSdsbCByZXZpZXcgdGhlIGNvbmZpZ3Mgb25lIG1vcmUgdGltZS5cblxuQWxyaWdodCwgdGhlIGNvcmUgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyIGFyZSBgS0FTQU5gLCBgS0FTQU5fR0VORVJJQ2AsIGFuZCBgSE9UUExVR19DUFVgLiBJIGluaXRpYWxseSBsb29rZWQgYXQgYExBWllfTU1VX01PREVfS1VOSVRfVEVTVGAsIGJ1dCBzaW5jZSBzeXprYWxsZXIgZG9lc24ndCB0eXBpY2FsbHkgcnVuIEtVbml0IHRlc3RzIGJ5IGRlZmF1bHQsIEknbGwgc2tpcCB0aGF0IG9uZSBmb3Igbm93LiBJdCBkb2Vzbid0IGh1cnQgdG8gaW5jbHVkZSBpdCwgYnV0IGl0J3Mgbm90IGVzc2VudGlhbC5cblxuTm93LCBhIHF1aWNrIGNoZWNrIHJlZ2FyZGluZyBgTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUYC4gRG9lcyB0aGlzIHBhdGNoIGFjdHVhbGx5ICphZGQqIHRoYXQgY29uZmlnPyBMZXQncyB2ZXJpZnkgYnkgY2hlY2tpbmcgYG1tL0tjb25maWdgIGFnYWluc3QgdGhlIHBhdGNoLiBUaGUgZGlmZiBkb2Vzbid0IHNob3cgYW55IG1vZGlmaWNhdGlvbnMgdG8gYG1tL0tjb25maWdgLiBIYW5nIG9uLi4uIHRoZSBncmVwIEkgZGlkIGZvciBgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERWAgc2hvd2VkIGBMQVpZX01NVV9NT0RFX0tVTklUX1RFU1RgIGluIGBtbS9LY29uZmlnYCwgYnV0IHRoZSBwYXRjaCBkaWZmIGRvZXNuJ3QgaW5jbHVkZSBgbW0vS2NvbmZpZ2AuIEFoLCB0aGUgcGF0Y2ggZGlmZiBJIHdhcyBwcm92aWRlZDogKGZvbGxvd3MgdGhlIHBhdGNoIGRpZmYgcHJvdmlkZWQgaW4gdGhlIHByb21wdCkuIE9rYXksIHNvIGBtbS9LY29uZmlnYCBpc24ndCBtb2RpZmllZC4gSXQgbXVzdCBoYXZlIGJlZW4gYWRkZWQgaW4gYW4gZWFybGllciBwYXRjaCBvciBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIHRyZWUuIFRoZSBwcm9tcHQgc2F5cywgXCJUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluIHlvdXIgd29ya3NwYWNlLlwiIFRoaXMgbWVhbnMgdGhhdCBgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERWAgaXMgKmFscmVhZHkqIGluIGBtbS9LY29uZmlnYC4gVGhlIGN1cnJlbnQgcGF0Y2ggKmRvZXMqIGFkZCBgc2VsZWN0IEFSQ0hfSEFTX0xBWllfTU1VX01PREVgIHRvIGBhcmNoL3MzOTAvS2NvbmZpZ2AuIFRodXMsIGBBUkNIX0hBU19MQVpZX01NVV9NT0RFYCBpcyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIG9uIHMzOTAsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBleHBsaWNpdGx5IHNwZWNpZnkgaXQuXG5cblJlZ2FyZGluZyBgS0FTQU5gLCBpdCdzIGEgc3RhbmRhcmQgY29uZmlnLiBgS0FTQU5fR0VORVJJQ2AgaXMgYWxzbyBzdGFuZGFyZC4gQW5kIGBIT1RQTFVHX0NQVWAgaXMgYWxzbyBzdGFuZGFyZC5cblxuVGhlcmVmb3JlLCB0aGUgZmluYWwgb3V0cHV0IHdpbGwgYmU6XG5cbioqV29ydGhGdXp6aW5nOiB0cnVlKipcblxuKipGb2N1c1N5bWJvbHM6KipcblxuLSAgIGBhcmNoX2VudGVyX2xhenlfbW11X21vZGVgXG4tICAgYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXNgXG4tICAgYGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZWBcbi0gICBgYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlYFxuLSAgIGBsYXp5X21tdV9vbmxpbmVfY3B1YFxuLSAgIGBsYXp5X21tdV9vZmZsaW5lX2NwdWBcbi0gICBgX19rYXNhbl9wb2lzb25fcHRlYFxuLSAgIGBfX2thc2FuX3VucG9pc29uX3B0ZWBcbi0gICBgX19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydGBcbi0gICBgX19fcHRlcF9tb2RpZnlfcHJvdF9jb21taXRgXG5cbioqRW5hYmxlQ29uZmlnczoqKlxuXG4tICAgYEtBU0FOYFxuLSAgIGBLQVNBTl9HRU5FUklDYFxuLSAgIGBIT1RQTFVHX0NQVWBcblxuKipSZWFzb25pbmc6KipcblxuVGhlIHBhdGNoIGludHJvZHVjZXMgbGF6eSBNTVUgbW9kZSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBsZXZlcmFnaW5nIHRoZSBJUFRFLXJhbmdlIGZhY2lsaXR5IGZvciBiYXRjaGVkIFBURSBpbnZhbGlkYXRpb25zLiBJdCdzIGhvb2tpbmcgaW50byBrZXkgbWVtb3J5IG1hbmFnZW1lbnQgc3lzY2FsbHMgKG1hZHZpc2UsIG1wcm90ZWN0LCBtcmVtYXAsIHZtYWxsb2MpIGFuZCBDUFUgaG90cGx1ZyBwYXRocy4gQ3J1Y2lhbGx5LCBpdCBpbmNsdWRlcyBLQVNBTiBpbnN0cnVtZW50YXRpb24gZm9yIGRpcmVjdCBQVEUgYWNjZXNzIGluIGxhenkgTU1VIG1vZGUuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCBrZXJuZWwgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyByaXBlIGZvciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjE2MSwiT3V0cHV0VG9rZW5zIjoyNjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjQxOjE1LjY3ODUzNjMxMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODY1MjE0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS0FTQU5cIixcbiAgICBcIktBU0FOX0dFTkVSSUNcIixcbiAgICBcIkhPVFBMVUdfQ1BVXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlXCIsXG4gICAgXCJhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzXCIsXG4gICAgXCJhcmNoX2xlYXZlX2xhenlfbW11X21vZGVcIixcbiAgICBcImFyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZVwiLFxuICAgIFwibGF6eV9tbXVfb25saW5lX2NwdVwiLFxuICAgIFwibGF6eV9tbXVfb2ZmbGluZV9jcHVcIixcbiAgICBcIl9fa2FzYW5fcG9pc29uX3B0ZVwiLFxuICAgIFwiX19rYXNhbl91bnBvaXNvbl9wdGVcIixcbiAgICBcIl9fX3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnRcIixcbiAgICBcIl9fX3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBsYXp5IE1NVSBtb2RlIGZvciBzMzkwIGFyY2hpdGVjdHVyZSwgd2hpY2ggYmF0Y2hlcyBQVEUgaW52YWxpZGF0aW9ucyB1c2luZyB0aGUgSVBURS1yYW5nZSBmYWNpbGl0eS4gSXQgaG9va3MgaW50byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c2NhbGxzIChtYWR2aXNlLCBtcHJvdGVjdCwgbXJlbWFwLCB2bWFsbG9jKSBhbmQgQ1BVIGhvdHBsdWcgcGF0aHMuIEl0IGFsc28gYWRkcyBLQVNBTiBpbnN0cnVtZW50YXRpb24gZm9yIGRpcmVjdCBQVEUgYWNjZXNzZXMgaW4gbGF6eSBNTVUgbW9kZS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBhbmQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLQVNBTlwiLFxuICAgIFwiS0FTQU5fR0VORVJJQ1wiLFxuICAgIFwiSE9UUExVR19DUFVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmNoX2VudGVyX2xhenlfbW11X21vZGVcIixcbiAgICBcImFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXNcIixcbiAgICBcImFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZVwiLFxuICAgIFwiYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlXCIsXG4gICAgXCJsYXp5X21tdV9vbmxpbmVfY3B1XCIsXG4gICAgXCJsYXp5X21tdV9vZmZsaW5lX2NwdVwiLFxuICAgIFwiX19rYXNhbl9wb2lzb25fcHRlXCIsXG4gICAgXCJfX2thc2FuX3VucG9pc29uX3B0ZVwiLFxuICAgIFwiX19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydFwiLFxuICAgIFwiX19fcHRlcF9tb2RpZnlfcHJvdF9jb21taXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGxhenkgTU1VIG1vZGUgZm9yIHMzOTAgYXJjaGl0ZWN0dXJlLCB3aGljaCBiYXRjaGVzIFBURSBpbnZhbGlkYXRpb25zIHVzaW5nIHRoZSBJUFRFLXJhbmdlIGZhY2lsaXR5LiBJdCBob29rcyBpbnRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzY2FsbHMgKG1hZHZpc2UsIG1wcm90ZWN0LCBtcmVtYXAsIHZtYWxsb2MpIGFuZCBDUFUgaG90cGx1ZyBwYXRocy4gSXQgYWxzbyBhZGRzIEtBU0FOIGluc3RydW1lbnRhdGlvbiBmb3IgZGlyZWN0IFBURSBhY2Nlc3NlcyBpbiBsYXp5IE1NVSBtb2RlLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGFuZCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjo0MToxNS44MDcxOTUzMTZaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NzkyNTgxNjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6NDE6MTUuODA3NjQzMjk2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI2NzkyMTMwMDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbGF6eSBNTVUgbW9kZSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIHRvIGJ1ZmZlciBwYWdlIHRhYmxlIGVudHJ5IChQVEUpIHVwZGF0ZXMuIEl0IGFsc28gZXhwbGljaXRseSBhZGRzIEtBU0FOIHBvaXNvbmluZy91bnBvaXNvbmluZyB0byBkZXRlY3QgaW52YWxpZCBkaXJlY3QgYWNjZXNzZXMgdG8gUFRFcyB3aGlsZSB0aGUgbGF6eSBNTVUgbW9kZSBpcyBhY3RpdmUsIGludHJvZHVjaW5nIGEgbmV3IEtBU0FOIGJ1ZyB0eXBlIChgbGF6eS1tbXUtcHRlLWFjY2Vzc2ApLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgdGFibGUgb3BlcmF0aW9ucy4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgYWxsIG5ld2x5IGFsbG9jYXRlZCBzdHJ1Y3R1cmVzIChlLmcuLCBgc3RydWN0IGlwdGVfcmFuZ2VgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGUuZy4sIHZpYSB6ZXJvLWFsbG9jYXRpb24gYW5kIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIG9mIHRoZSBgY2FjaGVgIGFycmF5IHRvIGBQVEVfUE9JU09OYCkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGlzIHBlcmZlY3RseSBzdWl0ZWQgYW5kIGV4cGxpY2l0bHkgZW5oYW5jZWQgYnkgdGhpcyBwYXRjaCB0byBjYXRjaCBhbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzZjMTI2NzNmMzVkZGYyYTE0NzkxMTY0YjVkY2Y5ZDRjM2NmNTRjMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDEyOjM3OjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcgYi9hcmNoL3MzOTAvS2NvbmZpZ1xuaW5kZXggODQ0MDRlNjc3OGQ1MC4uNzg0NjMzMmRjZDBhNiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9LY29uZmlnXG4rKysgYi9hcmNoL3MzOTAvS2NvbmZpZ1xuQEAgLTk3LDYgKzk3LDcgQEAgY29uZmlnIFMzOTBcbiBcdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXG4gXHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxuIFx0c2VsZWN0IEFSQ0hfSEFTX0tDT1ZcbitcdHNlbGVjdCBBUkNIX0hBU19MQVpZX01NVV9NT0RFXG4gXHRzZWxlY3QgQVJDSF9IQVNfTUVNQkFSUklFUl9TWU5DX0NPUkVcbiBcdHNlbGVjdCBBUkNIX0hBU19NRU1fRU5DUllQVFxuIFx0c2VsZWN0IEFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QU1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sYXp5X21tdS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xhenlfbW11Lmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45ODM2NmU5ZGU5YmMzXG4tLS0gL2Rldi9udWxsXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbGF6eV9tbXUuaFxuQEAgLTAsMCArMSw5IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbisjaWZuZGVmIF9fTEFaWV9NTVVfSFxuKyNkZWZpbmUgX19MQVpZX01NVV9IXG4rXG4rdm9pZCBsYXp5X21tdV9vbmxpbmVfYm9vdF9jcHUodm9pZCk7XG4raW50IGxhenlfbW11X29ubGluZV9jcHUoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgY3B1KTtcbit2b2lkIGxhenlfbW11X29mZmxpbmVfY3B1KHVuc2lnbmVkIGludCBjcHUpO1xuK1xuKyNlbmRpZiAvKiBfX0xBWllfTU1VX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaFxuaW5kZXggM2IzZWNjNjQ3OTkzZi4uZGJhMjM2NjY0ZGE5MCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmhcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmhcbkBAIC0xNjMsNyArMTYzLDcgQEAgc3RydWN0IGxvd2NvcmUge1xuIFx0X19zMzJcdHByZWVtcHRfY291bnQ7XHRcdFx0LyogMHgwM2E4ICovXG4gXHRfX3UzMlx0c3BpbmxvY2tfbG9ja3ZhbDtcdFx0LyogMHgwM2FjICovXG4gXHRfX3UzMlx0c3BpbmxvY2tfaW5kZXg7XHRcdFx0LyogMHgwM2IwICovXG4tXHRfX3U4XHRwYWRfMHgwM2I0WzB4MDNiOC0weDAzYjRdO1x0LyogMHgwM2I0ICovXG4rXHRfX3MzMlx0bGF6eV9tbXVfY291bnQ7XHRcdFx0LyogMHgwM2I0ICovXG4gXHRfX3U2NFx0cGVyY3B1X29mZnNldDtcdFx0XHQvKiAweDAzYjggKi9cbiBcdF9fdThcdHBlcmNwdV9yZWdpc3RlcjtcdFx0LyogMHgwM2MwICovXG4gXHRfX3U4XHRwYWRfMHgwM2MxWzB4MDQwMC0weDAzYzFdO1x0LyogMHgwM2MxICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDg1OWNlN2M3ZDQ1NDQuLjFlOGE3OTk4OWVkNmUgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtMzksNiArMzksNjQgQEAgZW51bSB7XG4gXG4gZXh0ZXJuIGF0b21pY19sb25nX3QgZGlyZWN0X3BhZ2VzX2NvdW50W1BHX0RJUkVDVF9NQVBfTUFYXTtcbiBcbitib29sIF9fbGF6eV9tbXVfcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBpbnQgKnJlcyk7XG4rYm9vbCBfX2xhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcih1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKTtcbitib29sIF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKTtcbitib29sIF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9jb21taXQodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3Qgb2xkX3B0ZSwgcHRlX3QgcHRlKTtcbitib29sIF9fbGF6eV9tbXVfcHRlcF9zZXRfd3Jwcm90ZWN0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApO1xuK2Jvb2wgX19sYXp5X21tdV9zZXRfcHRlKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpO1xuK2Jvb2wgX19sYXp5X21tdV9wdGVwX2dldChwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcyk7XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX2xhenlfbW11X2FjdGl2ZSh2b2lkKVxuK3tcbitcdGlmIChfX2lzX2RlZmluZWQoX19ERUNPTVBSRVNTT1IpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoIWdldF9sb3djb3JlKCktXHUwMDNlbGF6eV9tbXVfY291bnQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgaW5saW5lXG4rYm9vbCBsYXp5X21tdV9wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIGludCAqcmVzKVxuK3tcbitcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdHJldHVybiBfX2xhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoYWRkciwgcHRlcCwgcmVzKTtcbit9XG4rXG4rc3RhdGljIGlubGluZVxuK2Jvb2wgbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpXG4re1xuK1x0aWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0cmV0dXJuIF9fbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKGFkZHIsIHB0ZXAsIHJlcyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmVcbitib29sIGxhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcylcbit7XG4rXHRpZiAoIWlzX2xhenlfbW11X2FjdGl2ZSgpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRyZXR1cm4gX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X3N0YXJ0KGFkZHIsIHB0ZXAsIHJlcyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmVcbitib29sIGxhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4rXHRcdFx0XHQgICAgICBwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpXG4re1xuK1x0aWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0cmV0dXJuIF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoYWRkciwgcHRlcCwgb2xkX3B0ZSwgcHRlKTtcbit9XG4rXG4rc3RhdGljIGlubGluZVxuK2Jvb2wgbGF6eV9tbXVfcHRlcF9zZXRfd3Jwcm90ZWN0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXG4re1xuK1x0aWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0cmV0dXJuIF9fbGF6eV9tbXVfcHRlcF9zZXRfd3Jwcm90ZWN0KGFkZHIsIHB0ZXApO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3BhZ2VfY291bnQoaW50IGxldmVsLCBsb25nIGNvdW50KVxuIHtcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUk9DX0ZTKSlcbkBAIC05NzgsMTcgKzEwMzYsMzggQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wbWQocG1kX3QgKnBtZHAsIHBtZF90IHBtZClcbiBcdFdSSVRFX09OQ0UoKnBtZHAsIHBtZCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpXG4rc3RhdGljIGlubGluZSB2b2lkIF9fc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxuIHtcbiBcdGlmIChwdGVfcHJlc2VudChwdGUpKVxuIFx0XHRwdGUgPSBjbGVhcl9wdGVfYml0KHB0ZSwgX19wZ3Byb3QoX1BBR0VfVU5VU0VEKSk7XG4gXHRXUklURV9PTkNFKCpwdGVwLCBwdGUpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxuK3tcbitcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkgfHwgIV9fbGF6eV9tbXVfc2V0X3B0ZShwdGVwLCBwdGUpKVxuK1x0XHRfX3NldF9wdGUocHRlcCwgcHRlKTtcbit9XG4rXG4rI2RlZmluZSBwdGVwX2dldF9sb2NrbGVzcyBwdGVwX2dldF9sb2NrbGVzc1xuK3N0YXRpYyBpbmxpbmUgX19ub19zYW5pdGl6ZV9hZGRyZXNzIHB0ZV90IHB0ZXBfZ2V0X2xvY2tsZXNzKHB0ZV90ICpwdGVwKVxuK3tcbitcdHJldHVybiBSRUFEX09OQ0UoKnB0ZXApO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHB0ZV90IF9fcHRlcF9nZXQocHRlX3QgKnB0ZXApXG4re1xuK1x0cmV0dXJuIFJFQURfT05DRSgqcHRlcCk7XG4rfVxuK1xuICNkZWZpbmUgcHRlcF9nZXQgcHRlcF9nZXRcbiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfZ2V0KHB0ZV90ICpwdGVwKVxuIHtcbi1cdHJldHVybiBSRUFEX09OQ0UoKnB0ZXApO1xuK1x0cHRlX3QgcmVzO1xuK1xuK1x0aWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSB8fCAhX19sYXp5X21tdV9wdGVwX2dldChwdGVwLCBcdTAwMjZyZXMpKVxuK1x0XHRyZXMgPSBfX3B0ZXBfZ2V0KHB0ZXApO1xuK1x0cmV0dXJuIHJlcztcbiB9XG4gXG4gI2RlZmluZSBwbWRwX2dldCBwbWRwX2dldFxuQEAgLTExODEsNiArMTI2MCwxNSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19wdGVwX2lwdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgbnIsXG4gXHR9IHdoaWxlIChuciAhPSAyNTUpO1xuIH1cbiBcbit2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4rXHRcdFx0XHRcdHB0ZV90ICpwdGUpO1xuKyNkZWZpbmUgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcyBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzXG4rXG4rdm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGUodm9pZCk7XG4rdm9pZCBhcmNoX2xlYXZlX2xhenlfbW11X21vZGUodm9pZCk7XG4rdm9pZCBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUodm9pZCk7XG4rXG4gLypcbiAgKiBUaGlzIGlzIGhhcmQgdG8gdW5kZXJzdGFuZC4gcHRlcF9nZXRfYW5kX2NsZWFyIGFuZCBwdGVwX2NsZWFyX2ZsdXNoXG4gICogYm90aCBjbGVhciB0aGUgVExCIGZvciB0aGUgdW5tYXBwZWQgcHRlLiBUaGUgcmVhc29uIGlzIHRoYXRcbkBAIC0xMjAxLDEwICsxMjg5LDE2IEBAIHB0ZV90IHB0ZXBfeGNoZ19sYXp5KHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKiwgcHRlX3QpO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxuIHtcbi1cdHB0ZV90IHB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xuK1x0cHRlX3QgcHRlO1xuK1x0aW50IHJlcztcbiBcbi1cdHB0ZSA9IHB0ZXBfeGNoZ19kaXJlY3Qodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGVwLCBwdGVfbWtvbGQocHRlKSk7XG4tXHRyZXR1cm4gcHRlX3lvdW5nKHB0ZSk7XG4rXHRpZiAoIWxhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoYWRkciwgcHRlcCwgXHUwMDI2cmVzKSkge1xuK1x0XHRwdGUgPSBfX3B0ZXBfZ2V0KHB0ZXApO1xuK1x0XHRwdGUgPSBwdGVfbWtvbGQocHRlKTtcbitcdFx0cHRlID0gcHRlcF94Y2hnX2RpcmVjdCh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXAsIHB0ZSk7XG4rXHRcdHJlcyA9IHB0ZV95b3VuZyhwdGUpO1xuK1x0fVxuK1x0cmV0dXJuIHJlcztcbiB9XG4gXG4gI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSX1lPVU5HX0ZMVVNIXG5AQCAtMTIyMCw3ICsxMzE0LDggQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4ge1xuIFx0cHRlX3QgcmVzO1xuIFxuLVx0cmVzID0gcHRlcF94Y2hnX2xhenkobW0sIGFkZHIsIHB0ZXAsIF9fcHRlKF9QQUdFX0lOVkFMSUQpKTtcbitcdGlmICghbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKGFkZHIsIHB0ZXAsIFx1MDAyNnJlcykpXG4rXHRcdHJlcyA9IHB0ZXBfeGNoZ19sYXp5KG1tLCBhZGRyLCBwdGVwLCBfX3B0ZShfUEFHRV9JTlZBTElEKSk7XG4gXHRwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcihtbSwgYWRkciwgcmVzKTtcbiBcdC8qIEF0IHRoaXMgcG9pbnQgdGhlIHJlZmVyZW5jZSB0aHJvdWdoIHRoZSBtYXBwaW5nIGlzIHN0aWxsIHByZXNlbnQgKi9cbiBcdGlmIChtbV9pc19wcm90ZWN0ZWQobW0pIFx1MDAyNlx1MDAyNiBwdGVfcHJlc2VudChyZXMpKVxuQEAgLTEyMjksOSArMTMyNCwyOCBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiB9XG4gXG4gI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX01PRElGWV9QUk9UX1RSQU5TQUNUSU9OXG4tcHRlX3QgcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKik7XG4tdm9pZCBwdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyxcbi1cdFx0XHQgICAgIHB0ZV90ICosIHB0ZV90LCBwdGVfdCk7XG4rcHRlX3QgX19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKik7XG4rdm9pZCBfX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyxcbitcdFx0XHRcdHB0ZV90ICosIHB0ZV90LCBwdGVfdCk7XG4rXG4rc3RhdGljIGlubGluZVxuK3B0ZV90IHB0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxuK3tcbitcdHB0ZV90IHJlcztcbitcbitcdGlmICghbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydChhZGRyLCBwdGVwLCBcdTAwMjZyZXMpKVxuK1x0XHRyZXMgPSBfX19wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHZtYSwgYWRkciwgcHRlcCk7XG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbitzdGF0aWMgaW5saW5lXG4rdm9pZCBwdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdCAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IG9sZF9wdGUsIHB0ZV90IHB0ZSlcbit7XG4rXHRpZiAoIWxhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KGFkZHIsIHB0ZXAsIG9sZF9wdGUsIHB0ZSkpXG4rXHRcdF9fX3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHZtYSwgYWRkciwgcHRlcCwgb2xkX3B0ZSwgcHRlKTtcbit9XG4gXG4gI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSX0ZMVVNIXG4gc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuQEAgLTEyNjEsMTEgKzEzNzUsMTMgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXJfZnVsbChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiB7XG4gXHRwdGVfdCByZXM7XG4gXG4tXHRpZiAoZnVsbCkge1xuLVx0XHRyZXMgPSBwdGVwX2dldChwdGVwKTtcbi1cdFx0c2V0X3B0ZShwdGVwLCBfX3B0ZShfUEFHRV9JTlZBTElEKSk7XG4tXHR9IGVsc2Uge1xuLVx0XHRyZXMgPSBwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpO1xuK1x0aWYgKCFsYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIoYWRkciwgcHRlcCwgXHUwMDI2cmVzKSkge1xuK1x0XHRpZiAoZnVsbCkge1xuK1x0XHRcdHJlcyA9IF9fcHRlcF9nZXQocHRlcCk7XG4rXHRcdFx0X19zZXRfcHRlKHB0ZXAsIF9fcHRlKF9QQUdFX0lOVkFMSUQpKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRyZXMgPSBwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpO1xuK1x0XHR9XG4gXHR9XG4gXHRwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcihtbSwgYWRkciwgcmVzKTtcbiBcdC8qIEF0IHRoaXMgcG9pbnQgdGhlIHJlZmVyZW5jZSB0aHJvdWdoIHRoZSBtYXBwaW5nIGlzIHN0aWxsIHByZXNlbnQgKi9cbkBAIC0xMjkxLDEwICsxNDA3LDE1IEBAIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9nZXRfYW5kX2NsZWFyX2Z1bGwoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gc3RhdGljIGlubGluZSB2b2lkIHB0ZXBfc2V0X3dycHJvdGVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXG4ge1xuLVx0cHRlX3QgcHRlID0gcHRlcF9nZXQocHRlcCk7XG4rXHRwdGVfdCBwdGU7XG4gXG4tXHRpZiAocHRlX3dyaXRlKHB0ZSkpXG4tXHRcdHB0ZXBfeGNoZ19sYXp5KG1tLCBhZGRyLCBwdGVwLCBwdGVfd3Jwcm90ZWN0KHB0ZSkpO1xuK1x0aWYgKCFsYXp5X21tdV9wdGVwX3NldF93cnByb3RlY3QoYWRkciwgcHRlcCkpIHtcbitcdFx0cHRlID0gX19wdGVwX2dldChwdGVwKTtcbitcdFx0aWYgKHB0ZV93cml0ZShwdGUpKSB7XG4rXHRcdFx0cHRlID0gcHRlX3dycHJvdGVjdChwdGUpO1xuK1x0XHRcdHB0ZXBfeGNoZ19sYXp5KG1tLCBhZGRyLCBwdGVwLCBwdGUpO1xuK1x0XHR9XG4rXHR9XG4gfVxuIFxuIC8qXG5AQCAtMTMyNyw3ICsxNDQ4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9maXhfc3B1cmlvdXNfZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHQgKiBQVEUgZG9lcyBub3QgaGF2ZSBfUEFHRV9QUk9URUNUIHNldCwgdG8gYXZvaWQgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQuXG4gXHQgKiBBIGxvY2FsIFJEUCBjYW4gYmUgdXNlZCB0byBkbyB0aGUgZmx1c2guXG4gXHQgKi9cbi1cdGlmIChjcHVfaGFzX3JkcCgpIFx1MDAyNlx1MDAyNiAhKHB0ZV92YWwocHRlcF9nZXQocHRlcCkpIFx1MDAyNiBfUEFHRV9QUk9URUNUKSlcbitcdGlmIChjcHVfaGFzX3JkcCgpIFx1MDAyNlx1MDAyNiAhKHB0ZV92YWwoX19wdGVwX2dldChwdGVwKSkgXHUwMDI2IF9QQUdFX1BST1RFQ1QpKVxuIFx0XHRfX3B0ZXBfcmRwKGFkZHJlc3MsIHB0ZXAsIDEpO1xuIH1cbiAjZGVmaW5lIGZsdXNoX3RsYl9maXhfc3B1cmlvdXNfZmF1bHQgZmx1c2hfdGxiX2ZpeF9zcHVyaW91c19mYXVsdFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuY1xuaW5kZXggYjYwMjg0MzI4ZmUzZC4uZjVhM2M5ZTFiNmI4OCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuY1xuKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jXG5AQCAtNzcsNiArNzcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9tYWNjZXNzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9hc20tb2Zmc2V0cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL2xhenlfbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcImVudHJ5LmhcIlxuIFxuIC8qXG5AQCAtMTAxMiw1ICsxMDEzLDYgQEAgdm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxuIFxuIHZvaWQgX19pbml0IGFyY2hfY3B1X2ZpbmFsaXplX2luaXQodm9pZClcbiB7XG4rXHRsYXp5X21tdV9vbmxpbmVfYm9vdF9jcHUoKTtcbiBcdHNjbHBfaW5pdCgpO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuY1xuaW5kZXggMGJhN2Y4OWI4MTYxMS4uMGE4MjZiYmFmMWRkYyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmNcbisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmNcbkBAIC01OSw2ICs1OSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RvcG9sb2d5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdmRzby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL21hY2Nlc3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS9sYXp5X21tdS5oXHUwMDNlXG4gI2luY2x1ZGUgXCJlbnRyeS5oXCJcbiBcbiBlbnVtIHtcbkBAIC04NjYsNiArODY3LDExIEBAIGludCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRpZGxlKVxuIFx0cmMgPSBwY3B1X2FsbG9jX2xvd2NvcmUocGNwdSwgY3B1KTtcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIHJjO1xuK1x0cmMgPSBsYXp5X21tdV9vbmxpbmVfY3B1KEdGUF9LRVJORUwsIGNwdSk7XG4rXHRpZiAocmMpIHtcbitcdFx0cGNwdV9mcmVlX2xvd2NvcmUocGNwdSwgY3B1KTtcbitcdFx0cmV0dXJuIHJjO1xuK1x0fVxuIFx0LypcbiBcdCAqIE1ha2Ugc3VyZSBnbG9iYWwgY29udHJvbCByZWdpc3RlciBjb250ZW50cyBkbyBub3QgY2hhbmdlXG4gXHQgKiB1bnRpbCBuZXcgQ1BVIGhhcyBpbml0aWFsaXplZCBjb250cm9sIHJlZ2lzdGVycy5cbkBAIC05MjEsNiArOTI3LDcgQEAgdm9pZCBfX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSlcbiBcdHBjcHUgPSBwZXJfY3B1X3B0cihcdTAwMjZwY3B1X2RldmljZXMsIGNwdSk7XG4gXHR3aGlsZSAoIXBjcHVfc3RvcHBlZChwY3B1KSlcbiBcdFx0Y3B1X3JlbGF4KCk7XG4rXHRsYXp5X21tdV9vZmZsaW5lX2NwdShjcHUpO1xuIFx0cGNwdV9mcmVlX2xvd2NvcmUocGNwdSwgY3B1KTtcbiBcdGNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbW1fY3B1bWFzayhcdTAwMjZpbml0X21tKSk7XG4gXHRjcHVtYXNrX2NsZWFyX2NwdShjcHUsIFx1MDAyNmluaXRfbW0uY29udGV4dC5jcHVfYXR0YWNoX21hc2spO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9NYWtlZmlsZSBiL2FyY2gvczM5MC9tbS9NYWtlZmlsZVxuaW5kZXggMTkzODk5YzM5Y2E3Zi4uOTZjYWMzZTk5ZjUxNiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9tbS9NYWtlZmlsZVxuKysrIGIvYXJjaC9zMzkwL21tL01ha2VmaWxlXG5AQCAtNCw2ICs0LDcgQEBcbiAjXG4gXG4gb2JqLXlcdFx0Oj0gaW5pdC5vIGZhdWx0Lm8gZXh0bWVtLm8gbW1hcC5vIHZtZW0ubyBtYWNjZXNzLm9cbitvYmoteVx0XHQ6PSBpbml0Lm8gZmF1bHQubyBleHRtZW0ubyBtbWFwLm8gdm1lbS5vIG1hY2Nlc3MubyBsYXp5X21tdS5vXG4gb2JqLXlcdFx0Kz0gcGFnZS1zdGF0ZXMubyBwYWdlYXR0ci5vIHBndGFibGUubyBwZ2FsbG9jLm8gZXh0YWJsZS5vXG4gXG4gb2JqLSQoQ09ORklHX0NNTSlcdFx0Kz0gY21tLm9cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYyBiL2FyY2gvczM5MC9tbS9sYXp5X21tdS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2UzYTQxMTVlYTA0OFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvYXJjaC9zMzkwL21tL2xhenlfbW11LmNcbkBAIC0wLDAgKzEsNDE4IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wZ3RhYmxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rYXNhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL2ZhY2lsaXR5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vbGF6eV9tbXUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2t1bml0L3Zpc2liaWxpdHkuaFx1MDAzZVxuK1xuKyNkZWZpbmUgUFRFX1BPSVNPTlx0X1BBR0VfTEFSR0VcbitcbitzdHJ1Y3QgaXB0ZV9yYW5nZSB7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbitcdHVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyO1xuK1x0dW5zaWduZWQgbG9uZyBiYXNlX2VuZDtcbitcdHB0ZV90ICpiYXNlX3B0ZTtcbitcdHB0ZV90ICpzdGFydF9wdGU7XG4rXHRwdGVfdCAqZW5kX3B0ZTtcbitcdHB0ZV90IGNhY2hlW1BUUlNfUEVSX1BURV07XG4rfTtcbitcbitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGlwdGVfcmFuZ2UgKiwgaXB0ZV9yYW5nZSk7XG4rXG4rc3RhdGljIGludCBjb3VudF9jb250aWd1b3VzKHB0ZV90ICpzdGFydCwgcHRlX3QgKmVuZCwgYm9vbCAqdmFsaWQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBwYWdlX2ludmFsaWRfYml0O1xuK1x0cHRlX3QgKnB0ZXAsIHB0ZTtcbitcbitcdHB0ZSA9IF9fcHRlcF9nZXQoc3RhcnQpO1xuK1x0cGFnZV9pbnZhbGlkX2JpdCA9IHB0ZV92YWwocHRlKSBcdTAwMjYgX1BBR0VfSU5WQUxJRDtcbitcbitcdGZvciAocHRlcCA9IHN0YXJ0ICsgMTsgcHRlcCBcdTAwM2MgZW5kOyBwdGVwKyspIHtcbitcdFx0cHRlID0gX19wdGVwX2dldChwdGVwKTtcbitcdFx0aWYgKChwdGVfdmFsKHB0ZSkgXHUwMDI2IF9QQUdFX0lOVkFMSUQpICE9IHBhZ2VfaW52YWxpZF9iaXQpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHQqdmFsaWQgPSAhKHBhZ2VfaW52YWxpZF9iaXQpO1xuK1x0cmV0dXJuIHB0ZXAgLSBzdGFydDtcbit9XG4rXG4rc3RhdGljIHZvaWQgX19pbnZhbGlkYXRlX3B0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdFx0ICAgaW50IG5yX3B0ZXMsIHB0ZV90ICpwdGVwKVxuK3tcbitcdGF0b21pY19pbmMoXHUwMDI2bW0tXHUwMDNlY29udGV4dC5mbHVzaF9jb3VudCk7XG4rXHRpZiAoY3B1X2hhc190bGJfbGMoKSBcdTAwMjZcdTAwMjYgY3B1bWFza19lcXVhbChtbV9jcHVtYXNrKG1tKSwgY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKSlcbitcdFx0X19wdGVwX2lwdGVfcmFuZ2UoYWRkciwgbnJfcHRlcyAtIDEsIHB0ZXAsIElQVEVfTE9DQUwpO1xuK1x0ZWxzZVxuK1x0XHRfX3B0ZXBfaXB0ZV9yYW5nZShhZGRyLCBucl9wdGVzIC0gMSwgcHRlcCwgSVBURV9HTE9CQUwpO1xuK1x0YXRvbWljX2RlYyhcdTAwMjZtbS1cdTAwM2Vjb250ZXh0LmZsdXNoX2NvdW50KTtcbit9XG4rXG4rc3RhdGljIGludCBpbnZhbGlkYXRlX3B0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdFx0cHRlX3QgKnN0YXJ0LCBwdGVfdCAqZW5kKVxuK3tcbitcdGludCBucl9wdGVzO1xuK1x0Ym9vbCB2YWxpZDtcbitcbitcdG5yX3B0ZXMgPSBjb3VudF9jb250aWd1b3VzKHN0YXJ0LCBlbmQsIFx1MDAyNnZhbGlkKTtcbitcdGlmICh2YWxpZClcbitcdFx0X19pbnZhbGlkYXRlX3B0ZV9yYW5nZShtbSwgYWRkciwgbnJfcHRlcywgc3RhcnQpO1xuK1xuK1x0cmV0dXJuIG5yX3B0ZXM7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHNldF9wdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHQgIHB0ZV90ICpzdGFydCwgcHRlX3QgKmVuZCwgcHRlX3QgKmNhY2hlKVxuK3tcbitcdGludCBucl9wdGVzLCBucl90b3RhbCA9IGVuZCAtIHN0YXJ0O1xuK1x0cHRlX3QgKnB0ZXAgPSBzdGFydDtcbitcdGludCBpO1xuK1xuK1x0a2FzYW5fdW5wb2lzb25fcHRlKHN0YXJ0LCBucl90b3RhbCk7XG4rXHR3aGlsZSAocHRlcCBcdTAwM2MgZW5kKSB7XG4rXHRcdG5yX3B0ZXMgPSBpbnZhbGlkYXRlX3B0ZV9yYW5nZShtbSwgYWRkciwgcHRlcCwgZW5kKTtcbitcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcHRlczsgaSsrLCBwdGVwKyssIGNhY2hlKyspIHtcbitcdFx0XHRfX3NldF9wdGUocHRlcCwgKmNhY2hlKTtcbitcdFx0XHQqY2FjaGUgPSBfX3B0ZShQVEVfUE9JU09OKTtcbitcdFx0fVxuK1xuK1x0XHRhZGRyICs9IG5yX3B0ZXMgKiBQQUdFX1NJWkU7XG4rXHR9XG4rXHRrYXNhbl9wb2lzb25fcHRlKHN0YXJ0LCBucl90b3RhbCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVudGVyX2lwdGVfbm9yYW5nZSh2b2lkKVxuK3tcbitcdHN0cnVjdCBpcHRlX3JhbmdlIF9fbWF5YmVfdW51c2VkICpyYW5nZTtcbitcbitcdGlmICghdGVzdF9mYWNpbGl0eSgxMykpXG4rXHRcdHJldHVybjtcbitcbitcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbitcbitcdHJhbmdlID0gZ2V0X2NwdV92YXIoaXB0ZV9yYW5nZSk7XG4rXHRnZXRfbG93Y29yZSgpLVx1MDAzZWxhenlfbW11X2NvdW50Kys7XG4rXG4rXHRsb2NhbF9iaF9lbmFibGUoKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZW50ZXJfaXB0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHB0ZV90ICpwdGUpXG4re1xuK1x0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xuK1x0dW5zaWduZWQgaW50IG5yX3B0ZXM7XG4rXG4rXHRpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4rXG4rXHRyYW5nZSA9IGdldF9jcHVfdmFyKGlwdGVfcmFuZ2UpO1xuK1x0Z2V0X2xvd2NvcmUoKS1cdTAwM2VsYXp5X21tdV9jb3VudCsrO1xuK1xuK1x0aWYgKG1tX2lzX3Byb3RlY3RlZChtbSkpIHtcbitcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHJhbmdlLVx1MDAzZW1tID0gbW07XG4rXHRyYW5nZS1cdTAwM2ViYXNlX2FkZHIgPSBhZGRyO1xuK1x0cmFuZ2UtXHUwMDNlYmFzZV9lbmQgPSBlbmQ7XG4rXHRyYW5nZS1cdTAwM2ViYXNlX3B0ZSA9IHB0ZTtcbitcbitcdG5yX3B0ZXMgPSAocmFuZ2UtXHUwMDNlYmFzZV9lbmQgLSByYW5nZS1cdTAwM2ViYXNlX2FkZHIpIC8gUEFHRV9TSVpFO1xuK1x0a2FzYW5fcG9pc29uX3B0ZShyYW5nZS1cdTAwM2ViYXNlX3B0ZSwgbnJfcHRlcyk7XG4rXG4rXHRsb2NhbF9iaF9lbmFibGUoKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbGVhdmVfaXB0ZV9yYW5nZSh2b2lkKVxuK3tcbitcdHB0ZV90ICpwdGVwLCAqc3RhcnQsICpzdGFydF9jYWNoZSwgKmNhY2hlO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydF9hZGRyLCBhZGRyO1xuK1x0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xuK1x0dW5zaWduZWQgaW50IG5yX3B0ZXM7XG4rXHRpbnQgc3RhcnRfaWR4O1xuK1xuK1x0aWYgKCF0ZXN0X2ZhY2lsaXR5KDEzKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfcHJlZW1wdGlvbl9kaXNhYmxlZCgpO1xuK1x0cmFuZ2UgPSB0aGlzX2NwdV9yZWFkKGlwdGVfcmFuZ2UpO1xuK1x0aWYgKCFyYW5nZS1cdTAwM2VtbSlcbitcdFx0Z290byBub3JhbmdlO1xuK1x0aWYgKCFyYW5nZS1cdTAwM2VzdGFydF9wdGUpXG4rXHRcdGdvdG8gZG9uZTtcbitcbitcdHN0YXJ0ID0gcmFuZ2UtXHUwMDNlc3RhcnRfcHRlO1xuK1x0c3RhcnRfaWR4ID0gcmFuZ2UtXHUwMDNlc3RhcnRfcHRlIC0gcmFuZ2UtXHUwMDNlYmFzZV9wdGU7XG4rXHRzdGFydF9hZGRyID0gcmFuZ2UtXHUwMDNlYmFzZV9hZGRyICsgc3RhcnRfaWR4ICogUEFHRV9TSVpFO1xuK1x0YWRkciA9IHN0YXJ0X2FkZHI7XG4rXHRzdGFydF9jYWNoZSA9IFx1MDAyNnJhbmdlLVx1MDAzZWNhY2hlW3N0YXJ0X2lkeF07XG4rXHRjYWNoZSA9IHN0YXJ0X2NhY2hlO1xuK1x0Zm9yIChwdGVwID0gc3RhcnQ7IHB0ZXAgXHUwMDNjIHJhbmdlLVx1MDAzZWVuZF9wdGU7IHB0ZXArKywgY2FjaGUrKywgYWRkciArPSBQQUdFX1NJWkUpIHtcbitcdFx0aWYgKHB0ZV92YWwoKmNhY2hlKSA9PSBQVEVfUE9JU09OKSB7XG4rXHRcdFx0aWYgKHN0YXJ0KSB7XG4rXHRcdFx0XHRzZXRfcHRlX3JhbmdlKHJhbmdlLVx1MDAzZW1tLCBzdGFydF9hZGRyLCBzdGFydCwgcHRlcCwgc3RhcnRfY2FjaGUpO1xuK1x0XHRcdFx0c3RhcnQgPSBOVUxMO1xuK1x0XHRcdH1cbitcdFx0fSBlbHNlIGlmICghc3RhcnQpIHtcbitcdFx0XHRzdGFydCA9IHB0ZXA7XG4rXHRcdFx0c3RhcnRfYWRkciA9IGFkZHI7XG4rXHRcdFx0c3RhcnRfY2FjaGUgPSBjYWNoZTtcbitcdFx0fVxuK1x0fVxuK1x0c2V0X3B0ZV9yYW5nZShyYW5nZS1cdTAwM2VtbSwgc3RhcnRfYWRkciwgc3RhcnQsIHB0ZXAsIHN0YXJ0X2NhY2hlKTtcbitcbitcdHJhbmdlLVx1MDAzZXN0YXJ0X3B0ZSA9IE5VTEw7XG4rXHRyYW5nZS1cdTAwM2VlbmRfcHRlID0gTlVMTDtcbitcbitkb25lOlxuK1x0bnJfcHRlcyA9IChyYW5nZS1cdTAwM2ViYXNlX2VuZCAtIHJhbmdlLVx1MDAzZWJhc2VfYWRkcikgLyBQQUdFX1NJWkU7XG4rXHRrYXNhbl91bnBvaXNvbl9wdGUocmFuZ2UtXHUwMDNlYmFzZV9wdGUsIG5yX3B0ZXMpO1xuK1xuK1x0cmFuZ2UtXHUwMDNlbW0gPSBOVUxMO1xuK1x0cmFuZ2UtXHUwMDNlYmFzZV9hZGRyID0gMDtcbitcdHJhbmdlLVx1MDAzZWJhc2VfZW5kID0gMDtcbitcdHJhbmdlLVx1MDAzZWJhc2VfcHRlID0gTlVMTDtcbitcbitub3JhbmdlOlxuK1x0Z2V0X2xvd2NvcmUoKS1cdTAwM2VsYXp5X21tdV9jb3VudC0tO1xuK1x0cHV0X2NwdV92YXIoaXB0ZV9yYW5nZSk7XG4rXG4rXHRsb2NhbF9iaF9lbmFibGUoKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZmx1c2hfbGF6eV9tbXVfbW9kZSh2b2lkKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgYWRkciwgZW5kO1xuK1x0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4rXHRwdGVfdCAqcHRlO1xuK1xuK1x0aWYgKCF0ZXN0X2ZhY2lsaXR5KDEzKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cmFuZ2UgPSBnZXRfY3B1X3ZhcihpcHRlX3JhbmdlKTtcbitcdGlmIChyYW5nZS1cdTAwM2VtbSkge1xuK1x0XHRtbSA9IHJhbmdlLVx1MDAzZW1tO1xuK1x0XHRhZGRyID0gcmFuZ2UtXHUwMDNlYmFzZV9hZGRyO1xuK1x0XHRlbmQgPSByYW5nZS1cdTAwM2ViYXNlX2VuZDtcbitcdFx0cHRlID0gcmFuZ2UtXHUwMDNlYmFzZV9wdGU7XG4rXG4rXHRcdGxlYXZlX2lwdGVfcmFuZ2UoKTtcbitcdFx0ZW50ZXJfaXB0ZV9yYW5nZShtbSwgYWRkciwgZW5kLCBwdGUpO1xuK1x0fVxuK1x0cHV0X2NwdV92YXIoaXB0ZV9yYW5nZSk7XG4rfVxuK1xuK3ZvaWQgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKHZvaWQpXG4re1xuK1x0ZW50ZXJfaXB0ZV9ub3JhbmdlKCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfSUZfS1VOSVQoYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKTtcbitcbit2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4rXHRcdFx0XHRcdHB0ZV90ICpwdGUpXG4re1xuK1x0ZW50ZXJfaXB0ZV9yYW5nZShtbSwgYWRkciwgZW5kLCBwdGUpO1xuK31cbitFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMpO1xuK1xuK3ZvaWQgYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKHZvaWQpXG4re1xuK1x0bGVhdmVfaXB0ZV9yYW5nZSgpO1xuK31cbitFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSk7XG4rXG4rdm9pZCBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUodm9pZClcbit7XG4rXHRmbHVzaF9sYXp5X21tdV9tb2RlKCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfSUZfS1VOSVQoYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlKTtcbitcbitzdGF0aWMgdm9pZCBfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2UsIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpXG4re1xuK1x0dW5zaWduZWQgaW50IGlkeCA9IHB0ZXAgLSByYW5nZS1cdTAwM2ViYXNlX3B0ZTtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X3ByZWVtcHRpb25fZGlzYWJsZWQoKTtcbitcdHJhbmdlLVx1MDAzZWNhY2hlW2lkeF0gPSBwdGU7XG4rXG4rXHRpZiAoIXJhbmdlLVx1MDAzZXN0YXJ0X3B0ZSkge1xuK1x0XHRyYW5nZS1cdTAwM2VzdGFydF9wdGUgPSBwdGVwO1xuK1x0XHRyYW5nZS1cdTAwM2VlbmRfcHRlID0gcHRlcCArIDE7XG4rXHR9IGVsc2UgaWYgKHB0ZXAgXHUwMDNjIHJhbmdlLVx1MDAzZXN0YXJ0X3B0ZSkge1xuK1x0XHRyYW5nZS1cdTAwM2VzdGFydF9wdGUgPSBwdGVwO1xuK1x0fSBlbHNlIGlmIChwdGVwICsgMSBcdTAwM2UgcmFuZ2UtXHUwMDNlZW5kX3B0ZSkge1xuK1x0XHRyYW5nZS1cdTAwM2VlbmRfcHRlID0gcHRlcCArIDE7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBwdGVfdCBfX2lwdGVfcmFuZ2VfcHRlcF9nZXQoc3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlLCBwdGVfdCAqcHRlcClcbit7XG4rXHR1bnNpZ25lZCBpbnQgaWR4ID0gcHRlcCAtIHJhbmdlLVx1MDAzZWJhc2VfcHRlO1xuK1x0cHRlX3QgcHRlO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfcHJlZW1wdGlvbl9kaXNhYmxlZCgpO1xuK1x0aWYgKHB0ZV92YWwocmFuZ2UtXHUwMDNlY2FjaGVbaWR4XSkgPT0gUFRFX1BPSVNPTikge1xuK1x0XHRrYXNhbl91bnBvaXNvbl9wdGUocHRlcCwgMSk7XG4rXHRcdHB0ZSA9IF9fcHRlcF9nZXQocHRlcCk7XG4rXHRcdGthc2FuX3BvaXNvbl9wdGUocHRlcCwgMSk7XG4rXG4rXHRcdHJldHVybiBwdGU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmFuZ2UtXHUwMDNlY2FjaGVbaWR4XTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBpcHRlX3JhbmdlICp0aGlzX2lwdGVfcmFuZ2UocHRlX3QgKnB0ZXApXG4re1xuK1x0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xuK1x0dW5zaWduZWQgaW50IG5yX3B0ZXM7XG4rXG4rXHRyYW5nZSA9IHRoaXNfY3B1X3JlYWQoaXB0ZV9yYW5nZSk7XG4rXHRpZiAocHRlcCBcdTAwM2MgcmFuZ2UtXHUwMDNlYmFzZV9wdGUpXG4rXHRcdHJldHVybiBOVUxMO1xuK1x0bnJfcHRlcyA9IChyYW5nZS1cdTAwM2ViYXNlX2VuZCAtIHJhbmdlLVx1MDAzZWJhc2VfYWRkcikgLyBQQUdFX1NJWkU7XG4rXHRpZiAocHRlcCBcdTAwM2U9IHJhbmdlLVx1MDAzZWJhc2VfcHRlICsgbnJfcHRlcylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyZXR1cm4gcmFuZ2U7XG4rfVxuK1xuK2Jvb2wgX19sYXp5X21tdV9zZXRfcHRlKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpXG4re1xuK1x0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xuK1xuK1x0cmFuZ2UgPSB0aGlzX2lwdGVfcmFuZ2UocHRlcCk7XG4rXHRpZiAoIXJhbmdlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitib29sIF9fbGF6eV9tbXVfcHRlcF9nZXQocHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpXG4re1xuK1x0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xuK1xuK1x0cmFuZ2UgPSB0aGlzX2lwdGVfcmFuZ2UocHRlcCk7XG4rXHRpZiAoIXJhbmdlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQqcmVzID0gX19pcHRlX3JhbmdlX3B0ZXBfZ2V0KHJhbmdlLCBwdGVwKTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitib29sIF9fbGF6eV9tbXVfcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBpbnQgKnJlcylcbit7XG4rXHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XG4rXHRwdGVfdCBwdGUsIG9sZDtcbitcbitcdHJhbmdlID0gdGhpc19pcHRlX3JhbmdlKHB0ZXApO1xuK1x0aWYgKCFyYW5nZSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0b2xkID0gX19pcHRlX3JhbmdlX3B0ZXBfZ2V0KHJhbmdlLCBwdGVwKTtcbitcdHB0ZSA9IHB0ZV9ta29sZChvbGQpO1xuK1x0X19pcHRlX3JhbmdlX3NldF9wdGUocmFuZ2UsIHB0ZXAsIHB0ZSk7XG4rXHQqcmVzID0gcHRlX3lvdW5nKG9sZCk7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rYm9vbCBfX2xhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcih1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKVxuK3tcbitcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcbitcdHB0ZV90IHB0ZSwgb2xkO1xuK1xuK1x0cmFuZ2UgPSB0aGlzX2lwdGVfcmFuZ2UocHRlcCk7XG4rXHRpZiAoIXJhbmdlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRvbGQgPSBfX2lwdGVfcmFuZ2VfcHRlcF9nZXQocmFuZ2UsIHB0ZXApO1xuK1x0cHRlID0gX19wdGUoX1BBR0VfSU5WQUxJRCk7XG4rXHRfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTtcbitcdCpyZXMgPSBvbGQ7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rYm9vbCBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcylcbit7XG4rXHRyZXR1cm4gX19sYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIoYWRkciwgcHRlcCwgcmVzKTtcbit9XG4rXG4rYm9vbCBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4rXHRcdFx0XHRcdHB0ZV90IG9sZF9wdGUsIHB0ZV90IHB0ZSlcbit7XG4rXHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XG4rXG4rXHRyYW5nZSA9IHRoaXNfaXB0ZV9yYW5nZShwdGVwKTtcbitcdGlmICghcmFuZ2UpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdF9faXB0ZV9yYW5nZV9zZXRfcHRlKHJhbmdlLCBwdGVwLCBwdGUpO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK2Jvb2wgX19sYXp5X21tdV9wdGVwX3NldF93cnByb3RlY3QodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcbit7XG4rXHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XG4rXHRwdGVfdCBwdGU7XG4rXG4rXHRyYW5nZSA9IHRoaXNfaXB0ZV9yYW5nZShwdGVwKTtcbitcdGlmICghcmFuZ2UpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHB0ZSA9IF9faXB0ZV9yYW5nZV9wdGVwX2dldChyYW5nZSwgcHRlcCk7XG4rXHRpZiAocHRlX3dyaXRlKHB0ZSkpIHtcbitcdFx0cHRlID0gcHRlX3dycHJvdGVjdChwdGUpO1xuK1x0XHRfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTtcbitcdH1cbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitpbnQgbGF6eV9tbXVfb25saW5lX2NwdShnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBjcHUpXG4re1xuK1x0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJhbmdlID0ga3phbGxvY19vYmooKnJhbmdlLCBnZnApO1xuK1x0aWYgKCFyYW5nZSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHJhbmdlLVx1MDAzZWNhY2hlKTsgaSsrKVxuK1x0XHRyYW5nZS1cdTAwM2VjYWNoZVtpXSA9IF9fcHRlKFBURV9QT0lTT04pO1xuK1x0cGVyX2NwdShpcHRlX3JhbmdlLCBjcHUpID0gcmFuZ2U7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rdm9pZCBsYXp5X21tdV9vZmZsaW5lX2NwdSh1bnNpZ25lZCBpbnQgY3B1KVxuK3tcbitcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcbitcbitcdGlmICghdGVzdF9mYWNpbGl0eSgxMykpXG4rXHRcdHJldHVybjtcbitcbitcdHJhbmdlID0gcGVyX2NwdShpcHRlX3JhbmdlLCBjcHUpO1xuK1x0cGVyX2NwdShpcHRlX3JhbmdlLCBjcHUpID0gTlVMTDtcbitcdGtmcmVlKHJhbmdlKTtcbit9XG4rXG4rdm9pZCBfX2luaXQgbGF6eV9tbXVfb25saW5lX2Jvb3RfY3B1KHZvaWQpXG4re1xuK1x0bGF6eV9tbXVfb25saW5lX2NwdShHRlBfQVRPTUlDLCAwKTtcbit9XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL3BndGFibGUuYyBiL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmNcbmluZGV4IDRhY2Q4YjE0MGM0YmQuLmRmMzY1MjNiY2JiYmIgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jXG4rKysgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jXG5AQCAtMTY2LDE0ICsxNjYsMTQgQEAgcHRlX3QgcHRlcF94Y2hnX2xhenkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiB9XG4gRVhQT1JUX1NZTUJPTChwdGVwX3hjaGdfbGF6eSk7XG4gXG4tcHRlX3QgcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdCAgICAgcHRlX3QgKnB0ZXApXG4rcHRlX3QgX19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdFx0cHRlX3QgKnB0ZXApXG4ge1xuIFx0cmV0dXJuIHB0ZXBfZmx1c2hfbGF6eSh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXAsIDEpO1xuIH1cbiBcbi12b2lkIHB0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0ICAgICBwdGVfdCAqcHRlcCwgcHRlX3Qgb2xkX3B0ZSwgcHRlX3QgcHRlKVxuK3ZvaWQgX19fcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHRcdHB0ZV90ICpwdGVwLCBwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpXG4ge1xuIFx0c2V0X3B0ZShwdGVwLCBwdGUpO1xuIH1cbmRpZmYgLS1naXQgYS9mcy9wcm9jL3Rhc2tfbW11LmMgYi9mcy9wcm9jL3Rhc2tfbW11LmNcbmluZGV4IDIyOWQxZmMzZDdmMWMuLjkxNjc4NWMzYjJlMGIgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmNcbisrKyBiL2ZzL3Byb2MvdGFza19tbXUuY1xuQEAgLTI4NTIsNyArMjg1Miw3IEBAIHN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4rXHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXModm1hLVx1MDAzZXZtX21tLCBzdGFydCwgZW5kLCBzdGFydF9wdGUpO1xuIFxuIFx0aWYgKChwLVx1MDAzZWFyZy5mbGFncyBcdTAwMjYgUE1fU0NBTl9XUF9NQVRDSElORykgXHUwMDI2XHUwMDI2ICFwLVx1MDAzZXZlY19vdXQpIHtcbiBcdFx0LyogRmFzdCBwYXRoIGZvciBwZXJmb3JtaW5nIGV4Y2x1c2l2ZSBXUCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2FzYW4uaCBiL2luY2x1ZGUvbGludXgva2FzYW4uaFxuaW5kZXggYmYyMzNiZGU2OGM3ZS4uMWFhNGQ5ZGQyNDg1YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva2FzYW4uaFxuKysrIGIvaW5jbHVkZS9saW51eC9rYXNhbi5oXG5AQCAtNiw2ICs2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rYXNhbi1lbmFibGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rYXNhbi10YWdzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BndGFibGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0YXRpY19rZXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbkBAIC0zNSw4ICszNiw2IEBAIHR5cGVkZWYgdW5zaWduZWQgaW50IF9fYml0d2lzZSBrYXNhbl92bWFsbG9jX2ZsYWdzX3Q7XG4gXG4gI2lmIGRlZmluZWQoQ09ORklHX0tBU0FOX0dFTkVSSUMpIHx8IGRlZmluZWQoQ09ORklHX0tBU0FOX1NXX1RBR1MpXG4gXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvcGd0YWJsZS5oXHUwMDNlXG4tXG4gLyogU29mdHdhcmUgS0FTQU4gaW1wbGVtZW50YXRpb25zIHVzZSBzaGFkb3cgbWVtb3J5LiAqL1xuIFxuICNpZmRlZiBDT05GSUdfS0FTQU5fU1dfVEFHU1xuQEAgLTEzNCw2ICsxMzMsMjAgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGthc2FuX3BvaXNvbl9zbGFiKHN0cnVjdCBzbGFiICpzbGFiKVxuIFx0XHRfX2thc2FuX3BvaXNvbl9zbGFiKHNsYWIpO1xuIH1cbiBcbit2b2lkIF9fa2FzYW5fcG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpO1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucilcbit7XG4rXHRpZiAoa2FzYW5fZW5hYmxlZCgpKVxuK1x0XHRfX2thc2FuX3BvaXNvbl9wdGUocHRlLCBucik7XG4rfVxuK1xuK3ZvaWQgX19rYXNhbl91bnBvaXNvbl9wdGUocHRlX3QgKnB0ZSwgaW50IG5yKTtcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQga2FzYW5fdW5wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucilcbit7XG4rXHRpZiAoa2FzYW5fZW5hYmxlZCgpKVxuK1x0XHRfX2thc2FuX3VucG9pc29uX3B0ZShwdGUsIG5yKTtcbit9XG4rXG4gdm9pZCBfX2thc2FuX3VucG9pc29uX25ld19vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB2b2lkICpvYmplY3QpO1xuIC8qKlxuICAqIGthc2FuX3VucG9pc29uX25ld19vYmplY3QgLSBUZW1wb3JhcmlseSB1bnBvaXNvbiBhIG5ldyBzbGFiIG9iamVjdC5cbkBAIC00MTQsNiArNDI3LDggQEAgc3RhdGljIGlubGluZSBib29sIGthc2FuX3VucG9pc29uX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYikge31cbitzdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fcG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpIHt9XG4rc3RhdGljIGlubGluZSB2b2lkIGthc2FuX3VucG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGthc2FuX3VucG9pc29uX25ld19vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLFxuIFx0XHRcdFx0XHR2b2lkICpvYmplY3QpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGthc2FuX3BvaXNvbl9uZXdfb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaCBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG5pbmRleCAyOTgxZTM4NmRhN2IzLi5jYzg1ZGFmMzA3MzllIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG5AQCAtMjcxLDYgKzI3MSw1MCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9lbmFibGUodm9pZClcbiBcdFx0YXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7XG4gfVxuIFxuKyNpZm5kZWYgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBwdGVfdCAqcHRlcClcbit7XG4rXHRhcmNoX2VudGVyX2xhenlfbW11X21vZGUoKTtcbit9XG4rI2VuZGlmXG4rXG4rLyoqXG4rICogbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKCkgLSBFbmFibGUgdGhlIGxhenkgTU1VIG1vZGUgd2l0aCBhIHNwZWVkdXAgaGludC5cbisgKiBAbW06IEFkZHJlc3Mgc3BhY2UgdGhlIHBhZ2VzIGFyZSBtYXBwZWQgaW50by5cbisgKiBAYWRkcjogU3RhcnQgYWRkcmVzcyBvZiB0aGUgcmFuZ2UuXG4rICogQGVuZDogRW5kIGFkZHJlc3Mgb2YgdGhlIHJhbmdlLlxuKyAqIEBwdGVwOiBQYWdlIHRhYmxlIHBvaW50ZXIgZm9yIHRoZSBmaXJzdCBlbnRyeS5cbisgKlxuKyAqIEVudGVycyBhIG5ldyBsYXp5IE1NVSBtb2RlIHNlY3Rpb247IGlmIHRoZSBtb2RlIHdhcyBub3QgYWxyZWFkeSBlbmFibGVkLFxuKyAqIGVuYWJsZXMgaXQgYW5kIGNhbGxzIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMoKS5cbisgKlxuKyAqIFBURXMgdGhhdCBmYWxsIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHJhbmdlIG1pZ2h0IG9ic2VydmUgdXBkYXRlIHNwZWVkdXBzLlxuKyAqIFRoZSBQVEVzIG11c3QgYmVsb25nIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBzcGFjZSBhbmQgYmUgaW4gdGhlIHNhbWUgUE1ELlxuKyAqXG4rICogVGhlcmUgYXJlIG5vIHJlcXVpcmVtZW50cyBvbiB0aGUgb3JkZXIgb3IgcmFuZ2UgY29tcGxldGVuZXNzIG9mIFBURVxuKyAqIHVwZGF0ZXMgZm9yIHRoZSBzcGVjaWZpZWQgcmFuZ2UuXG4rICpcbisgKiBNdXN0IGJlIHBhaXJlZCB3aXRoIGEgY2FsbCB0byBsYXp5X21tdV9tb2RlX2Rpc2FibGUoKS5cbisgKlxuKyAqIEhhcyBubyBlZmZlY3QgaWYgY2FsbGVkOlxuKyAqIC0gV2hpbGUgcGF1c2VkIC0gc2VlIGxhenlfbW11X21vZGVfcGF1c2UoKVxuKyAqIC0gSW4gaW50ZXJydXB0IGNvbnRleHRcbisgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBwdGVfdCAqcHRlcClcbit7XG4rXHRzdHJ1Y3QgbGF6eV9tbXVfc3RhdGUgKnN0YXRlID0gXHUwMDI2Y3VycmVudC1cdTAwM2VsYXp5X21tdV9zdGF0ZTtcbitcbitcdGlmIChpbl9pbnRlcnJ1cHQoKSB8fCBzdGF0ZS1cdTAwM2VwYXVzZV9jb3VudCBcdTAwM2UgMClcbitcdFx0cmV0dXJuO1xuK1xuK1x0Vk1fV0FSTl9PTl9PTkNFKHN0YXRlLVx1MDAzZWVuYWJsZV9jb3VudCA9PSBVOF9NQVgpO1xuK1xuK1x0aWYgKHN0YXRlLVx1MDAzZWVuYWJsZV9jb3VudCsrID09IDApXG4rXHRcdGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgcHRlcCk7XG4rfVxuK1xuIC8qKlxuICAqIGxhenlfbW11X21vZGVfZGlzYWJsZSgpIC0gRGlzYWJsZSB0aGUgbGF6eSBNTVUgbW9kZS5cbiAgKlxuQEAgLTM4Nyw2ICs0MzEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9yZXN1bWUodm9pZClcbiB9XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9lbmFibGUodm9pZCkge31cbitzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBwdGVfdCAqcHRlcCkge31cbiBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9kaXNhYmxlKHZvaWQpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfcGF1c2Uodm9pZCkge31cbiBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9yZXN1bWUodm9pZCkge31cbmRpZmYgLS1naXQgYS9tbS9rYXNhbi9jb21tb24uYyBiL21tL2thc2FuL2NvbW1vbi5jXG5pbmRleCBiN2QwNWMyYTZkOTNkLi45NGQxMDYwOTQ5ODkxIDEwMDY0NFxuLS0tIGEvbW0va2FzYW4vY29tbW9uLmNcbisrKyBiL21tL2thc2FuL2NvbW1vbi5jXG5AQCAtMTYzLDYgKzE2MywyMCBAQCB2b2lkIF9fa2FzYW5fcG9pc29uX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIpXG4gXHRcdCAgICAgS0FTQU5fU0xBQl9SRURaT05FLCBmYWxzZSk7XG4gfVxuIFxuK3ZvaWQgX19rYXNhbl9wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucilcbit7XG4rXHRpZiAoSVNfQUxJR05FRChzaXplb2YoKnB0ZSksIEtBU0FOX0dSQU5VTEVfU0laRSkpXG4rXHRcdGthc2FuX3BvaXNvbihwdGUsIHNpemVvZigqcHRlKSAqIG5yLCBLQVNBTl9MQVpZX01NVV9QVEUsIGZhbHNlKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoX19rYXNhbl9wb2lzb25fcHRlKTtcbitcbit2b2lkIF9fa2FzYW5fdW5wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucilcbit7XG4rXHRpZiAoSVNfQUxJR05FRChzaXplb2YoKnB0ZSksIEtBU0FOX0dSQU5VTEVfU0laRSkpXG4rXHRcdGthc2FuX3VucG9pc29uKHB0ZSwgc2l6ZW9mKCpwdGUpICogbnIsIGZhbHNlKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoX19rYXNhbl91bnBvaXNvbl9wdGUpO1xuK1xuIHZvaWQgX19rYXNhbl91bnBvaXNvbl9uZXdfb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSwgdm9pZCAqb2JqZWN0KVxuIHtcbiBcdGthc2FuX3VucG9pc29uKG9iamVjdCwgY2FjaGUtXHUwMDNlb2JqZWN0X3NpemUsIGZhbHNlKTtcbmRpZmYgLS1naXQgYS9tbS9rYXNhbi9rYXNhbi5oIGIvbW0va2FzYW4va2FzYW4uaFxuaW5kZXggZmM5MTY5YTU0NzY2Mi4uMWEyZDE4Y2RiMjFkOSAxMDA2NDRcbi0tLSBhL21tL2thc2FuL2thc2FuLmhcbisrKyBiL21tL2thc2FuL2thc2FuLmhcbkBAIC0xNDQsMTIgKzE0NCwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wga2FzYW5fcmVxdWlyZXNfbWV0YSh2b2lkKVxuICNkZWZpbmUgS0FTQU5fUEFHRV9SRURaT05FXHQweEZFICAvKiByZWR6b25lIGZvciBrbWFsbG9jX2xhcmdlIGFsbG9jYXRpb24gKi9cbiAjZGVmaW5lIEtBU0FOX1NMQUJfUkVEWk9ORVx0MHhGQyAgLyogcmVkem9uZSBmb3Igc2xhYiBvYmplY3QgKi9cbiAjZGVmaW5lIEtBU0FOX1NMQUJfRlJFRVx0XHQweEZCICAvKiBmcmVlZCBzbGFiIG9iamVjdCAqL1xuKyNkZWZpbmUgS0FTQU5fTEFaWV9NTVVfUFRFXHQweEZEICAvKiBkaXJlY3QgcHRlIGFjY2VzcyBpbiBsYXp5IG1tdSBtb2RlICovXG4gI2RlZmluZSBLQVNBTl9WTUFMTE9DX0lOVkFMSURcdDB4RjggIC8qIGluYWNjZXNzaWJsZSBzcGFjZSBpbiB2bWFwIGFyZWEgKi9cbiAjZWxzZVxuICNkZWZpbmUgS0FTQU5fUEFHRV9GUkVFXHRcdEtBU0FOX1RBR19JTlZBTElEXG4gI2RlZmluZSBLQVNBTl9QQUdFX1JFRFpPTkVcdEtBU0FOX1RBR19JTlZBTElEXG4gI2RlZmluZSBLQVNBTl9TTEFCX1JFRFpPTkVcdEtBU0FOX1RBR19JTlZBTElEXG4gI2RlZmluZSBLQVNBTl9TTEFCX0ZSRUVcdFx0S0FTQU5fVEFHX0lOVkFMSURcbisjZGVmaW5lIEtBU0FOX0xBWllfTU1VX1BURVx0S0FTQU5fVEFHX0lOVkFMSURcbiAjZGVmaW5lIEtBU0FOX1ZNQUxMT0NfSU5WQUxJRFx0S0FTQU5fVEFHX0lOVkFMSUQgLyogb25seSB1c2VkIGZvciBTV19UQUdTICovXG4gI2VuZGlmXG4gXG5kaWZmIC0tZ2l0IGEvbW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuYyBiL21tL2thc2FuL3JlcG9ydF9nZW5lcmljLmNcbmluZGV4IGY1YjhlMzdiMzgwNWMuLjQ4OWQ0YThkNjkwMmQgMTAwNjQ0XG4tLS0gYS9tbS9rYXNhbi9yZXBvcnRfZ2VuZXJpYy5jXG4rKysgYi9tbS9rYXNhbi9yZXBvcnRfZ2VuZXJpYy5jXG5AQCAtMTEzLDYgKzExMyw5IEBAIHN0YXRpYyBjb25zdCBjaGFyICpnZXRfc2hhZG93X2J1Z190eXBlKHN0cnVjdCBrYXNhbl9yZXBvcnRfaW5mbyAqaW5mbylcbiBcdGNhc2UgS0FTQU5fU0xBQl9GUkVFX01FVEE6XG4gXHRcdGJ1Z190eXBlID0gXCJzbGFiLXVzZS1hZnRlci1mcmVlXCI7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBLQVNBTl9MQVpZX01NVV9QVEU6XG4rXHRcdGJ1Z190eXBlID0gXCJsYXp5LW1tdS1wdGUtYWNjZXNzXCI7XG4rXHRcdGJyZWFrO1xuIFx0Y2FzZSBLQVNBTl9BTExPQ0FfTEVGVDpcbiBcdGNhc2UgS0FTQU5fQUxMT0NBX1JJR0hUOlxuIFx0XHRidWdfdHlwZSA9IFwiYWxsb2NhLW91dC1vZi1ib3VuZHNcIjtcbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcbmluZGV4IDc3NTUyYjAzZDMxOGQuLjQ0MTlkMTZiMzlmOTYgMTAwNjQ0XG4tLS0gYS9tbS9tYWR2aXNlLmNcbisrKyBiL21tL21hZHZpc2UuY1xuQEAgLTQ1Miw3ICs0NTIsNyBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuIFx0aWYgKCFzdGFydF9wdGUpXG4gXHRcdHJldHVybiAwO1xuIFx0Zmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyhtbSk7XG4tXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuK1x0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIHN0YXJ0X3B0ZSk7XG4gXHRmb3IgKDsgYWRkciBcdTAwM2MgZW5kOyBwdGUgKz0gbnIsIGFkZHIgKz0gbnIgKiBQQUdFX1NJWkUpIHtcbiBcdFx0bnIgPSAxO1xuIFx0XHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG5AQCAtNTA3LDcgKzUwNyw3IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXG4gXHRcdFx0XHRpZiAoIXN0YXJ0X3B0ZSlcbiBcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHRmbHVzaF90bGJfYmF0Y2hlZF9wZW5kaW5nKG1tKTtcbi1cdFx0XHRcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4rXHRcdFx0XHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgc3RhcnRfcHRlKTtcbiBcdFx0XHRcdGlmICghZXJyKVxuIFx0XHRcdFx0XHRuciA9IDA7XG4gXHRcdFx0XHRjb250aW51ZTtcbkBAIC02NzQsNyArNjc0LDcgQEAgc3RhdGljIGludCBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGlmICghc3RhcnRfcHRlKVxuIFx0XHRyZXR1cm4gMDtcbiBcdGZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pO1xuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbitcdGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgYWRkciwgZW5kLCBzdGFydF9wdGUpO1xuIFx0Zm9yICg7IGFkZHIgIT0gZW5kOyBwdGUgKz0gbnIsIGFkZHIgKz0gUEFHRV9TSVpFICogbnIpIHtcbiBcdFx0bnIgPSAxO1xuIFx0XHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG5AQCAtNzM0LDcgKzczNCw3IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHRpZiAoIXN0YXJ0X3B0ZSlcbiBcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHRmbHVzaF90bGJfYmF0Y2hlZF9wZW5kaW5nKG1tKTtcbi1cdFx0XHRcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4rXHRcdFx0XHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgcHRlKTtcbiBcdFx0XHRcdGlmICghZXJyKVxuIFx0XHRcdFx0XHRuciA9IDA7XG4gXHRcdFx0XHRjb250aW51ZTtcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA2YjgyODBjZmMxZGJlLi4wY2MwN2IwNDMzODRiIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtMTI3Miw3ICsxMjcyLDcgQEAgY29weV9wdGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsXG4gXHRzcGluX2xvY2tfbmVzdGVkKHNyY19wdGwsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbiBcdG9yaWdfc3JjX3B0ZSA9IHNyY19wdGU7XG4gXHRvcmlnX2RzdF9wdGUgPSBkc3RfcHRlO1xuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbitcdGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhzcmNfbW0sIGFkZHIsIGVuZCwgc3JjX3B0ZSk7XG4gXG4gXHRkbyB7XG4gXHRcdG5yID0gMTtcbkBAIC0xOTIyLDcgKzE5MjIsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB6YXBfcHRlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4gXHRcdHJldHVybiBhZGRyO1xuIFxuIFx0Zmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyhtbSk7XG4tXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuK1x0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIHN0YXJ0X3B0ZSk7XG4gXHRkbyB7XG4gXHRcdGJvb2wgYW55X3NraXBwZWQgPSBmYWxzZTtcbiBcbkBAIC0yOTE5LDcgKzI5MTksNyBAQCBzdGF0aWMgaW50IHJlbWFwX3B0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCxcbiBcdG1hcHBlZF9wdGUgPSBwdGUgPSBwdGVfYWxsb2NfbWFwX2xvY2sobW0sIHBtZCwgYWRkciwgXHUwMDI2cHRsKTtcbiBcdGlmICghcHRlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4rXHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgbWFwcGVkX3B0ZSk7XG4gXHRkbyB7XG4gXHRcdEJVR19PTighcHRlX25vbmUocHRlcF9nZXQocHRlKSkpO1xuIFx0XHRpZiAoIXBmbl9tb2RpZnlfYWxsb3dlZChwZm4sIHByb3QpKSB7XG5AQCAtMzMzMCw3ICszMzMwLDcgQEAgc3RhdGljIGludCBhcHBseV90b19wdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuK1x0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIG1hcHBlZF9wdGUpO1xuIFxuIFx0aWYgKGZuKSB7XG4gXHRcdGRvIHtcbmRpZmYgLS1naXQgYS9tbS9tcHJvdGVjdC5jIGIvbW0vbXByb3RlY3QuY1xuaW5kZXggOWNiZjkzMmIwMjhjZi4uM2ZjMjY0MThlODM3ZCAxMDA2NDRcbi0tLSBhL21tL21wcm90ZWN0LmNcbisrKyBiL21tL21wcm90ZWN0LmNcbkBAIC0zMzcsNyArMzM3LDcgQEAgc3RhdGljIGxvbmcgY2hhbmdlX3B0ZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuIFx0XHRpc19wcml2YXRlX3NpbmdsZV90aHJlYWRlZCA9IHZtYV9pc19zaW5nbGVfdGhyZWFkZWRfcHJpdmF0ZSh2bWEpO1xuIFxuIFx0Zmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyh2bWEtXHUwMDNldm1fbW0pO1xuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbitcdGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIGVuZCwgcHRlKTtcbiBcdGRvIHtcbiBcdFx0bnJfcHRlcyA9IDE7XG4gXHRcdG9sZHB0ZSA9IHB0ZXBfZ2V0KHB0ZSk7XG5kaWZmIC0tZ2l0IGEvbW0vbXJlbWFwLmMgYi9tbS9tcmVtYXAuY1xuaW5kZXggZTljOGIxZDA1ODMyYi4uMGRmZTNkZTM5Y2NjNyAxMDA2NDRcbi0tLSBhL21tL21yZW1hcC5jXG4rKysgYi9tbS9tcmVtYXAuY1xuQEAgLTI2MCw3ICsyNjAsNyBAQCBzdGF0aWMgaW50IG1vdmVfcHRlcyhzdHJ1Y3QgcGFnZXRhYmxlX21vdmVfY29udHJvbCAqcG1jLFxuIFx0aWYgKG5ld19wdGwgIT0gb2xkX3B0bClcbiBcdFx0c3Bpbl9sb2NrX25lc3RlZChuZXdfcHRsLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4gXHRmbHVzaF90bGJfYmF0Y2hlZF9wZW5kaW5nKHZtYS1cdTAwM2V2bV9tbSk7XG4tXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuK1x0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBvbGRfYWRkciwgb2xkX2VuZCwgb2xkX3B0ZXApO1xuIFxuIFx0Zm9yICg7IG9sZF9hZGRyIFx1MDAzYyBvbGRfZW5kOyBvbGRfcHRlcCArPSBucl9wdGVzLCBvbGRfYWRkciArPSBucl9wdGVzICogUEFHRV9TSVpFLFxuIFx0XHRuZXdfcHRlcCArPSBucl9wdGVzLCBuZXdfYWRkciArPSBucl9wdGVzICogUEFHRV9TSVpFKSB7XG5kaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jXG5pbmRleCBmNGZhMjI3YThkN2YwLi4xYzZlZjhmZDA3OWUwIDEwMDY0NFxuLS0tIGEvbW0vdm1hbGxvYy5jXG4rKysgYi9tbS92bWFsbG9jLmNcbkBAIC0xMDksNyArMTA5LDcgQEAgc3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0aWYgKCFwdGUpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbitcdGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhcdTAwMjZpbml0X21tLCBhZGRyLCBlbmQsIHB0ZSk7XG4gXG4gXHRkbyB7XG4gXHRcdGlmICh1bmxpa2VseSghcHRlX25vbmUocHRlcF9nZXQocHRlKSkpKSB7XG5AQCAtMzkzLDcgKzM5Myw3IEBAIHN0YXRpYyB2b2lkIHZ1bm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IFBBR0VfU0laRTtcbiBcbiBcdHB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcik7XG4tXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuK1x0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKFx1MDAyNmluaXRfbW0sIGFkZHIsIGVuZCwgcHRlKTtcbiBcbiBcdGRvIHtcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuQEAgLTU2MCw3ICs1NjAsNyBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGlmICghcHRlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4rXHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMoXHUwMDI2aW5pdF9tbSwgYWRkciwgZW5kLCBwdGUpO1xuIFxuIFx0ZG8ge1xuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBhZ2VzWypucl07XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjo0MToxNS44MDc2NDQzNDZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY3OTIxMDQwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEp1c3RpZmljYXRpb246IEEgRGV0YWlsZWQgRXhhbWluYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHJ1bi4gS01TQU4ncyBhbGwgYWJvdXQgY2F0Y2hpbmcgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGhhbmRsZXMgdGhlIHVzdWFsIHN1c3BlY3RzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGFuZCBsb2NraW5nIGJ1Z3MuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIFwibGF6eSBNTVUgbW9kZVwiIGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIExldCdzIGRpZyBpbi5cblxuVGhlIHBhdGNoJ3MgZ290IGNoYW5nZXMgYWNyb3NzIHRoZSBib2FyZCwgZnJvbSBgbGF6eV9tbXUuaGAgdG8gbW9kaWZpY2F0aW9ucyBpbiB2YXJpb3VzIGtlcm5lbCBhcmVhcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBLQVNBTi4gSXQgbG9va3MgbGlrZSBpdCdzIGltcGxlbWVudGluZyBsYXp5IFBURSB1cGRhdGVzLiBJbnRlcmVzdGluZyDigJMgaXQncyBidWZmZXJpbmcgdGhvc2UgdXBkYXRlcy4gVGhlIGNvZGUgdXNlcyBgbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKClgIHdoaWNoIHRha2VzIGEgYHB0ZV90ICpwdGVwYC4gQWgsIGFuZCB0aGVyZSdzIEtBU0FOIHBvaXNvbmluZy91bnBvaXNvbmluZyBvZiBQVEVzIChgS0FTQU5fTEFaWV9NTVVfUFRFYCkuIFdhaXQsIHRoaXMgaXMgKmV4cGxpY2l0bHkqIGEgS0FTQU4gZmVhdHVyZS4gSXQncyBhZGRpbmcgYSBuZXcgS0FTQU4gdGFnIGFuZCBhIG5ldyBidWcgdHlwZTogYFwibGF6eS1tbXUtcHRlLWFjY2Vzc1wiYC4gVGhpcyBpc24ndCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBhdCBhbGwsIGl0J3MgYWJvdXQgY2F0Y2hpbmcgKmludmFsaWQqIGFjY2Vzc2VzIHRvIFBURXMgZHVyaW5nIGxhenkgbW9kZSB1c2luZyBLQVNBTi5cblxuQWxyaWdodCwgbGV0J3MgcGxheSBkZXZpbCdzIGFkdm9jYXRlIGFuZCBjaGVjayBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCBtZSBzZWUuLi4gYHN0cnVjdCBpcHRlX3JhbmdlYCBpcyBhbGxvY2F0ZWQgaW4gYGxhenlfbW11X29ubGluZV9jcHVgIHVzaW5nIGBremFsbG9jX29iaigqcmFuZ2UsIGdmcClgLiBXYWl0LCB3aGF0IGlzIGBremFsbG9jX29iamA/IElzIHRoYXQgYSB0eXBvPyBJdCdzIG5vdCBhIHN0YW5kYXJkIGtlcm5lbCBmdW5jdGlvbi4gTGV0J3Mgc2VlIGlmIEkgY2FuIGZpbmQgaXQgd2l0aCBgZ3JlcGAuIE9oISBJdCdzIHByb2JhYmx5IGEgbWFjcm8gdGhhdCdzIGEgd3JhcHBlciBmb3IgYGt6YWxsb2Moc2l6ZW9mKCpyYW5nZSksIGdmcClgLiBBY3R1YWxseSwgaXQgZG9lc24ndCBtYXR0ZXIsIGl0J3MgYSB6ZXJvLWFsbG9jYXRpb24hXG5cbkxldCdzIGxvb2sgbW9yZSBjbG9zZWx5IGF0IHRoZSBjb2RlIGluIGBhcmNoL3MzOTAvbW0vbGF6eV9tbXUuY2A6XG5gYGBjXG5cdHJhbmdlID0ga3phbGxvY19vYmooKnJhbmdlLCBnZnApO1xuXHRpZiAoIXJhbmdlKVxuXHRcdHJldHVybiAtRU5PTUVNO1xuXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHJhbmdlLVx1MDAzZWNhY2hlKTsgaSsrKVxuXHRcdHJhbmdlLVx1MDAzZWNhY2hlW2ldID0gX19wdGUoUFRFX1BPSVNPTik7XG5gYGBcblllcywgZGVmaW5pdGVseSBhIHplcm8tYWxsb2NhdGlvbiwgYXMgZXhwZWN0ZWQuIFRoZSBQVEUgY2FjaGUgaXMgdGhlbiBpbml0aWFsaXplZCB3aXRoIHBvaXNvbiB2YWx1ZXMuXG5cbklzIGFueXRoaW5nIGhlcmUgcGFzc2VkIHRvIHVzZXIgc3BhY2U/IE5vcGUuIEl0J3MgcHVyZWx5IGludGVybmFsIE1NVSBwYWdlIHRhYmxlIG1hbmFnZW1lbnQuIFBURXMgYXJlbid0IGJlaW5nIHNlbnQgZGlyZWN0bHkgdG8gdXNlcnNwYWNlLiBJbiBmYWN0LCB0aGlzIHBhdGNoIGlzICphZGRpbmcqIEtBU0FOIGNoZWNrcyB0byBjYXRjaCAqZGlyZWN0KiBQVEUgYWNjZXNzZXMgaW4gbGF6eSBtb2RlLiBTaW5jZSBpdCdzIGJ1aWx0LWluLCBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCBoZXJlLiBLTVNBTidzIHB1cnBvc2UsIGNhdGNoaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW1zLCBpc24ndCB3aGF0IHRoaXMgcGF0Y2ggZG9lcy5cblxuTGV0J3MgZG91YmxlLWNoZWNrIGp1c3QgdG8gYmUgc3VyZS4uLiB0aGUgYHN0cnVjdCBpcHRlX3JhbmdlYCBoYXMgYSBgcHRlX3QgY2FjaGVbUFRSU19QRVJfUFRFXTtgLiBJdCdzIGluaXRpYWxpemVkIHRvIGBQVEVfUE9JU09OYCBpbiBgbGF6eV9tbXVfb25saW5lX2NwdWAuIGBlbnRlcl9pcHRlX3JhbmdlYCBzZXRzIHRoZSBiYXNlIGFkZHJlc3MsIGVuZCwgYW5kIFBURSwgYW5kIGBfX2xhenlfbW11X3NldF9wdGVgIHdyaXRlcyB0byBgcmFuZ2UtXHUwMDNlY2FjaGVbaWR4XWAuIE5vdGhpbmcgaXMgY29waWVkIHRvIHVzZXJzcGFjZSBhbmQgbm90aGluZyBpcyByZWFkIHVuaW5pdGlhbGl6ZWQuXG5cblRoZXJlZm9yZSwgbm8uIGBOZWVkc0tNU0FOID0gZmFsc2VgLlxuXG5UaGUgcGF0Y2gncyBhbGwgYWJvdXQgbGF6eSBQVEUgdXBkYXRlcyBvbiBzMzkwLCBleHBsaWNpdGx5IGFkZGluZyBLQVNBTiBwb2lzb25pbmcvdW5wb2lzb25pbmcgdG8gY2F0Y2ggZGlyZWN0IFBURSBhY2Nlc3NlcywgaW50cm9kdWNpbmcgYSBuZXcgS0FTQU4gYnVnIHR5cGUuIEFsbCBvZiB0aGUgY2hhbmdlcyBhcmUgaW50ZXJuYWwsIHBhZ2UgdGFibGUgcmVsYXRlZCwgYW5kIG5vIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UuIE5ld2x5IGFsbG9jYXRlZCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCAodmlhIHplcm8tYWxsb2NhdGlvbiBhbmQgZXhwbGljaXQgYFBURV9QT0lTT05gKS4gVGhlcmUncyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLCBubyBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBLQVNBTiBpcyB0aGUgcGVyZmVjdCB0b29sIGZvciBjaGVja2luZyB0aGlzLiBga3phbGxvY19vYmpgLCB3aGljaCBpcyB1c2VkLCBkb2VzIHplcm8gYWxsb2NhdGlvbiwgb3IgaXMgaW1wbGVtZW50ZWQgYXMgc3VjaC5cbmBgYFxuYGBgXG5JJ20gY2FsbGluZyBgc2V0LXJlc3VsdHNgIG5vdy5cbmBgYFxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQwMSwiT3V0cHV0VG9rZW5zIjoyMTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzc2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6NDE6NDIuNTk5NzUwNzUyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbGF6eSBNTVUgbW9kZSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIHRvIGJ1ZmZlciBwYWdlIHRhYmxlIGVudHJ5IChQVEUpIHVwZGF0ZXMuIEl0IGFsc28gZXhwbGljaXRseSBhZGRzIEtBU0FOIHBvaXNvbmluZy91bnBvaXNvbmluZyB0byBkZXRlY3QgaW52YWxpZCBkaXJlY3QgYWNjZXNzZXMgdG8gUFRFcyB3aGlsZSB0aGUgbGF6eSBNTVUgbW9kZSBpcyBhY3RpdmUsIGludHJvZHVjaW5nIGEgbmV3IEtBU0FOIGJ1ZyB0eXBlIChgbGF6eS1tbXUtcHRlLWFjY2Vzc2ApLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgdGFibGUgb3BlcmF0aW9ucy4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgYWxsIG5ld2x5IGFsbG9jYXRlZCBzdHJ1Y3R1cmVzIChlLmcuLCBgc3RydWN0IGlwdGVfcmFuZ2VgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGUuZy4sIHZpYSB6ZXJvLWFsbG9jYXRpb24gYW5kIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIG9mIHRoZSBgY2FjaGVgIGFycmF5IHRvIGBQVEVfUE9JU09OYCkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGlzIHBlcmZlY3RseSBzdWl0ZWQgYW5kIGV4cGxpY2l0bHkgZW5oYW5jZWQgYnkgdGhpcyBwYXRjaCB0byBjYXRjaCBhbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxhenkgTU1VIG1vZGUgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSB0byBidWZmZXIgcGFnZSB0YWJsZSBlbnRyeSAoUFRFKSB1cGRhdGVzLiBJdCBhbHNvIGV4cGxpY2l0bHkgYWRkcyBLQVNBTiBwb2lzb25pbmcvdW5wb2lzb25pbmcgdG8gZGV0ZWN0IGludmFsaWQgZGlyZWN0IGFjY2Vzc2VzIHRvIFBURXMgd2hpbGUgdGhlIGxhenkgTU1VIG1vZGUgaXMgYWN0aXZlLCBpbnRyb2R1Y2luZyBhIG5ldyBLQVNBTiBidWcgdHlwZSAoYGxhenktbW11LXB0ZS1hY2Nlc3NgKS4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IGNvbmZpbmVkIHRvIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHRhYmxlIG9wZXJhdGlvbnMuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIGFsbCBuZXdseSBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoZS5nLiwgYHN0cnVjdCBpcHRlX3JhbmdlYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlLmcuLCB2aWEgemVyby1hbGxvY2F0aW9uIGFuZCBleHBsaWNpdCBpbml0aWFsaXphdGlvbiBvZiB0aGUgYGNhY2hlYCBhcnJheSB0byBgUFRFX1BPSVNPTmApLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBpcyBwZXJmZWN0bHkgc3VpdGVkIGFuZCBleHBsaWNpdGx5IGVuaGFuY2VkIGJ5IHRoaXMgcGF0Y2ggdG8gY2F0Y2ggYW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgt4k8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 11:58:55 +0000 UTC FinishedAt: 2026-08-17 12:41:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "3aa1dcaa4f6f5ae08936491e08bd456f331f2d40", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KASAN", "KASAN_GENERIC", "HOTPLUG_CPU" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "3aa1dcaa4f6f5ae08936491e08bd456f331f2d40", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KASAN", "KASAN_GENERIC", "HOTPLUG_CPU" ], "series_id": "e90b7431-a06c-4cb3-9f54-4ce8f222fe4e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "arch_enter_lazy_mmu_mode", "arch_enter_lazy_mmu_mode_with_ptes", "arch_leave_lazy_mmu_mode", "arch_flush_lazy_mmu_mode", "lazy_mmu_online_cpu", "lazy_mmu_offline_cpu", "__kasan_poison_pte", "__kasan_unpoison_pte", "___ptep_modify_prot_start", "___ptep_modify_prot_commit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tBU0FOJiMzNDssCiAgICAmIzM0O0tBU0FOX0dFTkVSSUMmIzM0OywKICAgICYjMzQ7SE9UUExVR19DUFUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcmNoX2VudGVyX2xhenlfbW11X21vZGUmIzM0OywKICAgICYjMzQ7YXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcyYjMzQ7LAogICAgJiMzNDthcmNoX2xlYXZlX2xhenlfbW11X21vZGUmIzM0OywKICAgICYjMzQ7YXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlJiMzNDssCiAgICAmIzM0O2xhenlfbW11X29ubGluZV9jcHUmIzM0OywKICAgICYjMzQ7bGF6eV9tbXVfb2ZmbGluZV9jcHUmIzM0OywKICAgICYjMzQ7X19rYXNhbl9wb2lzb25fcHRlJiMzNDssCiAgICAmIzM0O19fa2FzYW5fdW5wb2lzb25fcHRlJiMzNDssCiAgICAmIzM0O19fX3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQmIzM0OywKICAgICYjMzQ7X19fcHRlcF9tb2RpZnlfcHJvdF9jb21taXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbGF6eSBNTVUgbW9kZSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIHRvIGJ1ZmZlciBwYWdlIHRhYmxlIGVudHJ5IChQVEUpIHVwZGF0ZXMuIEl0IGFsc28gZXhwbGljaXRseSBhZGRzIEtBU0FOIHBvaXNvbmluZy91bnBvaXNvbmluZyB0byBkZXRlY3QgaW52YWxpZCBkaXJlY3QgYWNjZXNzZXMgdG8gUFRFcyB3aGlsZSB0aGUgbGF6eSBNTVUgbW9kZSBpcyBhY3RpdmUsIGludHJvZHVjaW5nIGEgbmV3IEtBU0FOIGJ1ZyB0eXBlIChgbGF6eS1tbXUtcHRlLWFjY2Vzc2ApLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgdGFibGUgb3BlcmF0aW9ucy4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgYWxsIG5ld2x5IGFsbG9jYXRlZCBzdHJ1Y3R1cmVzIChlLmcuLCBgc3RydWN0IGlwdGVfcmFuZ2VgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGUuZy4sIHZpYSB6ZXJvLWFsbG9jYXRpb24gYW5kIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIG9mIHRoZSBgY2FjaGVgIGFycmF5IHRvIGBQVEVfUE9JU09OYCkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGlzIHBlcmZlY3RseSBzdWl0ZWQgYW5kIGV4cGxpY2l0bHkgZW5oYW5jZWQgYnkgdGhpcyBwYXRjaCB0byBjYXRjaCBhbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbGF6eSBNTVUgbW9kZSBmb3IgczM5MCBhcmNoaXRlY3R1cmUsIHdoaWNoIGJhdGNoZXMgUFRFIGludmFsaWRhdGlvbnMgdXNpbmcgdGhlIElQVEUtcmFuZ2UgZmFjaWxpdHkuIEl0IGhvb2tzIGludG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzeXNjYWxscyAobWFkdmlzZSwgbXByb3RlY3QsIG1yZW1hcCwgdm1hbGxvYykgYW5kIENQVSBob3RwbHVnIHBhdGhzLiBJdCBhbHNvIGFkZHMgS0FTQU4gaW5zdHJ1bWVudGF0aW9uIGZvciBkaXJlY3QgUFRFIGFjY2Vzc2VzIGluIGxhenkgTU1VIG1vZGUuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzNmMxMjY3M2YzNWRkZjJhMTQ3OTExNjRiNWRjZjlkNGMzY2Y1NGMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTI6Mzc6NDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcgYi9hcmNoL3MzOTAvS2NvbmZpZ1xuaW5kZXggODQ0MDRlNjc3OGQ1MC4uNzg0NjMzMmRjZDBhNiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvS2NvbmZpZ1xuQEAgLTk3LDYgJiM0Mzs5Nyw3IEBAIGNvbmZpZyBTMzkwXG4gXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxuIFx0c2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VcbiBcdHNlbGVjdCBBUkNIX0hBU19LQ09WXG4mIzQzO1x0c2VsZWN0IEFSQ0hfSEFTX0xBWllfTU1VX01PREVcbiBcdHNlbGVjdCBBUkNIX0hBU19NRU1CQVJSSUVSX1NZTkNfQ09SRVxuIFx0c2VsZWN0IEFSQ0hfSEFTX01FTV9FTkNSWVBUXG4gXHRzZWxlY3QgQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xhenlfbW11LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbGF6eV9tbXUuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk4MzY2ZTlkZTliYzNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sYXp5X21tdS5oXG5AQCAtMCwwICYjNDM7MSw5IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOyNpZm5kZWYgX19MQVpZX01NVV9IXG4mIzQzOyNkZWZpbmUgX19MQVpZX01NVV9IXG4mIzQzO1xuJiM0Mzt2b2lkIGxhenlfbW11X29ubGluZV9ib290X2NwdSh2b2lkKTtcbiYjNDM7aW50IGxhenlfbW11X29ubGluZV9jcHUoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgY3B1KTtcbiYjNDM7dm9pZCBsYXp5X21tdV9vZmZsaW5lX2NwdSh1bnNpZ25lZCBpbnQgY3B1KTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfX0xBWllfTU1VX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaFxuaW5kZXggM2IzZWNjNjQ3OTkzZi4uZGJhMjM2NjY0ZGE5MCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmhcbkBAIC0xNjMsNyAmIzQzOzE2Myw3IEBAIHN0cnVjdCBsb3djb3JlIHtcbiBcdF9fczMyXHRwcmVlbXB0X2NvdW50O1x0XHRcdC8qIDB4MDNhOCAqL1xuIFx0X191MzJcdHNwaW5sb2NrX2xvY2t2YWw7XHRcdC8qIDB4MDNhYyAqL1xuIFx0X191MzJcdHNwaW5sb2NrX2luZGV4O1x0XHRcdC8qIDB4MDNiMCAqL1xuLVx0X191OFx0cGFkXzB4MDNiNFsweDAzYjgtMHgwM2I0XTtcdC8qIDB4MDNiNCAqL1xuJiM0MztcdF9fczMyXHRsYXp5X21tdV9jb3VudDtcdFx0XHQvKiAweDAzYjQgKi9cbiBcdF9fdTY0XHRwZXJjcHVfb2Zmc2V0O1x0XHRcdC8qIDB4MDNiOCAqL1xuIFx0X191OFx0cGVyY3B1X3JlZ2lzdGVyO1x0XHQvKiAweDAzYzAgKi9cbiBcdF9fdThcdHBhZF8weDAzYzFbMHgwNDAwLTB4MDNjMV07XHQvKiAweDAzYzEgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggODU5Y2U3YzdkNDU0NC4uMWU4YTc5OTg5ZWQ2ZSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC0zOSw2ICYjNDM7MzksNjQgQEAgZW51bSB7XG4gXG4gZXh0ZXJuIGF0b21pY19sb25nX3QgZGlyZWN0X3BhZ2VzX2NvdW50W1BHX0RJUkVDVF9NQVBfTUFYXTtcbiBcbiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgaW50ICpyZXMpO1xuJiM0Mztib29sIF9fbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpO1xuJiM0Mztib29sIF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKTtcbiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IG9sZF9wdGUsIHB0ZV90IHB0ZSk7XG4mIzQzO2Jvb2wgX19sYXp5X21tdV9wdGVwX3NldF93cnByb3RlY3QodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCk7XG4mIzQzO2Jvb2wgX19sYXp5X21tdV9zZXRfcHRlKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpO1xuJiM0Mztib29sIF9fbGF6eV9tbXVfcHRlcF9nZXQocHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpO1xuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX2xhenlfbW11X2FjdGl2ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKF9faXNfZGVmaW5lZChfX0RFQ09NUFJFU1NPUikpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKCFnZXRfbG93Y29yZSgpLVx1MDAzZWxhenlfbW11X2NvdW50KVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lXG4mIzQzO2Jvb2wgbGF6eV9tbXVfcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBpbnQgKnJlcylcbiYjNDM7e1xuJiM0MztcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0cmV0dXJuIF9fbGF6eV9tbXVfcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyhhZGRyLCBwdGVwLCByZXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lXG4mIzQzO2Jvb2wgbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWlzX2xhenlfbW11X2FjdGl2ZSgpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdHJldHVybiBfX2xhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcihhZGRyLCBwdGVwLCByZXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lXG4mIzQzO2Jvb2wgbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRyZXR1cm4gX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X3N0YXJ0KGFkZHIsIHB0ZXAsIHJlcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmVcbiYjNDM7Ym9vbCBsYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxuJiM0MztcdFx0XHRcdCAgICAgIHB0ZV90IG9sZF9wdGUsIHB0ZV90IHB0ZSlcbiYjNDM7e1xuJiM0MztcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0cmV0dXJuIF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoYWRkciwgcHRlcCwgb2xkX3B0ZSwgcHRlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZVxuJiM0Mztib29sIGxhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRyZXR1cm4gX19sYXp5X21tdV9wdGVwX3NldF93cnByb3RlY3QoYWRkciwgcHRlcCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9wYWdlX2NvdW50KGludCBsZXZlbCwgbG9uZyBjb3VudClcbiB7XG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJPQ19GUykpXG5AQCAtOTc4LDE3ICYjNDM7MTAzNiwzOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BtZChwbWRfdCAqcG1kcCwgcG1kX3QgcG1kKVxuIFx0V1JJVEVfT05DRSgqcG1kcCwgcG1kKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSlcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIF9fc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxuIHtcbiBcdGlmIChwdGVfcHJlc2VudChwdGUpKVxuIFx0XHRwdGUgPSBjbGVhcl9wdGVfYml0KHB0ZSwgX19wZ3Byb3QoX1BBR0VfVU5VU0VEKSk7XG4gXHRXUklURV9PTkNFKCpwdGVwLCBwdGUpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSlcbiYjNDM7e1xuJiM0MztcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkgfHwgIV9fbGF6eV9tbXVfc2V0X3B0ZShwdGVwLCBwdGUpKVxuJiM0MztcdFx0X19zZXRfcHRlKHB0ZXAsIHB0ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNkZWZpbmUgcHRlcF9nZXRfbG9ja2xlc3MgcHRlcF9nZXRfbG9ja2xlc3NcbiYjNDM7c3RhdGljIGlubGluZSBfX25vX3Nhbml0aXplX2FkZHJlc3MgcHRlX3QgcHRlcF9nZXRfbG9ja2xlc3MocHRlX3QgKnB0ZXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gUkVBRF9PTkNFKCpwdGVwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBwdGVfdCBfX3B0ZXBfZ2V0KHB0ZV90ICpwdGVwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIFJFQURfT05DRSgqcHRlcCk7XG4mIzQzO31cbiYjNDM7XG4gI2RlZmluZSBwdGVwX2dldCBwdGVwX2dldFxuIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9nZXQocHRlX3QgKnB0ZXApXG4ge1xuLVx0cmV0dXJuIFJFQURfT05DRSgqcHRlcCk7XG4mIzQzO1x0cHRlX3QgcmVzO1xuJiM0MztcbiYjNDM7XHRpZiAoIWlzX2xhenlfbW11X2FjdGl2ZSgpIHx8ICFfX2xhenlfbW11X3B0ZXBfZ2V0KHB0ZXAsIFx1MDAyNnJlcykpXG4mIzQzO1x0XHRyZXMgPSBfX3B0ZXBfZ2V0KHB0ZXApO1xuJiM0MztcdHJldHVybiByZXM7XG4gfVxuIFxuICNkZWZpbmUgcG1kcF9nZXQgcG1kcF9nZXRcbkBAIC0xMTgxLDYgJiM0MzsxMjYwLDE1IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3B0ZXBfaXB0ZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCBucixcbiBcdH0gd2hpbGUgKG5yICE9IDI1NSk7XG4gfVxuIFxuJiM0Mzt2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuJiM0MztcdFx0XHRcdFx0cHRlX3QgKnB0ZSk7XG4mIzQzOyNkZWZpbmUgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcyBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzXG4mIzQzO1xuJiM0Mzt2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSh2b2lkKTtcbiYjNDM7dm9pZCBhcmNoX2xlYXZlX2xhenlfbW11X21vZGUodm9pZCk7XG4mIzQzO3ZvaWQgYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlKHZvaWQpO1xuJiM0MztcbiAvKlxuICAqIFRoaXMgaXMgaGFyZCB0byB1bmRlcnN0YW5kLiBwdGVwX2dldF9hbmRfY2xlYXIgYW5kIHB0ZXBfY2xlYXJfZmx1c2hcbiAgKiBib3RoIGNsZWFyIHRoZSBUTEIgZm9yIHRoZSB1bm1hcHBlZCBwdGUuIFRoZSByZWFzb24gaXMgdGhhdFxuQEAgLTEyMDEsMTAgJiM0MzsxMjg5LDE2IEBAIHB0ZV90IHB0ZXBfeGNoZ19sYXp5KHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKiwgcHRlX3QpO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxuIHtcbi1cdHB0ZV90IHB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xuJiM0MztcdHB0ZV90IHB0ZTtcbiYjNDM7XHRpbnQgcmVzO1xuIFxuLVx0cHRlID0gcHRlcF94Y2hnX2RpcmVjdCh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXAsIHB0ZV9ta29sZChwdGUpKTtcbi1cdHJldHVybiBwdGVfeW91bmcocHRlKTtcbiYjNDM7XHRpZiAoIWxhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoYWRkciwgcHRlcCwgXHUwMDI2cmVzKSkge1xuJiM0MztcdFx0cHRlID0gX19wdGVwX2dldChwdGVwKTtcbiYjNDM7XHRcdHB0ZSA9IHB0ZV9ta29sZChwdGUpO1xuJiM0MztcdFx0cHRlID0gcHRlcF94Y2hnX2RpcmVjdCh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXAsIHB0ZSk7XG4mIzQzO1x0XHRyZXMgPSBwdGVfeW91bmcocHRlKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHJlcztcbiB9XG4gXG4gI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSX1lPVU5HX0ZMVVNIXG5AQCAtMTIyMCw3ICYjNDM7MTMxNCw4IEBAIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIHtcbiBcdHB0ZV90IHJlcztcbiBcbi1cdHJlcyA9IHB0ZXBfeGNoZ19sYXp5KG1tLCBhZGRyLCBwdGVwLCBfX3B0ZShfUEFHRV9JTlZBTElEKSk7XG4mIzQzO1x0aWYgKCFsYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIoYWRkciwgcHRlcCwgXHUwMDI2cmVzKSlcbiYjNDM7XHRcdHJlcyA9IHB0ZXBfeGNoZ19sYXp5KG1tLCBhZGRyLCBwdGVwLCBfX3B0ZShfUEFHRV9JTlZBTElEKSk7XG4gXHRwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcihtbSwgYWRkciwgcmVzKTtcbiBcdC8qIEF0IHRoaXMgcG9pbnQgdGhlIHJlZmVyZW5jZSB0aHJvdWdoIHRoZSBtYXBwaW5nIGlzIHN0aWxsIHByZXNlbnQgKi9cbiBcdGlmIChtbV9pc19wcm90ZWN0ZWQobW0pIFx1MDAyNlx1MDAyNiBwdGVfcHJlc2VudChyZXMpKVxuQEAgLTEyMjksOSAmIzQzOzEzMjQsMjggQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gfVxuIFxuICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9NT0RJRllfUFJPVF9UUkFOU0FDVElPTlxuLXB0ZV90IHB0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHB0ZV90ICopO1xuLXZvaWQgcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsXG4tXHRcdFx0ICAgICBwdGVfdCAqLCBwdGVfdCwgcHRlX3QpO1xuJiM0MztwdGVfdCBfX19wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBwdGVfdCAqKTtcbiYjNDM7dm9pZCBfX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyxcbiYjNDM7XHRcdFx0XHRwdGVfdCAqLCBwdGVfdCwgcHRlX3QpO1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZVxuJiM0MztwdGVfdCBwdGVwX21vZGlmeV9wcm90X3N0YXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiM0MztcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXG4mIzQzO3tcbiYjNDM7XHRwdGVfdCByZXM7XG4mIzQzO1xuJiM0MztcdGlmICghbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydChhZGRyLCBwdGVwLCBcdTAwMjZyZXMpKVxuJiM0MztcdFx0cmVzID0gX19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydCh2bWEsIGFkZHIsIHB0ZXApO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmVcbiYjNDM7dm9pZCBwdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuJiM0MztcdFx0XHQgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWxhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KGFkZHIsIHB0ZXAsIG9sZF9wdGUsIHB0ZSkpXG4mIzQzO1x0XHRfX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdCh2bWEsIGFkZHIsIHB0ZXAsIG9sZF9wdGUsIHB0ZSk7XG4mIzQzO31cbiBcbiAjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfQ0xFQVJfRkxVU0hcbiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5AQCAtMTI2MSwxMSAmIzQzOzEzNzUsMTMgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXJfZnVsbChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiB7XG4gXHRwdGVfdCByZXM7XG4gXG4tXHRpZiAoZnVsbCkge1xuLVx0XHRyZXMgPSBwdGVwX2dldChwdGVwKTtcbi1cdFx0c2V0X3B0ZShwdGVwLCBfX3B0ZShfUEFHRV9JTlZBTElEKSk7XG4tXHR9IGVsc2Uge1xuLVx0XHRyZXMgPSBwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpO1xuJiM0MztcdGlmICghbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKGFkZHIsIHB0ZXAsIFx1MDAyNnJlcykpIHtcbiYjNDM7XHRcdGlmIChmdWxsKSB7XG4mIzQzO1x0XHRcdHJlcyA9IF9fcHRlcF9nZXQocHRlcCk7XG4mIzQzO1x0XHRcdF9fc2V0X3B0ZShwdGVwLCBfX3B0ZShfUEFHRV9JTlZBTElEKSk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRyZXMgPSBwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpO1xuJiM0MztcdFx0fVxuIFx0fVxuIFx0cGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXIobW0sIGFkZHIsIHJlcyk7XG4gXHQvKiBBdCB0aGlzIHBvaW50IHRoZSByZWZlcmVuY2UgdGhyb3VnaCB0aGUgbWFwcGluZyBpcyBzdGlsbCBwcmVzZW50ICovXG5AQCAtMTI5MSwxMCAmIzQzOzE0MDcsMTUgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXJfZnVsbChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBzdGF0aWMgaW5saW5lIHZvaWQgcHRlcF9zZXRfd3Jwcm90ZWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcbiB7XG4tXHRwdGVfdCBwdGUgPSBwdGVwX2dldChwdGVwKTtcbiYjNDM7XHRwdGVfdCBwdGU7XG4gXG4tXHRpZiAocHRlX3dyaXRlKHB0ZSkpXG4tXHRcdHB0ZXBfeGNoZ19sYXp5KG1tLCBhZGRyLCBwdGVwLCBwdGVfd3Jwcm90ZWN0KHB0ZSkpO1xuJiM0MztcdGlmICghbGF6eV9tbXVfcHRlcF9zZXRfd3Jwcm90ZWN0KGFkZHIsIHB0ZXApKSB7XG4mIzQzO1x0XHRwdGUgPSBfX3B0ZXBfZ2V0KHB0ZXApO1xuJiM0MztcdFx0aWYgKHB0ZV93cml0ZShwdGUpKSB7XG4mIzQzO1x0XHRcdHB0ZSA9IHB0ZV93cnByb3RlY3QocHRlKTtcbiYjNDM7XHRcdFx0cHRlcF94Y2hnX2xhenkobW0sIGFkZHIsIHB0ZXAsIHB0ZSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIH1cbiBcbiAvKlxuQEAgLTEzMjcsNyAmIzQzOzE0NDgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2ZpeF9zcHVyaW91c19mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdCAqIFBURSBkb2VzIG5vdCBoYXZlIF9QQUdFX1BST1RFQ1Qgc2V0LCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBvdmVyaGVhZC5cbiBcdCAqIEEgbG9jYWwgUkRQIGNhbiBiZSB1c2VkIHRvIGRvIHRoZSBmbHVzaC5cbiBcdCAqL1xuLVx0aWYgKGNwdV9oYXNfcmRwKCkgXHUwMDI2XHUwMDI2ICEocHRlX3ZhbChwdGVwX2dldChwdGVwKSkgXHUwMDI2IF9QQUdFX1BST1RFQ1QpKVxuJiM0MztcdGlmIChjcHVfaGFzX3JkcCgpIFx1MDAyNlx1MDAyNiAhKHB0ZV92YWwoX19wdGVwX2dldChwdGVwKSkgXHUwMDI2IF9QQUdFX1BST1RFQ1QpKVxuIFx0XHRfX3B0ZXBfcmRwKGFkZHJlc3MsIHB0ZXAsIDEpO1xuIH1cbiAjZGVmaW5lIGZsdXNoX3RsYl9maXhfc3B1cmlvdXNfZmF1bHQgZmx1c2hfdGxiX2ZpeF9zcHVyaW91c19mYXVsdFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuY1xuaW5kZXggYjYwMjg0MzI4ZmUzZC4uZjVhM2M5ZTFiNmI4OCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jXG5AQCAtNzcsNiAmIzQzOzc3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vbWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3V2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vYXNtLW9mZnNldHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20vbGF6eV9tbXUuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2VudHJ5LmhcJiMzNDtcbiBcbiAvKlxuQEAgLTEwMTIsNSAmIzQzOzEwMTMsNiBAQCB2b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXG4gXG4gdm9pZCBfX2luaXQgYXJjaF9jcHVfZmluYWxpemVfaW5pdCh2b2lkKVxuIHtcbiYjNDM7XHRsYXp5X21tdV9vbmxpbmVfYm9vdF9jcHUoKTtcbiBcdHNjbHBfaW5pdCgpO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuY1xuaW5kZXggMGJhN2Y4OWI4MTYxMS4uMGE4MjZiYmFmMWRkYyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmNcbkBAIC01OSw2ICYjNDM7NTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS90b3BvbG9neS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Zkc28uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9tYWNjZXNzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL2xhenlfbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtlbnRyeS5oXCYjMzQ7XG4gXG4gZW51bSB7XG5AQCAtODY2LDYgJiM0Mzs4NjcsMTEgQEAgaW50IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGlkbGUpXG4gXHRyYyA9IHBjcHVfYWxsb2NfbG93Y29yZShwY3B1LCBjcHUpO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG4mIzQzO1x0cmMgPSBsYXp5X21tdV9vbmxpbmVfY3B1KEdGUF9LRVJORUwsIGNwdSk7XG4mIzQzO1x0aWYgKHJjKSB7XG4mIzQzO1x0XHRwY3B1X2ZyZWVfbG93Y29yZShwY3B1LCBjcHUpO1xuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcdH1cbiBcdC8qXG4gXHQgKiBNYWtlIHN1cmUgZ2xvYmFsIGNvbnRyb2wgcmVnaXN0ZXIgY29udGVudHMgZG8gbm90IGNoYW5nZVxuIFx0ICogdW50aWwgbmV3IENQVSBoYXMgaW5pdGlhbGl6ZWQgY29udHJvbCByZWdpc3RlcnMuXG5AQCAtOTIxLDYgJiM0Mzs5MjcsNyBAQCB2b2lkIF9fY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KVxuIFx0cGNwdSA9IHBlcl9jcHVfcHRyKFx1MDAyNnBjcHVfZGV2aWNlcywgY3B1KTtcbiBcdHdoaWxlICghcGNwdV9zdG9wcGVkKHBjcHUpKVxuIFx0XHRjcHVfcmVsYXgoKTtcbiYjNDM7XHRsYXp5X21tdV9vZmZsaW5lX2NwdShjcHUpO1xuIFx0cGNwdV9mcmVlX2xvd2NvcmUocGNwdSwgY3B1KTtcbiBcdGNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbW1fY3B1bWFzayhcdTAwMjZpbml0X21tKSk7XG4gXHRjcHVtYXNrX2NsZWFyX2NwdShjcHUsIFx1MDAyNmluaXRfbW0uY29udGV4dC5jcHVfYXR0YWNoX21hc2spO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9NYWtlZmlsZSBiL2FyY2gvczM5MC9tbS9NYWtlZmlsZVxuaW5kZXggMTkzODk5YzM5Y2E3Zi4uOTZjYWMzZTk5ZjUxNiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9tbS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL21tL01ha2VmaWxlXG5AQCAtNCw2ICYjNDM7NCw3IEBAXG4gI1xuIFxuIG9iai15XHRcdDo9IGluaXQubyBmYXVsdC5vIGV4dG1lbS5vIG1tYXAubyB2bWVtLm8gbWFjY2Vzcy5vXG4mIzQzO29iai15XHRcdDo9IGluaXQubyBmYXVsdC5vIGV4dG1lbS5vIG1tYXAubyB2bWVtLm8gbWFjY2Vzcy5vIGxhenlfbW11Lm9cbiBvYmoteVx0XHQmIzQzOz0gcGFnZS1zdGF0ZXMubyBwYWdlYXR0ci5vIHBndGFibGUubyBwZ2FsbG9jLm8gZXh0YWJsZS5vXG4gXG4gb2JqLSQoQ09ORklHX0NNTSlcdFx0JiM0Mzs9IGNtbS5vXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2xhenlfbW11LmMgYi9hcmNoL3MzOTAvbW0vbGF6eV9tbXUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdlM2E0MTE1ZWEwNDhcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9sYXp5X21tdS5jXG5AQCAtMCwwICYjNDM7MSw0MTggQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGd0YWJsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2thc2FuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9mYWNpbGl0eS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9sYXp5X21tdS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2t1bml0L3Zpc2liaWxpdHkuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBQVEVfUE9JU09OXHRfUEFHRV9MQVJHRVxuJiM0MztcbiYjNDM7c3RydWN0IGlwdGVfcmFuZ2Uge1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYmFzZV9lbmQ7XG4mIzQzO1x0cHRlX3QgKmJhc2VfcHRlO1xuJiM0MztcdHB0ZV90ICpzdGFydF9wdGU7XG4mIzQzO1x0cHRlX3QgKmVuZF9wdGU7XG4mIzQzO1x0cHRlX3QgY2FjaGVbUFRSU19QRVJfUFRFXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgaXB0ZV9yYW5nZSAqLCBpcHRlX3JhbmdlKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgY291bnRfY29udGlndW91cyhwdGVfdCAqc3RhcnQsIHB0ZV90ICplbmQsIGJvb2wgKnZhbGlkKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwYWdlX2ludmFsaWRfYml0O1xuJiM0MztcdHB0ZV90ICpwdGVwLCBwdGU7XG4mIzQzO1xuJiM0MztcdHB0ZSA9IF9fcHRlcF9nZXQoc3RhcnQpO1xuJiM0MztcdHBhZ2VfaW52YWxpZF9iaXQgPSBwdGVfdmFsKHB0ZSkgXHUwMDI2IF9QQUdFX0lOVkFMSUQ7XG4mIzQzO1xuJiM0MztcdGZvciAocHRlcCA9IHN0YXJ0ICYjNDM7IDE7IHB0ZXAgXHUwMDNjIGVuZDsgcHRlcCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHB0ZSA9IF9fcHRlcF9nZXQocHRlcCk7XG4mIzQzO1x0XHRpZiAoKHB0ZV92YWwocHRlKSBcdTAwMjYgX1BBR0VfSU5WQUxJRCkgIT0gcGFnZV9pbnZhbGlkX2JpdClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqdmFsaWQgPSAhKHBhZ2VfaW52YWxpZF9iaXQpO1xuJiM0MztcdHJldHVybiBwdGVwIC0gc3RhcnQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIF9faW52YWxpZGF0ZV9wdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdFx0XHQgICBpbnQgbnJfcHRlcywgcHRlX3QgKnB0ZXApXG4mIzQzO3tcbiYjNDM7XHRhdG9taWNfaW5jKFx1MDAyNm1tLVx1MDAzZWNvbnRleHQuZmx1c2hfY291bnQpO1xuJiM0MztcdGlmIChjcHVfaGFzX3RsYl9sYygpIFx1MDAyNlx1MDAyNiBjcHVtYXNrX2VxdWFsKG1tX2NwdW1hc2sobW0pLCBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSkpKVxuJiM0MztcdFx0X19wdGVwX2lwdGVfcmFuZ2UoYWRkciwgbnJfcHRlcyAtIDEsIHB0ZXAsIElQVEVfTE9DQUwpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdF9fcHRlcF9pcHRlX3JhbmdlKGFkZHIsIG5yX3B0ZXMgLSAxLCBwdGVwLCBJUFRFX0dMT0JBTCk7XG4mIzQzO1x0YXRvbWljX2RlYyhcdTAwMjZtbS1cdTAwM2Vjb250ZXh0LmZsdXNoX2NvdW50KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBpbnZhbGlkYXRlX3B0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuJiM0MztcdFx0XHRcdHB0ZV90ICpzdGFydCwgcHRlX3QgKmVuZClcbiYjNDM7e1xuJiM0MztcdGludCBucl9wdGVzO1xuJiM0MztcdGJvb2wgdmFsaWQ7XG4mIzQzO1xuJiM0MztcdG5yX3B0ZXMgPSBjb3VudF9jb250aWd1b3VzKHN0YXJ0LCBlbmQsIFx1MDAyNnZhbGlkKTtcbiYjNDM7XHRpZiAodmFsaWQpXG4mIzQzO1x0XHRfX2ludmFsaWRhdGVfcHRlX3JhbmdlKG1tLCBhZGRyLCBucl9wdGVzLCBzdGFydCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBucl9wdGVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzZXRfcHRlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4mIzQzO1x0XHRcdCAgcHRlX3QgKnN0YXJ0LCBwdGVfdCAqZW5kLCBwdGVfdCAqY2FjaGUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgbnJfcHRlcywgbnJfdG90YWwgPSBlbmQgLSBzdGFydDtcbiYjNDM7XHRwdGVfdCAqcHRlcCA9IHN0YXJ0O1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRrYXNhbl91bnBvaXNvbl9wdGUoc3RhcnQsIG5yX3RvdGFsKTtcbiYjNDM7XHR3aGlsZSAocHRlcCBcdTAwM2MgZW5kKSB7XG4mIzQzO1x0XHRucl9wdGVzID0gaW52YWxpZGF0ZV9wdGVfcmFuZ2UobW0sIGFkZHIsIHB0ZXAsIGVuZCk7XG4mIzQzO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcHRlczsgaSYjNDM7JiM0MzssIHB0ZXAmIzQzOyYjNDM7LCBjYWNoZSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0X19zZXRfcHRlKHB0ZXAsICpjYWNoZSk7XG4mIzQzO1x0XHRcdCpjYWNoZSA9IF9fcHRlKFBURV9QT0lTT04pO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGFkZHIgJiM0Mzs9IG5yX3B0ZXMgKiBQQUdFX1NJWkU7XG4mIzQzO1x0fVxuJiM0MztcdGthc2FuX3BvaXNvbl9wdGUoc3RhcnQsIG5yX3RvdGFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW50ZXJfaXB0ZV9ub3JhbmdlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaXB0ZV9yYW5nZSBfX21heWJlX3VudXNlZCAqcmFuZ2U7XG4mIzQzO1xuJiM0MztcdGlmICghdGVzdF9mYWNpbGl0eSgxMykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiYjNDM7XG4mIzQzO1x0cmFuZ2UgPSBnZXRfY3B1X3ZhcihpcHRlX3JhbmdlKTtcbiYjNDM7XHRnZXRfbG93Y29yZSgpLVx1MDAzZWxhenlfbW11X2NvdW50JiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0bG9jYWxfYmhfZW5hYmxlKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGVudGVyX2lwdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4mIzQzO1x0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgcHRlX3QgKnB0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbnJfcHRlcztcbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2ZhY2lsaXR5KDEzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuJiM0MztcbiYjNDM7XHRyYW5nZSA9IGdldF9jcHVfdmFyKGlwdGVfcmFuZ2UpO1xuJiM0MztcdGdldF9sb3djb3JlKCktXHUwMDNlbGF6eV9tbXVfY291bnQmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRpZiAobW1faXNfcHJvdGVjdGVkKG1tKSkge1xuJiM0MztcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYW5nZS1cdTAwM2VtbSA9IG1tO1xuJiM0MztcdHJhbmdlLVx1MDAzZWJhc2VfYWRkciA9IGFkZHI7XG4mIzQzO1x0cmFuZ2UtXHUwMDNlYmFzZV9lbmQgPSBlbmQ7XG4mIzQzO1x0cmFuZ2UtXHUwMDNlYmFzZV9wdGUgPSBwdGU7XG4mIzQzO1xuJiM0MztcdG5yX3B0ZXMgPSAocmFuZ2UtXHUwMDNlYmFzZV9lbmQgLSByYW5nZS1cdTAwM2ViYXNlX2FkZHIpIC8gUEFHRV9TSVpFO1xuJiM0MztcdGthc2FuX3BvaXNvbl9wdGUocmFuZ2UtXHUwMDNlYmFzZV9wdGUsIG5yX3B0ZXMpO1xuJiM0MztcbiYjNDM7XHRsb2NhbF9iaF9lbmFibGUoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbGVhdmVfaXB0ZV9yYW5nZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cHRlX3QgKnB0ZXAsICpzdGFydCwgKnN0YXJ0X2NhY2hlLCAqY2FjaGU7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzdGFydF9hZGRyLCBhZGRyO1xuJiM0MztcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbnJfcHRlcztcbiYjNDM7XHRpbnQgc3RhcnRfaWR4O1xuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X3ByZWVtcHRpb25fZGlzYWJsZWQoKTtcbiYjNDM7XHRyYW5nZSA9IHRoaXNfY3B1X3JlYWQoaXB0ZV9yYW5nZSk7XG4mIzQzO1x0aWYgKCFyYW5nZS1cdTAwM2VtbSlcbiYjNDM7XHRcdGdvdG8gbm9yYW5nZTtcbiYjNDM7XHRpZiAoIXJhbmdlLVx1MDAzZXN0YXJ0X3B0ZSlcbiYjNDM7XHRcdGdvdG8gZG9uZTtcbiYjNDM7XG4mIzQzO1x0c3RhcnQgPSByYW5nZS1cdTAwM2VzdGFydF9wdGU7XG4mIzQzO1x0c3RhcnRfaWR4ID0gcmFuZ2UtXHUwMDNlc3RhcnRfcHRlIC0gcmFuZ2UtXHUwMDNlYmFzZV9wdGU7XG4mIzQzO1x0c3RhcnRfYWRkciA9IHJhbmdlLVx1MDAzZWJhc2VfYWRkciAmIzQzOyBzdGFydF9pZHggKiBQQUdFX1NJWkU7XG4mIzQzO1x0YWRkciA9IHN0YXJ0X2FkZHI7XG4mIzQzO1x0c3RhcnRfY2FjaGUgPSBcdTAwMjZyYW5nZS1cdTAwM2VjYWNoZVtzdGFydF9pZHhdO1xuJiM0MztcdGNhY2hlID0gc3RhcnRfY2FjaGU7XG4mIzQzO1x0Zm9yIChwdGVwID0gc3RhcnQ7IHB0ZXAgXHUwMDNjIHJhbmdlLVx1MDAzZWVuZF9wdGU7IHB0ZXAmIzQzOyYjNDM7LCBjYWNoZSYjNDM7JiM0MzssIGFkZHIgJiM0Mzs9IFBBR0VfU0laRSkge1xuJiM0MztcdFx0aWYgKHB0ZV92YWwoKmNhY2hlKSA9PSBQVEVfUE9JU09OKSB7XG4mIzQzO1x0XHRcdGlmIChzdGFydCkge1xuJiM0MztcdFx0XHRcdHNldF9wdGVfcmFuZ2UocmFuZ2UtXHUwMDNlbW0sIHN0YXJ0X2FkZHIsIHN0YXJ0LCBwdGVwLCBzdGFydF9jYWNoZSk7XG4mIzQzO1x0XHRcdFx0c3RhcnQgPSBOVUxMO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9IGVsc2UgaWYgKCFzdGFydCkge1xuJiM0MztcdFx0XHRzdGFydCA9IHB0ZXA7XG4mIzQzO1x0XHRcdHN0YXJ0X2FkZHIgPSBhZGRyO1xuJiM0MztcdFx0XHRzdGFydF9jYWNoZSA9IGNhY2hlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRzZXRfcHRlX3JhbmdlKHJhbmdlLVx1MDAzZW1tLCBzdGFydF9hZGRyLCBzdGFydCwgcHRlcCwgc3RhcnRfY2FjaGUpO1xuJiM0MztcbiYjNDM7XHRyYW5nZS1cdTAwM2VzdGFydF9wdGUgPSBOVUxMO1xuJiM0MztcdHJhbmdlLVx1MDAzZWVuZF9wdGUgPSBOVUxMO1xuJiM0MztcbiYjNDM7ZG9uZTpcbiYjNDM7XHRucl9wdGVzID0gKHJhbmdlLVx1MDAzZWJhc2VfZW5kIC0gcmFuZ2UtXHUwMDNlYmFzZV9hZGRyKSAvIFBBR0VfU0laRTtcbiYjNDM7XHRrYXNhbl91bnBvaXNvbl9wdGUocmFuZ2UtXHUwMDNlYmFzZV9wdGUsIG5yX3B0ZXMpO1xuJiM0MztcbiYjNDM7XHRyYW5nZS1cdTAwM2VtbSA9IE5VTEw7XG4mIzQzO1x0cmFuZ2UtXHUwMDNlYmFzZV9hZGRyID0gMDtcbiYjNDM7XHRyYW5nZS1cdTAwM2ViYXNlX2VuZCA9IDA7XG4mIzQzO1x0cmFuZ2UtXHUwMDNlYmFzZV9wdGUgPSBOVUxMO1xuJiM0MztcbiYjNDM7bm9yYW5nZTpcbiYjNDM7XHRnZXRfbG93Y29yZSgpLVx1MDAzZWxhenlfbW11X2NvdW50LS07XG4mIzQzO1x0cHV0X2NwdV92YXIoaXB0ZV9yYW5nZSk7XG4mIzQzO1xuJiM0MztcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBmbHVzaF9sYXp5X21tdV9tb2RlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGFkZHIsIGVuZDtcbiYjNDM7XHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4mIzQzO1x0cHRlX3QgKnB0ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2ZhY2lsaXR5KDEzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cmFuZ2UgPSBnZXRfY3B1X3ZhcihpcHRlX3JhbmdlKTtcbiYjNDM7XHRpZiAocmFuZ2UtXHUwMDNlbW0pIHtcbiYjNDM7XHRcdG1tID0gcmFuZ2UtXHUwMDNlbW07XG4mIzQzO1x0XHRhZGRyID0gcmFuZ2UtXHUwMDNlYmFzZV9hZGRyO1xuJiM0MztcdFx0ZW5kID0gcmFuZ2UtXHUwMDNlYmFzZV9lbmQ7XG4mIzQzO1x0XHRwdGUgPSByYW5nZS1cdTAwM2ViYXNlX3B0ZTtcbiYjNDM7XG4mIzQzO1x0XHRsZWF2ZV9pcHRlX3JhbmdlKCk7XG4mIzQzO1x0XHRlbnRlcl9pcHRlX3JhbmdlKG1tLCBhZGRyLCBlbmQsIHB0ZSk7XG4mIzQzO1x0fVxuJiM0MztcdHB1dF9jcHVfdmFyKGlwdGVfcmFuZ2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0ZW50ZXJfaXB0ZV9ub3JhbmdlKCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9JRl9LVU5JVChhcmNoX2VudGVyX2xhenlfbW11X21vZGUpO1xuJiM0MztcbiYjNDM7dm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuJiM0MztcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiYjNDM7XHRcdFx0XHRcdHB0ZV90ICpwdGUpXG4mIzQzO3tcbiYjNDM7XHRlbnRlcl9pcHRlX3JhbmdlKG1tLCBhZGRyLCBlbmQsIHB0ZSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9JRl9LVU5JVChhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKTtcbiYjNDM7XG4mIzQzO3ZvaWQgYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRsZWF2ZV9pcHRlX3JhbmdlKCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9JRl9LVU5JVChhcmNoX2xlYXZlX2xhenlfbW11X21vZGUpO1xuJiM0MztcbiYjNDM7dm9pZCBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUodm9pZClcbiYjNDM7e1xuJiM0MztcdGZsdXNoX2xhenlfbW11X21vZGUoKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGFyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZSk7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2UsIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaWR4ID0gcHRlcCAtIHJhbmdlLVx1MDAzZWJhc2VfcHRlO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9wcmVlbXB0aW9uX2Rpc2FibGVkKCk7XG4mIzQzO1x0cmFuZ2UtXHUwMDNlY2FjaGVbaWR4XSA9IHB0ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyYW5nZS1cdTAwM2VzdGFydF9wdGUpIHtcbiYjNDM7XHRcdHJhbmdlLVx1MDAzZXN0YXJ0X3B0ZSA9IHB0ZXA7XG4mIzQzO1x0XHRyYW5nZS1cdTAwM2VlbmRfcHRlID0gcHRlcCAmIzQzOyAxO1xuJiM0MztcdH0gZWxzZSBpZiAocHRlcCBcdTAwM2MgcmFuZ2UtXHUwMDNlc3RhcnRfcHRlKSB7XG4mIzQzO1x0XHRyYW5nZS1cdTAwM2VzdGFydF9wdGUgPSBwdGVwO1xuJiM0MztcdH0gZWxzZSBpZiAocHRlcCAmIzQzOyAxIFx1MDAzZSByYW5nZS1cdTAwM2VlbmRfcHRlKSB7XG4mIzQzO1x0XHRyYW5nZS1cdTAwM2VlbmRfcHRlID0gcHRlcCAmIzQzOyAxO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHB0ZV90IF9faXB0ZV9yYW5nZV9wdGVwX2dldChzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2UsIHB0ZV90ICpwdGVwKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGlkeCA9IHB0ZXAgLSByYW5nZS1cdTAwM2ViYXNlX3B0ZTtcbiYjNDM7XHRwdGVfdCBwdGU7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X3ByZWVtcHRpb25fZGlzYWJsZWQoKTtcbiYjNDM7XHRpZiAocHRlX3ZhbChyYW5nZS1cdTAwM2VjYWNoZVtpZHhdKSA9PSBQVEVfUE9JU09OKSB7XG4mIzQzO1x0XHRrYXNhbl91bnBvaXNvbl9wdGUocHRlcCwgMSk7XG4mIzQzO1x0XHRwdGUgPSBfX3B0ZXBfZ2V0KHB0ZXApO1xuJiM0MztcdFx0a2FzYW5fcG9pc29uX3B0ZShwdGVwLCAxKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gcHRlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJhbmdlLVx1MDAzZWNhY2hlW2lkeF07XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgaXB0ZV9yYW5nZSAqdGhpc19pcHRlX3JhbmdlKHB0ZV90ICpwdGVwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xuJiM0MztcdHVuc2lnbmVkIGludCBucl9wdGVzO1xuJiM0MztcbiYjNDM7XHRyYW5nZSA9IHRoaXNfY3B1X3JlYWQoaXB0ZV9yYW5nZSk7XG4mIzQzO1x0aWYgKHB0ZXAgXHUwMDNjIHJhbmdlLVx1MDAzZWJhc2VfcHRlKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0bnJfcHRlcyA9IChyYW5nZS1cdTAwM2ViYXNlX2VuZCAtIHJhbmdlLVx1MDAzZWJhc2VfYWRkcikgLyBQQUdFX1NJWkU7XG4mIzQzO1x0aWYgKHB0ZXAgXHUwMDNlPSByYW5nZS1cdTAwM2ViYXNlX3B0ZSAmIzQzOyBucl9wdGVzKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHJldHVybiByYW5nZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Ym9vbCBfX2xhenlfbW11X3NldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcbiYjNDM7XG4mIzQzO1x0cmFuZ2UgPSB0aGlzX2lwdGVfcmFuZ2UocHRlcCk7XG4mIzQzO1x0aWYgKCFyYW5nZSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0X19pcHRlX3JhbmdlX3NldF9wdGUocmFuZ2UsIHB0ZXAsIHB0ZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztib29sIF9fbGF6eV9tbXVfcHRlcF9nZXQocHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XG4mIzQzO1xuJiM0MztcdHJhbmdlID0gdGhpc19pcHRlX3JhbmdlKHB0ZXApO1xuJiM0MztcdGlmICghcmFuZ2UpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdCpyZXMgPSBfX2lwdGVfcmFuZ2VfcHRlcF9nZXQocmFuZ2UsIHB0ZXApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgaW50ICpyZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XG4mIzQzO1x0cHRlX3QgcHRlLCBvbGQ7XG4mIzQzO1xuJiM0MztcdHJhbmdlID0gdGhpc19pcHRlX3JhbmdlKHB0ZXApO1xuJiM0MztcdGlmICghcmFuZ2UpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG9sZCA9IF9faXB0ZV9yYW5nZV9wdGVwX2dldChyYW5nZSwgcHRlcCk7XG4mIzQzO1x0cHRlID0gcHRlX21rb2xkKG9sZCk7XG4mIzQzO1x0X19pcHRlX3JhbmdlX3NldF9wdGUocmFuZ2UsIHB0ZXAsIHB0ZSk7XG4mIzQzO1x0KnJlcyA9IHB0ZV95b3VuZyhvbGQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcih1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xuJiM0MztcdHB0ZV90IHB0ZSwgb2xkO1xuJiM0MztcbiYjNDM7XHRyYW5nZSA9IHRoaXNfaXB0ZV9yYW5nZShwdGVwKTtcbiYjNDM7XHRpZiAoIXJhbmdlKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRvbGQgPSBfX2lwdGVfcmFuZ2VfcHRlcF9nZXQocmFuZ2UsIHB0ZXApO1xuJiM0MztcdHB0ZSA9IF9fcHRlKF9QQUdFX0lOVkFMSUQpO1xuJiM0MztcdF9faXB0ZV9yYW5nZV9zZXRfcHRlKHJhbmdlLCBwdGVwLCBwdGUpO1xuJiM0MztcdCpyZXMgPSBvbGQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztib29sIF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKGFkZHIsIHB0ZXAsIHJlcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2Jvb2wgX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxuJiM0MztcdFx0XHRcdFx0cHRlX3Qgb2xkX3B0ZSwgcHRlX3QgcHRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xuJiM0MztcbiYjNDM7XHRyYW5nZSA9IHRoaXNfaXB0ZV9yYW5nZShwdGVwKTtcbiYjNDM7XHRpZiAoIXJhbmdlKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2Jvb2wgX19sYXp5X21tdV9wdGVwX3NldF93cnByb3RlY3QodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcbiYjNDM7XHRwdGVfdCBwdGU7XG4mIzQzO1xuJiM0MztcdHJhbmdlID0gdGhpc19pcHRlX3JhbmdlKHB0ZXApO1xuJiM0MztcdGlmICghcmFuZ2UpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHB0ZSA9IF9faXB0ZV9yYW5nZV9wdGVwX2dldChyYW5nZSwgcHRlcCk7XG4mIzQzO1x0aWYgKHB0ZV93cml0ZShwdGUpKSB7XG4mIzQzO1x0XHRwdGUgPSBwdGVfd3Jwcm90ZWN0KHB0ZSk7XG4mIzQzO1x0XHRfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbGF6eV9tbXVfb25saW5lX2NwdShnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmICghdGVzdF9mYWNpbGl0eSgxMykpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmFuZ2UgPSBremFsbG9jX29iaigqcmFuZ2UsIGdmcCk7XG4mIzQzO1x0aWYgKCFyYW5nZSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocmFuZ2UtXHUwMDNlY2FjaGUpOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHJhbmdlLVx1MDAzZWNhY2hlW2ldID0gX19wdGUoUFRFX1BPSVNPTik7XG4mIzQzO1x0cGVyX2NwdShpcHRlX3JhbmdlLCBjcHUpID0gcmFuZ2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGxhenlfbW11X29mZmxpbmVfY3B1KHVuc2lnbmVkIGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XG4mIzQzO1xuJiM0MztcdGlmICghdGVzdF9mYWNpbGl0eSgxMykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJhbmdlID0gcGVyX2NwdShpcHRlX3JhbmdlLCBjcHUpO1xuJiM0MztcdHBlcl9jcHUoaXB0ZV9yYW5nZSwgY3B1KSA9IE5VTEw7XG4mIzQzO1x0a2ZyZWUocmFuZ2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIF9faW5pdCBsYXp5X21tdV9vbmxpbmVfYm9vdF9jcHUodm9pZClcbiYjNDM7e1xuJiM0MztcdGxhenlfbW11X29ubGluZV9jcHUoR0ZQX0FUT01JQywgMCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jIGIvYXJjaC9zMzkwL21tL3BndGFibGUuY1xuaW5kZXggNGFjZDhiMTQwYzRiZC4uZGYzNjUyM2JjYmJiYiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmNcbkBAIC0xNjYsMTQgJiM0MzsxNjYsMTQgQEAgcHRlX3QgcHRlcF94Y2hnX2xhenkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiB9XG4gRVhQT1JUX1NZTUJPTChwdGVwX3hjaGdfbGF6eSk7XG4gXG4tcHRlX3QgcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdCAgICAgcHRlX3QgKnB0ZXApXG4mIzQzO3B0ZV90IF9fX3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdFx0XHRwdGVfdCAqcHRlcClcbiB7XG4gXHRyZXR1cm4gcHRlcF9mbHVzaF9sYXp5KHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgcHRlcCwgMSk7XG4gfVxuIFxuLXZvaWQgcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHQgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpXG4mIzQzO3ZvaWQgX19fcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdFx0XHRwdGVfdCAqcHRlcCwgcHRlX3Qgb2xkX3B0ZSwgcHRlX3QgcHRlKVxuIHtcbiBcdHNldF9wdGUocHRlcCwgcHRlKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jXG5pbmRleCAyMjlkMWZjM2Q3ZjFjLi45MTY3ODVjM2IyZTBiIDEwMDY0NFxuLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9wcm9jL3Rhc2tfbW11LmNcbkBAIC0yODUyLDcgJiM0MzsyODUyLDcgQEAgc3RhdGljIGludCBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbiYjNDM7XHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXModm1hLVx1MDAzZXZtX21tLCBzdGFydCwgZW5kLCBzdGFydF9wdGUpO1xuIFxuIFx0aWYgKChwLVx1MDAzZWFyZy5mbGFncyBcdTAwMjYgUE1fU0NBTl9XUF9NQVRDSElORykgXHUwMDI2XHUwMDI2ICFwLVx1MDAzZXZlY19vdXQpIHtcbiBcdFx0LyogRmFzdCBwYXRoIGZvciBwZXJmb3JtaW5nIGV4Y2x1c2l2ZSBXUCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2FzYW4uaCBiL2luY2x1ZGUvbGludXgva2FzYW4uaFxuaW5kZXggYmYyMzNiZGU2OGM3ZS4uMWFhNGQ5ZGQyNDg1YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva2FzYW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rYXNhbi5oXG5AQCAtNiw2ICYjNDM7Niw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2FzYW4tZW5hYmxlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2FzYW4tdGFncy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGd0YWJsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RhdGljX2tleS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuQEAgLTM1LDggJiM0MzszNiw2IEBAIHR5cGVkZWYgdW5zaWduZWQgaW50IF9fYml0d2lzZSBrYXNhbl92bWFsbG9jX2ZsYWdzX3Q7XG4gXG4gI2lmIGRlZmluZWQoQ09ORklHX0tBU0FOX0dFTkVSSUMpIHx8IGRlZmluZWQoQ09ORklHX0tBU0FOX1NXX1RBR1MpXG4gXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvcGd0YWJsZS5oXHUwMDNlXG4tXG4gLyogU29mdHdhcmUgS0FTQU4gaW1wbGVtZW50YXRpb25zIHVzZSBzaGFkb3cgbWVtb3J5LiAqL1xuIFxuICNpZmRlZiBDT05GSUdfS0FTQU5fU1dfVEFHU1xuQEAgLTEzNCw2ICYjNDM7MTMzLDIwIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcdFx0X19rYXNhbl9wb2lzb25fc2xhYihzbGFiKTtcbiB9XG4gXG4mIzQzO3ZvaWQgX19rYXNhbl9wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucik7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucilcbiYjNDM7e1xuJiM0MztcdGlmIChrYXNhbl9lbmFibGVkKCkpXG4mIzQzO1x0XHRfX2thc2FuX3BvaXNvbl9wdGUocHRlLCBucik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgX19rYXNhbl91bnBvaXNvbl9wdGUocHRlX3QgKnB0ZSwgaW50IG5yKTtcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGthc2FuX3VucG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpXG4mIzQzO3tcbiYjNDM7XHRpZiAoa2FzYW5fZW5hYmxlZCgpKVxuJiM0MztcdFx0X19rYXNhbl91bnBvaXNvbl9wdGUocHRlLCBucik7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBfX2thc2FuX3VucG9pc29uX25ld19vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB2b2lkICpvYmplY3QpO1xuIC8qKlxuICAqIGthc2FuX3VucG9pc29uX25ld19vYmplY3QgLSBUZW1wb3JhcmlseSB1bnBvaXNvbiBhIG5ldyBzbGFiIG9iamVjdC5cbkBAIC00MTQsNiAmIzQzOzQyNyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrYXNhbl91bnBvaXNvbl9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBzdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fcG9pc29uX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIpIHt9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucikge31cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGthc2FuX3VucG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGthc2FuX3VucG9pc29uX25ld19vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLFxuIFx0XHRcdFx0XHR2b2lkICpvYmplY3QpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGthc2FuX3BvaXNvbl9uZXdfb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaCBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG5pbmRleCAyOTgxZTM4NmRhN2IzLi5jYzg1ZGFmMzA3MzllIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG5AQCAtMjcxLDYgJiM0MzsyNzEsNTAgQEAgc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfZW5hYmxlKHZvaWQpXG4gXHRcdGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSgpO1xuIH1cbiBcbiYjNDM7I2lmbmRlZiBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgcHRlX3QgKnB0ZXApXG4mIzQzO3tcbiYjNDM7XHRhcmNoX2VudGVyX2xhenlfbW11X21vZGUoKTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMoKSAtIEVuYWJsZSB0aGUgbGF6eSBNTVUgbW9kZSB3aXRoIGEgc3BlZWR1cCBoaW50LlxuJiM0MzsgKiBAbW06IEFkZHJlc3Mgc3BhY2UgdGhlIHBhZ2VzIGFyZSBtYXBwZWQgaW50by5cbiYjNDM7ICogQGFkZHI6IFN0YXJ0IGFkZHJlc3Mgb2YgdGhlIHJhbmdlLlxuJiM0MzsgKiBAZW5kOiBFbmQgYWRkcmVzcyBvZiB0aGUgcmFuZ2UuXG4mIzQzOyAqIEBwdGVwOiBQYWdlIHRhYmxlIHBvaW50ZXIgZm9yIHRoZSBmaXJzdCBlbnRyeS5cbiYjNDM7ICpcbiYjNDM7ICogRW50ZXJzIGEgbmV3IGxhenkgTU1VIG1vZGUgc2VjdGlvbjsgaWYgdGhlIG1vZGUgd2FzIG5vdCBhbHJlYWR5IGVuYWJsZWQsXG4mIzQzOyAqIGVuYWJsZXMgaXQgYW5kIGNhbGxzIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMoKS5cbiYjNDM7ICpcbiYjNDM7ICogUFRFcyB0aGF0IGZhbGwgd2l0aGluIHRoZSBzcGVjaWZpZWQgcmFuZ2UgbWlnaHQgb2JzZXJ2ZSB1cGRhdGUgc3BlZWR1cHMuXG4mIzQzOyAqIFRoZSBQVEVzIG11c3QgYmVsb25nIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBzcGFjZSBhbmQgYmUgaW4gdGhlIHNhbWUgUE1ELlxuJiM0MzsgKlxuJiM0MzsgKiBUaGVyZSBhcmUgbm8gcmVxdWlyZW1lbnRzIG9uIHRoZSBvcmRlciBvciByYW5nZSBjb21wbGV0ZW5lc3Mgb2YgUFRFXG4mIzQzOyAqIHVwZGF0ZXMgZm9yIHRoZSBzcGVjaWZpZWQgcmFuZ2UuXG4mIzQzOyAqXG4mIzQzOyAqIE11c3QgYmUgcGFpcmVkIHdpdGggYSBjYWxsIHRvIGxhenlfbW11X21vZGVfZGlzYWJsZSgpLlxuJiM0MzsgKlxuJiM0MzsgKiBIYXMgbm8gZWZmZWN0IGlmIGNhbGxlZDpcbiYjNDM7ICogLSBXaGlsZSBwYXVzZWQgLSBzZWUgbGF6eV9tbXVfbW9kZV9wYXVzZSgpXG4mIzQzOyAqIC0gSW4gaW50ZXJydXB0IGNvbnRleHRcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBwdGVfdCAqcHRlcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBsYXp5X21tdV9zdGF0ZSAqc3RhdGUgPSBcdTAwMjZjdXJyZW50LVx1MDAzZWxhenlfbW11X3N0YXRlO1xuJiM0MztcbiYjNDM7XHRpZiAoaW5faW50ZXJydXB0KCkgfHwgc3RhdGUtXHUwMDNlcGF1c2VfY291bnQgXHUwMDNlIDApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdFZNX1dBUk5fT05fT05DRShzdGF0ZS1cdTAwM2VlbmFibGVfY291bnQgPT0gVThfTUFYKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHN0YXRlLVx1MDAzZWVuYWJsZV9jb3VudCYjNDM7JiM0MzsgPT0gMClcbiYjNDM7XHRcdGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgcHRlcCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCkgLSBEaXNhYmxlIHRoZSBsYXp5IE1NVSBtb2RlLlxuICAqXG5AQCAtMzg3LDYgJiM0Mzs0MzEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9yZXN1bWUodm9pZClcbiB9XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9lbmFibGUodm9pZCkge31cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHB0ZV90ICpwdGVwKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBsYXp5X21tdV9tb2RlX2Rpc2FibGUodm9pZCkge31cbiBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9wYXVzZSh2b2lkKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBsYXp5X21tdV9tb2RlX3Jlc3VtZSh2b2lkKSB7fVxuZGlmZiAtLWdpdCBhL21tL2thc2FuL2NvbW1vbi5jIGIvbW0va2FzYW4vY29tbW9uLmNcbmluZGV4IGI3ZDA1YzJhNmQ5M2QuLjk0ZDEwNjA5NDk4OTEgMTAwNjQ0XG4tLS0gYS9tbS9rYXNhbi9jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0va2FzYW4vY29tbW9uLmNcbkBAIC0xNjMsNiAmIzQzOzE2MywyMCBAQCB2b2lkIF9fa2FzYW5fcG9pc29uX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIpXG4gXHRcdCAgICAgS0FTQU5fU0xBQl9SRURaT05FLCBmYWxzZSk7XG4gfVxuIFxuJiM0Mzt2b2lkIF9fa2FzYW5fcG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpXG4mIzQzO3tcbiYjNDM7XHRpZiAoSVNfQUxJR05FRChzaXplb2YoKnB0ZSksIEtBU0FOX0dSQU5VTEVfU0laRSkpXG4mIzQzO1x0XHRrYXNhbl9wb2lzb24ocHRlLCBzaXplb2YoKnB0ZSkgKiBuciwgS0FTQU5fTEFaWV9NTVVfUFRFLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoX19rYXNhbl9wb2lzb25fcHRlKTtcbiYjNDM7XG4mIzQzO3ZvaWQgX19rYXNhbl91bnBvaXNvbl9wdGUocHRlX3QgKnB0ZSwgaW50IG5yKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKElTX0FMSUdORUQoc2l6ZW9mKCpwdGUpLCBLQVNBTl9HUkFOVUxFX1NJWkUpKVxuJiM0MztcdFx0a2FzYW5fdW5wb2lzb24ocHRlLCBzaXplb2YoKnB0ZSkgKiBuciwgZmFsc2UpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKF9fa2FzYW5fdW5wb2lzb25fcHRlKTtcbiYjNDM7XG4gdm9pZCBfX2thc2FuX3VucG9pc29uX25ld19vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB2b2lkICpvYmplY3QpXG4ge1xuIFx0a2FzYW5fdW5wb2lzb24ob2JqZWN0LCBjYWNoZS1cdTAwM2VvYmplY3Rfc2l6ZSwgZmFsc2UpO1xuZGlmZiAtLWdpdCBhL21tL2thc2FuL2thc2FuLmggYi9tbS9rYXNhbi9rYXNhbi5oXG5pbmRleCBmYzkxNjlhNTQ3NjYyLi4xYTJkMThjZGIyMWQ5IDEwMDY0NFxuLS0tIGEvbW0va2FzYW4va2FzYW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0va2FzYW4va2FzYW4uaFxuQEAgLTE0NCwxMiAmIzQzOzE0NCwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wga2FzYW5fcmVxdWlyZXNfbWV0YSh2b2lkKVxuICNkZWZpbmUgS0FTQU5fUEFHRV9SRURaT05FXHQweEZFICAvKiByZWR6b25lIGZvciBrbWFsbG9jX2xhcmdlIGFsbG9jYXRpb24gKi9cbiAjZGVmaW5lIEtBU0FOX1NMQUJfUkVEWk9ORVx0MHhGQyAgLyogcmVkem9uZSBmb3Igc2xhYiBvYmplY3QgKi9cbiAjZGVmaW5lIEtBU0FOX1NMQUJfRlJFRVx0XHQweEZCICAvKiBmcmVlZCBzbGFiIG9iamVjdCAqL1xuJiM0MzsjZGVmaW5lIEtBU0FOX0xBWllfTU1VX1BURVx0MHhGRCAgLyogZGlyZWN0IHB0ZSBhY2Nlc3MgaW4gbGF6eSBtbXUgbW9kZSAqL1xuICNkZWZpbmUgS0FTQU5fVk1BTExPQ19JTlZBTElEXHQweEY4ICAvKiBpbmFjY2Vzc2libGUgc3BhY2UgaW4gdm1hcCBhcmVhICovXG4gI2Vsc2VcbiAjZGVmaW5lIEtBU0FOX1BBR0VfRlJFRVx0XHRLQVNBTl9UQUdfSU5WQUxJRFxuICNkZWZpbmUgS0FTQU5fUEFHRV9SRURaT05FXHRLQVNBTl9UQUdfSU5WQUxJRFxuICNkZWZpbmUgS0FTQU5fU0xBQl9SRURaT05FXHRLQVNBTl9UQUdfSU5WQUxJRFxuICNkZWZpbmUgS0FTQU5fU0xBQl9GUkVFXHRcdEtBU0FOX1RBR19JTlZBTElEXG4mIzQzOyNkZWZpbmUgS0FTQU5fTEFaWV9NTVVfUFRFXHRLQVNBTl9UQUdfSU5WQUxJRFxuICNkZWZpbmUgS0FTQU5fVk1BTExPQ19JTlZBTElEXHRLQVNBTl9UQUdfSU5WQUxJRCAvKiBvbmx5IHVzZWQgZm9yIFNXX1RBR1MgKi9cbiAjZW5kaWZcbiBcbmRpZmYgLS1naXQgYS9tbS9rYXNhbi9yZXBvcnRfZ2VuZXJpYy5jIGIvbW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuY1xuaW5kZXggZjViOGUzN2IzODA1Yy4uNDg5ZDRhOGQ2OTAyZCAxMDA2NDRcbi0tLSBhL21tL2thc2FuL3JlcG9ydF9nZW5lcmljLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2thc2FuL3JlcG9ydF9nZW5lcmljLmNcbkBAIC0xMTMsNiAmIzQzOzExMyw5IEBAIHN0YXRpYyBjb25zdCBjaGFyICpnZXRfc2hhZG93X2J1Z190eXBlKHN0cnVjdCBrYXNhbl9yZXBvcnRfaW5mbyAqaW5mbylcbiBcdGNhc2UgS0FTQU5fU0xBQl9GUkVFX01FVEE6XG4gXHRcdGJ1Z190eXBlID0gXCYjMzQ7c2xhYi11c2UtYWZ0ZXItZnJlZVwmIzM0OztcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBLQVNBTl9MQVpZX01NVV9QVEU6XG4mIzQzO1x0XHRidWdfdHlwZSA9IFwmIzM0O2xhenktbW11LXB0ZS1hY2Nlc3NcJiMzNDs7XG4mIzQzO1x0XHRicmVhaztcbiBcdGNhc2UgS0FTQU5fQUxMT0NBX0xFRlQ6XG4gXHRjYXNlIEtBU0FOX0FMTE9DQV9SSUdIVDpcbiBcdFx0YnVnX3R5cGUgPSBcJiMzNDthbGxvY2Etb3V0LW9mLWJvdW5kc1wmIzM0OztcbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcbmluZGV4IDc3NTUyYjAzZDMxOGQuLjQ0MTlkMTZiMzlmOTYgMTAwNjQ0XG4tLS0gYS9tbS9tYWR2aXNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21hZHZpc2UuY1xuQEAgLTQ1Miw3ICYjNDM7NDUyLDcgQEAgc3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcbiBcdGlmICghc3RhcnRfcHRlKVxuIFx0XHRyZXR1cm4gMDtcbiBcdGZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pO1xuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbiYjNDM7XHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgc3RhcnRfcHRlKTtcbiBcdGZvciAoOyBhZGRyIFx1MDAzYyBlbmQ7IHB0ZSAmIzQzOz0gbnIsIGFkZHIgJiM0Mzs9IG5yICogUEFHRV9TSVpFKSB7XG4gXHRcdG5yID0gMTtcbiBcdFx0cHRlbnQgPSBwdGVwX2dldChwdGUpO1xuQEAgLTUwNyw3ICYjNDM7NTA3LDcgQEAgc3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcbiBcdFx0XHRcdGlmICghc3RhcnRfcHRlKVxuIFx0XHRcdFx0XHRicmVhaztcbiBcdFx0XHRcdGZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pO1xuLVx0XHRcdFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbiYjNDM7XHRcdFx0XHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgc3RhcnRfcHRlKTtcbiBcdFx0XHRcdGlmICghZXJyKVxuIFx0XHRcdFx0XHRuciA9IDA7XG4gXHRcdFx0XHRjb250aW51ZTtcbkBAIC02NzQsNyAmIzQzOzY3NCw3IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRpZiAoIXN0YXJ0X3B0ZSlcbiBcdFx0cmV0dXJuIDA7XG4gXHRmbHVzaF90bGJfYmF0Y2hlZF9wZW5kaW5nKG1tKTtcbi1cdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4mIzQzO1x0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIHN0YXJ0X3B0ZSk7XG4gXHRmb3IgKDsgYWRkciAhPSBlbmQ7IHB0ZSAmIzQzOz0gbnIsIGFkZHIgJiM0Mzs9IFBBR0VfU0laRSAqIG5yKSB7XG4gXHRcdG5yID0gMTtcbiBcdFx0cHRlbnQgPSBwdGVwX2dldChwdGUpO1xuQEAgLTczNCw3ICYjNDM7NzM0LDcgQEAgc3RhdGljIGludCBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRcdGlmICghc3RhcnRfcHRlKVxuIFx0XHRcdFx0XHRicmVhaztcbiBcdFx0XHRcdGZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pO1xuLVx0XHRcdFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbiYjNDM7XHRcdFx0XHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgcHRlKTtcbiBcdFx0XHRcdGlmICghZXJyKVxuIFx0XHRcdFx0XHRuciA9IDA7XG4gXHRcdFx0XHRjb250aW51ZTtcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA2YjgyODBjZmMxZGJlLi4wY2MwN2IwNDMzODRiIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jXG5AQCAtMTI3Miw3ICYjNDM7MTI3Miw3IEBAIGNvcHlfcHRlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hLFxuIFx0c3Bpbl9sb2NrX25lc3RlZChzcmNfcHRsLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4gXHRvcmlnX3NyY19wdGUgPSBzcmNfcHRlO1xuIFx0b3JpZ19kc3RfcHRlID0gZHN0X3B0ZTtcbi1cdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4mIzQzO1x0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKHNyY19tbSwgYWRkciwgZW5kLCBzcmNfcHRlKTtcbiBcbiBcdGRvIHtcbiBcdFx0bnIgPSAxO1xuQEAgLTE5MjIsNyAmIzQzOzE5MjIsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB6YXBfcHRlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4gXHRcdHJldHVybiBhZGRyO1xuIFxuIFx0Zmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyhtbSk7XG4tXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuJiM0MztcdGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgYWRkciwgZW5kLCBzdGFydF9wdGUpO1xuIFx0ZG8ge1xuIFx0XHRib29sIGFueV9za2lwcGVkID0gZmFsc2U7XG4gXG5AQCAtMjkxOSw3ICYjNDM7MjkxOSw3IEBAIHN0YXRpYyBpbnQgcmVtYXBfcHRlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxuIFx0bWFwcGVkX3B0ZSA9IHB0ZSA9IHB0ZV9hbGxvY19tYXBfbG9jayhtbSwgcG1kLCBhZGRyLCBcdTAwMjZwdGwpO1xuIFx0aWYgKCFwdGUpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbiYjNDM7XHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgbWFwcGVkX3B0ZSk7XG4gXHRkbyB7XG4gXHRcdEJVR19PTighcHRlX25vbmUocHRlcF9nZXQocHRlKSkpO1xuIFx0XHRpZiAoIXBmbl9tb2RpZnlfYWxsb3dlZChwZm4sIHByb3QpKSB7XG5AQCAtMzMzMCw3ICYjNDM7MzMzMCw3IEBAIHN0YXRpYyBpbnQgYXBwbHlfdG9fcHRlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbiYjNDM7XHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgbWFwcGVkX3B0ZSk7XG4gXG4gXHRpZiAoZm4pIHtcbiBcdFx0ZG8ge1xuZGlmZiAtLWdpdCBhL21tL21wcm90ZWN0LmMgYi9tbS9tcHJvdGVjdC5jXG5pbmRleCA5Y2JmOTMyYjAyOGNmLi4zZmMyNjQxOGU4MzdkIDEwMDY0NFxuLS0tIGEvbW0vbXByb3RlY3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbXByb3RlY3QuY1xuQEAgLTMzNyw3ICYjNDM7MzM3LDcgQEAgc3RhdGljIGxvbmcgY2hhbmdlX3B0ZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuIFx0XHRpc19wcml2YXRlX3NpbmdsZV90aHJlYWRlZCA9IHZtYV9pc19zaW5nbGVfdGhyZWFkZWRfcHJpdmF0ZSh2bWEpO1xuIFxuIFx0Zmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyh2bWEtXHUwMDNldm1fbW0pO1xuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbiYjNDM7XHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXModm1hLVx1MDAzZXZtX21tLCBhZGRyLCBlbmQsIHB0ZSk7XG4gXHRkbyB7XG4gXHRcdG5yX3B0ZXMgPSAxO1xuIFx0XHRvbGRwdGUgPSBwdGVwX2dldChwdGUpO1xuZGlmZiAtLWdpdCBhL21tL21yZW1hcC5jIGIvbW0vbXJlbWFwLmNcbmluZGV4IGU5YzhiMWQwNTgzMmIuLjBkZmUzZGUzOWNjYzcgMTAwNjQ0XG4tLS0gYS9tbS9tcmVtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbXJlbWFwLmNcbkBAIC0yNjAsNyAmIzQzOzI2MCw3IEBAIHN0YXRpYyBpbnQgbW92ZV9wdGVzKHN0cnVjdCBwYWdldGFibGVfbW92ZV9jb250cm9sICpwbWMsXG4gXHRpZiAobmV3X3B0bCAhPSBvbGRfcHRsKVxuIFx0XHRzcGluX2xvY2tfbmVzdGVkKG5ld19wdGwsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbiBcdGZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcodm1hLVx1MDAzZXZtX21tKTtcbi1cdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4mIzQzO1x0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBvbGRfYWRkciwgb2xkX2VuZCwgb2xkX3B0ZXApO1xuIFxuIFx0Zm9yICg7IG9sZF9hZGRyIFx1MDAzYyBvbGRfZW5kOyBvbGRfcHRlcCAmIzQzOz0gbnJfcHRlcywgb2xkX2FkZHIgJiM0Mzs9IG5yX3B0ZXMgKiBQQUdFX1NJWkUsXG4gXHRcdG5ld19wdGVwICYjNDM7PSBucl9wdGVzLCBuZXdfYWRkciAmIzQzOz0gbnJfcHRlcyAqIFBBR0VfU0laRSkge1xuZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuY1xuaW5kZXggZjRmYTIyN2E4ZDdmMC4uMWM2ZWY4ZmQwNzllMCAxMDA2NDRcbi0tLSBhL21tL3ZtYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hbGxvYy5jXG5AQCAtMTA5LDcgJiM0MzsxMDksNyBAQCBzdGF0aWMgaW50IHZtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRpZiAoIXB0ZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuJiM0MztcdGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhcdTAwMjZpbml0X21tLCBhZGRyLCBlbmQsIHB0ZSk7XG4gXG4gXHRkbyB7XG4gXHRcdGlmICh1bmxpa2VseSghcHRlX25vbmUocHRlcF9nZXQocHRlKSkpKSB7XG5AQCAtMzkzLDcgJiM0MzszOTMsNyBAQCBzdGF0aWMgdm9pZCB2dW5tYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHR1bnNpZ25lZCBsb25nIHNpemUgPSBQQUdFX1NJWkU7XG4gXG4gXHRwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHIpO1xuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbiYjNDM7XHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMoXHUwMDI2aW5pdF9tbSwgYWRkciwgZW5kLCBwdGUpO1xuIFxuIFx0ZG8ge1xuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5AQCAtNTYwLDcgJiM0Mzs1NjAsNyBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGlmICghcHRlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4mIzQzO1x0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKFx1MDAyNmluaXRfbW0sIGFkZHIsIGVuZCwgcHRlKTtcbiBcbiBcdGRvIHtcbiBcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwYWdlc1sqbnJdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLQVNBTiYjMzQ7LAogICAgJiMzNDtLQVNBTl9HRU5FUklDJiMzNDssCiAgICAmIzM0O0hPVFBMVUdfQ1BVJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlJiMzNDssCiAgICAmIzM0O2FyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMmIzM0OywKICAgICYjMzQ7YXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlJiMzNDssCiAgICAmIzM0O2FyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZSYjMzQ7LAogICAgJiMzNDtsYXp5X21tdV9vbmxpbmVfY3B1JiMzNDssCiAgICAmIzM0O2xhenlfbW11X29mZmxpbmVfY3B1JiMzNDssCiAgICAmIzM0O19fa2FzYW5fcG9pc29uX3B0ZSYjMzQ7LAogICAgJiMzNDtfX2thc2FuX3VucG9pc29uX3B0ZSYjMzQ7LAogICAgJiMzNDtfX19wdGVwX21vZGlmeV9wcm90X3N0YXJ0JiMzNDssCiAgICAmIzM0O19fX3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbGF6eSBNTVUgbW9kZSBmb3IgczM5MCBhcmNoaXRlY3R1cmUsIHdoaWNoIGJhdGNoZXMgUFRFIGludmFsaWRhdGlvbnMgdXNpbmcgdGhlIElQVEUtcmFuZ2UgZmFjaWxpdHkuIEl0IGhvb2tzIGludG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzeXNjYWxscyAobWFkdmlzZSwgbXByb3RlY3QsIG1yZW1hcCwgdm1hbGxvYykgYW5kIENQVSBob3RwbHVnIHBhdGhzLiBJdCBhbHNvIGFkZHMgS0FTQU4gaW5zdHJ1bWVudGF0aW9uIGZvciBkaXJlY3QgUFRFIGFjY2Vzc2VzIGluIGxhenkgTU1VIG1vZGUuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNmMxMjY3M2YzNWRkZjJhMTQ3OTExNjRiNWRjZjlkNGMzY2Y1NGMyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMTI6Mzc6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IDg0NDA0ZTY3NzhkNTAuLjc4NDYzMzJkY2QwYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9LY29uZmlnCkBAIC05Nyw2ICYjNDM7OTcsNyBAQCBjb25maWcgUzM5MAogCXNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMCiAJc2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0UKIAlzZWxlY3QgQVJDSF9IQVNfS0NPVgomIzQzOwlzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERQogCXNlbGVjdCBBUkNIX0hBU19NRU1CQVJSSUVSX1NZTkNfQ09SRQogCXNlbGVjdCBBUkNIX0hBU19NRU1fRU5DUllQVAogCXNlbGVjdCBBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sYXp5X21tdS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xhenlfbW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uOTgzNjZlOWRlOWJjMwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sYXp5X21tdS5oCkBAIC0wLDAgJiM0MzsxLDkgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOyNpZm5kZWYgX19MQVpZX01NVV9ICiYjNDM7I2RlZmluZSBfX0xBWllfTU1VX0gKJiM0MzsKJiM0Mzt2b2lkIGxhenlfbW11X29ubGluZV9ib290X2NwdSh2b2lkKTsKJiM0MztpbnQgbGF6eV9tbXVfb25saW5lX2NwdShnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBjcHUpOwomIzQzO3ZvaWQgbGF6eV9tbXVfb2ZmbGluZV9jcHUodW5zaWduZWQgaW50IGNwdSk7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9fTEFaWV9NTVVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmgKaW5kZXggM2IzZWNjNjQ3OTkzZi4uZGJhMjM2NjY0ZGE5MCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oCkBAIC0xNjMsNyAmIzQzOzE2Myw3IEBAIHN0cnVjdCBsb3djb3JlIHsKIAlfX3MzMglwcmVlbXB0X2NvdW50OwkJCS8qIDB4MDNhOCAqLwogCV9fdTMyCXNwaW5sb2NrX2xvY2t2YWw7CQkvKiAweDAzYWMgKi8KIAlfX3UzMglzcGlubG9ja19pbmRleDsJCQkvKiAweDAzYjAgKi8KLQlfX3U4CXBhZF8weDAzYjRbMHgwM2I4LTB4MDNiNF07CS8qIDB4MDNiNCAqLwomIzQzOwlfX3MzMglsYXp5X21tdV9jb3VudDsJCQkvKiAweDAzYjQgKi8KIAlfX3U2NAlwZXJjcHVfb2Zmc2V0OwkJCS8qIDB4MDNiOCAqLwogCV9fdTgJcGVyY3B1X3JlZ2lzdGVyOwkJLyogMHgwM2MwICovCiAJX191OAlwYWRfMHgwM2MxWzB4MDQwMC0weDAzYzFdOwkvKiAweDAzYzEgKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDg1OWNlN2M3ZDQ1NDQuLjFlOGE3OTk4OWVkNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMzksNiAmIzQzOzM5LDY0IEBAIGVudW0gewogCiBleHRlcm4gYXRvbWljX2xvbmdfdCBkaXJlY3RfcGFnZXNfY291bnRbUEdfRElSRUNUX01BUF9NQVhdOwogCiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgaW50ICpyZXMpOwomIzQzO2Jvb2wgX19sYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcyk7CiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcyk7CiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IG9sZF9wdGUsIHB0ZV90IHB0ZSk7CiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTsKJiM0Mztib29sIF9fbGF6eV9tbXVfc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKTsKJiM0Mztib29sIF9fbGF6eV9tbXVfcHRlcF9nZXQocHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpOwomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19sYXp5X21tdV9hY3RpdmUodm9pZCkKJiM0Mzt7CiYjNDM7CWlmIChfX2lzX2RlZmluZWQoX19ERUNPTVBSRVNTT1IpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlpZiAoIWdldF9sb3djb3JlKCktJmd0O2xhenlfbW11X2NvdW50KQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZQomIzQzO2Jvb2wgbGF6eV9tbXVfcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBpbnQgKnJlcykKJiM0Mzt7CiYjNDM7CWlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CXJldHVybiBfX2xhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoYWRkciwgcHRlcCwgcmVzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZQomIzQzO2Jvb2wgbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpCiYjNDM7ewomIzQzOwlpZiAoIWlzX2xhenlfbW11X2FjdGl2ZSgpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlyZXR1cm4gX19sYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIoYWRkciwgcHRlcCwgcmVzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZQomIzQzO2Jvb2wgbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKQomIzQzO3sKJiM0MzsJaWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJcmV0dXJuIF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydChhZGRyLCBwdGVwLCByZXMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7Ym9vbCBsYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLAomIzQzOwkJCQkgICAgICBwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpCiYjNDM7ewomIzQzOwlpZiAoIWlzX2xhenlfbW11X2FjdGl2ZSgpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlyZXR1cm4gX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdChhZGRyLCBwdGVwLCBvbGRfcHRlLCBwdGUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7Ym9vbCBsYXp5X21tdV9wdGVwX3NldF93cnByb3RlY3QodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKJiM0Mzt7CiYjNDM7CWlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CXJldHVybiBfX2xhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdChhZGRyLCBwdGVwKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3BhZ2VfY291bnQoaW50IGxldmVsLCBsb25nIGNvdW50KQogewogCWlmIChJU19FTkFCTEVEKENPTkZJR19QUk9DX0ZTKSkKQEAgLTk3OCwxNyAmIzQzOzEwMzYsMzggQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wbWQocG1kX3QgKnBtZHAsIHBtZF90IHBtZCkKIAlXUklURV9PTkNFKCpwbWRwLCBwbWQpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKIHsKIAlpZiAocHRlX3ByZXNlbnQocHRlKSkKIAkJcHRlID0gY2xlYXJfcHRlX2JpdChwdGUsIF9fcGdwcm90KF9QQUdFX1VOVVNFRCkpOwogCVdSSVRFX09OQ0UoKnB0ZXAsIHB0ZSk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQomIzQzO3sKJiM0MzsJaWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSB8fCAhX19sYXp5X21tdV9zZXRfcHRlKHB0ZXAsIHB0ZSkpCiYjNDM7CQlfX3NldF9wdGUocHRlcCwgcHRlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBwdGVwX2dldF9sb2NrbGVzcyBwdGVwX2dldF9sb2NrbGVzcwomIzQzO3N0YXRpYyBpbmxpbmUgX19ub19zYW5pdGl6ZV9hZGRyZXNzIHB0ZV90IHB0ZXBfZ2V0X2xvY2tsZXNzKHB0ZV90ICpwdGVwKQomIzQzO3sKJiM0MzsJcmV0dXJuIFJFQURfT05DRSgqcHRlcCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgcHRlX3QgX19wdGVwX2dldChwdGVfdCAqcHRlcCkKJiM0Mzt7CiYjNDM7CXJldHVybiBSRUFEX09OQ0UoKnB0ZXApOwomIzQzO30KJiM0MzsKICNkZWZpbmUgcHRlcF9nZXQgcHRlcF9nZXQKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9nZXQocHRlX3QgKnB0ZXApCiB7Ci0JcmV0dXJuIFJFQURfT05DRSgqcHRlcCk7CiYjNDM7CXB0ZV90IHJlczsKJiM0MzsKJiM0MzsJaWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSB8fCAhX19sYXp5X21tdV9wdGVwX2dldChwdGVwLCAmYW1wO3JlcykpCiYjNDM7CQlyZXMgPSBfX3B0ZXBfZ2V0KHB0ZXApOwomIzQzOwlyZXR1cm4gcmVzOwogfQogCiAjZGVmaW5lIHBtZHBfZ2V0IHBtZHBfZ2V0CkBAIC0xMTgxLDYgJiM0MzsxMjYwLDE1IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3B0ZXBfaXB0ZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCBuciwKIAl9IHdoaWxlIChuciAhPSAyNTUpOwogfQogCiYjNDM7dm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJCQkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKJiM0MzsJCQkJCXB0ZV90ICpwdGUpOwomIzQzOyNkZWZpbmUgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcyBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzCiYjNDM7CiYjNDM7dm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGUodm9pZCk7CiYjNDM7dm9pZCBhcmNoX2xlYXZlX2xhenlfbW11X21vZGUodm9pZCk7CiYjNDM7dm9pZCBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUodm9pZCk7CiYjNDM7CiAvKgogICogVGhpcyBpcyBoYXJkIHRvIHVuZGVyc3RhbmQuIHB0ZXBfZ2V0X2FuZF9jbGVhciBhbmQgcHRlcF9jbGVhcl9mbHVzaAogICogYm90aCBjbGVhciB0aGUgVExCIGZvciB0aGUgdW5tYXBwZWQgcHRlLiBUaGUgcmVhc29uIGlzIHRoYXQKQEAgLTEyMDEsMTAgJiM0MzsxMjg5LDE2IEBAIHB0ZV90IHB0ZXBfeGNoZ19sYXp5KHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKiwgcHRlX3QpOwogc3RhdGljIGlubGluZSBib29sIHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCXVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCiB7Ci0JcHRlX3QgcHRlID0gcHRlcF9nZXQocHRlcCk7CiYjNDM7CXB0ZV90IHB0ZTsKJiM0MzsJaW50IHJlczsKIAotCXB0ZSA9IHB0ZXBfeGNoZ19kaXJlY3Qodm1hLSZndDt2bV9tbSwgYWRkciwgcHRlcCwgcHRlX21rb2xkKHB0ZSkpOwotCXJldHVybiBwdGVfeW91bmcocHRlKTsKJiM0MzsJaWYgKCFsYXp5X21tdV9wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKGFkZHIsIHB0ZXAsICZhbXA7cmVzKSkgewomIzQzOwkJcHRlID0gX19wdGVwX2dldChwdGVwKTsKJiM0MzsJCXB0ZSA9IHB0ZV9ta29sZChwdGUpOwomIzQzOwkJcHRlID0gcHRlcF94Y2hnX2RpcmVjdCh2bWEtJmd0O3ZtX21tLCBhZGRyLCBwdGVwLCBwdGUpOwomIzQzOwkJcmVzID0gcHRlX3lvdW5nKHB0ZSk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHJlczsKIH0KIAogI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSX1lPVU5HX0ZMVVNICkBAIC0xMjIwLDcgJiM0MzsxMzE0LDggQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiB7CiAJcHRlX3QgcmVzOwogCi0JcmVzID0gcHRlcF94Y2hnX2xhenkobW0sIGFkZHIsIHB0ZXAsIF9fcHRlKF9QQUdFX0lOVkFMSUQpKTsKJiM0MzsJaWYgKCFsYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIoYWRkciwgcHRlcCwgJmFtcDtyZXMpKQomIzQzOwkJcmVzID0gcHRlcF94Y2hnX2xhenkobW0sIGFkZHIsIHB0ZXAsIF9fcHRlKF9QQUdFX0lOVkFMSUQpKTsKIAlwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcihtbSwgYWRkciwgcmVzKTsKIAkvKiBBdCB0aGlzIHBvaW50IHRoZSByZWZlcmVuY2UgdGhyb3VnaCB0aGUgbWFwcGluZyBpcyBzdGlsbCBwcmVzZW50ICovCiAJaWYgKG1tX2lzX3Byb3RlY3RlZChtbSkgJmFtcDsmYW1wOyBwdGVfcHJlc2VudChyZXMpKQpAQCAtMTIyOSw5ICYjNDM7MTMyNCwyOCBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIH0KIAogI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX01PRElGWV9QUk9UX1RSQU5TQUNUSU9OCi1wdGVfdCBwdGVwX21vZGlmeV9wcm90X3N0YXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBwdGVfdCAqKTsKLXZvaWQgcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsCi0JCQkgICAgIHB0ZV90ICosIHB0ZV90LCBwdGVfdCk7CiYjNDM7cHRlX3QgX19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKik7CiYjNDM7dm9pZCBfX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywKJiM0MzsJCQkJcHRlX3QgKiwgcHRlX3QsIHB0ZV90KTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7cHRlX3QgcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKJiM0MzsJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCiYjNDM7ewomIzQzOwlwdGVfdCByZXM7CiYjNDM7CiYjNDM7CWlmICghbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydChhZGRyLCBwdGVwLCAmYW1wO3JlcykpCiYjNDM7CQlyZXMgPSBfX19wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHZtYSwgYWRkciwgcHRlcCk7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUKJiM0Mzt2b2lkIHB0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJICAgICBwdGVfdCAqcHRlcCwgcHRlX3Qgb2xkX3B0ZSwgcHRlX3QgcHRlKQomIzQzO3sKJiM0MzsJaWYgKCFsYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdChhZGRyLCBwdGVwLCBvbGRfcHRlLCBwdGUpKQomIzQzOwkJX19fcHRlcF9tb2RpZnlfcHJvdF9jb21taXQodm1hLCBhZGRyLCBwdGVwLCBvbGRfcHRlLCBwdGUpOwomIzQzO30KIAogI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSX0ZMVVNICiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCkBAIC0xMjYxLDExICYjNDM7MTM3NSwxMyBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogewogCXB0ZV90IHJlczsKIAotCWlmIChmdWxsKSB7Ci0JCXJlcyA9IHB0ZXBfZ2V0KHB0ZXApOwotCQlzZXRfcHRlKHB0ZXAsIF9fcHRlKF9QQUdFX0lOVkFMSUQpKTsKLQl9IGVsc2UgewotCQlyZXMgPSBwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpOwomIzQzOwlpZiAoIWxhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcihhZGRyLCBwdGVwLCAmYW1wO3JlcykpIHsKJiM0MzsJCWlmIChmdWxsKSB7CiYjNDM7CQkJcmVzID0gX19wdGVwX2dldChwdGVwKTsKJiM0MzsJCQlfX3NldF9wdGUocHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlyZXMgPSBwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpOwomIzQzOwkJfQogCX0KIAlwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcihtbSwgYWRkciwgcmVzKTsKIAkvKiBBdCB0aGlzIHBvaW50IHRoZSByZWZlcmVuY2UgdGhyb3VnaCB0aGUgbWFwcGluZyBpcyBzdGlsbCBwcmVzZW50ICovCkBAIC0xMjkxLDEwICYjNDM7MTQwNywxNSBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogc3RhdGljIGlubGluZSB2b2lkIHB0ZXBfc2V0X3dycHJvdGVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQogewotCXB0ZV90IHB0ZSA9IHB0ZXBfZ2V0KHB0ZXApOwomIzQzOwlwdGVfdCBwdGU7CiAKLQlpZiAocHRlX3dyaXRlKHB0ZSkpCi0JCXB0ZXBfeGNoZ19sYXp5KG1tLCBhZGRyLCBwdGVwLCBwdGVfd3Jwcm90ZWN0KHB0ZSkpOwomIzQzOwlpZiAoIWxhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdChhZGRyLCBwdGVwKSkgewomIzQzOwkJcHRlID0gX19wdGVwX2dldChwdGVwKTsKJiM0MzsJCWlmIChwdGVfd3JpdGUocHRlKSkgewomIzQzOwkJCXB0ZSA9IHB0ZV93cnByb3RlY3QocHRlKTsKJiM0MzsJCQlwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgcHRlKTsKJiM0MzsJCX0KJiM0MzsJfQogfQogCiAvKgpAQCAtMTMyNyw3ICYjNDM7MTQ0OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfZml4X3NwdXJpb3VzX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCSAqIFBURSBkb2VzIG5vdCBoYXZlIF9QQUdFX1BST1RFQ1Qgc2V0LCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBvdmVyaGVhZC4KIAkgKiBBIGxvY2FsIFJEUCBjYW4gYmUgdXNlZCB0byBkbyB0aGUgZmx1c2guCiAJICovCi0JaWYgKGNwdV9oYXNfcmRwKCkgJmFtcDsmYW1wOyAhKHB0ZV92YWwocHRlcF9nZXQocHRlcCkpICZhbXA7IF9QQUdFX1BST1RFQ1QpKQomIzQzOwlpZiAoY3B1X2hhc19yZHAoKSAmYW1wOyZhbXA7ICEocHRlX3ZhbChfX3B0ZXBfZ2V0KHB0ZXApKSAmYW1wOyBfUEFHRV9QUk9URUNUKSkKIAkJX19wdGVwX3JkcChhZGRyZXNzLCBwdGVwLCAxKTsKIH0KICNkZWZpbmUgZmx1c2hfdGxiX2ZpeF9zcHVyaW91c19mYXVsdCBmbHVzaF90bGJfZml4X3NwdXJpb3VzX2ZhdWx0CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKaW5kZXggYjYwMjg0MzI4ZmUzZC4uZjVhM2M5ZTFiNmI4OCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwpAQCAtNzcsNiAmIzQzOzc3LDcgQEAKICNpbmNsdWRlICZsdDthc20vbWFjY2Vzcy5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS91di5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9hc20tb2Zmc2V0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vbGF6eV9tbXUuaCZndDsKICNpbmNsdWRlICYjMzQ7ZW50cnkuaCYjMzQ7CiAKIC8qCkBAIC0xMDEyLDUgJiM0MzsxMDEzLDYgQEAgdm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKQogCiB2b2lkIF9faW5pdCBhcmNoX2NwdV9maW5hbGl6ZV9pbml0KHZvaWQpCiB7CiYjNDM7CWxhenlfbW11X29ubGluZV9ib290X2NwdSgpOwogCXNjbHBfaW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKaW5kZXggMGJhN2Y4OWI4MTYxMS4uMGE4MjZiYmFmMWRkYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCkBAIC01OSw2ICYjNDM7NTksNyBAQAogI2luY2x1ZGUgJmx0O2FzbS90b3BvbG9neS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS92ZHNvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL21hY2Nlc3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2xhenlfbW11LmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2VudHJ5LmgmIzM0OwogCiBlbnVtIHsKQEAgLTg2Niw2ICYjNDM7ODY3LDExIEBAIGludCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRpZGxlKQogCXJjID0gcGNwdV9hbGxvY19sb3djb3JlKHBjcHUsIGNwdSk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiYjNDM7CXJjID0gbGF6eV9tbXVfb25saW5lX2NwdShHRlBfS0VSTkVMLCBjcHUpOwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCXBjcHVfZnJlZV9sb3djb3JlKHBjcHUsIGNwdSk7CiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CX0KIAkvKgogCSAqIE1ha2Ugc3VyZSBnbG9iYWwgY29udHJvbCByZWdpc3RlciBjb250ZW50cyBkbyBub3QgY2hhbmdlCiAJICogdW50aWwgbmV3IENQVSBoYXMgaW5pdGlhbGl6ZWQgY29udHJvbCByZWdpc3RlcnMuCkBAIC05MjEsNiAmIzQzOzkyNyw3IEBAIHZvaWQgX19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCiAJcGNwdSA9IHBlcl9jcHVfcHRyKCZhbXA7cGNwdV9kZXZpY2VzLCBjcHUpOwogCXdoaWxlICghcGNwdV9zdG9wcGVkKHBjcHUpKQogCQljcHVfcmVsYXgoKTsKJiM0MzsJbGF6eV9tbXVfb2ZmbGluZV9jcHUoY3B1KTsKIAlwY3B1X2ZyZWVfbG93Y29yZShwY3B1LCBjcHUpOwogCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbW1fY3B1bWFzaygmYW1wO2luaXRfbW0pKTsKIAljcHVtYXNrX2NsZWFyX2NwdShjcHUsICZhbXA7aW5pdF9tbS5jb250ZXh0LmNwdV9hdHRhY2hfbWFzayk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vTWFrZWZpbGUgYi9hcmNoL3MzOTAvbW0vTWFrZWZpbGUKaW5kZXggMTkzODk5YzM5Y2E3Zi4uOTZjYWMzZTk5ZjUxNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9NYWtlZmlsZQpAQCAtNCw2ICYjNDM7NCw3IEBACiAjCiAKIG9iai15CQk6PSBpbml0Lm8gZmF1bHQubyBleHRtZW0ubyBtbWFwLm8gdm1lbS5vIG1hY2Nlc3MubwomIzQzO29iai15CQk6PSBpbml0Lm8gZmF1bHQubyBleHRtZW0ubyBtbWFwLm8gdm1lbS5vIG1hY2Nlc3MubyBsYXp5X21tdS5vCiBvYmoteQkJJiM0Mzs9IHBhZ2Utc3RhdGVzLm8gcGFnZWF0dHIubyBwZ3RhYmxlLm8gcGdhbGxvYy5vIGV4dGFibGUubwogCiBvYmotJChDT05GSUdfQ01NKQkJJiM0Mzs9IGNtbS5vCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYyBiL2FyY2gvczM5MC9tbS9sYXp5X21tdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjdlM2E0MTE1ZWEwNDgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYwpAQCAtMCwwICYjNDM7MSw0MTggQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wZ3RhYmxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2thc2FuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2ZhY2lsaXR5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9sYXp5X21tdS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtrdW5pdC92aXNpYmlsaXR5LmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBQVEVfUE9JU09OCV9QQUdFX0xBUkdFCiYjNDM7CiYjNDM7c3RydWN0IGlwdGVfcmFuZ2UgewomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKJiM0MzsJdW5zaWduZWQgbG9uZyBiYXNlX2FkZHI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYmFzZV9lbmQ7CiYjNDM7CXB0ZV90ICpiYXNlX3B0ZTsKJiM0MzsJcHRlX3QgKnN0YXJ0X3B0ZTsKJiM0MzsJcHRlX3QgKmVuZF9wdGU7CiYjNDM7CXB0ZV90IGNhY2hlW1BUUlNfUEVSX1BURV07CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGlwdGVfcmFuZ2UgKiwgaXB0ZV9yYW5nZSk7CiYjNDM7CiYjNDM7c3RhdGljIGludCBjb3VudF9jb250aWd1b3VzKHB0ZV90ICpzdGFydCwgcHRlX3QgKmVuZCwgYm9vbCAqdmFsaWQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHBhZ2VfaW52YWxpZF9iaXQ7CiYjNDM7CXB0ZV90ICpwdGVwLCBwdGU7CiYjNDM7CiYjNDM7CXB0ZSA9IF9fcHRlcF9nZXQoc3RhcnQpOwomIzQzOwlwYWdlX2ludmFsaWRfYml0ID0gcHRlX3ZhbChwdGUpICZhbXA7IF9QQUdFX0lOVkFMSUQ7CiYjNDM7CiYjNDM7CWZvciAocHRlcCA9IHN0YXJ0ICYjNDM7IDE7IHB0ZXAgJmx0OyBlbmQ7IHB0ZXAmIzQzOyYjNDM7KSB7CiYjNDM7CQlwdGUgPSBfX3B0ZXBfZ2V0KHB0ZXApOwomIzQzOwkJaWYgKChwdGVfdmFsKHB0ZSkgJmFtcDsgX1BBR0VfSU5WQUxJRCkgIT0gcGFnZV9pbnZhbGlkX2JpdCkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwkqdmFsaWQgPSAhKHBhZ2VfaW52YWxpZF9iaXQpOwomIzQzOwlyZXR1cm4gcHRlcCAtIHN0YXJ0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX2ludmFsaWRhdGVfcHRlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJCSAgIGludCBucl9wdGVzLCBwdGVfdCAqcHRlcCkKJiM0Mzt7CiYjNDM7CWF0b21pY19pbmMoJmFtcDttbS0mZ3Q7Y29udGV4dC5mbHVzaF9jb3VudCk7CiYjNDM7CWlmIChjcHVfaGFzX3RsYl9sYygpICZhbXA7JmFtcDsgY3B1bWFza19lcXVhbChtbV9jcHVtYXNrKG1tKSwgY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKSkKJiM0MzsJCV9fcHRlcF9pcHRlX3JhbmdlKGFkZHIsIG5yX3B0ZXMgLSAxLCBwdGVwLCBJUFRFX0xPQ0FMKTsKJiM0MzsJZWxzZQomIzQzOwkJX19wdGVwX2lwdGVfcmFuZ2UoYWRkciwgbnJfcHRlcyAtIDEsIHB0ZXAsIElQVEVfR0xPQkFMKTsKJiM0MzsJYXRvbWljX2RlYygmYW1wO21tLSZndDtjb250ZXh0LmZsdXNoX2NvdW50KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpbnZhbGlkYXRlX3B0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCQlwdGVfdCAqc3RhcnQsIHB0ZV90ICplbmQpCiYjNDM7ewomIzQzOwlpbnQgbnJfcHRlczsKJiM0MzsJYm9vbCB2YWxpZDsKJiM0MzsKJiM0MzsJbnJfcHRlcyA9IGNvdW50X2NvbnRpZ3VvdXMoc3RhcnQsIGVuZCwgJmFtcDt2YWxpZCk7CiYjNDM7CWlmICh2YWxpZCkKJiM0MzsJCV9faW52YWxpZGF0ZV9wdGVfcmFuZ2UobW0sIGFkZHIsIG5yX3B0ZXMsIHN0YXJ0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIG5yX3B0ZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldF9wdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCQkgIHB0ZV90ICpzdGFydCwgcHRlX3QgKmVuZCwgcHRlX3QgKmNhY2hlKQomIzQzO3sKJiM0MzsJaW50IG5yX3B0ZXMsIG5yX3RvdGFsID0gZW5kIC0gc3RhcnQ7CiYjNDM7CXB0ZV90ICpwdGVwID0gc3RhcnQ7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlrYXNhbl91bnBvaXNvbl9wdGUoc3RhcnQsIG5yX3RvdGFsKTsKJiM0MzsJd2hpbGUgKHB0ZXAgJmx0OyBlbmQpIHsKJiM0MzsJCW5yX3B0ZXMgPSBpbnZhbGlkYXRlX3B0ZV9yYW5nZShtbSwgYWRkciwgcHRlcCwgZW5kKTsKJiM0MzsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBucl9wdGVzOyBpJiM0MzsmIzQzOywgcHRlcCYjNDM7JiM0MzssIGNhY2hlJiM0MzsmIzQzOykgewomIzQzOwkJCV9fc2V0X3B0ZShwdGVwLCAqY2FjaGUpOwomIzQzOwkJCSpjYWNoZSA9IF9fcHRlKFBURV9QT0lTT04pOwomIzQzOwkJfQomIzQzOwomIzQzOwkJYWRkciAmIzQzOz0gbnJfcHRlcyAqIFBBR0VfU0laRTsKJiM0MzsJfQomIzQzOwlrYXNhbl9wb2lzb25fcHRlKHN0YXJ0LCBucl90b3RhbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVudGVyX2lwdGVfbm9yYW5nZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGlwdGVfcmFuZ2UgX19tYXliZV91bnVzZWQgKnJhbmdlOwomIzQzOwomIzQzOwlpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlsb2NhbF9iaF9kaXNhYmxlKCk7CiYjNDM7CiYjNDM7CXJhbmdlID0gZ2V0X2NwdV92YXIoaXB0ZV9yYW5nZSk7CiYjNDM7CWdldF9sb3djb3JlKCktJmd0O2xhenlfbW11X2NvdW50JiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVudGVyX2lwdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiYjNDM7CQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBwdGVfdCAqcHRlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlOwomIzQzOwl1bnNpZ25lZCBpbnQgbnJfcHRlczsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2ZhY2lsaXR5KDEzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbG9jYWxfYmhfZGlzYWJsZSgpOwomIzQzOwomIzQzOwlyYW5nZSA9IGdldF9jcHVfdmFyKGlwdGVfcmFuZ2UpOwomIzQzOwlnZXRfbG93Y29yZSgpLSZndDtsYXp5X21tdV9jb3VudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CWlmIChtbV9pc19wcm90ZWN0ZWQobW0pKSB7CiYjNDM7CQlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlyYW5nZS0mZ3Q7bW0gPSBtbTsKJiM0MzsJcmFuZ2UtJmd0O2Jhc2VfYWRkciA9IGFkZHI7CiYjNDM7CXJhbmdlLSZndDtiYXNlX2VuZCA9IGVuZDsKJiM0MzsJcmFuZ2UtJmd0O2Jhc2VfcHRlID0gcHRlOwomIzQzOwomIzQzOwlucl9wdGVzID0gKHJhbmdlLSZndDtiYXNlX2VuZCAtIHJhbmdlLSZndDtiYXNlX2FkZHIpIC8gUEFHRV9TSVpFOwomIzQzOwlrYXNhbl9wb2lzb25fcHRlKHJhbmdlLSZndDtiYXNlX3B0ZSwgbnJfcHRlcyk7CiYjNDM7CiYjNDM7CWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBsZWF2ZV9pcHRlX3JhbmdlKHZvaWQpCiYjNDM7ewomIzQzOwlwdGVfdCAqcHRlcCwgKnN0YXJ0LCAqc3RhcnRfY2FjaGUsICpjYWNoZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyLCBhZGRyOwomIzQzOwlzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7CiYjNDM7CXVuc2lnbmVkIGludCBucl9wdGVzOwomIzQzOwlpbnQgc3RhcnRfaWR4OwomIzQzOwomIzQzOwlpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlsb2NhbF9iaF9kaXNhYmxlKCk7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X3ByZWVtcHRpb25fZGlzYWJsZWQoKTsKJiM0MzsJcmFuZ2UgPSB0aGlzX2NwdV9yZWFkKGlwdGVfcmFuZ2UpOwomIzQzOwlpZiAoIXJhbmdlLSZndDttbSkKJiM0MzsJCWdvdG8gbm9yYW5nZTsKJiM0MzsJaWYgKCFyYW5nZS0mZ3Q7c3RhcnRfcHRlKQomIzQzOwkJZ290byBkb25lOwomIzQzOwomIzQzOwlzdGFydCA9IHJhbmdlLSZndDtzdGFydF9wdGU7CiYjNDM7CXN0YXJ0X2lkeCA9IHJhbmdlLSZndDtzdGFydF9wdGUgLSByYW5nZS0mZ3Q7YmFzZV9wdGU7CiYjNDM7CXN0YXJ0X2FkZHIgPSByYW5nZS0mZ3Q7YmFzZV9hZGRyICYjNDM7IHN0YXJ0X2lkeCAqIFBBR0VfU0laRTsKJiM0MzsJYWRkciA9IHN0YXJ0X2FkZHI7CiYjNDM7CXN0YXJ0X2NhY2hlID0gJmFtcDtyYW5nZS0mZ3Q7Y2FjaGVbc3RhcnRfaWR4XTsKJiM0MzsJY2FjaGUgPSBzdGFydF9jYWNoZTsKJiM0MzsJZm9yIChwdGVwID0gc3RhcnQ7IHB0ZXAgJmx0OyByYW5nZS0mZ3Q7ZW5kX3B0ZTsgcHRlcCYjNDM7JiM0MzssIGNhY2hlJiM0MzsmIzQzOywgYWRkciAmIzQzOz0gUEFHRV9TSVpFKSB7CiYjNDM7CQlpZiAocHRlX3ZhbCgqY2FjaGUpID09IFBURV9QT0lTT04pIHsKJiM0MzsJCQlpZiAoc3RhcnQpIHsKJiM0MzsJCQkJc2V0X3B0ZV9yYW5nZShyYW5nZS0mZ3Q7bW0sIHN0YXJ0X2FkZHIsIHN0YXJ0LCBwdGVwLCBzdGFydF9jYWNoZSk7CiYjNDM7CQkJCXN0YXJ0ID0gTlVMTDsKJiM0MzsJCQl9CiYjNDM7CQl9IGVsc2UgaWYgKCFzdGFydCkgewomIzQzOwkJCXN0YXJ0ID0gcHRlcDsKJiM0MzsJCQlzdGFydF9hZGRyID0gYWRkcjsKJiM0MzsJCQlzdGFydF9jYWNoZSA9IGNhY2hlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXNldF9wdGVfcmFuZ2UocmFuZ2UtJmd0O21tLCBzdGFydF9hZGRyLCBzdGFydCwgcHRlcCwgc3RhcnRfY2FjaGUpOwomIzQzOwomIzQzOwlyYW5nZS0mZ3Q7c3RhcnRfcHRlID0gTlVMTDsKJiM0MzsJcmFuZ2UtJmd0O2VuZF9wdGUgPSBOVUxMOwomIzQzOwomIzQzO2RvbmU6CiYjNDM7CW5yX3B0ZXMgPSAocmFuZ2UtJmd0O2Jhc2VfZW5kIC0gcmFuZ2UtJmd0O2Jhc2VfYWRkcikgLyBQQUdFX1NJWkU7CiYjNDM7CWthc2FuX3VucG9pc29uX3B0ZShyYW5nZS0mZ3Q7YmFzZV9wdGUsIG5yX3B0ZXMpOwomIzQzOwomIzQzOwlyYW5nZS0mZ3Q7bW0gPSBOVUxMOwomIzQzOwlyYW5nZS0mZ3Q7YmFzZV9hZGRyID0gMDsKJiM0MzsJcmFuZ2UtJmd0O2Jhc2VfZW5kID0gMDsKJiM0MzsJcmFuZ2UtJmd0O2Jhc2VfcHRlID0gTlVMTDsKJiM0MzsKJiM0Mztub3JhbmdlOgomIzQzOwlnZXRfbG93Y29yZSgpLSZndDtsYXp5X21tdV9jb3VudC0tOwomIzQzOwlwdXRfY3B1X3ZhcihpcHRlX3JhbmdlKTsKJiM0MzsKJiM0MzsJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGZsdXNoX2xhenlfbW11X21vZGUodm9pZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWRkciwgZW5kOwomIzQzOwlzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwomIzQzOwlwdGVfdCAqcHRlOwomIzQzOwomIzQzOwlpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlyYW5nZSA9IGdldF9jcHVfdmFyKGlwdGVfcmFuZ2UpOwomIzQzOwlpZiAocmFuZ2UtJmd0O21tKSB7CiYjNDM7CQltbSA9IHJhbmdlLSZndDttbTsKJiM0MzsJCWFkZHIgPSByYW5nZS0mZ3Q7YmFzZV9hZGRyOwomIzQzOwkJZW5kID0gcmFuZ2UtJmd0O2Jhc2VfZW5kOwomIzQzOwkJcHRlID0gcmFuZ2UtJmd0O2Jhc2VfcHRlOwomIzQzOwomIzQzOwkJbGVhdmVfaXB0ZV9yYW5nZSgpOwomIzQzOwkJZW50ZXJfaXB0ZV9yYW5nZShtbSwgYWRkciwgZW5kLCBwdGUpOwomIzQzOwl9CiYjNDM7CXB1dF9jcHVfdmFyKGlwdGVfcmFuZ2UpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSh2b2lkKQomIzQzO3sKJiM0MzsJZW50ZXJfaXB0ZV9ub3JhbmdlKCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfSUZfS1VOSVQoYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKTsKJiM0MzsKJiM0Mzt2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiYjNDM7CQkJCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAomIzQzOwkJCQkJcHRlX3QgKnB0ZSkKJiM0Mzt7CiYjNDM7CWVudGVyX2lwdGVfcmFuZ2UobW0sIGFkZHIsIGVuZCwgcHRlKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9JRl9LVU5JVChhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKTsKJiM0MzsKJiM0Mzt2b2lkIGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSh2b2lkKQomIzQzO3sKJiM0MzsJbGVhdmVfaXB0ZV9yYW5nZSgpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSk7CiYjNDM7CiYjNDM7dm9pZCBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUodm9pZCkKJiM0Mzt7CiYjNDM7CWZsdXNoX2xhenlfbW11X21vZGUoKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9JRl9LVU5JVChhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUpOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9faXB0ZV9yYW5nZV9zZXRfcHRlKHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZSwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpZHggPSBwdGVwIC0gcmFuZ2UtJmd0O2Jhc2VfcHRlOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9wcmVlbXB0aW9uX2Rpc2FibGVkKCk7CiYjNDM7CXJhbmdlLSZndDtjYWNoZVtpZHhdID0gcHRlOwomIzQzOwomIzQzOwlpZiAoIXJhbmdlLSZndDtzdGFydF9wdGUpIHsKJiM0MzsJCXJhbmdlLSZndDtzdGFydF9wdGUgPSBwdGVwOwomIzQzOwkJcmFuZ2UtJmd0O2VuZF9wdGUgPSBwdGVwICYjNDM7IDE7CiYjNDM7CX0gZWxzZSBpZiAocHRlcCAmbHQ7IHJhbmdlLSZndDtzdGFydF9wdGUpIHsKJiM0MzsJCXJhbmdlLSZndDtzdGFydF9wdGUgPSBwdGVwOwomIzQzOwl9IGVsc2UgaWYgKHB0ZXAgJiM0MzsgMSAmZ3Q7IHJhbmdlLSZndDtlbmRfcHRlKSB7CiYjNDM7CQlyYW5nZS0mZ3Q7ZW5kX3B0ZSA9IHB0ZXAgJiM0MzsgMTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgcHRlX3QgX19pcHRlX3JhbmdlX3B0ZXBfZ2V0KHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZSwgcHRlX3QgKnB0ZXApCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgaWR4ID0gcHRlcCAtIHJhbmdlLSZndDtiYXNlX3B0ZTsKJiM0MzsJcHRlX3QgcHRlOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9wcmVlbXB0aW9uX2Rpc2FibGVkKCk7CiYjNDM7CWlmIChwdGVfdmFsKHJhbmdlLSZndDtjYWNoZVtpZHhdKSA9PSBQVEVfUE9JU09OKSB7CiYjNDM7CQlrYXNhbl91bnBvaXNvbl9wdGUocHRlcCwgMSk7CiYjNDM7CQlwdGUgPSBfX3B0ZXBfZ2V0KHB0ZXApOwomIzQzOwkJa2FzYW5fcG9pc29uX3B0ZShwdGVwLCAxKTsKJiM0MzsKJiM0MzsJCXJldHVybiBwdGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJhbmdlLSZndDtjYWNoZVtpZHhdOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGlwdGVfcmFuZ2UgKnRoaXNfaXB0ZV9yYW5nZShwdGVfdCAqcHRlcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTsKJiM0MzsJdW5zaWduZWQgaW50IG5yX3B0ZXM7CiYjNDM7CiYjNDM7CXJhbmdlID0gdGhpc19jcHVfcmVhZChpcHRlX3JhbmdlKTsKJiM0MzsJaWYgKHB0ZXAgJmx0OyByYW5nZS0mZ3Q7YmFzZV9wdGUpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJbnJfcHRlcyA9IChyYW5nZS0mZ3Q7YmFzZV9lbmQgLSByYW5nZS0mZ3Q7YmFzZV9hZGRyKSAvIFBBR0VfU0laRTsKJiM0MzsJaWYgKHB0ZXAgJmd0Oz0gcmFuZ2UtJmd0O2Jhc2VfcHRlICYjNDM7IG5yX3B0ZXMpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHJhbmdlOwomIzQzO30KJiM0MzsKJiM0Mztib29sIF9fbGF6eV9tbXVfc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlOwomIzQzOwomIzQzOwlyYW5nZSA9IHRoaXNfaXB0ZV9yYW5nZShwdGVwKTsKJiM0MzsJaWYgKCFyYW5nZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJX19pcHRlX3JhbmdlX3NldF9wdGUocmFuZ2UsIHB0ZXAsIHB0ZSk7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0Mztib29sIF9fbGF6eV9tbXVfcHRlcF9nZXQocHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7CiYjNDM7CiYjNDM7CXJhbmdlID0gdGhpc19pcHRlX3JhbmdlKHB0ZXApOwomIzQzOwlpZiAoIXJhbmdlKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkqcmVzID0gX19pcHRlX3JhbmdlX3B0ZXBfZ2V0KHJhbmdlLCBwdGVwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgX19sYXp5X21tdV9wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIGludCAqcmVzKQomIzQzO3sKJiM0MzsJc3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlOwomIzQzOwlwdGVfdCBwdGUsIG9sZDsKJiM0MzsKJiM0MzsJcmFuZ2UgPSB0aGlzX2lwdGVfcmFuZ2UocHRlcCk7CiYjNDM7CWlmICghcmFuZ2UpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW9sZCA9IF9faXB0ZV9yYW5nZV9wdGVwX2dldChyYW5nZSwgcHRlcCk7CiYjNDM7CXB0ZSA9IHB0ZV9ta29sZChvbGQpOwomIzQzOwlfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTsKJiM0MzsJKnJlcyA9IHB0ZV95b3VuZyhvbGQpOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcih1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKQomIzQzO3sKJiM0MzsJc3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlOwomIzQzOwlwdGVfdCBwdGUsIG9sZDsKJiM0MzsKJiM0MzsJcmFuZ2UgPSB0aGlzX2lwdGVfcmFuZ2UocHRlcCk7CiYjNDM7CWlmICghcmFuZ2UpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW9sZCA9IF9faXB0ZV9yYW5nZV9wdGVwX2dldChyYW5nZSwgcHRlcCk7CiYjNDM7CXB0ZSA9IF9fcHRlKF9QQUdFX0lOVkFMSUQpOwomIzQzOwlfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTsKJiM0MzsJKnJlcyA9IG9sZDsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19sYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIoYWRkciwgcHRlcCwgcmVzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsCiYjNDM7CQkJCQlwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7CiYjNDM7CiYjNDM7CXJhbmdlID0gdGhpc19pcHRlX3JhbmdlKHB0ZXApOwomIzQzOwlpZiAoIXJhbmdlKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgX19sYXp5X21tdV9wdGVwX3NldF93cnByb3RlY3QodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTsKJiM0MzsJcHRlX3QgcHRlOwomIzQzOwomIzQzOwlyYW5nZSA9IHRoaXNfaXB0ZV9yYW5nZShwdGVwKTsKJiM0MzsJaWYgKCFyYW5nZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcHRlID0gX19pcHRlX3JhbmdlX3B0ZXBfZ2V0KHJhbmdlLCBwdGVwKTsKJiM0MzsJaWYgKHB0ZV93cml0ZShwdGUpKSB7CiYjNDM7CQlwdGUgPSBwdGVfd3Jwcm90ZWN0KHB0ZSk7CiYjNDM7CQlfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGxhenlfbW11X29ubGluZV9jcHUoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgY3B1KQomIzQzO3sKJiM0MzsJc3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2ZhY2lsaXR5KDEzKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyYW5nZSA9IGt6YWxsb2Nfb2JqKCpyYW5nZSwgZ2ZwKTsKJiM0MzsJaWYgKCFyYW5nZSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShyYW5nZS0mZ3Q7Y2FjaGUpOyBpJiM0MzsmIzQzOykKJiM0MzsJCXJhbmdlLSZndDtjYWNoZVtpXSA9IF9fcHRlKFBURV9QT0lTT04pOwomIzQzOwlwZXJfY3B1KGlwdGVfcmFuZ2UsIGNwdSkgPSByYW5nZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbGF6eV9tbXVfb2ZmbGluZV9jcHUodW5zaWduZWQgaW50IGNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2ZhY2lsaXR5KDEzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcmFuZ2UgPSBwZXJfY3B1KGlwdGVfcmFuZ2UsIGNwdSk7CiYjNDM7CXBlcl9jcHUoaXB0ZV9yYW5nZSwgY3B1KSA9IE5VTEw7CiYjNDM7CWtmcmVlKHJhbmdlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX2luaXQgbGF6eV9tbXVfb25saW5lX2Jvb3RfY3B1KHZvaWQpCiYjNDM7ewomIzQzOwlsYXp5X21tdV9vbmxpbmVfY3B1KEdGUF9BVE9NSUMsIDApOwomIzQzO30KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCmluZGV4IDRhY2Q4YjE0MGM0YmQuLmRmMzY1MjNiY2JiYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL21tL3BndGFibGUuYwpAQCAtMTY2LDE0ICYjNDM7MTY2LDE0IEBAIHB0ZV90IHB0ZXBfeGNoZ19sYXp5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiB9CiBFWFBPUlRfU1lNQk9MKHB0ZXBfeGNoZ19sYXp5KTsKIAotcHRlX3QgcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgICBwdGVfdCAqcHRlcCkKJiM0MztwdGVfdCBfX19wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJCXB0ZV90ICpwdGVwKQogewogCXJldHVybiBwdGVwX2ZsdXNoX2xhenkodm1hLSZndDt2bV9tbSwgYWRkciwgcHRlcCwgMSk7CiB9CiAKLXZvaWQgcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IG9sZF9wdGUsIHB0ZV90IHB0ZSkKJiM0Mzt2b2lkIF9fX3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJCXB0ZV90ICpwdGVwLCBwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpCiB7CiAJc2V0X3B0ZShwdGVwLCBwdGUpOwogfQpkaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jCmluZGV4IDIyOWQxZmMzZDdmMWMuLjkxNjc4NWMzYjJlMGIgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvdGFza19tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9wcm9jL3Rhc2tfbW11LmMKQEAgLTI4NTIsNyAmIzQzOzI4NTIsNyBAQCBzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJcmV0dXJuIDA7CiAJfQogCi0JbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKJiM0MzsJbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKHZtYS0mZ3Q7dm1fbW0sIHN0YXJ0LCBlbmQsIHN0YXJ0X3B0ZSk7CiAKIAlpZiAoKHAtJmd0O2FyZy5mbGFncyAmYW1wOyBQTV9TQ0FOX1dQX01BVENISU5HKSAmYW1wOyZhbXA7ICFwLSZndDt2ZWNfb3V0KSB7CiAJCS8qIEZhc3QgcGF0aCBmb3IgcGVyZm9ybWluZyBleGNsdXNpdmUgV1AgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2FzYW4uaCBiL2luY2x1ZGUvbGludXgva2FzYW4uaAppbmRleCBiZjIzM2JkZTY4YzdlLi4xYWE0ZDlkZDI0ODVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2thc2FuLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rYXNhbi5oCkBAIC02LDYgJiM0Mzs2LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9rYXNhbi1lbmFibGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2FzYW4tdGFncy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wZ3RhYmxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RhdGljX2tleS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKQEAgLTM1LDggJiM0MzszNiw2IEBAIHR5cGVkZWYgdW5zaWduZWQgaW50IF9fYml0d2lzZSBrYXNhbl92bWFsbG9jX2ZsYWdzX3Q7CiAKICNpZiBkZWZpbmVkKENPTkZJR19LQVNBTl9HRU5FUklDKSB8fCBkZWZpbmVkKENPTkZJR19LQVNBTl9TV19UQUdTKQogCi0jaW5jbHVkZSAmbHQ7bGludXgvcGd0YWJsZS5oJmd0OwotCiAvKiBTb2Z0d2FyZSBLQVNBTiBpbXBsZW1lbnRhdGlvbnMgdXNlIHNoYWRvdyBtZW1vcnkuICovCiAKICNpZmRlZiBDT05GSUdfS0FTQU5fU1dfVEFHUwpAQCAtMTM0LDYgJiM0MzsxMzMsMjAgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGthc2FuX3BvaXNvbl9zbGFiKHN0cnVjdCBzbGFiICpzbGFiKQogCQlfX2thc2FuX3BvaXNvbl9zbGFiKHNsYWIpOwogfQogCiYjNDM7dm9pZCBfX2thc2FuX3BvaXNvbl9wdGUocHRlX3QgKnB0ZSwgaW50IG5yKTsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQga2FzYW5fcG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpCiYjNDM7ewomIzQzOwlpZiAoa2FzYW5fZW5hYmxlZCgpKQomIzQzOwkJX19rYXNhbl9wb2lzb25fcHRlKHB0ZSwgbnIpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIF9fa2FzYW5fdW5wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucik7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGthc2FuX3VucG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpCiYjNDM7ewomIzQzOwlpZiAoa2FzYW5fZW5hYmxlZCgpKQomIzQzOwkJX19rYXNhbl91bnBvaXNvbl9wdGUocHRlLCBucik7CiYjNDM7fQomIzQzOwogdm9pZCBfX2thc2FuX3VucG9pc29uX25ld19vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB2b2lkICpvYmplY3QpOwogLyoqCiAgKiBrYXNhbl91bnBvaXNvbl9uZXdfb2JqZWN0IC0gVGVtcG9yYXJpbHkgdW5wb2lzb24gYSBuZXcgc2xhYiBvYmplY3QuCkBAIC00MTQsNiAmIzQzOzQyNyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrYXNhbl91bnBvaXNvbl9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLAogCXJldHVybiBmYWxzZTsKIH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYikge30KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fcG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpIHt9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGthc2FuX3VucG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fdW5wb2lzb25fbmV3X29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsCiAJCQkJCXZvaWQgKm9iamVjdCkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fbmV3X29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaCBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCmluZGV4IDI5ODFlMzg2ZGE3YjMuLmNjODVkYWYzMDczOWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCkBAIC0yNzEsNiAmIzQzOzI3MSw1MCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9lbmFibGUodm9pZCkKIAkJYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7CiB9CiAKJiM0MzsjaWZuZGVmIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHB0ZV90ICpwdGVwKQomIzQzO3sKJiM0MzsJYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwomIzQzOy8qKgomIzQzOyAqIGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcygpIC0gRW5hYmxlIHRoZSBsYXp5IE1NVSBtb2RlIHdpdGggYSBzcGVlZHVwIGhpbnQuCiYjNDM7ICogQG1tOiBBZGRyZXNzIHNwYWNlIHRoZSBwYWdlcyBhcmUgbWFwcGVkIGludG8uCiYjNDM7ICogQGFkZHI6IFN0YXJ0IGFkZHJlc3Mgb2YgdGhlIHJhbmdlLgomIzQzOyAqIEBlbmQ6IEVuZCBhZGRyZXNzIG9mIHRoZSByYW5nZS4KJiM0MzsgKiBAcHRlcDogUGFnZSB0YWJsZSBwb2ludGVyIGZvciB0aGUgZmlyc3QgZW50cnkuCiYjNDM7ICoKJiM0MzsgKiBFbnRlcnMgYSBuZXcgbGF6eSBNTVUgbW9kZSBzZWN0aW9uOyBpZiB0aGUgbW9kZSB3YXMgbm90IGFscmVhZHkgZW5hYmxlZCwKJiM0MzsgKiBlbmFibGVzIGl0IGFuZCBjYWxscyBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKCkuCiYjNDM7ICoKJiM0MzsgKiBQVEVzIHRoYXQgZmFsbCB3aXRoaW4gdGhlIHNwZWNpZmllZCByYW5nZSBtaWdodCBvYnNlcnZlIHVwZGF0ZSBzcGVlZHVwcy4KJiM0MzsgKiBUaGUgUFRFcyBtdXN0IGJlbG9uZyB0byB0aGUgc3BlY2lmaWVkIGFkZHJlc3Mgc3BhY2UgYW5kIGJlIGluIHRoZSBzYW1lIFBNRC4KJiM0MzsgKgomIzQzOyAqIFRoZXJlIGFyZSBubyByZXF1aXJlbWVudHMgb24gdGhlIG9yZGVyIG9yIHJhbmdlIGNvbXBsZXRlbmVzcyBvZiBQVEUKJiM0MzsgKiB1cGRhdGVzIGZvciB0aGUgc3BlY2lmaWVkIHJhbmdlLgomIzQzOyAqCiYjNDM7ICogTXVzdCBiZSBwYWlyZWQgd2l0aCBhIGNhbGwgdG8gbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCkuCiYjNDM7ICoKJiM0MzsgKiBIYXMgbm8gZWZmZWN0IGlmIGNhbGxlZDoKJiM0MzsgKiAtIFdoaWxlIHBhdXNlZCAtIHNlZSBsYXp5X21tdV9tb2RlX3BhdXNlKCkKJiM0MzsgKiAtIEluIGludGVycnVwdCBjb250ZXh0CiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHB0ZV90ICpwdGVwKQomIzQzO3sKJiM0MzsJc3RydWN0IGxhenlfbW11X3N0YXRlICpzdGF0ZSA9ICZhbXA7Y3VycmVudC0mZ3Q7bGF6eV9tbXVfc3RhdGU7CiYjNDM7CiYjNDM7CWlmIChpbl9pbnRlcnJ1cHQoKSB8fCBzdGF0ZS0mZ3Q7cGF1c2VfY291bnQgJmd0OyAwKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlWTV9XQVJOX09OX09OQ0Uoc3RhdGUtJmd0O2VuYWJsZV9jb3VudCA9PSBVOF9NQVgpOwomIzQzOwomIzQzOwlpZiAoc3RhdGUtJmd0O2VuYWJsZV9jb3VudCYjNDM7JiM0MzsgPT0gMCkKJiM0MzsJCWFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgcHRlcCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBsYXp5X21tdV9tb2RlX2Rpc2FibGUoKSAtIERpc2FibGUgdGhlIGxhenkgTU1VIG1vZGUuCiAgKgpAQCAtMzg3LDYgJiM0Mzs0MzEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9yZXN1bWUodm9pZCkKIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9lbmFibGUodm9pZCkge30KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgcHRlX3QgKnB0ZXApIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9kaXNhYmxlKHZvaWQpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9wYXVzZSh2b2lkKSB7fQogc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfcmVzdW1lKHZvaWQpIHt9CmRpZmYgLS1naXQgYS9tbS9rYXNhbi9jb21tb24uYyBiL21tL2thc2FuL2NvbW1vbi5jCmluZGV4IGI3ZDA1YzJhNmQ5M2QuLjk0ZDEwNjA5NDk4OTEgMTAwNjQ0Ci0tLSBhL21tL2thc2FuL2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2thc2FuL2NvbW1vbi5jCkBAIC0xNjMsNiAmIzQzOzE2MywyMCBAQCB2b2lkIF9fa2FzYW5fcG9pc29uX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIpCiAJCSAgICAgS0FTQU5fU0xBQl9SRURaT05FLCBmYWxzZSk7CiB9CiAKJiM0Mzt2b2lkIF9fa2FzYW5fcG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpCiYjNDM7ewomIzQzOwlpZiAoSVNfQUxJR05FRChzaXplb2YoKnB0ZSksIEtBU0FOX0dSQU5VTEVfU0laRSkpCiYjNDM7CQlrYXNhbl9wb2lzb24ocHRlLCBzaXplb2YoKnB0ZSkgKiBuciwgS0FTQU5fTEFaWV9NTVVfUFRFLCBmYWxzZSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKF9fa2FzYW5fcG9pc29uX3B0ZSk7CiYjNDM7CiYjNDM7dm9pZCBfX2thc2FuX3VucG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpCiYjNDM7ewomIzQzOwlpZiAoSVNfQUxJR05FRChzaXplb2YoKnB0ZSksIEtBU0FOX0dSQU5VTEVfU0laRSkpCiYjNDM7CQlrYXNhbl91bnBvaXNvbihwdGUsIHNpemVvZigqcHRlKSAqIG5yLCBmYWxzZSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKF9fa2FzYW5fdW5wb2lzb25fcHRlKTsKJiM0MzsKIHZvaWQgX19rYXNhbl91bnBvaXNvbl9uZXdfb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSwgdm9pZCAqb2JqZWN0KQogewogCWthc2FuX3VucG9pc29uKG9iamVjdCwgY2FjaGUtJmd0O29iamVjdF9zaXplLCBmYWxzZSk7CmRpZmYgLS1naXQgYS9tbS9rYXNhbi9rYXNhbi5oIGIvbW0va2FzYW4va2FzYW4uaAppbmRleCBmYzkxNjlhNTQ3NjYyLi4xYTJkMThjZGIyMWQ5IDEwMDY0NAotLS0gYS9tbS9rYXNhbi9rYXNhbi5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2thc2FuL2thc2FuLmgKQEAgLTE0NCwxMiAmIzQzOzE0NCwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wga2FzYW5fcmVxdWlyZXNfbWV0YSh2b2lkKQogI2RlZmluZSBLQVNBTl9QQUdFX1JFRFpPTkUJMHhGRSAgLyogcmVkem9uZSBmb3Iga21hbGxvY19sYXJnZSBhbGxvY2F0aW9uICovCiAjZGVmaW5lIEtBU0FOX1NMQUJfUkVEWk9ORQkweEZDICAvKiByZWR6b25lIGZvciBzbGFiIG9iamVjdCAqLwogI2RlZmluZSBLQVNBTl9TTEFCX0ZSRUUJCTB4RkIgIC8qIGZyZWVkIHNsYWIgb2JqZWN0ICovCiYjNDM7I2RlZmluZSBLQVNBTl9MQVpZX01NVV9QVEUJMHhGRCAgLyogZGlyZWN0IHB0ZSBhY2Nlc3MgaW4gbGF6eSBtbXUgbW9kZSAqLwogI2RlZmluZSBLQVNBTl9WTUFMTE9DX0lOVkFMSUQJMHhGOCAgLyogaW5hY2Nlc3NpYmxlIHNwYWNlIGluIHZtYXAgYXJlYSAqLwogI2Vsc2UKICNkZWZpbmUgS0FTQU5fUEFHRV9GUkVFCQlLQVNBTl9UQUdfSU5WQUxJRAogI2RlZmluZSBLQVNBTl9QQUdFX1JFRFpPTkUJS0FTQU5fVEFHX0lOVkFMSUQKICNkZWZpbmUgS0FTQU5fU0xBQl9SRURaT05FCUtBU0FOX1RBR19JTlZBTElECiAjZGVmaW5lIEtBU0FOX1NMQUJfRlJFRQkJS0FTQU5fVEFHX0lOVkFMSUQKJiM0MzsjZGVmaW5lIEtBU0FOX0xBWllfTU1VX1BURQlLQVNBTl9UQUdfSU5WQUxJRAogI2RlZmluZSBLQVNBTl9WTUFMTE9DX0lOVkFMSUQJS0FTQU5fVEFHX0lOVkFMSUQgLyogb25seSB1c2VkIGZvciBTV19UQUdTICovCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuYyBiL21tL2thc2FuL3JlcG9ydF9nZW5lcmljLmMKaW5kZXggZjViOGUzN2IzODA1Yy4uNDg5ZDRhOGQ2OTAyZCAxMDA2NDQKLS0tIGEvbW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9rYXNhbi9yZXBvcnRfZ2VuZXJpYy5jCkBAIC0xMTMsNiAmIzQzOzExMyw5IEBAIHN0YXRpYyBjb25zdCBjaGFyICpnZXRfc2hhZG93X2J1Z190eXBlKHN0cnVjdCBrYXNhbl9yZXBvcnRfaW5mbyAqaW5mbykKIAljYXNlIEtBU0FOX1NMQUJfRlJFRV9NRVRBOgogCQlidWdfdHlwZSA9ICYjMzQ7c2xhYi11c2UtYWZ0ZXItZnJlZSYjMzQ7OwogCQlicmVhazsKJiM0MzsJY2FzZSBLQVNBTl9MQVpZX01NVV9QVEU6CiYjNDM7CQlidWdfdHlwZSA9ICYjMzQ7bGF6eS1tbXUtcHRlLWFjY2VzcyYjMzQ7OwomIzQzOwkJYnJlYWs7CiAJY2FzZSBLQVNBTl9BTExPQ0FfTEVGVDoKIAljYXNlIEtBU0FOX0FMTE9DQV9SSUdIVDoKIAkJYnVnX3R5cGUgPSAmIzM0O2FsbG9jYS1vdXQtb2YtYm91bmRzJiMzNDs7CmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmMKaW5kZXggNzc1NTJiMDNkMzE4ZC4uNDQxOWQxNmIzOWY5NiAxMDA2NDQKLS0tIGEvbW0vbWFkdmlzZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21hZHZpc2UuYwpAQCAtNDUyLDcgJiM0Mzs0NTIsNyBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLAogCWlmICghc3RhcnRfcHRlKQogCQlyZXR1cm4gMDsKIAlmbHVzaF90bGJfYmF0Y2hlZF9wZW5kaW5nKG1tKTsKLQlsYXp5X21tdV9tb2RlX2VuYWJsZSgpOwomIzQzOwlsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgc3RhcnRfcHRlKTsKIAlmb3IgKDsgYWRkciAmbHQ7IGVuZDsgcHRlICYjNDM7PSBuciwgYWRkciAmIzQzOz0gbnIgKiBQQUdFX1NJWkUpIHsKIAkJbnIgPSAxOwogCQlwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7CkBAIC01MDcsNyAmIzQzOzUwNyw3IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsCiAJCQkJaWYgKCFzdGFydF9wdGUpCiAJCQkJCWJyZWFrOwogCQkJCWZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pOwotCQkJCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CiYjNDM7CQkJCWxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgYWRkciwgZW5kLCBzdGFydF9wdGUpOwogCQkJCWlmICghZXJyKQogCQkJCQluciA9IDA7CiAJCQkJY29udGludWU7CkBAIC02NzQsNyAmIzQzOzY3NCw3IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJaWYgKCFzdGFydF9wdGUpCiAJCXJldHVybiAwOwogCWZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pOwotCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CiYjNDM7CWxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgYWRkciwgZW5kLCBzdGFydF9wdGUpOwogCWZvciAoOyBhZGRyICE9IGVuZDsgcHRlICYjNDM7PSBuciwgYWRkciAmIzQzOz0gUEFHRV9TSVpFICogbnIpIHsKIAkJbnIgPSAxOwogCQlwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7CkBAIC03MzQsNyAmIzQzOzczNCw3IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkJaWYgKCFzdGFydF9wdGUpCiAJCQkJCWJyZWFrOwogCQkJCWZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pOwotCQkJCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CiYjNDM7CQkJCWxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgYWRkciwgZW5kLCBwdGUpOwogCQkJCWlmICghZXJyKQogCQkJCQluciA9IDA7CiAJCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDZiODI4MGNmYzFkYmUuLjBjYzA3YjA0MzM4NGIgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC0xMjcyLDcgJiM0MzsxMjcyLDcgQEAgY29weV9wdGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsCiAJc3Bpbl9sb2NrX25lc3RlZChzcmNfcHRsLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAJb3JpZ19zcmNfcHRlID0gc3JjX3B0ZTsKIAlvcmlnX2RzdF9wdGUgPSBkc3RfcHRlOwotCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CiYjNDM7CWxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhzcmNfbW0sIGFkZHIsIGVuZCwgc3JjX3B0ZSk7CiAKIAlkbyB7CiAJCW5yID0gMTsKQEAgLTE5MjIsNyAmIzQzOzE5MjIsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB6YXBfcHRlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsCiAJCXJldHVybiBhZGRyOwogCiAJZmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyhtbSk7Ci0JbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKJiM0MzsJbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIHN0YXJ0X3B0ZSk7CiAJZG8gewogCQlib29sIGFueV9za2lwcGVkID0gZmFsc2U7CiAKQEAgLTI5MTksNyAmIzQzOzI5MTksNyBAQCBzdGF0aWMgaW50IHJlbWFwX3B0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwKIAltYXBwZWRfcHRlID0gcHRlID0gcHRlX2FsbG9jX21hcF9sb2NrKG1tLCBwbWQsIGFkZHIsICZhbXA7cHRsKTsKIAlpZiAoIXB0ZSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKJiM0MzsJbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIG1hcHBlZF9wdGUpOwogCWRvIHsKIAkJQlVHX09OKCFwdGVfbm9uZShwdGVwX2dldChwdGUpKSk7CiAJCWlmICghcGZuX21vZGlmeV9hbGxvd2VkKHBmbiwgcHJvdCkpIHsKQEAgLTMzMzAsNyAmIzQzOzMzMzAsNyBAQCBzdGF0aWMgaW50IGFwcGx5X3RvX3B0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CiYjNDM7CWxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgYWRkciwgZW5kLCBtYXBwZWRfcHRlKTsKIAogCWlmIChmbikgewogCQlkbyB7CmRpZmYgLS1naXQgYS9tbS9tcHJvdGVjdC5jIGIvbW0vbXByb3RlY3QuYwppbmRleCA5Y2JmOTMyYjAyOGNmLi4zZmMyNjQxOGU4MzdkIDEwMDY0NAotLS0gYS9tbS9tcHJvdGVjdC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21wcm90ZWN0LmMKQEAgLTMzNyw3ICYjNDM7MzM3LDcgQEAgc3RhdGljIGxvbmcgY2hhbmdlX3B0ZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLAogCQlpc19wcml2YXRlX3NpbmdsZV90aHJlYWRlZCA9IHZtYV9pc19zaW5nbGVfdGhyZWFkZWRfcHJpdmF0ZSh2bWEpOwogCiAJZmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyh2bWEtJmd0O3ZtX21tKTsKLQlsYXp5X21tdV9tb2RlX2VuYWJsZSgpOwomIzQzOwlsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXModm1hLSZndDt2bV9tbSwgYWRkciwgZW5kLCBwdGUpOwogCWRvIHsKIAkJbnJfcHRlcyA9IDE7CiAJCW9sZHB0ZSA9IHB0ZXBfZ2V0KHB0ZSk7CmRpZmYgLS1naXQgYS9tbS9tcmVtYXAuYyBiL21tL21yZW1hcC5jCmluZGV4IGU5YzhiMWQwNTgzMmIuLjBkZmUzZGUzOWNjYzcgMTAwNjQ0Ci0tLSBhL21tL21yZW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21yZW1hcC5jCkBAIC0yNjAsNyAmIzQzOzI2MCw3IEBAIHN0YXRpYyBpbnQgbW92ZV9wdGVzKHN0cnVjdCBwYWdldGFibGVfbW92ZV9jb250cm9sICpwbWMsCiAJaWYgKG5ld19wdGwgIT0gb2xkX3B0bCkKIAkJc3Bpbl9sb2NrX25lc3RlZChuZXdfcHRsLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAJZmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyh2bWEtJmd0O3ZtX21tKTsKLQlsYXp5X21tdV9tb2RlX2VuYWJsZSgpOwomIzQzOwlsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIG9sZF9hZGRyLCBvbGRfZW5kLCBvbGRfcHRlcCk7CiAKIAlmb3IgKDsgb2xkX2FkZHIgJmx0OyBvbGRfZW5kOyBvbGRfcHRlcCAmIzQzOz0gbnJfcHRlcywgb2xkX2FkZHIgJiM0Mzs9IG5yX3B0ZXMgKiBQQUdFX1NJWkUsCiAJCW5ld19wdGVwICYjNDM7PSBucl9wdGVzLCBuZXdfYWRkciAmIzQzOz0gbnJfcHRlcyAqIFBBR0VfU0laRSkgewpkaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jCmluZGV4IGY0ZmEyMjdhOGQ3ZjAuLjFjNmVmOGZkMDc5ZTAgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bWFsbG9jLmMKQEAgLTEwOSw3ICYjNDM7MTA5LDcgQEAgc3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCWlmICghcHRlKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CiYjNDM7CWxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcygmYW1wO2luaXRfbW0sIGFkZHIsIGVuZCwgcHRlKTsKIAogCWRvIHsKIAkJaWYgKHVubGlrZWx5KCFwdGVfbm9uZShwdGVwX2dldChwdGUpKSkpIHsKQEAgLTM5Myw3ICYjNDM7MzkzLDcgQEAgc3RhdGljIHZvaWQgdnVubWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IFBBR0VfU0laRTsKIAogCXB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcik7Ci0JbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKJiM0MzsJbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKCZhbXA7aW5pdF9tbSwgYWRkciwgZW5kLCBwdGUpOwogCiAJZG8gewogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKQEAgLTU2MCw3ICYjNDM7NTYwLDcgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJaWYgKCFwdGUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKJiM0MzsJbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKCZhbXA7aW5pdF9tbSwgYWRkciwgZW5kLCBwdGUpOwogCiAJZG8gewogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBhZ2VzWypucl07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDA0CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gdGhlIExhenkgTU1VIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgbmV3IHBhdGNoIHNlcmllcyBoZXJlIHRhcmdldGluZyB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIGFuZCBpdCBzZWVtcyB0byBiZSBhYm91dCBpbXBsZW1lbnRpbmcgYSAmIzM0O2xhenkgTU1VJiMzNDsgbW9kZS4gSW50ZXJlc3RpbmchIFRoZSBsaXN0IG9mIG1vZGlmaWVkIGZpbGVzIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgYXR0ZW50aW9uOiBgbGF6eV9tbXUuY2AsIG9mIGNvdXJzZSwgYnV0IGFsc28gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmaWxlcyBsaWtlIGBwZ3RhYmxlLmhgLCBgbWFkdmlzZS5jYCwgYG1lbW9yeS5jYCwgYW5kIGV2ZW4gS0FTQU4tcmVsYXRlZCBjb2RlLiBUaGlzIHN1Z2dlc3RzIGEgcHJldHR5IGZ1bmRhbWVudGFsIHNoaWZ0IGluIGhvdyBtZW1vcnkgbWFuYWdlbWVudCBpcyBoYW5kbGVkLCBwb3RlbnRpYWxseSBpbXBhY3RpbmcgYSB3aWRlIHJhbmdlIG9mIG9wZXJhdGlvbnMuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGNlbnRlciBhcm91bmQgYGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlc2AgY2FsbGluZyBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCB0byBhY3RpdmF0ZSB0aGlzIG5ldyBtb2RlLiBBbmQgaXQgbG9va3MgbGlrZSB0aGUgczM5MCBpbXBsZW1lbnRhdGlvbiBpbiBgYXJjaC9zMzkwL21tL2xhenlfbW11LmNgIGlzIGxldmVyYWdpbmcgZmFjaWxpdHkgMTMsIHRoZSBJUFRFLXJhbmdlIGZhY2lsaXR5LCB0byBoYW5kbGUgUFRFIGludmFsaWRhdGlvbnMgaW4gYmF0Y2hlcy4gVGhhdCYjMzk7cyBhIGNsZXZlciBhcHByb2FjaCwgYXNzdW1pbmcgaXQmIzM5O3MgZG9uZSBlZmZpY2llbnRseS4KCk5vdywgbXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBJcyB0aGlzIGdvaW5nIHRvIHdvcmsgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzPyBUaGUgZmFjdCB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBpbiBgY29yZSBtbS9gIGFuZCBgYXJjaC9zMzkwL21tL2AgdGVsbHMgbWUgaXQgY291bGQgYmUsIGJ1dCB5b3UgbmV2ZXIga25vdy4gVGhhbmtmdWxseSwgdGhlIHRleHQgZXhwbGljaXRseSBtZW50aW9ucyB0aGF0IHMzOTB4IFFFTVUvS1ZNIHN1cHBvcnRzIGZhY2lsaXR5IDEzIChJUFRFLXJhbmdlKSwgc28gdGhhdCYjMzk7cyBhIGNoZWNrIGluIHRoZSBhZmZpcm1hdGl2ZS4gVGhhdCYjMzk7cyBhIGh1Z2UgcmVsaWVmLgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaW1wbGljYXRpb25zLiBJIHNlZSBhIGBzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERWAgaW4gYGFyY2gvczM5MC9LY29uZmlnYC4gVGhhdCYjMzk7cyBhIGNsZWFyIGluZGljYXRvciB0aGF0IHRoZXJlJiMzOTtzIHByb2JhYmx5IGEgY29ycmVzcG9uZGluZyBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgd2hhdCB0aGlzIG1vZGUgKmVuYWJsZXMqIGFuZCAqZGlzYWJsZXMqLiBUaW1lIHRvIGdyZXAgdGhlIGNvZGUgZm9yIGBBUkNIX0hBU19MQVpZX01NVV9NT0RFYCBvciBzb21ldGhpbmcgc2ltaWxhciB0byBmaW5kIHRoZSBhY3R1YWwgY29uZmlnIG5hbWUuIEkgbmVlZCB0byBrbm93IGV4YWN0bHkgd2hhdCBuZWVkcyB0byBiZSBlbmFibGVkIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoaXMgbmV3IGxhenkgTU1VIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QVJDSF9IQVNfTEFaWV9NTVVfTU9ERSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcbi0tXG5hcmNoL2FybTY0L0tjb25maWctMzYtXHRzZWxlY3QgQVJDSF9IQVNfS0VFUElOSVRSRFxuYXJjaC9hcm02NC9LY29uZmlnOjM3Olx0c2VsZWN0IEFSQ0hfSEFTX0xBWllfTU1VX01PREVcbmFyY2gvYXJtNjQvS2NvbmZpZy0zOC1cdHNlbGVjdCBBUkNIX0hBU19NRU1CQVJSSUVSX1NZTkNfQ09SRVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlPTgzPWNvbmZpZyBQUENfQk9PSzNTXzY0XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUtOTUtXHRzZWxlY3QgS0FTQU5fVk1BTExPQyBpZiBLQVNBTlxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGU6OTY6XHRzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUtOTctXG4tLVxuYXJjaC9zMzkwL0tjb25maWc9NzU9Y29uZmlnIFMzOTBcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy05OS1cdHNlbGVjdCBBUkNIX0hBU19LQ09WXG5hcmNoL3MzOTAvS2NvbmZpZzoxMDA6XHRzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERVxuYXJjaC9zMzkwL0tjb25maWctMTAxLVx0c2VsZWN0IEFSQ0hfSEFTX01FTUJBUlJJRVJfU1lOQ19DT1JFXG4tLVxuYXJjaC9zcGFyYy9LY29uZmlnPTcwPWNvbmZpZyBTUEFSQzY0XG4tLVxuYXJjaC9zcGFyYy9LY29uZmlnLTExNC1cdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1NDSEVEX01DICBpZiBTTVBcbmFyY2gvc3BhcmMvS2NvbmZpZzoxMTU6XHRzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERVxuYXJjaC9zcGFyYy9LY29uZmlnLTExNi1cdHNlbGVjdCBIQVZFX0dFTkVSSUNfVkRTT1xuLS1cbmFyY2gveDg2L0tjb25maWc9ODA1PWNvbmZpZyBQQVJBVklSVF9YWExcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTgwNy1cdGRlcGVuZHMgb24gWDg2XzY0XG5hcmNoL3g4Ni9LY29uZmlnOjgwODpcdHNlbGVjdCBBUkNIX0hBU19MQVpZX01NVV9NT0RFXG5hcmNoL3g4Ni9LY29uZmlnLTgwOS1cbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5oLTEzLSN1bmRlZiBDT05GSUdfUEFSQVZJUlRfU1BJTkxPQ0tTXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5oOjE0OiN1bmRlZiBDT05GSUdfQVJDSF9IQVNfTEFaWV9NTVVfTU9ERVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuaC0xNS0jdW5kZWYgQ09ORklHX0tBU0FOXG4tLVxuYXJjaC94ODYvYm9vdC9zdGFydHVwL3NtZS5jLTI2LSN1bmRlZiBDT05GSUdfUEFSQVZJUlRfU1BJTkxPQ0tTXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvc21lLmM6Mjc6I3VuZGVmIENPTkZJR19BUkNIX0hBU19MQVpZX01NVV9NT0RFXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvc21lLmMtMjgtXG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MTkwPXN0YXRpYyBpbmxpbmUgaW50IHBtZF9kaXJ0eShwbWRfdCBwbWQpXG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjQ3LSAqL1xuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MjQ4OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfTEFaWV9NTVVfTU9ERVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjQ5LS8qKlxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaD04MjY9c3RydWN0IHRhc2tfc3RydWN0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTQzOC1cbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxNDM5OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfTEFaWV9NTVVfTU9ERVxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE0NDAtXHRzdHJ1Y3QgbGF6eV9tbXVfc3RhdGVcdFx0bGF6eV9tbXVfc3RhdGU7XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oPTE3MjQ9c3RhdGljIGlubGluZSBjaGFyIHRhc2tfc3RhdGVfdG9fY2hhcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTcyOC1cbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxNzI5OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfTEFaWV9NTVVfTU9ERVxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE3MzAtLyoqXG4tLVxubW0vS2NvbmZpZz0xNDkwPWNvbmZpZyBGSU5EX05PUk1BTF9QQUdFXG4tLVxubW0vS2NvbmZpZy0xNDkyLVxubW0vS2NvbmZpZzoxNDkzOmNvbmZpZyBBUkNIX0hBU19MQVpZX01NVV9NT0RFXG5tbS9LY29uZmlnLTE0OTQtXHRib29sXG4tLVxubW0vS2NvbmZpZz0xNTAwPWNvbmZpZyBMQVpZX01NVV9NT0RFX0tVTklUX1RFU1Rcbm1tL0tjb25maWctMTUwMS1cdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciB0aGUgbGF6eSBNTVUgbW9kZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9LY29uZmlnOjE1MDI6XHRkZXBlbmRzIG9uIEFSQ0hfSEFTX0xBWllfTU1VX01PREVcbm1tL0tjb25maWctMTUwMy1cdGRlcGVuZHMgb24gS1VOSVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM2OQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDYzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExhenkgTU1VIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGludHJvZHVjaW5nIGBDT05GSUdfTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUYC4gVGhlIGluaXRpYWwgY2x1ZSBpcyB0aGUgYWRkaXRpb24gb2YgYGxhenlfbW11LmNgIHRvIHRoZSBgYXJjaC9zMzkwL21tL01ha2VmaWxlYC4gSXQmIzM5O3MgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5LCBzbyBpdCYjMzk7cyBhbHdheXMgaW5jbHVkZWQgd2hlbiB0aGUga2VybmVsIGlzIGJ1aWx0IGZvciBzMzkwLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgaW50ZXJhY3Rpb24gd2l0aCBLQVNBTiwgYW5kIHllcCwgdGhlcmUgYXJlIGNoYW5nZXMgdG8gYGluY2x1ZGUvbGludXgva2FzYW4uaGAgYW5kIGBtbS9rYXNhbi9jb21tb24uY2AsIHNwZWNpZmljYWxseSBhZGRpbmcgYF9fa2FzYW5fcG9pc29uX3B0ZWAsIGBfX2thc2FuX3VucG9pc29uX3B0ZWAsIGFuZCBgS0FTQU5fTEFaWV9NTVVfUFRFYC4gVGhpcyBtZWFucyBgQ09ORklHX0tBU0FOYCBpcyBnb2luZyB0byBiZSByZWxldmFudCB3aGVuIHRlc3RpbmcuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvcmUgb2YgYGFyY2gvczM5MC9tbS9sYXp5X21tdS5jYC4gVGhlIHBhdGNoIGludHJvZHVjZXMgdGhlc2UgZnVuY3Rpb25zOiBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlYCwgYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXNgLCBgYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlYCwgYGFyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZWAsIGBfX2xhenlfbW11X3NldF9wdGVgLCBgX19sYXp5X21tdV9wdGVwX2dldGAsIGBfX2xhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmdgLCBgX19sYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXJgLCBgX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X3N0YXJ0YCwgYF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9jb21taXRgLCBhbmQgYF9fbGF6eV9tbXVfcHRlcF9zZXRfd3Jwcm90ZWN0YC4KClRoZXNlIGZ1bmN0aW9ucyBhcmUga2V5IGJlY2F1c2UgdGhleSBhcmUgaW52b2tlZCBmcm9tIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oYCBpbmxpbmUgZnVuY3Rpb25zIGxpa2UgYGxhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmdgLCBgc2V0X3B0ZWAsIGBwdGVwX2dldGAsIGV0Yy4gVGhlc2UgYXJlICp2ZXJ5KiBob3QgcGF0aCBmdW5jdGlvbnMuIFRoZSBgX19sYXp5X21tdV8qYCB2YXJpYW50cyBhcmUgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbnMuIFRoZSBwcm9tcHQgd2FudHMgbWUgdG8gYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zLiBXaGlsZSB0aGUgYF9fbGF6eV9tbXVfKmAgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBhbmQgbm90IGlubGluZWQsIHRoZXkgYXJlIGNhbGxlZCBvbiAqZXZlcnkqIFBURSBvcGVyYXRpb24gd2hlbiB0aGUgbGF6eSBNTVUgaXMgYWN0aXZlLiBUZWNobmljYWxseSB0aGV5IGFyZSBub3Qgc3RhdGljLCBhbmQgbm90IGlubGluZWQgYnV0IHRoZXkgYXJlIGhvdC1wYXRoLiAKCkhvd2V2ZXIsIGBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzYCwgYGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZWAsIGFuZCBgYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlYCBhcmUgZ29vZCBlbnRyeSBwb2ludHMgdGhhdCBzaG91bGQgYmUgdGVzdGVkIGJlY2F1c2UgdGhleSBhcmUgdGhlIGVudHJ5IHBvaW50cyB0byB0aGUgbGF6eSBNTVUgbW9kZS4KSSYjMzk7bGwga2VlcCBgYXJjaC9zMzkwL21tL2xhenlfbW11LmNgIG9wZW4gYXMgSSBjb250aW51ZSB0byBleGFtaW5lIHRoZSBleGFjdCBmdW5jdGlvbnMgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MTI0OT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19wdGVwX2lwdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgbnIsXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xMjYyLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMjYzOnZvaWQgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTI2NC1cdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEyNjctXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjEyNjg6dm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGUodm9pZCk7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEyNjktdm9pZCBhcmNoX2xlYXZlX2xhenlfbW11X21vZGUodm9pZCk7XG4tLVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM9MTkwPXN0YXRpYyB2b2lkIGZsdXNoX2xhenlfbW11X21vZGUodm9pZClcbi0tXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0yMTItXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYzoyMTM6dm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGUodm9pZClcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTIxNC17XG4tLVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM9MjE3PUVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKTtcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTIxOC1cbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jOjIxOTp2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0yMjAtXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90bGJmbHVzaF82NC5oPTQxPXZvaWQgZmx1c2hfdGxiX3BlbmRpbmcodm9pZCk7XG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYmZsdXNoXzY0Lmg6NDI6dm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGUodm9pZCk7XG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYmZsdXNoXzY0LmgtNDMtdm9pZCBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUodm9pZCk7XG4tLVxuYXJjaC9zcGFyYy9tbS90bGIuYz0yNT12b2lkIGZsdXNoX3RsYl9wZW5kaW5nKHZvaWQpXG4tLVxuYXJjaC9zcGFyYy9tbS90bGIuYy01NC1cbmFyY2gvc3BhcmMvbW0vdGxiLmM6NTU6dm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGUodm9pZClcbmFyY2gvc3BhcmMvbW0vdGxiLmMtNTYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzU5CgkJCQkJCQlvdXRwdXQ6IDc0CgkJCQkJCQl0aG91Z2h0czogNDA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIGluamVjdCBmdXp6aW5nIGludG8gdGhpcyBsYXp5IE1NVSBpbXBsZW1lbnRhdGlvbi4gVGhlIGdvYWwsIGFzIGFsd2F5cywgaXMgdG8gZmluZCBnb29kIGNhbmRpZGF0ZXMgdGhhdCBhcmUgYm90aCBpbXBhY3RmdWwgYW5kIHdvbiYjMzk7dCBsZWFkIHRvIHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMgYnkgZm9jdXNpbmcgb24gdGhlIGluc2FuZWx5IGhvdCBwYXRocy4KCkluaXRpYWxseSwgSSBjb25zaWRlcmVkIHRoZSBjb3JlIFBURSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zOiBgX19sYXp5X21tdV9zZXRfcHRlYCwgYF9fbGF6eV9tbXVfcHRlcF9nZXRgLCBgX19sYXp5X21tdV9wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nYCwgYW5kIHRoZSBvdGhlcnMuIFRoZXNlIGFyZSB0aGUgd29ya2hvcnNlcyDigJMgZGlyZWN0IG9wZXJhdGlvbnMgb24gcGFnZSB0YWJsZSBlbnRyaWVzLiBCdXQgdGhlbiB0aGUgcHJvbXB0IHJlbWluZGVkIG1lIHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBhbmQgdGhlc2UgYXJlICpkZWZpbml0ZWx5KiBob3QgcGF0aCwgY2FsbGVkIHJlcGVhdGVkbHkgZm9yIGV2ZXJ5IHNpbmdsZSBwYWdlIGFjY2Vzcy4gU28sIHNjcmF0Y2ggdGhvc2UuCgpIb3dldmVyLCBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc2AgY2F1Z2h0IG15IGV5ZSBhZ2Fpbi4gV2hpbGUgbm90IGRpcmVjdGx5IG9wZXJhdGluZyBvbiBpbmRpdmlkdWFsIHBhZ2VzLCBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIG9wZXJhdGlvbnMgdGhhdCAqbWFuYWdlKiB2aXJ0dWFsIG1lbW9yeSByYW5nZXMg4oCTIHRoaW5ncyBsaWtlIGBtYWR2aXNlYCwgYG1wcm90ZWN0YCwgYG1yZW1hcGAsIGB2bWFsbG9jYCwgYW5kIHdoYXQgbG9va3MgbGlrZSBgdGFza19tbXUuY2AuIFRoZXNlIGFyZSBzeXNjYWxscywgbm90IHRoZSBzdHVmZiB0aGF0JiMzOTtzIGhhcHBlbmluZyBvbiBldmVyeSBzaW5nbGUgbWVtb3J5IGFjY2Vzcy4gQW5kLCBsb29raW5nIGF0IHRoZSBjb2RlLCBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc2Agc2VlbXMgdG8gYmUgaW52b2tlZCBvbmNlIHBlciBWTUEgcmFuZ2Ugb3BlcmF0aW9uLiBUaGF0IG1ha2VzIGl0IGEgc29saWQgY2FuZGlkYXRlLiBJdCBiYWxhbmNlcyBpbXBhY3Qgd2l0aCBhdm9pZGluZyB0aGUgdHJ1bHkgaW5zYW5lIGhvdCBwYXRoLgoKTm93LCBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSB0byBjb25maXJtIG15IGluaXRpYWwgdGhvdWdodHMuIEkmIzM5O2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgYGFyY2gvczM5MC9tbS9sYXp5X21tdS5jYCBzb3VyY2UgZmlsZSB0byBzZWUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIGl0cyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRoYXQmIzM5O2xsIHByb3ZpZGUgYSBiZXR0ZXIgb3ZlcmFsbCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCguKlxcKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9tbS9sYXp5X21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9tbS9sYXp5X21tdS5jPTExPXN0cnVjdCBpcHRlX3JhbmdlIHtcbi0tXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0yMC1cbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jOjIxOnN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgaXB0ZV9yYW5nZSAqLCBpcHRlX3JhbmdlKTtcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTIyLVxuLS1cbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jPTE5MD1zdGF0aWMgdm9pZCBmbHVzaF9sYXp5X21tdV9tb2RlKHZvaWQpXG4tLVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMjEyLVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM6MjEzOnZvaWQgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKHZvaWQpXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0yMTQte1xuLS1cbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jPTIyNT1FWFBPUlRfU1lNQk9MX0lGX0tVTklUKGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMpO1xuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMjI2LVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM6MjI3OnZvaWQgYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKHZvaWQpXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0yMjgte1xuLS1cbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jPTIzMT1FWFBPUlRfU1lNQk9MX0lGX0tVTklUKGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSk7XG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0yMzItXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYzoyMzM6dm9pZCBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUodm9pZClcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTIzNC17XG4tLVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM9MjczPXN0YXRpYyBzdHJ1Y3QgaXB0ZV9yYW5nZSAqdGhpc19pcHRlX3JhbmdlKHB0ZV90ICpwdGVwKVxuLS1cbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTI4Ny1cbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jOjI4ODpib29sIF9fbGF6eV9tbXVfc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMjg5LXtcbi0tXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0zMDAtXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYzozMDE6Ym9vbCBfX2xhenlfbW11X3B0ZXBfZ2V0KHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMzAyLXtcbi0tXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0zMTMtXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYzozMTQ6Ym9vbCBfX2xhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgaW50ICpyZXMpXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0zMTUte1xuLS1cbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTMzMC1cbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jOjMzMTpib29sIF9fbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0zMzIte1xuLS1cbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTM0Ny1cbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jOjM0ODpib29sIF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMzQ5LXtcbi0tXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYz0zNTM9Ym9vbCBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4tLVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMzY2LVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM6MzY3OmJvb2wgX19sYXp5X21tdV9wdGVwX3NldF93cnByb3RlY3QodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTM2OC17XG4tLVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMzg0LVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM6Mzg1OmludCBsYXp5X21tdV9vbmxpbmVfY3B1KGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGNwdSlcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTM4Ni17XG4tLVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtNDAyLVxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM6NDAzOnZvaWQgbGF6eV9tbXVfb2ZmbGluZV9jcHUodW5zaWduZWQgaW50IGNwdSlcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTQwNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1MzgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBMYXp5IE1NVSBNb2RlIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHByb3Bvc2VkIGxhenkgTU1VIG1vZGUgaW1wbGVtZW50YXRpb24uIEZyb20gdGhlIGluaXRpYWwgc2NhbiwgYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZWAsIGBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzYCwgYGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZWAsIGFuZCBgYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlYCBhbGwgc2VlbSBsaWtlIHByb21pc2luZyBjYW5kaWRhdGVzIGZvciBtb2RpZmljYXRpb24uIFRoZSBDUFUgb25saW5lL29mZmxpbmUgZnVuY3Rpb25zLCBgbGF6eV9tbXVfb25saW5lX2NwdWAgYW5kIGBsYXp5X21tdV9vZmZsaW5lX2NwdWAsIGFsc28gYXBwZWFyIHJlbGV2YW50LiBIb3dldmVyLCBJIG5lZWQgdG8gYmUgY2F1dGlvdXMgYWJvdXQgZnVuY3Rpb25zIGxpa2UgYF9fbGF6eV9tbXVfc2V0X3B0ZWAgYW5kIHNpbWlsYXIgbG93ZXItbGV2ZWwgUFRFIG1hbmlwdWxhdGlvbiByb3V0aW5lcy4gV2hpbGUgdGhleSBhcmUgY2FsbGVkIGZyb20gYHNldF9wdGVgLCB3aGljaCBpcyBhIG5vdG9yaW91c2x5IGhvdCBwYXRoLCBtb2RpZnlpbmcgdGhlbSBjb3VsZCBpbnRyb2R1Y2Ugc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMuIEkmIzM5O2xsIGV4Y2x1ZGUgdGhlbSBmcm9tIGluaXRpYWwgY29uc2lkZXJhdGlvbiB0byBhdm9pZCBhbnkgaW1tZWRpYXRlIGltcGFjdC4KCk5vdywgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEdpdmVuIHRoZSBjb250ZXh0LCBgQ09ORklHX0tBU0FOYCBpcyBvYnZpb3VzbHkgbmVlZGVkIHRvIGVuYWJsZSBLQVNBTi1yZWxhdGVkIGNoYW5nZXMsIGJ1dCBhcmUgdGhlcmUgbW9yZSBzcGVjaWZpYyBLQVNBTiBjb25maWd1cmF0aW9ucyBpbnZvbHZlZCwgc3VjaCBhcyBgQ09ORklHX0tBU0FOX0dFTkVSSUNgIG9yIGBDT05GSUdfS0FTQU5fU1dfVEFHU2AgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IFRoZSBwYXRjaCB0b3VjaGVzIGBtbS9rYXNhbi9jb21tb24uY2AgYW5kIGBpbmNsdWRlL2xpbnV4L2thc2FuLmhgLCB3aGljaCBzdWdnZXN0cyBLQVNBTiBpbnRlZ3JhdGlvbiBpcyBjcnVjaWFsIHRvIHRoZSBkZXNpZ24uIFRoZSBhZGRpdGlvbiBvZiBgX19rYXNhbl9wb2lzb25fcHRlYCBhbmQgYF9fa2FzYW5fdW5wb2lzb25fcHRlYCBmdW5jdGlvbnMgcmVpbmZvcmNlcyB0aGlzLgoKSSYjMzk7bGwgc3BlY2lmaWNhbGx5IG5lZWQgdG8gZXhhbWluZSBgbW0va2FzYW4vY29tbW9uLmNgIGluIGRldGFpbCB0byBjb25maXJtIHRoYXQgdGhlIHJlbGV2YW50IHNlY3Rpb25zIGFyZSBpbmRlZWQgY29tcGlsZWQgb25seSB3aGVuIGBDT05GSUdfS0FTQU5gIGlzIGRlZmluZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCB0byBlbnN1cmUgd2UgZG9uJiMzOTt0IGludHJvZHVjZSBLQVNBTi1zcGVjaWZpYyBjb2RlIGludG8gbm9uLUtBU0FOIGJ1aWxkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteb2JqLVxcJFxcKENPTkZJR19LQVNBTlxcKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2thc2FuL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyNTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBwcm92aWRlZCB0ZXh0OgoKKipEaXZpbmcgaW50byB0aGUgS0FTQU4gTWFrZWZpbGUqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYG1tL2thc2FuL01ha2VmaWxlYC4gSSBrbm93IHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyIChLQVNBTikgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gcmVzaWRlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQmIzM5O3MgZGVmaW5lZCB0aGVyZSwgYW5kIGhvdyB0aGV5IGhvb2sgaW50byB0aGUgYnJvYWRlciBidWlsZCBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQ6CgoqICAgKipRdWlja2x5IHNjYW4gZm9yIGtleSB2YXJpYWJsZXM6KiogSSBleHBlY3QgdG8gZmluZCBmbGFncyByZWxhdGVkIHRvIGNvbXBpbGVyIG9wdGlvbnMsIG9iamVjdCBmaWxlIGluY2x1c2lvbiwgYW5kIHBvdGVudGlhbGx5IHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgb3Igc3BlY2lmaWMgS0FTQU4gZmVhdHVyZXMuCiogICAqKkxvb2sgZm9yIGRlcGVuZGVuY2llczoqKiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBNYWtlZmlsZSBpbnRlcmFjdHMgd2l0aCBvdGhlciBgTWFrZWZpbGVzYCBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgKGBtbWApIGRpcmVjdG9yeSBhbmQgcG90ZW50aWFsbHkgaGlnaGVyIHVwIGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgaGllcmFyY2h5LiBXaGF0IGRvZXMgaXQgZGVwZW5kIG9uLCBhbmQgd2hhdCBkb2VzIGl0IHByb3ZpZGU/CiogICAqKkZvY3VzIG9uIHRoZSBidWlsZCB0YXJnZXRzOioqIEFyZSB0aGVyZSBzcGVjaWZpYyB0YXJnZXRzIGRlZmluZWQgZm9yIGRpZmZlcmVudCBLQVNBTiBjb21wb25lbnRzLCBvciBpcyBpdCBhIG1vcmUgbW9ub2xpdGhpYyBidWlsZCBhcHByb2FjaD8gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgbW9kdWxhciB0aGUgS0FTQU4gaW1wbGVtZW50YXRpb24gaXMuCiogICAqKklkZW50aWZ5IHBvdGVudGlhbCBlbnRyeSBwb2ludHM6KiogTG9vayBmb3Igd2hlcmUgdGhlIEtBU0FOIGNvZGUgZ2V0cyBpbnRlZ3JhdGVkIGR1cmluZyBrZXJuZWwgY29tcGlsYXRpb24sIHdoaWNoIGNvdWxkIGJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lLgoKRXNzZW50aWFsbHksIEkgd2FudCB0byBmb3JtIGEgbWVudGFsIG1vZGVsIG9mIEtBU0FOJiMzOTtzIGJ1aWxkIHByb2Nlc3Mgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBmcmFtZXdvcmsuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9rYXNhbi9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRLQVNBTl9TQU5JVElaRSA6PSBuXG4gICAzOlx0VUJTQU5fU0FOSVRJWkUgOj0gblxuICAgNDpcdEtDT1ZfSU5TVFJVTUVOVCA6PSBuXG4gICA1Olx0XG4gICA2Olx0IyBEaXNhYmxlIGZ0cmFjZSB0byBhdm9pZCByZWN1cnNpb24uXG4gICA3Olx0Q0ZMQUdTX1JFTU9WRV9jb21tb24ubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxuICAgODpcdENGTEFHU19SRU1PVkVfZ2VuZXJpYy5vID0gJChDQ19GTEFHU19GVFJBQ0UpXG4gICA5Olx0Q0ZMQUdTX1JFTU9WRV9pbml0Lm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcbiAgMTA6XHRDRkxBR1NfUkVNT1ZFX3F1YXJhbnRpbmUubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxuICAxMTpcdENGTEFHU19SRU1PVkVfcmVwb3J0Lm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcbiAgMTI6XHRDRkxBR1NfUkVNT1ZFX3JlcG9ydF9nZW5lcmljLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcbiAgMTM6XHRDRkxBR1NfUkVNT1ZFX3JlcG9ydF9od190YWdzLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcbiAgMTQ6XHRDRkxBR1NfUkVNT1ZFX3JlcG9ydF9zd190YWdzLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcbiAgMTU6XHRDRkxBR1NfUkVNT1ZFX3NoYWRvdy5vID0gJChDQ19GTEFHU19GVFJBQ0UpXG4gIDE2Olx0Q0ZMQUdTX1JFTU9WRV9od190YWdzLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcbiAgMTc6XHRDRkxBR1NfUkVNT1ZFX3N3X3RhZ3MubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxuICAxODpcdFxuICAxOTpcdCMgRnVuY3Rpb24gc3BsaXR0ZXIgY2F1c2VzIHVubmVjZXNzYXJ5IHNwbGl0cyBpbiBfX2FzYW5fbG9hZDEvX19hc2FuX3N0b3JlMVxuICAyMDpcdCMgc2VlOiBodHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD02MzUzM1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDAyMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LiBIZXJlJiMzOTtzIGEgc3VtbWFyeToKCioqRGlnZ2luZyBEZWVwZXI6IFRoZSBVcmdlIHRvIFVuZGVyc3RhbmQqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBpcyBjbGVhcjogSSBuZWVkIHRvIGRlbHZlIGZ1cnRoZXIuIEl0JiMzOTtzIHRoYXQgaW1tZWRpYXRlLCBhbG1vc3QgaW52b2x1bnRhcnkgcmVhY3Rpb24gSSBnZXQgd2hlbiBwcmVzZW50ZWQgd2l0aCBzb21ldGhpbmcgbmV3LCBzb21ldGhpbmcgdGhhdCBzcGFya3MgbXkgY3VyaW9zaXR5LiBNeSBleHBlcmllbmNlIGhhcyB0YXVnaHQgbWUgdGhhdCBpbml0aWFsIHN1cmZhY2UgaW1wcmVzc2lvbnMgYXJlIHJhcmVseSBlbm91Z2guIFRoZXJlJiMzOTtzIGFsd2F5cyBhIGhpZGRlbiBjb21wbGV4aXR5LCBhIG51YW5jZSwgYSBkZWVwZXIgbGF5ZXIgb2YgbWVhbmluZyB3YWl0aW5nIHRvIGJlIHVuY292ZXJlZC4gUmVhZGluZyBtb3JlLCBhbmFseXppbmcgbW9yZSwgaW52ZXN0aWdhdGluZyBtb3JlIOKAkyB0aGF0JiMzOTtzIHRoZSBvbmx5IHdheSB0byB0cnVseSBncmFzcCB0aGUgc3ViamVjdCBhdCBoYW5kIGFuZCBhc3Nlc3MgaXRzIHNpZ25pZmljYW5jZSB3aXRoaW4gdGhlIGJyb2FkZXIgZnJhbWV3b3JrIG9mIG15IGV4cGVydGlzZS4gVGhpcyB1cmdlLCB0aGlzIGNvbXB1bHNpb24gdG8gdW5kZXJzdGFuZCB0aG9yb3VnaGx5LCBpcyBmdW5kYW1lbnRhbCB0byBob3cgSSBhcHByb2FjaCBteSB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2thc2FuL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMTpcdENDX0ZMQUdTX0tBU0FOX1JVTlRJTUUgOj0gJChjYWxsIGNjLW9wdGlvbiwgLWZuby1jb25zZXJ2ZS1zdGFjaylcbiAgMjI6XHRDQ19GTEFHU19LQVNBTl9SVU5USU1FICYjNDM7PSAtZm5vLXN0YWNrLXByb3RlY3RvclxuICAyMzpcdCMgRGlzYWJsZSBicmFuY2ggdHJhY2luZyB0byBhdm9pZCByZWN1cnNpb24uXG4gIDI0Olx0Q0NfRkxBR1NfS0FTQU5fUlVOVElNRSAmIzQzOz0gLURESVNBQkxFX0JSQU5DSF9QUk9GSUxJTkdcbiAgMjU6XHRcbiAgMjY6XHRDRkxBR1NfY29tbW9uLm8gOj0gJChDQ19GTEFHU19LQVNBTl9SVU5USU1FKVxuICAyNzpcdENGTEFHU19nZW5lcmljLm8gOj0gJChDQ19GTEFHU19LQVNBTl9SVU5USU1FKVxuICAyODpcdENGTEFHU19pbml0Lm8gOj0gJChDQ19GTEFHU19LQVNBTl9SVU5USU1FKVxuICAyOTpcdENGTEFHU19xdWFyYW50aW5lLm8gOj0gJChDQ19GTEFHU19LQVNBTl9SVU5USU1FKVxuICAzMDpcdENGTEFHU19yZXBvcnQubyA6PSAkKENDX0ZMQUdTX0tBU0FOX1JVTlRJTUUpXG4gIDMxOlx0Q0ZMQUdTX3JlcG9ydF9nZW5lcmljLm8gOj0gJChDQ19GTEFHU19LQVNBTl9SVU5USU1FKVxuICAzMjpcdENGTEFHU19yZXBvcnRfaHdfdGFncy5vIDo9ICQoQ0NfRkxBR1NfS0FTQU5fUlVOVElNRSlcbiAgMzM6XHRDRkxBR1NfcmVwb3J0X3N3X3RhZ3MubyA6PSAkKENDX0ZMQUdTX0tBU0FOX1JVTlRJTUUpXG4gIDM0Olx0Q0ZMQUdTX3NoYWRvdy5vIDo9ICQoQ0NfRkxBR1NfS0FTQU5fUlVOVElNRSlcbiAgMzU6XHRDRkxBR1NfaHdfdGFncy5vIDo9ICQoQ0NfRkxBR1NfS0FTQU5fUlVOVElNRSlcbiAgMzY6XHRDRkxBR1Nfc3dfdGFncy5vIDo9ICQoQ0NfRkxBR1NfS0FTQU5fUlVOVElNRSlcbiAgMzc6XHRcbiAgMzg6XHRDRkxBR1NfS0FTQU5fVEVTVCA6PSAkKENGTEFHU19LQVNBTilcbiAgMzk6XHRpZm5kZWYgQ09ORklHX0NDX0hBU19LQVNBTl9NRU1JTlRSSU5TSUNfUFJFRklYXG4gIDQwOlx0IyBJZiBjb21waWxlciBpbnN0cnVtZW50cyBtZW1pbnRyaW5zaWNzIGJ5IHByZWZpeGluZyB0aGVtIHdpdGggX19hc2FuL19faHdhc2FuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDY4MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LiBIZXJlJiMzOTtzIGEgc3VtbWFyeToKCioqRGlnZ2luZyBEZWVwZXI6IFRoZSBVcmdlIHRvIFVuZGVyc3RhbmQqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBpcyBjbGVhcjogSSBuZWVkIHRvIGRlbHZlIGZ1cnRoZXIuIEl0JiMzOTtzIHRoYXQgaW1tZWRpYXRlLCBhbG1vc3QgaW52b2x1bnRhcnkgcmVhY3Rpb24gSSBnZXQgd2hlbiBwcmVzZW50ZWQgd2l0aCBzb21ldGhpbmcgbmV3LCBzb21ldGhpbmcgdGhhdCBzcGFya3MgbXkgY3VyaW9zaXR5LiBNeSBleHBlcmllbmNlIGhhcyB0YXVnaHQgbWUgdGhhdCBpbml0aWFsIHN1cmZhY2UgaW1wcmVzc2lvbnMgYXJlIHJhcmVseSBlbm91Z2guIFRoZXJlJiMzOTtzIGFsd2F5cyBhIGhpZGRlbiBjb21wbGV4aXR5LCBhIG51YW5jZSwgYSBkZWVwZXIgbGF5ZXIgb2YgbWVhbmluZyB3YWl0aW5nIHRvIGJlIHVuY292ZXJlZC4gUmVhZGluZyBtb3JlLCBhbmFseXppbmcgbW9yZSwgaW52ZXN0aWdhdGluZyBtb3JlIOKAkyB0aGF0JiMzOTtzIHRoZSBvbmx5IHdheSB0byB0cnVseSBncmFzcCB0aGUgc3ViamVjdCBhdCBoYW5kIGFuZCBhc3Nlc3MgaXRzIHNpZ25pZmljYW5jZSB3aXRoaW4gdGhlIGJyb2FkZXIgZnJhbWV3b3JrIG9mIG15IGV4cGVydGlzZS4gVGhpcyB1cmdlLCB0aGlzIGNvbXB1bHNpb24gdG8gdW5kZXJzdGFuZCB0aG9yb3VnaGx5LCBpcyBmdW5kYW1lbnRhbCB0byBob3cgSSBhcHByb2FjaCBteSB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2thc2FuL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MTpcdCMgd2UgbmVlZCB0byB0cmVhdCB0aGVtIG5vcm1hbGx5IChhcyBidWlsdGlucyksIG90aGVyd2lzZSB0aGUgY29tcGlsZXIgd29uJiMzOTt0XG4gIDQyOlx0IyByZWNvZ25pemUgdGhlbSBhcyBpbnN0cnVtZW50YWJsZS4gSWYgaXQgZG9lc24mIzM5O3QgaW5zdHJ1bWVudCB0aGVtLCB3ZSBuZWVkIHRvXG4gIDQzOlx0IyBwYXNzIC1mbm8tYnVpbHRpbiwgc28gdGhlIGNvbXBpbGVyIGRvZXNuJiMzOTt0IGlubGluZSB0aGVtLlxuICA0NDpcdENGTEFHU19LQVNBTl9URVNUICYjNDM7PSAtZm5vLWJ1aWx0aW5cbiAgNDU6XHRlbmRpZlxuICA0NjpcdFxuICA0NzpcdENGTEFHU19SRU1PVkVfa2FzYW5fdGVzdF9jLm8gJiM0Mzs9ICQoY2FsbCBjYy1vcHRpb24sIC1XdmxhLWxhcmdlci10aGFuPTEpXG4gIDQ4Olx0Q0ZMQUdTX2thc2FuX3Rlc3RfYy5vIDo9ICQoQ0ZMQUdTX0tBU0FOX1RFU1QpXG4gIDQ5Olx0UlVTVEZMQUdTX2thc2FuX3Rlc3RfcnVzdC5vIDo9ICQoUlVTVEZMQUdTX0tBU0FOKVxuICA1MDpcdFxuICA1MTpcdG9iai15IDo9IGNvbW1vbi5vIHJlcG9ydC5vXG4gIDUyOlx0b2JqLSQoQ09ORklHX0tBU0FOX0dFTkVSSUMpICYjNDM7PSBpbml0Lm8gZ2VuZXJpYy5vIHJlcG9ydF9nZW5lcmljLm8gc2hhZG93Lm8gcXVhcmFudGluZS5vXG4gIDUzOlx0b2JqLSQoQ09ORklHX0tBU0FOX0hXX1RBR1MpICYjNDM7PSBod190YWdzLm8gcmVwb3J0X2h3X3RhZ3MubyB0YWdzLm8gcmVwb3J0X3RhZ3Mub1xuICA1NDpcdG9iai0kKENPTkZJR19LQVNBTl9TV19UQUdTKSAmIzQzOz0gaW5pdC5vIHJlcG9ydF9zd190YWdzLm8gc2hhZG93Lm8gc3dfdGFncy5vIHRhZ3MubyByZXBvcnRfdGFncy5vXG4gIDU1Olx0XG4gIDU2Olx0a2FzYW5fdGVzdC1vYmpzIDo9IGthc2FuX3Rlc3RfYy5vXG4gIDU3Olx0aWZkZWYgQ09ORklHX1JVU1RcbiAgNTg6XHRcdGthc2FuX3Rlc3Qtb2JqcyAmIzQzOz0ga2FzYW5fdGVzdF9ydXN0Lm9cbiAgNTk6XHRlbmRpZlxuICA2MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTMwNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEtBU0FOIENvbXBpbGF0aW9uIERlZHVjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhyb3VnaCB0aGlzIGNvbXBpbGF0aW9uIHByb2Nlc3MgYW5kIHNvbWV0aGluZyBpcyBpbW1lZGlhdGVseSBjbGVhcjogYGNvbW1vbi5vYCBpbiB0aGUga2VybmVsIGJ1aWxkIGlzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCAqaWYqIHRoZSBLQVNBTiBtZW1vcnkgc2FmZXR5IGZlYXR1cmUgaXMgZW5hYmxlZC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGBtbS9rYXNhbmAgaXMgdGhlIHNwZWNpZmljIHN1YnN5c3RlbSByZXNwb25zaWJsZSBmb3IgS0FTQU4sIHNvIHRoYXQmIzM5O3Mgd2hlcmUgdG8gc3RhcnQuIFRoZSBjcnVjaWFsIHBpZWNlIGhlcmUgaXMgZmlndXJpbmcgb3V0IHRoZSBjb25kaXRpb24gdGhhdCBnZXRzIHVzICppbnRvKiBgbW0va2FzYW5gLiBCYXNlZCBvbiB0aGlzLCBpdCYjMzk7cyBwcmV0dHkgb2J2aW91cyB0aGF0IGBDT05GSUdfS0FTQU5gIGlzIHRoZSBkZWNpZGluZyBmYWN0b3IuCgpUaW1lIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9ucyBhbmQgdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMuIEkgc2hvdWxkIGNoZWNrIHRoZSBgbW0vTWFrZWZpbGVgIHRvIHNlZSBob3cgdGhlIGJ1aWxkIHN5c3RlbSBoYW5kbGVzIHRoZSBgbW0va2FzYW5gIGRpcmVjdG9yeSBhbmQgd2hhdCBjb25kaXRpb25zIGFyZSBzcGVjaWZpZWQuIEEgcXVpY2sgbG9vayBhdCB0aGUgTWFrZWZpbGUgc2hvdWxkIHRlbGwgbWUgaWYgdGhlIGBDT05GSUdfS0FTQU5gIG9wdGlvbiB0cnVseSBkaWN0YXRlcyB0aGUgZW50cnkgaW50byBgbW0va2FzYW5gIGFuZCwgdGhlcmVmb3JlLCB0aGUgaW5jbHVzaW9uIG9mIGBjb21tb24ub2AuIExldCBtZSBkaXZlIGluIGFuZCB2ZXJpZnkgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xm9iai1cXCRcXChDT05GSUdfS0FTQU5cXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT05MT1vYmotJChDT05GSUdfUEFHRV9QT0lTT05JTkcpICYjNDM7PSBwYWdlX3BvaXNvbi5vXG5tbS9NYWtlZmlsZTo5MjpvYmotJChDT05GSUdfS0FTQU4pXHQmIzQzOz0ga2FzYW4vXG5tbS9NYWtlZmlsZS05My1vYmotJChDT05GSUdfS0ZFTkNFKSAmIzQzOz0ga2ZlbmNlL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTY4MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLQVNBTiBhbmQgTGF6eSBNTVUgTW9kZSBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcyByZWxhdGVkIHRvIEtBU0FOIGFuZCB0aGUgbGF6eSBNTVUgbW9kZSwgc3BlY2lmaWNhbGx5IGZvciBzMzkwLiBGaXJzdCBvZmYsIEkmIzM5O20gdGhpbmtpbmcsIGBDT05GSUdfS0FTQU5gIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUsIHRoYXQmIzM5O3MgY2xlYXIuIEJ1dCBhcmUgdGhlcmUgYW55IG90aGVyIGNydWNpYWwgY29uZmlndXJhdGlvbnMgdG8gY29uc2lkZXI/IFRoZSBwYXRjaCBhZGRzIGBzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERWAgdG8gYGFyY2gvczM5MC9LY29uZmlnYC4gUmlnaHQsIGxhenkgTU1VIG1vZGUgZ2V0cyBlbmFibGVkIGlmIGBBUkNIX0hBU19MQVpZX01NVV9NT0RFYCBpcyBzZXQuIE5vdywgYEFSQ0hfSEFTX0xBWllfTU1VX01PREVgIGlzIGEgYm9vbGVhbiBjb25maWcgZGVmaW5lZCBpbiBgbW0vS2NvbmZpZ2AsIGl0IHNlZW1zIHRvIGJlIHNlbGVjdGVkIGJ5IGBTMzkwYCBpdHNlbGYuIFRoZXJlZm9yZSwgb24gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCB0aGUgbGF6eSBNTVUgbW9kZSBpcyBpbmhlcmVudGx5IGVuYWJsZWQuCgpOb3csIGFzaWRlIGZyb20gYENPTkZJR19LQVNBTmAsIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgc2hvdWxkIGJlIGhpZ2hsaWdodGVkPyBUaGUgcGF0Y2ggdG91Y2hlcyBgbW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuY2AsIHdoaWNoIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19LQVNBTl9HRU5FUklDYCBpcyBlbmFibGVkLiBTZWVtcyBsaWtlIGBLQVNBTl9HRU5FUklDYCBpcyBnb2luZyB0byBiZSBhbm90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24uCgpEaWdnaW5nIGRlZXBlciwgSSBleGFtaW5lZCBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc2AgaW4gYGFyY2gvczM5MC9tbS9sYXp5X21tdS5jYC4gSXQmIzM5O3MgY2FsbGluZyBgZW50ZXJfaXB0ZV9yYW5nZWAsIHdoaWNoLCBpbiB0dXJuLCBpcyB1c2luZyBgdGVzdF9mYWNpbGl0eSgxMylgLiBGYWNpbGl0eSAxMyByZXByZXNlbnRzIHRoZSBJUFRFLXJhbmdlIGZhY2lsaXR5LCBhbmQgdGhhbmtmdWxseSwgaXQmIzM5O3MgYXZhaWxhYmxlIG9uIHoxMCBhbmQgbGF0ZXIgc3lzdGVtcyBhbmQgaXMgc3VwcG9ydGVkIGluIFFFTVUuCgpTbywgdGhlIGtleSBmdW5jdGlvbnMgdG8ga2VlcCBpbiBtaW5kIGFyZTogYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZWAsIGBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzYCwgYGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZWAsIGBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGVgLCBgbGF6eV9tbXVfb25saW5lX2NwdWAsIGFuZCBgbGF6eV9tbXVfb2ZmbGluZV9jcHVgLgoKSnVzdCBkb3VibGUtY2hlY2tpbmcsIEkgc2VlIGBsYXp5X21tdV9vbmxpbmVfY3B1YCBhbmQgYGxhenlfbW11X29mZmxpbmVfY3B1YCBhcmVuJiMzOTt0IHN0YXRpYyBmdW5jdGlvbnMuIEFuZCwgdGhlIG90aGVyIGBhcmNoXypgIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgdXNpbmcgYEVYUE9SVF9TWU1CT0xfSUZfS1VOSVRgLiBPa2F5LCB0aGVzZSBhcmUgbm90IHN0YXRpYywgZWl0aGVyLgoKTm93LCBhcmUgdGhlcmUgYW55IG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IFllcyEgYGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlc2AgaXMgY2FsbGVkIGluIHZhcmlvdXMgcGxhY2VzOiBgZnMvcHJvYy90YXNrX21tdS5jYCwgYG1tL21hZHZpc2UuY2AsIGBtbS9tZW1vcnkuY2AsIGBtbS9tcHJvdGVjdC5jYCwgYG1tL21yZW1hcC5jYCwgYW5kIGBtbS92bWFsbG9jLmNgLiBJbnRlcmVzdGluZy4KCkFsbCBvZiB0aGVzZSBhcmUgaW5saW5lIGZ1bmN0aW9ucyBpbiBgaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhgIHRoYXQgY2FsbCBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc2AsIG1ha2luZyBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc2AgdGhlIG1haW4gZW50cnkgcG9pbnQgdG8gZm9jdXMgb24uCgpDaXJjbGluZyBiYWNrIHRvIHRoZSBjb25maWd1cmF0aW9ucywgaXMgYEtBU0FOX0dFTkVSSUNgIGRlZmluaXRlbHkgdGhlIHJpZ2h0IG9uZT8gTGV0JiMzOTtzIGNvbmZpcm0gYnkgbG9va2luZyBhdCBgbW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuY2AgYWdhaW4uIFRoZSBjb2RlIGluY2x1ZGVzIGEgY2FzZSBmb3IgYEtBU0FOX0xBWllfTU1VX1BURWAsIHdoaWNoIHRyaWdnZXJzIHRoZSAmIzM0O2xhenktbW11LXB0ZS1hY2Nlc3MmIzM0OyBidWcgdHlwZS4gVGhpcyBjb2RlIHBhdGggaXMgY29tcGlsZWQgb25seSBpZiBgQ09ORklHX0tBU0FOX0dFTkVSSUNgIGlzIGVuYWJsZWQuIFRoZXJlZm9yZSwgYEtBU0FOX0dFTkVSSUNgIGlzIGRlZmluaXRlbHkgYSByZWxldmFudCBjb25maWd1cmF0aW9uIHRvIGNvbnNpZGVyLgoKTm93LCB3aGF0IGFib3V0IGBLQVNBTl9TV19UQUdTYCBvciBgS0FTQU5fSFdfVEFHU2A/IFRoZSBwYXRjaCBtb2RpZmllcyBgbW0va2FzYW4va2FzYW4uaGAgdG8gaW50cm9kdWNlIGBLQVNBTl9MQVpZX01NVV9QVEVgLCB3aGljaCBpcyB1c2VkIGluIGByZXBvcnRfZ2VuZXJpYy5jYC4gQnV0IHRoZXJlJiMzOTtzIG5vIG1vZGlmaWNhdGlvbiBvZiBgcmVwb3J0X3N3X3RhZ3MuY2Agb3IgYHJlcG9ydF9od190YWdzLmNgLiBTbyBpdCBsb29rcyBsaWtlIGBLQVNBTl9HRU5FUklDYCBpcyB0aGUgbW9zdCBwZXJ0aW5lbnQgb25lIGhlcmUuCgpGaW5hbGx5LCBhcmUgdGhlcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnM/IGBDT05GSUdfU01QYCBpcyByZXF1aXJlZCBkdWUgdG8gdGhlIGBzbXAuY2AgY2hhbmdlcywgYnV0IHRoYXQmIzM5O3MgdXN1YWxseSBlbmFibGVkLiBOb3csIHJlZ2FyZGluZyBgQ09ORklHX0hPVFBMVUdfQ1BVYCwgaXMgaXQgbmVlZGVkIGZvciBgX19jcHVfZGllYCBhbmQgYF9fY3B1X3VwYCB3aXRoaW4gYHNtcC5jYD8gT2theSwgdGltZSB0byBjaGVjayBgYXJjaC9zMzkwL2tlcm5lbC9zbXAuY2AgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19jcHVfdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva2VybmVsL3NtcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rZXJuZWwvc21wLmM9ODI0PXN0YXRpYyB2b2lkIHNtcF9zdGFydF9zZWNvbmRhcnkodm9pZCAqY3B1dm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jLTg1NS0vKiBVcHBpbmcgYW5kIGRvd25pbmcgb2YgQ1BVcyAqL1xuYXJjaC9zMzkwL2tlcm5lbC9zbXAuYzo4NTY6aW50IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGlkbGUpXG5hcmNoL3MzOTAva2VybmVsL3NtcC5jLTg1Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MDA3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2Ugc3RhdGVtZW50cywgYXMgaWYgdGhleSB3ZXJlIG15IG93biBpbW1lZGlhdGUgdGhvdWdodHMgYXMgYW4gZW1iZWRkZWQgc3lzdGVtcyBleHBlcnQ6CgoqKkNQVSBIb3RwbHVnICZhbXA7IFNNUCBDb21waWxhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpSaWdodCwgc28gdGhlc2UgbWFjcm9zLCBgX19jcHVfdXBgIGFuZCBgX19jcHVfZGllYCwgYXJlIGNsZWFybHkgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgQ1BVcyB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGZpcnN0IG9uZSwgYF9fY3B1X3VwYCwgaXMgb25seSBnb2luZyB0byBiZSBjb21waWxlZCBpbnRvIHRoZSBzeXN0ZW0gd2hlbiBgQ09ORklHX1NNUGAgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBgX19jcHVfdXBgIGlzIGxpa2VseSByZWxhdGVkIHRvIGJyaW5naW5nIGEgQ1BVIG9ubGluZSwgd2hpY2ggaXMgYSBmZWF0dXJlIHByaW1hcmlseSBhc3NvY2lhdGVkIHdpdGggU3ltbWV0cmljIE11bHRpLVByb2Nlc3NpbmcuIElmIHlvdSBvbmx5IGhhdmUgYSBzaW5nbGUgQ1BVLCB5b3UgdHlwaWNhbGx5IGRvbiYjMzk7dCBuZWVkIHRvIGR5bmFtaWNhbGx5ICYjMzk7YnJpbmcgaXQgdXAmIzM5Oy4KCk5vdywgbG9va2luZyBhdCBgX19jcHVfZGllYCwgdGhpcyBvbmUmIzM5O3MgY29uZGl0aW9uYWwgb24gYENPTkZJR19IT1RQTFVHX0NQVWAuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhhdCB0aGlzIG1hY3JvIGlzIGZvciB0YWtpbmcgYSBDUFUgb2ZmbGluZSwgd2hpY2ggaXMgYSBjb3JlIGNvbmNlcHQgdG8gQ1BVIGhvdHBsdWcuIElmIGhvdHBsdWdnaW5nIGlzIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZSwgdGhlbiB0aGVyZSYjMzk7cyBubyB3YXkgdG8gYnJpbmcgYSBDUFUgb2ZmbGluZSAoYXNpZGUgZnJvbSBwb3dlcmluZyB0aGUgc3lzdGVtIGRvd24gb3Igb3RoZXJ3aXNlKS4gSSB3b3VsZCBleHBlY3QgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYF9fY3B1X2RpZWAgdG8gYmUgZm9yIHRoZSByZXZlcnNlIG9mIGBfX2NwdV91cGAuIEl0IHdvdWxkIGxpa2VseSBpbnZvbHZlIGEgc2VyaWVzIG9mIHN0ZXBzIHRvIHNhZmVseSB0YWtlIGEgQ1BVIG9mZiB0aGUgc3lzdGVtLCBzdWNoIGFzIG1pZ3JhdGluZyBhbnkgcmVsZXZhbnQgcHJvY2Vzc2VzIG9mZiB0aGF0IENQVSwgZmx1c2hpbmcgY2FjaGVzLCBhbmQgcG90ZW50aWFsbHkgc3RvcHBpbmcgZXhlY3V0aW9uIG9uIHRoYXQgQ1BVLgoKRXNzZW50aWFsbHksIHRoZXNlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHRlbGwgbWUgaG93IHRoZSBjb2RlIGlzIHN0cnVjdHVyZWQgdG8gaGFuZGxlIFNNUCBhbmQgQ1BVIGhvdHBsdWcuIFRoZSBpbmNsdXNpb24gb3IgZXhjbHVzaW9uIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBkZWZpbmVkIGNvbXBpbGUtdGltZSBjb25maWd1cmF0aW9uIG9mIHRoZSBzeXN0ZW0uIEkgd291bGQgbmV4dCBsb29rIGF0IHRoZXNlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IG1lY2hhbmlzbXMgYW5kIHRoZSBhcmNoaXRlY3R1cmUgdGhhdCB0aGV5IGhhbmRsZSB0byBiZXN0IHVuZGVyc3RhbmQgQ1BVIGhhbmRsaW5nIGZvciB0aGF0IHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19jcHVfZGllJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2tlcm5lbC9zbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva2VybmVsL3NtcC5jPTg5OT1pbnQgX19jcHVfZGlzYWJsZSh2b2lkKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvc21wLmMtOTIxLVxuYXJjaC9zMzkwL2tlcm5lbC9zbXAuYzo5MjI6dm9pZCBfX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSlcbmFyY2gvczM5MC9rZXJuZWwvc21wLmMtOTIzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1NTUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBUZXN0aW5nIFBsYW4qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgYEhPVFBMVUdfQ1BVYCBjb3VsZCByZWFsbHkgaGVscCBtZSBuYWlsIGRvd24gdGhlIENQVSBob3RwbHVnIGNvZGUgcGF0aHMgZHVyaW5nIHRlc3RpbmcuIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2QgYXZlbnVlIHRvIGV4cGxvcmUgZnVydGhlci4KCkxldCYjMzk7cyBzZWUsIEkgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZC4gSSYjMzk7bSBmb2N1c2luZyBvbjoKCiogICBgS0FTQU5gCiogICBgS0FTQU5fR0VORVJJQ2AKKiAgIGBIT1RQTFVHX0NQVWAKCldhaXQgYSBtaW51dGUsIGBLQVNBTl9HRU5FUklDYCBpcyBkZXBlbmRlbnQgb24gYEtBU0FOYCByaWdodD8gT2YgY291cnNlLCB0aGF0JiMzOTtzIGltcG9ydGFudCB0byByZW1lbWJlci4gTm93LCBJIGhhdmUgdG8gZW5zdXJlIHRoZSBmdWxsIHRlc3Qgc3VpdGUgY2FuIGV2ZW4gYmUgZXhlY3V0ZWQuCgpJcyBgS0FTQU5gIGV2ZW4gc3VwcG9ydGVkIG9uIHRoZSBzMzkwIGFyY2hpdGVjdHVyZT8gTGV0IG1lIGNoZWNrIHF1aWNrbHkuLi4gQWgsIHllcywgYWNjb3JkaW5nIHRvIHRoZSBgYXJjaC9zMzkwL0tjb25maWdgIGZpbGUsIGl0ICpkb2VzKiBoYXZlIGBzZWxlY3QgQVJDSF9IQVNfS0FTQU5fR0VORVJJQ2AuIEdyZWF0LiBOb3cgSSBjYW4gY29udGludWUgbXkgcGxhbm5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QVJDSF9IQVNfS0FTQU5fR0VORVJJQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5MzcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBBZGRyZXNzU2FuaXRpemVyIChLQVNBTikgQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGtlcm5lbCBjb2RlIGFuZCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBzYWZldHkgY29udGV4dC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IG1pbmQgaXMgd2hldGhlciBLQVNBTiwgb3Igc29tZXRoaW5nIGFuYWxvZ291cywgaXMgZW5hYmxlZC4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIHdlJiMzOTtyZSBydW5uaW5nIHdpdGggdGhpcyBydW50aW1lIG1lbW9yeSBlcnJvciBkZXRlY3Rpb24sIHdoaWNoIHdvdWxkIGZ1bmRhbWVudGFsbHkgYWx0ZXIgaG93IEkgaW50ZXJwcmV0IHBvdGVudGlhbCBpc3N1ZXMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHByZXByb2Nlc3NvciBkZWZpbml0aW9ucy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYEhBVkVfQVJDSF9LQVNBTmAsIG9yIHNvbWV0aGluZyBlcXVpdmFsZW50LiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgdGhlIG1vc3QgZGlyZWN0IGluZGljYXRvciwgYnV0IGl0IGNvdWxkIGJlIG5hbWVkIGRpZmZlcmVudGx5IGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlLiBBbHNvLCBJJiMzOTtsbCBrZWVwIGluIG1pbmQgdGhhdCBvdGhlciBpbnN0cnVtZW50YXRpb24gY291bGQgYmUgZW5hYmxlZCwgYW5kIEkmIzM5O2xsIGtlZXAgdGhpcyBpbiB0aGUgYmFjayBvZiBteSBoZWFkIHRvIGNoZWNrIGZvciBpbiB0aGUgc3Vycm91bmRpbmcgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S0FTQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZz0zOD1jb25maWcgQVJDSF9TVVBQT1JUU19VUFJPQkVTXG4tLVxuYXJjaC9zMzkwL0tjb25maWctNDAtXG5hcmNoL3MzOTAvS2NvbmZpZzo0MTpjb25maWcgS0FTQU5fU0hBRE9XX09GRlNFVFxuYXJjaC9zMzkwL0tjb25maWctNDItXHRoZXhcbmFyY2gvczM5MC9LY29uZmlnOjQzOlx0ZGVwZW5kcyBvbiBLQVNBTlxuYXJjaC9zMzkwL0tjb25maWctNDQtXHRkZWZhdWx0IDB4MUMwMDAwMDAwMDAwMDBcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz03NT1jb25maWcgUzM5MFxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTE4My1cdHNlbGVjdCBIQVZFX0FSQ0hfSlVNUF9MQUJFTF9SRUxBVElWRVxuYXJjaC9zMzkwL0tjb25maWc6MTg0Olx0c2VsZWN0IEhBVkVfQVJDSF9LQVNBTlxuYXJjaC9zMzkwL0tjb25maWc6MTg1Olx0c2VsZWN0IEhBVkVfQVJDSF9LQVNBTl9WTUFMTE9DXG5hcmNoL3MzOTAvS2NvbmZpZy0xODYtXHRzZWxlY3QgSEFWRV9BUkNIX0tDU0FOXG4tLVxuYXJjaC9zMzkwL0tjb25maWctMjYwLVx0c2VsZWN0IElSUV9NU0lfTElCXHRcdGlmIFBDSVxuYXJjaC9zMzkwL0tjb25maWc6MjYxOlx0c2VsZWN0IEtBU0FOX1ZNQUxMT0MgaWYgS0FTQU5cbmFyY2gvczM5MC9LY29uZmlnLTI2Mi1cdHNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQVxuLS1cbmFyY2gvczM5MC9LY29uZmlnPTY4OD1jb25maWcgS0VSTkVMX0lNQUdFX0JBU0VcbmFyY2gvczM5MC9LY29uZmlnLTY4OS1cdGhleCBcJiMzNDtLZXJuZWwgaW1hZ2UgYmFzZSBhZGRyZXNzXCYjMzQ7XG5hcmNoL3MzOTAvS2NvbmZpZzo2OTA6XHRyYW5nZSAweDEwMDAwMCAweDFGRkZGRkUwMDAwMDAwIGlmICFLQVNBTlxuYXJjaC9zMzkwL0tjb25maWc6NjkxOlx0cmFuZ2UgMHgxMDAwMDAgMHgxQkZGRkZFMDAwMDAwMCBpZiBLQVNBTlxuYXJjaC9zMzkwL0tjb25maWc6NjkyOlx0ZGVmYXVsdCAweDNGRkUwMDAwMDAwIGlmICFLQVNBTlxuYXJjaC9zMzkwL0tjb25maWc6NjkzOlx0ZGVmYXVsdCAweDdGRkZFMDAwMDAwMCBpZiBLQVNBTlxuYXJjaC9zMzkwL0tjb25maWctNjk0LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTc0NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQgZm9yIFRlc3RpbmcgYExBWllfTU1VX01PREVgKioKCk9rYXksIHNvIGBIQVZFX0FSQ0hfS0FTQU5gIGlzIGRlZmluaXRlbHkgZW5hYmxlZCwgZ29vZCBzdGFydC4gTm93LCBsZXQmIzM5O3MgbG9vayBhdCBgTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUYC4gSSBmb3VuZCBpdCBpbiBgbW0vS2NvbmZpZ2AsIHdoaWNoIGlzIGEgZ29vZCBzaWduLiBUaGUgcHJvbXB0IHdhbnRzIG1lIHRvIGlkZW50aWZ5IGFueSAqc3BlY2lmaWMqIENPTkZJRyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBmZWF0dXJlLiBTaW5jZSBpdCYjMzk7cyBhIEtVbml0IHRlc3QsIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZW5hYmxlIGl0LiBFdmVuIHRob3VnaCBzeXprYWxsZXIgZG9lc24mIzM5O3QgdHlwaWNhbGx5IHJ1biBLVW5pdCB0ZXN0cyB1bmxlc3MgZXhwbGljaXRseSBjb25maWd1cmVkLCBoYXZpbmcgaXQgZW5hYmxlZCAqY291bGQqIGJlIGJlbmVmaWNpYWwsIHlvdSBuZXZlciBrbm93LiBJdCYjMzk7cyBhIEtVbml0IHRlc3QsIHNvLCBJIHdpbGwganVzdCBlbmFibGUgaXQuCgpOb3csIGFzIHBlciB0aGUgcHJvbXB0LCBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgYEtBU0FOYCwgYEtBU0FOX0dFTkVSSUNgLCBhbmQgYEhPVFBMVUdfQ1BVYCBhcmUgaW5jbHVkZWQgdG8gdGhvcm91Z2hseSB0ZXN0IHRoaXMgbmV3IGZlYXR1cmUsIGFuZCBlbnN1cmUgY292ZXJhZ2UuCgpOZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIHRoaXMgdGVzdGluZy4gTG9va2luZyBhdCB0aGUgaW1wbGVtZW50YXRpb24sIEkgd2FudCB0byBrZWVwIGEgY2xvc2UgZXllIG9uOiBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlYCwgYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXNgLCBgYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlYCwgYGFyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZWAsIGBsYXp5X21tdV9vbmxpbmVfY3B1YCwgYW5kIGBsYXp5X21tdV9vZmZsaW5lX2NwdWAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgY29yZSBlbnRyeS9leGl0IHBvaW50cyBhbmQgbWFuYWdlbWVudCBmdW5jdGlvbnMgZm9yIGBMQVpZX01NVV9NT0RFYC4KCldhaXQsIHRoZXJlIGFyZSBtb3JlLCBhbmQgbm90IHN0YXRpYyBlaXRoZXIuIEkgc2VlIGBfX2thc2FuX3BvaXNvbl9wdGVgIGFuZCBgX19rYXNhbl91bnBvaXNvbl9wdGVgIGluIGBtbS9rYXNhbi9jb21tb24uY2AuIFRoZXNlIGFyZSBleHBvcnRlZCBhbmQgYXJlIGNhbGxlZCBieSB0aGUgaW5saW5lIGZ1bmN0aW9ucywgYGthc2FuX3BvaXNvbl9wdGVgIGFuZCBga2FzYW5fdW5wb2lzb25fcHRlYC4gVGhleSBhcmUgKmV4Y2VsbGVudCogY2FuZGlkYXRlcyBmb3IgdGVzdGluZyEgSSB3aWxsIGtlZXAgdGhlc2Ugb24gdGhlIGxpc3QsIHRvby4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYF9fa2FzYW5fcG9pc29uX3B0ZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fa2FzYW5fcG9pc29uX3B0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2thc2FuL2NvbW1vbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2thc2FuL2NvbW1vbi5jPTE1NT12b2lkIF9fa2FzYW5fcG9pc29uX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0va2FzYW4vY29tbW9uLmMtMTY1LVxubW0va2FzYW4vY29tbW9uLmM6MTY2OnZvaWQgX19rYXNhbl9wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucilcbm1tL2thc2FuL2NvbW1vbi5jLTE2Ny17XG4tLVxubW0va2FzYW4vY29tbW9uLmMtMTcwLX1cbm1tL2thc2FuL2NvbW1vbi5jOjE3MTpFWFBPUlRfU1lNQk9MX0dQTChfX2thc2FuX3BvaXNvbl9wdGUpO1xubW0va2FzYW4vY29tbW9uLmMtMTcyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDgwMgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDU2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipMYXp5IE1NVSBGdW5jdGlvbmFsaXR5IEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7bSBldmFsdWF0aW5nIHRoZSBmdW5jdGlvbnMgd2l0aGluIGBhcmNoL3MzOTAvbW0vbGF6eV9tbXUuY2AuIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZXNlIGZ1bmN0aW9ucywgbGlrZSB0aGUgb25lcyBkZWFsaW5nIHdpdGggUFRFIG1hbmlwdWxhdGlvbiwgYXJlIGluZGVlZCBleHBvcnRlZC4gTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIHRoYXQgYXJlIHJlbGV2YW50LiBMb29raW5nIGF0IHRoZSBjb2RlYmFzZSwgSSBzZWUgYSBzZXQgb2YgZnVuY3Rpb25zOiBgX19sYXp5X21tdV9zZXRfcHRlYCwgYF9fbGF6eV9tbXVfcHRlcF9nZXRgLCBgX19sYXp5X21tdV9wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nYCwgYF9fbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyYCwgYF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydGAsIGBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0YCwgYW5kIGBfX2xhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdGAuCgpUaGVzZSBhcmVuJiMzOTt0IHN0YXRpYywgYnV0IHRoZXkgKmFyZSogY2FsbGVkIGZyb20gaW5saW5lIGZ1bmN0aW9ucyB3aXRoaW4gYHBndGFibGUuaGAuIFRoZSBxdWVzdGlvbiBiZWNvbWVzIHdoZXRoZXIgdGhlc2UgYXJlIGhvdCBwYXRoIGZ1bmN0aW9ucy4gSXQgc2VlbXMgdGhleSBhcmU7IHRoZXkmIzM5O3JlIGNhbGxlZCBkdXJpbmcgZXZlcnkgUFRFIG9wZXJhdGlvbiB3aGVuIHRoZSBsYXp5IE1NVSBtb2RlIGlzIGFjdGl2ZS4gSG93ZXZlciwgd2FpdCwgbGF6eSBNTVUgbW9kZSBpcyBvbmx5IGVuYWJsZWQgZm9yIHNwZWNpZmljIG9wZXJhdGlvbnMgbGlrZSBgbWFkdmlzZWAsIGBtcHJvdGVjdGAsIGBtcmVtYXBgLCBgdm1hbGxvY2AsIGFuZCBvcGVyYXRpb25zIHdpdGhpbiBgdGFza19tbXUuY2AuIEl0JiMzOTtzIG5vdCBhIGdsb2JhbCwgYWx3YXlzLW9uIGZlYXR1cmUuIGBpc19sYXp5X21tdV9hY3RpdmUoKWAgY2hlY2tzIGBnZXRfbG93Y29yZSgpLSZndDtsYXp5X21tdV9jb3VudGAuIFNvLCB0aGVzZSBwYXJ0aWN1bGFyIGZ1bmN0aW9ucyBhcmUgb25seSBleGVjdXRlZCB3aGVuIGBsYXp5X21tdV9jb3VudCAmZ3Q7IDBgLiBUaGlzIGlzIGNsZWFybHkgcGFydCBvZiB0aGUgbmV3IGZlYXR1cmUuCgpUaGUgcHJvbXB0IGluc3RydWN0cyBtZSB0byBhdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBCdXQsIHNpbmNlIHRoZXNlIGFyZSB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGxhenkgTU1VIG1vZGUgUFRFIG9wZXJhdGlvbnMsIGFuZCB0aGV5IGFyZSBub24tc3RhdGljLCB0aGV5IGFyZSBwb3RlbnRpYWwgY2FuZGlkYXRlcy4KCkhvd2V2ZXIsIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBhcmUgYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXNgLiBBZnRlciBjYXJlZnVsIGNvbnNpZGVyYXRpb24sIEkmIzM5O2xsIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6IGBhcmNoX2VudGVyX2xhenlfbW11X21vZGVgLCBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc2AsIGBhcmNoX2xlYXZlX2xhenlfbW11X21vZGVgLCBgYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlYCwgYGxhenlfbW11X29ubGluZV9jcHVgLCBgbGF6eV9tbXVfb2ZmbGluZV9jcHVgLCBgX19rYXNhbl9wb2lzb25fcHRlYCwgYW5kIGBfX2thc2FuX3VucG9pc29uX3B0ZWAuIFRoZXNlIHJlcHJlc2VudCB0aGUgcHJpbWFyeSBjb250cm9sIGFuZCBtYW5hZ2VtZW50IHBvaW50cyBvZiB0aGUgbGF6eSBNTVUgbW9kZS4KCk1vdmluZyBvbiwgSSYjMzk7bGwgZXhhbWluZSBgYXJjaC9zMzkwL21tL3BndGFibGUuY2AuIEkgZmluZCBgX19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydGAgYW5kIGBfX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdGAuIFRoZXNlIHdlcmUgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL21tL3BndGFibGUuYz0xNjc9RVhQT1JUX1NZTUJPTChwdGVwX3hjaGdfbGF6eSk7XG5hcmNoL3MzOTAvbW0vcGd0YWJsZS5jLTE2OC1cbmFyY2gvczM5MC9tbS9wZ3RhYmxlLmM6MTY5OnB0ZV90IF9fX3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbmFyY2gvczM5MC9tbS9wZ3RhYmxlLmMtMTcwLVx0XHRcdFx0cHRlX3QgKnB0ZXApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTYxCgkJCQkJCQlvdXRwdXQ6IDI2OAoJCQkJCQkJdGhvdWdodHM6IDEyODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIGFuZCBGb2N1cyBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgeWVzLCB0aGVzZSBjb25zaWRlcmF0aW9ucyBhcmUgbm90IHN0YXRpYzsgdGhleSBldm9sdmUgd2l0aCB0aGUgYW5hbHlzaXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBjYXB0dXJpbmcgZXZlcnl0aGluZywgc28gSSYjMzk7bGwgcmV2aWV3IHRoZSBjb25maWdzIG9uZSBtb3JlIHRpbWUuCgpBbHJpZ2h0LCB0aGUgY29yZSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIgYXJlIGBLQVNBTmAsIGBLQVNBTl9HRU5FUklDYCwgYW5kIGBIT1RQTFVHX0NQVWAuIEkgaW5pdGlhbGx5IGxvb2tlZCBhdCBgTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUYCwgYnV0IHNpbmNlIHN5emthbGxlciBkb2VzbiYjMzk7dCB0eXBpY2FsbHkgcnVuIEtVbml0IHRlc3RzIGJ5IGRlZmF1bHQsIEkmIzM5O2xsIHNraXAgdGhhdCBvbmUgZm9yIG5vdy4gSXQgZG9lc24mIzM5O3QgaHVydCB0byBpbmNsdWRlIGl0LCBidXQgaXQmIzM5O3Mgbm90IGVzc2VudGlhbC4KCk5vdywgYSBxdWljayBjaGVjayByZWdhcmRpbmcgYExBWllfTU1VX01PREVfS1VOSVRfVEVTVGAuIERvZXMgdGhpcyBwYXRjaCBhY3R1YWxseSAqYWRkKiB0aGF0IGNvbmZpZz8gTGV0JiMzOTtzIHZlcmlmeSBieSBjaGVja2luZyBgbW0vS2NvbmZpZ2AgYWdhaW5zdCB0aGUgcGF0Y2guIFRoZSBkaWZmIGRvZXNuJiMzOTt0IHNob3cgYW55IG1vZGlmaWNhdGlvbnMgdG8gYG1tL0tjb25maWdgLiBIYW5nIG9uLi4uIHRoZSBncmVwIEkgZGlkIGZvciBgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERWAgc2hvd2VkIGBMQVpZX01NVV9NT0RFX0tVTklUX1RFU1RgIGluIGBtbS9LY29uZmlnYCwgYnV0IHRoZSBwYXRjaCBkaWZmIGRvZXNuJiMzOTt0IGluY2x1ZGUgYG1tL0tjb25maWdgLiBBaCwgdGhlIHBhdGNoIGRpZmYgSSB3YXMgcHJvdmlkZWQ6IChmb2xsb3dzIHRoZSBwYXRjaCBkaWZmIHByb3ZpZGVkIGluIHRoZSBwcm9tcHQpLiBPa2F5LCBzbyBgbW0vS2NvbmZpZ2AgaXNuJiMzOTt0IG1vZGlmaWVkLiBJdCBtdXN0IGhhdmUgYmVlbiBhZGRlZCBpbiBhbiBlYXJsaWVyIHBhdGNoIG9yIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgdHJlZS4gVGhlIHByb21wdCBzYXlzLCAmIzM0O1RoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4geW91ciB3b3Jrc3BhY2UuJiMzNDsgVGhpcyBtZWFucyB0aGF0IGBBUkNIX0hBU19MQVpZX01NVV9NT0RFYCBpcyAqYWxyZWFkeSogaW4gYG1tL0tjb25maWdgLiBUaGUgY3VycmVudCBwYXRjaCAqZG9lcyogYWRkIGBzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERWAgdG8gYGFyY2gvczM5MC9LY29uZmlnYC4gVGh1cywgYEFSQ0hfSEFTX0xBWllfTU1VX01PREVgIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgb24gczM5MCwgc28gdGhlcmUmIzM5O3Mgbm8gbmVlZCB0byBleHBsaWNpdGx5IHNwZWNpZnkgaXQuCgpSZWdhcmRpbmcgYEtBU0FOYCwgaXQmIzM5O3MgYSBzdGFuZGFyZCBjb25maWcuIGBLQVNBTl9HRU5FUklDYCBpcyBhbHNvIHN0YW5kYXJkLiBBbmQgYEhPVFBMVUdfQ1BVYCBpcyBhbHNvIHN0YW5kYXJkLgoKVGhlcmVmb3JlLCB0aGUgZmluYWwgb3V0cHV0IHdpbGwgYmU6CgoqKldvcnRoRnV6emluZzogdHJ1ZSoqCgoqKkZvY3VzU3ltYm9sczoqKgoKLSAgIGBhcmNoX2VudGVyX2xhenlfbW11X21vZGVgCi0gICBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc2AKLSAgIGBhcmNoX2xlYXZlX2xhenlfbW11X21vZGVgCi0gICBgYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlYAotICAgYGxhenlfbW11X29ubGluZV9jcHVgCi0gICBgbGF6eV9tbXVfb2ZmbGluZV9jcHVgCi0gICBgX19rYXNhbl9wb2lzb25fcHRlYAotICAgYF9fa2FzYW5fdW5wb2lzb25fcHRlYAotICAgYF9fX3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnRgCi0gICBgX19fcHRlcF9tb2RpZnlfcHJvdF9jb21taXRgCgoqKkVuYWJsZUNvbmZpZ3M6KioKCi0gICBgS0FTQU5gCi0gICBgS0FTQU5fR0VORVJJQ2AKLSAgIGBIT1RQTFVHX0NQVWAKCioqUmVhc29uaW5nOioqCgpUaGUgcGF0Y2ggaW50cm9kdWNlcyBsYXp5IE1NVSBtb2RlIGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIGxldmVyYWdpbmcgdGhlIElQVEUtcmFuZ2UgZmFjaWxpdHkgZm9yIGJhdGNoZWQgUFRFIGludmFsaWRhdGlvbnMuIEl0JiMzOTtzIGhvb2tpbmcgaW50byBrZXkgbWVtb3J5IG1hbmFnZW1lbnQgc3lzY2FsbHMgKG1hZHZpc2UsIG1wcm90ZWN0LCBtcmVtYXAsIHZtYWxsb2MpIGFuZCBDUFUgaG90cGx1ZyBwYXRocy4gQ3J1Y2lhbGx5LCBpdCBpbmNsdWRlcyBLQVNBTiBpbnN0cnVtZW50YXRpb24gZm9yIGRpcmVjdCBQVEUgYWNjZXNzIGluIGxhenkgTU1VIG1vZGUuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCBrZXJuZWwgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyByaXBlIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S0FTQU4mIzM0OywKICAgICYjMzQ7S0FTQU5fR0VORVJJQyYjMzQ7LAogICAgJiMzNDtIT1RQTFVHX0NQVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSYjMzQ7LAogICAgJiMzNDthcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzJiMzNDssCiAgICAmIzM0O2FyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSYjMzQ7LAogICAgJiMzNDthcmNoX2ZsdXNoX2xhenlfbW11X21vZGUmIzM0OywKICAgICYjMzQ7bGF6eV9tbXVfb25saW5lX2NwdSYjMzQ7LAogICAgJiMzNDtsYXp5X21tdV9vZmZsaW5lX2NwdSYjMzQ7LAogICAgJiMzNDtfX2thc2FuX3BvaXNvbl9wdGUmIzM0OywKICAgICYjMzQ7X19rYXNhbl91bnBvaXNvbl9wdGUmIzM0OywKICAgICYjMzQ7X19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydCYjMzQ7LAogICAgJiMzNDtfX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGxhenkgTU1VIG1vZGUgZm9yIHMzOTAgYXJjaGl0ZWN0dXJlLCB3aGljaCBiYXRjaGVzIFBURSBpbnZhbGlkYXRpb25zIHVzaW5nIHRoZSBJUFRFLXJhbmdlIGZhY2lsaXR5LiBJdCBob29rcyBpbnRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzY2FsbHMgKG1hZHZpc2UsIG1wcm90ZWN0LCBtcmVtYXAsIHZtYWxsb2MpIGFuZCBDUFUgaG90cGx1ZyBwYXRocy4gSXQgYWxzbyBhZGRzIEtBU0FOIGluc3RydW1lbnRhdGlvbiBmb3IgZGlyZWN0IFBURSBhY2Nlc3NlcyBpbiBsYXp5IE1NVSBtb2RlLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGFuZCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLQVNBTiYjMzQ7LAogICAgJiMzNDtLQVNBTl9HRU5FUklDJiMzNDssCiAgICAmIzM0O0hPVFBMVUdfQ1BVJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlJiMzNDssCiAgICAmIzM0O2FyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMmIzM0OywKICAgICYjMzQ7YXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlJiMzNDssCiAgICAmIzM0O2FyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZSYjMzQ7LAogICAgJiMzNDtsYXp5X21tdV9vbmxpbmVfY3B1JiMzNDssCiAgICAmIzM0O2xhenlfbW11X29mZmxpbmVfY3B1JiMzNDssCiAgICAmIzM0O19fa2FzYW5fcG9pc29uX3B0ZSYjMzQ7LAogICAgJiMzNDtfX2thc2FuX3VucG9pc29uX3B0ZSYjMzQ7LAogICAgJiMzNDtfX19wdGVwX21vZGlmeV9wcm90X3N0YXJ0JiMzNDssCiAgICAmIzM0O19fX3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbGF6eSBNTVUgbW9kZSBmb3IgczM5MCBhcmNoaXRlY3R1cmUsIHdoaWNoIGJhdGNoZXMgUFRFIGludmFsaWRhdGlvbnMgdXNpbmcgdGhlIElQVEUtcmFuZ2UgZmFjaWxpdHkuIEl0IGhvb2tzIGludG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzeXNjYWxscyAobWFkdmlzZSwgbXByb3RlY3QsIG1yZW1hcCwgdm1hbGxvYykgYW5kIENQVSBob3RwbHVnIHBhdGhzLiBJdCBhbHNvIGFkZHMgS0FTQU4gaW5zdHJ1bWVudGF0aW9uIGZvciBkaXJlY3QgUFRFIGFjY2Vzc2VzIGluIGxhenkgTU1VIG1vZGUuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxhenkgTU1VIG1vZGUgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSB0byBidWZmZXIgcGFnZSB0YWJsZSBlbnRyeSAoUFRFKSB1cGRhdGVzLiBJdCBhbHNvIGV4cGxpY2l0bHkgYWRkcyBLQVNBTiBwb2lzb25pbmcvdW5wb2lzb25pbmcgdG8gZGV0ZWN0IGludmFsaWQgZGlyZWN0IGFjY2Vzc2VzIHRvIFBURXMgd2hpbGUgdGhlIGxhenkgTU1VIG1vZGUgaXMgYWN0aXZlLCBpbnRyb2R1Y2luZyBhIG5ldyBLQVNBTiBidWcgdHlwZSAoYGxhenktbW11LXB0ZS1hY2Nlc3NgKS4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IGNvbmZpbmVkIHRvIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHRhYmxlIG9wZXJhdGlvbnMuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIGFsbCBuZXdseSBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoZS5nLiwgYHN0cnVjdCBpcHRlX3JhbmdlYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlLmcuLCB2aWEgemVyby1hbGxvY2F0aW9uIGFuZCBleHBsaWNpdCBpbml0aWFsaXphdGlvbiBvZiB0aGUgYGNhY2hlYCBhcnJheSB0byBgUFRFX1BPSVNPTmApLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBpcyBwZXJmZWN0bHkgc3VpdGVkIGFuZCBleHBsaWNpdGx5IGVuaGFuY2VkIGJ5IHRoaXMgcGF0Y2ggdG8gY2F0Y2ggYW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNmMxMjY3M2YzNWRkZjJhMTQ3OTExNjRiNWRjZjlkNGMzY2Y1NGMyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMTI6Mzc6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IDg0NDA0ZTY3NzhkNTAuLjc4NDYzMzJkY2QwYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9LY29uZmlnCkBAIC05Nyw2ICYjNDM7OTcsNyBAQCBjb25maWcgUzM5MAogCXNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMCiAJc2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0UKIAlzZWxlY3QgQVJDSF9IQVNfS0NPVgomIzQzOwlzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERQogCXNlbGVjdCBBUkNIX0hBU19NRU1CQVJSSUVSX1NZTkNfQ09SRQogCXNlbGVjdCBBUkNIX0hBU19NRU1fRU5DUllQVAogCXNlbGVjdCBBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sYXp5X21tdS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xhenlfbW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uOTgzNjZlOWRlOWJjMwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sYXp5X21tdS5oCkBAIC0wLDAgJiM0MzsxLDkgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOyNpZm5kZWYgX19MQVpZX01NVV9ICiYjNDM7I2RlZmluZSBfX0xBWllfTU1VX0gKJiM0MzsKJiM0Mzt2b2lkIGxhenlfbW11X29ubGluZV9ib290X2NwdSh2b2lkKTsKJiM0MztpbnQgbGF6eV9tbXVfb25saW5lX2NwdShnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBjcHUpOwomIzQzO3ZvaWQgbGF6eV9tbXVfb2ZmbGluZV9jcHUodW5zaWduZWQgaW50IGNwdSk7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9fTEFaWV9NTVVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmgKaW5kZXggM2IzZWNjNjQ3OTkzZi4uZGJhMjM2NjY0ZGE5MCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oCkBAIC0xNjMsNyAmIzQzOzE2Myw3IEBAIHN0cnVjdCBsb3djb3JlIHsKIAlfX3MzMglwcmVlbXB0X2NvdW50OwkJCS8qIDB4MDNhOCAqLwogCV9fdTMyCXNwaW5sb2NrX2xvY2t2YWw7CQkvKiAweDAzYWMgKi8KIAlfX3UzMglzcGlubG9ja19pbmRleDsJCQkvKiAweDAzYjAgKi8KLQlfX3U4CXBhZF8weDAzYjRbMHgwM2I4LTB4MDNiNF07CS8qIDB4MDNiNCAqLwomIzQzOwlfX3MzMglsYXp5X21tdV9jb3VudDsJCQkvKiAweDAzYjQgKi8KIAlfX3U2NAlwZXJjcHVfb2Zmc2V0OwkJCS8qIDB4MDNiOCAqLwogCV9fdTgJcGVyY3B1X3JlZ2lzdGVyOwkJLyogMHgwM2MwICovCiAJX191OAlwYWRfMHgwM2MxWzB4MDQwMC0weDAzYzFdOwkvKiAweDAzYzEgKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDg1OWNlN2M3ZDQ1NDQuLjFlOGE3OTk4OWVkNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMzksNiAmIzQzOzM5LDY0IEBAIGVudW0gewogCiBleHRlcm4gYXRvbWljX2xvbmdfdCBkaXJlY3RfcGFnZXNfY291bnRbUEdfRElSRUNUX01BUF9NQVhdOwogCiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgaW50ICpyZXMpOwomIzQzO2Jvb2wgX19sYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcyk7CiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcyk7CiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IG9sZF9wdGUsIHB0ZV90IHB0ZSk7CiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTsKJiM0Mztib29sIF9fbGF6eV9tbXVfc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKTsKJiM0Mztib29sIF9fbGF6eV9tbXVfcHRlcF9nZXQocHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpOwomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19sYXp5X21tdV9hY3RpdmUodm9pZCkKJiM0Mzt7CiYjNDM7CWlmIChfX2lzX2RlZmluZWQoX19ERUNPTVBSRVNTT1IpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlpZiAoIWdldF9sb3djb3JlKCktJmd0O2xhenlfbW11X2NvdW50KQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZQomIzQzO2Jvb2wgbGF6eV9tbXVfcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBpbnQgKnJlcykKJiM0Mzt7CiYjNDM7CWlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CXJldHVybiBfX2xhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoYWRkciwgcHRlcCwgcmVzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZQomIzQzO2Jvb2wgbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpCiYjNDM7ewomIzQzOwlpZiAoIWlzX2xhenlfbW11X2FjdGl2ZSgpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlyZXR1cm4gX19sYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIoYWRkciwgcHRlcCwgcmVzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZQomIzQzO2Jvb2wgbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKQomIzQzO3sKJiM0MzsJaWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJcmV0dXJuIF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydChhZGRyLCBwdGVwLCByZXMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7Ym9vbCBsYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLAomIzQzOwkJCQkgICAgICBwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpCiYjNDM7ewomIzQzOwlpZiAoIWlzX2xhenlfbW11X2FjdGl2ZSgpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlyZXR1cm4gX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdChhZGRyLCBwdGVwLCBvbGRfcHRlLCBwdGUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7Ym9vbCBsYXp5X21tdV9wdGVwX3NldF93cnByb3RlY3QodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKJiM0Mzt7CiYjNDM7CWlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CXJldHVybiBfX2xhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdChhZGRyLCBwdGVwKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3BhZ2VfY291bnQoaW50IGxldmVsLCBsb25nIGNvdW50KQogewogCWlmIChJU19FTkFCTEVEKENPTkZJR19QUk9DX0ZTKSkKQEAgLTk3OCwxNyAmIzQzOzEwMzYsMzggQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wbWQocG1kX3QgKnBtZHAsIHBtZF90IHBtZCkKIAlXUklURV9PTkNFKCpwbWRwLCBwbWQpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKIHsKIAlpZiAocHRlX3ByZXNlbnQocHRlKSkKIAkJcHRlID0gY2xlYXJfcHRlX2JpdChwdGUsIF9fcGdwcm90KF9QQUdFX1VOVVNFRCkpOwogCVdSSVRFX09OQ0UoKnB0ZXAsIHB0ZSk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQomIzQzO3sKJiM0MzsJaWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSB8fCAhX19sYXp5X21tdV9zZXRfcHRlKHB0ZXAsIHB0ZSkpCiYjNDM7CQlfX3NldF9wdGUocHRlcCwgcHRlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBwdGVwX2dldF9sb2NrbGVzcyBwdGVwX2dldF9sb2NrbGVzcwomIzQzO3N0YXRpYyBpbmxpbmUgX19ub19zYW5pdGl6ZV9hZGRyZXNzIHB0ZV90IHB0ZXBfZ2V0X2xvY2tsZXNzKHB0ZV90ICpwdGVwKQomIzQzO3sKJiM0MzsJcmV0dXJuIFJFQURfT05DRSgqcHRlcCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgcHRlX3QgX19wdGVwX2dldChwdGVfdCAqcHRlcCkKJiM0Mzt7CiYjNDM7CXJldHVybiBSRUFEX09OQ0UoKnB0ZXApOwomIzQzO30KJiM0MzsKICNkZWZpbmUgcHRlcF9nZXQgcHRlcF9nZXQKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9nZXQocHRlX3QgKnB0ZXApCiB7Ci0JcmV0dXJuIFJFQURfT05DRSgqcHRlcCk7CiYjNDM7CXB0ZV90IHJlczsKJiM0MzsKJiM0MzsJaWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSB8fCAhX19sYXp5X21tdV9wdGVwX2dldChwdGVwLCAmYW1wO3JlcykpCiYjNDM7CQlyZXMgPSBfX3B0ZXBfZ2V0KHB0ZXApOwomIzQzOwlyZXR1cm4gcmVzOwogfQogCiAjZGVmaW5lIHBtZHBfZ2V0IHBtZHBfZ2V0CkBAIC0xMTgxLDYgJiM0MzsxMjYwLDE1IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3B0ZXBfaXB0ZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCBuciwKIAl9IHdoaWxlIChuciAhPSAyNTUpOwogfQogCiYjNDM7dm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJCQkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKJiM0MzsJCQkJCXB0ZV90ICpwdGUpOwomIzQzOyNkZWZpbmUgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcyBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzCiYjNDM7CiYjNDM7dm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGUodm9pZCk7CiYjNDM7dm9pZCBhcmNoX2xlYXZlX2xhenlfbW11X21vZGUodm9pZCk7CiYjNDM7dm9pZCBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUodm9pZCk7CiYjNDM7CiAvKgogICogVGhpcyBpcyBoYXJkIHRvIHVuZGVyc3RhbmQuIHB0ZXBfZ2V0X2FuZF9jbGVhciBhbmQgcHRlcF9jbGVhcl9mbHVzaAogICogYm90aCBjbGVhciB0aGUgVExCIGZvciB0aGUgdW5tYXBwZWQgcHRlLiBUaGUgcmVhc29uIGlzIHRoYXQKQEAgLTEyMDEsMTAgJiM0MzsxMjg5LDE2IEBAIHB0ZV90IHB0ZXBfeGNoZ19sYXp5KHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKiwgcHRlX3QpOwogc3RhdGljIGlubGluZSBib29sIHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCXVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCiB7Ci0JcHRlX3QgcHRlID0gcHRlcF9nZXQocHRlcCk7CiYjNDM7CXB0ZV90IHB0ZTsKJiM0MzsJaW50IHJlczsKIAotCXB0ZSA9IHB0ZXBfeGNoZ19kaXJlY3Qodm1hLSZndDt2bV9tbSwgYWRkciwgcHRlcCwgcHRlX21rb2xkKHB0ZSkpOwotCXJldHVybiBwdGVfeW91bmcocHRlKTsKJiM0MzsJaWYgKCFsYXp5X21tdV9wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKGFkZHIsIHB0ZXAsICZhbXA7cmVzKSkgewomIzQzOwkJcHRlID0gX19wdGVwX2dldChwdGVwKTsKJiM0MzsJCXB0ZSA9IHB0ZV9ta29sZChwdGUpOwomIzQzOwkJcHRlID0gcHRlcF94Y2hnX2RpcmVjdCh2bWEtJmd0O3ZtX21tLCBhZGRyLCBwdGVwLCBwdGUpOwomIzQzOwkJcmVzID0gcHRlX3lvdW5nKHB0ZSk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHJlczsKIH0KIAogI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSX1lPVU5HX0ZMVVNICkBAIC0xMjIwLDcgJiM0MzsxMzE0LDggQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiB7CiAJcHRlX3QgcmVzOwogCi0JcmVzID0gcHRlcF94Y2hnX2xhenkobW0sIGFkZHIsIHB0ZXAsIF9fcHRlKF9QQUdFX0lOVkFMSUQpKTsKJiM0MzsJaWYgKCFsYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIoYWRkciwgcHRlcCwgJmFtcDtyZXMpKQomIzQzOwkJcmVzID0gcHRlcF94Y2hnX2xhenkobW0sIGFkZHIsIHB0ZXAsIF9fcHRlKF9QQUdFX0lOVkFMSUQpKTsKIAlwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcihtbSwgYWRkciwgcmVzKTsKIAkvKiBBdCB0aGlzIHBvaW50IHRoZSByZWZlcmVuY2UgdGhyb3VnaCB0aGUgbWFwcGluZyBpcyBzdGlsbCBwcmVzZW50ICovCiAJaWYgKG1tX2lzX3Byb3RlY3RlZChtbSkgJmFtcDsmYW1wOyBwdGVfcHJlc2VudChyZXMpKQpAQCAtMTIyOSw5ICYjNDM7MTMyNCwyOCBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIH0KIAogI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX01PRElGWV9QUk9UX1RSQU5TQUNUSU9OCi1wdGVfdCBwdGVwX21vZGlmeV9wcm90X3N0YXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBwdGVfdCAqKTsKLXZvaWQgcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsCi0JCQkgICAgIHB0ZV90ICosIHB0ZV90LCBwdGVfdCk7CiYjNDM7cHRlX3QgX19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKik7CiYjNDM7dm9pZCBfX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywKJiM0MzsJCQkJcHRlX3QgKiwgcHRlX3QsIHB0ZV90KTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7cHRlX3QgcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKJiM0MzsJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCiYjNDM7ewomIzQzOwlwdGVfdCByZXM7CiYjNDM7CiYjNDM7CWlmICghbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydChhZGRyLCBwdGVwLCAmYW1wO3JlcykpCiYjNDM7CQlyZXMgPSBfX19wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHZtYSwgYWRkciwgcHRlcCk7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUKJiM0Mzt2b2lkIHB0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJICAgICBwdGVfdCAqcHRlcCwgcHRlX3Qgb2xkX3B0ZSwgcHRlX3QgcHRlKQomIzQzO3sKJiM0MzsJaWYgKCFsYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdChhZGRyLCBwdGVwLCBvbGRfcHRlLCBwdGUpKQomIzQzOwkJX19fcHRlcF9tb2RpZnlfcHJvdF9jb21taXQodm1hLCBhZGRyLCBwdGVwLCBvbGRfcHRlLCBwdGUpOwomIzQzO30KIAogI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSX0ZMVVNICiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCkBAIC0xMjYxLDExICYjNDM7MTM3NSwxMyBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogewogCXB0ZV90IHJlczsKIAotCWlmIChmdWxsKSB7Ci0JCXJlcyA9IHB0ZXBfZ2V0KHB0ZXApOwotCQlzZXRfcHRlKHB0ZXAsIF9fcHRlKF9QQUdFX0lOVkFMSUQpKTsKLQl9IGVsc2UgewotCQlyZXMgPSBwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpOwomIzQzOwlpZiAoIWxhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcihhZGRyLCBwdGVwLCAmYW1wO3JlcykpIHsKJiM0MzsJCWlmIChmdWxsKSB7CiYjNDM7CQkJcmVzID0gX19wdGVwX2dldChwdGVwKTsKJiM0MzsJCQlfX3NldF9wdGUocHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlyZXMgPSBwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpOwomIzQzOwkJfQogCX0KIAlwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcihtbSwgYWRkciwgcmVzKTsKIAkvKiBBdCB0aGlzIHBvaW50IHRoZSByZWZlcmVuY2UgdGhyb3VnaCB0aGUgbWFwcGluZyBpcyBzdGlsbCBwcmVzZW50ICovCkBAIC0xMjkxLDEwICYjNDM7MTQwNywxNSBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogc3RhdGljIGlubGluZSB2b2lkIHB0ZXBfc2V0X3dycHJvdGVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQogewotCXB0ZV90IHB0ZSA9IHB0ZXBfZ2V0KHB0ZXApOwomIzQzOwlwdGVfdCBwdGU7CiAKLQlpZiAocHRlX3dyaXRlKHB0ZSkpCi0JCXB0ZXBfeGNoZ19sYXp5KG1tLCBhZGRyLCBwdGVwLCBwdGVfd3Jwcm90ZWN0KHB0ZSkpOwomIzQzOwlpZiAoIWxhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdChhZGRyLCBwdGVwKSkgewomIzQzOwkJcHRlID0gX19wdGVwX2dldChwdGVwKTsKJiM0MzsJCWlmIChwdGVfd3JpdGUocHRlKSkgewomIzQzOwkJCXB0ZSA9IHB0ZV93cnByb3RlY3QocHRlKTsKJiM0MzsJCQlwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgcHRlKTsKJiM0MzsJCX0KJiM0MzsJfQogfQogCiAvKgpAQCAtMTMyNyw3ICYjNDM7MTQ0OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfZml4X3NwdXJpb3VzX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCSAqIFBURSBkb2VzIG5vdCBoYXZlIF9QQUdFX1BST1RFQ1Qgc2V0LCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBvdmVyaGVhZC4KIAkgKiBBIGxvY2FsIFJEUCBjYW4gYmUgdXNlZCB0byBkbyB0aGUgZmx1c2guCiAJICovCi0JaWYgKGNwdV9oYXNfcmRwKCkgJmFtcDsmYW1wOyAhKHB0ZV92YWwocHRlcF9nZXQocHRlcCkpICZhbXA7IF9QQUdFX1BST1RFQ1QpKQomIzQzOwlpZiAoY3B1X2hhc19yZHAoKSAmYW1wOyZhbXA7ICEocHRlX3ZhbChfX3B0ZXBfZ2V0KHB0ZXApKSAmYW1wOyBfUEFHRV9QUk9URUNUKSkKIAkJX19wdGVwX3JkcChhZGRyZXNzLCBwdGVwLCAxKTsKIH0KICNkZWZpbmUgZmx1c2hfdGxiX2ZpeF9zcHVyaW91c19mYXVsdCBmbHVzaF90bGJfZml4X3NwdXJpb3VzX2ZhdWx0CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKaW5kZXggYjYwMjg0MzI4ZmUzZC4uZjVhM2M5ZTFiNmI4OCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwpAQCAtNzcsNiAmIzQzOzc3LDcgQEAKICNpbmNsdWRlICZsdDthc20vbWFjY2Vzcy5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS91di5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9hc20tb2Zmc2V0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vbGF6eV9tbXUuaCZndDsKICNpbmNsdWRlICYjMzQ7ZW50cnkuaCYjMzQ7CiAKIC8qCkBAIC0xMDEyLDUgJiM0MzsxMDEzLDYgQEAgdm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKQogCiB2b2lkIF9faW5pdCBhcmNoX2NwdV9maW5hbGl6ZV9pbml0KHZvaWQpCiB7CiYjNDM7CWxhenlfbW11X29ubGluZV9ib290X2NwdSgpOwogCXNjbHBfaW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKaW5kZXggMGJhN2Y4OWI4MTYxMS4uMGE4MjZiYmFmMWRkYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCkBAIC01OSw2ICYjNDM7NTksNyBAQAogI2luY2x1ZGUgJmx0O2FzbS90b3BvbG9neS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS92ZHNvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL21hY2Nlc3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2xhenlfbW11LmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2VudHJ5LmgmIzM0OwogCiBlbnVtIHsKQEAgLTg2Niw2ICYjNDM7ODY3LDExIEBAIGludCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRpZGxlKQogCXJjID0gcGNwdV9hbGxvY19sb3djb3JlKHBjcHUsIGNwdSk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiYjNDM7CXJjID0gbGF6eV9tbXVfb25saW5lX2NwdShHRlBfS0VSTkVMLCBjcHUpOwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCXBjcHVfZnJlZV9sb3djb3JlKHBjcHUsIGNwdSk7CiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CX0KIAkvKgogCSAqIE1ha2Ugc3VyZSBnbG9iYWwgY29udHJvbCByZWdpc3RlciBjb250ZW50cyBkbyBub3QgY2hhbmdlCiAJICogdW50aWwgbmV3IENQVSBoYXMgaW5pdGlhbGl6ZWQgY29udHJvbCByZWdpc3RlcnMuCkBAIC05MjEsNiAmIzQzOzkyNyw3IEBAIHZvaWQgX19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCiAJcGNwdSA9IHBlcl9jcHVfcHRyKCZhbXA7cGNwdV9kZXZpY2VzLCBjcHUpOwogCXdoaWxlICghcGNwdV9zdG9wcGVkKHBjcHUpKQogCQljcHVfcmVsYXgoKTsKJiM0MzsJbGF6eV9tbXVfb2ZmbGluZV9jcHUoY3B1KTsKIAlwY3B1X2ZyZWVfbG93Y29yZShwY3B1LCBjcHUpOwogCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbW1fY3B1bWFzaygmYW1wO2luaXRfbW0pKTsKIAljcHVtYXNrX2NsZWFyX2NwdShjcHUsICZhbXA7aW5pdF9tbS5jb250ZXh0LmNwdV9hdHRhY2hfbWFzayk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vTWFrZWZpbGUgYi9hcmNoL3MzOTAvbW0vTWFrZWZpbGUKaW5kZXggMTkzODk5YzM5Y2E3Zi4uOTZjYWMzZTk5ZjUxNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9NYWtlZmlsZQpAQCAtNCw2ICYjNDM7NCw3IEBACiAjCiAKIG9iai15CQk6PSBpbml0Lm8gZmF1bHQubyBleHRtZW0ubyBtbWFwLm8gdm1lbS5vIG1hY2Nlc3MubwomIzQzO29iai15CQk6PSBpbml0Lm8gZmF1bHQubyBleHRtZW0ubyBtbWFwLm8gdm1lbS5vIG1hY2Nlc3MubyBsYXp5X21tdS5vCiBvYmoteQkJJiM0Mzs9IHBhZ2Utc3RhdGVzLm8gcGFnZWF0dHIubyBwZ3RhYmxlLm8gcGdhbGxvYy5vIGV4dGFibGUubwogCiBvYmotJChDT05GSUdfQ01NKQkJJiM0Mzs9IGNtbS5vCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYyBiL2FyY2gvczM5MC9tbS9sYXp5X21tdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjdlM2E0MTE1ZWEwNDgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYwpAQCAtMCwwICYjNDM7MSw0MTggQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wZ3RhYmxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2thc2FuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2ZhY2lsaXR5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9sYXp5X21tdS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtrdW5pdC92aXNpYmlsaXR5LmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBQVEVfUE9JU09OCV9QQUdFX0xBUkdFCiYjNDM7CiYjNDM7c3RydWN0IGlwdGVfcmFuZ2UgewomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKJiM0MzsJdW5zaWduZWQgbG9uZyBiYXNlX2FkZHI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYmFzZV9lbmQ7CiYjNDM7CXB0ZV90ICpiYXNlX3B0ZTsKJiM0MzsJcHRlX3QgKnN0YXJ0X3B0ZTsKJiM0MzsJcHRlX3QgKmVuZF9wdGU7CiYjNDM7CXB0ZV90IGNhY2hlW1BUUlNfUEVSX1BURV07CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGlwdGVfcmFuZ2UgKiwgaXB0ZV9yYW5nZSk7CiYjNDM7CiYjNDM7c3RhdGljIGludCBjb3VudF9jb250aWd1b3VzKHB0ZV90ICpzdGFydCwgcHRlX3QgKmVuZCwgYm9vbCAqdmFsaWQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHBhZ2VfaW52YWxpZF9iaXQ7CiYjNDM7CXB0ZV90ICpwdGVwLCBwdGU7CiYjNDM7CiYjNDM7CXB0ZSA9IF9fcHRlcF9nZXQoc3RhcnQpOwomIzQzOwlwYWdlX2ludmFsaWRfYml0ID0gcHRlX3ZhbChwdGUpICZhbXA7IF9QQUdFX0lOVkFMSUQ7CiYjNDM7CiYjNDM7CWZvciAocHRlcCA9IHN0YXJ0ICYjNDM7IDE7IHB0ZXAgJmx0OyBlbmQ7IHB0ZXAmIzQzOyYjNDM7KSB7CiYjNDM7CQlwdGUgPSBfX3B0ZXBfZ2V0KHB0ZXApOwomIzQzOwkJaWYgKChwdGVfdmFsKHB0ZSkgJmFtcDsgX1BBR0VfSU5WQUxJRCkgIT0gcGFnZV9pbnZhbGlkX2JpdCkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwkqdmFsaWQgPSAhKHBhZ2VfaW52YWxpZF9iaXQpOwomIzQzOwlyZXR1cm4gcHRlcCAtIHN0YXJ0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX2ludmFsaWRhdGVfcHRlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJCSAgIGludCBucl9wdGVzLCBwdGVfdCAqcHRlcCkKJiM0Mzt7CiYjNDM7CWF0b21pY19pbmMoJmFtcDttbS0mZ3Q7Y29udGV4dC5mbHVzaF9jb3VudCk7CiYjNDM7CWlmIChjcHVfaGFzX3RsYl9sYygpICZhbXA7JmFtcDsgY3B1bWFza19lcXVhbChtbV9jcHVtYXNrKG1tKSwgY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKSkKJiM0MzsJCV9fcHRlcF9pcHRlX3JhbmdlKGFkZHIsIG5yX3B0ZXMgLSAxLCBwdGVwLCBJUFRFX0xPQ0FMKTsKJiM0MzsJZWxzZQomIzQzOwkJX19wdGVwX2lwdGVfcmFuZ2UoYWRkciwgbnJfcHRlcyAtIDEsIHB0ZXAsIElQVEVfR0xPQkFMKTsKJiM0MzsJYXRvbWljX2RlYygmYW1wO21tLSZndDtjb250ZXh0LmZsdXNoX2NvdW50KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpbnZhbGlkYXRlX3B0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCQlwdGVfdCAqc3RhcnQsIHB0ZV90ICplbmQpCiYjNDM7ewomIzQzOwlpbnQgbnJfcHRlczsKJiM0MzsJYm9vbCB2YWxpZDsKJiM0MzsKJiM0MzsJbnJfcHRlcyA9IGNvdW50X2NvbnRpZ3VvdXMoc3RhcnQsIGVuZCwgJmFtcDt2YWxpZCk7CiYjNDM7CWlmICh2YWxpZCkKJiM0MzsJCV9faW52YWxpZGF0ZV9wdGVfcmFuZ2UobW0sIGFkZHIsIG5yX3B0ZXMsIHN0YXJ0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIG5yX3B0ZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldF9wdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCQkgIHB0ZV90ICpzdGFydCwgcHRlX3QgKmVuZCwgcHRlX3QgKmNhY2hlKQomIzQzO3sKJiM0MzsJaW50IG5yX3B0ZXMsIG5yX3RvdGFsID0gZW5kIC0gc3RhcnQ7CiYjNDM7CXB0ZV90ICpwdGVwID0gc3RhcnQ7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlrYXNhbl91bnBvaXNvbl9wdGUoc3RhcnQsIG5yX3RvdGFsKTsKJiM0MzsJd2hpbGUgKHB0ZXAgJmx0OyBlbmQpIHsKJiM0MzsJCW5yX3B0ZXMgPSBpbnZhbGlkYXRlX3B0ZV9yYW5nZShtbSwgYWRkciwgcHRlcCwgZW5kKTsKJiM0MzsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBucl9wdGVzOyBpJiM0MzsmIzQzOywgcHRlcCYjNDM7JiM0MzssIGNhY2hlJiM0MzsmIzQzOykgewomIzQzOwkJCV9fc2V0X3B0ZShwdGVwLCAqY2FjaGUpOwomIzQzOwkJCSpjYWNoZSA9IF9fcHRlKFBURV9QT0lTT04pOwomIzQzOwkJfQomIzQzOwomIzQzOwkJYWRkciAmIzQzOz0gbnJfcHRlcyAqIFBBR0VfU0laRTsKJiM0MzsJfQomIzQzOwlrYXNhbl9wb2lzb25fcHRlKHN0YXJ0LCBucl90b3RhbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVudGVyX2lwdGVfbm9yYW5nZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGlwdGVfcmFuZ2UgX19tYXliZV91bnVzZWQgKnJhbmdlOwomIzQzOwomIzQzOwlpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlsb2NhbF9iaF9kaXNhYmxlKCk7CiYjNDM7CiYjNDM7CXJhbmdlID0gZ2V0X2NwdV92YXIoaXB0ZV9yYW5nZSk7CiYjNDM7CWdldF9sb3djb3JlKCktJmd0O2xhenlfbW11X2NvdW50JiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVudGVyX2lwdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiYjNDM7CQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBwdGVfdCAqcHRlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlOwomIzQzOwl1bnNpZ25lZCBpbnQgbnJfcHRlczsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2ZhY2lsaXR5KDEzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbG9jYWxfYmhfZGlzYWJsZSgpOwomIzQzOwomIzQzOwlyYW5nZSA9IGdldF9jcHVfdmFyKGlwdGVfcmFuZ2UpOwomIzQzOwlnZXRfbG93Y29yZSgpLSZndDtsYXp5X21tdV9jb3VudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CWlmIChtbV9pc19wcm90ZWN0ZWQobW0pKSB7CiYjNDM7CQlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlyYW5nZS0mZ3Q7bW0gPSBtbTsKJiM0MzsJcmFuZ2UtJmd0O2Jhc2VfYWRkciA9IGFkZHI7CiYjNDM7CXJhbmdlLSZndDtiYXNlX2VuZCA9IGVuZDsKJiM0MzsJcmFuZ2UtJmd0O2Jhc2VfcHRlID0gcHRlOwomIzQzOwomIzQzOwlucl9wdGVzID0gKHJhbmdlLSZndDtiYXNlX2VuZCAtIHJhbmdlLSZndDtiYXNlX2FkZHIpIC8gUEFHRV9TSVpFOwomIzQzOwlrYXNhbl9wb2lzb25fcHRlKHJhbmdlLSZndDtiYXNlX3B0ZSwgbnJfcHRlcyk7CiYjNDM7CiYjNDM7CWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBsZWF2ZV9pcHRlX3JhbmdlKHZvaWQpCiYjNDM7ewomIzQzOwlwdGVfdCAqcHRlcCwgKnN0YXJ0LCAqc3RhcnRfY2FjaGUsICpjYWNoZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyLCBhZGRyOwomIzQzOwlzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7CiYjNDM7CXVuc2lnbmVkIGludCBucl9wdGVzOwomIzQzOwlpbnQgc3RhcnRfaWR4OwomIzQzOwomIzQzOwlpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlsb2NhbF9iaF9kaXNhYmxlKCk7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X3ByZWVtcHRpb25fZGlzYWJsZWQoKTsKJiM0MzsJcmFuZ2UgPSB0aGlzX2NwdV9yZWFkKGlwdGVfcmFuZ2UpOwomIzQzOwlpZiAoIXJhbmdlLSZndDttbSkKJiM0MzsJCWdvdG8gbm9yYW5nZTsKJiM0MzsJaWYgKCFyYW5nZS0mZ3Q7c3RhcnRfcHRlKQomIzQzOwkJZ290byBkb25lOwomIzQzOwomIzQzOwlzdGFydCA9IHJhbmdlLSZndDtzdGFydF9wdGU7CiYjNDM7CXN0YXJ0X2lkeCA9IHJhbmdlLSZndDtzdGFydF9wdGUgLSByYW5nZS0mZ3Q7YmFzZV9wdGU7CiYjNDM7CXN0YXJ0X2FkZHIgPSByYW5nZS0mZ3Q7YmFzZV9hZGRyICYjNDM7IHN0YXJ0X2lkeCAqIFBBR0VfU0laRTsKJiM0MzsJYWRkciA9IHN0YXJ0X2FkZHI7CiYjNDM7CXN0YXJ0X2NhY2hlID0gJmFtcDtyYW5nZS0mZ3Q7Y2FjaGVbc3RhcnRfaWR4XTsKJiM0MzsJY2FjaGUgPSBzdGFydF9jYWNoZTsKJiM0MzsJZm9yIChwdGVwID0gc3RhcnQ7IHB0ZXAgJmx0OyByYW5nZS0mZ3Q7ZW5kX3B0ZTsgcHRlcCYjNDM7JiM0MzssIGNhY2hlJiM0MzsmIzQzOywgYWRkciAmIzQzOz0gUEFHRV9TSVpFKSB7CiYjNDM7CQlpZiAocHRlX3ZhbCgqY2FjaGUpID09IFBURV9QT0lTT04pIHsKJiM0MzsJCQlpZiAoc3RhcnQpIHsKJiM0MzsJCQkJc2V0X3B0ZV9yYW5nZShyYW5nZS0mZ3Q7bW0sIHN0YXJ0X2FkZHIsIHN0YXJ0LCBwdGVwLCBzdGFydF9jYWNoZSk7CiYjNDM7CQkJCXN0YXJ0ID0gTlVMTDsKJiM0MzsJCQl9CiYjNDM7CQl9IGVsc2UgaWYgKCFzdGFydCkgewomIzQzOwkJCXN0YXJ0ID0gcHRlcDsKJiM0MzsJCQlzdGFydF9hZGRyID0gYWRkcjsKJiM0MzsJCQlzdGFydF9jYWNoZSA9IGNhY2hlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXNldF9wdGVfcmFuZ2UocmFuZ2UtJmd0O21tLCBzdGFydF9hZGRyLCBzdGFydCwgcHRlcCwgc3RhcnRfY2FjaGUpOwomIzQzOwomIzQzOwlyYW5nZS0mZ3Q7c3RhcnRfcHRlID0gTlVMTDsKJiM0MzsJcmFuZ2UtJmd0O2VuZF9wdGUgPSBOVUxMOwomIzQzOwomIzQzO2RvbmU6CiYjNDM7CW5yX3B0ZXMgPSAocmFuZ2UtJmd0O2Jhc2VfZW5kIC0gcmFuZ2UtJmd0O2Jhc2VfYWRkcikgLyBQQUdFX1NJWkU7CiYjNDM7CWthc2FuX3VucG9pc29uX3B0ZShyYW5nZS0mZ3Q7YmFzZV9wdGUsIG5yX3B0ZXMpOwomIzQzOwomIzQzOwlyYW5nZS0mZ3Q7bW0gPSBOVUxMOwomIzQzOwlyYW5nZS0mZ3Q7YmFzZV9hZGRyID0gMDsKJiM0MzsJcmFuZ2UtJmd0O2Jhc2VfZW5kID0gMDsKJiM0MzsJcmFuZ2UtJmd0O2Jhc2VfcHRlID0gTlVMTDsKJiM0MzsKJiM0Mztub3JhbmdlOgomIzQzOwlnZXRfbG93Y29yZSgpLSZndDtsYXp5X21tdV9jb3VudC0tOwomIzQzOwlwdXRfY3B1X3ZhcihpcHRlX3JhbmdlKTsKJiM0MzsKJiM0MzsJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGZsdXNoX2xhenlfbW11X21vZGUodm9pZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWRkciwgZW5kOwomIzQzOwlzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwomIzQzOwlwdGVfdCAqcHRlOwomIzQzOwomIzQzOwlpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlyYW5nZSA9IGdldF9jcHVfdmFyKGlwdGVfcmFuZ2UpOwomIzQzOwlpZiAocmFuZ2UtJmd0O21tKSB7CiYjNDM7CQltbSA9IHJhbmdlLSZndDttbTsKJiM0MzsJCWFkZHIgPSByYW5nZS0mZ3Q7YmFzZV9hZGRyOwomIzQzOwkJZW5kID0gcmFuZ2UtJmd0O2Jhc2VfZW5kOwomIzQzOwkJcHRlID0gcmFuZ2UtJmd0O2Jhc2VfcHRlOwomIzQzOwomIzQzOwkJbGVhdmVfaXB0ZV9yYW5nZSgpOwomIzQzOwkJZW50ZXJfaXB0ZV9yYW5nZShtbSwgYWRkciwgZW5kLCBwdGUpOwomIzQzOwl9CiYjNDM7CXB1dF9jcHVfdmFyKGlwdGVfcmFuZ2UpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSh2b2lkKQomIzQzO3sKJiM0MzsJZW50ZXJfaXB0ZV9ub3JhbmdlKCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfSUZfS1VOSVQoYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKTsKJiM0MzsKJiM0Mzt2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiYjNDM7CQkJCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAomIzQzOwkJCQkJcHRlX3QgKnB0ZSkKJiM0Mzt7CiYjNDM7CWVudGVyX2lwdGVfcmFuZ2UobW0sIGFkZHIsIGVuZCwgcHRlKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9JRl9LVU5JVChhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKTsKJiM0MzsKJiM0Mzt2b2lkIGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSh2b2lkKQomIzQzO3sKJiM0MzsJbGVhdmVfaXB0ZV9yYW5nZSgpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSk7CiYjNDM7CiYjNDM7dm9pZCBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUodm9pZCkKJiM0Mzt7CiYjNDM7CWZsdXNoX2xhenlfbW11X21vZGUoKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9JRl9LVU5JVChhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUpOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9faXB0ZV9yYW5nZV9zZXRfcHRlKHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZSwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpZHggPSBwdGVwIC0gcmFuZ2UtJmd0O2Jhc2VfcHRlOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9wcmVlbXB0aW9uX2Rpc2FibGVkKCk7CiYjNDM7CXJhbmdlLSZndDtjYWNoZVtpZHhdID0gcHRlOwomIzQzOwomIzQzOwlpZiAoIXJhbmdlLSZndDtzdGFydF9wdGUpIHsKJiM0MzsJCXJhbmdlLSZndDtzdGFydF9wdGUgPSBwdGVwOwomIzQzOwkJcmFuZ2UtJmd0O2VuZF9wdGUgPSBwdGVwICYjNDM7IDE7CiYjNDM7CX0gZWxzZSBpZiAocHRlcCAmbHQ7IHJhbmdlLSZndDtzdGFydF9wdGUpIHsKJiM0MzsJCXJhbmdlLSZndDtzdGFydF9wdGUgPSBwdGVwOwomIzQzOwl9IGVsc2UgaWYgKHB0ZXAgJiM0MzsgMSAmZ3Q7IHJhbmdlLSZndDtlbmRfcHRlKSB7CiYjNDM7CQlyYW5nZS0mZ3Q7ZW5kX3B0ZSA9IHB0ZXAgJiM0MzsgMTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgcHRlX3QgX19pcHRlX3JhbmdlX3B0ZXBfZ2V0KHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZSwgcHRlX3QgKnB0ZXApCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgaWR4ID0gcHRlcCAtIHJhbmdlLSZndDtiYXNlX3B0ZTsKJiM0MzsJcHRlX3QgcHRlOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9wcmVlbXB0aW9uX2Rpc2FibGVkKCk7CiYjNDM7CWlmIChwdGVfdmFsKHJhbmdlLSZndDtjYWNoZVtpZHhdKSA9PSBQVEVfUE9JU09OKSB7CiYjNDM7CQlrYXNhbl91bnBvaXNvbl9wdGUocHRlcCwgMSk7CiYjNDM7CQlwdGUgPSBfX3B0ZXBfZ2V0KHB0ZXApOwomIzQzOwkJa2FzYW5fcG9pc29uX3B0ZShwdGVwLCAxKTsKJiM0MzsKJiM0MzsJCXJldHVybiBwdGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJhbmdlLSZndDtjYWNoZVtpZHhdOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGlwdGVfcmFuZ2UgKnRoaXNfaXB0ZV9yYW5nZShwdGVfdCAqcHRlcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTsKJiM0MzsJdW5zaWduZWQgaW50IG5yX3B0ZXM7CiYjNDM7CiYjNDM7CXJhbmdlID0gdGhpc19jcHVfcmVhZChpcHRlX3JhbmdlKTsKJiM0MzsJaWYgKHB0ZXAgJmx0OyByYW5nZS0mZ3Q7YmFzZV9wdGUpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJbnJfcHRlcyA9IChyYW5nZS0mZ3Q7YmFzZV9lbmQgLSByYW5nZS0mZ3Q7YmFzZV9hZGRyKSAvIFBBR0VfU0laRTsKJiM0MzsJaWYgKHB0ZXAgJmd0Oz0gcmFuZ2UtJmd0O2Jhc2VfcHRlICYjNDM7IG5yX3B0ZXMpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHJhbmdlOwomIzQzO30KJiM0MzsKJiM0Mztib29sIF9fbGF6eV9tbXVfc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlOwomIzQzOwomIzQzOwlyYW5nZSA9IHRoaXNfaXB0ZV9yYW5nZShwdGVwKTsKJiM0MzsJaWYgKCFyYW5nZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJX19pcHRlX3JhbmdlX3NldF9wdGUocmFuZ2UsIHB0ZXAsIHB0ZSk7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0Mztib29sIF9fbGF6eV9tbXVfcHRlcF9nZXQocHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7CiYjNDM7CiYjNDM7CXJhbmdlID0gdGhpc19pcHRlX3JhbmdlKHB0ZXApOwomIzQzOwlpZiAoIXJhbmdlKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkqcmVzID0gX19pcHRlX3JhbmdlX3B0ZXBfZ2V0KHJhbmdlLCBwdGVwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgX19sYXp5X21tdV9wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIGludCAqcmVzKQomIzQzO3sKJiM0MzsJc3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlOwomIzQzOwlwdGVfdCBwdGUsIG9sZDsKJiM0MzsKJiM0MzsJcmFuZ2UgPSB0aGlzX2lwdGVfcmFuZ2UocHRlcCk7CiYjNDM7CWlmICghcmFuZ2UpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW9sZCA9IF9faXB0ZV9yYW5nZV9wdGVwX2dldChyYW5nZSwgcHRlcCk7CiYjNDM7CXB0ZSA9IHB0ZV9ta29sZChvbGQpOwomIzQzOwlfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTsKJiM0MzsJKnJlcyA9IHB0ZV95b3VuZyhvbGQpOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcih1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKQomIzQzO3sKJiM0MzsJc3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlOwomIzQzOwlwdGVfdCBwdGUsIG9sZDsKJiM0MzsKJiM0MzsJcmFuZ2UgPSB0aGlzX2lwdGVfcmFuZ2UocHRlcCk7CiYjNDM7CWlmICghcmFuZ2UpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW9sZCA9IF9faXB0ZV9yYW5nZV9wdGVwX2dldChyYW5nZSwgcHRlcCk7CiYjNDM7CXB0ZSA9IF9fcHRlKF9QQUdFX0lOVkFMSUQpOwomIzQzOwlfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTsKJiM0MzsJKnJlcyA9IG9sZDsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19sYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIoYWRkciwgcHRlcCwgcmVzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsCiYjNDM7CQkJCQlwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7CiYjNDM7CiYjNDM7CXJhbmdlID0gdGhpc19pcHRlX3JhbmdlKHB0ZXApOwomIzQzOwlpZiAoIXJhbmdlKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgX19sYXp5X21tdV9wdGVwX3NldF93cnByb3RlY3QodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTsKJiM0MzsJcHRlX3QgcHRlOwomIzQzOwomIzQzOwlyYW5nZSA9IHRoaXNfaXB0ZV9yYW5nZShwdGVwKTsKJiM0MzsJaWYgKCFyYW5nZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcHRlID0gX19pcHRlX3JhbmdlX3B0ZXBfZ2V0KHJhbmdlLCBwdGVwKTsKJiM0MzsJaWYgKHB0ZV93cml0ZShwdGUpKSB7CiYjNDM7CQlwdGUgPSBwdGVfd3Jwcm90ZWN0KHB0ZSk7CiYjNDM7CQlfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGxhenlfbW11X29ubGluZV9jcHUoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgY3B1KQomIzQzO3sKJiM0MzsJc3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2ZhY2lsaXR5KDEzKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyYW5nZSA9IGt6YWxsb2Nfb2JqKCpyYW5nZSwgZ2ZwKTsKJiM0MzsJaWYgKCFyYW5nZSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShyYW5nZS0mZ3Q7Y2FjaGUpOyBpJiM0MzsmIzQzOykKJiM0MzsJCXJhbmdlLSZndDtjYWNoZVtpXSA9IF9fcHRlKFBURV9QT0lTT04pOwomIzQzOwlwZXJfY3B1KGlwdGVfcmFuZ2UsIGNwdSkgPSByYW5nZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbGF6eV9tbXVfb2ZmbGluZV9jcHUodW5zaWduZWQgaW50IGNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2ZhY2lsaXR5KDEzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcmFuZ2UgPSBwZXJfY3B1KGlwdGVfcmFuZ2UsIGNwdSk7CiYjNDM7CXBlcl9jcHUoaXB0ZV9yYW5nZSwgY3B1KSA9IE5VTEw7CiYjNDM7CWtmcmVlKHJhbmdlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX2luaXQgbGF6eV9tbXVfb25saW5lX2Jvb3RfY3B1KHZvaWQpCiYjNDM7ewomIzQzOwlsYXp5X21tdV9vbmxpbmVfY3B1KEdGUF9BVE9NSUMsIDApOwomIzQzO30KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCmluZGV4IDRhY2Q4YjE0MGM0YmQuLmRmMzY1MjNiY2JiYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL21tL3BndGFibGUuYwpAQCAtMTY2LDE0ICYjNDM7MTY2LDE0IEBAIHB0ZV90IHB0ZXBfeGNoZ19sYXp5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiB9CiBFWFBPUlRfU1lNQk9MKHB0ZXBfeGNoZ19sYXp5KTsKIAotcHRlX3QgcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgICBwdGVfdCAqcHRlcCkKJiM0MztwdGVfdCBfX19wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJCXB0ZV90ICpwdGVwKQogewogCXJldHVybiBwdGVwX2ZsdXNoX2xhenkodm1hLSZndDt2bV9tbSwgYWRkciwgcHRlcCwgMSk7CiB9CiAKLXZvaWQgcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IG9sZF9wdGUsIHB0ZV90IHB0ZSkKJiM0Mzt2b2lkIF9fX3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJCXB0ZV90ICpwdGVwLCBwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpCiB7CiAJc2V0X3B0ZShwdGVwLCBwdGUpOwogfQpkaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jCmluZGV4IDIyOWQxZmMzZDdmMWMuLjkxNjc4NWMzYjJlMGIgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvdGFza19tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9wcm9jL3Rhc2tfbW11LmMKQEAgLTI4NTIsNyAmIzQzOzI4NTIsNyBAQCBzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJcmV0dXJuIDA7CiAJfQogCi0JbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKJiM0MzsJbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKHZtYS0mZ3Q7dm1fbW0sIHN0YXJ0LCBlbmQsIHN0YXJ0X3B0ZSk7CiAKIAlpZiAoKHAtJmd0O2FyZy5mbGFncyAmYW1wOyBQTV9TQ0FOX1dQX01BVENISU5HKSAmYW1wOyZhbXA7ICFwLSZndDt2ZWNfb3V0KSB7CiAJCS8qIEZhc3QgcGF0aCBmb3IgcGVyZm9ybWluZyBleGNsdXNpdmUgV1AgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2FzYW4uaCBiL2luY2x1ZGUvbGludXgva2FzYW4uaAppbmRleCBiZjIzM2JkZTY4YzdlLi4xYWE0ZDlkZDI0ODVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2thc2FuLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rYXNhbi5oCkBAIC02LDYgJiM0Mzs2LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9rYXNhbi1lbmFibGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2FzYW4tdGFncy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wZ3RhYmxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RhdGljX2tleS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKQEAgLTM1LDggJiM0MzszNiw2IEBAIHR5cGVkZWYgdW5zaWduZWQgaW50IF9fYml0d2lzZSBrYXNhbl92bWFsbG9jX2ZsYWdzX3Q7CiAKICNpZiBkZWZpbmVkKENPTkZJR19LQVNBTl9HRU5FUklDKSB8fCBkZWZpbmVkKENPTkZJR19LQVNBTl9TV19UQUdTKQogCi0jaW5jbHVkZSAmbHQ7bGludXgvcGd0YWJsZS5oJmd0OwotCiAvKiBTb2Z0d2FyZSBLQVNBTiBpbXBsZW1lbnRhdGlvbnMgdXNlIHNoYWRvdyBtZW1vcnkuICovCiAKICNpZmRlZiBDT05GSUdfS0FTQU5fU1dfVEFHUwpAQCAtMTM0LDYgJiM0MzsxMzMsMjAgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGthc2FuX3BvaXNvbl9zbGFiKHN0cnVjdCBzbGFiICpzbGFiKQogCQlfX2thc2FuX3BvaXNvbl9zbGFiKHNsYWIpOwogfQogCiYjNDM7dm9pZCBfX2thc2FuX3BvaXNvbl9wdGUocHRlX3QgKnB0ZSwgaW50IG5yKTsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQga2FzYW5fcG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpCiYjNDM7ewomIzQzOwlpZiAoa2FzYW5fZW5hYmxlZCgpKQomIzQzOwkJX19rYXNhbl9wb2lzb25fcHRlKHB0ZSwgbnIpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIF9fa2FzYW5fdW5wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucik7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGthc2FuX3VucG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpCiYjNDM7ewomIzQzOwlpZiAoa2FzYW5fZW5hYmxlZCgpKQomIzQzOwkJX19rYXNhbl91bnBvaXNvbl9wdGUocHRlLCBucik7CiYjNDM7fQomIzQzOwogdm9pZCBfX2thc2FuX3VucG9pc29uX25ld19vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB2b2lkICpvYmplY3QpOwogLyoqCiAgKiBrYXNhbl91bnBvaXNvbl9uZXdfb2JqZWN0IC0gVGVtcG9yYXJpbHkgdW5wb2lzb24gYSBuZXcgc2xhYiBvYmplY3QuCkBAIC00MTQsNiAmIzQzOzQyNyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrYXNhbl91bnBvaXNvbl9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLAogCXJldHVybiBmYWxzZTsKIH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYikge30KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fcG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpIHt9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGthc2FuX3VucG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fdW5wb2lzb25fbmV3X29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsCiAJCQkJCXZvaWQgKm9iamVjdCkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fbmV3X29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaCBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCmluZGV4IDI5ODFlMzg2ZGE3YjMuLmNjODVkYWYzMDczOWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCkBAIC0yNzEsNiAmIzQzOzI3MSw1MCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9lbmFibGUodm9pZCkKIAkJYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7CiB9CiAKJiM0MzsjaWZuZGVmIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHB0ZV90ICpwdGVwKQomIzQzO3sKJiM0MzsJYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwomIzQzOy8qKgomIzQzOyAqIGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcygpIC0gRW5hYmxlIHRoZSBsYXp5IE1NVSBtb2RlIHdpdGggYSBzcGVlZHVwIGhpbnQuCiYjNDM7ICogQG1tOiBBZGRyZXNzIHNwYWNlIHRoZSBwYWdlcyBhcmUgbWFwcGVkIGludG8uCiYjNDM7ICogQGFkZHI6IFN0YXJ0IGFkZHJlc3Mgb2YgdGhlIHJhbmdlLgomIzQzOyAqIEBlbmQ6IEVuZCBhZGRyZXNzIG9mIHRoZSByYW5nZS4KJiM0MzsgKiBAcHRlcDogUGFnZSB0YWJsZSBwb2ludGVyIGZvciB0aGUgZmlyc3QgZW50cnkuCiYjNDM7ICoKJiM0MzsgKiBFbnRlcnMgYSBuZXcgbGF6eSBNTVUgbW9kZSBzZWN0aW9uOyBpZiB0aGUgbW9kZSB3YXMgbm90IGFscmVhZHkgZW5hYmxlZCwKJiM0MzsgKiBlbmFibGVzIGl0IGFuZCBjYWxscyBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKCkuCiYjNDM7ICoKJiM0MzsgKiBQVEVzIHRoYXQgZmFsbCB3aXRoaW4gdGhlIHNwZWNpZmllZCByYW5nZSBtaWdodCBvYnNlcnZlIHVwZGF0ZSBzcGVlZHVwcy4KJiM0MzsgKiBUaGUgUFRFcyBtdXN0IGJlbG9uZyB0byB0aGUgc3BlY2lmaWVkIGFkZHJlc3Mgc3BhY2UgYW5kIGJlIGluIHRoZSBzYW1lIFBNRC4KJiM0MzsgKgomIzQzOyAqIFRoZXJlIGFyZSBubyByZXF1aXJlbWVudHMgb24gdGhlIG9yZGVyIG9yIHJhbmdlIGNvbXBsZXRlbmVzcyBvZiBQVEUKJiM0MzsgKiB1cGRhdGVzIGZvciB0aGUgc3BlY2lmaWVkIHJhbmdlLgomIzQzOyAqCiYjNDM7ICogTXVzdCBiZSBwYWlyZWQgd2l0aCBhIGNhbGwgdG8gbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCkuCiYjNDM7ICoKJiM0MzsgKiBIYXMgbm8gZWZmZWN0IGlmIGNhbGxlZDoKJiM0MzsgKiAtIFdoaWxlIHBhdXNlZCAtIHNlZSBsYXp5X21tdV9tb2RlX3BhdXNlKCkKJiM0MzsgKiAtIEluIGludGVycnVwdCBjb250ZXh0CiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHB0ZV90ICpwdGVwKQomIzQzO3sKJiM0MzsJc3RydWN0IGxhenlfbW11X3N0YXRlICpzdGF0ZSA9ICZhbXA7Y3VycmVudC0mZ3Q7bGF6eV9tbXVfc3RhdGU7CiYjNDM7CiYjNDM7CWlmIChpbl9pbnRlcnJ1cHQoKSB8fCBzdGF0ZS0mZ3Q7cGF1c2VfY291bnQgJmd0OyAwKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlWTV9XQVJOX09OX09OQ0Uoc3RhdGUtJmd0O2VuYWJsZV9jb3VudCA9PSBVOF9NQVgpOwomIzQzOwomIzQzOwlpZiAoc3RhdGUtJmd0O2VuYWJsZV9jb3VudCYjNDM7JiM0MzsgPT0gMCkKJiM0MzsJCWFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgcHRlcCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBsYXp5X21tdV9tb2RlX2Rpc2FibGUoKSAtIERpc2FibGUgdGhlIGxhenkgTU1VIG1vZGUuCiAgKgpAQCAtMzg3LDYgJiM0Mzs0MzEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9yZXN1bWUodm9pZCkKIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9lbmFibGUodm9pZCkge30KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgcHRlX3QgKnB0ZXApIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9kaXNhYmxlKHZvaWQpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9wYXVzZSh2b2lkKSB7fQogc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfcmVzdW1lKHZvaWQpIHt9CmRpZmYgLS1naXQgYS9tbS9rYXNhbi9jb21tb24uYyBiL21tL2thc2FuL2NvbW1vbi5jCmluZGV4IGI3ZDA1YzJhNmQ5M2QuLjk0ZDEwNjA5NDk4OTEgMTAwNjQ0Ci0tLSBhL21tL2thc2FuL2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2thc2FuL2NvbW1vbi5jCkBAIC0xNjMsNiAmIzQzOzE2MywyMCBAQCB2b2lkIF9fa2FzYW5fcG9pc29uX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIpCiAJCSAgICAgS0FTQU5fU0xBQl9SRURaT05FLCBmYWxzZSk7CiB9CiAKJiM0Mzt2b2lkIF9fa2FzYW5fcG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpCiYjNDM7ewomIzQzOwlpZiAoSVNfQUxJR05FRChzaXplb2YoKnB0ZSksIEtBU0FOX0dSQU5VTEVfU0laRSkpCiYjNDM7CQlrYXNhbl9wb2lzb24ocHRlLCBzaXplb2YoKnB0ZSkgKiBuciwgS0FTQU5fTEFaWV9NTVVfUFRFLCBmYWxzZSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKF9fa2FzYW5fcG9pc29uX3B0ZSk7CiYjNDM7CiYjNDM7dm9pZCBfX2thc2FuX3VucG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpCiYjNDM7ewomIzQzOwlpZiAoSVNfQUxJR05FRChzaXplb2YoKnB0ZSksIEtBU0FOX0dSQU5VTEVfU0laRSkpCiYjNDM7CQlrYXNhbl91bnBvaXNvbihwdGUsIHNpemVvZigqcHRlKSAqIG5yLCBmYWxzZSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKF9fa2FzYW5fdW5wb2lzb25fcHRlKTsKJiM0MzsKIHZvaWQgX19rYXNhbl91bnBvaXNvbl9uZXdfb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSwgdm9pZCAqb2JqZWN0KQogewogCWthc2FuX3VucG9pc29uKG9iamVjdCwgY2FjaGUtJmd0O29iamVjdF9zaXplLCBmYWxzZSk7CmRpZmYgLS1naXQgYS9tbS9rYXNhbi9rYXNhbi5oIGIvbW0va2FzYW4va2FzYW4uaAppbmRleCBmYzkxNjlhNTQ3NjYyLi4xYTJkMThjZGIyMWQ5IDEwMDY0NAotLS0gYS9tbS9rYXNhbi9rYXNhbi5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2thc2FuL2thc2FuLmgKQEAgLTE0NCwxMiAmIzQzOzE0NCwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wga2FzYW5fcmVxdWlyZXNfbWV0YSh2b2lkKQogI2RlZmluZSBLQVNBTl9QQUdFX1JFRFpPTkUJMHhGRSAgLyogcmVkem9uZSBmb3Iga21hbGxvY19sYXJnZSBhbGxvY2F0aW9uICovCiAjZGVmaW5lIEtBU0FOX1NMQUJfUkVEWk9ORQkweEZDICAvKiByZWR6b25lIGZvciBzbGFiIG9iamVjdCAqLwogI2RlZmluZSBLQVNBTl9TTEFCX0ZSRUUJCTB4RkIgIC8qIGZyZWVkIHNsYWIgb2JqZWN0ICovCiYjNDM7I2RlZmluZSBLQVNBTl9MQVpZX01NVV9QVEUJMHhGRCAgLyogZGlyZWN0IHB0ZSBhY2Nlc3MgaW4gbGF6eSBtbXUgbW9kZSAqLwogI2RlZmluZSBLQVNBTl9WTUFMTE9DX0lOVkFMSUQJMHhGOCAgLyogaW5hY2Nlc3NpYmxlIHNwYWNlIGluIHZtYXAgYXJlYSAqLwogI2Vsc2UKICNkZWZpbmUgS0FTQU5fUEFHRV9GUkVFCQlLQVNBTl9UQUdfSU5WQUxJRAogI2RlZmluZSBLQVNBTl9QQUdFX1JFRFpPTkUJS0FTQU5fVEFHX0lOVkFMSUQKICNkZWZpbmUgS0FTQU5fU0xBQl9SRURaT05FCUtBU0FOX1RBR19JTlZBTElECiAjZGVmaW5lIEtBU0FOX1NMQUJfRlJFRQkJS0FTQU5fVEFHX0lOVkFMSUQKJiM0MzsjZGVmaW5lIEtBU0FOX0xBWllfTU1VX1BURQlLQVNBTl9UQUdfSU5WQUxJRAogI2RlZmluZSBLQVNBTl9WTUFMTE9DX0lOVkFMSUQJS0FTQU5fVEFHX0lOVkFMSUQgLyogb25seSB1c2VkIGZvciBTV19UQUdTICovCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuYyBiL21tL2thc2FuL3JlcG9ydF9nZW5lcmljLmMKaW5kZXggZjViOGUzN2IzODA1Yy4uNDg5ZDRhOGQ2OTAyZCAxMDA2NDQKLS0tIGEvbW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9rYXNhbi9yZXBvcnRfZ2VuZXJpYy5jCkBAIC0xMTMsNiAmIzQzOzExMyw5IEBAIHN0YXRpYyBjb25zdCBjaGFyICpnZXRfc2hhZG93X2J1Z190eXBlKHN0cnVjdCBrYXNhbl9yZXBvcnRfaW5mbyAqaW5mbykKIAljYXNlIEtBU0FOX1NMQUJfRlJFRV9NRVRBOgogCQlidWdfdHlwZSA9ICYjMzQ7c2xhYi11c2UtYWZ0ZXItZnJlZSYjMzQ7OwogCQlicmVhazsKJiM0MzsJY2FzZSBLQVNBTl9MQVpZX01NVV9QVEU6CiYjNDM7CQlidWdfdHlwZSA9ICYjMzQ7bGF6eS1tbXUtcHRlLWFjY2VzcyYjMzQ7OwomIzQzOwkJYnJlYWs7CiAJY2FzZSBLQVNBTl9BTExPQ0FfTEVGVDoKIAljYXNlIEtBU0FOX0FMTE9DQV9SSUdIVDoKIAkJYnVnX3R5cGUgPSAmIzM0O2FsbG9jYS1vdXQtb2YtYm91bmRzJiMzNDs7CmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmMKaW5kZXggNzc1NTJiMDNkMzE4ZC4uNDQxOWQxNmIzOWY5NiAxMDA2NDQKLS0tIGEvbW0vbWFkdmlzZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21hZHZpc2UuYwpAQCAtNDUyLDcgJiM0Mzs0NTIsNyBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLAogCWlmICghc3RhcnRfcHRlKQogCQlyZXR1cm4gMDsKIAlmbHVzaF90bGJfYmF0Y2hlZF9wZW5kaW5nKG1tKTsKLQlsYXp5X21tdV9tb2RlX2VuYWJsZSgpOwomIzQzOwlsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgc3RhcnRfcHRlKTsKIAlmb3IgKDsgYWRkciAmbHQ7IGVuZDsgcHRlICYjNDM7PSBuciwgYWRkciAmIzQzOz0gbnIgKiBQQUdFX1NJWkUpIHsKIAkJbnIgPSAxOwogCQlwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7CkBAIC01MDcsNyAmIzQzOzUwNyw3IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsCiAJCQkJaWYgKCFzdGFydF9wdGUpCiAJCQkJCWJyZWFrOwogCQkJCWZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pOwotCQkJCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CiYjNDM7CQkJCWxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgYWRkciwgZW5kLCBzdGFydF9wdGUpOwogCQkJCWlmICghZXJyKQogCQkJCQluciA9IDA7CiAJCQkJY29udGludWU7CkBAIC02NzQsNyAmIzQzOzY3NCw3IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJaWYgKCFzdGFydF9wdGUpCiAJCXJldHVybiAwOwogCWZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pOwotCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CiYjNDM7CWxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgYWRkciwgZW5kLCBzdGFydF9wdGUpOwogCWZvciAoOyBhZGRyICE9IGVuZDsgcHRlICYjNDM7PSBuciwgYWRkciAmIzQzOz0gUEFHRV9TSVpFICogbnIpIHsKIAkJbnIgPSAxOwogCQlwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7CkBAIC03MzQsNyAmIzQzOzczNCw3IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkJaWYgKCFzdGFydF9wdGUpCiAJCQkJCWJyZWFrOwogCQkJCWZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pOwotCQkJCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CiYjNDM7CQkJCWxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgYWRkciwgZW5kLCBwdGUpOwogCQkJCWlmICghZXJyKQogCQkJCQluciA9IDA7CiAJCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDZiODI4MGNmYzFkYmUuLjBjYzA3YjA0MzM4NGIgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC0xMjcyLDcgJiM0MzsxMjcyLDcgQEAgY29weV9wdGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsCiAJc3Bpbl9sb2NrX25lc3RlZChzcmNfcHRsLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAJb3JpZ19zcmNfcHRlID0gc3JjX3B0ZTsKIAlvcmlnX2RzdF9wdGUgPSBkc3RfcHRlOwotCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CiYjNDM7CWxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhzcmNfbW0sIGFkZHIsIGVuZCwgc3JjX3B0ZSk7CiAKIAlkbyB7CiAJCW5yID0gMTsKQEAgLTE5MjIsNyAmIzQzOzE5MjIsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB6YXBfcHRlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsCiAJCXJldHVybiBhZGRyOwogCiAJZmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyhtbSk7Ci0JbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKJiM0MzsJbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIHN0YXJ0X3B0ZSk7CiAJZG8gewogCQlib29sIGFueV9za2lwcGVkID0gZmFsc2U7CiAKQEAgLTI5MTksNyAmIzQzOzI5MTksNyBAQCBzdGF0aWMgaW50IHJlbWFwX3B0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwKIAltYXBwZWRfcHRlID0gcHRlID0gcHRlX2FsbG9jX21hcF9sb2NrKG1tLCBwbWQsIGFkZHIsICZhbXA7cHRsKTsKIAlpZiAoIXB0ZSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKJiM0MzsJbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIG1hcHBlZF9wdGUpOwogCWRvIHsKIAkJQlVHX09OKCFwdGVfbm9uZShwdGVwX2dldChwdGUpKSk7CiAJCWlmICghcGZuX21vZGlmeV9hbGxvd2VkKHBmbiwgcHJvdCkpIHsKQEAgLTMzMzAsNyAmIzQzOzMzMzAsNyBAQCBzdGF0aWMgaW50IGFwcGx5X3RvX3B0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CiYjNDM7CWxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgYWRkciwgZW5kLCBtYXBwZWRfcHRlKTsKIAogCWlmIChmbikgewogCQlkbyB7CmRpZmYgLS1naXQgYS9tbS9tcHJvdGVjdC5jIGIvbW0vbXByb3RlY3QuYwppbmRleCA5Y2JmOTMyYjAyOGNmLi4zZmMyNjQxOGU4MzdkIDEwMDY0NAotLS0gYS9tbS9tcHJvdGVjdC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21wcm90ZWN0LmMKQEAgLTMzNyw3ICYjNDM7MzM3LDcgQEAgc3RhdGljIGxvbmcgY2hhbmdlX3B0ZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLAogCQlpc19wcml2YXRlX3NpbmdsZV90aHJlYWRlZCA9IHZtYV9pc19zaW5nbGVfdGhyZWFkZWRfcHJpdmF0ZSh2bWEpOwogCiAJZmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyh2bWEtJmd0O3ZtX21tKTsKLQlsYXp5X21tdV9tb2RlX2VuYWJsZSgpOwomIzQzOwlsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXModm1hLSZndDt2bV9tbSwgYWRkciwgZW5kLCBwdGUpOwogCWRvIHsKIAkJbnJfcHRlcyA9IDE7CiAJCW9sZHB0ZSA9IHB0ZXBfZ2V0KHB0ZSk7CmRpZmYgLS1naXQgYS9tbS9tcmVtYXAuYyBiL21tL21yZW1hcC5jCmluZGV4IGU5YzhiMWQwNTgzMmIuLjBkZmUzZGUzOWNjYzcgMTAwNjQ0Ci0tLSBhL21tL21yZW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21yZW1hcC5jCkBAIC0yNjAsNyAmIzQzOzI2MCw3IEBAIHN0YXRpYyBpbnQgbW92ZV9wdGVzKHN0cnVjdCBwYWdldGFibGVfbW92ZV9jb250cm9sICpwbWMsCiAJaWYgKG5ld19wdGwgIT0gb2xkX3B0bCkKIAkJc3Bpbl9sb2NrX25lc3RlZChuZXdfcHRsLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAJZmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyh2bWEtJmd0O3ZtX21tKTsKLQlsYXp5X21tdV9tb2RlX2VuYWJsZSgpOwomIzQzOwlsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIG9sZF9hZGRyLCBvbGRfZW5kLCBvbGRfcHRlcCk7CiAKIAlmb3IgKDsgb2xkX2FkZHIgJmx0OyBvbGRfZW5kOyBvbGRfcHRlcCAmIzQzOz0gbnJfcHRlcywgb2xkX2FkZHIgJiM0Mzs9IG5yX3B0ZXMgKiBQQUdFX1NJWkUsCiAJCW5ld19wdGVwICYjNDM7PSBucl9wdGVzLCBuZXdfYWRkciAmIzQzOz0gbnJfcHRlcyAqIFBBR0VfU0laRSkgewpkaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jCmluZGV4IGY0ZmEyMjdhOGQ3ZjAuLjFjNmVmOGZkMDc5ZTAgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bWFsbG9jLmMKQEAgLTEwOSw3ICYjNDM7MTA5LDcgQEAgc3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCWlmICghcHRlKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CiYjNDM7CWxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcygmYW1wO2luaXRfbW0sIGFkZHIsIGVuZCwgcHRlKTsKIAogCWRvIHsKIAkJaWYgKHVubGlrZWx5KCFwdGVfbm9uZShwdGVwX2dldChwdGUpKSkpIHsKQEAgLTM5Myw3ICYjNDM7MzkzLDcgQEAgc3RhdGljIHZvaWQgdnVubWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IFBBR0VfU0laRTsKIAogCXB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcik7Ci0JbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKJiM0MzsJbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKCZhbXA7aW5pdF9tbSwgYWRkciwgZW5kLCBwdGUpOwogCiAJZG8gewogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKQEAgLTU2MCw3ICYjNDM7NTYwLDcgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJaWYgKCFwdGUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKJiM0MzsJbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKCZhbXA7aW5pdF9tbSwgYWRkciwgZW5kLCBwdGUpOwogCiAJZG8gewogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBhZ2VzWypucl07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQwMQoJCQkJCQkJb3V0cHV0OiAyMTQKCQkJCQkJCXRob3VnaHRzOiAxMzc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBKdXN0aWZpY2F0aW9uOiBBIERldGFpbGVkIEV4YW1pbmF0aW9uKioKCk9rYXksIHNvIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgcnVuLiBLTVNBTiYjMzk7cyBhbGwgYWJvdXQgY2F0Y2hpbmcgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGhhbmRsZXMgdGhlIHVzdWFsIHN1c3BlY3RzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGFuZCBsb2NraW5nIGJ1Z3MuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhICYjMzQ7bGF6eSBNTVUgbW9kZSYjMzQ7IGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBkaWcgaW4uCgpUaGUgcGF0Y2gmIzM5O3MgZ290IGNoYW5nZXMgYWNyb3NzIHRoZSBib2FyZCwgZnJvbSBgbGF6eV9tbXUuaGAgdG8gbW9kaWZpY2F0aW9ucyBpbiB2YXJpb3VzIGtlcm5lbCBhcmVhcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBLQVNBTi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBpbXBsZW1lbnRpbmcgbGF6eSBQVEUgdXBkYXRlcy4gSW50ZXJlc3Rpbmcg4oCTIGl0JiMzOTtzIGJ1ZmZlcmluZyB0aG9zZSB1cGRhdGVzLiBUaGUgY29kZSB1c2VzIGBsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMoKWAgd2hpY2ggdGFrZXMgYSBgcHRlX3QgKnB0ZXBgLiBBaCwgYW5kIHRoZXJlJiMzOTtzIEtBU0FOIHBvaXNvbmluZy91bnBvaXNvbmluZyBvZiBQVEVzIChgS0FTQU5fTEFaWV9NTVVfUFRFYCkuIFdhaXQsIHRoaXMgaXMgKmV4cGxpY2l0bHkqIGEgS0FTQU4gZmVhdHVyZS4gSXQmIzM5O3MgYWRkaW5nIGEgbmV3IEtBU0FOIHRhZyBhbmQgYSBuZXcgYnVnIHR5cGU6IGAmIzM0O2xhenktbW11LXB0ZS1hY2Nlc3MmIzM0O2AuIFRoaXMgaXNuJiMzOTt0IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IGFsbCwgaXQmIzM5O3MgYWJvdXQgY2F0Y2hpbmcgKmludmFsaWQqIGFjY2Vzc2VzIHRvIFBURXMgZHVyaW5nIGxhenkgbW9kZSB1c2luZyBLQVNBTi4KCkFscmlnaHQsIGxldCYjMzk7cyBwbGF5IGRldmlsJiMzOTtzIGFkdm9jYXRlIGFuZCBjaGVjayBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCBtZSBzZWUuLi4gYHN0cnVjdCBpcHRlX3JhbmdlYCBpcyBhbGxvY2F0ZWQgaW4gYGxhenlfbW11X29ubGluZV9jcHVgIHVzaW5nIGBremFsbG9jX29iaigqcmFuZ2UsIGdmcClgLiBXYWl0LCB3aGF0IGlzIGBremFsbG9jX29iamA/IElzIHRoYXQgYSB0eXBvPyBJdCYjMzk7cyBub3QgYSBzdGFuZGFyZCBrZXJuZWwgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gZmluZCBpdCB3aXRoIGBncmVwYC4gT2ghIEl0JiMzOTtzIHByb2JhYmx5IGEgbWFjcm8gdGhhdCYjMzk7cyBhIHdyYXBwZXIgZm9yIGBremFsbG9jKHNpemVvZigqcmFuZ2UpLCBnZnApYC4gQWN0dWFsbHksIGl0IGRvZXNuJiMzOTt0IG1hdHRlciwgaXQmIzM5O3MgYSB6ZXJvLWFsbG9jYXRpb24hCgpMZXQmIzM5O3MgbG9vayBtb3JlIGNsb3NlbHkgYXQgdGhlIGNvZGUgaW4gYGFyY2gvczM5MC9tbS9sYXp5X21tdS5jYDoKYGBgYwoJcmFuZ2UgPSBremFsbG9jX29iaigqcmFuZ2UsIGdmcCk7CglpZiAoIXJhbmdlKQoJCXJldHVybiAtRU5PTUVNOwoJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUocmFuZ2UtJmd0O2NhY2hlKTsgaSYjNDM7JiM0MzspCgkJcmFuZ2UtJmd0O2NhY2hlW2ldID0gX19wdGUoUFRFX1BPSVNPTik7CmBgYApZZXMsIGRlZmluaXRlbHkgYSB6ZXJvLWFsbG9jYXRpb24sIGFzIGV4cGVjdGVkLiBUaGUgUFRFIGNhY2hlIGlzIHRoZW4gaW5pdGlhbGl6ZWQgd2l0aCBwb2lzb24gdmFsdWVzLgoKSXMgYW55dGhpbmcgaGVyZSBwYXNzZWQgdG8gdXNlciBzcGFjZT8gTm9wZS4gSXQmIzM5O3MgcHVyZWx5IGludGVybmFsIE1NVSBwYWdlIHRhYmxlIG1hbmFnZW1lbnQuIFBURXMgYXJlbiYjMzk7dCBiZWluZyBzZW50IGRpcmVjdGx5IHRvIHVzZXJzcGFjZS4gSW4gZmFjdCwgdGhpcyBwYXRjaCBpcyAqYWRkaW5nKiBLQVNBTiBjaGVja3MgdG8gY2F0Y2ggKmRpcmVjdCogUFRFIGFjY2Vzc2VzIGluIGxhenkgbW9kZS4gU2luY2UgaXQmIzM5O3MgYnVpbHQtaW4sIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIGhlcmUuIEtNU0FOJiMzOTtzIHB1cnBvc2UsIGNhdGNoaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW1zLCBpc24mIzM5O3Qgd2hhdCB0aGlzIHBhdGNoIGRvZXMuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIGp1c3QgdG8gYmUgc3VyZS4uLiB0aGUgYHN0cnVjdCBpcHRlX3JhbmdlYCBoYXMgYSBgcHRlX3QgY2FjaGVbUFRSU19QRVJfUFRFXTtgLiBJdCYjMzk7cyBpbml0aWFsaXplZCB0byBgUFRFX1BPSVNPTmAgaW4gYGxhenlfbW11X29ubGluZV9jcHVgLiBgZW50ZXJfaXB0ZV9yYW5nZWAgc2V0cyB0aGUgYmFzZSBhZGRyZXNzLCBlbmQsIGFuZCBQVEUsIGFuZCBgX19sYXp5X21tdV9zZXRfcHRlYCB3cml0ZXMgdG8gYHJhbmdlLSZndDtjYWNoZVtpZHhdYC4gTm90aGluZyBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIGFuZCBub3RoaW5nIGlzIHJlYWQgdW5pbml0aWFsaXplZC4KClRoZXJlZm9yZSwgbm8uIGBOZWVkc0tNU0FOID0gZmFsc2VgLgoKVGhlIHBhdGNoJiMzOTtzIGFsbCBhYm91dCBsYXp5IFBURSB1cGRhdGVzIG9uIHMzOTAsIGV4cGxpY2l0bHkgYWRkaW5nIEtBU0FOIHBvaXNvbmluZy91bnBvaXNvbmluZyB0byBjYXRjaCBkaXJlY3QgUFRFIGFjY2Vzc2VzLCBpbnRyb2R1Y2luZyBhIG5ldyBLQVNBTiBidWcgdHlwZS4gQWxsIG9mIHRoZSBjaGFuZ2VzIGFyZSBpbnRlcm5hbCwgcGFnZSB0YWJsZSByZWxhdGVkLCBhbmQgbm8gc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZS4gTmV3bHkgYWxsb2NhdGVkIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkICh2aWEgemVyby1hbGxvY2F0aW9uIGFuZCBleHBsaWNpdCBgUFRFX1BPSVNPTmApLiBUaGVyZSYjMzk7cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLCBubyBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBLQVNBTiBpcyB0aGUgcGVyZmVjdCB0b29sIGZvciBjaGVja2luZyB0aGlzLiBga3phbGxvY19vYmpgLCB3aGljaCBpcyB1c2VkLCBkb2VzIHplcm8gYWxsb2NhdGlvbiwgb3IgaXMgaW1wbGVtZW50ZWQgYXMgc3VjaC4KYGBgCmBgYApJJiMzOTttIGNhbGxpbmcgYHNldC1yZXN1bHRzYCBub3cuCmBgYAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbGF6eSBNTVUgbW9kZSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIHRvIGJ1ZmZlciBwYWdlIHRhYmxlIGVudHJ5IChQVEUpIHVwZGF0ZXMuIEl0IGFsc28gZXhwbGljaXRseSBhZGRzIEtBU0FOIHBvaXNvbmluZy91bnBvaXNvbmluZyB0byBkZXRlY3QgaW52YWxpZCBkaXJlY3QgYWNjZXNzZXMgdG8gUFRFcyB3aGlsZSB0aGUgbGF6eSBNTVUgbW9kZSBpcyBhY3RpdmUsIGludHJvZHVjaW5nIGEgbmV3IEtBU0FOIGJ1ZyB0eXBlIChgbGF6eS1tbXUtcHRlLWFjY2Vzc2ApLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgdGFibGUgb3BlcmF0aW9ucy4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgYWxsIG5ld2x5IGFsbG9jYXRlZCBzdHJ1Y3R1cmVzIChlLmcuLCBgc3RydWN0IGlwdGVfcmFuZ2VgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGUuZy4sIHZpYSB6ZXJvLWFsbG9jYXRpb24gYW5kIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIG9mIHRoZSBgY2FjaGVgIGFycmF5IHRvIGBQVEVfUE9JU09OYCkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGlzIHBlcmZlY3RseSBzdWl0ZWQgYW5kIGV4cGxpY2l0bHkgZW5oYW5jZWQgYnkgdGhpcyBwYXRjaCB0byBjYXRjaCBhbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbGF6eSBNTVUgbW9kZSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIHRvIGJ1ZmZlciBwYWdlIHRhYmxlIGVudHJ5IChQVEUpIHVwZGF0ZXMuIEl0IGFsc28gZXhwbGljaXRseSBhZGRzIEtBU0FOIHBvaXNvbmluZy91bnBvaXNvbmluZyB0byBkZXRlY3QgaW52YWxpZCBkaXJlY3QgYWNjZXNzZXMgdG8gUFRFcyB3aGlsZSB0aGUgbGF6eSBNTVUgbW9kZSBpcyBhY3RpdmUsIGludHJvZHVjaW5nIGEgbmV3IEtBU0FOIGJ1ZyB0eXBlIChgbGF6eS1tbXUtcHRlLWFjY2Vzc2ApLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgdGFibGUgb3BlcmF0aW9ucy4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgYWxsIG5ld2x5IGFsbG9jYXRlZCBzdHJ1Y3R1cmVzIChlLmcuLCBgc3RydWN0IGlwdGVfcmFuZ2VgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGUuZy4sIHZpYSB6ZXJvLWFsbG9jYXRpb24gYW5kIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIG9mIHRoZSBgY2FjaGVgIGFycmF5IHRvIGBQVEVfUE9JU09OYCkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGlzIHBlcmZlY3RseSBzdWl0ZWQgYW5kIGV4cGxpY2l0bHkgZW5oYW5jZWQgYnkgdGhpcyBwYXRjaCB0byBjYXRjaCBhbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjM3OjQ0LjA0NjM1MzQ5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4NTUzNDMyNDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktBU0FOXCIsXG4gICAgXCJLQVNBTl9HRU5FUklDXCIsXG4gICAgXCJIT1RQTFVHX0NQVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZVwiLFxuICAgIFwiYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc1wiLFxuICAgIFwiYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlXCIsXG4gICAgXCJhcmNoX2ZsdXNoX2xhenlfbW11X21vZGVcIixcbiAgICBcImxhenlfbW11X29ubGluZV9jcHVcIixcbiAgICBcImxhenlfbW11X29mZmxpbmVfY3B1XCIsXG4gICAgXCJfX2thc2FuX3BvaXNvbl9wdGVcIixcbiAgICBcIl9fa2FzYW5fdW5wb2lzb25fcHRlXCIsXG4gICAgXCJfX19wdGVwX21vZGlmeV9wcm90X3N0YXJ0XCIsXG4gICAgXCJfX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxhenkgTU1VIG1vZGUgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSB0byBidWZmZXIgcGFnZSB0YWJsZSBlbnRyeSAoUFRFKSB1cGRhdGVzLiBJdCBhbHNvIGV4cGxpY2l0bHkgYWRkcyBLQVNBTiBwb2lzb25pbmcvdW5wb2lzb25pbmcgdG8gZGV0ZWN0IGludmFsaWQgZGlyZWN0IGFjY2Vzc2VzIHRvIFBURXMgd2hpbGUgdGhlIGxhenkgTU1VIG1vZGUgaXMgYWN0aXZlLCBpbnRyb2R1Y2luZyBhIG5ldyBLQVNBTiBidWcgdHlwZSAoYGxhenktbW11LXB0ZS1hY2Nlc3NgKS4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IGNvbmZpbmVkIHRvIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHRhYmxlIG9wZXJhdGlvbnMuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIGFsbCBuZXdseSBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoZS5nLiwgYHN0cnVjdCBpcHRlX3JhbmdlYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlLmcuLCB2aWEgemVyby1hbGxvY2F0aW9uIGFuZCBleHBsaWNpdCBpbml0aWFsaXphdGlvbiBvZiB0aGUgYGNhY2hlYCBhcnJheSB0byBgUFRFX1BPSVNPTmApLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBpcyBwZXJmZWN0bHkgc3VpdGVkIGFuZCBleHBsaWNpdGx5IGVuaGFuY2VkIGJ5IHRoaXMgcGF0Y2ggdG8gY2F0Y2ggYW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbGF6eSBNTVUgbW9kZSBmb3IgczM5MCBhcmNoaXRlY3R1cmUsIHdoaWNoIGJhdGNoZXMgUFRFIGludmFsaWRhdGlvbnMgdXNpbmcgdGhlIElQVEUtcmFuZ2UgZmFjaWxpdHkuIEl0IGhvb2tzIGludG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzeXNjYWxscyAobWFkdmlzZSwgbXByb3RlY3QsIG1yZW1hcCwgdm1hbGxvYykgYW5kIENQVSBob3RwbHVnIHBhdGhzLiBJdCBhbHNvIGFkZHMgS0FTQU4gaW5zdHJ1bWVudGF0aW9uIGZvciBkaXJlY3QgUFRFIGFjY2Vzc2VzIGluIGxhenkgTU1VIG1vZGUuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjM3OjQ0LjA0NjM1ODlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjc3MTAxNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNmMxMjY3M2YzNWRkZjJhMTQ3OTExNjRiNWRjZjlkNGMzY2Y1NGMyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDE3IDEyOjM3OjQyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWdcXG5pbmRleCA4NDQwNGU2Nzc4ZDUwLi43ODQ2MzMyZGNkMGE2IDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9LY29uZmlnXFxuKysrIGIvYXJjaC9zMzkwL0tjb25maWdcXG5AQCAtOTcsNiArOTcsNyBAQCBjb25maWcgUzM5MFxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfS0NPVlxcbitcXHRzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERVxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfTUVNQkFSUklFUl9TWU5DX0NPUkVcXG4gXFx0c2VsZWN0IEFSQ0hfSEFTX01FTV9FTkNSWVBUXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFNcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xhenlfbW11LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbGF6eV9tbXUuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTgzNjZlOWRlOWJjM1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbGF6eV9tbXUuaFxcbkBAIC0wLDAgKzEsOSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbisjaWZuZGVmIF9fTEFaWV9NTVVfSFxcbisjZGVmaW5lIF9fTEFaWV9NTVVfSFxcbitcXG4rdm9pZCBsYXp5X21tdV9vbmxpbmVfYm9vdF9jcHUodm9pZCk7XFxuK2ludCBsYXp5X21tdV9vbmxpbmVfY3B1KGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGNwdSk7XFxuK3ZvaWQgbGF6eV9tbXVfb2ZmbGluZV9jcHUodW5zaWduZWQgaW50IGNwdSk7XFxuK1xcbisjZW5kaWYgLyogX19MQVpZX01NVV9IICovXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oXFxuaW5kZXggM2IzZWNjNjQ3OTkzZi4uZGJhMjM2NjY0ZGE5MCAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oXFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaFxcbkBAIC0xNjMsNyArMTYzLDcgQEAgc3RydWN0IGxvd2NvcmUge1xcbiBcXHRfX3MzMlxcdHByZWVtcHRfY291bnQ7XFx0XFx0XFx0LyogMHgwM2E4ICovXFxuIFxcdF9fdTMyXFx0c3BpbmxvY2tfbG9ja3ZhbDtcXHRcXHQvKiAweDAzYWMgKi9cXG4gXFx0X191MzJcXHRzcGlubG9ja19pbmRleDtcXHRcXHRcXHQvKiAweDAzYjAgKi9cXG4tXFx0X191OFxcdHBhZF8weDAzYjRbMHgwM2I4LTB4MDNiNF07XFx0LyogMHgwM2I0ICovXFxuK1xcdF9fczMyXFx0bGF6eV9tbXVfY291bnQ7XFx0XFx0XFx0LyogMHgwM2I0ICovXFxuIFxcdF9fdTY0XFx0cGVyY3B1X29mZnNldDtcXHRcXHRcXHQvKiAweDAzYjggKi9cXG4gXFx0X191OFxcdHBlcmNwdV9yZWdpc3RlcjtcXHRcXHQvKiAweDAzYzAgKi9cXG4gXFx0X191OFxcdHBhZF8weDAzYzFbMHgwNDAwLTB4MDNjMV07XFx0LyogMHgwM2MxICovXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuaW5kZXggODU5Y2U3YzdkNDU0NC4uMWU4YTc5OTg5ZWQ2ZSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbkBAIC0zOSw2ICszOSw2NCBAQCBlbnVtIHtcXG4gXFxuIGV4dGVybiBhdG9taWNfbG9uZ190IGRpcmVjdF9wYWdlc19jb3VudFtQR19ESVJFQ1RfTUFQX01BWF07XFxuIFxcbitib29sIF9fbGF6eV9tbXVfcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBpbnQgKnJlcyk7XFxuK2Jvb2wgX19sYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcyk7XFxuK2Jvb2wgX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpO1xcbitib29sIF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9jb21taXQodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3Qgb2xkX3B0ZSwgcHRlX3QgcHRlKTtcXG4rYm9vbCBfX2xhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTtcXG4rYm9vbCBfX2xhenlfbW11X3NldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSk7XFxuK2Jvb2wgX19sYXp5X21tdV9wdGVwX2dldChwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcyk7XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfbGF6eV9tbXVfYWN0aXZlKHZvaWQpXFxuK3tcXG4rXFx0aWYgKF9faXNfZGVmaW5lZChfX0RFQ09NUFJFU1NPUikpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKCFnZXRfbG93Y29yZSgpLVxcdTAwM2VsYXp5X21tdV9jb3VudClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZVxcbitib29sIGxhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgaW50ICpyZXMpXFxuK3tcXG4rXFx0aWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRyZXR1cm4gX19sYXp5X21tdV9wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKGFkZHIsIHB0ZXAsIHJlcyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmVcXG4rYm9vbCBsYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcylcXG4re1xcbitcXHRpZiAoIWlzX2xhenlfbW11X2FjdGl2ZSgpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdHJldHVybiBfX2xhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcihhZGRyLCBwdGVwLCByZXMpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lXFxuK2Jvb2wgbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKVxcbit7XFxuK1xcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0cmV0dXJuIF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydChhZGRyLCBwdGVwLCByZXMpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lXFxuK2Jvb2wgbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9jb21taXQodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgcHRlX3Qgb2xkX3B0ZSwgcHRlX3QgcHRlKVxcbit7XFxuK1xcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0cmV0dXJuIF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoYWRkciwgcHRlcCwgb2xkX3B0ZSwgcHRlKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZVxcbitib29sIGxhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxcbit7XFxuK1xcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0cmV0dXJuIF9fbGF6eV9tbXVfcHRlcF9zZXRfd3Jwcm90ZWN0KGFkZHIsIHB0ZXApO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3BhZ2VfY291bnQoaW50IGxldmVsLCBsb25nIGNvdW50KVxcbiB7XFxuIFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUk9DX0ZTKSlcXG5AQCAtOTc4LDE3ICsxMDM2LDM4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcG1kKHBtZF90ICpwbWRwLCBwbWRfdCBwbWQpXFxuIFxcdFdSSVRFX09OQ0UoKnBtZHAsIHBtZCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSlcXG4ge1xcbiBcXHRpZiAocHRlX3ByZXNlbnQocHRlKSlcXG4gXFx0XFx0cHRlID0gY2xlYXJfcHRlX2JpdChwdGUsIF9fcGdwcm90KF9QQUdFX1VOVVNFRCkpO1xcbiBcXHRXUklURV9PTkNFKCpwdGVwLCBwdGUpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxcbit7XFxuK1xcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkgfHwgIV9fbGF6eV9tbXVfc2V0X3B0ZShwdGVwLCBwdGUpKVxcbitcXHRcXHRfX3NldF9wdGUocHRlcCwgcHRlKTtcXG4rfVxcbitcXG4rI2RlZmluZSBwdGVwX2dldF9sb2NrbGVzcyBwdGVwX2dldF9sb2NrbGVzc1xcbitzdGF0aWMgaW5saW5lIF9fbm9fc2FuaXRpemVfYWRkcmVzcyBwdGVfdCBwdGVwX2dldF9sb2NrbGVzcyhwdGVfdCAqcHRlcClcXG4re1xcbitcXHRyZXR1cm4gUkVBRF9PTkNFKCpwdGVwKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBwdGVfdCBfX3B0ZXBfZ2V0KHB0ZV90ICpwdGVwKVxcbit7XFxuK1xcdHJldHVybiBSRUFEX09OQ0UoKnB0ZXApO1xcbit9XFxuK1xcbiAjZGVmaW5lIHB0ZXBfZ2V0IHB0ZXBfZ2V0XFxuIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9nZXQocHRlX3QgKnB0ZXApXFxuIHtcXG4tXFx0cmV0dXJuIFJFQURfT05DRSgqcHRlcCk7XFxuK1xcdHB0ZV90IHJlcztcXG4rXFxuK1xcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkgfHwgIV9fbGF6eV9tbXVfcHRlcF9nZXQocHRlcCwgXFx1MDAyNnJlcykpXFxuK1xcdFxcdHJlcyA9IF9fcHRlcF9nZXQocHRlcCk7XFxuK1xcdHJldHVybiByZXM7XFxuIH1cXG4gXFxuICNkZWZpbmUgcG1kcF9nZXQgcG1kcF9nZXRcXG5AQCAtMTE4MSw2ICsxMjYwLDE1IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3B0ZXBfaXB0ZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCBucixcXG4gXFx0fSB3aGlsZSAobnIgIT0gMjU1KTtcXG4gfVxcbiBcXG4rdm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbitcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbitcXHRcXHRcXHRcXHRcXHRwdGVfdCAqcHRlKTtcXG4rI2RlZmluZSBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXNcXG4rXFxuK3ZvaWQgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKHZvaWQpO1xcbit2b2lkIGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSh2b2lkKTtcXG4rdm9pZCBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUodm9pZCk7XFxuK1xcbiAvKlxcbiAgKiBUaGlzIGlzIGhhcmQgdG8gdW5kZXJzdGFuZC4gcHRlcF9nZXRfYW5kX2NsZWFyIGFuZCBwdGVwX2NsZWFyX2ZsdXNoXFxuICAqIGJvdGggY2xlYXIgdGhlIFRMQiBmb3IgdGhlIHVubWFwcGVkIHB0ZS4gVGhlIHJlYXNvbiBpcyB0aGF0XFxuQEAgLTEyMDEsMTAgKzEyODksMTYgQEAgcHRlX3QgcHRlcF94Y2hnX2xhenkoc3RydWN0IG1tX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBwdGVfdCAqLCBwdGVfdCk7XFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxcbiB7XFxuLVxcdHB0ZV90IHB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xcbitcXHRwdGVfdCBwdGU7XFxuK1xcdGludCByZXM7XFxuIFxcbi1cXHRwdGUgPSBwdGVwX3hjaGdfZGlyZWN0KHZtYS1cXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXAsIHB0ZV9ta29sZChwdGUpKTtcXG4tXFx0cmV0dXJuIHB0ZV95b3VuZyhwdGUpO1xcbitcXHRpZiAoIWxhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoYWRkciwgcHRlcCwgXFx1MDAyNnJlcykpIHtcXG4rXFx0XFx0cHRlID0gX19wdGVwX2dldChwdGVwKTtcXG4rXFx0XFx0cHRlID0gcHRlX21rb2xkKHB0ZSk7XFxuK1xcdFxcdHB0ZSA9IHB0ZXBfeGNoZ19kaXJlY3Qodm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgcHRlcCwgcHRlKTtcXG4rXFx0XFx0cmVzID0gcHRlX3lvdW5nKHB0ZSk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHJlcztcXG4gfVxcbiBcXG4gI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSX1lPVU5HX0ZMVVNIXFxuQEAgLTEyMjAsNyArMTMxNCw4IEBAIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiB7XFxuIFxcdHB0ZV90IHJlcztcXG4gXFxuLVxcdHJlcyA9IHB0ZXBfeGNoZ19sYXp5KG1tLCBhZGRyLCBwdGVwLCBfX3B0ZShfUEFHRV9JTlZBTElEKSk7XFxuK1xcdGlmICghbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKGFkZHIsIHB0ZXAsIFxcdTAwMjZyZXMpKVxcbitcXHRcXHRyZXMgPSBwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpO1xcbiBcXHRwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcihtbSwgYWRkciwgcmVzKTtcXG4gXFx0LyogQXQgdGhpcyBwb2ludCB0aGUgcmVmZXJlbmNlIHRocm91Z2ggdGhlIG1hcHBpbmcgaXMgc3RpbGwgcHJlc2VudCAqL1xcbiBcXHRpZiAobW1faXNfcHJvdGVjdGVkKG1tKSBcXHUwMDI2XFx1MDAyNiBwdGVfcHJlc2VudChyZXMpKVxcbkBAIC0xMjI5LDkgKzEzMjQsMjggQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIH1cXG4gXFxuICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9NT0RJRllfUFJPVF9UUkFOU0FDVElPTlxcbi1wdGVfdCBwdGVwX21vZGlmeV9wcm90X3N0YXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBwdGVfdCAqKTtcXG4tdm9pZCBwdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyxcXG4tXFx0XFx0XFx0ICAgICBwdGVfdCAqLCBwdGVfdCwgcHRlX3QpO1xcbitwdGVfdCBfX19wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBwdGVfdCAqKTtcXG4rdm9pZCBfX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyxcXG4rXFx0XFx0XFx0XFx0cHRlX3QgKiwgcHRlX3QsIHB0ZV90KTtcXG4rXFxuK3N0YXRpYyBpbmxpbmVcXG4rcHRlX3QgcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4rXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxcbit7XFxuK1xcdHB0ZV90IHJlcztcXG4rXFxuK1xcdGlmICghbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydChhZGRyLCBwdGVwLCBcXHUwMDI2cmVzKSlcXG4rXFx0XFx0cmVzID0gX19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydCh2bWEsIGFkZHIsIHB0ZXApO1xcbitcXHRyZXR1cm4gcmVzO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lXFxuK3ZvaWQgcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4rXFx0XFx0XFx0ICAgICBwdGVfdCAqcHRlcCwgcHRlX3Qgb2xkX3B0ZSwgcHRlX3QgcHRlKVxcbit7XFxuK1xcdGlmICghbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoYWRkciwgcHRlcCwgb2xkX3B0ZSwgcHRlKSlcXG4rXFx0XFx0X19fcHRlcF9tb2RpZnlfcHJvdF9jb21taXQodm1hLCBhZGRyLCBwdGVwLCBvbGRfcHRlLCBwdGUpO1xcbit9XFxuIFxcbiAjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfQ0xFQVJfRkxVU0hcXG4gc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbkBAIC0xMjYxLDExICsxMzc1LDEzIEBAIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9nZXRfYW5kX2NsZWFyX2Z1bGwoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIHtcXG4gXFx0cHRlX3QgcmVzO1xcbiBcXG4tXFx0aWYgKGZ1bGwpIHtcXG4tXFx0XFx0cmVzID0gcHRlcF9nZXQocHRlcCk7XFxuLVxcdFxcdHNldF9wdGUocHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRyZXMgPSBwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpO1xcbitcXHRpZiAoIWxhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcihhZGRyLCBwdGVwLCBcXHUwMDI2cmVzKSkge1xcbitcXHRcXHRpZiAoZnVsbCkge1xcbitcXHRcXHRcXHRyZXMgPSBfX3B0ZXBfZ2V0KHB0ZXApO1xcbitcXHRcXHRcXHRfX3NldF9wdGUocHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRyZXMgPSBwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFx0cGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXIobW0sIGFkZHIsIHJlcyk7XFxuIFxcdC8qIEF0IHRoaXMgcG9pbnQgdGhlIHJlZmVyZW5jZSB0aHJvdWdoIHRoZSBtYXBwaW5nIGlzIHN0aWxsIHByZXNlbnQgKi9cXG5AQCAtMTI5MSwxMCArMTQwNywxNSBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgcHRlcF9zZXRfd3Jwcm90ZWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxcbiB7XFxuLVxcdHB0ZV90IHB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xcbitcXHRwdGVfdCBwdGU7XFxuIFxcbi1cXHRpZiAocHRlX3dyaXRlKHB0ZSkpXFxuLVxcdFxcdHB0ZXBfeGNoZ19sYXp5KG1tLCBhZGRyLCBwdGVwLCBwdGVfd3Jwcm90ZWN0KHB0ZSkpO1xcbitcXHRpZiAoIWxhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdChhZGRyLCBwdGVwKSkge1xcbitcXHRcXHRwdGUgPSBfX3B0ZXBfZ2V0KHB0ZXApO1xcbitcXHRcXHRpZiAocHRlX3dyaXRlKHB0ZSkpIHtcXG4rXFx0XFx0XFx0cHRlID0gcHRlX3dycHJvdGVjdChwdGUpO1xcbitcXHRcXHRcXHRwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgcHRlKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTEzMjcsNyArMTQ0OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfZml4X3NwdXJpb3VzX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHQgKiBQVEUgZG9lcyBub3QgaGF2ZSBfUEFHRV9QUk9URUNUIHNldCwgdG8gYXZvaWQgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQuXFxuIFxcdCAqIEEgbG9jYWwgUkRQIGNhbiBiZSB1c2VkIHRvIGRvIHRoZSBmbHVzaC5cXG4gXFx0ICovXFxuLVxcdGlmIChjcHVfaGFzX3JkcCgpIFxcdTAwMjZcXHUwMDI2ICEocHRlX3ZhbChwdGVwX2dldChwdGVwKSkgXFx1MDAyNiBfUEFHRV9QUk9URUNUKSlcXG4rXFx0aWYgKGNwdV9oYXNfcmRwKCkgXFx1MDAyNlxcdTAwMjYgIShwdGVfdmFsKF9fcHRlcF9nZXQocHRlcCkpIFxcdTAwMjYgX1BBR0VfUFJPVEVDVCkpXFxuIFxcdFxcdF9fcHRlcF9yZHAoYWRkcmVzcywgcHRlcCwgMSk7XFxuIH1cXG4gI2RlZmluZSBmbHVzaF90bGJfZml4X3NwdXJpb3VzX2ZhdWx0IGZsdXNoX3RsYl9maXhfc3B1cmlvdXNfZmF1bHRcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jXFxuaW5kZXggYjYwMjg0MzI4ZmUzZC4uZjVhM2M5ZTFiNmI4OCAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmNcXG4rKysgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmNcXG5AQCAtNzcsNiArNzcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL21hY2Nlc3MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS91di5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2FzbS1vZmZzZXRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vbGF6eV9tbXUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImVudHJ5LmhcXFwiXFxuIFxcbiAvKlxcbkBAIC0xMDEyLDUgKzEwMTMsNiBAQCB2b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXFxuIFxcbiB2b2lkIF9faW5pdCBhcmNoX2NwdV9maW5hbGl6ZV9pbml0KHZvaWQpXFxuIHtcXG4rXFx0bGF6eV9tbXVfb25saW5lX2Jvb3RfY3B1KCk7XFxuIFxcdHNjbHBfaW5pdCgpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jXFxuaW5kZXggMGJhN2Y4OWI4MTYxMS4uMGE4MjZiYmFmMWRkYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jXFxuKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuY1xcbkBAIC01OSw2ICs1OSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vdG9wb2xvZ3kuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS92ZHNvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vbWFjY2Vzcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL2xhenlfbW11LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJlbnRyeS5oXFxcIlxcbiBcXG4gZW51bSB7XFxuQEAgLTg2Niw2ICs4NjcsMTEgQEAgaW50IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGlkbGUpXFxuIFxcdHJjID0gcGNwdV9hbGxvY19sb3djb3JlKHBjcHUsIGNwdSk7XFxuIFxcdGlmIChyYylcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbitcXHRyYyA9IGxhenlfbW11X29ubGluZV9jcHUoR0ZQX0tFUk5FTCwgY3B1KTtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdHBjcHVfZnJlZV9sb3djb3JlKHBjcHUsIGNwdSk7XFxuK1xcdFxcdHJldHVybiByYztcXG4rXFx0fVxcbiBcXHQvKlxcbiBcXHQgKiBNYWtlIHN1cmUgZ2xvYmFsIGNvbnRyb2wgcmVnaXN0ZXIgY29udGVudHMgZG8gbm90IGNoYW5nZVxcbiBcXHQgKiB1bnRpbCBuZXcgQ1BVIGhhcyBpbml0aWFsaXplZCBjb250cm9sIHJlZ2lzdGVycy5cXG5AQCAtOTIxLDYgKzkyNyw3IEBAIHZvaWQgX19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpXFxuIFxcdHBjcHUgPSBwZXJfY3B1X3B0cihcXHUwMDI2cGNwdV9kZXZpY2VzLCBjcHUpO1xcbiBcXHR3aGlsZSAoIXBjcHVfc3RvcHBlZChwY3B1KSlcXG4gXFx0XFx0Y3B1X3JlbGF4KCk7XFxuK1xcdGxhenlfbW11X29mZmxpbmVfY3B1KGNwdSk7XFxuIFxcdHBjcHVfZnJlZV9sb3djb3JlKHBjcHUsIGNwdSk7XFxuIFxcdGNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbW1fY3B1bWFzayhcXHUwMDI2aW5pdF9tbSkpO1xcbiBcXHRjcHVtYXNrX2NsZWFyX2NwdShjcHUsIFxcdTAwMjZpbml0X21tLmNvbnRleHQuY3B1X2F0dGFjaF9tYXNrKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL01ha2VmaWxlIGIvYXJjaC9zMzkwL21tL01ha2VmaWxlXFxuaW5kZXggMTkzODk5YzM5Y2E3Zi4uOTZjYWMzZTk5ZjUxNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvbW0vTWFrZWZpbGVcXG4rKysgYi9hcmNoL3MzOTAvbW0vTWFrZWZpbGVcXG5AQCAtNCw2ICs0LDcgQEBcXG4gI1xcbiBcXG4gb2JqLXlcXHRcXHQ6PSBpbml0Lm8gZmF1bHQubyBleHRtZW0ubyBtbWFwLm8gdm1lbS5vIG1hY2Nlc3Mub1xcbitvYmoteVxcdFxcdDo9IGluaXQubyBmYXVsdC5vIGV4dG1lbS5vIG1tYXAubyB2bWVtLm8gbWFjY2Vzcy5vIGxhenlfbW11Lm9cXG4gb2JqLXlcXHRcXHQrPSBwYWdlLXN0YXRlcy5vIHBhZ2VhdHRyLm8gcGd0YWJsZS5vIHBnYWxsb2MubyBleHRhYmxlLm9cXG4gXFxuIG9iai0kKENPTkZJR19DTU0pXFx0XFx0Kz0gY21tLm9cXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2xhenlfbW11LmMgYi9hcmNoL3MzOTAvbW0vbGF6eV9tbXUuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2UzYTQxMTVlYTA0OFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9hcmNoL3MzOTAvbW0vbGF6eV9tbXUuY1xcbkBAIC0wLDAgKzEsNDE4IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZ3RhYmxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rYXNhbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL2ZhY2lsaXR5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vbGF6eV9tbXUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2t1bml0L3Zpc2liaWxpdHkuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgUFRFX1BPSVNPTlxcdF9QQUdFX0xBUkdFXFxuK1xcbitzdHJ1Y3QgaXB0ZV9yYW5nZSB7XFxuK1xcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbitcXHR1bnNpZ25lZCBsb25nIGJhc2VfYWRkcjtcXG4rXFx0dW5zaWduZWQgbG9uZyBiYXNlX2VuZDtcXG4rXFx0cHRlX3QgKmJhc2VfcHRlO1xcbitcXHRwdGVfdCAqc3RhcnRfcHRlO1xcbitcXHRwdGVfdCAqZW5kX3B0ZTtcXG4rXFx0cHRlX3QgY2FjaGVbUFRSU19QRVJfUFRFXTtcXG4rfTtcXG4rXFxuK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgaXB0ZV9yYW5nZSAqLCBpcHRlX3JhbmdlKTtcXG4rXFxuK3N0YXRpYyBpbnQgY291bnRfY29udGlndW91cyhwdGVfdCAqc3RhcnQsIHB0ZV90ICplbmQsIGJvb2wgKnZhbGlkKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcGFnZV9pbnZhbGlkX2JpdDtcXG4rXFx0cHRlX3QgKnB0ZXAsIHB0ZTtcXG4rXFxuK1xcdHB0ZSA9IF9fcHRlcF9nZXQoc3RhcnQpO1xcbitcXHRwYWdlX2ludmFsaWRfYml0ID0gcHRlX3ZhbChwdGUpIFxcdTAwMjYgX1BBR0VfSU5WQUxJRDtcXG4rXFxuK1xcdGZvciAocHRlcCA9IHN0YXJ0ICsgMTsgcHRlcCBcXHUwMDNjIGVuZDsgcHRlcCsrKSB7XFxuK1xcdFxcdHB0ZSA9IF9fcHRlcF9nZXQocHRlcCk7XFxuK1xcdFxcdGlmICgocHRlX3ZhbChwdGUpIFxcdTAwMjYgX1BBR0VfSU5WQUxJRCkgIT0gcGFnZV9pbnZhbGlkX2JpdClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdCp2YWxpZCA9ICEocGFnZV9pbnZhbGlkX2JpdCk7XFxuK1xcdHJldHVybiBwdGVwIC0gc3RhcnQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIF9faW52YWxpZGF0ZV9wdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4rXFx0XFx0XFx0XFx0ICAgaW50IG5yX3B0ZXMsIHB0ZV90ICpwdGVwKVxcbit7XFxuK1xcdGF0b21pY19pbmMoXFx1MDAyNm1tLVxcdTAwM2Vjb250ZXh0LmZsdXNoX2NvdW50KTtcXG4rXFx0aWYgKGNwdV9oYXNfdGxiX2xjKCkgXFx1MDAyNlxcdTAwMjYgY3B1bWFza19lcXVhbChtbV9jcHVtYXNrKG1tKSwgY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKSlcXG4rXFx0XFx0X19wdGVwX2lwdGVfcmFuZ2UoYWRkciwgbnJfcHRlcyAtIDEsIHB0ZXAsIElQVEVfTE9DQUwpO1xcbitcXHRlbHNlXFxuK1xcdFxcdF9fcHRlcF9pcHRlX3JhbmdlKGFkZHIsIG5yX3B0ZXMgLSAxLCBwdGVwLCBJUFRFX0dMT0JBTCk7XFxuK1xcdGF0b21pY19kZWMoXFx1MDAyNm1tLVxcdTAwM2Vjb250ZXh0LmZsdXNoX2NvdW50KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBpbnZhbGlkYXRlX3B0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbitcXHRcXHRcXHRcXHRwdGVfdCAqc3RhcnQsIHB0ZV90ICplbmQpXFxuK3tcXG4rXFx0aW50IG5yX3B0ZXM7XFxuK1xcdGJvb2wgdmFsaWQ7XFxuK1xcbitcXHRucl9wdGVzID0gY291bnRfY29udGlndW91cyhzdGFydCwgZW5kLCBcXHUwMDI2dmFsaWQpO1xcbitcXHRpZiAodmFsaWQpXFxuK1xcdFxcdF9faW52YWxpZGF0ZV9wdGVfcmFuZ2UobW0sIGFkZHIsIG5yX3B0ZXMsIHN0YXJ0KTtcXG4rXFxuK1xcdHJldHVybiBucl9wdGVzO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzZXRfcHRlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdFxcdCAgcHRlX3QgKnN0YXJ0LCBwdGVfdCAqZW5kLCBwdGVfdCAqY2FjaGUpXFxuK3tcXG4rXFx0aW50IG5yX3B0ZXMsIG5yX3RvdGFsID0gZW5kIC0gc3RhcnQ7XFxuK1xcdHB0ZV90ICpwdGVwID0gc3RhcnQ7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0a2FzYW5fdW5wb2lzb25fcHRlKHN0YXJ0LCBucl90b3RhbCk7XFxuK1xcdHdoaWxlIChwdGVwIFxcdTAwM2MgZW5kKSB7XFxuK1xcdFxcdG5yX3B0ZXMgPSBpbnZhbGlkYXRlX3B0ZV9yYW5nZShtbSwgYWRkciwgcHRlcCwgZW5kKTtcXG4rXFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9wdGVzOyBpKyssIHB0ZXArKywgY2FjaGUrKykge1xcbitcXHRcXHRcXHRfX3NldF9wdGUocHRlcCwgKmNhY2hlKTtcXG4rXFx0XFx0XFx0KmNhY2hlID0gX19wdGUoUFRFX1BPSVNPTik7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGFkZHIgKz0gbnJfcHRlcyAqIFBBR0VfU0laRTtcXG4rXFx0fVxcbitcXHRrYXNhbl9wb2lzb25fcHRlKHN0YXJ0LCBucl90b3RhbCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVudGVyX2lwdGVfbm9yYW5nZSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBpcHRlX3JhbmdlIF9fbWF5YmVfdW51c2VkICpyYW5nZTtcXG4rXFxuK1xcdGlmICghdGVzdF9mYWNpbGl0eSgxMykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4rXFxuK1xcdHJhbmdlID0gZ2V0X2NwdV92YXIoaXB0ZV9yYW5nZSk7XFxuK1xcdGdldF9sb3djb3JlKCktXFx1MDAzZWxhenlfbW11X2NvdW50Kys7XFxuK1xcbitcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZW50ZXJfaXB0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4rXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBwdGVfdCAqcHRlKVxcbit7XFxuK1xcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcXG4rXFx0dW5zaWduZWQgaW50IG5yX3B0ZXM7XFxuK1xcbitcXHRpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuK1xcbitcXHRyYW5nZSA9IGdldF9jcHVfdmFyKGlwdGVfcmFuZ2UpO1xcbitcXHRnZXRfbG93Y29yZSgpLVxcdTAwM2VsYXp5X21tdV9jb3VudCsrO1xcbitcXG4rXFx0aWYgKG1tX2lzX3Byb3RlY3RlZChtbSkpIHtcXG4rXFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0cmFuZ2UtXFx1MDAzZW1tID0gbW07XFxuK1xcdHJhbmdlLVxcdTAwM2ViYXNlX2FkZHIgPSBhZGRyO1xcbitcXHRyYW5nZS1cXHUwMDNlYmFzZV9lbmQgPSBlbmQ7XFxuK1xcdHJhbmdlLVxcdTAwM2ViYXNlX3B0ZSA9IHB0ZTtcXG4rXFxuK1xcdG5yX3B0ZXMgPSAocmFuZ2UtXFx1MDAzZWJhc2VfZW5kIC0gcmFuZ2UtXFx1MDAzZWJhc2VfYWRkcikgLyBQQUdFX1NJWkU7XFxuK1xcdGthc2FuX3BvaXNvbl9wdGUocmFuZ2UtXFx1MDAzZWJhc2VfcHRlLCBucl9wdGVzKTtcXG4rXFxuK1xcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBsZWF2ZV9pcHRlX3JhbmdlKHZvaWQpXFxuK3tcXG4rXFx0cHRlX3QgKnB0ZXAsICpzdGFydCwgKnN0YXJ0X2NhY2hlLCAqY2FjaGU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkciwgYWRkcjtcXG4rXFx0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xcbitcXHR1bnNpZ25lZCBpbnQgbnJfcHRlcztcXG4rXFx0aW50IHN0YXJ0X2lkeDtcXG4rXFxuK1xcdGlmICghdGVzdF9mYWNpbGl0eSgxMykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X3ByZWVtcHRpb25fZGlzYWJsZWQoKTtcXG4rXFx0cmFuZ2UgPSB0aGlzX2NwdV9yZWFkKGlwdGVfcmFuZ2UpO1xcbitcXHRpZiAoIXJhbmdlLVxcdTAwM2VtbSlcXG4rXFx0XFx0Z290byBub3JhbmdlO1xcbitcXHRpZiAoIXJhbmdlLVxcdTAwM2VzdGFydF9wdGUpXFxuK1xcdFxcdGdvdG8gZG9uZTtcXG4rXFxuK1xcdHN0YXJ0ID0gcmFuZ2UtXFx1MDAzZXN0YXJ0X3B0ZTtcXG4rXFx0c3RhcnRfaWR4ID0gcmFuZ2UtXFx1MDAzZXN0YXJ0X3B0ZSAtIHJhbmdlLVxcdTAwM2ViYXNlX3B0ZTtcXG4rXFx0c3RhcnRfYWRkciA9IHJhbmdlLVxcdTAwM2ViYXNlX2FkZHIgKyBzdGFydF9pZHggKiBQQUdFX1NJWkU7XFxuK1xcdGFkZHIgPSBzdGFydF9hZGRyO1xcbitcXHRzdGFydF9jYWNoZSA9IFxcdTAwMjZyYW5nZS1cXHUwMDNlY2FjaGVbc3RhcnRfaWR4XTtcXG4rXFx0Y2FjaGUgPSBzdGFydF9jYWNoZTtcXG4rXFx0Zm9yIChwdGVwID0gc3RhcnQ7IHB0ZXAgXFx1MDAzYyByYW5nZS1cXHUwMDNlZW5kX3B0ZTsgcHRlcCsrLCBjYWNoZSsrLCBhZGRyICs9IFBBR0VfU0laRSkge1xcbitcXHRcXHRpZiAocHRlX3ZhbCgqY2FjaGUpID09IFBURV9QT0lTT04pIHtcXG4rXFx0XFx0XFx0aWYgKHN0YXJ0KSB7XFxuK1xcdFxcdFxcdFxcdHNldF9wdGVfcmFuZ2UocmFuZ2UtXFx1MDAzZW1tLCBzdGFydF9hZGRyLCBzdGFydCwgcHRlcCwgc3RhcnRfY2FjaGUpO1xcbitcXHRcXHRcXHRcXHRzdGFydCA9IE5VTEw7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fSBlbHNlIGlmICghc3RhcnQpIHtcXG4rXFx0XFx0XFx0c3RhcnQgPSBwdGVwO1xcbitcXHRcXHRcXHRzdGFydF9hZGRyID0gYWRkcjtcXG4rXFx0XFx0XFx0c3RhcnRfY2FjaGUgPSBjYWNoZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdHNldF9wdGVfcmFuZ2UocmFuZ2UtXFx1MDAzZW1tLCBzdGFydF9hZGRyLCBzdGFydCwgcHRlcCwgc3RhcnRfY2FjaGUpO1xcbitcXG4rXFx0cmFuZ2UtXFx1MDAzZXN0YXJ0X3B0ZSA9IE5VTEw7XFxuK1xcdHJhbmdlLVxcdTAwM2VlbmRfcHRlID0gTlVMTDtcXG4rXFxuK2RvbmU6XFxuK1xcdG5yX3B0ZXMgPSAocmFuZ2UtXFx1MDAzZWJhc2VfZW5kIC0gcmFuZ2UtXFx1MDAzZWJhc2VfYWRkcikgLyBQQUdFX1NJWkU7XFxuK1xcdGthc2FuX3VucG9pc29uX3B0ZShyYW5nZS1cXHUwMDNlYmFzZV9wdGUsIG5yX3B0ZXMpO1xcbitcXG4rXFx0cmFuZ2UtXFx1MDAzZW1tID0gTlVMTDtcXG4rXFx0cmFuZ2UtXFx1MDAzZWJhc2VfYWRkciA9IDA7XFxuK1xcdHJhbmdlLVxcdTAwM2ViYXNlX2VuZCA9IDA7XFxuK1xcdHJhbmdlLVxcdTAwM2ViYXNlX3B0ZSA9IE5VTEw7XFxuK1xcbitub3JhbmdlOlxcbitcXHRnZXRfbG93Y29yZSgpLVxcdTAwM2VsYXp5X21tdV9jb3VudC0tO1xcbitcXHRwdXRfY3B1X3ZhcihpcHRlX3JhbmdlKTtcXG4rXFxuK1xcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBmbHVzaF9sYXp5X21tdV9tb2RlKHZvaWQpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBhZGRyLCBlbmQ7XFxuK1xcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuK1xcdHB0ZV90ICpwdGU7XFxuK1xcbitcXHRpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRyYW5nZSA9IGdldF9jcHVfdmFyKGlwdGVfcmFuZ2UpO1xcbitcXHRpZiAocmFuZ2UtXFx1MDAzZW1tKSB7XFxuK1xcdFxcdG1tID0gcmFuZ2UtXFx1MDAzZW1tO1xcbitcXHRcXHRhZGRyID0gcmFuZ2UtXFx1MDAzZWJhc2VfYWRkcjtcXG4rXFx0XFx0ZW5kID0gcmFuZ2UtXFx1MDAzZWJhc2VfZW5kO1xcbitcXHRcXHRwdGUgPSByYW5nZS1cXHUwMDNlYmFzZV9wdGU7XFxuK1xcbitcXHRcXHRsZWF2ZV9pcHRlX3JhbmdlKCk7XFxuK1xcdFxcdGVudGVyX2lwdGVfcmFuZ2UobW0sIGFkZHIsIGVuZCwgcHRlKTtcXG4rXFx0fVxcbitcXHRwdXRfY3B1X3ZhcihpcHRlX3JhbmdlKTtcXG4rfVxcbitcXG4rdm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGUodm9pZClcXG4re1xcbitcXHRlbnRlcl9pcHRlX25vcmFuZ2UoKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSk7XFxuK1xcbit2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuK1xcdFxcdFxcdFxcdFxcdHB0ZV90ICpwdGUpXFxuK3tcXG4rXFx0ZW50ZXJfaXB0ZV9yYW5nZShtbSwgYWRkciwgZW5kLCBwdGUpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfSUZfS1VOSVQoYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcyk7XFxuK1xcbit2b2lkIGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSh2b2lkKVxcbit7XFxuK1xcdGxlYXZlX2lwdGVfcmFuZ2UoKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSk7XFxuK1xcbit2b2lkIGFyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZSh2b2lkKVxcbit7XFxuK1xcdGZsdXNoX2xhenlfbW11X21vZGUoKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGFyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZSk7XFxuK1xcbitzdGF0aWMgdm9pZCBfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2UsIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGlkeCA9IHB0ZXAgLSByYW5nZS1cXHUwMDNlYmFzZV9wdGU7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9wcmVlbXB0aW9uX2Rpc2FibGVkKCk7XFxuK1xcdHJhbmdlLVxcdTAwM2VjYWNoZVtpZHhdID0gcHRlO1xcbitcXG4rXFx0aWYgKCFyYW5nZS1cXHUwMDNlc3RhcnRfcHRlKSB7XFxuK1xcdFxcdHJhbmdlLVxcdTAwM2VzdGFydF9wdGUgPSBwdGVwO1xcbitcXHRcXHRyYW5nZS1cXHUwMDNlZW5kX3B0ZSA9IHB0ZXAgKyAxO1xcbitcXHR9IGVsc2UgaWYgKHB0ZXAgXFx1MDAzYyByYW5nZS1cXHUwMDNlc3RhcnRfcHRlKSB7XFxuK1xcdFxcdHJhbmdlLVxcdTAwM2VzdGFydF9wdGUgPSBwdGVwO1xcbitcXHR9IGVsc2UgaWYgKHB0ZXAgKyAxIFxcdTAwM2UgcmFuZ2UtXFx1MDAzZWVuZF9wdGUpIHtcXG4rXFx0XFx0cmFuZ2UtXFx1MDAzZWVuZF9wdGUgPSBwdGVwICsgMTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgcHRlX3QgX19pcHRlX3JhbmdlX3B0ZXBfZ2V0KHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZSwgcHRlX3QgKnB0ZXApXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGlkeCA9IHB0ZXAgLSByYW5nZS1cXHUwMDNlYmFzZV9wdGU7XFxuK1xcdHB0ZV90IHB0ZTtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X3ByZWVtcHRpb25fZGlzYWJsZWQoKTtcXG4rXFx0aWYgKHB0ZV92YWwocmFuZ2UtXFx1MDAzZWNhY2hlW2lkeF0pID09IFBURV9QT0lTT04pIHtcXG4rXFx0XFx0a2FzYW5fdW5wb2lzb25fcHRlKHB0ZXAsIDEpO1xcbitcXHRcXHRwdGUgPSBfX3B0ZXBfZ2V0KHB0ZXApO1xcbitcXHRcXHRrYXNhbl9wb2lzb25fcHRlKHB0ZXAsIDEpO1xcbitcXG4rXFx0XFx0cmV0dXJuIHB0ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJhbmdlLVxcdTAwM2VjYWNoZVtpZHhdO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGlwdGVfcmFuZ2UgKnRoaXNfaXB0ZV9yYW5nZShwdGVfdCAqcHRlcClcXG4re1xcbitcXHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XFxuK1xcdHVuc2lnbmVkIGludCBucl9wdGVzO1xcbitcXG4rXFx0cmFuZ2UgPSB0aGlzX2NwdV9yZWFkKGlwdGVfcmFuZ2UpO1xcbitcXHRpZiAocHRlcCBcXHUwMDNjIHJhbmdlLVxcdTAwM2ViYXNlX3B0ZSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdG5yX3B0ZXMgPSAocmFuZ2UtXFx1MDAzZWJhc2VfZW5kIC0gcmFuZ2UtXFx1MDAzZWJhc2VfYWRkcikgLyBQQUdFX1NJWkU7XFxuK1xcdGlmIChwdGVwIFxcdTAwM2U9IHJhbmdlLVxcdTAwM2ViYXNlX3B0ZSArIG5yX3B0ZXMpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0cmV0dXJuIHJhbmdlO1xcbit9XFxuK1xcbitib29sIF9fbGF6eV9tbXVfc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxcbit7XFxuK1xcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcXG4rXFxuK1xcdHJhbmdlID0gdGhpc19pcHRlX3JhbmdlKHB0ZXApO1xcbitcXHRpZiAoIXJhbmdlKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTtcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitib29sIF9fbGF6eV9tbXVfcHRlcF9nZXQocHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpXFxuK3tcXG4rXFx0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xcbitcXG4rXFx0cmFuZ2UgPSB0aGlzX2lwdGVfcmFuZ2UocHRlcCk7XFxuK1xcdGlmICghcmFuZ2UpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdCpyZXMgPSBfX2lwdGVfcmFuZ2VfcHRlcF9nZXQocmFuZ2UsIHB0ZXApO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK2Jvb2wgX19sYXp5X21tdV9wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIGludCAqcmVzKVxcbit7XFxuK1xcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcXG4rXFx0cHRlX3QgcHRlLCBvbGQ7XFxuK1xcbitcXHRyYW5nZSA9IHRoaXNfaXB0ZV9yYW5nZShwdGVwKTtcXG4rXFx0aWYgKCFyYW5nZSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0b2xkID0gX19pcHRlX3JhbmdlX3B0ZXBfZ2V0KHJhbmdlLCBwdGVwKTtcXG4rXFx0cHRlID0gcHRlX21rb2xkKG9sZCk7XFxuK1xcdF9faXB0ZV9yYW5nZV9zZXRfcHRlKHJhbmdlLCBwdGVwLCBwdGUpO1xcbitcXHQqcmVzID0gcHRlX3lvdW5nKG9sZCk7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rYm9vbCBfX2xhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcih1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKVxcbit7XFxuK1xcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcXG4rXFx0cHRlX3QgcHRlLCBvbGQ7XFxuK1xcbitcXHRyYW5nZSA9IHRoaXNfaXB0ZV9yYW5nZShwdGVwKTtcXG4rXFx0aWYgKCFyYW5nZSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0b2xkID0gX19pcHRlX3JhbmdlX3B0ZXBfZ2V0KHJhbmdlLCBwdGVwKTtcXG4rXFx0cHRlID0gX19wdGUoX1BBR0VfSU5WQUxJRCk7XFxuK1xcdF9faXB0ZV9yYW5nZV9zZXRfcHRlKHJhbmdlLCBwdGVwLCBwdGUpO1xcbitcXHQqcmVzID0gb2xkO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK2Jvb2wgX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpXFxuK3tcXG4rXFx0cmV0dXJuIF9fbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKGFkZHIsIHB0ZXAsIHJlcyk7XFxuK31cXG4rXFxuK2Jvb2wgX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxcbitcXHRcXHRcXHRcXHRcXHRwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpXFxuK3tcXG4rXFx0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xcbitcXG4rXFx0cmFuZ2UgPSB0aGlzX2lwdGVfcmFuZ2UocHRlcCk7XFxuK1xcdGlmICghcmFuZ2UpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdF9faXB0ZV9yYW5nZV9zZXRfcHRlKHJhbmdlLCBwdGVwLCBwdGUpO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK2Jvb2wgX19sYXp5X21tdV9wdGVwX3NldF93cnByb3RlY3QodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcXG4re1xcbitcXHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XFxuK1xcdHB0ZV90IHB0ZTtcXG4rXFxuK1xcdHJhbmdlID0gdGhpc19pcHRlX3JhbmdlKHB0ZXApO1xcbitcXHRpZiAoIXJhbmdlKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRwdGUgPSBfX2lwdGVfcmFuZ2VfcHRlcF9nZXQocmFuZ2UsIHB0ZXApO1xcbitcXHRpZiAocHRlX3dyaXRlKHB0ZSkpIHtcXG4rXFx0XFx0cHRlID0gcHRlX3dycHJvdGVjdChwdGUpO1xcbitcXHRcXHRfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK2ludCBsYXp5X21tdV9vbmxpbmVfY3B1KGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGNwdSlcXG4re1xcbitcXHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKCF0ZXN0X2ZhY2lsaXR5KDEzKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyYW5nZSA9IGt6YWxsb2Nfb2JqKCpyYW5nZSwgZ2ZwKTtcXG4rXFx0aWYgKCFyYW5nZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHJhbmdlLVxcdTAwM2VjYWNoZSk7IGkrKylcXG4rXFx0XFx0cmFuZ2UtXFx1MDAzZWNhY2hlW2ldID0gX19wdGUoUFRFX1BPSVNPTik7XFxuK1xcdHBlcl9jcHUoaXB0ZV9yYW5nZSwgY3B1KSA9IHJhbmdlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3ZvaWQgbGF6eV9tbXVfb2ZmbGluZV9jcHUodW5zaWduZWQgaW50IGNwdSlcXG4re1xcbitcXHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XFxuK1xcbitcXHRpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRyYW5nZSA9IHBlcl9jcHUoaXB0ZV9yYW5nZSwgY3B1KTtcXG4rXFx0cGVyX2NwdShpcHRlX3JhbmdlLCBjcHUpID0gTlVMTDtcXG4rXFx0a2ZyZWUocmFuZ2UpO1xcbit9XFxuK1xcbit2b2lkIF9faW5pdCBsYXp5X21tdV9vbmxpbmVfYm9vdF9jcHUodm9pZClcXG4re1xcbitcXHRsYXp5X21tdV9vbmxpbmVfY3B1KEdGUF9BVE9NSUMsIDApO1xcbit9XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jXFxuaW5kZXggNGFjZDhiMTQwYzRiZC4uZGYzNjUyM2JjYmJiYiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jXFxuKysrIGIvYXJjaC9zMzkwL21tL3BndGFibGUuY1xcbkBAIC0xNjYsMTQgKzE2NiwxNCBAQCBwdGVfdCBwdGVwX3hjaGdfbGF6eShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiB9XFxuIEVYUE9SVF9TWU1CT0wocHRlcF94Y2hnX2xhenkpO1xcbiBcXG4tcHRlX3QgcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi1cXHRcXHRcXHQgICAgIHB0ZV90ICpwdGVwKVxcbitwdGVfdCBfX19wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdFxcdFxcdHB0ZV90ICpwdGVwKVxcbiB7XFxuIFxcdHJldHVybiBwdGVwX2ZsdXNoX2xhenkodm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgcHRlcCwgMSk7XFxuIH1cXG4gXFxuLXZvaWQgcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tXFx0XFx0XFx0ICAgICBwdGVfdCAqcHRlcCwgcHRlX3Qgb2xkX3B0ZSwgcHRlX3QgcHRlKVxcbit2b2lkIF9fX3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdFxcdFxcdHB0ZV90ICpwdGVwLCBwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpXFxuIHtcXG4gXFx0c2V0X3B0ZShwdGVwLCBwdGUpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuY1xcbmluZGV4IDIyOWQxZmMzZDdmMWMuLjkxNjc4NWMzYjJlMGIgMTAwNjQ0XFxuLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jXFxuKysrIGIvZnMvcHJvYy90YXNrX21tdS5jXFxuQEAgLTI4NTIsNyArMjg1Miw3IEBAIHN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4tXFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG4rXFx0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKHZtYS1cXHUwMDNldm1fbW0sIHN0YXJ0LCBlbmQsIHN0YXJ0X3B0ZSk7XFxuIFxcbiBcXHRpZiAoKHAtXFx1MDAzZWFyZy5mbGFncyBcXHUwMDI2IFBNX1NDQU5fV1BfTUFUQ0hJTkcpIFxcdTAwMjZcXHUwMDI2ICFwLVxcdTAwM2V2ZWNfb3V0KSB7XFxuIFxcdFxcdC8qIEZhc3QgcGF0aCBmb3IgcGVyZm9ybWluZyBleGNsdXNpdmUgV1AgKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rYXNhbi5oIGIvaW5jbHVkZS9saW51eC9rYXNhbi5oXFxuaW5kZXggYmYyMzNiZGU2OGM3ZS4uMWFhNGQ5ZGQyNDg1YSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2thc2FuLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2thc2FuLmhcXG5AQCAtNiw2ICs2LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2thc2FuLWVuYWJsZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2thc2FuLXRhZ3MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGd0YWJsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RhdGljX2tleS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gXFxuQEAgLTM1LDggKzM2LDYgQEAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19iaXR3aXNlIGthc2FuX3ZtYWxsb2NfZmxhZ3NfdDtcXG4gXFxuICNpZiBkZWZpbmVkKENPTkZJR19LQVNBTl9HRU5FUklDKSB8fCBkZWZpbmVkKENPTkZJR19LQVNBTl9TV19UQUdTKVxcbiBcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BndGFibGUuaFxcdTAwM2VcXG4tXFxuIC8qIFNvZnR3YXJlIEtBU0FOIGltcGxlbWVudGF0aW9ucyB1c2Ugc2hhZG93IG1lbW9yeS4gKi9cXG4gXFxuICNpZmRlZiBDT05GSUdfS0FTQU5fU1dfVEFHU1xcbkBAIC0xMzQsNiArMTMzLDIwIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4gXFx0XFx0X19rYXNhbl9wb2lzb25fc2xhYihzbGFiKTtcXG4gfVxcbiBcXG4rdm9pZCBfX2thc2FuX3BvaXNvbl9wdGUocHRlX3QgKnB0ZSwgaW50IG5yKTtcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGthc2FuX3BvaXNvbl9wdGUocHRlX3QgKnB0ZSwgaW50IG5yKVxcbit7XFxuK1xcdGlmIChrYXNhbl9lbmFibGVkKCkpXFxuK1xcdFxcdF9fa2FzYW5fcG9pc29uX3B0ZShwdGUsIG5yKTtcXG4rfVxcbitcXG4rdm9pZCBfX2thc2FuX3VucG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpO1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQga2FzYW5fdW5wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucilcXG4re1xcbitcXHRpZiAoa2FzYW5fZW5hYmxlZCgpKVxcbitcXHRcXHRfX2thc2FuX3VucG9pc29uX3B0ZShwdGUsIG5yKTtcXG4rfVxcbitcXG4gdm9pZCBfX2thc2FuX3VucG9pc29uX25ld19vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB2b2lkICpvYmplY3QpO1xcbiAvKipcXG4gICoga2FzYW5fdW5wb2lzb25fbmV3X29iamVjdCAtIFRlbXBvcmFyaWx5IHVucG9pc29uIGEgbmV3IHNsYWIgb2JqZWN0LlxcbkBAIC00MTQsNiArNDI3LDggQEAgc3RhdGljIGlubGluZSBib29sIGthc2FuX3VucG9pc29uX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fcG9pc29uX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIpIHt9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucikge31cXG4rc3RhdGljIGlubGluZSB2b2lkIGthc2FuX3VucG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl91bnBvaXNvbl9uZXdfb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSxcXG4gXFx0XFx0XFx0XFx0XFx0dm9pZCAqb2JqZWN0KSB7fVxcbiBzdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fcG9pc29uX25ld19vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaCBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXFxuaW5kZXggMjk4MWUzODZkYTdiMy4uY2M4NWRhZjMwNzM5ZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXFxuQEAgLTI3MSw2ICsyNzEsNTAgQEAgc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfZW5hYmxlKHZvaWQpXFxuIFxcdFxcdGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSgpO1xcbiB9XFxuIFxcbisjaWZuZGVmIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXNcXG4rc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHB0ZV90ICpwdGVwKVxcbit7XFxuK1xcdGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSgpO1xcbit9XFxuKyNlbmRpZlxcbitcXG4rLyoqXFxuKyAqIGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcygpIC0gRW5hYmxlIHRoZSBsYXp5IE1NVSBtb2RlIHdpdGggYSBzcGVlZHVwIGhpbnQuXFxuKyAqIEBtbTogQWRkcmVzcyBzcGFjZSB0aGUgcGFnZXMgYXJlIG1hcHBlZCBpbnRvLlxcbisgKiBAYWRkcjogU3RhcnQgYWRkcmVzcyBvZiB0aGUgcmFuZ2UuXFxuKyAqIEBlbmQ6IEVuZCBhZGRyZXNzIG9mIHRoZSByYW5nZS5cXG4rICogQHB0ZXA6IFBhZ2UgdGFibGUgcG9pbnRlciBmb3IgdGhlIGZpcnN0IGVudHJ5LlxcbisgKlxcbisgKiBFbnRlcnMgYSBuZXcgbGF6eSBNTVUgbW9kZSBzZWN0aW9uOyBpZiB0aGUgbW9kZSB3YXMgbm90IGFscmVhZHkgZW5hYmxlZCxcXG4rICogZW5hYmxlcyBpdCBhbmQgY2FsbHMgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcygpLlxcbisgKlxcbisgKiBQVEVzIHRoYXQgZmFsbCB3aXRoaW4gdGhlIHNwZWNpZmllZCByYW5nZSBtaWdodCBvYnNlcnZlIHVwZGF0ZSBzcGVlZHVwcy5cXG4rICogVGhlIFBURXMgbXVzdCBiZWxvbmcgdG8gdGhlIHNwZWNpZmllZCBhZGRyZXNzIHNwYWNlIGFuZCBiZSBpbiB0aGUgc2FtZSBQTUQuXFxuKyAqXFxuKyAqIFRoZXJlIGFyZSBubyByZXF1aXJlbWVudHMgb24gdGhlIG9yZGVyIG9yIHJhbmdlIGNvbXBsZXRlbmVzcyBvZiBQVEVcXG4rICogdXBkYXRlcyBmb3IgdGhlIHNwZWNpZmllZCByYW5nZS5cXG4rICpcXG4rICogTXVzdCBiZSBwYWlyZWQgd2l0aCBhIGNhbGwgdG8gbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCkuXFxuKyAqXFxuKyAqIEhhcyBubyBlZmZlY3QgaWYgY2FsbGVkOlxcbisgKiAtIFdoaWxlIHBhdXNlZCAtIHNlZSBsYXp5X21tdV9tb2RlX3BhdXNlKClcXG4rICogLSBJbiBpbnRlcnJ1cHQgY29udGV4dFxcbisgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgcHRlX3QgKnB0ZXApXFxuK3tcXG4rXFx0c3RydWN0IGxhenlfbW11X3N0YXRlICpzdGF0ZSA9IFxcdTAwMjZjdXJyZW50LVxcdTAwM2VsYXp5X21tdV9zdGF0ZTtcXG4rXFxuK1xcdGlmIChpbl9pbnRlcnJ1cHQoKSB8fCBzdGF0ZS1cXHUwMDNlcGF1c2VfY291bnQgXFx1MDAzZSAwKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRWTV9XQVJOX09OX09OQ0Uoc3RhdGUtXFx1MDAzZWVuYWJsZV9jb3VudCA9PSBVOF9NQVgpO1xcbitcXG4rXFx0aWYgKHN0YXRlLVxcdTAwM2VlbmFibGVfY291bnQrKyA9PSAwKVxcbitcXHRcXHRhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIHB0ZXApO1xcbit9XFxuK1xcbiAvKipcXG4gICogbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCkgLSBEaXNhYmxlIHRoZSBsYXp5IE1NVSBtb2RlLlxcbiAgKlxcbkBAIC0zODcsNiArNDMxLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfcmVzdW1lKHZvaWQpXFxuIH1cXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfZW5hYmxlKHZvaWQpIHt9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHB0ZV90ICpwdGVwKSB7fVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9kaXNhYmxlKHZvaWQpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBsYXp5X21tdV9tb2RlX3BhdXNlKHZvaWQpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBsYXp5X21tdV9tb2RlX3Jlc3VtZSh2b2lkKSB7fVxcbmRpZmYgLS1naXQgYS9tbS9rYXNhbi9jb21tb24uYyBiL21tL2thc2FuL2NvbW1vbi5jXFxuaW5kZXggYjdkMDVjMmE2ZDkzZC4uOTRkMTA2MDk0OTg5MSAxMDA2NDRcXG4tLS0gYS9tbS9rYXNhbi9jb21tb24uY1xcbisrKyBiL21tL2thc2FuL2NvbW1vbi5jXFxuQEAgLTE2Myw2ICsxNjMsMjAgQEAgdm9pZCBfX2thc2FuX3BvaXNvbl9zbGFiKHN0cnVjdCBzbGFiICpzbGFiKVxcbiBcXHRcXHQgICAgIEtBU0FOX1NMQUJfUkVEWk9ORSwgZmFsc2UpO1xcbiB9XFxuIFxcbit2b2lkIF9fa2FzYW5fcG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpXFxuK3tcXG4rXFx0aWYgKElTX0FMSUdORUQoc2l6ZW9mKCpwdGUpLCBLQVNBTl9HUkFOVUxFX1NJWkUpKVxcbitcXHRcXHRrYXNhbl9wb2lzb24ocHRlLCBzaXplb2YoKnB0ZSkgKiBuciwgS0FTQU5fTEFaWV9NTVVfUFRFLCBmYWxzZSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoX19rYXNhbl9wb2lzb25fcHRlKTtcXG4rXFxuK3ZvaWQgX19rYXNhbl91bnBvaXNvbl9wdGUocHRlX3QgKnB0ZSwgaW50IG5yKVxcbit7XFxuK1xcdGlmIChJU19BTElHTkVEKHNpemVvZigqcHRlKSwgS0FTQU5fR1JBTlVMRV9TSVpFKSlcXG4rXFx0XFx0a2FzYW5fdW5wb2lzb24ocHRlLCBzaXplb2YoKnB0ZSkgKiBuciwgZmFsc2UpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKF9fa2FzYW5fdW5wb2lzb25fcHRlKTtcXG4rXFxuIHZvaWQgX19rYXNhbl91bnBvaXNvbl9uZXdfb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSwgdm9pZCAqb2JqZWN0KVxcbiB7XFxuIFxcdGthc2FuX3VucG9pc29uKG9iamVjdCwgY2FjaGUtXFx1MDAzZW9iamVjdF9zaXplLCBmYWxzZSk7XFxuZGlmZiAtLWdpdCBhL21tL2thc2FuL2thc2FuLmggYi9tbS9rYXNhbi9rYXNhbi5oXFxuaW5kZXggZmM5MTY5YTU0NzY2Mi4uMWEyZDE4Y2RiMjFkOSAxMDA2NDRcXG4tLS0gYS9tbS9rYXNhbi9rYXNhbi5oXFxuKysrIGIvbW0va2FzYW4va2FzYW4uaFxcbkBAIC0xNDQsMTIgKzE0NCwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wga2FzYW5fcmVxdWlyZXNfbWV0YSh2b2lkKVxcbiAjZGVmaW5lIEtBU0FOX1BBR0VfUkVEWk9ORVxcdDB4RkUgIC8qIHJlZHpvbmUgZm9yIGttYWxsb2NfbGFyZ2UgYWxsb2NhdGlvbiAqL1xcbiAjZGVmaW5lIEtBU0FOX1NMQUJfUkVEWk9ORVxcdDB4RkMgIC8qIHJlZHpvbmUgZm9yIHNsYWIgb2JqZWN0ICovXFxuICNkZWZpbmUgS0FTQU5fU0xBQl9GUkVFXFx0XFx0MHhGQiAgLyogZnJlZWQgc2xhYiBvYmplY3QgKi9cXG4rI2RlZmluZSBLQVNBTl9MQVpZX01NVV9QVEVcXHQweEZEICAvKiBkaXJlY3QgcHRlIGFjY2VzcyBpbiBsYXp5IG1tdSBtb2RlICovXFxuICNkZWZpbmUgS0FTQU5fVk1BTExPQ19JTlZBTElEXFx0MHhGOCAgLyogaW5hY2Nlc3NpYmxlIHNwYWNlIGluIHZtYXAgYXJlYSAqL1xcbiAjZWxzZVxcbiAjZGVmaW5lIEtBU0FOX1BBR0VfRlJFRVxcdFxcdEtBU0FOX1RBR19JTlZBTElEXFxuICNkZWZpbmUgS0FTQU5fUEFHRV9SRURaT05FXFx0S0FTQU5fVEFHX0lOVkFMSURcXG4gI2RlZmluZSBLQVNBTl9TTEFCX1JFRFpPTkVcXHRLQVNBTl9UQUdfSU5WQUxJRFxcbiAjZGVmaW5lIEtBU0FOX1NMQUJfRlJFRVxcdFxcdEtBU0FOX1RBR19JTlZBTElEXFxuKyNkZWZpbmUgS0FTQU5fTEFaWV9NTVVfUFRFXFx0S0FTQU5fVEFHX0lOVkFMSURcXG4gI2RlZmluZSBLQVNBTl9WTUFMTE9DX0lOVkFMSURcXHRLQVNBTl9UQUdfSU5WQUxJRCAvKiBvbmx5IHVzZWQgZm9yIFNXX1RBR1MgKi9cXG4gI2VuZGlmXFxuIFxcbmRpZmYgLS1naXQgYS9tbS9rYXNhbi9yZXBvcnRfZ2VuZXJpYy5jIGIvbW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuY1xcbmluZGV4IGY1YjhlMzdiMzgwNWMuLjQ4OWQ0YThkNjkwMmQgMTAwNjQ0XFxuLS0tIGEvbW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuY1xcbisrKyBiL21tL2thc2FuL3JlcG9ydF9nZW5lcmljLmNcXG5AQCAtMTEzLDYgKzExMyw5IEBAIHN0YXRpYyBjb25zdCBjaGFyICpnZXRfc2hhZG93X2J1Z190eXBlKHN0cnVjdCBrYXNhbl9yZXBvcnRfaW5mbyAqaW5mbylcXG4gXFx0Y2FzZSBLQVNBTl9TTEFCX0ZSRUVfTUVUQTpcXG4gXFx0XFx0YnVnX3R5cGUgPSBcXFwic2xhYi11c2UtYWZ0ZXItZnJlZVxcXCI7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEtBU0FOX0xBWllfTU1VX1BURTpcXG4rXFx0XFx0YnVnX3R5cGUgPSBcXFwibGF6eS1tbXUtcHRlLWFjY2Vzc1xcXCI7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEtBU0FOX0FMTE9DQV9MRUZUOlxcbiBcXHRjYXNlIEtBU0FOX0FMTE9DQV9SSUdIVDpcXG4gXFx0XFx0YnVnX3R5cGUgPSBcXFwiYWxsb2NhLW91dC1vZi1ib3VuZHNcXFwiO1xcbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcXG5pbmRleCA3NzU1MmIwM2QzMThkLi40NDE5ZDE2YjM5Zjk2IDEwMDY0NFxcbi0tLSBhL21tL21hZHZpc2UuY1xcbisrKyBiL21tL21hZHZpc2UuY1xcbkBAIC00NTIsNyArNDUyLDcgQEAgc3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcXG4gXFx0aWYgKCFzdGFydF9wdGUpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHRmbHVzaF90bGJfYmF0Y2hlZF9wZW5kaW5nKG1tKTtcXG4tXFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG4rXFx0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIHN0YXJ0X3B0ZSk7XFxuIFxcdGZvciAoOyBhZGRyIFxcdTAwM2MgZW5kOyBwdGUgKz0gbnIsIGFkZHIgKz0gbnIgKiBQQUdFX1NJWkUpIHtcXG4gXFx0XFx0bnIgPSAxO1xcbiBcXHRcXHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XFxuQEAgLTUwNyw3ICs1MDcsNyBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxcbiBcXHRcXHRcXHRcXHRpZiAoIXN0YXJ0X3B0ZSlcXG4gXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdFxcdGZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pO1xcbi1cXHRcXHRcXHRcXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xcbitcXHRcXHRcXHRcXHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgc3RhcnRfcHRlKTtcXG4gXFx0XFx0XFx0XFx0aWYgKCFlcnIpXFxuIFxcdFxcdFxcdFxcdFxcdG5yID0gMDtcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTY3NCw3ICs2NzQsNyBAQCBzdGF0aWMgaW50IG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRpZiAoIXN0YXJ0X3B0ZSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdGZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pO1xcbi1cXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xcbitcXHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgc3RhcnRfcHRlKTtcXG4gXFx0Zm9yICg7IGFkZHIgIT0gZW5kOyBwdGUgKz0gbnIsIGFkZHIgKz0gUEFHRV9TSVpFICogbnIpIHtcXG4gXFx0XFx0bnIgPSAxO1xcbiBcXHRcXHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XFxuQEAgLTczNCw3ICs3MzQsNyBAQCBzdGF0aWMgaW50IG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHRcXHRpZiAoIXN0YXJ0X3B0ZSlcXG4gXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdFxcdGZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pO1xcbi1cXHRcXHRcXHRcXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xcbitcXHRcXHRcXHRcXHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgcHRlKTtcXG4gXFx0XFx0XFx0XFx0aWYgKCFlcnIpXFxuIFxcdFxcdFxcdFxcdFxcdG5yID0gMDtcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCA2YjgyODBjZmMxZGJlLi4wY2MwN2IwNDMzODRiIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtMTI3Miw3ICsxMjcyLDcgQEAgY29weV9wdGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsXFxuIFxcdHNwaW5fbG9ja19uZXN0ZWQoc3JjX3B0bCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xcbiBcXHRvcmlnX3NyY19wdGUgPSBzcmNfcHRlO1xcbiBcXHRvcmlnX2RzdF9wdGUgPSBkc3RfcHRlO1xcbi1cXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xcbitcXHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMoc3JjX21tLCBhZGRyLCBlbmQsIHNyY19wdGUpO1xcbiBcXG4gXFx0ZG8ge1xcbiBcXHRcXHRuciA9IDE7XFxuQEAgLTE5MjIsNyArMTkyMiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHphcF9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4gXFx0XFx0cmV0dXJuIGFkZHI7XFxuIFxcbiBcXHRmbHVzaF90bGJfYmF0Y2hlZF9wZW5kaW5nKG1tKTtcXG4tXFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG4rXFx0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIHN0YXJ0X3B0ZSk7XFxuIFxcdGRvIHtcXG4gXFx0XFx0Ym9vbCBhbnlfc2tpcHBlZCA9IGZhbHNlO1xcbiBcXG5AQCAtMjkxOSw3ICsyOTE5LDcgQEAgc3RhdGljIGludCByZW1hcF9wdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsXFxuIFxcdG1hcHBlZF9wdGUgPSBwdGUgPSBwdGVfYWxsb2NfbWFwX2xvY2sobW0sIHBtZCwgYWRkciwgXFx1MDAyNnB0bCk7XFxuIFxcdGlmICghcHRlKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG4rXFx0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIG1hcHBlZF9wdGUpO1xcbiBcXHRkbyB7XFxuIFxcdFxcdEJVR19PTighcHRlX25vbmUocHRlcF9nZXQocHRlKSkpO1xcbiBcXHRcXHRpZiAoIXBmbl9tb2RpZnlfYWxsb3dlZChwZm4sIHByb3QpKSB7XFxuQEAgLTMzMzAsNyArMzMzMCw3IEBAIHN0YXRpYyBpbnQgYXBwbHlfdG9fcHRlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4tXFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG4rXFx0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIG1hcHBlZF9wdGUpO1xcbiBcXG4gXFx0aWYgKGZuKSB7XFxuIFxcdFxcdGRvIHtcXG5kaWZmIC0tZ2l0IGEvbW0vbXByb3RlY3QuYyBiL21tL21wcm90ZWN0LmNcXG5pbmRleCA5Y2JmOTMyYjAyOGNmLi4zZmMyNjQxOGU4MzdkIDEwMDY0NFxcbi0tLSBhL21tL21wcm90ZWN0LmNcXG4rKysgYi9tbS9tcHJvdGVjdC5jXFxuQEAgLTMzNyw3ICszMzcsNyBAQCBzdGF0aWMgbG9uZyBjaGFuZ2VfcHRlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuIFxcdFxcdGlzX3ByaXZhdGVfc2luZ2xlX3RocmVhZGVkID0gdm1hX2lzX3NpbmdsZV90aHJlYWRlZF9wcml2YXRlKHZtYSk7XFxuIFxcbiBcXHRmbHVzaF90bGJfYmF0Y2hlZF9wZW5kaW5nKHZtYS1cXHUwMDNldm1fbW0pO1xcbi1cXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xcbitcXHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXModm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgZW5kLCBwdGUpO1xcbiBcXHRkbyB7XFxuIFxcdFxcdG5yX3B0ZXMgPSAxO1xcbiBcXHRcXHRvbGRwdGUgPSBwdGVwX2dldChwdGUpO1xcbmRpZmYgLS1naXQgYS9tbS9tcmVtYXAuYyBiL21tL21yZW1hcC5jXFxuaW5kZXggZTljOGIxZDA1ODMyYi4uMGRmZTNkZTM5Y2NjNyAxMDA2NDRcXG4tLS0gYS9tbS9tcmVtYXAuY1xcbisrKyBiL21tL21yZW1hcC5jXFxuQEAgLTI2MCw3ICsyNjAsNyBAQCBzdGF0aWMgaW50IG1vdmVfcHRlcyhzdHJ1Y3QgcGFnZXRhYmxlX21vdmVfY29udHJvbCAqcG1jLFxcbiBcXHRpZiAobmV3X3B0bCAhPSBvbGRfcHRsKVxcbiBcXHRcXHRzcGluX2xvY2tfbmVzdGVkKG5ld19wdGwsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcXG4gXFx0Zmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyh2bWEtXFx1MDAzZXZtX21tKTtcXG4tXFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG4rXFx0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBvbGRfYWRkciwgb2xkX2VuZCwgb2xkX3B0ZXApO1xcbiBcXG4gXFx0Zm9yICg7IG9sZF9hZGRyIFxcdTAwM2Mgb2xkX2VuZDsgb2xkX3B0ZXAgKz0gbnJfcHRlcywgb2xkX2FkZHIgKz0gbnJfcHRlcyAqIFBBR0VfU0laRSxcXG4gXFx0XFx0bmV3X3B0ZXAgKz0gbnJfcHRlcywgbmV3X2FkZHIgKz0gbnJfcHRlcyAqIFBBR0VfU0laRSkge1xcbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcXG5pbmRleCBmNGZhMjI3YThkN2YwLi4xYzZlZjhmZDA3OWUwIDEwMDY0NFxcbi0tLSBhL21tL3ZtYWxsb2MuY1xcbisrKyBiL21tL3ZtYWxsb2MuY1xcbkBAIC0xMDksNyArMTA5LDcgQEAgc3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRpZiAoIXB0ZSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xcbitcXHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMoXFx1MDAyNmluaXRfbW0sIGFkZHIsIGVuZCwgcHRlKTtcXG4gXFxuIFxcdGRvIHtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KCFwdGVfbm9uZShwdGVwX2dldChwdGUpKSkpIHtcXG5AQCAtMzkzLDcgKzM5Myw3IEBAIHN0YXRpYyB2b2lkIHZ1bm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0dW5zaWduZWQgbG9uZyBzaXplID0gUEFHRV9TSVpFO1xcbiBcXG4gXFx0cHRlID0gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyKTtcXG4tXFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG4rXFx0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKFxcdTAwMjZpbml0X21tLCBhZGRyLCBlbmQsIHB0ZSk7XFxuIFxcbiBcXHRkbyB7XFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuQEAgLTU2MCw3ICs1NjAsNyBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0aWYgKCFwdGUpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4tXFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG4rXFx0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKFxcdTAwMjZpbml0X21tLCBhZGRyLCBlbmQsIHB0ZSk7XFxuIFxcbiBcXHRkbyB7XFxuIFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gcGFnZXNbKm5yXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6Mzc6NDUuMzc0NzE4ODkzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjEwNDMyNDcyNTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktBU0FOXCIsXG4gICAgXCJLQVNBTl9HRU5FUklDXCIsXG4gICAgXCJIT1RQTFVHX0NQVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZVwiLFxuICAgIFwiYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc1wiLFxuICAgIFwiYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlXCIsXG4gICAgXCJhcmNoX2ZsdXNoX2xhenlfbW11X21vZGVcIixcbiAgICBcImxhenlfbW11X29ubGluZV9jcHVcIixcbiAgICBcImxhenlfbW11X29mZmxpbmVfY3B1XCIsXG4gICAgXCJfX2thc2FuX3BvaXNvbl9wdGVcIixcbiAgICBcIl9fa2FzYW5fdW5wb2lzb25fcHRlXCIsXG4gICAgXCJfX19wdGVwX21vZGlmeV9wcm90X3N0YXJ0XCIsXG4gICAgXCJfX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbGF6eSBNTVUgbW9kZSBmb3IgczM5MCBhcmNoaXRlY3R1cmUsIHdoaWNoIGJhdGNoZXMgUFRFIGludmFsaWRhdGlvbnMgdXNpbmcgdGhlIElQVEUtcmFuZ2UgZmFjaWxpdHkuIEl0IGhvb2tzIGludG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzeXNjYWxscyAobWFkdmlzZSwgbXByb3RlY3QsIG1yZW1hcCwgdm1hbGxvYykgYW5kIENQVSBob3RwbHVnIHBhdGhzLiBJdCBhbHNvIGFkZHMgS0FTQU4gaW5zdHJ1bWVudGF0aW9uIGZvciBkaXJlY3QgUFRFIGFjY2Vzc2VzIGluIGxhenkgTU1VIG1vZGUuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM2YzEyNjczZjM1ZGRmMmExNDc5MTE2NGI1ZGNmOWQ0YzNjZjU0YzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxMjozNzo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWdcbmluZGV4IDg0NDA0ZTY3NzhkNTAuLjc4NDYzMzJkY2QwYTYgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvS2NvbmZpZ1xuKysrIGIvYXJjaC9zMzkwL0tjb25maWdcbkBAIC05Nyw2ICs5Nyw3IEBAIGNvbmZpZyBTMzkwXG4gXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxuIFx0c2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VcbiBcdHNlbGVjdCBBUkNIX0hBU19LQ09WXG4rXHRzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERVxuIFx0c2VsZWN0IEFSQ0hfSEFTX01FTUJBUlJJRVJfU1lOQ19DT1JFXG4gXHRzZWxlY3QgQVJDSF9IQVNfTUVNX0VOQ1JZUFRcbiBcdHNlbGVjdCBBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFNcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbGF6eV9tbXUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sYXp5X21tdS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTgzNjZlOWRlOWJjM1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xhenlfbW11LmhcbkBAIC0wLDAgKzEsOSBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rI2lmbmRlZiBfX0xBWllfTU1VX0hcbisjZGVmaW5lIF9fTEFaWV9NTVVfSFxuK1xuK3ZvaWQgbGF6eV9tbXVfb25saW5lX2Jvb3RfY3B1KHZvaWQpO1xuK2ludCBsYXp5X21tdV9vbmxpbmVfY3B1KGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGNwdSk7XG4rdm9pZCBsYXp5X21tdV9vZmZsaW5lX2NwdSh1bnNpZ25lZCBpbnQgY3B1KTtcbitcbisjZW5kaWYgLyogX19MQVpZX01NVV9IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmhcbmluZGV4IDNiM2VjYzY0Nzk5M2YuLmRiYTIzNjY2NGRhOTAgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oXG5AQCAtMTYzLDcgKzE2Myw3IEBAIHN0cnVjdCBsb3djb3JlIHtcbiBcdF9fczMyXHRwcmVlbXB0X2NvdW50O1x0XHRcdC8qIDB4MDNhOCAqL1xuIFx0X191MzJcdHNwaW5sb2NrX2xvY2t2YWw7XHRcdC8qIDB4MDNhYyAqL1xuIFx0X191MzJcdHNwaW5sb2NrX2luZGV4O1x0XHRcdC8qIDB4MDNiMCAqL1xuLVx0X191OFx0cGFkXzB4MDNiNFsweDAzYjgtMHgwM2I0XTtcdC8qIDB4MDNiNCAqL1xuK1x0X19zMzJcdGxhenlfbW11X2NvdW50O1x0XHRcdC8qIDB4MDNiNCAqL1xuIFx0X191NjRcdHBlcmNwdV9vZmZzZXQ7XHRcdFx0LyogMHgwM2I4ICovXG4gXHRfX3U4XHRwZXJjcHVfcmVnaXN0ZXI7XHRcdC8qIDB4MDNjMCAqL1xuIFx0X191OFx0cGFkXzB4MDNjMVsweDA0MDAtMHgwM2MxXTtcdC8qIDB4MDNjMSAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCA4NTljZTdjN2Q0NTQ0Li4xZThhNzk5ODllZDZlIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTM5LDYgKzM5LDY0IEBAIGVudW0ge1xuIFxuIGV4dGVybiBhdG9taWNfbG9uZ190IGRpcmVjdF9wYWdlc19jb3VudFtQR19ESVJFQ1RfTUFQX01BWF07XG4gXG4rYm9vbCBfX2xhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgaW50ICpyZXMpO1xuK2Jvb2wgX19sYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcyk7XG4rYm9vbCBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcyk7XG4rYm9vbCBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IG9sZF9wdGUsIHB0ZV90IHB0ZSk7XG4rYm9vbCBfX2xhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTtcbitib29sIF9fbGF6eV9tbXVfc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKTtcbitib29sIF9fbGF6eV9tbXVfcHRlcF9nZXQocHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpO1xuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19sYXp5X21tdV9hY3RpdmUodm9pZClcbit7XG4rXHRpZiAoX19pc19kZWZpbmVkKF9fREVDT01QUkVTU09SKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0aWYgKCFnZXRfbG93Y29yZSgpLVx1MDAzZWxhenlfbW11X2NvdW50KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIGlubGluZVxuK2Jvb2wgbGF6eV9tbXVfcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBpbnQgKnJlcylcbit7XG4rXHRpZiAoIWlzX2xhenlfbW11X2FjdGl2ZSgpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRyZXR1cm4gX19sYXp5X21tdV9wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKGFkZHIsIHB0ZXAsIHJlcyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmVcbitib29sIGxhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcih1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKVxuK3tcbitcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdHJldHVybiBfX2xhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcihhZGRyLCBwdGVwLCByZXMpO1xuK31cbitcbitzdGF0aWMgaW5saW5lXG4rYm9vbCBsYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpXG4re1xuK1x0aWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0cmV0dXJuIF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydChhZGRyLCBwdGVwLCByZXMpO1xuK31cbitcbitzdGF0aWMgaW5saW5lXG4rYm9vbCBsYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxuK1x0XHRcdFx0ICAgICAgcHRlX3Qgb2xkX3B0ZSwgcHRlX3QgcHRlKVxuK3tcbitcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdHJldHVybiBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KGFkZHIsIHB0ZXAsIG9sZF9wdGUsIHB0ZSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmVcbitib29sIGxhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxuK3tcbitcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdHJldHVybiBfX2xhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdChhZGRyLCBwdGVwKTtcbit9XG4rXG4gc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9wYWdlX2NvdW50KGludCBsZXZlbCwgbG9uZyBjb3VudClcbiB7XG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJPQ19GUykpXG5AQCAtOTc4LDE3ICsxMDM2LDM4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcG1kKHBtZF90ICpwbWRwLCBwbWRfdCBwbWQpXG4gXHRXUklURV9PTkNFKCpwbWRwLCBwbWQpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSlcbiB7XG4gXHRpZiAocHRlX3ByZXNlbnQocHRlKSlcbiBcdFx0cHRlID0gY2xlYXJfcHRlX2JpdChwdGUsIF9fcGdwcm90KF9QQUdFX1VOVVNFRCkpO1xuIFx0V1JJVEVfT05DRSgqcHRlcCwgcHRlKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSlcbit7XG4rXHRpZiAoIWlzX2xhenlfbW11X2FjdGl2ZSgpIHx8ICFfX2xhenlfbW11X3NldF9wdGUocHRlcCwgcHRlKSlcbitcdFx0X19zZXRfcHRlKHB0ZXAsIHB0ZSk7XG4rfVxuK1xuKyNkZWZpbmUgcHRlcF9nZXRfbG9ja2xlc3MgcHRlcF9nZXRfbG9ja2xlc3NcbitzdGF0aWMgaW5saW5lIF9fbm9fc2FuaXRpemVfYWRkcmVzcyBwdGVfdCBwdGVwX2dldF9sb2NrbGVzcyhwdGVfdCAqcHRlcClcbit7XG4rXHRyZXR1cm4gUkVBRF9PTkNFKCpwdGVwKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBwdGVfdCBfX3B0ZXBfZ2V0KHB0ZV90ICpwdGVwKVxuK3tcbitcdHJldHVybiBSRUFEX09OQ0UoKnB0ZXApO1xuK31cbitcbiAjZGVmaW5lIHB0ZXBfZ2V0IHB0ZXBfZ2V0XG4gc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldChwdGVfdCAqcHRlcClcbiB7XG4tXHRyZXR1cm4gUkVBRF9PTkNFKCpwdGVwKTtcbitcdHB0ZV90IHJlcztcbitcbitcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkgfHwgIV9fbGF6eV9tbXVfcHRlcF9nZXQocHRlcCwgXHUwMDI2cmVzKSlcbitcdFx0cmVzID0gX19wdGVwX2dldChwdGVwKTtcbitcdHJldHVybiByZXM7XG4gfVxuIFxuICNkZWZpbmUgcG1kcF9nZXQgcG1kcF9nZXRcbkBAIC0xMTgxLDYgKzEyNjAsMTUgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fcHRlcF9pcHRlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IG5yLFxuIFx0fSB3aGlsZSAobnIgIT0gMjU1KTtcbiB9XG4gXG4rdm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuK1x0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuK1x0XHRcdFx0XHRwdGVfdCAqcHRlKTtcbisjZGVmaW5lIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc1xuK1xuK3ZvaWQgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKHZvaWQpO1xuK3ZvaWQgYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKHZvaWQpO1xuK3ZvaWQgYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlKHZvaWQpO1xuK1xuIC8qXG4gICogVGhpcyBpcyBoYXJkIHRvIHVuZGVyc3RhbmQuIHB0ZXBfZ2V0X2FuZF9jbGVhciBhbmQgcHRlcF9jbGVhcl9mbHVzaFxuICAqIGJvdGggY2xlYXIgdGhlIFRMQiBmb3IgdGhlIHVubWFwcGVkIHB0ZS4gVGhlIHJlYXNvbiBpcyB0aGF0XG5AQCAtMTIwMSwxMCArMTI4OSwxNiBAQCBwdGVfdCBwdGVwX3hjaGdfbGF6eShzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHB0ZV90ICosIHB0ZV90KTtcbiBzdGF0aWMgaW5saW5lIGJvb2wgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcbiB7XG4tXHRwdGVfdCBwdGUgPSBwdGVwX2dldChwdGVwKTtcbitcdHB0ZV90IHB0ZTtcbitcdGludCByZXM7XG4gXG4tXHRwdGUgPSBwdGVwX3hjaGdfZGlyZWN0KHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgcHRlcCwgcHRlX21rb2xkKHB0ZSkpO1xuLVx0cmV0dXJuIHB0ZV95b3VuZyhwdGUpO1xuK1x0aWYgKCFsYXp5X21tdV9wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKGFkZHIsIHB0ZXAsIFx1MDAyNnJlcykpIHtcbitcdFx0cHRlID0gX19wdGVwX2dldChwdGVwKTtcbitcdFx0cHRlID0gcHRlX21rb2xkKHB0ZSk7XG4rXHRcdHB0ZSA9IHB0ZXBfeGNoZ19kaXJlY3Qodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGVwLCBwdGUpO1xuK1x0XHRyZXMgPSBwdGVfeW91bmcocHRlKTtcbitcdH1cbitcdHJldHVybiByZXM7XG4gfVxuIFxuICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9DTEVBUl9ZT1VOR19GTFVTSFxuQEAgLTEyMjAsNyArMTMxNCw4IEBAIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIHtcbiBcdHB0ZV90IHJlcztcbiBcbi1cdHJlcyA9IHB0ZXBfeGNoZ19sYXp5KG1tLCBhZGRyLCBwdGVwLCBfX3B0ZShfUEFHRV9JTlZBTElEKSk7XG4rXHRpZiAoIWxhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcihhZGRyLCBwdGVwLCBcdTAwMjZyZXMpKVxuK1x0XHRyZXMgPSBwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpO1xuIFx0cGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXIobW0sIGFkZHIsIHJlcyk7XG4gXHQvKiBBdCB0aGlzIHBvaW50IHRoZSByZWZlcmVuY2UgdGhyb3VnaCB0aGUgbWFwcGluZyBpcyBzdGlsbCBwcmVzZW50ICovXG4gXHRpZiAobW1faXNfcHJvdGVjdGVkKG1tKSBcdTAwMjZcdTAwMjYgcHRlX3ByZXNlbnQocmVzKSlcbkBAIC0xMjI5LDkgKzEzMjQsMjggQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gfVxuIFxuICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9NT0RJRllfUFJPVF9UUkFOU0FDVElPTlxuLXB0ZV90IHB0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHB0ZV90ICopO1xuLXZvaWQgcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsXG4tXHRcdFx0ICAgICBwdGVfdCAqLCBwdGVfdCwgcHRlX3QpO1xuK3B0ZV90IF9fX3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHB0ZV90ICopO1xuK3ZvaWQgX19fcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsXG4rXHRcdFx0XHRwdGVfdCAqLCBwdGVfdCwgcHRlX3QpO1xuK1xuK3N0YXRpYyBpbmxpbmVcbitwdGVfdCBwdGVwX21vZGlmeV9wcm90X3N0YXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuK1x0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcbit7XG4rXHRwdGVfdCByZXM7XG4rXG4rXHRpZiAoIWxhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQoYWRkciwgcHRlcCwgXHUwMDI2cmVzKSlcbitcdFx0cmVzID0gX19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydCh2bWEsIGFkZHIsIHB0ZXApO1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIGlubGluZVxuK3ZvaWQgcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHQgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpXG4re1xuK1x0aWYgKCFsYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdChhZGRyLCBwdGVwLCBvbGRfcHRlLCBwdGUpKVxuK1x0XHRfX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdCh2bWEsIGFkZHIsIHB0ZXAsIG9sZF9wdGUsIHB0ZSk7XG4rfVxuIFxuICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9DTEVBUl9GTFVTSFxuIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9jbGVhcl9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbkBAIC0xMjYxLDExICsxMzc1LDEzIEBAIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9nZXRfYW5kX2NsZWFyX2Z1bGwoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4ge1xuIFx0cHRlX3QgcmVzO1xuIFxuLVx0aWYgKGZ1bGwpIHtcbi1cdFx0cmVzID0gcHRlcF9nZXQocHRlcCk7XG4tXHRcdHNldF9wdGUocHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpO1xuLVx0fSBlbHNlIHtcbi1cdFx0cmVzID0gcHRlcF94Y2hnX2xhenkobW0sIGFkZHIsIHB0ZXAsIF9fcHRlKF9QQUdFX0lOVkFMSUQpKTtcbitcdGlmICghbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKGFkZHIsIHB0ZXAsIFx1MDAyNnJlcykpIHtcbitcdFx0aWYgKGZ1bGwpIHtcbitcdFx0XHRyZXMgPSBfX3B0ZXBfZ2V0KHB0ZXApO1xuK1x0XHRcdF9fc2V0X3B0ZShwdGVwLCBfX3B0ZShfUEFHRV9JTlZBTElEKSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmVzID0gcHRlcF94Y2hnX2xhenkobW0sIGFkZHIsIHB0ZXAsIF9fcHRlKF9QQUdFX0lOVkFMSUQpKTtcbitcdFx0fVxuIFx0fVxuIFx0cGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXIobW0sIGFkZHIsIHJlcyk7XG4gXHQvKiBBdCB0aGlzIHBvaW50IHRoZSByZWZlcmVuY2UgdGhyb3VnaCB0aGUgbWFwcGluZyBpcyBzdGlsbCBwcmVzZW50ICovXG5AQCAtMTI5MSwxMCArMTQwNywxNSBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVwX3NldF93cnByb3RlY3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxuIHtcbi1cdHB0ZV90IHB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xuK1x0cHRlX3QgcHRlO1xuIFxuLVx0aWYgKHB0ZV93cml0ZShwdGUpKVxuLVx0XHRwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgcHRlX3dycHJvdGVjdChwdGUpKTtcbitcdGlmICghbGF6eV9tbXVfcHRlcF9zZXRfd3Jwcm90ZWN0KGFkZHIsIHB0ZXApKSB7XG4rXHRcdHB0ZSA9IF9fcHRlcF9nZXQocHRlcCk7XG4rXHRcdGlmIChwdGVfd3JpdGUocHRlKSkge1xuK1x0XHRcdHB0ZSA9IHB0ZV93cnByb3RlY3QocHRlKTtcbitcdFx0XHRwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgcHRlKTtcbitcdFx0fVxuK1x0fVxuIH1cbiBcbiAvKlxuQEAgLTEzMjcsNyArMTQ0OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfZml4X3NwdXJpb3VzX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0ICogUFRFIGRvZXMgbm90IGhhdmUgX1BBR0VfUFJPVEVDVCBzZXQsIHRvIGF2b2lkIHVubmVjZXNzYXJ5IG92ZXJoZWFkLlxuIFx0ICogQSBsb2NhbCBSRFAgY2FuIGJlIHVzZWQgdG8gZG8gdGhlIGZsdXNoLlxuIFx0ICovXG4tXHRpZiAoY3B1X2hhc19yZHAoKSBcdTAwMjZcdTAwMjYgIShwdGVfdmFsKHB0ZXBfZ2V0KHB0ZXApKSBcdTAwMjYgX1BBR0VfUFJPVEVDVCkpXG4rXHRpZiAoY3B1X2hhc19yZHAoKSBcdTAwMjZcdTAwMjYgIShwdGVfdmFsKF9fcHRlcF9nZXQocHRlcCkpIFx1MDAyNiBfUEFHRV9QUk9URUNUKSlcbiBcdFx0X19wdGVwX3JkcChhZGRyZXNzLCBwdGVwLCAxKTtcbiB9XG4gI2RlZmluZSBmbHVzaF90bGJfZml4X3NwdXJpb3VzX2ZhdWx0IGZsdXNoX3RsYl9maXhfc3B1cmlvdXNfZmF1bHRcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmNcbmluZGV4IGI2MDI4NDMyOGZlM2QuLmY1YTNjOWUxYjZiODggMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmNcbisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuY1xuQEAgLTc3LDYgKzc3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vbWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3V2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vYXNtLW9mZnNldHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS9sYXp5X21tdS5oXHUwMDNlXG4gI2luY2x1ZGUgXCJlbnRyeS5oXCJcbiBcbiAvKlxuQEAgLTEwMTIsNSArMTAxMyw2IEBAIHZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcClcbiBcbiB2b2lkIF9faW5pdCBhcmNoX2NwdV9maW5hbGl6ZV9pbml0KHZvaWQpXG4ge1xuK1x0bGF6eV9tbXVfb25saW5lX2Jvb3RfY3B1KCk7XG4gXHRzY2xwX2luaXQoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmNcbmluZGV4IDBiYTdmODliODE2MTEuLjBhODI2YmJhZjFkZGMgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jXG4rKysgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jXG5AQCAtNTksNiArNTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS90b3BvbG9neS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Zkc28uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9tYWNjZXNzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vbGF6eV9tbXUuaFx1MDAzZVxuICNpbmNsdWRlIFwiZW50cnkuaFwiXG4gXG4gZW51bSB7XG5AQCAtODY2LDYgKzg2NywxMSBAQCBpbnQgX19jcHVfdXAodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICp0aWRsZSlcbiBcdHJjID0gcGNwdV9hbGxvY19sb3djb3JlKHBjcHUsIGNwdSk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbitcdHJjID0gbGF6eV9tbXVfb25saW5lX2NwdShHRlBfS0VSTkVMLCBjcHUpO1xuK1x0aWYgKHJjKSB7XG4rXHRcdHBjcHVfZnJlZV9sb3djb3JlKHBjcHUsIGNwdSk7XG4rXHRcdHJldHVybiByYztcbitcdH1cbiBcdC8qXG4gXHQgKiBNYWtlIHN1cmUgZ2xvYmFsIGNvbnRyb2wgcmVnaXN0ZXIgY29udGVudHMgZG8gbm90IGNoYW5nZVxuIFx0ICogdW50aWwgbmV3IENQVSBoYXMgaW5pdGlhbGl6ZWQgY29udHJvbCByZWdpc3RlcnMuXG5AQCAtOTIxLDYgKzkyNyw3IEBAIHZvaWQgX19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpXG4gXHRwY3B1ID0gcGVyX2NwdV9wdHIoXHUwMDI2cGNwdV9kZXZpY2VzLCBjcHUpO1xuIFx0d2hpbGUgKCFwY3B1X3N0b3BwZWQocGNwdSkpXG4gXHRcdGNwdV9yZWxheCgpO1xuK1x0bGF6eV9tbXVfb2ZmbGluZV9jcHUoY3B1KTtcbiBcdHBjcHVfZnJlZV9sb3djb3JlKHBjcHUsIGNwdSk7XG4gXHRjcHVtYXNrX2NsZWFyX2NwdShjcHUsIG1tX2NwdW1hc2soXHUwMDI2aW5pdF9tbSkpO1xuIFx0Y3B1bWFza19jbGVhcl9jcHUoY3B1LCBcdTAwMjZpbml0X21tLmNvbnRleHQuY3B1X2F0dGFjaF9tYXNrKTtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vTWFrZWZpbGUgYi9hcmNoL3MzOTAvbW0vTWFrZWZpbGVcbmluZGV4IDE5Mzg5OWMzOWNhN2YuLjk2Y2FjM2U5OWY1MTYgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvbW0vTWFrZWZpbGVcbisrKyBiL2FyY2gvczM5MC9tbS9NYWtlZmlsZVxuQEAgLTQsNiArNCw3IEBAXG4gI1xuIFxuIG9iai15XHRcdDo9IGluaXQubyBmYXVsdC5vIGV4dG1lbS5vIG1tYXAubyB2bWVtLm8gbWFjY2Vzcy5vXG4rb2JqLXlcdFx0Oj0gaW5pdC5vIGZhdWx0Lm8gZXh0bWVtLm8gbW1hcC5vIHZtZW0ubyBtYWNjZXNzLm8gbGF6eV9tbXUub1xuIG9iai15XHRcdCs9IHBhZ2Utc3RhdGVzLm8gcGFnZWF0dHIubyBwZ3RhYmxlLm8gcGdhbGxvYy5vIGV4dGFibGUub1xuIFxuIG9iai0kKENPTkZJR19DTU0pXHRcdCs9IGNtbS5vXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2xhenlfbW11LmMgYi9hcmNoL3MzOTAvbW0vbGF6eV9tbXUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdlM2E0MTE1ZWEwNDhcbi0tLSAvZGV2L251bGxcbisrKyBiL2FyY2gvczM5MC9tbS9sYXp5X21tdS5jXG5AQCAtMCwwICsxLDQxOCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGd0YWJsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2FzYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS9mYWNpbGl0eS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL2xhenlfbW11LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NrdW5pdC92aXNpYmlsaXR5LmhcdTAwM2VcbitcbisjZGVmaW5lIFBURV9QT0lTT05cdF9QQUdFX0xBUkdFXG4rXG4rc3RydWN0IGlwdGVfcmFuZ2Uge1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4rXHR1bnNpZ25lZCBsb25nIGJhc2VfYWRkcjtcbitcdHVuc2lnbmVkIGxvbmcgYmFzZV9lbmQ7XG4rXHRwdGVfdCAqYmFzZV9wdGU7XG4rXHRwdGVfdCAqc3RhcnRfcHRlO1xuK1x0cHRlX3QgKmVuZF9wdGU7XG4rXHRwdGVfdCBjYWNoZVtQVFJTX1BFUl9QVEVdO1xuK307XG4rXG4rc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBpcHRlX3JhbmdlICosIGlwdGVfcmFuZ2UpO1xuK1xuK3N0YXRpYyBpbnQgY291bnRfY29udGlndW91cyhwdGVfdCAqc3RhcnQsIHB0ZV90ICplbmQsIGJvb2wgKnZhbGlkKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgcGFnZV9pbnZhbGlkX2JpdDtcbitcdHB0ZV90ICpwdGVwLCBwdGU7XG4rXG4rXHRwdGUgPSBfX3B0ZXBfZ2V0KHN0YXJ0KTtcbitcdHBhZ2VfaW52YWxpZF9iaXQgPSBwdGVfdmFsKHB0ZSkgXHUwMDI2IF9QQUdFX0lOVkFMSUQ7XG4rXG4rXHRmb3IgKHB0ZXAgPSBzdGFydCArIDE7IHB0ZXAgXHUwMDNjIGVuZDsgcHRlcCsrKSB7XG4rXHRcdHB0ZSA9IF9fcHRlcF9nZXQocHRlcCk7XG4rXHRcdGlmICgocHRlX3ZhbChwdGUpIFx1MDAyNiBfUEFHRV9JTlZBTElEKSAhPSBwYWdlX2ludmFsaWRfYml0KVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0KnZhbGlkID0gIShwYWdlX2ludmFsaWRfYml0KTtcbitcdHJldHVybiBwdGVwIC0gc3RhcnQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIF9faW52YWxpZGF0ZV9wdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHRcdCAgIGludCBucl9wdGVzLCBwdGVfdCAqcHRlcClcbit7XG4rXHRhdG9taWNfaW5jKFx1MDAyNm1tLVx1MDAzZWNvbnRleHQuZmx1c2hfY291bnQpO1xuK1x0aWYgKGNwdV9oYXNfdGxiX2xjKCkgXHUwMDI2XHUwMDI2IGNwdW1hc2tfZXF1YWwobW1fY3B1bWFzayhtbSksIGNwdW1hc2tfb2Yoc21wX3Byb2Nlc3Nvcl9pZCgpKSkpXG4rXHRcdF9fcHRlcF9pcHRlX3JhbmdlKGFkZHIsIG5yX3B0ZXMgLSAxLCBwdGVwLCBJUFRFX0xPQ0FMKTtcbitcdGVsc2VcbitcdFx0X19wdGVwX2lwdGVfcmFuZ2UoYWRkciwgbnJfcHRlcyAtIDEsIHB0ZXAsIElQVEVfR0xPQkFMKTtcbitcdGF0b21pY19kZWMoXHUwMDI2bW0tXHUwMDNlY29udGV4dC5mbHVzaF9jb3VudCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaW52YWxpZGF0ZV9wdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHRcdHB0ZV90ICpzdGFydCwgcHRlX3QgKmVuZClcbit7XG4rXHRpbnQgbnJfcHRlcztcbitcdGJvb2wgdmFsaWQ7XG4rXG4rXHRucl9wdGVzID0gY291bnRfY29udGlndW91cyhzdGFydCwgZW5kLCBcdTAwMjZ2YWxpZCk7XG4rXHRpZiAodmFsaWQpXG4rXHRcdF9faW52YWxpZGF0ZV9wdGVfcmFuZ2UobW0sIGFkZHIsIG5yX3B0ZXMsIHN0YXJ0KTtcbitcbitcdHJldHVybiBucl9wdGVzO1xuK31cbitcbitzdGF0aWMgdm9pZCBzZXRfcHRlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdFx0ICBwdGVfdCAqc3RhcnQsIHB0ZV90ICplbmQsIHB0ZV90ICpjYWNoZSlcbit7XG4rXHRpbnQgbnJfcHRlcywgbnJfdG90YWwgPSBlbmQgLSBzdGFydDtcbitcdHB0ZV90ICpwdGVwID0gc3RhcnQ7XG4rXHRpbnQgaTtcbitcbitcdGthc2FuX3VucG9pc29uX3B0ZShzdGFydCwgbnJfdG90YWwpO1xuK1x0d2hpbGUgKHB0ZXAgXHUwMDNjIGVuZCkge1xuK1x0XHRucl9wdGVzID0gaW52YWxpZGF0ZV9wdGVfcmFuZ2UobW0sIGFkZHIsIHB0ZXAsIGVuZCk7XG4rXG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3B0ZXM7IGkrKywgcHRlcCsrLCBjYWNoZSsrKSB7XG4rXHRcdFx0X19zZXRfcHRlKHB0ZXAsICpjYWNoZSk7XG4rXHRcdFx0KmNhY2hlID0gX19wdGUoUFRFX1BPSVNPTik7XG4rXHRcdH1cbitcbitcdFx0YWRkciArPSBucl9wdGVzICogUEFHRV9TSVpFO1xuK1x0fVxuK1x0a2FzYW5fcG9pc29uX3B0ZShzdGFydCwgbnJfdG90YWwpO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbnRlcl9pcHRlX25vcmFuZ2Uodm9pZClcbit7XG4rXHRzdHJ1Y3QgaXB0ZV9yYW5nZSBfX21heWJlX3VudXNlZCAqcmFuZ2U7XG4rXG4rXHRpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4rXG4rXHRyYW5nZSA9IGdldF9jcHVfdmFyKGlwdGVfcmFuZ2UpO1xuK1x0Z2V0X2xvd2NvcmUoKS1cdTAwM2VsYXp5X21tdV9jb3VudCsrO1xuK1xuK1x0bG9jYWxfYmhfZW5hYmxlKCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVudGVyX2lwdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBwdGVfdCAqcHRlKVxuK3tcbitcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcbitcdHVuc2lnbmVkIGludCBucl9wdGVzO1xuK1xuK1x0aWYgKCF0ZXN0X2ZhY2lsaXR5KDEzKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuK1xuK1x0cmFuZ2UgPSBnZXRfY3B1X3ZhcihpcHRlX3JhbmdlKTtcbitcdGdldF9sb3djb3JlKCktXHUwMDNlbGF6eV9tbXVfY291bnQrKztcbitcbitcdGlmIChtbV9pc19wcm90ZWN0ZWQobW0pKSB7XG4rXHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRyYW5nZS1cdTAwM2VtbSA9IG1tO1xuK1x0cmFuZ2UtXHUwMDNlYmFzZV9hZGRyID0gYWRkcjtcbitcdHJhbmdlLVx1MDAzZWJhc2VfZW5kID0gZW5kO1xuK1x0cmFuZ2UtXHUwMDNlYmFzZV9wdGUgPSBwdGU7XG4rXG4rXHRucl9wdGVzID0gKHJhbmdlLVx1MDAzZWJhc2VfZW5kIC0gcmFuZ2UtXHUwMDNlYmFzZV9hZGRyKSAvIFBBR0VfU0laRTtcbitcdGthc2FuX3BvaXNvbl9wdGUocmFuZ2UtXHUwMDNlYmFzZV9wdGUsIG5yX3B0ZXMpO1xuK1xuK1x0bG9jYWxfYmhfZW5hYmxlKCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGxlYXZlX2lwdGVfcmFuZ2Uodm9pZClcbit7XG4rXHRwdGVfdCAqcHRlcCwgKnN0YXJ0LCAqc3RhcnRfY2FjaGUsICpjYWNoZTtcbitcdHVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkciwgYWRkcjtcbitcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcbitcdHVuc2lnbmVkIGludCBucl9wdGVzO1xuK1x0aW50IHN0YXJ0X2lkeDtcbitcbitcdGlmICghdGVzdF9mYWNpbGl0eSgxMykpXG4rXHRcdHJldHVybjtcbitcbitcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X3ByZWVtcHRpb25fZGlzYWJsZWQoKTtcbitcdHJhbmdlID0gdGhpc19jcHVfcmVhZChpcHRlX3JhbmdlKTtcbitcdGlmICghcmFuZ2UtXHUwMDNlbW0pXG4rXHRcdGdvdG8gbm9yYW5nZTtcbitcdGlmICghcmFuZ2UtXHUwMDNlc3RhcnRfcHRlKVxuK1x0XHRnb3RvIGRvbmU7XG4rXG4rXHRzdGFydCA9IHJhbmdlLVx1MDAzZXN0YXJ0X3B0ZTtcbitcdHN0YXJ0X2lkeCA9IHJhbmdlLVx1MDAzZXN0YXJ0X3B0ZSAtIHJhbmdlLVx1MDAzZWJhc2VfcHRlO1xuK1x0c3RhcnRfYWRkciA9IHJhbmdlLVx1MDAzZWJhc2VfYWRkciArIHN0YXJ0X2lkeCAqIFBBR0VfU0laRTtcbitcdGFkZHIgPSBzdGFydF9hZGRyO1xuK1x0c3RhcnRfY2FjaGUgPSBcdTAwMjZyYW5nZS1cdTAwM2VjYWNoZVtzdGFydF9pZHhdO1xuK1x0Y2FjaGUgPSBzdGFydF9jYWNoZTtcbitcdGZvciAocHRlcCA9IHN0YXJ0OyBwdGVwIFx1MDAzYyByYW5nZS1cdTAwM2VlbmRfcHRlOyBwdGVwKyssIGNhY2hlKyssIGFkZHIgKz0gUEFHRV9TSVpFKSB7XG4rXHRcdGlmIChwdGVfdmFsKCpjYWNoZSkgPT0gUFRFX1BPSVNPTikge1xuK1x0XHRcdGlmIChzdGFydCkge1xuK1x0XHRcdFx0c2V0X3B0ZV9yYW5nZShyYW5nZS1cdTAwM2VtbSwgc3RhcnRfYWRkciwgc3RhcnQsIHB0ZXAsIHN0YXJ0X2NhY2hlKTtcbitcdFx0XHRcdHN0YXJ0ID0gTlVMTDtcbitcdFx0XHR9XG4rXHRcdH0gZWxzZSBpZiAoIXN0YXJ0KSB7XG4rXHRcdFx0c3RhcnQgPSBwdGVwO1xuK1x0XHRcdHN0YXJ0X2FkZHIgPSBhZGRyO1xuK1x0XHRcdHN0YXJ0X2NhY2hlID0gY2FjaGU7XG4rXHRcdH1cbitcdH1cbitcdHNldF9wdGVfcmFuZ2UocmFuZ2UtXHUwMDNlbW0sIHN0YXJ0X2FkZHIsIHN0YXJ0LCBwdGVwLCBzdGFydF9jYWNoZSk7XG4rXG4rXHRyYW5nZS1cdTAwM2VzdGFydF9wdGUgPSBOVUxMO1xuK1x0cmFuZ2UtXHUwMDNlZW5kX3B0ZSA9IE5VTEw7XG4rXG4rZG9uZTpcbitcdG5yX3B0ZXMgPSAocmFuZ2UtXHUwMDNlYmFzZV9lbmQgLSByYW5nZS1cdTAwM2ViYXNlX2FkZHIpIC8gUEFHRV9TSVpFO1xuK1x0a2FzYW5fdW5wb2lzb25fcHRlKHJhbmdlLVx1MDAzZWJhc2VfcHRlLCBucl9wdGVzKTtcbitcbitcdHJhbmdlLVx1MDAzZW1tID0gTlVMTDtcbitcdHJhbmdlLVx1MDAzZWJhc2VfYWRkciA9IDA7XG4rXHRyYW5nZS1cdTAwM2ViYXNlX2VuZCA9IDA7XG4rXHRyYW5nZS1cdTAwM2ViYXNlX3B0ZSA9IE5VTEw7XG4rXG4rbm9yYW5nZTpcbitcdGdldF9sb3djb3JlKCktXHUwMDNlbGF6eV9tbXVfY291bnQtLTtcbitcdHB1dF9jcHVfdmFyKGlwdGVfcmFuZ2UpO1xuK1xuK1x0bG9jYWxfYmhfZW5hYmxlKCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGZsdXNoX2xhenlfbW11X21vZGUodm9pZClcbit7XG4rXHR1bnNpZ25lZCBsb25nIGFkZHIsIGVuZDtcbitcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuK1x0cHRlX3QgKnB0ZTtcbitcbitcdGlmICghdGVzdF9mYWNpbGl0eSgxMykpXG4rXHRcdHJldHVybjtcbitcbitcdHJhbmdlID0gZ2V0X2NwdV92YXIoaXB0ZV9yYW5nZSk7XG4rXHRpZiAocmFuZ2UtXHUwMDNlbW0pIHtcbitcdFx0bW0gPSByYW5nZS1cdTAwM2VtbTtcbitcdFx0YWRkciA9IHJhbmdlLVx1MDAzZWJhc2VfYWRkcjtcbitcdFx0ZW5kID0gcmFuZ2UtXHUwMDNlYmFzZV9lbmQ7XG4rXHRcdHB0ZSA9IHJhbmdlLVx1MDAzZWJhc2VfcHRlO1xuK1xuK1x0XHRsZWF2ZV9pcHRlX3JhbmdlKCk7XG4rXHRcdGVudGVyX2lwdGVfcmFuZ2UobW0sIGFkZHIsIGVuZCwgcHRlKTtcbitcdH1cbitcdHB1dF9jcHVfdmFyKGlwdGVfcmFuZ2UpO1xuK31cbitcbit2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSh2b2lkKVxuK3tcbitcdGVudGVyX2lwdGVfbm9yYW5nZSgpO1xuK31cbitFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSk7XG4rXG4rdm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuK1x0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuK1x0XHRcdFx0XHRwdGVfdCAqcHRlKVxuK3tcbitcdGVudGVyX2lwdGVfcmFuZ2UobW0sIGFkZHIsIGVuZCwgcHRlKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9JRl9LVU5JVChhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKTtcbitcbit2b2lkIGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSh2b2lkKVxuK3tcbitcdGxlYXZlX2lwdGVfcmFuZ2UoKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9JRl9LVU5JVChhcmNoX2xlYXZlX2xhenlfbW11X21vZGUpO1xuK1xuK3ZvaWQgYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlKHZvaWQpXG4re1xuK1x0Zmx1c2hfbGF6eV9tbXVfbW9kZSgpO1xuK31cbitFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGFyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZSk7XG4rXG4rc3RhdGljIHZvaWQgX19pcHRlX3JhbmdlX3NldF9wdGUoc3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlLCBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxuK3tcbitcdHVuc2lnbmVkIGludCBpZHggPSBwdGVwIC0gcmFuZ2UtXHUwMDNlYmFzZV9wdGU7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9wcmVlbXB0aW9uX2Rpc2FibGVkKCk7XG4rXHRyYW5nZS1cdTAwM2VjYWNoZVtpZHhdID0gcHRlO1xuK1xuK1x0aWYgKCFyYW5nZS1cdTAwM2VzdGFydF9wdGUpIHtcbitcdFx0cmFuZ2UtXHUwMDNlc3RhcnRfcHRlID0gcHRlcDtcbitcdFx0cmFuZ2UtXHUwMDNlZW5kX3B0ZSA9IHB0ZXAgKyAxO1xuK1x0fSBlbHNlIGlmIChwdGVwIFx1MDAzYyByYW5nZS1cdTAwM2VzdGFydF9wdGUpIHtcbitcdFx0cmFuZ2UtXHUwMDNlc3RhcnRfcHRlID0gcHRlcDtcbitcdH0gZWxzZSBpZiAocHRlcCArIDEgXHUwMDNlIHJhbmdlLVx1MDAzZWVuZF9wdGUpIHtcbitcdFx0cmFuZ2UtXHUwMDNlZW5kX3B0ZSA9IHB0ZXAgKyAxO1xuK1x0fVxuK31cbitcbitzdGF0aWMgcHRlX3QgX19pcHRlX3JhbmdlX3B0ZXBfZ2V0KHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZSwgcHRlX3QgKnB0ZXApXG4re1xuK1x0dW5zaWduZWQgaW50IGlkeCA9IHB0ZXAgLSByYW5nZS1cdTAwM2ViYXNlX3B0ZTtcbitcdHB0ZV90IHB0ZTtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X3ByZWVtcHRpb25fZGlzYWJsZWQoKTtcbitcdGlmIChwdGVfdmFsKHJhbmdlLVx1MDAzZWNhY2hlW2lkeF0pID09IFBURV9QT0lTT04pIHtcbitcdFx0a2FzYW5fdW5wb2lzb25fcHRlKHB0ZXAsIDEpO1xuK1x0XHRwdGUgPSBfX3B0ZXBfZ2V0KHB0ZXApO1xuK1x0XHRrYXNhbl9wb2lzb25fcHRlKHB0ZXAsIDEpO1xuK1xuK1x0XHRyZXR1cm4gcHRlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJhbmdlLVx1MDAzZWNhY2hlW2lkeF07XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgaXB0ZV9yYW5nZSAqdGhpc19pcHRlX3JhbmdlKHB0ZV90ICpwdGVwKVxuK3tcbitcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcbitcdHVuc2lnbmVkIGludCBucl9wdGVzO1xuK1xuK1x0cmFuZ2UgPSB0aGlzX2NwdV9yZWFkKGlwdGVfcmFuZ2UpO1xuK1x0aWYgKHB0ZXAgXHUwMDNjIHJhbmdlLVx1MDAzZWJhc2VfcHRlKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcdG5yX3B0ZXMgPSAocmFuZ2UtXHUwMDNlYmFzZV9lbmQgLSByYW5nZS1cdTAwM2ViYXNlX2FkZHIpIC8gUEFHRV9TSVpFO1xuK1x0aWYgKHB0ZXAgXHUwMDNlPSByYW5nZS1cdTAwM2ViYXNlX3B0ZSArIG5yX3B0ZXMpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0cmV0dXJuIHJhbmdlO1xuK31cbitcbitib29sIF9fbGF6eV9tbXVfc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxuK3tcbitcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcbitcbitcdHJhbmdlID0gdGhpc19pcHRlX3JhbmdlKHB0ZXApO1xuK1x0aWYgKCFyYW5nZSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0X19pcHRlX3JhbmdlX3NldF9wdGUocmFuZ2UsIHB0ZXAsIHB0ZSk7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rYm9vbCBfX2xhenlfbW11X3B0ZXBfZ2V0KHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKVxuK3tcbitcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcbitcbitcdHJhbmdlID0gdGhpc19pcHRlX3JhbmdlKHB0ZXApO1xuK1x0aWYgKCFyYW5nZSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0KnJlcyA9IF9faXB0ZV9yYW5nZV9wdGVwX2dldChyYW5nZSwgcHRlcCk7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rYm9vbCBfX2xhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgaW50ICpyZXMpXG4re1xuK1x0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xuK1x0cHRlX3QgcHRlLCBvbGQ7XG4rXG4rXHRyYW5nZSA9IHRoaXNfaXB0ZV9yYW5nZShwdGVwKTtcbitcdGlmICghcmFuZ2UpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG9sZCA9IF9faXB0ZV9yYW5nZV9wdGVwX2dldChyYW5nZSwgcHRlcCk7XG4rXHRwdGUgPSBwdGVfbWtvbGQob2xkKTtcbitcdF9faXB0ZV9yYW5nZV9zZXRfcHRlKHJhbmdlLCBwdGVwLCBwdGUpO1xuK1x0KnJlcyA9IHB0ZV95b3VuZyhvbGQpO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK2Jvb2wgX19sYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcylcbit7XG4rXHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XG4rXHRwdGVfdCBwdGUsIG9sZDtcbitcbitcdHJhbmdlID0gdGhpc19pcHRlX3JhbmdlKHB0ZXApO1xuK1x0aWYgKCFyYW5nZSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0b2xkID0gX19pcHRlX3JhbmdlX3B0ZXBfZ2V0KHJhbmdlLCBwdGVwKTtcbitcdHB0ZSA9IF9fcHRlKF9QQUdFX0lOVkFMSUQpO1xuK1x0X19pcHRlX3JhbmdlX3NldF9wdGUocmFuZ2UsIHB0ZXAsIHB0ZSk7XG4rXHQqcmVzID0gb2xkO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK2Jvb2wgX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpXG4re1xuK1x0cmV0dXJuIF9fbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKGFkZHIsIHB0ZXAsIHJlcyk7XG4rfVxuK1xuK2Jvb2wgX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxuK1x0XHRcdFx0XHRwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpXG4re1xuK1x0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xuK1xuK1x0cmFuZ2UgPSB0aGlzX2lwdGVfcmFuZ2UocHRlcCk7XG4rXHRpZiAoIXJhbmdlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitib29sIF9fbGF6eV9tbXVfcHRlcF9zZXRfd3Jwcm90ZWN0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXG4re1xuK1x0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xuK1x0cHRlX3QgcHRlO1xuK1xuK1x0cmFuZ2UgPSB0aGlzX2lwdGVfcmFuZ2UocHRlcCk7XG4rXHRpZiAoIXJhbmdlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRwdGUgPSBfX2lwdGVfcmFuZ2VfcHRlcF9nZXQocmFuZ2UsIHB0ZXApO1xuK1x0aWYgKHB0ZV93cml0ZShwdGUpKSB7XG4rXHRcdHB0ZSA9IHB0ZV93cnByb3RlY3QocHRlKTtcbitcdFx0X19pcHRlX3JhbmdlX3NldF9wdGUocmFuZ2UsIHB0ZXAsIHB0ZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4raW50IGxhenlfbW11X29ubGluZV9jcHUoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgY3B1KVxuK3tcbitcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcbitcdGludCBpO1xuK1xuK1x0aWYgKCF0ZXN0X2ZhY2lsaXR5KDEzKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyYW5nZSA9IGt6YWxsb2Nfb2JqKCpyYW5nZSwgZ2ZwKTtcbitcdGlmICghcmFuZ2UpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShyYW5nZS1cdTAwM2VjYWNoZSk7IGkrKylcbitcdFx0cmFuZ2UtXHUwMDNlY2FjaGVbaV0gPSBfX3B0ZShQVEVfUE9JU09OKTtcbitcdHBlcl9jcHUoaXB0ZV9yYW5nZSwgY3B1KSA9IHJhbmdlO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3ZvaWQgbGF6eV9tbXVfb2ZmbGluZV9jcHUodW5zaWduZWQgaW50IGNwdSlcbit7XG4rXHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XG4rXG4rXHRpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRyYW5nZSA9IHBlcl9jcHUoaXB0ZV9yYW5nZSwgY3B1KTtcbitcdHBlcl9jcHUoaXB0ZV9yYW5nZSwgY3B1KSA9IE5VTEw7XG4rXHRrZnJlZShyYW5nZSk7XG4rfVxuK1xuK3ZvaWQgX19pbml0IGxhenlfbW11X29ubGluZV9ib290X2NwdSh2b2lkKVxuK3tcbitcdGxhenlfbW11X29ubGluZV9jcHUoR0ZQX0FUT01JQywgMCk7XG4rfVxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jXG5pbmRleCA0YWNkOGIxNDBjNGJkLi5kZjM2NTIzYmNiYmJiIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL21tL3BndGFibGUuY1xuKysrIGIvYXJjaC9zMzkwL21tL3BndGFibGUuY1xuQEAgLTE2NiwxNCArMTY2LDE0IEBAIHB0ZV90IHB0ZXBfeGNoZ19sYXp5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gfVxuIEVYUE9SVF9TWU1CT0wocHRlcF94Y2hnX2xhenkpO1xuIFxuLXB0ZV90IHB0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHQgICAgIHB0ZV90ICpwdGVwKVxuK3B0ZV90IF9fX3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHRcdHB0ZV90ICpwdGVwKVxuIHtcbiBcdHJldHVybiBwdGVwX2ZsdXNoX2xhenkodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGVwLCAxKTtcbiB9XG4gXG4tdm9pZCBwdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdCAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IG9sZF9wdGUsIHB0ZV90IHB0ZSlcbit2b2lkIF9fX3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdFx0XHRwdGVfdCAqcHRlcCwgcHRlX3Qgb2xkX3B0ZSwgcHRlX3QgcHRlKVxuIHtcbiBcdHNldF9wdGUocHRlcCwgcHRlKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jXG5pbmRleCAyMjlkMWZjM2Q3ZjFjLi45MTY3ODVjM2IyZTBiIDEwMDY0NFxuLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jXG4rKysgYi9mcy9wcm9jL3Rhc2tfbW11LmNcbkBAIC0yODUyLDcgKzI4NTIsNyBAQCBzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuK1x0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKHZtYS1cdTAwM2V2bV9tbSwgc3RhcnQsIGVuZCwgc3RhcnRfcHRlKTtcbiBcbiBcdGlmICgocC1cdTAwM2VhcmcuZmxhZ3MgXHUwMDI2IFBNX1NDQU5fV1BfTUFUQ0hJTkcpIFx1MDAyNlx1MDAyNiAhcC1cdTAwM2V2ZWNfb3V0KSB7XG4gXHRcdC8qIEZhc3QgcGF0aCBmb3IgcGVyZm9ybWluZyBleGNsdXNpdmUgV1AgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2thc2FuLmggYi9pbmNsdWRlL2xpbnV4L2thc2FuLmhcbmluZGV4IGJmMjMzYmRlNjhjN2UuLjFhYTRkOWRkMjQ4NWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2thc2FuLmhcbisrKyBiL2luY2x1ZGUvbGludXgva2FzYW4uaFxuQEAgLTYsNiArNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2FzYW4tZW5hYmxlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2FzYW4tdGFncy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wZ3RhYmxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdGF0aWNfa2V5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG5AQCAtMzUsOCArMzYsNiBAQCB0eXBlZGVmIHVuc2lnbmVkIGludCBfX2JpdHdpc2Uga2FzYW5fdm1hbGxvY19mbGFnc190O1xuIFxuICNpZiBkZWZpbmVkKENPTkZJR19LQVNBTl9HRU5FUklDKSB8fCBkZWZpbmVkKENPTkZJR19LQVNBTl9TV19UQUdTKVxuIFxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BndGFibGUuaFx1MDAzZVxuLVxuIC8qIFNvZnR3YXJlIEtBU0FOIGltcGxlbWVudGF0aW9ucyB1c2Ugc2hhZG93IG1lbW9yeS4gKi9cbiBcbiAjaWZkZWYgQ09ORklHX0tBU0FOX1NXX1RBR1NcbkBAIC0xMzQsNiArMTMzLDIwIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcdFx0X19rYXNhbl9wb2lzb25fc2xhYihzbGFiKTtcbiB9XG4gXG4rdm9pZCBfX2thc2FuX3BvaXNvbl9wdGUocHRlX3QgKnB0ZSwgaW50IG5yKTtcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQga2FzYW5fcG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpXG4re1xuK1x0aWYgKGthc2FuX2VuYWJsZWQoKSlcbitcdFx0X19rYXNhbl9wb2lzb25fcHRlKHB0ZSwgbnIpO1xuK31cbitcbit2b2lkIF9fa2FzYW5fdW5wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucik7XG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGthc2FuX3VucG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpXG4re1xuK1x0aWYgKGthc2FuX2VuYWJsZWQoKSlcbitcdFx0X19rYXNhbl91bnBvaXNvbl9wdGUocHRlLCBucik7XG4rfVxuK1xuIHZvaWQgX19rYXNhbl91bnBvaXNvbl9uZXdfb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSwgdm9pZCAqb2JqZWN0KTtcbiAvKipcbiAgKiBrYXNhbl91bnBvaXNvbl9uZXdfb2JqZWN0IC0gVGVtcG9yYXJpbHkgdW5wb2lzb24gYSBuZXcgc2xhYiBvYmplY3QuXG5AQCAtNDE0LDYgKzQyNyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrYXNhbl91bnBvaXNvbl9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBzdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fcG9pc29uX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIpIHt9XG4rc3RhdGljIGlubGluZSB2b2lkIGthc2FuX3BvaXNvbl9wdGUocHRlX3QgKnB0ZSwgaW50IG5yKSB7fVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl91bnBvaXNvbl9wdGUocHRlX3QgKnB0ZSwgaW50IG5yKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl91bnBvaXNvbl9uZXdfb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSxcbiBcdFx0XHRcdFx0dm9pZCAqb2JqZWN0KSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fbmV3X29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmggYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaFxuaW5kZXggMjk4MWUzODZkYTdiMy4uY2M4NWRhZjMwNzM5ZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaFxuQEAgLTI3MSw2ICsyNzEsNTAgQEAgc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfZW5hYmxlKHZvaWQpXG4gXHRcdGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSgpO1xuIH1cbiBcbisjaWZuZGVmIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXNcbitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgcHRlX3QgKnB0ZXApXG4re1xuK1x0YXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7XG4rfVxuKyNlbmRpZlxuK1xuKy8qKlxuKyAqIGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcygpIC0gRW5hYmxlIHRoZSBsYXp5IE1NVSBtb2RlIHdpdGggYSBzcGVlZHVwIGhpbnQuXG4rICogQG1tOiBBZGRyZXNzIHNwYWNlIHRoZSBwYWdlcyBhcmUgbWFwcGVkIGludG8uXG4rICogQGFkZHI6IFN0YXJ0IGFkZHJlc3Mgb2YgdGhlIHJhbmdlLlxuKyAqIEBlbmQ6IEVuZCBhZGRyZXNzIG9mIHRoZSByYW5nZS5cbisgKiBAcHRlcDogUGFnZSB0YWJsZSBwb2ludGVyIGZvciB0aGUgZmlyc3QgZW50cnkuXG4rICpcbisgKiBFbnRlcnMgYSBuZXcgbGF6eSBNTVUgbW9kZSBzZWN0aW9uOyBpZiB0aGUgbW9kZSB3YXMgbm90IGFscmVhZHkgZW5hYmxlZCxcbisgKiBlbmFibGVzIGl0IGFuZCBjYWxscyBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKCkuXG4rICpcbisgKiBQVEVzIHRoYXQgZmFsbCB3aXRoaW4gdGhlIHNwZWNpZmllZCByYW5nZSBtaWdodCBvYnNlcnZlIHVwZGF0ZSBzcGVlZHVwcy5cbisgKiBUaGUgUFRFcyBtdXN0IGJlbG9uZyB0byB0aGUgc3BlY2lmaWVkIGFkZHJlc3Mgc3BhY2UgYW5kIGJlIGluIHRoZSBzYW1lIFBNRC5cbisgKlxuKyAqIFRoZXJlIGFyZSBubyByZXF1aXJlbWVudHMgb24gdGhlIG9yZGVyIG9yIHJhbmdlIGNvbXBsZXRlbmVzcyBvZiBQVEVcbisgKiB1cGRhdGVzIGZvciB0aGUgc3BlY2lmaWVkIHJhbmdlLlxuKyAqXG4rICogTXVzdCBiZSBwYWlyZWQgd2l0aCBhIGNhbGwgdG8gbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCkuXG4rICpcbisgKiBIYXMgbm8gZWZmZWN0IGlmIGNhbGxlZDpcbisgKiAtIFdoaWxlIHBhdXNlZCAtIHNlZSBsYXp5X21tdV9tb2RlX3BhdXNlKClcbisgKiAtIEluIGludGVycnVwdCBjb250ZXh0XG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgcHRlX3QgKnB0ZXApXG4re1xuK1x0c3RydWN0IGxhenlfbW11X3N0YXRlICpzdGF0ZSA9IFx1MDAyNmN1cnJlbnQtXHUwMDNlbGF6eV9tbXVfc3RhdGU7XG4rXG4rXHRpZiAoaW5faW50ZXJydXB0KCkgfHwgc3RhdGUtXHUwMDNlcGF1c2VfY291bnQgXHUwMDNlIDApXG4rXHRcdHJldHVybjtcbitcbitcdFZNX1dBUk5fT05fT05DRShzdGF0ZS1cdTAwM2VlbmFibGVfY291bnQgPT0gVThfTUFYKTtcbitcbitcdGlmIChzdGF0ZS1cdTAwM2VlbmFibGVfY291bnQrKyA9PSAwKVxuK1x0XHRhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIHB0ZXApO1xuK31cbitcbiAvKipcbiAgKiBsYXp5X21tdV9tb2RlX2Rpc2FibGUoKSAtIERpc2FibGUgdGhlIGxhenkgTU1VIG1vZGUuXG4gICpcbkBAIC0zODcsNiArNDMxLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfcmVzdW1lKHZvaWQpXG4gfVxuICNlbHNlXG4gc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfZW5hYmxlKHZvaWQpIHt9XG4rc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgcHRlX3QgKnB0ZXApIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfZGlzYWJsZSh2b2lkKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBsYXp5X21tdV9tb2RlX3BhdXNlKHZvaWQpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfcmVzdW1lKHZvaWQpIHt9XG5kaWZmIC0tZ2l0IGEvbW0va2FzYW4vY29tbW9uLmMgYi9tbS9rYXNhbi9jb21tb24uY1xuaW5kZXggYjdkMDVjMmE2ZDkzZC4uOTRkMTA2MDk0OTg5MSAxMDA2NDRcbi0tLSBhL21tL2thc2FuL2NvbW1vbi5jXG4rKysgYi9tbS9rYXNhbi9jb21tb24uY1xuQEAgLTE2Myw2ICsxNjMsMjAgQEAgdm9pZCBfX2thc2FuX3BvaXNvbl9zbGFiKHN0cnVjdCBzbGFiICpzbGFiKVxuIFx0XHQgICAgIEtBU0FOX1NMQUJfUkVEWk9ORSwgZmFsc2UpO1xuIH1cbiBcbit2b2lkIF9fa2FzYW5fcG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpXG4re1xuK1x0aWYgKElTX0FMSUdORUQoc2l6ZW9mKCpwdGUpLCBLQVNBTl9HUkFOVUxFX1NJWkUpKVxuK1x0XHRrYXNhbl9wb2lzb24ocHRlLCBzaXplb2YoKnB0ZSkgKiBuciwgS0FTQU5fTEFaWV9NTVVfUFRFLCBmYWxzZSk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKF9fa2FzYW5fcG9pc29uX3B0ZSk7XG4rXG4rdm9pZCBfX2thc2FuX3VucG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpXG4re1xuK1x0aWYgKElTX0FMSUdORUQoc2l6ZW9mKCpwdGUpLCBLQVNBTl9HUkFOVUxFX1NJWkUpKVxuK1x0XHRrYXNhbl91bnBvaXNvbihwdGUsIHNpemVvZigqcHRlKSAqIG5yLCBmYWxzZSk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKF9fa2FzYW5fdW5wb2lzb25fcHRlKTtcbitcbiB2b2lkIF9fa2FzYW5fdW5wb2lzb25fbmV3X29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsIHZvaWQgKm9iamVjdClcbiB7XG4gXHRrYXNhbl91bnBvaXNvbihvYmplY3QsIGNhY2hlLVx1MDAzZW9iamVjdF9zaXplLCBmYWxzZSk7XG5kaWZmIC0tZ2l0IGEvbW0va2FzYW4va2FzYW4uaCBiL21tL2thc2FuL2thc2FuLmhcbmluZGV4IGZjOTE2OWE1NDc2NjIuLjFhMmQxOGNkYjIxZDkgMTAwNjQ0XG4tLS0gYS9tbS9rYXNhbi9rYXNhbi5oXG4rKysgYi9tbS9rYXNhbi9rYXNhbi5oXG5AQCAtMTQ0LDEyICsxNDQsMTQgQEAgc3RhdGljIGlubGluZSBib29sIGthc2FuX3JlcXVpcmVzX21ldGEodm9pZClcbiAjZGVmaW5lIEtBU0FOX1BBR0VfUkVEWk9ORVx0MHhGRSAgLyogcmVkem9uZSBmb3Iga21hbGxvY19sYXJnZSBhbGxvY2F0aW9uICovXG4gI2RlZmluZSBLQVNBTl9TTEFCX1JFRFpPTkVcdDB4RkMgIC8qIHJlZHpvbmUgZm9yIHNsYWIgb2JqZWN0ICovXG4gI2RlZmluZSBLQVNBTl9TTEFCX0ZSRUVcdFx0MHhGQiAgLyogZnJlZWQgc2xhYiBvYmplY3QgKi9cbisjZGVmaW5lIEtBU0FOX0xBWllfTU1VX1BURVx0MHhGRCAgLyogZGlyZWN0IHB0ZSBhY2Nlc3MgaW4gbGF6eSBtbXUgbW9kZSAqL1xuICNkZWZpbmUgS0FTQU5fVk1BTExPQ19JTlZBTElEXHQweEY4ICAvKiBpbmFjY2Vzc2libGUgc3BhY2UgaW4gdm1hcCBhcmVhICovXG4gI2Vsc2VcbiAjZGVmaW5lIEtBU0FOX1BBR0VfRlJFRVx0XHRLQVNBTl9UQUdfSU5WQUxJRFxuICNkZWZpbmUgS0FTQU5fUEFHRV9SRURaT05FXHRLQVNBTl9UQUdfSU5WQUxJRFxuICNkZWZpbmUgS0FTQU5fU0xBQl9SRURaT05FXHRLQVNBTl9UQUdfSU5WQUxJRFxuICNkZWZpbmUgS0FTQU5fU0xBQl9GUkVFXHRcdEtBU0FOX1RBR19JTlZBTElEXG4rI2RlZmluZSBLQVNBTl9MQVpZX01NVV9QVEVcdEtBU0FOX1RBR19JTlZBTElEXG4gI2RlZmluZSBLQVNBTl9WTUFMTE9DX0lOVkFMSURcdEtBU0FOX1RBR19JTlZBTElEIC8qIG9ubHkgdXNlZCBmb3IgU1dfVEFHUyAqL1xuICNlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL21tL2thc2FuL3JlcG9ydF9nZW5lcmljLmMgYi9tbS9rYXNhbi9yZXBvcnRfZ2VuZXJpYy5jXG5pbmRleCBmNWI4ZTM3YjM4MDVjLi40ODlkNGE4ZDY5MDJkIDEwMDY0NFxuLS0tIGEvbW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuY1xuKysrIGIvbW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuY1xuQEAgLTExMyw2ICsxMTMsOSBAQCBzdGF0aWMgY29uc3QgY2hhciAqZ2V0X3NoYWRvd19idWdfdHlwZShzdHJ1Y3Qga2FzYW5fcmVwb3J0X2luZm8gKmluZm8pXG4gXHRjYXNlIEtBU0FOX1NMQUJfRlJFRV9NRVRBOlxuIFx0XHRidWdfdHlwZSA9IFwic2xhYi11c2UtYWZ0ZXItZnJlZVwiO1xuIFx0XHRicmVhaztcbitcdGNhc2UgS0FTQU5fTEFaWV9NTVVfUFRFOlxuK1x0XHRidWdfdHlwZSA9IFwibGF6eS1tbXUtcHRlLWFjY2Vzc1wiO1xuK1x0XHRicmVhaztcbiBcdGNhc2UgS0FTQU5fQUxMT0NBX0xFRlQ6XG4gXHRjYXNlIEtBU0FOX0FMTE9DQV9SSUdIVDpcbiBcdFx0YnVnX3R5cGUgPSBcImFsbG9jYS1vdXQtb2YtYm91bmRzXCI7XG5kaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jXG5pbmRleCA3NzU1MmIwM2QzMThkLi40NDE5ZDE2YjM5Zjk2IDEwMDY0NFxuLS0tIGEvbW0vbWFkdmlzZS5jXG4rKysgYi9tbS9tYWR2aXNlLmNcbkBAIC00NTIsNyArNDUyLDcgQEAgc3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcbiBcdGlmICghc3RhcnRfcHRlKVxuIFx0XHRyZXR1cm4gMDtcbiBcdGZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pO1xuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbitcdGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgYWRkciwgZW5kLCBzdGFydF9wdGUpO1xuIFx0Zm9yICg7IGFkZHIgXHUwMDNjIGVuZDsgcHRlICs9IG5yLCBhZGRyICs9IG5yICogUEFHRV9TSVpFKSB7XG4gXHRcdG5yID0gMTtcbiBcdFx0cHRlbnQgPSBwdGVwX2dldChwdGUpO1xuQEAgLTUwNyw3ICs1MDcsNyBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuIFx0XHRcdFx0aWYgKCFzdGFydF9wdGUpXG4gXHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0Zmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyhtbSk7XG4tXHRcdFx0XHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuK1x0XHRcdFx0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIHN0YXJ0X3B0ZSk7XG4gXHRcdFx0XHRpZiAoIWVycilcbiBcdFx0XHRcdFx0bnIgPSAwO1xuIFx0XHRcdFx0Y29udGludWU7XG5AQCAtNjc0LDcgKzY3NCw3IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRpZiAoIXN0YXJ0X3B0ZSlcbiBcdFx0cmV0dXJuIDA7XG4gXHRmbHVzaF90bGJfYmF0Y2hlZF9wZW5kaW5nKG1tKTtcbi1cdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4rXHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgc3RhcnRfcHRlKTtcbiBcdGZvciAoOyBhZGRyICE9IGVuZDsgcHRlICs9IG5yLCBhZGRyICs9IFBBR0VfU0laRSAqIG5yKSB7XG4gXHRcdG5yID0gMTtcbiBcdFx0cHRlbnQgPSBwdGVwX2dldChwdGUpO1xuQEAgLTczNCw3ICs3MzQsNyBAQCBzdGF0aWMgaW50IG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdFx0aWYgKCFzdGFydF9wdGUpXG4gXHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0Zmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyhtbSk7XG4tXHRcdFx0XHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuK1x0XHRcdFx0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIHB0ZSk7XG4gXHRcdFx0XHRpZiAoIWVycilcbiBcdFx0XHRcdFx0bnIgPSAwO1xuIFx0XHRcdFx0Y29udGludWU7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggNmI4MjgwY2ZjMWRiZS4uMGNjMDdiMDQzMzg0YiAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTEyNzIsNyArMTI3Miw3IEBAIGNvcHlfcHRlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hLFxuIFx0c3Bpbl9sb2NrX25lc3RlZChzcmNfcHRsLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4gXHRvcmlnX3NyY19wdGUgPSBzcmNfcHRlO1xuIFx0b3JpZ19kc3RfcHRlID0gZHN0X3B0ZTtcbi1cdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4rXHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMoc3JjX21tLCBhZGRyLCBlbmQsIHNyY19wdGUpO1xuIFxuIFx0ZG8ge1xuIFx0XHRuciA9IDE7XG5AQCAtMTkyMiw3ICsxOTIyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgemFwX3B0ZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuIFx0XHRyZXR1cm4gYWRkcjtcbiBcbiBcdGZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pO1xuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbitcdGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgYWRkciwgZW5kLCBzdGFydF9wdGUpO1xuIFx0ZG8ge1xuIFx0XHRib29sIGFueV9za2lwcGVkID0gZmFsc2U7XG4gXG5AQCAtMjkxOSw3ICsyOTE5LDcgQEAgc3RhdGljIGludCByZW1hcF9wdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsXG4gXHRtYXBwZWRfcHRlID0gcHRlID0gcHRlX2FsbG9jX21hcF9sb2NrKG1tLCBwbWQsIGFkZHIsIFx1MDAyNnB0bCk7XG4gXHRpZiAoIXB0ZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuK1x0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIG1hcHBlZF9wdGUpO1xuIFx0ZG8ge1xuIFx0XHRCVUdfT04oIXB0ZV9ub25lKHB0ZXBfZ2V0KHB0ZSkpKTtcbiBcdFx0aWYgKCFwZm5fbW9kaWZ5X2FsbG93ZWQocGZuLCBwcm90KSkge1xuQEAgLTMzMzAsNyArMzMzMCw3IEBAIHN0YXRpYyBpbnQgYXBwbHlfdG9fcHRlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbitcdGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgYWRkciwgZW5kLCBtYXBwZWRfcHRlKTtcbiBcbiBcdGlmIChmbikge1xuIFx0XHRkbyB7XG5kaWZmIC0tZ2l0IGEvbW0vbXByb3RlY3QuYyBiL21tL21wcm90ZWN0LmNcbmluZGV4IDljYmY5MzJiMDI4Y2YuLjNmYzI2NDE4ZTgzN2QgMTAwNjQ0XG4tLS0gYS9tbS9tcHJvdGVjdC5jXG4rKysgYi9tbS9tcHJvdGVjdC5jXG5AQCAtMzM3LDcgKzMzNyw3IEBAIHN0YXRpYyBsb25nIGNoYW5nZV9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbiBcdFx0aXNfcHJpdmF0ZV9zaW5nbGVfdGhyZWFkZWQgPSB2bWFfaXNfc2luZ2xlX3RocmVhZGVkX3ByaXZhdGUodm1hKTtcbiBcbiBcdGZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcodm1hLVx1MDAzZXZtX21tKTtcbi1cdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4rXHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXModm1hLVx1MDAzZXZtX21tLCBhZGRyLCBlbmQsIHB0ZSk7XG4gXHRkbyB7XG4gXHRcdG5yX3B0ZXMgPSAxO1xuIFx0XHRvbGRwdGUgPSBwdGVwX2dldChwdGUpO1xuZGlmZiAtLWdpdCBhL21tL21yZW1hcC5jIGIvbW0vbXJlbWFwLmNcbmluZGV4IGU5YzhiMWQwNTgzMmIuLjBkZmUzZGUzOWNjYzcgMTAwNjQ0XG4tLS0gYS9tbS9tcmVtYXAuY1xuKysrIGIvbW0vbXJlbWFwLmNcbkBAIC0yNjAsNyArMjYwLDcgQEAgc3RhdGljIGludCBtb3ZlX3B0ZXMoc3RydWN0IHBhZ2V0YWJsZV9tb3ZlX2NvbnRyb2wgKnBtYyxcbiBcdGlmIChuZXdfcHRsICE9IG9sZF9wdGwpXG4gXHRcdHNwaW5fbG9ja19uZXN0ZWQobmV3X3B0bCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuIFx0Zmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyh2bWEtXHUwMDNldm1fbW0pO1xuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbitcdGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgb2xkX2FkZHIsIG9sZF9lbmQsIG9sZF9wdGVwKTtcbiBcbiBcdGZvciAoOyBvbGRfYWRkciBcdTAwM2Mgb2xkX2VuZDsgb2xkX3B0ZXAgKz0gbnJfcHRlcywgb2xkX2FkZHIgKz0gbnJfcHRlcyAqIFBBR0VfU0laRSxcbiBcdFx0bmV3X3B0ZXAgKz0gbnJfcHRlcywgbmV3X2FkZHIgKz0gbnJfcHRlcyAqIFBBR0VfU0laRSkge1xuZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuY1xuaW5kZXggZjRmYTIyN2E4ZDdmMC4uMWM2ZWY4ZmQwNzllMCAxMDA2NDRcbi0tLSBhL21tL3ZtYWxsb2MuY1xuKysrIGIvbW0vdm1hbGxvYy5jXG5AQCAtMTA5LDcgKzEwOSw3IEBAIHN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdGlmICghcHRlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4rXHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMoXHUwMDI2aW5pdF9tbSwgYWRkciwgZW5kLCBwdGUpO1xuIFxuIFx0ZG8ge1xuIFx0XHRpZiAodW5saWtlbHkoIXB0ZV9ub25lKHB0ZXBfZ2V0KHB0ZSkpKSkge1xuQEAgLTM5Myw3ICszOTMsNyBAQCBzdGF0aWMgdm9pZCB2dW5tYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHR1bnNpZ25lZCBsb25nIHNpemUgPSBQQUdFX1NJWkU7XG4gXG4gXHRwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHIpO1xuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbitcdGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhcdTAwMjZpbml0X21tLCBhZGRyLCBlbmQsIHB0ZSk7XG4gXG4gXHRkbyB7XG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbkBAIC01NjAsNyArNTYwLDcgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRpZiAoIXB0ZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuK1x0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKFx1MDAyNmluaXRfbW0sIGFkZHIsIGVuZCwgcHRlKTtcbiBcbiBcdGRvIHtcbiBcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwYWdlc1sqbnJdO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6Mzc6NDUuMzc0NzIwMTg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU4MjA5NjAwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBMYXp5IE1NVSBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBuZXcgcGF0Y2ggc2VyaWVzIGhlcmUgdGFyZ2V0aW5nIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgYW5kIGl0IHNlZW1zIHRvIGJlIGFib3V0IGltcGxlbWVudGluZyBhIFwibGF6eSBNTVVcIiBtb2RlLiBJbnRlcmVzdGluZyEgVGhlIGxpc3Qgb2YgbW9kaWZpZWQgZmlsZXMgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBhdHRlbnRpb246IGBsYXp5X21tdS5jYCwgb2YgY291cnNlLCBidXQgYWxzbyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZpbGVzIGxpa2UgYHBndGFibGUuaGAsIGBtYWR2aXNlLmNgLCBgbWVtb3J5LmNgLCBhbmQgZXZlbiBLQVNBTi1yZWxhdGVkIGNvZGUuIFRoaXMgc3VnZ2VzdHMgYSBwcmV0dHkgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IG1lbW9yeSBtYW5hZ2VtZW50IGlzIGhhbmRsZWQsIHBvdGVudGlhbGx5IGltcGFjdGluZyBhIHdpZGUgcmFuZ2Ugb2Ygb3BlcmF0aW9ucy5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBjZW50ZXIgYXJvdW5kIGBsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXNgIGNhbGxpbmcgYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXNgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIHRoZSBlbnRyeSBwb2ludCB0byBhY3RpdmF0ZSB0aGlzIG5ldyBtb2RlLiBBbmQgaXQgbG9va3MgbGlrZSB0aGUgczM5MCBpbXBsZW1lbnRhdGlvbiBpbiBgYXJjaC9zMzkwL21tL2xhenlfbW11LmNgIGlzIGxldmVyYWdpbmcgZmFjaWxpdHkgMTMsIHRoZSBJUFRFLXJhbmdlIGZhY2lsaXR5LCB0byBoYW5kbGUgUFRFIGludmFsaWRhdGlvbnMgaW4gYmF0Y2hlcy4gVGhhdCdzIGEgY2xldmVyIGFwcHJvYWNoLCBhc3N1bWluZyBpdCdzIGRvbmUgZWZmaWNpZW50bHkuXG5cbk5vdywgbXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBJcyB0aGlzIGdvaW5nIHRvIHdvcmsgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzPyBUaGUgZmFjdCB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBpbiBgY29yZSBtbS9gIGFuZCBgYXJjaC9zMzkwL21tL2AgdGVsbHMgbWUgaXQgY291bGQgYmUsIGJ1dCB5b3UgbmV2ZXIga25vdy4gVGhhbmtmdWxseSwgdGhlIHRleHQgZXhwbGljaXRseSBtZW50aW9ucyB0aGF0IHMzOTB4IFFFTVUvS1ZNIHN1cHBvcnRzIGZhY2lsaXR5IDEzIChJUFRFLXJhbmdlKSwgc28gdGhhdCdzIGEgY2hlY2sgaW4gdGhlIGFmZmlybWF0aXZlLiBUaGF0J3MgYSBodWdlIHJlbGllZi5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaW1wbGljYXRpb25zLiBJIHNlZSBhIGBzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERWAgaW4gYGFyY2gvczM5MC9LY29uZmlnYC4gVGhhdCdzIGEgY2xlYXIgaW5kaWNhdG9yIHRoYXQgdGhlcmUncyBwcm9iYWJseSBhIGNvcnJlc3BvbmRpbmcgY29uZmlndXJhdGlvbiBvcHRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHdoYXQgdGhpcyBtb2RlICplbmFibGVzKiBhbmQgKmRpc2FibGVzKi4gVGltZSB0byBncmVwIHRoZSBjb2RlIGZvciBgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERWAgb3Igc29tZXRoaW5nIHNpbWlsYXIgdG8gZmluZCB0aGUgYWN0dWFsIGNvbmZpZyBuYW1lLiBJIG5lZWQgdG8ga25vdyBleGFjdGx5IHdoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGlzIG5ldyBsYXp5IE1NVSBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQwNCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjM3OjUyLjk1NjgxOTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MTk4MDM5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBUkNIX0hBU19MQVpZX01NVV9NT0RFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTM2LVxcdHNlbGVjdCBBUkNIX0hBU19LRUVQSU5JVFJEXFxuYXJjaC9hcm02NC9LY29uZmlnOjM3OlxcdHNlbGVjdCBBUkNIX0hBU19MQVpZX01NVV9NT0RFXFxuYXJjaC9hcm02NC9LY29uZmlnLTM4LVxcdHNlbGVjdCBBUkNIX0hBU19NRU1CQVJSSUVSX1NZTkNfQ09SRVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGU9ODM9Y29uZmlnIFBQQ19CT09LM1NfNjRcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlLTk1LVxcdHNlbGVjdCBLQVNBTl9WTUFMTE9DIGlmIEtBU0FOXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGU6OTY6XFx0c2VsZWN0IEFSQ0hfSEFTX0xBWllfTU1VX01PREVcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZS05Ny1cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTc1PWNvbmZpZyBTMzkwXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy05OS1cXHRzZWxlY3QgQVJDSF9IQVNfS0NPVlxcbmFyY2gvczM5MC9LY29uZmlnOjEwMDpcXHRzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERVxcbmFyY2gvczM5MC9LY29uZmlnLTEwMS1cXHRzZWxlY3QgQVJDSF9IQVNfTUVNQkFSUklFUl9TWU5DX0NPUkVcXG4tLVxcbmFyY2gvc3BhcmMvS2NvbmZpZz03MD1jb25maWcgU1BBUkM2NFxcbi0tXFxuYXJjaC9zcGFyYy9LY29uZmlnLTExNC1cXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19TQ0hFRF9NQyAgaWYgU01QXFxuYXJjaC9zcGFyYy9LY29uZmlnOjExNTpcXHRzZWxlY3QgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERVxcbmFyY2gvc3BhcmMvS2NvbmZpZy0xMTYtXFx0c2VsZWN0IEhBVkVfR0VORVJJQ19WRFNPXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTgwNT1jb25maWcgUEFSQVZJUlRfWFhMXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTgwNy1cXHRkZXBlbmRzIG9uIFg4Nl82NFxcbmFyY2gveDg2L0tjb25maWc6ODA4OlxcdHNlbGVjdCBBUkNIX0hBU19MQVpZX01NVV9NT0RFXFxuYXJjaC94ODYvS2NvbmZpZy04MDktXFxuLS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5oLTEzLSN1bmRlZiBDT05GSUdfUEFSQVZJUlRfU1BJTkxPQ0tTXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuaDoxNDojdW5kZWYgQ09ORklHX0FSQ0hfSEFTX0xBWllfTU1VX01PREVcXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5oLTE1LSN1bmRlZiBDT05GSUdfS0FTQU5cXG4tLVxcbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9zbWUuYy0yNi0jdW5kZWYgQ09ORklHX1BBUkFWSVJUX1NQSU5MT0NLU1xcbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9zbWUuYzoyNzojdW5kZWYgQ09ORklHX0FSQ0hfSEFTX0xBWllfTU1VX01PREVcXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvc21lLmMtMjgtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaD0xOTA9c3RhdGljIGlubGluZSBpbnQgcG1kX2RpcnR5KHBtZF90IHBtZClcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTI0Ny0gKi9cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDoyNDg6I2lmZGVmIENPTkZJR19BUkNIX0hBU19MQVpZX01NVV9NT0RFXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjQ5LS8qKlxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oPTgyNj1zdHJ1Y3QgdGFza19zdHJ1Y3Qge1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE0MzgtXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjE0Mzk6I2lmZGVmIENPTkZJR19BUkNIX0hBU19MQVpZX01NVV9NT0RFXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE0NDAtXFx0c3RydWN0IGxhenlfbW11X3N0YXRlXFx0XFx0bGF6eV9tbXVfc3RhdGU7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9MTcyND1zdGF0aWMgaW5saW5lIGNoYXIgdGFza19zdGF0ZV90b19jaGFyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE3MjgtXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjE3Mjk6I2lmZGVmIENPTkZJR19BUkNIX0hBU19MQVpZX01NVV9NT0RFXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE3MzAtLyoqXFxuLS1cXG5tbS9LY29uZmlnPTE0OTA9Y29uZmlnIEZJTkRfTk9STUFMX1BBR0VcXG4tLVxcbm1tL0tjb25maWctMTQ5Mi1cXG5tbS9LY29uZmlnOjE0OTM6Y29uZmlnIEFSQ0hfSEFTX0xBWllfTU1VX01PREVcXG5tbS9LY29uZmlnLTE0OTQtXFx0Ym9vbFxcbi0tXFxubW0vS2NvbmZpZz0xNTAwPWNvbmZpZyBMQVpZX01NVV9NT0RFX0tVTklUX1RFU1RcXG5tbS9LY29uZmlnLTE1MDEtXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciB0aGUgbGF6eSBNTVUgbW9kZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL0tjb25maWc6MTUwMjpcXHRkZXBlbmRzIG9uIEFSQ0hfSEFTX0xBWllfTU1VX01PREVcXG5tbS9LY29uZmlnLTE1MDMtXFx0ZGVwZW5kcyBvbiBLVU5JVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozNzo1NC42Mjg4MDM0MDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTgyNTU4MjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTGF6eSBNTVUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGludHJvZHVjaW5nIGBDT05GSUdfTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUYC4gVGhlIGluaXRpYWwgY2x1ZSBpcyB0aGUgYWRkaXRpb24gb2YgYGxhenlfbW11LmNgIHRvIHRoZSBgYXJjaC9zMzkwL21tL01ha2VmaWxlYC4gSXQncyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHksIHNvIGl0J3MgYWx3YXlzIGluY2x1ZGVkIHdoZW4gdGhlIGtlcm5lbCBpcyBidWlsdCBmb3IgczM5MC5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgaW50ZXJhY3Rpb24gd2l0aCBLQVNBTiwgYW5kIHllcCwgdGhlcmUgYXJlIGNoYW5nZXMgdG8gYGluY2x1ZGUvbGludXgva2FzYW4uaGAgYW5kIGBtbS9rYXNhbi9jb21tb24uY2AsIHNwZWNpZmljYWxseSBhZGRpbmcgYF9fa2FzYW5fcG9pc29uX3B0ZWAsIGBfX2thc2FuX3VucG9pc29uX3B0ZWAsIGFuZCBgS0FTQU5fTEFaWV9NTVVfUFRFYC4gVGhpcyBtZWFucyBgQ09ORklHX0tBU0FOYCBpcyBnb2luZyB0byBiZSByZWxldmFudCB3aGVuIHRlc3RpbmcuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIGBhcmNoL3MzOTAvbW0vbGF6eV9tbXUuY2AuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoZXNlIGZ1bmN0aW9uczogYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZWAsIGBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzYCwgYGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZWAsIGBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGVgLCBgX19sYXp5X21tdV9zZXRfcHRlYCwgYF9fbGF6eV9tbXVfcHRlcF9nZXRgLCBgX19sYXp5X21tdV9wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nYCwgYF9fbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyYCwgYF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydGAsIGBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0YCwgYW5kIGBfX2xhenlfbW11X3B0ZXBfc2V0X3dycHJvdGVjdGAuXG5cblRoZXNlIGZ1bmN0aW9ucyBhcmUga2V5IGJlY2F1c2UgdGhleSBhcmUgaW52b2tlZCBmcm9tIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oYCBpbmxpbmUgZnVuY3Rpb25zIGxpa2UgYGxhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmdgLCBgc2V0X3B0ZWAsIGBwdGVwX2dldGAsIGV0Yy4gVGhlc2UgYXJlICp2ZXJ5KiBob3QgcGF0aCBmdW5jdGlvbnMuIFRoZSBgX19sYXp5X21tdV8qYCB2YXJpYW50cyBhcmUgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbnMuIFRoZSBwcm9tcHQgd2FudHMgbWUgdG8gYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zLiBXaGlsZSB0aGUgYF9fbGF6eV9tbXVfKmAgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBhbmQgbm90IGlubGluZWQsIHRoZXkgYXJlIGNhbGxlZCBvbiAqZXZlcnkqIFBURSBvcGVyYXRpb24gd2hlbiB0aGUgbGF6eSBNTVUgaXMgYWN0aXZlLiBUZWNobmljYWxseSB0aGV5IGFyZSBub3Qgc3RhdGljLCBhbmQgbm90IGlubGluZWQgYnV0IHRoZXkgYXJlIGhvdC1wYXRoLiBcblxuSG93ZXZlciwgYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXNgLCBgYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlYCwgYW5kIGBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGVgIGFyZSBnb29kIGVudHJ5IHBvaW50cyB0aGF0IHNob3VsZCBiZSB0ZXN0ZWQgYmVjYXVzZSB0aGV5IGFyZSB0aGUgZW50cnkgcG9pbnRzIHRvIHRoZSBsYXp5IE1NVSBtb2RlLlxuSSdsbCBrZWVwIGBhcmNoL3MzOTAvbW0vbGF6eV9tbXUuY2Agb3BlbiBhcyBJIGNvbnRpbnVlIHRvIGV4YW1pbmUgdGhlIGV4YWN0IGZ1bmN0aW9ucyBpbnZvbHZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzNjksIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6Mzg6MDQuNjExMzY0MDM2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDAyOTEwMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnZvaWQgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MTI0OT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19wdGVwX2lwdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgbnIsXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEyNjItXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMjYzOnZvaWQgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEyNjQtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTI2Ny1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjEyNjg6dm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGUodm9pZCk7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xMjY5LXZvaWQgYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKHZvaWQpO1xcbi0tXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM9MTkwPXN0YXRpYyB2b2lkIGZsdXNoX2xhenlfbW11X21vZGUodm9pZClcXG4tLVxcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTIxMi1cXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYzoyMTM6dm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGUodm9pZClcXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0yMTQte1xcbi0tXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM9MjE3PUVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKTtcXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0yMTgtXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM6MjE5OnZvaWQgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0yMjAtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiZmx1c2hfNjQuaD00MT12b2lkIGZsdXNoX3RsYl9wZW5kaW5nKHZvaWQpO1xcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiZmx1c2hfNjQuaDo0Mjp2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSh2b2lkKTtcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYmZsdXNoXzY0LmgtNDMtdm9pZCBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUodm9pZCk7XFxuLS1cXG5hcmNoL3NwYXJjL21tL3RsYi5jPTI1PXZvaWQgZmx1c2hfdGxiX3BlbmRpbmcodm9pZClcXG4tLVxcbmFyY2gvc3BhcmMvbW0vdGxiLmMtNTQtXFxuYXJjaC9zcGFyYy9tbS90bGIuYzo1NTp2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSh2b2lkKVxcbmFyY2gvc3BhcmMvbW0vdGxiLmMtNTYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozODowNi41NTE2NjE1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE0Mzg0NTEwNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIGluamVjdCBmdXp6aW5nIGludG8gdGhpcyBsYXp5IE1NVSBpbXBsZW1lbnRhdGlvbi4gVGhlIGdvYWwsIGFzIGFsd2F5cywgaXMgdG8gZmluZCBnb29kIGNhbmRpZGF0ZXMgdGhhdCBhcmUgYm90aCBpbXBhY3RmdWwgYW5kIHdvbid0IGxlYWQgdG8gc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucyBieSBmb2N1c2luZyBvbiB0aGUgaW5zYW5lbHkgaG90IHBhdGhzLlxuXG5Jbml0aWFsbHksIEkgY29uc2lkZXJlZCB0aGUgY29yZSBQVEUgbWFuaXB1bGF0aW9uIGZ1bmN0aW9uczogYF9fbGF6eV9tbXVfc2V0X3B0ZWAsIGBfX2xhenlfbW11X3B0ZXBfZ2V0YCwgYF9fbGF6eV9tbXVfcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZ2AsIGFuZCB0aGUgb3RoZXJzLiBUaGVzZSBhcmUgdGhlIHdvcmtob3JzZXMg4oCTIGRpcmVjdCBvcGVyYXRpb25zIG9uIHBhZ2UgdGFibGUgZW50cmllcy4gQnV0IHRoZW4gdGhlIHByb21wdCByZW1pbmRlZCBtZSB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgYW5kIHRoZXNlIGFyZSAqZGVmaW5pdGVseSogaG90IHBhdGgsIGNhbGxlZCByZXBlYXRlZGx5IGZvciBldmVyeSBzaW5nbGUgcGFnZSBhY2Nlc3MuIFNvLCBzY3JhdGNoIHRob3NlLlxuXG5Ib3dldmVyLCBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc2AgY2F1Z2h0IG15IGV5ZSBhZ2Fpbi4gV2hpbGUgbm90IGRpcmVjdGx5IG9wZXJhdGluZyBvbiBpbmRpdmlkdWFsIHBhZ2VzLCBpdCdzIGNhbGxlZCBkdXJpbmcgb3BlcmF0aW9ucyB0aGF0ICptYW5hZ2UqIHZpcnR1YWwgbWVtb3J5IHJhbmdlcyDigJMgdGhpbmdzIGxpa2UgYG1hZHZpc2VgLCBgbXByb3RlY3RgLCBgbXJlbWFwYCwgYHZtYWxsb2NgLCBhbmQgd2hhdCBsb29rcyBsaWtlIGB0YXNrX21tdS5jYC4gVGhlc2UgYXJlIHN5c2NhbGxzLCBub3QgdGhlIHN0dWZmIHRoYXQncyBoYXBwZW5pbmcgb24gZXZlcnkgc2luZ2xlIG1lbW9yeSBhY2Nlc3MuIEFuZCwgbG9va2luZyBhdCB0aGUgY29kZSwgYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXNgIHNlZW1zIHRvIGJlIGludm9rZWQgb25jZSBwZXIgVk1BIHJhbmdlIG9wZXJhdGlvbi4gVGhhdCBtYWtlcyBpdCBhIHNvbGlkIGNhbmRpZGF0ZS4gSXQgYmFsYW5jZXMgaW1wYWN0IHdpdGggYXZvaWRpbmcgdGhlIHRydWx5IGluc2FuZSBob3QgcGF0aC5cblxuTm93LCBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSB0byBjb25maXJtIG15IGluaXRpYWwgdGhvdWdodHMuIEknbGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBgYXJjaC9zMzkwL21tL2xhenlfbW11LmNgIHNvdXJjZSBmaWxlIHRvIHNlZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIGV4cG9ydGVkIGFuZCBub24tc3RhdGljIGZ1bmN0aW9ucy4gVGhhdCdsbCBwcm92aWRlIGEgYmV0dGVyIG92ZXJhbGwgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNTksIk91dHB1dFRva2VucyI6NzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6Mzg6MjcuOTkwMTE0OTY3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTY1MTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKC4qXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL21tL2xhenlfbW11LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL21tL2xhenlfbW11LmM9MTE9c3RydWN0IGlwdGVfcmFuZ2Uge1xcbi0tXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMjAtXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM6MjE6c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBpcHRlX3JhbmdlICosIGlwdGVfcmFuZ2UpO1xcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTIyLVxcbi0tXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM9MTkwPXN0YXRpYyB2b2lkIGZsdXNoX2xhenlfbW11X21vZGUodm9pZClcXG4tLVxcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTIxMi1cXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYzoyMTM6dm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGUodm9pZClcXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0yMTQte1xcbi0tXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM9MjI1PUVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcyk7XFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMjI2LVxcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jOjIyNzp2b2lkIGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSh2b2lkKVxcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTIyOC17XFxuLS1cXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYz0yMzE9RVhQT1JUX1NZTUJPTF9JRl9LVU5JVChhcmNoX2xlYXZlX2xhenlfbW11X21vZGUpO1xcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTIzMi1cXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYzoyMzM6dm9pZCBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUodm9pZClcXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0yMzQte1xcbi0tXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM9MjczPXN0YXRpYyBzdHJ1Y3QgaXB0ZV9yYW5nZSAqdGhpc19pcHRlX3JhbmdlKHB0ZV90ICpwdGVwKVxcbi0tXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMjg3LVxcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jOjI4ODpib29sIF9fbGF6eV9tbXVfc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTI4OS17XFxuLS1cXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0zMDAtXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM6MzAxOmJvb2wgX19sYXp5X21tdV9wdGVwX2dldChwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcylcXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0zMDIte1xcbi0tXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMzEzLVxcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jOjMxNDpib29sIF9fbGF6eV9tbXVfcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBpbnQgKnJlcylcXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0zMTUte1xcbi0tXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMzMwLVxcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jOjMzMTpib29sIF9fbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMzMyLXtcXG4tLVxcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTM0Ny1cXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYzozNDg6Ym9vbCBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcylcXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy0zNDkte1xcbi0tXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM9MzUzPWJvb2wgX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxcbi0tXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMzY2LVxcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jOjM2Nzpib29sIF9fbGF6eV9tbXVfcHRlcF9zZXRfd3Jwcm90ZWN0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmMtMzY4LXtcXG4tLVxcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTM4NC1cXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYzozODU6aW50IGxhenlfbW11X29ubGluZV9jcHUoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgY3B1KVxcbmFyY2gvczM5MC9tbS9sYXp5X21tdS5jLTM4Ni17XFxuLS1cXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy00MDItXFxuYXJjaC9zMzkwL21tL2xhenlfbW11LmM6NDAzOnZvaWQgbGF6eV9tbXVfb2ZmbGluZV9jcHUodW5zaWduZWQgaW50IGNwdSlcXG5hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYy00MDQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozODoyOC4wMzgwODQ4MDJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTU3NjEzMjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgTGF6eSBNTVUgTW9kZSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcHJvcG9zZWQgbGF6eSBNTVUgbW9kZSBpbXBsZW1lbnRhdGlvbi4gRnJvbSB0aGUgaW5pdGlhbCBzY2FuLCBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlYCwgYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXNgLCBgYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlYCwgYW5kIGBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGVgIGFsbCBzZWVtIGxpa2UgcHJvbWlzaW5nIGNhbmRpZGF0ZXMgZm9yIG1vZGlmaWNhdGlvbi4gVGhlIENQVSBvbmxpbmUvb2ZmbGluZSBmdW5jdGlvbnMsIGBsYXp5X21tdV9vbmxpbmVfY3B1YCBhbmQgYGxhenlfbW11X29mZmxpbmVfY3B1YCwgYWxzbyBhcHBlYXIgcmVsZXZhbnQuIEhvd2V2ZXIsIEkgbmVlZCB0byBiZSBjYXV0aW91cyBhYm91dCBmdW5jdGlvbnMgbGlrZSBgX19sYXp5X21tdV9zZXRfcHRlYCBhbmQgc2ltaWxhciBsb3dlci1sZXZlbCBQVEUgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLiBXaGlsZSB0aGV5IGFyZSBjYWxsZWQgZnJvbSBgc2V0X3B0ZWAsIHdoaWNoIGlzIGEgbm90b3Jpb3VzbHkgaG90IHBhdGgsIG1vZGlmeWluZyB0aGVtIGNvdWxkIGludHJvZHVjZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucy4gSSdsbCBleGNsdWRlIHRoZW0gZnJvbSBpbml0aWFsIGNvbnNpZGVyYXRpb24gdG8gYXZvaWQgYW55IGltbWVkaWF0ZSBpbXBhY3QuXG5cbk5vdywgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEdpdmVuIHRoZSBjb250ZXh0LCBgQ09ORklHX0tBU0FOYCBpcyBvYnZpb3VzbHkgbmVlZGVkIHRvIGVuYWJsZSBLQVNBTi1yZWxhdGVkIGNoYW5nZXMsIGJ1dCBhcmUgdGhlcmUgbW9yZSBzcGVjaWZpYyBLQVNBTiBjb25maWd1cmF0aW9ucyBpbnZvbHZlZCwgc3VjaCBhcyBgQ09ORklHX0tBU0FOX0dFTkVSSUNgIG9yIGBDT05GSUdfS0FTQU5fU1dfVEFHU2AgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IFRoZSBwYXRjaCB0b3VjaGVzIGBtbS9rYXNhbi9jb21tb24uY2AgYW5kIGBpbmNsdWRlL2xpbnV4L2thc2FuLmhgLCB3aGljaCBzdWdnZXN0cyBLQVNBTiBpbnRlZ3JhdGlvbiBpcyBjcnVjaWFsIHRvIHRoZSBkZXNpZ24uIFRoZSBhZGRpdGlvbiBvZiBgX19rYXNhbl9wb2lzb25fcHRlYCBhbmQgYF9fa2FzYW5fdW5wb2lzb25fcHRlYCBmdW5jdGlvbnMgcmVpbmZvcmNlcyB0aGlzLlxuXG5JJ2xsIHNwZWNpZmljYWxseSBuZWVkIHRvIGV4YW1pbmUgYG1tL2thc2FuL2NvbW1vbi5jYCBpbiBkZXRhaWwgdG8gY29uZmlybSB0aGF0IHRoZSByZWxldmFudCBzZWN0aW9ucyBhcmUgaW5kZWVkIGNvbXBpbGVkIG9ubHkgd2hlbiBgQ09ORklHX0tBU0FOYCBpcyBkZWZpbmVkLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgdG8gZW5zdXJlIHdlIGRvbid0IGludHJvZHVjZSBLQVNBTi1zcGVjaWZpYyBjb2RlIGludG8gbm9uLUtBU0FOIGJ1aWxkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1MzgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6Mzg6MzMuOTk1NzAxNjYxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njk3ODk4NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXm9iai1cXFxcJFxcXFwoQ09ORklHX0tBU0FOXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va2FzYW4vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjM4OjM0LjA0MjY5NTA5NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDU5MDQ0MTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgcHJvdmlkZWQgdGV4dDpcblxuKipEaXZpbmcgaW50byB0aGUgS0FTQU4gTWFrZWZpbGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbW0va2FzYW4vTWFrZWZpbGVgLiBJIGtub3cgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBidWlsZCBjb25maWd1cmF0aW9uIGZvciBLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIgKEtBU0FOKSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSByZXNpZGVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCdzIGRlZmluZWQgdGhlcmUsIGFuZCBob3cgdGhleSBob29rIGludG8gdGhlIGJyb2FkZXIgYnVpbGQgcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgSSBzaG91bGQ6XG5cbiogICAqKlF1aWNrbHkgc2NhbiBmb3Iga2V5IHZhcmlhYmxlczoqKiBJIGV4cGVjdCB0byBmaW5kIGZsYWdzIHJlbGF0ZWQgdG8gY29tcGlsZXIgb3B0aW9ucywgb2JqZWN0IGZpbGUgaW5jbHVzaW9uLCBhbmQgcG90ZW50aWFsbHkgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBvciBzcGVjaWZpYyBLQVNBTiBmZWF0dXJlcy5cbiogICAqKkxvb2sgZm9yIGRlcGVuZGVuY2llczoqKiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBNYWtlZmlsZSBpbnRlcmFjdHMgd2l0aCBvdGhlciBgTWFrZWZpbGVzYCBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgKGBtbWApIGRpcmVjdG9yeSBhbmQgcG90ZW50aWFsbHkgaGlnaGVyIHVwIGluIHRoZSBrZXJuZWwncyBidWlsZCBoaWVyYXJjaHkuIFdoYXQgZG9lcyBpdCBkZXBlbmQgb24sIGFuZCB3aGF0IGRvZXMgaXQgcHJvdmlkZT9cbiogICAqKkZvY3VzIG9uIHRoZSBidWlsZCB0YXJnZXRzOioqIEFyZSB0aGVyZSBzcGVjaWZpYyB0YXJnZXRzIGRlZmluZWQgZm9yIGRpZmZlcmVudCBLQVNBTiBjb21wb25lbnRzLCBvciBpcyBpdCBhIG1vcmUgbW9ub2xpdGhpYyBidWlsZCBhcHByb2FjaD8gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgbW9kdWxhciB0aGUgS0FTQU4gaW1wbGVtZW50YXRpb24gaXMuXG4qICAgKipJZGVudGlmeSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzOioqIExvb2sgZm9yIHdoZXJlIHRoZSBLQVNBTiBjb2RlIGdldHMgaW50ZWdyYXRlZCBkdXJpbmcga2VybmVsIGNvbXBpbGF0aW9uLCB3aGljaCBjb3VsZCBiZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZS5cblxuRXNzZW50aWFsbHksIEkgd2FudCB0byBmb3JtIGEgbWVudGFsIG1vZGVsIG9mIEtBU0FOJ3MgYnVpbGQgcHJvY2VzcyB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGZyYW1ld29yay4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyNTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozODo0My41MDE3NDE2OTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va2FzYW4vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRLQVNBTl9TQU5JVElaRSA6PSBuXFxuICAgMzpcXHRVQlNBTl9TQU5JVElaRSA6PSBuXFxuICAgNDpcXHRLQ09WX0lOU1RSVU1FTlQgOj0gblxcbiAgIDU6XFx0XFxuICAgNjpcXHQjIERpc2FibGUgZnRyYWNlIHRvIGF2b2lkIHJlY3Vyc2lvbi5cXG4gICA3OlxcdENGTEFHU19SRU1PVkVfY29tbW9uLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcXG4gICA4OlxcdENGTEFHU19SRU1PVkVfZ2VuZXJpYy5vID0gJChDQ19GTEFHU19GVFJBQ0UpXFxuICAgOTpcXHRDRkxBR1NfUkVNT1ZFX2luaXQubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxcbiAgMTA6XFx0Q0ZMQUdTX1JFTU9WRV9xdWFyYW50aW5lLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcXG4gIDExOlxcdENGTEFHU19SRU1PVkVfcmVwb3J0Lm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcXG4gIDEyOlxcdENGTEFHU19SRU1PVkVfcmVwb3J0X2dlbmVyaWMubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxcbiAgMTM6XFx0Q0ZMQUdTX1JFTU9WRV9yZXBvcnRfaHdfdGFncy5vID0gJChDQ19GTEFHU19GVFJBQ0UpXFxuICAxNDpcXHRDRkxBR1NfUkVNT1ZFX3JlcG9ydF9zd190YWdzLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcXG4gIDE1OlxcdENGTEFHU19SRU1PVkVfc2hhZG93Lm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcXG4gIDE2OlxcdENGTEFHU19SRU1PVkVfaHdfdGFncy5vID0gJChDQ19GTEFHU19GVFJBQ0UpXFxuICAxNzpcXHRDRkxBR1NfUkVNT1ZFX3N3X3RhZ3MubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxcbiAgMTg6XFx0XFxuICAxOTpcXHQjIEZ1bmN0aW9uIHNwbGl0dGVyIGNhdXNlcyB1bm5lY2Vzc2FyeSBzcGxpdHMgaW4gX19hc2FuX2xvYWQxL19fYXNhbl9zdG9yZTFcXG4gIDIwOlxcdCMgc2VlOiBodHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD02MzUzM1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozODo0My41MDE4MDQ3NjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ3MDY2OTQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5LiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuIEhlcmUncyBhIHN1bW1hcnk6XG5cbioqRGlnZ2luZyBEZWVwZXI6IFRoZSBVcmdlIHRvIFVuZGVyc3RhbmQqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIGNsZWFyOiBJIG5lZWQgdG8gZGVsdmUgZnVydGhlci4gSXQncyB0aGF0IGltbWVkaWF0ZSwgYWxtb3N0IGludm9sdW50YXJ5IHJlYWN0aW9uIEkgZ2V0IHdoZW4gcHJlc2VudGVkIHdpdGggc29tZXRoaW5nIG5ldywgc29tZXRoaW5nIHRoYXQgc3BhcmtzIG15IGN1cmlvc2l0eS4gTXkgZXhwZXJpZW5jZSBoYXMgdGF1Z2h0IG1lIHRoYXQgaW5pdGlhbCBzdXJmYWNlIGltcHJlc3Npb25zIGFyZSByYXJlbHkgZW5vdWdoLiBUaGVyZSdzIGFsd2F5cyBhIGhpZGRlbiBjb21wbGV4aXR5LCBhIG51YW5jZSwgYSBkZWVwZXIgbGF5ZXIgb2YgbWVhbmluZyB3YWl0aW5nIHRvIGJlIHVuY292ZXJlZC4gUmVhZGluZyBtb3JlLCBhbmFseXppbmcgbW9yZSwgaW52ZXN0aWdhdGluZyBtb3JlIOKAkyB0aGF0J3MgdGhlIG9ubHkgd2F5IHRvIHRydWx5IGdyYXNwIHRoZSBzdWJqZWN0IGF0IGhhbmQgYW5kIGFzc2VzcyBpdHMgc2lnbmlmaWNhbmNlIHdpdGhpbiB0aGUgYnJvYWRlciBmcmFtZXdvcmsgb2YgbXkgZXhwZXJ0aXNlLiBUaGlzIHVyZ2UsIHRoaXMgY29tcHVsc2lvbiB0byB1bmRlcnN0YW5kIHRob3JvdWdobHksIGlzIGZ1bmRhbWVudGFsIHRvIGhvdyBJIGFwcHJvYWNoIG15IHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDIwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjM4OjUwLjk3MjQ3NjU0M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9rYXNhbi9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAyMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMTpcXHRDQ19GTEFHU19LQVNBTl9SVU5USU1FIDo9ICQoY2FsbCBjYy1vcHRpb24sIC1mbm8tY29uc2VydmUtc3RhY2spXFxuICAyMjpcXHRDQ19GTEFHU19LQVNBTl9SVU5USU1FICs9IC1mbm8tc3RhY2stcHJvdGVjdG9yXFxuICAyMzpcXHQjIERpc2FibGUgYnJhbmNoIHRyYWNpbmcgdG8gYXZvaWQgcmVjdXJzaW9uLlxcbiAgMjQ6XFx0Q0NfRkxBR1NfS0FTQU5fUlVOVElNRSArPSAtRERJU0FCTEVfQlJBTkNIX1BST0ZJTElOR1xcbiAgMjU6XFx0XFxuICAyNjpcXHRDRkxBR1NfY29tbW9uLm8gOj0gJChDQ19GTEFHU19LQVNBTl9SVU5USU1FKVxcbiAgMjc6XFx0Q0ZMQUdTX2dlbmVyaWMubyA6PSAkKENDX0ZMQUdTX0tBU0FOX1JVTlRJTUUpXFxuICAyODpcXHRDRkxBR1NfaW5pdC5vIDo9ICQoQ0NfRkxBR1NfS0FTQU5fUlVOVElNRSlcXG4gIDI5OlxcdENGTEFHU19xdWFyYW50aW5lLm8gOj0gJChDQ19GTEFHU19LQVNBTl9SVU5USU1FKVxcbiAgMzA6XFx0Q0ZMQUdTX3JlcG9ydC5vIDo9ICQoQ0NfRkxBR1NfS0FTQU5fUlVOVElNRSlcXG4gIDMxOlxcdENGTEFHU19yZXBvcnRfZ2VuZXJpYy5vIDo9ICQoQ0NfRkxBR1NfS0FTQU5fUlVOVElNRSlcXG4gIDMyOlxcdENGTEFHU19yZXBvcnRfaHdfdGFncy5vIDo9ICQoQ0NfRkxBR1NfS0FTQU5fUlVOVElNRSlcXG4gIDMzOlxcdENGTEFHU19yZXBvcnRfc3dfdGFncy5vIDo9ICQoQ0NfRkxBR1NfS0FTQU5fUlVOVElNRSlcXG4gIDM0OlxcdENGTEFHU19zaGFkb3cubyA6PSAkKENDX0ZMQUdTX0tBU0FOX1JVTlRJTUUpXFxuICAzNTpcXHRDRkxBR1NfaHdfdGFncy5vIDo9ICQoQ0NfRkxBR1NfS0FTQU5fUlVOVElNRSlcXG4gIDM2OlxcdENGTEFHU19zd190YWdzLm8gOj0gJChDQ19GTEFHU19LQVNBTl9SVU5USU1FKVxcbiAgMzc6XFx0XFxuICAzODpcXHRDRkxBR1NfS0FTQU5fVEVTVCA6PSAkKENGTEFHU19LQVNBTilcXG4gIDM5OlxcdGlmbmRlZiBDT05GSUdfQ0NfSEFTX0tBU0FOX01FTUlOVFJJTlNJQ19QUkVGSVhcXG4gIDQwOlxcdCMgSWYgY29tcGlsZXIgaW5zdHJ1bWVudHMgbWVtaW50cmluc2ljcyBieSBwcmVmaXhpbmcgdGhlbSB3aXRoIF9fYXNhbi9fX2h3YXNhbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6Mzg6NTAuOTcyNTM3ODAzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDY0NDA3MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC4gSGVyZSdzIGEgc3VtbWFyeTpcblxuKipEaWdnaW5nIERlZXBlcjogVGhlIFVyZ2UgdG8gVW5kZXJzdGFuZCoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgY2xlYXI6IEkgbmVlZCB0byBkZWx2ZSBmdXJ0aGVyLiBJdCdzIHRoYXQgaW1tZWRpYXRlLCBhbG1vc3QgaW52b2x1bnRhcnkgcmVhY3Rpb24gSSBnZXQgd2hlbiBwcmVzZW50ZWQgd2l0aCBzb21ldGhpbmcgbmV3LCBzb21ldGhpbmcgdGhhdCBzcGFya3MgbXkgY3VyaW9zaXR5LiBNeSBleHBlcmllbmNlIGhhcyB0YXVnaHQgbWUgdGhhdCBpbml0aWFsIHN1cmZhY2UgaW1wcmVzc2lvbnMgYXJlIHJhcmVseSBlbm91Z2guIFRoZXJlJ3MgYWx3YXlzIGEgaGlkZGVuIGNvbXBsZXhpdHksIGEgbnVhbmNlLCBhIGRlZXBlciBsYXllciBvZiBtZWFuaW5nIHdhaXRpbmcgdG8gYmUgdW5jb3ZlcmVkLiBSZWFkaW5nIG1vcmUsIGFuYWx5emluZyBtb3JlLCBpbnZlc3RpZ2F0aW5nIG1vcmUg4oCTIHRoYXQncyB0aGUgb25seSB3YXkgdG8gdHJ1bHkgZ3Jhc3AgdGhlIHN1YmplY3QgYXQgaGFuZCBhbmQgYXNzZXNzIGl0cyBzaWduaWZpY2FuY2Ugd2l0aGluIHRoZSBicm9hZGVyIGZyYW1ld29yayBvZiBteSBleHBlcnRpc2UuIFRoaXMgdXJnZSwgdGhpcyBjb21wdWxzaW9uIHRvIHVuZGVyc3RhbmQgdGhvcm91Z2hseSwgaXMgZnVuZGFtZW50YWwgdG8gaG93IEkgYXBwcm9hY2ggbXkgd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2ODAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6Mzk6MDIuMDM2OTQ4NTgxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2thc2FuL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQxOlxcdCMgd2UgbmVlZCB0byB0cmVhdCB0aGVtIG5vcm1hbGx5IChhcyBidWlsdGlucyksIG90aGVyd2lzZSB0aGUgY29tcGlsZXIgd29uJ3RcXG4gIDQyOlxcdCMgcmVjb2duaXplIHRoZW0gYXMgaW5zdHJ1bWVudGFibGUuIElmIGl0IGRvZXNuJ3QgaW5zdHJ1bWVudCB0aGVtLCB3ZSBuZWVkIHRvXFxuICA0MzpcXHQjIHBhc3MgLWZuby1idWlsdGluLCBzbyB0aGUgY29tcGlsZXIgZG9lc24ndCBpbmxpbmUgdGhlbS5cXG4gIDQ0OlxcdENGTEFHU19LQVNBTl9URVNUICs9IC1mbm8tYnVpbHRpblxcbiAgNDU6XFx0ZW5kaWZcXG4gIDQ2OlxcdFxcbiAgNDc6XFx0Q0ZMQUdTX1JFTU9WRV9rYXNhbl90ZXN0X2MubyArPSAkKGNhbGwgY2Mtb3B0aW9uLCAtV3ZsYS1sYXJnZXItdGhhbj0xKVxcbiAgNDg6XFx0Q0ZMQUdTX2thc2FuX3Rlc3RfYy5vIDo9ICQoQ0ZMQUdTX0tBU0FOX1RFU1QpXFxuICA0OTpcXHRSVVNURkxBR1Nfa2FzYW5fdGVzdF9ydXN0Lm8gOj0gJChSVVNURkxBR1NfS0FTQU4pXFxuICA1MDpcXHRcXG4gIDUxOlxcdG9iai15IDo9IGNvbW1vbi5vIHJlcG9ydC5vXFxuICA1MjpcXHRvYmotJChDT05GSUdfS0FTQU5fR0VORVJJQykgKz0gaW5pdC5vIGdlbmVyaWMubyByZXBvcnRfZ2VuZXJpYy5vIHNoYWRvdy5vIHF1YXJhbnRpbmUub1xcbiAgNTM6XFx0b2JqLSQoQ09ORklHX0tBU0FOX0hXX1RBR1MpICs9IGh3X3RhZ3MubyByZXBvcnRfaHdfdGFncy5vIHRhZ3MubyByZXBvcnRfdGFncy5vXFxuICA1NDpcXHRvYmotJChDT05GSUdfS0FTQU5fU1dfVEFHUykgKz0gaW5pdC5vIHJlcG9ydF9zd190YWdzLm8gc2hhZG93Lm8gc3dfdGFncy5vIHRhZ3MubyByZXBvcnRfdGFncy5vXFxuICA1NTpcXHRcXG4gIDU2OlxcdGthc2FuX3Rlc3Qtb2JqcyA6PSBrYXNhbl90ZXN0X2Mub1xcbiAgNTc6XFx0aWZkZWYgQ09ORklHX1JVU1RcXG4gIDU4OlxcdFxcdGthc2FuX3Rlc3Qtb2JqcyArPSBrYXNhbl90ZXN0X3J1c3Qub1xcbiAgNTk6XFx0ZW5kaWZcXG4gIDYwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozOTowMi4wMzcwMTM0NzFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMxNzczMzk4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLQVNBTiBDb21waWxhdGlvbiBEZWR1Y3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aHJvdWdoIHRoaXMgY29tcGlsYXRpb24gcHJvY2VzcyBhbmQgc29tZXRoaW5nIGlzIGltbWVkaWF0ZWx5IGNsZWFyOiBgY29tbW9uLm9gIGluIHRoZSBrZXJuZWwgYnVpbGQgaXMgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkICppZiogdGhlIEtBU0FOIG1lbW9yeSBzYWZldHkgZmVhdHVyZSBpcyBlbmFibGVkLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgYG1tL2thc2FuYCBpcyB0aGUgc3BlY2lmaWMgc3Vic3lzdGVtIHJlc3BvbnNpYmxlIGZvciBLQVNBTiwgc28gdGhhdCdzIHdoZXJlIHRvIHN0YXJ0LiBUaGUgY3J1Y2lhbCBwaWVjZSBoZXJlIGlzIGZpZ3VyaW5nIG91dCB0aGUgY29uZGl0aW9uIHRoYXQgZ2V0cyB1cyAqaW50byogYG1tL2thc2FuYC4gQmFzZWQgb24gdGhpcywgaXQncyBwcmV0dHkgb2J2aW91cyB0aGF0IGBDT05GSUdfS0FTQU5gIGlzIHRoZSBkZWNpZGluZyBmYWN0b3IuXG5cblRpbWUgdG8gY29uZmlybSBteSBzdXNwaWNpb25zIGFuZCB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcy4gSSBzaG91bGQgY2hlY2sgdGhlIGBtbS9NYWtlZmlsZWAgdG8gc2VlIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGhhbmRsZXMgdGhlIGBtbS9rYXNhbmAgZGlyZWN0b3J5IGFuZCB3aGF0IGNvbmRpdGlvbnMgYXJlIHNwZWNpZmllZC4gQSBxdWljayBsb29rIGF0IHRoZSBNYWtlZmlsZSBzaG91bGQgdGVsbCBtZSBpZiB0aGUgYENPTkZJR19LQVNBTmAgb3B0aW9uIHRydWx5IGRpY3RhdGVzIHRoZSBlbnRyeSBpbnRvIGBtbS9rYXNhbmAgYW5kLCB0aGVyZWZvcmUsIHRoZSBpbmNsdXNpb24gb2YgYGNvbW1vbi5vYC4gTGV0IG1lIGRpdmUgaW4gYW5kIHZlcmlmeSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTMwNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6Mzk6MDguMzU0NzQ5NzYxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDkxNTQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeb2JqLVxcXFwkXFxcXChDT05GSUdfS0FTQU5cXFxcKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT05MT1vYmotJChDT05GSUdfUEFHRV9QT0lTT05JTkcpICs9IHBhZ2VfcG9pc29uLm9cXG5tbS9NYWtlZmlsZTo5MjpvYmotJChDT05GSUdfS0FTQU4pXFx0Kz0ga2FzYW4vXFxubW0vTWFrZWZpbGUtOTMtb2JqLSQoQ09ORklHX0tGRU5DRSkgKz0ga2ZlbmNlL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozOTowOC4zOTk2Njc5NzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTcxNDkxMzI2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLQVNBTiBhbmQgTGF6eSBNTVUgTW9kZSBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNoYW5nZXMgcmVsYXRlZCB0byBLQVNBTiBhbmQgdGhlIGxhenkgTU1VIG1vZGUsIHNwZWNpZmljYWxseSBmb3IgczM5MC4gRmlyc3Qgb2ZmLCBJJ20gdGhpbmtpbmcsIGBDT05GSUdfS0FTQU5gIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUsIHRoYXQncyBjbGVhci4gQnV0IGFyZSB0aGVyZSBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyB0byBjb25zaWRlcj8gVGhlIHBhdGNoIGFkZHMgYHNlbGVjdCBBUkNIX0hBU19MQVpZX01NVV9NT0RFYCB0byBgYXJjaC9zMzkwL0tjb25maWdgLiBSaWdodCwgbGF6eSBNTVUgbW9kZSBnZXRzIGVuYWJsZWQgaWYgYEFSQ0hfSEFTX0xBWllfTU1VX01PREVgIGlzIHNldC4gTm93LCBgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERWAgaXMgYSBib29sZWFuIGNvbmZpZyBkZWZpbmVkIGluIGBtbS9LY29uZmlnYCwgaXQgc2VlbXMgdG8gYmUgc2VsZWN0ZWQgYnkgYFMzOTBgIGl0c2VsZi4gVGhlcmVmb3JlLCBvbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIHRoZSBsYXp5IE1NVSBtb2RlIGlzIGluaGVyZW50bHkgZW5hYmxlZC5cblxuTm93LCBhc2lkZSBmcm9tIGBDT05GSUdfS0FTQU5gLCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIHNob3VsZCBiZSBoaWdobGlnaHRlZD8gVGhlIHBhdGNoIHRvdWNoZXMgYG1tL2thc2FuL3JlcG9ydF9nZW5lcmljLmNgLCB3aGljaCBpcyBvbmx5IGNvbXBpbGVkIGlmIGBDT05GSUdfS0FTQU5fR0VORVJJQ2AgaXMgZW5hYmxlZC4gU2VlbXMgbGlrZSBgS0FTQU5fR0VORVJJQ2AgaXMgZ29pbmcgdG8gYmUgYW5vdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uLlxuXG5EaWdnaW5nIGRlZXBlciwgSSBleGFtaW5lZCBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc2AgaW4gYGFyY2gvczM5MC9tbS9sYXp5X21tdS5jYC4gSXQncyBjYWxsaW5nIGBlbnRlcl9pcHRlX3JhbmdlYCwgd2hpY2gsIGluIHR1cm4sIGlzIHVzaW5nIGB0ZXN0X2ZhY2lsaXR5KDEzKWAuIEZhY2lsaXR5IDEzIHJlcHJlc2VudHMgdGhlIElQVEUtcmFuZ2UgZmFjaWxpdHksIGFuZCB0aGFua2Z1bGx5LCBpdCdzIGF2YWlsYWJsZSBvbiB6MTAgYW5kIGxhdGVyIHN5c3RlbXMgYW5kIGlzIHN1cHBvcnRlZCBpbiBRRU1VLlxuXG5TbywgdGhlIGtleSBmdW5jdGlvbnMgdG8ga2VlcCBpbiBtaW5kIGFyZTogYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZWAsIGBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzYCwgYGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZWAsIGBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGVgLCBgbGF6eV9tbXVfb25saW5lX2NwdWAsIGFuZCBgbGF6eV9tbXVfb2ZmbGluZV9jcHVgLlxuXG5KdXN0IGRvdWJsZS1jaGVja2luZywgSSBzZWUgYGxhenlfbW11X29ubGluZV9jcHVgIGFuZCBgbGF6eV9tbXVfb2ZmbGluZV9jcHVgIGFyZW4ndCBzdGF0aWMgZnVuY3Rpb25zLiBBbmQsIHRoZSBvdGhlciBgYXJjaF8qYCBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIHVzaW5nIGBFWFBPUlRfU1lNQk9MX0lGX0tVTklUYC4gT2theSwgdGhlc2UgYXJlIG5vdCBzdGF0aWMsIGVpdGhlci5cblxuTm93LCBhcmUgdGhlcmUgYW55IG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IFllcyEgYGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlc2AgaXMgY2FsbGVkIGluIHZhcmlvdXMgcGxhY2VzOiBgZnMvcHJvYy90YXNrX21tdS5jYCwgYG1tL21hZHZpc2UuY2AsIGBtbS9tZW1vcnkuY2AsIGBtbS9tcHJvdGVjdC5jYCwgYG1tL21yZW1hcC5jYCwgYW5kIGBtbS92bWFsbG9jLmNgLiBJbnRlcmVzdGluZy5cblxuQWxsIG9mIHRoZXNlIGFyZSBpbmxpbmUgZnVuY3Rpb25zIGluIGBpbmNsdWRlL2xpbnV4L3BndGFibGUuaGAgdGhhdCBjYWxsIGBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzYCwgbWFraW5nIGBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzYCB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byBmb2N1cyBvbi5cblxuQ2lyY2xpbmcgYmFjayB0byB0aGUgY29uZmlndXJhdGlvbnMsIGlzIGBLQVNBTl9HRU5FUklDYCBkZWZpbml0ZWx5IHRoZSByaWdodCBvbmU/IExldCdzIGNvbmZpcm0gYnkgbG9va2luZyBhdCBgbW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuY2AgYWdhaW4uIFRoZSBjb2RlIGluY2x1ZGVzIGEgY2FzZSBmb3IgYEtBU0FOX0xBWllfTU1VX1BURWAsIHdoaWNoIHRyaWdnZXJzIHRoZSBcImxhenktbW11LXB0ZS1hY2Nlc3NcIiBidWcgdHlwZS4gVGhpcyBjb2RlIHBhdGggaXMgY29tcGlsZWQgb25seSBpZiBgQ09ORklHX0tBU0FOX0dFTkVSSUNgIGlzIGVuYWJsZWQuIFRoZXJlZm9yZSwgYEtBU0FOX0dFTkVSSUNgIGlzIGRlZmluaXRlbHkgYSByZWxldmFudCBjb25maWd1cmF0aW9uIHRvIGNvbnNpZGVyLlxuXG5Ob3csIHdoYXQgYWJvdXQgYEtBU0FOX1NXX1RBR1NgIG9yIGBLQVNBTl9IV19UQUdTYD8gVGhlIHBhdGNoIG1vZGlmaWVzIGBtbS9rYXNhbi9rYXNhbi5oYCB0byBpbnRyb2R1Y2UgYEtBU0FOX0xBWllfTU1VX1BURWAsIHdoaWNoIGlzIHVzZWQgaW4gYHJlcG9ydF9nZW5lcmljLmNgLiBCdXQgdGhlcmUncyBubyBtb2RpZmljYXRpb24gb2YgYHJlcG9ydF9zd190YWdzLmNgIG9yIGByZXBvcnRfaHdfdGFncy5jYC4gU28gaXQgbG9va3MgbGlrZSBgS0FTQU5fR0VORVJJQ2AgaXMgdGhlIG1vc3QgcGVydGluZW50IG9uZSBoZXJlLlxuXG5GaW5hbGx5LCBhcmUgdGhlcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnM/IGBDT05GSUdfU01QYCBpcyByZXF1aXJlZCBkdWUgdG8gdGhlIGBzbXAuY2AgY2hhbmdlcywgYnV0IHRoYXQncyB1c3VhbGx5IGVuYWJsZWQuIE5vdywgcmVnYXJkaW5nIGBDT05GSUdfSE9UUExVR19DUFVgLCBpcyBpdCBuZWVkZWQgZm9yIGBfX2NwdV9kaWVgIGFuZCBgX19jcHVfdXBgIHdpdGhpbiBgc21wLmNgPyBPa2F5LCB0aW1lIHRvIGNoZWNrIGBhcmNoL3MzOTAva2VybmVsL3NtcC5jYCB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTY4MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6Mzk6MjUuNTQ4ODAzMTk3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM1NTQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2NwdV91cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva2VybmVsL3NtcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rZXJuZWwvc21wLmM9ODI0PXN0YXRpYyB2b2lkIHNtcF9zdGFydF9zZWNvbmRhcnkodm9pZCAqY3B1dm9pZClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc21wLmMtODU1LS8qIFVwcGluZyBhbmQgZG93bmluZyBvZiBDUFVzICovXFxuYXJjaC9zMzkwL2tlcm5lbC9zbXAuYzo4NTY6aW50IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGlkbGUpXFxuYXJjaC9zMzkwL2tlcm5lbC9zbXAuYy04NTcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozOToyNS41OTQxNjIwNzJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTI1NjkxNDgxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHN0YXRlbWVudHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIHRob3VnaHRzIGFzIGFuIGVtYmVkZGVkIHN5c3RlbXMgZXhwZXJ0OlxuXG4qKkNQVSBIb3RwbHVnIFx1MDAyNiBTTVAgQ29tcGlsYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5SaWdodCwgc28gdGhlc2UgbWFjcm9zLCBgX19jcHVfdXBgIGFuZCBgX19jcHVfZGllYCwgYXJlIGNsZWFybHkgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgQ1BVcyB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGZpcnN0IG9uZSwgYF9fY3B1X3VwYCwgaXMgb25seSBnb2luZyB0byBiZSBjb21waWxlZCBpbnRvIHRoZSBzeXN0ZW0gd2hlbiBgQ09ORklHX1NNUGAgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBgX19jcHVfdXBgIGlzIGxpa2VseSByZWxhdGVkIHRvIGJyaW5naW5nIGEgQ1BVIG9ubGluZSwgd2hpY2ggaXMgYSBmZWF0dXJlIHByaW1hcmlseSBhc3NvY2lhdGVkIHdpdGggU3ltbWV0cmljIE11bHRpLVByb2Nlc3NpbmcuIElmIHlvdSBvbmx5IGhhdmUgYSBzaW5nbGUgQ1BVLCB5b3UgdHlwaWNhbGx5IGRvbid0IG5lZWQgdG8gZHluYW1pY2FsbHkgJ2JyaW5nIGl0IHVwJy5cblxuTm93LCBsb29raW5nIGF0IGBfX2NwdV9kaWVgLCB0aGlzIG9uZSdzIGNvbmRpdGlvbmFsIG9uIGBDT05GSUdfSE9UUExVR19DUFVgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgdGhpcyBtYWNybyBpcyBmb3IgdGFraW5nIGEgQ1BVIG9mZmxpbmUsIHdoaWNoIGlzIGEgY29yZSBjb25jZXB0IHRvIENQVSBob3RwbHVnLiBJZiBob3RwbHVnZ2luZyBpcyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUsIHRoZW4gdGhlcmUncyBubyB3YXkgdG8gYnJpbmcgYSBDUFUgb2ZmbGluZSAoYXNpZGUgZnJvbSBwb3dlcmluZyB0aGUgc3lzdGVtIGRvd24gb3Igb3RoZXJ3aXNlKS4gSSB3b3VsZCBleHBlY3QgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYF9fY3B1X2RpZWAgdG8gYmUgZm9yIHRoZSByZXZlcnNlIG9mIGBfX2NwdV91cGAuIEl0IHdvdWxkIGxpa2VseSBpbnZvbHZlIGEgc2VyaWVzIG9mIHN0ZXBzIHRvIHNhZmVseSB0YWtlIGEgQ1BVIG9mZiB0aGUgc3lzdGVtLCBzdWNoIGFzIG1pZ3JhdGluZyBhbnkgcmVsZXZhbnQgcHJvY2Vzc2VzIG9mZiB0aGF0IENQVSwgZmx1c2hpbmcgY2FjaGVzLCBhbmQgcG90ZW50aWFsbHkgc3RvcHBpbmcgZXhlY3V0aW9uIG9uIHRoYXQgQ1BVLlxuXG5Fc3NlbnRpYWxseSwgdGhlc2UgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdGVsbCBtZSBob3cgdGhlIGNvZGUgaXMgc3RydWN0dXJlZCB0byBoYW5kbGUgU01QIGFuZCBDUFUgaG90cGx1Zy4gVGhlIGluY2x1c2lvbiBvciBleGNsdXNpb24gb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGRpcmVjdGx5IHRpZWQgdG8gdGhlIGRlZmluZWQgY29tcGlsZS10aW1lIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHN5c3RlbS4gSSB3b3VsZCBuZXh0IGxvb2sgYXQgdGhlc2UgZnVuY3Rpb25zIHRoZW1zZWx2ZXMgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgbWVjaGFuaXNtcyBhbmQgdGhlIGFyY2hpdGVjdHVyZSB0aGF0IHRoZXkgaGFuZGxlIHRvIGJlc3QgdW5kZXJzdGFuZCBDUFUgaGFuZGxpbmcgZm9yIHRoYXQgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODAwNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjM5OjM0Ljg1MTA3OTQ4MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2Mjg2MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jcHVfZGllXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rZXJuZWwvc21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2tlcm5lbC9zbXAuYz04OTk9aW50IF9fY3B1X2Rpc2FibGUodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc21wLmMtOTIxLVxcbmFyY2gvczM5MC9rZXJuZWwvc21wLmM6OTIyOnZvaWQgX19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpXFxuYXJjaC9zMzkwL2tlcm5lbC9zbXAuYy05MjMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozOTozNC44OTU3MTI4MjdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ1NTczOTU2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIFRlc3RpbmcgUGxhbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgYEhPVFBMVUdfQ1BVYCBjb3VsZCByZWFsbHkgaGVscCBtZSBuYWlsIGRvd24gdGhlIENQVSBob3RwbHVnIGNvZGUgcGF0aHMgZHVyaW5nIHRlc3RpbmcuIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2QgYXZlbnVlIHRvIGV4cGxvcmUgZnVydGhlci5cblxuTGV0J3Mgc2VlLCBJIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQuIEknbSBmb2N1c2luZyBvbjpcblxuKiAgIGBLQVNBTmBcbiogICBgS0FTQU5fR0VORVJJQ2BcbiogICBgSE9UUExVR19DUFVgXG5cbldhaXQgYSBtaW51dGUsIGBLQVNBTl9HRU5FUklDYCBpcyBkZXBlbmRlbnQgb24gYEtBU0FOYCByaWdodD8gT2YgY291cnNlLCB0aGF0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyLiBOb3csIEkgaGF2ZSB0byBlbnN1cmUgdGhlIGZ1bGwgdGVzdCBzdWl0ZSBjYW4gZXZlbiBiZSBleGVjdXRlZC5cblxuSXMgYEtBU0FOYCBldmVuIHN1cHBvcnRlZCBvbiB0aGUgczM5MCBhcmNoaXRlY3R1cmU/IExldCBtZSBjaGVjayBxdWlja2x5Li4uIEFoLCB5ZXMsIGFjY29yZGluZyB0byB0aGUgYGFyY2gvczM5MC9LY29uZmlnYCBmaWxlLCBpdCAqZG9lcyogaGF2ZSBgc2VsZWN0IEFSQ0hfSEFTX0tBU0FOX0dFTkVSSUNgLiBHcmVhdC4gTm93IEkgY2FuIGNvbnRpbnVlIG15IHBsYW5uaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODU1NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozOTo0NC4zNTE0NTU5MTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzE4NDc2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBUkNIX0hBU19LQVNBTl9HRU5FUklDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjozOTo0NC4zOTU3Nzk1NDVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU2NDUzOTAxNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIEFkZHJlc3NTYW5pdGl6ZXIgKEtBU0FOKSBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGtlcm5lbCBjb2RlIGFuZCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBzYWZldHkgY29udGV4dC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IG1pbmQgaXMgd2hldGhlciBLQVNBTiwgb3Igc29tZXRoaW5nIGFuYWxvZ291cywgaXMgZW5hYmxlZC4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIHdlJ3JlIHJ1bm5pbmcgd2l0aCB0aGlzIHJ1bnRpbWUgbWVtb3J5IGVycm9yIGRldGVjdGlvbiwgd2hpY2ggd291bGQgZnVuZGFtZW50YWxseSBhbHRlciBob3cgSSBpbnRlcnByZXQgcG90ZW50aWFsIGlzc3Vlcy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMuIEknbGwgYmUgbG9va2luZyBmb3IgYEhBVkVfQVJDSF9LQVNBTmAsIG9yIHNvbWV0aGluZyBlcXVpdmFsZW50LiBUaGF0J3MgdGhlIGJhc2VsaW5lLCB0aGUgbW9zdCBkaXJlY3QgaW5kaWNhdG9yLCBidXQgaXQgY291bGQgYmUgbmFtZWQgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUuIEFsc28sIEknbGwga2VlcCBpbiBtaW5kIHRoYXQgb3RoZXIgaW5zdHJ1bWVudGF0aW9uIGNvdWxkIGJlIGVuYWJsZWQsIGFuZCBJJ2xsIGtlZXAgdGhpcyBpbiB0aGUgYmFjayBvZiBteSBoZWFkIHRvIGNoZWNrIGZvciBpbiB0aGUgc3Vycm91bmRpbmcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5MzcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjo0MDowMC4wNDExNzE4MzJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTA0MjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIktBU0FOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9LY29uZmlnPTM4PWNvbmZpZyBBUkNIX1NVUFBPUlRTX1VQUk9CRVNcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTQwLVxcbmFyY2gvczM5MC9LY29uZmlnOjQxOmNvbmZpZyBLQVNBTl9TSEFET1dfT0ZGU0VUXFxuYXJjaC9zMzkwL0tjb25maWctNDItXFx0aGV4XFxuYXJjaC9zMzkwL0tjb25maWc6NDM6XFx0ZGVwZW5kcyBvbiBLQVNBTlxcbmFyY2gvczM5MC9LY29uZmlnLTQ0LVxcdGRlZmF1bHQgMHgxQzAwMDAwMDAwMDAwMFxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9NzU9Y29uZmlnIFMzOTBcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTE4My1cXHRzZWxlY3QgSEFWRV9BUkNIX0pVTVBfTEFCRUxfUkVMQVRJVkVcXG5hcmNoL3MzOTAvS2NvbmZpZzoxODQ6XFx0c2VsZWN0IEhBVkVfQVJDSF9LQVNBTlxcbmFyY2gvczM5MC9LY29uZmlnOjE4NTpcXHRzZWxlY3QgSEFWRV9BUkNIX0tBU0FOX1ZNQUxMT0NcXG5hcmNoL3MzOTAvS2NvbmZpZy0xODYtXFx0c2VsZWN0IEhBVkVfQVJDSF9LQ1NBTlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctMjYwLVxcdHNlbGVjdCBJUlFfTVNJX0xJQlxcdFxcdGlmIFBDSVxcbmFyY2gvczM5MC9LY29uZmlnOjI2MTpcXHRzZWxlY3QgS0FTQU5fVk1BTExPQyBpZiBLQVNBTlxcbmFyY2gvczM5MC9LY29uZmlnLTI2Mi1cXHRzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUFcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTY4OD1jb25maWcgS0VSTkVMX0lNQUdFX0JBU0VcXG5hcmNoL3MzOTAvS2NvbmZpZy02ODktXFx0aGV4IFxcXCJLZXJuZWwgaW1hZ2UgYmFzZSBhZGRyZXNzXFxcIlxcbmFyY2gvczM5MC9LY29uZmlnOjY5MDpcXHRyYW5nZSAweDEwMDAwMCAweDFGRkZGRkUwMDAwMDAwIGlmICFLQVNBTlxcbmFyY2gvczM5MC9LY29uZmlnOjY5MTpcXHRyYW5nZSAweDEwMDAwMCAweDFCRkZGRkUwMDAwMDAwIGlmIEtBU0FOXFxuYXJjaC9zMzkwL0tjb25maWc6NjkyOlxcdGRlZmF1bHQgMHgzRkZFMDAwMDAwMCBpZiAhS0FTQU5cXG5hcmNoL3MzOTAvS2NvbmZpZzo2OTM6XFx0ZGVmYXVsdCAweDdGRkZFMDAwMDAwMCBpZiBLQVNBTlxcbmFyY2gvczM5MC9LY29uZmlnLTY5NC1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjQwOjAwLjA4NDY3OTM5N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzA1Njg1MTM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQgZm9yIFRlc3RpbmcgYExBWllfTU1VX01PREVgKipcblxuT2theSwgc28gYEhBVkVfQVJDSF9LQVNBTmAgaXMgZGVmaW5pdGVseSBlbmFibGVkLCBnb29kIHN0YXJ0LiBOb3csIGxldCdzIGxvb2sgYXQgYExBWllfTU1VX01PREVfS1VOSVRfVEVTVGAuIEkgZm91bmQgaXQgaW4gYG1tL0tjb25maWdgLCB3aGljaCBpcyBhIGdvb2Qgc2lnbi4gVGhlIHByb21wdCB3YW50cyBtZSB0byBpZGVudGlmeSBhbnkgKnNwZWNpZmljKiBDT05GSUcgb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgZmVhdHVyZS4gU2luY2UgaXQncyBhIEtVbml0IHRlc3QsIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZW5hYmxlIGl0LiBFdmVuIHRob3VnaCBzeXprYWxsZXIgZG9lc24ndCB0eXBpY2FsbHkgcnVuIEtVbml0IHRlc3RzIHVubGVzcyBleHBsaWNpdGx5IGNvbmZpZ3VyZWQsIGhhdmluZyBpdCBlbmFibGVkICpjb3VsZCogYmUgYmVuZWZpY2lhbCwgeW91IG5ldmVyIGtub3cuIEl0J3MgYSBLVW5pdCB0ZXN0LCBzbywgSSB3aWxsIGp1c3QgZW5hYmxlIGl0LlxuXG5Ob3csIGFzIHBlciB0aGUgcHJvbXB0LCBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgYEtBU0FOYCwgYEtBU0FOX0dFTkVSSUNgLCBhbmQgYEhPVFBMVUdfQ1BVYCBhcmUgaW5jbHVkZWQgdG8gdGhvcm91Z2hseSB0ZXN0IHRoaXMgbmV3IGZlYXR1cmUsIGFuZCBlbnN1cmUgY292ZXJhZ2UuXG5cbk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgdGhpcyB0ZXN0aW5nLiBMb29raW5nIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiwgSSB3YW50IHRvIGtlZXAgYSBjbG9zZSBleWUgb246IGBhcmNoX2VudGVyX2xhenlfbW11X21vZGVgLCBgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc2AsIGBhcmNoX2xlYXZlX2xhenlfbW11X21vZGVgLCBgYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlYCwgYGxhenlfbW11X29ubGluZV9jcHVgLCBhbmQgYGxhenlfbW11X29mZmxpbmVfY3B1YC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIGVudHJ5L2V4aXQgcG9pbnRzIGFuZCBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBmb3IgYExBWllfTU1VX01PREVgLlxuXG5XYWl0LCB0aGVyZSBhcmUgbW9yZSwgYW5kIG5vdCBzdGF0aWMgZWl0aGVyLiBJIHNlZSBgX19rYXNhbl9wb2lzb25fcHRlYCBhbmQgYF9fa2FzYW5fdW5wb2lzb25fcHRlYCBpbiBgbW0va2FzYW4vY29tbW9uLmNgLiBUaGVzZSBhcmUgZXhwb3J0ZWQgYW5kIGFyZSBjYWxsZWQgYnkgdGhlIGlubGluZSBmdW5jdGlvbnMsIGBrYXNhbl9wb2lzb25fcHRlYCBhbmQgYGthc2FuX3VucG9pc29uX3B0ZWAuIFRoZXkgYXJlICpleGNlbGxlbnQqIGNhbmRpZGF0ZXMgZm9yIHRlc3RpbmchIEkgd2lsbCBrZWVwIHRoZXNlIG9uIHRoZSBsaXN0LCB0b28uIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYF9fa2FzYW5fcG9pc29uX3B0ZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzQ3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjQwOjE3LjE0MTUzMjY2OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ0NzY1NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19rYXNhbl9wb2lzb25fcHRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2thc2FuL2NvbW1vbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2thc2FuL2NvbW1vbi5jPTE1NT12b2lkIF9fa2FzYW5fcG9pc29uX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9rYXNhbi9jb21tb24uYy0xNjUtXFxubW0va2FzYW4vY29tbW9uLmM6MTY2OnZvaWQgX19rYXNhbl9wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucilcXG5tbS9rYXNhbi9jb21tb24uYy0xNjcte1xcbi0tXFxubW0va2FzYW4vY29tbW9uLmMtMTcwLX1cXG5tbS9rYXNhbi9jb21tb24uYzoxNzE6RVhQT1JUX1NZTUJPTF9HUEwoX19rYXNhbl9wb2lzb25fcHRlKTtcXG5tbS9rYXNhbi9jb21tb24uYy0xNzItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjQwOjE3LjE4NjAxMjU0M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjAxNTU4MjQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipMYXp5IE1NVSBGdW5jdGlvbmFsaXR5IEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZXZhbHVhdGluZyB0aGUgZnVuY3Rpb25zIHdpdGhpbiBgYXJjaC9zMzkwL21tL2xhenlfbW11LmNgLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZXNlIGZ1bmN0aW9ucywgbGlrZSB0aGUgb25lcyBkZWFsaW5nIHdpdGggUFRFIG1hbmlwdWxhdGlvbiwgYXJlIGluZGVlZCBleHBvcnRlZC4gTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgdGhhdCBhcmUgcmVsZXZhbnQuIExvb2tpbmcgYXQgdGhlIGNvZGViYXNlLCBJIHNlZSBhIHNldCBvZiBmdW5jdGlvbnM6IGBfX2xhenlfbW11X3NldF9wdGVgLCBgX19sYXp5X21tdV9wdGVwX2dldGAsIGBfX2xhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmdgLCBgX19sYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXJgLCBgX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X3N0YXJ0YCwgYF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9jb21taXRgLCBhbmQgYF9fbGF6eV9tbXVfcHRlcF9zZXRfd3Jwcm90ZWN0YC5cblxuVGhlc2UgYXJlbid0IHN0YXRpYywgYnV0IHRoZXkgKmFyZSogY2FsbGVkIGZyb20gaW5saW5lIGZ1bmN0aW9ucyB3aXRoaW4gYHBndGFibGUuaGAuIFRoZSBxdWVzdGlvbiBiZWNvbWVzIHdoZXRoZXIgdGhlc2UgYXJlIGhvdCBwYXRoIGZ1bmN0aW9ucy4gSXQgc2VlbXMgdGhleSBhcmU7IHRoZXkncmUgY2FsbGVkIGR1cmluZyBldmVyeSBQVEUgb3BlcmF0aW9uIHdoZW4gdGhlIGxhenkgTU1VIG1vZGUgaXMgYWN0aXZlLiBIb3dldmVyLCB3YWl0LCBsYXp5IE1NVSBtb2RlIGlzIG9ubHkgZW5hYmxlZCBmb3Igc3BlY2lmaWMgb3BlcmF0aW9ucyBsaWtlIGBtYWR2aXNlYCwgYG1wcm90ZWN0YCwgYG1yZW1hcGAsIGB2bWFsbG9jYCwgYW5kIG9wZXJhdGlvbnMgd2l0aGluIGB0YXNrX21tdS5jYC4gSXQncyBub3QgYSBnbG9iYWwsIGFsd2F5cy1vbiBmZWF0dXJlLiBgaXNfbGF6eV9tbXVfYWN0aXZlKClgIGNoZWNrcyBgZ2V0X2xvd2NvcmUoKS1cdTAwM2VsYXp5X21tdV9jb3VudGAuIFNvLCB0aGVzZSBwYXJ0aWN1bGFyIGZ1bmN0aW9ucyBhcmUgb25seSBleGVjdXRlZCB3aGVuIGBsYXp5X21tdV9jb3VudCBcdTAwM2UgMGAuIFRoaXMgaXMgY2xlYXJseSBwYXJ0IG9mIHRoZSBuZXcgZmVhdHVyZS5cblxuVGhlIHByb21wdCBpbnN0cnVjdHMgbWUgdG8gYXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gQnV0LCBzaW5jZSB0aGVzZSBhcmUgdGhlIGNvcmUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBsYXp5IE1NVSBtb2RlIFBURSBvcGVyYXRpb25zLCBhbmQgdGhleSBhcmUgbm9uLXN0YXRpYywgdGhleSBhcmUgcG90ZW50aWFsIGNhbmRpZGF0ZXMuXG5cbkhvd2V2ZXIsIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBhcmUgYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXNgLiBBZnRlciBjYXJlZnVsIGNvbnNpZGVyYXRpb24sIEknbGwgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczogYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZWAsIGBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzYCwgYGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZWAsIGBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGVgLCBgbGF6eV9tbXVfb25saW5lX2NwdWAsIGBsYXp5X21tdV9vZmZsaW5lX2NwdWAsIGBfX2thc2FuX3BvaXNvbl9wdGVgLCBhbmQgYF9fa2FzYW5fdW5wb2lzb25fcHRlYC4gVGhlc2UgcmVwcmVzZW50IHRoZSBwcmltYXJ5IGNvbnRyb2wgYW5kIG1hbmFnZW1lbnQgcG9pbnRzIG9mIHRoZSBsYXp5IE1NVSBtb2RlLlxuXG5Nb3Zpbmcgb24sIEknbGwgZXhhbWluZSBgYXJjaC9zMzkwL21tL3BndGFibGUuY2AuIEkgZmluZCBgX19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydGAgYW5kIGBfX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdGAuIFRoZXNlIHdlcmUgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA4MDIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6NDA6NDMuMjAxNTk3Nzg5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzkxODQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX19wdGVwX21vZGlmeV9wcm90X3N0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9tbS9wZ3RhYmxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL21tL3BndGFibGUuYz0xNjc9RVhQT1JUX1NZTUJPTChwdGVwX3hjaGdfbGF6eSk7XFxuYXJjaC9zMzkwL21tL3BndGFibGUuYy0xNjgtXFxuYXJjaC9zMzkwL21tL3BndGFibGUuYzoxNjk6cHRlX3QgX19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmFyY2gvczM5MC9tbS9wZ3RhYmxlLmMtMTcwLVxcdFxcdFxcdFxcdHB0ZV90ICpwdGVwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjo0MDo0My4yNzU1MjUzOTdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0MDMwMDc4NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIGFuZCBGb2N1cyBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHllcywgdGhlc2UgY29uc2lkZXJhdGlvbnMgYXJlIG5vdCBzdGF0aWM7IHRoZXkgZXZvbHZlIHdpdGggdGhlIGFuYWx5c2lzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBjYXB0dXJpbmcgZXZlcnl0aGluZywgc28gSSdsbCByZXZpZXcgdGhlIGNvbmZpZ3Mgb25lIG1vcmUgdGltZS5cblxuQWxyaWdodCwgdGhlIGNvcmUgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyIGFyZSBgS0FTQU5gLCBgS0FTQU5fR0VORVJJQ2AsIGFuZCBgSE9UUExVR19DUFVgLiBJIGluaXRpYWxseSBsb29rZWQgYXQgYExBWllfTU1VX01PREVfS1VOSVRfVEVTVGAsIGJ1dCBzaW5jZSBzeXprYWxsZXIgZG9lc24ndCB0eXBpY2FsbHkgcnVuIEtVbml0IHRlc3RzIGJ5IGRlZmF1bHQsIEknbGwgc2tpcCB0aGF0IG9uZSBmb3Igbm93LiBJdCBkb2Vzbid0IGh1cnQgdG8gaW5jbHVkZSBpdCwgYnV0IGl0J3Mgbm90IGVzc2VudGlhbC5cblxuTm93LCBhIHF1aWNrIGNoZWNrIHJlZ2FyZGluZyBgTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUYC4gRG9lcyB0aGlzIHBhdGNoIGFjdHVhbGx5ICphZGQqIHRoYXQgY29uZmlnPyBMZXQncyB2ZXJpZnkgYnkgY2hlY2tpbmcgYG1tL0tjb25maWdgIGFnYWluc3QgdGhlIHBhdGNoLiBUaGUgZGlmZiBkb2Vzbid0IHNob3cgYW55IG1vZGlmaWNhdGlvbnMgdG8gYG1tL0tjb25maWdgLiBIYW5nIG9uLi4uIHRoZSBncmVwIEkgZGlkIGZvciBgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERWAgc2hvd2VkIGBMQVpZX01NVV9NT0RFX0tVTklUX1RFU1RgIGluIGBtbS9LY29uZmlnYCwgYnV0IHRoZSBwYXRjaCBkaWZmIGRvZXNuJ3QgaW5jbHVkZSBgbW0vS2NvbmZpZ2AuIEFoLCB0aGUgcGF0Y2ggZGlmZiBJIHdhcyBwcm92aWRlZDogKGZvbGxvd3MgdGhlIHBhdGNoIGRpZmYgcHJvdmlkZWQgaW4gdGhlIHByb21wdCkuIE9rYXksIHNvIGBtbS9LY29uZmlnYCBpc24ndCBtb2RpZmllZC4gSXQgbXVzdCBoYXZlIGJlZW4gYWRkZWQgaW4gYW4gZWFybGllciBwYXRjaCBvciBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIHRyZWUuIFRoZSBwcm9tcHQgc2F5cywgXCJUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluIHlvdXIgd29ya3NwYWNlLlwiIFRoaXMgbWVhbnMgdGhhdCBgQVJDSF9IQVNfTEFaWV9NTVVfTU9ERWAgaXMgKmFscmVhZHkqIGluIGBtbS9LY29uZmlnYC4gVGhlIGN1cnJlbnQgcGF0Y2ggKmRvZXMqIGFkZCBgc2VsZWN0IEFSQ0hfSEFTX0xBWllfTU1VX01PREVgIHRvIGBhcmNoL3MzOTAvS2NvbmZpZ2AuIFRodXMsIGBBUkNIX0hBU19MQVpZX01NVV9NT0RFYCBpcyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIG9uIHMzOTAsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBleHBsaWNpdGx5IHNwZWNpZnkgaXQuXG5cblJlZ2FyZGluZyBgS0FTQU5gLCBpdCdzIGEgc3RhbmRhcmQgY29uZmlnLiBgS0FTQU5fR0VORVJJQ2AgaXMgYWxzbyBzdGFuZGFyZC4gQW5kIGBIT1RQTFVHX0NQVWAgaXMgYWxzbyBzdGFuZGFyZC5cblxuVGhlcmVmb3JlLCB0aGUgZmluYWwgb3V0cHV0IHdpbGwgYmU6XG5cbioqV29ydGhGdXp6aW5nOiB0cnVlKipcblxuKipGb2N1c1N5bWJvbHM6KipcblxuLSAgIGBhcmNoX2VudGVyX2xhenlfbW11X21vZGVgXG4tICAgYGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXNgXG4tICAgYGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZWBcbi0gICBgYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlYFxuLSAgIGBsYXp5X21tdV9vbmxpbmVfY3B1YFxuLSAgIGBsYXp5X21tdV9vZmZsaW5lX2NwdWBcbi0gICBgX19rYXNhbl9wb2lzb25fcHRlYFxuLSAgIGBfX2thc2FuX3VucG9pc29uX3B0ZWBcbi0gICBgX19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydGBcbi0gICBgX19fcHRlcF9tb2RpZnlfcHJvdF9jb21taXRgXG5cbioqRW5hYmxlQ29uZmlnczoqKlxuXG4tICAgYEtBU0FOYFxuLSAgIGBLQVNBTl9HRU5FUklDYFxuLSAgIGBIT1RQTFVHX0NQVWBcblxuKipSZWFzb25pbmc6KipcblxuVGhlIHBhdGNoIGludHJvZHVjZXMgbGF6eSBNTVUgbW9kZSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBsZXZlcmFnaW5nIHRoZSBJUFRFLXJhbmdlIGZhY2lsaXR5IGZvciBiYXRjaGVkIFBURSBpbnZhbGlkYXRpb25zLiBJdCdzIGhvb2tpbmcgaW50byBrZXkgbWVtb3J5IG1hbmFnZW1lbnQgc3lzY2FsbHMgKG1hZHZpc2UsIG1wcm90ZWN0LCBtcmVtYXAsIHZtYWxsb2MpIGFuZCBDUFUgaG90cGx1ZyBwYXRocy4gQ3J1Y2lhbGx5LCBpdCBpbmNsdWRlcyBLQVNBTiBpbnN0cnVtZW50YXRpb24gZm9yIGRpcmVjdCBQVEUgYWNjZXNzIGluIGxhenkgTU1VIG1vZGUuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCBrZXJuZWwgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyByaXBlIGZvciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjE2MSwiT3V0cHV0VG9rZW5zIjoyNjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjQxOjE1LjY3ODUzNjMxMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODY1MjE0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS0FTQU5cIixcbiAgICBcIktBU0FOX0dFTkVSSUNcIixcbiAgICBcIkhPVFBMVUdfQ1BVXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlXCIsXG4gICAgXCJhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzXCIsXG4gICAgXCJhcmNoX2xlYXZlX2xhenlfbW11X21vZGVcIixcbiAgICBcImFyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZVwiLFxuICAgIFwibGF6eV9tbXVfb25saW5lX2NwdVwiLFxuICAgIFwibGF6eV9tbXVfb2ZmbGluZV9jcHVcIixcbiAgICBcIl9fa2FzYW5fcG9pc29uX3B0ZVwiLFxuICAgIFwiX19rYXNhbl91bnBvaXNvbl9wdGVcIixcbiAgICBcIl9fX3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnRcIixcbiAgICBcIl9fX3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBsYXp5IE1NVSBtb2RlIGZvciBzMzkwIGFyY2hpdGVjdHVyZSwgd2hpY2ggYmF0Y2hlcyBQVEUgaW52YWxpZGF0aW9ucyB1c2luZyB0aGUgSVBURS1yYW5nZSBmYWNpbGl0eS4gSXQgaG9va3MgaW50byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c2NhbGxzIChtYWR2aXNlLCBtcHJvdGVjdCwgbXJlbWFwLCB2bWFsbG9jKSBhbmQgQ1BVIGhvdHBsdWcgcGF0aHMuIEl0IGFsc28gYWRkcyBLQVNBTiBpbnN0cnVtZW50YXRpb24gZm9yIGRpcmVjdCBQVEUgYWNjZXNzZXMgaW4gbGF6eSBNTVUgbW9kZS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBhbmQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLQVNBTlwiLFxuICAgIFwiS0FTQU5fR0VORVJJQ1wiLFxuICAgIFwiSE9UUExVR19DUFVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmNoX2VudGVyX2xhenlfbW11X21vZGVcIixcbiAgICBcImFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXNcIixcbiAgICBcImFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZVwiLFxuICAgIFwiYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlXCIsXG4gICAgXCJsYXp5X21tdV9vbmxpbmVfY3B1XCIsXG4gICAgXCJsYXp5X21tdV9vZmZsaW5lX2NwdVwiLFxuICAgIFwiX19rYXNhbl9wb2lzb25fcHRlXCIsXG4gICAgXCJfX2thc2FuX3VucG9pc29uX3B0ZVwiLFxuICAgIFwiX19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydFwiLFxuICAgIFwiX19fcHRlcF9tb2RpZnlfcHJvdF9jb21taXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGxhenkgTU1VIG1vZGUgZm9yIHMzOTAgYXJjaGl0ZWN0dXJlLCB3aGljaCBiYXRjaGVzIFBURSBpbnZhbGlkYXRpb25zIHVzaW5nIHRoZSBJUFRFLXJhbmdlIGZhY2lsaXR5LiBJdCBob29rcyBpbnRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzY2FsbHMgKG1hZHZpc2UsIG1wcm90ZWN0LCBtcmVtYXAsIHZtYWxsb2MpIGFuZCBDUFUgaG90cGx1ZyBwYXRocy4gSXQgYWxzbyBhZGRzIEtBU0FOIGluc3RydW1lbnRhdGlvbiBmb3IgZGlyZWN0IFBURSBhY2Nlc3NlcyBpbiBsYXp5IE1NVSBtb2RlLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGFuZCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjo0MToxNS44MDcxOTUzMTZaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NzkyNTgxNjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6NDE6MTUuODA3NjQzMjk2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI2NzkyMTMwMDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbGF6eSBNTVUgbW9kZSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIHRvIGJ1ZmZlciBwYWdlIHRhYmxlIGVudHJ5IChQVEUpIHVwZGF0ZXMuIEl0IGFsc28gZXhwbGljaXRseSBhZGRzIEtBU0FOIHBvaXNvbmluZy91bnBvaXNvbmluZyB0byBkZXRlY3QgaW52YWxpZCBkaXJlY3QgYWNjZXNzZXMgdG8gUFRFcyB3aGlsZSB0aGUgbGF6eSBNTVUgbW9kZSBpcyBhY3RpdmUsIGludHJvZHVjaW5nIGEgbmV3IEtBU0FOIGJ1ZyB0eXBlIChgbGF6eS1tbXUtcHRlLWFjY2Vzc2ApLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgdGFibGUgb3BlcmF0aW9ucy4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgYWxsIG5ld2x5IGFsbG9jYXRlZCBzdHJ1Y3R1cmVzIChlLmcuLCBgc3RydWN0IGlwdGVfcmFuZ2VgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGUuZy4sIHZpYSB6ZXJvLWFsbG9jYXRpb24gYW5kIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIG9mIHRoZSBgY2FjaGVgIGFycmF5IHRvIGBQVEVfUE9JU09OYCkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGlzIHBlcmZlY3RseSBzdWl0ZWQgYW5kIGV4cGxpY2l0bHkgZW5oYW5jZWQgYnkgdGhpcyBwYXRjaCB0byBjYXRjaCBhbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzZjMTI2NzNmMzVkZGYyYTE0NzkxMTY0YjVkY2Y5ZDRjM2NmNTRjMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDEyOjM3OjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcgYi9hcmNoL3MzOTAvS2NvbmZpZ1xuaW5kZXggODQ0MDRlNjc3OGQ1MC4uNzg0NjMzMmRjZDBhNiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9LY29uZmlnXG4rKysgYi9hcmNoL3MzOTAvS2NvbmZpZ1xuQEAgLTk3LDYgKzk3LDcgQEAgY29uZmlnIFMzOTBcbiBcdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXG4gXHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxuIFx0c2VsZWN0IEFSQ0hfSEFTX0tDT1ZcbitcdHNlbGVjdCBBUkNIX0hBU19MQVpZX01NVV9NT0RFXG4gXHRzZWxlY3QgQVJDSF9IQVNfTUVNQkFSUklFUl9TWU5DX0NPUkVcbiBcdHNlbGVjdCBBUkNIX0hBU19NRU1fRU5DUllQVFxuIFx0c2VsZWN0IEFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QU1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sYXp5X21tdS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xhenlfbW11Lmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45ODM2NmU5ZGU5YmMzXG4tLS0gL2Rldi9udWxsXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbGF6eV9tbXUuaFxuQEAgLTAsMCArMSw5IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbisjaWZuZGVmIF9fTEFaWV9NTVVfSFxuKyNkZWZpbmUgX19MQVpZX01NVV9IXG4rXG4rdm9pZCBsYXp5X21tdV9vbmxpbmVfYm9vdF9jcHUodm9pZCk7XG4raW50IGxhenlfbW11X29ubGluZV9jcHUoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgY3B1KTtcbit2b2lkIGxhenlfbW11X29mZmxpbmVfY3B1KHVuc2lnbmVkIGludCBjcHUpO1xuK1xuKyNlbmRpZiAvKiBfX0xBWllfTU1VX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaFxuaW5kZXggM2IzZWNjNjQ3OTkzZi4uZGJhMjM2NjY0ZGE5MCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmhcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmhcbkBAIC0xNjMsNyArMTYzLDcgQEAgc3RydWN0IGxvd2NvcmUge1xuIFx0X19zMzJcdHByZWVtcHRfY291bnQ7XHRcdFx0LyogMHgwM2E4ICovXG4gXHRfX3UzMlx0c3BpbmxvY2tfbG9ja3ZhbDtcdFx0LyogMHgwM2FjICovXG4gXHRfX3UzMlx0c3BpbmxvY2tfaW5kZXg7XHRcdFx0LyogMHgwM2IwICovXG4tXHRfX3U4XHRwYWRfMHgwM2I0WzB4MDNiOC0weDAzYjRdO1x0LyogMHgwM2I0ICovXG4rXHRfX3MzMlx0bGF6eV9tbXVfY291bnQ7XHRcdFx0LyogMHgwM2I0ICovXG4gXHRfX3U2NFx0cGVyY3B1X29mZnNldDtcdFx0XHQvKiAweDAzYjggKi9cbiBcdF9fdThcdHBlcmNwdV9yZWdpc3RlcjtcdFx0LyogMHgwM2MwICovXG4gXHRfX3U4XHRwYWRfMHgwM2MxWzB4MDQwMC0weDAzYzFdO1x0LyogMHgwM2MxICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDg1OWNlN2M3ZDQ1NDQuLjFlOGE3OTk4OWVkNmUgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtMzksNiArMzksNjQgQEAgZW51bSB7XG4gXG4gZXh0ZXJuIGF0b21pY19sb25nX3QgZGlyZWN0X3BhZ2VzX2NvdW50W1BHX0RJUkVDVF9NQVBfTUFYXTtcbiBcbitib29sIF9fbGF6eV9tbXVfcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBpbnQgKnJlcyk7XG4rYm9vbCBfX2xhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcih1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKTtcbitib29sIF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydCh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKTtcbitib29sIF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9jb21taXQodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3Qgb2xkX3B0ZSwgcHRlX3QgcHRlKTtcbitib29sIF9fbGF6eV9tbXVfcHRlcF9zZXRfd3Jwcm90ZWN0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApO1xuK2Jvb2wgX19sYXp5X21tdV9zZXRfcHRlKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpO1xuK2Jvb2wgX19sYXp5X21tdV9wdGVwX2dldChwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcyk7XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX2xhenlfbW11X2FjdGl2ZSh2b2lkKVxuK3tcbitcdGlmIChfX2lzX2RlZmluZWQoX19ERUNPTVBSRVNTT1IpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoIWdldF9sb3djb3JlKCktXHUwMDNlbGF6eV9tbXVfY291bnQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgaW5saW5lXG4rYm9vbCBsYXp5X21tdV9wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIGludCAqcmVzKVxuK3tcbitcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdHJldHVybiBfX2xhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoYWRkciwgcHRlcCwgcmVzKTtcbit9XG4rXG4rc3RhdGljIGlubGluZVxuK2Jvb2wgbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpXG4re1xuK1x0aWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0cmV0dXJuIF9fbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKGFkZHIsIHB0ZXAsIHJlcyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmVcbitib29sIGxhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcylcbit7XG4rXHRpZiAoIWlzX2xhenlfbW11X2FjdGl2ZSgpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRyZXR1cm4gX19sYXp5X21tdV9wdGVwX21vZGlmeV9wcm90X3N0YXJ0KGFkZHIsIHB0ZXAsIHJlcyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmVcbitib29sIGxhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4rXHRcdFx0XHQgICAgICBwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpXG4re1xuK1x0aWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0cmV0dXJuIF9fbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoYWRkciwgcHRlcCwgb2xkX3B0ZSwgcHRlKTtcbit9XG4rXG4rc3RhdGljIGlubGluZVxuK2Jvb2wgbGF6eV9tbXVfcHRlcF9zZXRfd3Jwcm90ZWN0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXG4re1xuK1x0aWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0cmV0dXJuIF9fbGF6eV9tbXVfcHRlcF9zZXRfd3Jwcm90ZWN0KGFkZHIsIHB0ZXApO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3BhZ2VfY291bnQoaW50IGxldmVsLCBsb25nIGNvdW50KVxuIHtcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUk9DX0ZTKSlcbkBAIC05NzgsMTcgKzEwMzYsMzggQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wbWQocG1kX3QgKnBtZHAsIHBtZF90IHBtZClcbiBcdFdSSVRFX09OQ0UoKnBtZHAsIHBtZCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpXG4rc3RhdGljIGlubGluZSB2b2lkIF9fc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxuIHtcbiBcdGlmIChwdGVfcHJlc2VudChwdGUpKVxuIFx0XHRwdGUgPSBjbGVhcl9wdGVfYml0KHB0ZSwgX19wZ3Byb3QoX1BBR0VfVU5VU0VEKSk7XG4gXHRXUklURV9PTkNFKCpwdGVwLCBwdGUpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxuK3tcbitcdGlmICghaXNfbGF6eV9tbXVfYWN0aXZlKCkgfHwgIV9fbGF6eV9tbXVfc2V0X3B0ZShwdGVwLCBwdGUpKVxuK1x0XHRfX3NldF9wdGUocHRlcCwgcHRlKTtcbit9XG4rXG4rI2RlZmluZSBwdGVwX2dldF9sb2NrbGVzcyBwdGVwX2dldF9sb2NrbGVzc1xuK3N0YXRpYyBpbmxpbmUgX19ub19zYW5pdGl6ZV9hZGRyZXNzIHB0ZV90IHB0ZXBfZ2V0X2xvY2tsZXNzKHB0ZV90ICpwdGVwKVxuK3tcbitcdHJldHVybiBSRUFEX09OQ0UoKnB0ZXApO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHB0ZV90IF9fcHRlcF9nZXQocHRlX3QgKnB0ZXApXG4re1xuK1x0cmV0dXJuIFJFQURfT05DRSgqcHRlcCk7XG4rfVxuK1xuICNkZWZpbmUgcHRlcF9nZXQgcHRlcF9nZXRcbiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfZ2V0KHB0ZV90ICpwdGVwKVxuIHtcbi1cdHJldHVybiBSRUFEX09OQ0UoKnB0ZXApO1xuK1x0cHRlX3QgcmVzO1xuK1xuK1x0aWYgKCFpc19sYXp5X21tdV9hY3RpdmUoKSB8fCAhX19sYXp5X21tdV9wdGVwX2dldChwdGVwLCBcdTAwMjZyZXMpKVxuK1x0XHRyZXMgPSBfX3B0ZXBfZ2V0KHB0ZXApO1xuK1x0cmV0dXJuIHJlcztcbiB9XG4gXG4gI2RlZmluZSBwbWRwX2dldCBwbWRwX2dldFxuQEAgLTExODEsNiArMTI2MCwxNSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19wdGVwX2lwdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgbnIsXG4gXHR9IHdoaWxlIChuciAhPSAyNTUpO1xuIH1cbiBcbit2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4rXHRcdFx0XHRcdHB0ZV90ICpwdGUpO1xuKyNkZWZpbmUgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlcyBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzXG4rXG4rdm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGUodm9pZCk7XG4rdm9pZCBhcmNoX2xlYXZlX2xhenlfbW11X21vZGUodm9pZCk7XG4rdm9pZCBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUodm9pZCk7XG4rXG4gLypcbiAgKiBUaGlzIGlzIGhhcmQgdG8gdW5kZXJzdGFuZC4gcHRlcF9nZXRfYW5kX2NsZWFyIGFuZCBwdGVwX2NsZWFyX2ZsdXNoXG4gICogYm90aCBjbGVhciB0aGUgVExCIGZvciB0aGUgdW5tYXBwZWQgcHRlLiBUaGUgcmVhc29uIGlzIHRoYXRcbkBAIC0xMjAxLDEwICsxMjg5LDE2IEBAIHB0ZV90IHB0ZXBfeGNoZ19sYXp5KHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKiwgcHRlX3QpO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxuIHtcbi1cdHB0ZV90IHB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xuK1x0cHRlX3QgcHRlO1xuK1x0aW50IHJlcztcbiBcbi1cdHB0ZSA9IHB0ZXBfeGNoZ19kaXJlY3Qodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGVwLCBwdGVfbWtvbGQocHRlKSk7XG4tXHRyZXR1cm4gcHRlX3lvdW5nKHB0ZSk7XG4rXHRpZiAoIWxhenlfbW11X3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoYWRkciwgcHRlcCwgXHUwMDI2cmVzKSkge1xuK1x0XHRwdGUgPSBfX3B0ZXBfZ2V0KHB0ZXApO1xuK1x0XHRwdGUgPSBwdGVfbWtvbGQocHRlKTtcbitcdFx0cHRlID0gcHRlcF94Y2hnX2RpcmVjdCh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXAsIHB0ZSk7XG4rXHRcdHJlcyA9IHB0ZV95b3VuZyhwdGUpO1xuK1x0fVxuK1x0cmV0dXJuIHJlcztcbiB9XG4gXG4gI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSX1lPVU5HX0ZMVVNIXG5AQCAtMTIyMCw3ICsxMzE0LDggQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4ge1xuIFx0cHRlX3QgcmVzO1xuIFxuLVx0cmVzID0gcHRlcF94Y2hnX2xhenkobW0sIGFkZHIsIHB0ZXAsIF9fcHRlKF9QQUdFX0lOVkFMSUQpKTtcbitcdGlmICghbGF6eV9tbXVfcHRlcF9nZXRfYW5kX2NsZWFyKGFkZHIsIHB0ZXAsIFx1MDAyNnJlcykpXG4rXHRcdHJlcyA9IHB0ZXBfeGNoZ19sYXp5KG1tLCBhZGRyLCBwdGVwLCBfX3B0ZShfUEFHRV9JTlZBTElEKSk7XG4gXHRwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcihtbSwgYWRkciwgcmVzKTtcbiBcdC8qIEF0IHRoaXMgcG9pbnQgdGhlIHJlZmVyZW5jZSB0aHJvdWdoIHRoZSBtYXBwaW5nIGlzIHN0aWxsIHByZXNlbnQgKi9cbiBcdGlmIChtbV9pc19wcm90ZWN0ZWQobW0pIFx1MDAyNlx1MDAyNiBwdGVfcHJlc2VudChyZXMpKVxuQEAgLTEyMjksOSArMTMyNCwyOCBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiB9XG4gXG4gI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX01PRElGWV9QUk9UX1RSQU5TQUNUSU9OXG4tcHRlX3QgcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKik7XG4tdm9pZCBwdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyxcbi1cdFx0XHQgICAgIHB0ZV90ICosIHB0ZV90LCBwdGVfdCk7XG4rcHRlX3QgX19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKik7XG4rdm9pZCBfX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyxcbitcdFx0XHRcdHB0ZV90ICosIHB0ZV90LCBwdGVfdCk7XG4rXG4rc3RhdGljIGlubGluZVxuK3B0ZV90IHB0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxuK3tcbitcdHB0ZV90IHJlcztcbitcbitcdGlmICghbGF6eV9tbXVfcHRlcF9tb2RpZnlfcHJvdF9zdGFydChhZGRyLCBwdGVwLCBcdTAwMjZyZXMpKVxuK1x0XHRyZXMgPSBfX19wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHZtYSwgYWRkciwgcHRlcCk7XG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbitzdGF0aWMgaW5saW5lXG4rdm9pZCBwdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdCAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IG9sZF9wdGUsIHB0ZV90IHB0ZSlcbit7XG4rXHRpZiAoIWxhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KGFkZHIsIHB0ZXAsIG9sZF9wdGUsIHB0ZSkpXG4rXHRcdF9fX3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHZtYSwgYWRkciwgcHRlcCwgb2xkX3B0ZSwgcHRlKTtcbit9XG4gXG4gI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSX0ZMVVNIXG4gc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuQEAgLTEyNjEsMTEgKzEzNzUsMTMgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXJfZnVsbChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiB7XG4gXHRwdGVfdCByZXM7XG4gXG4tXHRpZiAoZnVsbCkge1xuLVx0XHRyZXMgPSBwdGVwX2dldChwdGVwKTtcbi1cdFx0c2V0X3B0ZShwdGVwLCBfX3B0ZShfUEFHRV9JTlZBTElEKSk7XG4tXHR9IGVsc2Uge1xuLVx0XHRyZXMgPSBwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpO1xuK1x0aWYgKCFsYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIoYWRkciwgcHRlcCwgXHUwMDI2cmVzKSkge1xuK1x0XHRpZiAoZnVsbCkge1xuK1x0XHRcdHJlcyA9IF9fcHRlcF9nZXQocHRlcCk7XG4rXHRcdFx0X19zZXRfcHRlKHB0ZXAsIF9fcHRlKF9QQUdFX0lOVkFMSUQpKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRyZXMgPSBwdGVwX3hjaGdfbGF6eShtbSwgYWRkciwgcHRlcCwgX19wdGUoX1BBR0VfSU5WQUxJRCkpO1xuK1x0XHR9XG4gXHR9XG4gXHRwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcihtbSwgYWRkciwgcmVzKTtcbiBcdC8qIEF0IHRoaXMgcG9pbnQgdGhlIHJlZmVyZW5jZSB0aHJvdWdoIHRoZSBtYXBwaW5nIGlzIHN0aWxsIHByZXNlbnQgKi9cbkBAIC0xMjkxLDEwICsxNDA3LDE1IEBAIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9nZXRfYW5kX2NsZWFyX2Z1bGwoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gc3RhdGljIGlubGluZSB2b2lkIHB0ZXBfc2V0X3dycHJvdGVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXG4ge1xuLVx0cHRlX3QgcHRlID0gcHRlcF9nZXQocHRlcCk7XG4rXHRwdGVfdCBwdGU7XG4gXG4tXHRpZiAocHRlX3dyaXRlKHB0ZSkpXG4tXHRcdHB0ZXBfeGNoZ19sYXp5KG1tLCBhZGRyLCBwdGVwLCBwdGVfd3Jwcm90ZWN0KHB0ZSkpO1xuK1x0aWYgKCFsYXp5X21tdV9wdGVwX3NldF93cnByb3RlY3QoYWRkciwgcHRlcCkpIHtcbitcdFx0cHRlID0gX19wdGVwX2dldChwdGVwKTtcbitcdFx0aWYgKHB0ZV93cml0ZShwdGUpKSB7XG4rXHRcdFx0cHRlID0gcHRlX3dycHJvdGVjdChwdGUpO1xuK1x0XHRcdHB0ZXBfeGNoZ19sYXp5KG1tLCBhZGRyLCBwdGVwLCBwdGUpO1xuK1x0XHR9XG4rXHR9XG4gfVxuIFxuIC8qXG5AQCAtMTMyNyw3ICsxNDQ4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9maXhfc3B1cmlvdXNfZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHQgKiBQVEUgZG9lcyBub3QgaGF2ZSBfUEFHRV9QUk9URUNUIHNldCwgdG8gYXZvaWQgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQuXG4gXHQgKiBBIGxvY2FsIFJEUCBjYW4gYmUgdXNlZCB0byBkbyB0aGUgZmx1c2guXG4gXHQgKi9cbi1cdGlmIChjcHVfaGFzX3JkcCgpIFx1MDAyNlx1MDAyNiAhKHB0ZV92YWwocHRlcF9nZXQocHRlcCkpIFx1MDAyNiBfUEFHRV9QUk9URUNUKSlcbitcdGlmIChjcHVfaGFzX3JkcCgpIFx1MDAyNlx1MDAyNiAhKHB0ZV92YWwoX19wdGVwX2dldChwdGVwKSkgXHUwMDI2IF9QQUdFX1BST1RFQ1QpKVxuIFx0XHRfX3B0ZXBfcmRwKGFkZHJlc3MsIHB0ZXAsIDEpO1xuIH1cbiAjZGVmaW5lIGZsdXNoX3RsYl9maXhfc3B1cmlvdXNfZmF1bHQgZmx1c2hfdGxiX2ZpeF9zcHVyaW91c19mYXVsdFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuY1xuaW5kZXggYjYwMjg0MzI4ZmUzZC4uZjVhM2M5ZTFiNmI4OCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuY1xuKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jXG5AQCAtNzcsNiArNzcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9tYWNjZXNzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9hc20tb2Zmc2V0cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL2xhenlfbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcImVudHJ5LmhcIlxuIFxuIC8qXG5AQCAtMTAxMiw1ICsxMDEzLDYgQEAgdm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxuIFxuIHZvaWQgX19pbml0IGFyY2hfY3B1X2ZpbmFsaXplX2luaXQodm9pZClcbiB7XG4rXHRsYXp5X21tdV9vbmxpbmVfYm9vdF9jcHUoKTtcbiBcdHNjbHBfaW5pdCgpO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuY1xuaW5kZXggMGJhN2Y4OWI4MTYxMS4uMGE4MjZiYmFmMWRkYyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmNcbisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmNcbkBAIC01OSw2ICs1OSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RvcG9sb2d5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdmRzby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL21hY2Nlc3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS9sYXp5X21tdS5oXHUwMDNlXG4gI2luY2x1ZGUgXCJlbnRyeS5oXCJcbiBcbiBlbnVtIHtcbkBAIC04NjYsNiArODY3LDExIEBAIGludCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRpZGxlKVxuIFx0cmMgPSBwY3B1X2FsbG9jX2xvd2NvcmUocGNwdSwgY3B1KTtcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIHJjO1xuK1x0cmMgPSBsYXp5X21tdV9vbmxpbmVfY3B1KEdGUF9LRVJORUwsIGNwdSk7XG4rXHRpZiAocmMpIHtcbitcdFx0cGNwdV9mcmVlX2xvd2NvcmUocGNwdSwgY3B1KTtcbitcdFx0cmV0dXJuIHJjO1xuK1x0fVxuIFx0LypcbiBcdCAqIE1ha2Ugc3VyZSBnbG9iYWwgY29udHJvbCByZWdpc3RlciBjb250ZW50cyBkbyBub3QgY2hhbmdlXG4gXHQgKiB1bnRpbCBuZXcgQ1BVIGhhcyBpbml0aWFsaXplZCBjb250cm9sIHJlZ2lzdGVycy5cbkBAIC05MjEsNiArOTI3LDcgQEAgdm9pZCBfX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSlcbiBcdHBjcHUgPSBwZXJfY3B1X3B0cihcdTAwMjZwY3B1X2RldmljZXMsIGNwdSk7XG4gXHR3aGlsZSAoIXBjcHVfc3RvcHBlZChwY3B1KSlcbiBcdFx0Y3B1X3JlbGF4KCk7XG4rXHRsYXp5X21tdV9vZmZsaW5lX2NwdShjcHUpO1xuIFx0cGNwdV9mcmVlX2xvd2NvcmUocGNwdSwgY3B1KTtcbiBcdGNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbW1fY3B1bWFzayhcdTAwMjZpbml0X21tKSk7XG4gXHRjcHVtYXNrX2NsZWFyX2NwdShjcHUsIFx1MDAyNmluaXRfbW0uY29udGV4dC5jcHVfYXR0YWNoX21hc2spO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9NYWtlZmlsZSBiL2FyY2gvczM5MC9tbS9NYWtlZmlsZVxuaW5kZXggMTkzODk5YzM5Y2E3Zi4uOTZjYWMzZTk5ZjUxNiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9tbS9NYWtlZmlsZVxuKysrIGIvYXJjaC9zMzkwL21tL01ha2VmaWxlXG5AQCAtNCw2ICs0LDcgQEBcbiAjXG4gXG4gb2JqLXlcdFx0Oj0gaW5pdC5vIGZhdWx0Lm8gZXh0bWVtLm8gbW1hcC5vIHZtZW0ubyBtYWNjZXNzLm9cbitvYmoteVx0XHQ6PSBpbml0Lm8gZmF1bHQubyBleHRtZW0ubyBtbWFwLm8gdm1lbS5vIG1hY2Nlc3MubyBsYXp5X21tdS5vXG4gb2JqLXlcdFx0Kz0gcGFnZS1zdGF0ZXMubyBwYWdlYXR0ci5vIHBndGFibGUubyBwZ2FsbG9jLm8gZXh0YWJsZS5vXG4gXG4gb2JqLSQoQ09ORklHX0NNTSlcdFx0Kz0gY21tLm9cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vbGF6eV9tbXUuYyBiL2FyY2gvczM5MC9tbS9sYXp5X21tdS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2UzYTQxMTVlYTA0OFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvYXJjaC9zMzkwL21tL2xhenlfbW11LmNcbkBAIC0wLDAgKzEsNDE4IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wZ3RhYmxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rYXNhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL2ZhY2lsaXR5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vbGF6eV9tbXUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2t1bml0L3Zpc2liaWxpdHkuaFx1MDAzZVxuK1xuKyNkZWZpbmUgUFRFX1BPSVNPTlx0X1BBR0VfTEFSR0VcbitcbitzdHJ1Y3QgaXB0ZV9yYW5nZSB7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbitcdHVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyO1xuK1x0dW5zaWduZWQgbG9uZyBiYXNlX2VuZDtcbitcdHB0ZV90ICpiYXNlX3B0ZTtcbitcdHB0ZV90ICpzdGFydF9wdGU7XG4rXHRwdGVfdCAqZW5kX3B0ZTtcbitcdHB0ZV90IGNhY2hlW1BUUlNfUEVSX1BURV07XG4rfTtcbitcbitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGlwdGVfcmFuZ2UgKiwgaXB0ZV9yYW5nZSk7XG4rXG4rc3RhdGljIGludCBjb3VudF9jb250aWd1b3VzKHB0ZV90ICpzdGFydCwgcHRlX3QgKmVuZCwgYm9vbCAqdmFsaWQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBwYWdlX2ludmFsaWRfYml0O1xuK1x0cHRlX3QgKnB0ZXAsIHB0ZTtcbitcbitcdHB0ZSA9IF9fcHRlcF9nZXQoc3RhcnQpO1xuK1x0cGFnZV9pbnZhbGlkX2JpdCA9IHB0ZV92YWwocHRlKSBcdTAwMjYgX1BBR0VfSU5WQUxJRDtcbitcbitcdGZvciAocHRlcCA9IHN0YXJ0ICsgMTsgcHRlcCBcdTAwM2MgZW5kOyBwdGVwKyspIHtcbitcdFx0cHRlID0gX19wdGVwX2dldChwdGVwKTtcbitcdFx0aWYgKChwdGVfdmFsKHB0ZSkgXHUwMDI2IF9QQUdFX0lOVkFMSUQpICE9IHBhZ2VfaW52YWxpZF9iaXQpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHQqdmFsaWQgPSAhKHBhZ2VfaW52YWxpZF9iaXQpO1xuK1x0cmV0dXJuIHB0ZXAgLSBzdGFydDtcbit9XG4rXG4rc3RhdGljIHZvaWQgX19pbnZhbGlkYXRlX3B0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdFx0ICAgaW50IG5yX3B0ZXMsIHB0ZV90ICpwdGVwKVxuK3tcbitcdGF0b21pY19pbmMoXHUwMDI2bW0tXHUwMDNlY29udGV4dC5mbHVzaF9jb3VudCk7XG4rXHRpZiAoY3B1X2hhc190bGJfbGMoKSBcdTAwMjZcdTAwMjYgY3B1bWFza19lcXVhbChtbV9jcHVtYXNrKG1tKSwgY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKSlcbitcdFx0X19wdGVwX2lwdGVfcmFuZ2UoYWRkciwgbnJfcHRlcyAtIDEsIHB0ZXAsIElQVEVfTE9DQUwpO1xuK1x0ZWxzZVxuK1x0XHRfX3B0ZXBfaXB0ZV9yYW5nZShhZGRyLCBucl9wdGVzIC0gMSwgcHRlcCwgSVBURV9HTE9CQUwpO1xuK1x0YXRvbWljX2RlYyhcdTAwMjZtbS1cdTAwM2Vjb250ZXh0LmZsdXNoX2NvdW50KTtcbit9XG4rXG4rc3RhdGljIGludCBpbnZhbGlkYXRlX3B0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdFx0cHRlX3QgKnN0YXJ0LCBwdGVfdCAqZW5kKVxuK3tcbitcdGludCBucl9wdGVzO1xuK1x0Ym9vbCB2YWxpZDtcbitcbitcdG5yX3B0ZXMgPSBjb3VudF9jb250aWd1b3VzKHN0YXJ0LCBlbmQsIFx1MDAyNnZhbGlkKTtcbitcdGlmICh2YWxpZClcbitcdFx0X19pbnZhbGlkYXRlX3B0ZV9yYW5nZShtbSwgYWRkciwgbnJfcHRlcywgc3RhcnQpO1xuK1xuK1x0cmV0dXJuIG5yX3B0ZXM7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHNldF9wdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHQgIHB0ZV90ICpzdGFydCwgcHRlX3QgKmVuZCwgcHRlX3QgKmNhY2hlKVxuK3tcbitcdGludCBucl9wdGVzLCBucl90b3RhbCA9IGVuZCAtIHN0YXJ0O1xuK1x0cHRlX3QgKnB0ZXAgPSBzdGFydDtcbitcdGludCBpO1xuK1xuK1x0a2FzYW5fdW5wb2lzb25fcHRlKHN0YXJ0LCBucl90b3RhbCk7XG4rXHR3aGlsZSAocHRlcCBcdTAwM2MgZW5kKSB7XG4rXHRcdG5yX3B0ZXMgPSBpbnZhbGlkYXRlX3B0ZV9yYW5nZShtbSwgYWRkciwgcHRlcCwgZW5kKTtcbitcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcHRlczsgaSsrLCBwdGVwKyssIGNhY2hlKyspIHtcbitcdFx0XHRfX3NldF9wdGUocHRlcCwgKmNhY2hlKTtcbitcdFx0XHQqY2FjaGUgPSBfX3B0ZShQVEVfUE9JU09OKTtcbitcdFx0fVxuK1xuK1x0XHRhZGRyICs9IG5yX3B0ZXMgKiBQQUdFX1NJWkU7XG4rXHR9XG4rXHRrYXNhbl9wb2lzb25fcHRlKHN0YXJ0LCBucl90b3RhbCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVudGVyX2lwdGVfbm9yYW5nZSh2b2lkKVxuK3tcbitcdHN0cnVjdCBpcHRlX3JhbmdlIF9fbWF5YmVfdW51c2VkICpyYW5nZTtcbitcbitcdGlmICghdGVzdF9mYWNpbGl0eSgxMykpXG4rXHRcdHJldHVybjtcbitcbitcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbitcbitcdHJhbmdlID0gZ2V0X2NwdV92YXIoaXB0ZV9yYW5nZSk7XG4rXHRnZXRfbG93Y29yZSgpLVx1MDAzZWxhenlfbW11X2NvdW50Kys7XG4rXG4rXHRsb2NhbF9iaF9lbmFibGUoKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZW50ZXJfaXB0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHB0ZV90ICpwdGUpXG4re1xuK1x0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xuK1x0dW5zaWduZWQgaW50IG5yX3B0ZXM7XG4rXG4rXHRpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4rXG4rXHRyYW5nZSA9IGdldF9jcHVfdmFyKGlwdGVfcmFuZ2UpO1xuK1x0Z2V0X2xvd2NvcmUoKS1cdTAwM2VsYXp5X21tdV9jb3VudCsrO1xuK1xuK1x0aWYgKG1tX2lzX3Byb3RlY3RlZChtbSkpIHtcbitcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHJhbmdlLVx1MDAzZW1tID0gbW07XG4rXHRyYW5nZS1cdTAwM2ViYXNlX2FkZHIgPSBhZGRyO1xuK1x0cmFuZ2UtXHUwMDNlYmFzZV9lbmQgPSBlbmQ7XG4rXHRyYW5nZS1cdTAwM2ViYXNlX3B0ZSA9IHB0ZTtcbitcbitcdG5yX3B0ZXMgPSAocmFuZ2UtXHUwMDNlYmFzZV9lbmQgLSByYW5nZS1cdTAwM2ViYXNlX2FkZHIpIC8gUEFHRV9TSVpFO1xuK1x0a2FzYW5fcG9pc29uX3B0ZShyYW5nZS1cdTAwM2ViYXNlX3B0ZSwgbnJfcHRlcyk7XG4rXG4rXHRsb2NhbF9iaF9lbmFibGUoKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbGVhdmVfaXB0ZV9yYW5nZSh2b2lkKVxuK3tcbitcdHB0ZV90ICpwdGVwLCAqc3RhcnQsICpzdGFydF9jYWNoZSwgKmNhY2hlO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydF9hZGRyLCBhZGRyO1xuK1x0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xuK1x0dW5zaWduZWQgaW50IG5yX3B0ZXM7XG4rXHRpbnQgc3RhcnRfaWR4O1xuK1xuK1x0aWYgKCF0ZXN0X2ZhY2lsaXR5KDEzKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfcHJlZW1wdGlvbl9kaXNhYmxlZCgpO1xuK1x0cmFuZ2UgPSB0aGlzX2NwdV9yZWFkKGlwdGVfcmFuZ2UpO1xuK1x0aWYgKCFyYW5nZS1cdTAwM2VtbSlcbitcdFx0Z290byBub3JhbmdlO1xuK1x0aWYgKCFyYW5nZS1cdTAwM2VzdGFydF9wdGUpXG4rXHRcdGdvdG8gZG9uZTtcbitcbitcdHN0YXJ0ID0gcmFuZ2UtXHUwMDNlc3RhcnRfcHRlO1xuK1x0c3RhcnRfaWR4ID0gcmFuZ2UtXHUwMDNlc3RhcnRfcHRlIC0gcmFuZ2UtXHUwMDNlYmFzZV9wdGU7XG4rXHRzdGFydF9hZGRyID0gcmFuZ2UtXHUwMDNlYmFzZV9hZGRyICsgc3RhcnRfaWR4ICogUEFHRV9TSVpFO1xuK1x0YWRkciA9IHN0YXJ0X2FkZHI7XG4rXHRzdGFydF9jYWNoZSA9IFx1MDAyNnJhbmdlLVx1MDAzZWNhY2hlW3N0YXJ0X2lkeF07XG4rXHRjYWNoZSA9IHN0YXJ0X2NhY2hlO1xuK1x0Zm9yIChwdGVwID0gc3RhcnQ7IHB0ZXAgXHUwMDNjIHJhbmdlLVx1MDAzZWVuZF9wdGU7IHB0ZXArKywgY2FjaGUrKywgYWRkciArPSBQQUdFX1NJWkUpIHtcbitcdFx0aWYgKHB0ZV92YWwoKmNhY2hlKSA9PSBQVEVfUE9JU09OKSB7XG4rXHRcdFx0aWYgKHN0YXJ0KSB7XG4rXHRcdFx0XHRzZXRfcHRlX3JhbmdlKHJhbmdlLVx1MDAzZW1tLCBzdGFydF9hZGRyLCBzdGFydCwgcHRlcCwgc3RhcnRfY2FjaGUpO1xuK1x0XHRcdFx0c3RhcnQgPSBOVUxMO1xuK1x0XHRcdH1cbitcdFx0fSBlbHNlIGlmICghc3RhcnQpIHtcbitcdFx0XHRzdGFydCA9IHB0ZXA7XG4rXHRcdFx0c3RhcnRfYWRkciA9IGFkZHI7XG4rXHRcdFx0c3RhcnRfY2FjaGUgPSBjYWNoZTtcbitcdFx0fVxuK1x0fVxuK1x0c2V0X3B0ZV9yYW5nZShyYW5nZS1cdTAwM2VtbSwgc3RhcnRfYWRkciwgc3RhcnQsIHB0ZXAsIHN0YXJ0X2NhY2hlKTtcbitcbitcdHJhbmdlLVx1MDAzZXN0YXJ0X3B0ZSA9IE5VTEw7XG4rXHRyYW5nZS1cdTAwM2VlbmRfcHRlID0gTlVMTDtcbitcbitkb25lOlxuK1x0bnJfcHRlcyA9IChyYW5nZS1cdTAwM2ViYXNlX2VuZCAtIHJhbmdlLVx1MDAzZWJhc2VfYWRkcikgLyBQQUdFX1NJWkU7XG4rXHRrYXNhbl91bnBvaXNvbl9wdGUocmFuZ2UtXHUwMDNlYmFzZV9wdGUsIG5yX3B0ZXMpO1xuK1xuK1x0cmFuZ2UtXHUwMDNlbW0gPSBOVUxMO1xuK1x0cmFuZ2UtXHUwMDNlYmFzZV9hZGRyID0gMDtcbitcdHJhbmdlLVx1MDAzZWJhc2VfZW5kID0gMDtcbitcdHJhbmdlLVx1MDAzZWJhc2VfcHRlID0gTlVMTDtcbitcbitub3JhbmdlOlxuK1x0Z2V0X2xvd2NvcmUoKS1cdTAwM2VsYXp5X21tdV9jb3VudC0tO1xuK1x0cHV0X2NwdV92YXIoaXB0ZV9yYW5nZSk7XG4rXG4rXHRsb2NhbF9iaF9lbmFibGUoKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZmx1c2hfbGF6eV9tbXVfbW9kZSh2b2lkKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgYWRkciwgZW5kO1xuK1x0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4rXHRwdGVfdCAqcHRlO1xuK1xuK1x0aWYgKCF0ZXN0X2ZhY2lsaXR5KDEzKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cmFuZ2UgPSBnZXRfY3B1X3ZhcihpcHRlX3JhbmdlKTtcbitcdGlmIChyYW5nZS1cdTAwM2VtbSkge1xuK1x0XHRtbSA9IHJhbmdlLVx1MDAzZW1tO1xuK1x0XHRhZGRyID0gcmFuZ2UtXHUwMDNlYmFzZV9hZGRyO1xuK1x0XHRlbmQgPSByYW5nZS1cdTAwM2ViYXNlX2VuZDtcbitcdFx0cHRlID0gcmFuZ2UtXHUwMDNlYmFzZV9wdGU7XG4rXG4rXHRcdGxlYXZlX2lwdGVfcmFuZ2UoKTtcbitcdFx0ZW50ZXJfaXB0ZV9yYW5nZShtbSwgYWRkciwgZW5kLCBwdGUpO1xuK1x0fVxuK1x0cHV0X2NwdV92YXIoaXB0ZV9yYW5nZSk7XG4rfVxuK1xuK3ZvaWQgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKHZvaWQpXG4re1xuK1x0ZW50ZXJfaXB0ZV9ub3JhbmdlKCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfSUZfS1VOSVQoYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKTtcbitcbit2b2lkIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4rXHRcdFx0XHRcdHB0ZV90ICpwdGUpXG4re1xuK1x0ZW50ZXJfaXB0ZV9yYW5nZShtbSwgYWRkciwgZW5kLCBwdGUpO1xuK31cbitFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMpO1xuK1xuK3ZvaWQgYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKHZvaWQpXG4re1xuK1x0bGVhdmVfaXB0ZV9yYW5nZSgpO1xuK31cbitFWFBPUlRfU1lNQk9MX0lGX0tVTklUKGFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSk7XG4rXG4rdm9pZCBhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUodm9pZClcbit7XG4rXHRmbHVzaF9sYXp5X21tdV9tb2RlKCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfSUZfS1VOSVQoYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlKTtcbitcbitzdGF0aWMgdm9pZCBfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2UsIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpXG4re1xuK1x0dW5zaWduZWQgaW50IGlkeCA9IHB0ZXAgLSByYW5nZS1cdTAwM2ViYXNlX3B0ZTtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X3ByZWVtcHRpb25fZGlzYWJsZWQoKTtcbitcdHJhbmdlLVx1MDAzZWNhY2hlW2lkeF0gPSBwdGU7XG4rXG4rXHRpZiAoIXJhbmdlLVx1MDAzZXN0YXJ0X3B0ZSkge1xuK1x0XHRyYW5nZS1cdTAwM2VzdGFydF9wdGUgPSBwdGVwO1xuK1x0XHRyYW5nZS1cdTAwM2VlbmRfcHRlID0gcHRlcCArIDE7XG4rXHR9IGVsc2UgaWYgKHB0ZXAgXHUwMDNjIHJhbmdlLVx1MDAzZXN0YXJ0X3B0ZSkge1xuK1x0XHRyYW5nZS1cdTAwM2VzdGFydF9wdGUgPSBwdGVwO1xuK1x0fSBlbHNlIGlmIChwdGVwICsgMSBcdTAwM2UgcmFuZ2UtXHUwMDNlZW5kX3B0ZSkge1xuK1x0XHRyYW5nZS1cdTAwM2VlbmRfcHRlID0gcHRlcCArIDE7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBwdGVfdCBfX2lwdGVfcmFuZ2VfcHRlcF9nZXQoc3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlLCBwdGVfdCAqcHRlcClcbit7XG4rXHR1bnNpZ25lZCBpbnQgaWR4ID0gcHRlcCAtIHJhbmdlLVx1MDAzZWJhc2VfcHRlO1xuK1x0cHRlX3QgcHRlO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfcHJlZW1wdGlvbl9kaXNhYmxlZCgpO1xuK1x0aWYgKHB0ZV92YWwocmFuZ2UtXHUwMDNlY2FjaGVbaWR4XSkgPT0gUFRFX1BPSVNPTikge1xuK1x0XHRrYXNhbl91bnBvaXNvbl9wdGUocHRlcCwgMSk7XG4rXHRcdHB0ZSA9IF9fcHRlcF9nZXQocHRlcCk7XG4rXHRcdGthc2FuX3BvaXNvbl9wdGUocHRlcCwgMSk7XG4rXG4rXHRcdHJldHVybiBwdGU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmFuZ2UtXHUwMDNlY2FjaGVbaWR4XTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBpcHRlX3JhbmdlICp0aGlzX2lwdGVfcmFuZ2UocHRlX3QgKnB0ZXApXG4re1xuK1x0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xuK1x0dW5zaWduZWQgaW50IG5yX3B0ZXM7XG4rXG4rXHRyYW5nZSA9IHRoaXNfY3B1X3JlYWQoaXB0ZV9yYW5nZSk7XG4rXHRpZiAocHRlcCBcdTAwM2MgcmFuZ2UtXHUwMDNlYmFzZV9wdGUpXG4rXHRcdHJldHVybiBOVUxMO1xuK1x0bnJfcHRlcyA9IChyYW5nZS1cdTAwM2ViYXNlX2VuZCAtIHJhbmdlLVx1MDAzZWJhc2VfYWRkcikgLyBQQUdFX1NJWkU7XG4rXHRpZiAocHRlcCBcdTAwM2U9IHJhbmdlLVx1MDAzZWJhc2VfcHRlICsgbnJfcHRlcylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyZXR1cm4gcmFuZ2U7XG4rfVxuK1xuK2Jvb2wgX19sYXp5X21tdV9zZXRfcHRlKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpXG4re1xuK1x0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xuK1xuK1x0cmFuZ2UgPSB0aGlzX2lwdGVfcmFuZ2UocHRlcCk7XG4rXHRpZiAoIXJhbmdlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitib29sIF9fbGF6eV9tbXVfcHRlcF9nZXQocHRlX3QgKnB0ZXAsIHB0ZV90ICpyZXMpXG4re1xuK1x0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xuK1xuK1x0cmFuZ2UgPSB0aGlzX2lwdGVfcmFuZ2UocHRlcCk7XG4rXHRpZiAoIXJhbmdlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQqcmVzID0gX19pcHRlX3JhbmdlX3B0ZXBfZ2V0KHJhbmdlLCBwdGVwKTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitib29sIF9fbGF6eV9tbXVfcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBpbnQgKnJlcylcbit7XG4rXHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XG4rXHRwdGVfdCBwdGUsIG9sZDtcbitcbitcdHJhbmdlID0gdGhpc19pcHRlX3JhbmdlKHB0ZXApO1xuK1x0aWYgKCFyYW5nZSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0b2xkID0gX19pcHRlX3JhbmdlX3B0ZXBfZ2V0KHJhbmdlLCBwdGVwKTtcbitcdHB0ZSA9IHB0ZV9ta29sZChvbGQpO1xuK1x0X19pcHRlX3JhbmdlX3NldF9wdGUocmFuZ2UsIHB0ZXAsIHB0ZSk7XG4rXHQqcmVzID0gcHRlX3lvdW5nKG9sZCk7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rYm9vbCBfX2xhenlfbW11X3B0ZXBfZ2V0X2FuZF9jbGVhcih1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCAqcmVzKVxuK3tcbitcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcbitcdHB0ZV90IHB0ZSwgb2xkO1xuK1xuK1x0cmFuZ2UgPSB0aGlzX2lwdGVfcmFuZ2UocHRlcCk7XG4rXHRpZiAoIXJhbmdlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRvbGQgPSBfX2lwdGVfcmFuZ2VfcHRlcF9nZXQocmFuZ2UsIHB0ZXApO1xuK1x0cHRlID0gX19wdGUoX1BBR0VfSU5WQUxJRCk7XG4rXHRfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTtcbitcdCpyZXMgPSBvbGQ7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rYm9vbCBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgKnJlcylcbit7XG4rXHRyZXR1cm4gX19sYXp5X21tdV9wdGVwX2dldF9hbmRfY2xlYXIoYWRkciwgcHRlcCwgcmVzKTtcbit9XG4rXG4rYm9vbCBfX2xhenlfbW11X3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4rXHRcdFx0XHRcdHB0ZV90IG9sZF9wdGUsIHB0ZV90IHB0ZSlcbit7XG4rXHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XG4rXG4rXHRyYW5nZSA9IHRoaXNfaXB0ZV9yYW5nZShwdGVwKTtcbitcdGlmICghcmFuZ2UpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdF9faXB0ZV9yYW5nZV9zZXRfcHRlKHJhbmdlLCBwdGVwLCBwdGUpO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK2Jvb2wgX19sYXp5X21tdV9wdGVwX3NldF93cnByb3RlY3QodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcbit7XG4rXHRzdHJ1Y3QgaXB0ZV9yYW5nZSAqcmFuZ2U7XG4rXHRwdGVfdCBwdGU7XG4rXG4rXHRyYW5nZSA9IHRoaXNfaXB0ZV9yYW5nZShwdGVwKTtcbitcdGlmICghcmFuZ2UpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHB0ZSA9IF9faXB0ZV9yYW5nZV9wdGVwX2dldChyYW5nZSwgcHRlcCk7XG4rXHRpZiAocHRlX3dyaXRlKHB0ZSkpIHtcbitcdFx0cHRlID0gcHRlX3dycHJvdGVjdChwdGUpO1xuK1x0XHRfX2lwdGVfcmFuZ2Vfc2V0X3B0ZShyYW5nZSwgcHRlcCwgcHRlKTtcbitcdH1cbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitpbnQgbGF6eV9tbXVfb25saW5lX2NwdShnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBjcHUpXG4re1xuK1x0c3RydWN0IGlwdGVfcmFuZ2UgKnJhbmdlO1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoIXRlc3RfZmFjaWxpdHkoMTMpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJhbmdlID0ga3phbGxvY19vYmooKnJhbmdlLCBnZnApO1xuK1x0aWYgKCFyYW5nZSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHJhbmdlLVx1MDAzZWNhY2hlKTsgaSsrKVxuK1x0XHRyYW5nZS1cdTAwM2VjYWNoZVtpXSA9IF9fcHRlKFBURV9QT0lTT04pO1xuK1x0cGVyX2NwdShpcHRlX3JhbmdlLCBjcHUpID0gcmFuZ2U7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rdm9pZCBsYXp5X21tdV9vZmZsaW5lX2NwdSh1bnNpZ25lZCBpbnQgY3B1KVxuK3tcbitcdHN0cnVjdCBpcHRlX3JhbmdlICpyYW5nZTtcbitcbitcdGlmICghdGVzdF9mYWNpbGl0eSgxMykpXG4rXHRcdHJldHVybjtcbitcbitcdHJhbmdlID0gcGVyX2NwdShpcHRlX3JhbmdlLCBjcHUpO1xuK1x0cGVyX2NwdShpcHRlX3JhbmdlLCBjcHUpID0gTlVMTDtcbitcdGtmcmVlKHJhbmdlKTtcbit9XG4rXG4rdm9pZCBfX2luaXQgbGF6eV9tbXVfb25saW5lX2Jvb3RfY3B1KHZvaWQpXG4re1xuK1x0bGF6eV9tbXVfb25saW5lX2NwdShHRlBfQVRPTUlDLCAwKTtcbit9XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL3BndGFibGUuYyBiL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmNcbmluZGV4IDRhY2Q4YjE0MGM0YmQuLmRmMzY1MjNiY2JiYmIgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jXG4rKysgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jXG5AQCAtMTY2LDE0ICsxNjYsMTQgQEAgcHRlX3QgcHRlcF94Y2hnX2xhenkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiB9XG4gRVhQT1JUX1NZTUJPTChwdGVwX3hjaGdfbGF6eSk7XG4gXG4tcHRlX3QgcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdCAgICAgcHRlX3QgKnB0ZXApXG4rcHRlX3QgX19fcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdFx0cHRlX3QgKnB0ZXApXG4ge1xuIFx0cmV0dXJuIHB0ZXBfZmx1c2hfbGF6eSh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXAsIDEpO1xuIH1cbiBcbi12b2lkIHB0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0ICAgICBwdGVfdCAqcHRlcCwgcHRlX3Qgb2xkX3B0ZSwgcHRlX3QgcHRlKVxuK3ZvaWQgX19fcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHRcdHB0ZV90ICpwdGVwLCBwdGVfdCBvbGRfcHRlLCBwdGVfdCBwdGUpXG4ge1xuIFx0c2V0X3B0ZShwdGVwLCBwdGUpO1xuIH1cbmRpZmYgLS1naXQgYS9mcy9wcm9jL3Rhc2tfbW11LmMgYi9mcy9wcm9jL3Rhc2tfbW11LmNcbmluZGV4IDIyOWQxZmMzZDdmMWMuLjkxNjc4NWMzYjJlMGIgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmNcbisrKyBiL2ZzL3Byb2MvdGFza19tbXUuY1xuQEAgLTI4NTIsNyArMjg1Miw3IEBAIHN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4rXHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXModm1hLVx1MDAzZXZtX21tLCBzdGFydCwgZW5kLCBzdGFydF9wdGUpO1xuIFxuIFx0aWYgKChwLVx1MDAzZWFyZy5mbGFncyBcdTAwMjYgUE1fU0NBTl9XUF9NQVRDSElORykgXHUwMDI2XHUwMDI2ICFwLVx1MDAzZXZlY19vdXQpIHtcbiBcdFx0LyogRmFzdCBwYXRoIGZvciBwZXJmb3JtaW5nIGV4Y2x1c2l2ZSBXUCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2FzYW4uaCBiL2luY2x1ZGUvbGludXgva2FzYW4uaFxuaW5kZXggYmYyMzNiZGU2OGM3ZS4uMWFhNGQ5ZGQyNDg1YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva2FzYW4uaFxuKysrIGIvaW5jbHVkZS9saW51eC9rYXNhbi5oXG5AQCAtNiw2ICs2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rYXNhbi1lbmFibGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rYXNhbi10YWdzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BndGFibGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0YXRpY19rZXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbkBAIC0zNSw4ICszNiw2IEBAIHR5cGVkZWYgdW5zaWduZWQgaW50IF9fYml0d2lzZSBrYXNhbl92bWFsbG9jX2ZsYWdzX3Q7XG4gXG4gI2lmIGRlZmluZWQoQ09ORklHX0tBU0FOX0dFTkVSSUMpIHx8IGRlZmluZWQoQ09ORklHX0tBU0FOX1NXX1RBR1MpXG4gXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvcGd0YWJsZS5oXHUwMDNlXG4tXG4gLyogU29mdHdhcmUgS0FTQU4gaW1wbGVtZW50YXRpb25zIHVzZSBzaGFkb3cgbWVtb3J5LiAqL1xuIFxuICNpZmRlZiBDT05GSUdfS0FTQU5fU1dfVEFHU1xuQEAgLTEzNCw2ICsxMzMsMjAgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGthc2FuX3BvaXNvbl9zbGFiKHN0cnVjdCBzbGFiICpzbGFiKVxuIFx0XHRfX2thc2FuX3BvaXNvbl9zbGFiKHNsYWIpO1xuIH1cbiBcbit2b2lkIF9fa2FzYW5fcG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpO1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucilcbit7XG4rXHRpZiAoa2FzYW5fZW5hYmxlZCgpKVxuK1x0XHRfX2thc2FuX3BvaXNvbl9wdGUocHRlLCBucik7XG4rfVxuK1xuK3ZvaWQgX19rYXNhbl91bnBvaXNvbl9wdGUocHRlX3QgKnB0ZSwgaW50IG5yKTtcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQga2FzYW5fdW5wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucilcbit7XG4rXHRpZiAoa2FzYW5fZW5hYmxlZCgpKVxuK1x0XHRfX2thc2FuX3VucG9pc29uX3B0ZShwdGUsIG5yKTtcbit9XG4rXG4gdm9pZCBfX2thc2FuX3VucG9pc29uX25ld19vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB2b2lkICpvYmplY3QpO1xuIC8qKlxuICAqIGthc2FuX3VucG9pc29uX25ld19vYmplY3QgLSBUZW1wb3JhcmlseSB1bnBvaXNvbiBhIG5ldyBzbGFiIG9iamVjdC5cbkBAIC00MTQsNiArNDI3LDggQEAgc3RhdGljIGlubGluZSBib29sIGthc2FuX3VucG9pc29uX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9wb2lzb25fc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYikge31cbitzdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fcG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpIHt9XG4rc3RhdGljIGlubGluZSB2b2lkIGthc2FuX3VucG9pc29uX3B0ZShwdGVfdCAqcHRlLCBpbnQgbnIpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGthc2FuX3VucG9pc29uX25ld19vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLFxuIFx0XHRcdFx0XHR2b2lkICpvYmplY3QpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGthc2FuX3BvaXNvbl9uZXdfb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaCBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG5pbmRleCAyOTgxZTM4NmRhN2IzLi5jYzg1ZGFmMzA3MzllIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG5AQCAtMjcxLDYgKzI3MSw1MCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9lbmFibGUodm9pZClcbiBcdFx0YXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7XG4gfVxuIFxuKyNpZm5kZWYgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlX3dpdGhfcHRlc1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2VudGVyX2xhenlfbW11X21vZGVfd2l0aF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBwdGVfdCAqcHRlcClcbit7XG4rXHRhcmNoX2VudGVyX2xhenlfbW11X21vZGUoKTtcbit9XG4rI2VuZGlmXG4rXG4rLyoqXG4rICogbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKCkgLSBFbmFibGUgdGhlIGxhenkgTU1VIG1vZGUgd2l0aCBhIHNwZWVkdXAgaGludC5cbisgKiBAbW06IEFkZHJlc3Mgc3BhY2UgdGhlIHBhZ2VzIGFyZSBtYXBwZWQgaW50by5cbisgKiBAYWRkcjogU3RhcnQgYWRkcmVzcyBvZiB0aGUgcmFuZ2UuXG4rICogQGVuZDogRW5kIGFkZHJlc3Mgb2YgdGhlIHJhbmdlLlxuKyAqIEBwdGVwOiBQYWdlIHRhYmxlIHBvaW50ZXIgZm9yIHRoZSBmaXJzdCBlbnRyeS5cbisgKlxuKyAqIEVudGVycyBhIG5ldyBsYXp5IE1NVSBtb2RlIHNlY3Rpb247IGlmIHRoZSBtb2RlIHdhcyBub3QgYWxyZWFkeSBlbmFibGVkLFxuKyAqIGVuYWJsZXMgaXQgYW5kIGNhbGxzIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMoKS5cbisgKlxuKyAqIFBURXMgdGhhdCBmYWxsIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHJhbmdlIG1pZ2h0IG9ic2VydmUgdXBkYXRlIHNwZWVkdXBzLlxuKyAqIFRoZSBQVEVzIG11c3QgYmVsb25nIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBzcGFjZSBhbmQgYmUgaW4gdGhlIHNhbWUgUE1ELlxuKyAqXG4rICogVGhlcmUgYXJlIG5vIHJlcXVpcmVtZW50cyBvbiB0aGUgb3JkZXIgb3IgcmFuZ2UgY29tcGxldGVuZXNzIG9mIFBURVxuKyAqIHVwZGF0ZXMgZm9yIHRoZSBzcGVjaWZpZWQgcmFuZ2UuXG4rICpcbisgKiBNdXN0IGJlIHBhaXJlZCB3aXRoIGEgY2FsbCB0byBsYXp5X21tdV9tb2RlX2Rpc2FibGUoKS5cbisgKlxuKyAqIEhhcyBubyBlZmZlY3QgaWYgY2FsbGVkOlxuKyAqIC0gV2hpbGUgcGF1c2VkIC0gc2VlIGxhenlfbW11X21vZGVfcGF1c2UoKVxuKyAqIC0gSW4gaW50ZXJydXB0IGNvbnRleHRcbisgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBwdGVfdCAqcHRlcClcbit7XG4rXHRzdHJ1Y3QgbGF6eV9tbXVfc3RhdGUgKnN0YXRlID0gXHUwMDI2Y3VycmVudC1cdTAwM2VsYXp5X21tdV9zdGF0ZTtcbitcbitcdGlmIChpbl9pbnRlcnJ1cHQoKSB8fCBzdGF0ZS1cdTAwM2VwYXVzZV9jb3VudCBcdTAwM2UgMClcbitcdFx0cmV0dXJuO1xuK1xuK1x0Vk1fV0FSTl9PTl9PTkNFKHN0YXRlLVx1MDAzZWVuYWJsZV9jb3VudCA9PSBVOF9NQVgpO1xuK1xuK1x0aWYgKHN0YXRlLVx1MDAzZWVuYWJsZV9jb3VudCsrID09IDApXG4rXHRcdGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgcHRlcCk7XG4rfVxuK1xuIC8qKlxuICAqIGxhenlfbW11X21vZGVfZGlzYWJsZSgpIC0gRGlzYWJsZSB0aGUgbGF6eSBNTVUgbW9kZS5cbiAgKlxuQEAgLTM4Nyw2ICs0MzEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9yZXN1bWUodm9pZClcbiB9XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9lbmFibGUodm9pZCkge31cbitzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBwdGVfdCAqcHRlcCkge31cbiBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9kaXNhYmxlKHZvaWQpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGxhenlfbW11X21vZGVfcGF1c2Uodm9pZCkge31cbiBzdGF0aWMgaW5saW5lIHZvaWQgbGF6eV9tbXVfbW9kZV9yZXN1bWUodm9pZCkge31cbmRpZmYgLS1naXQgYS9tbS9rYXNhbi9jb21tb24uYyBiL21tL2thc2FuL2NvbW1vbi5jXG5pbmRleCBiN2QwNWMyYTZkOTNkLi45NGQxMDYwOTQ5ODkxIDEwMDY0NFxuLS0tIGEvbW0va2FzYW4vY29tbW9uLmNcbisrKyBiL21tL2thc2FuL2NvbW1vbi5jXG5AQCAtMTYzLDYgKzE2MywyMCBAQCB2b2lkIF9fa2FzYW5fcG9pc29uX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIpXG4gXHRcdCAgICAgS0FTQU5fU0xBQl9SRURaT05FLCBmYWxzZSk7XG4gfVxuIFxuK3ZvaWQgX19rYXNhbl9wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucilcbit7XG4rXHRpZiAoSVNfQUxJR05FRChzaXplb2YoKnB0ZSksIEtBU0FOX0dSQU5VTEVfU0laRSkpXG4rXHRcdGthc2FuX3BvaXNvbihwdGUsIHNpemVvZigqcHRlKSAqIG5yLCBLQVNBTl9MQVpZX01NVV9QVEUsIGZhbHNlKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoX19rYXNhbl9wb2lzb25fcHRlKTtcbitcbit2b2lkIF9fa2FzYW5fdW5wb2lzb25fcHRlKHB0ZV90ICpwdGUsIGludCBucilcbit7XG4rXHRpZiAoSVNfQUxJR05FRChzaXplb2YoKnB0ZSksIEtBU0FOX0dSQU5VTEVfU0laRSkpXG4rXHRcdGthc2FuX3VucG9pc29uKHB0ZSwgc2l6ZW9mKCpwdGUpICogbnIsIGZhbHNlKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoX19rYXNhbl91bnBvaXNvbl9wdGUpO1xuK1xuIHZvaWQgX19rYXNhbl91bnBvaXNvbl9uZXdfb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSwgdm9pZCAqb2JqZWN0KVxuIHtcbiBcdGthc2FuX3VucG9pc29uKG9iamVjdCwgY2FjaGUtXHUwMDNlb2JqZWN0X3NpemUsIGZhbHNlKTtcbmRpZmYgLS1naXQgYS9tbS9rYXNhbi9rYXNhbi5oIGIvbW0va2FzYW4va2FzYW4uaFxuaW5kZXggZmM5MTY5YTU0NzY2Mi4uMWEyZDE4Y2RiMjFkOSAxMDA2NDRcbi0tLSBhL21tL2thc2FuL2thc2FuLmhcbisrKyBiL21tL2thc2FuL2thc2FuLmhcbkBAIC0xNDQsMTIgKzE0NCwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wga2FzYW5fcmVxdWlyZXNfbWV0YSh2b2lkKVxuICNkZWZpbmUgS0FTQU5fUEFHRV9SRURaT05FXHQweEZFICAvKiByZWR6b25lIGZvciBrbWFsbG9jX2xhcmdlIGFsbG9jYXRpb24gKi9cbiAjZGVmaW5lIEtBU0FOX1NMQUJfUkVEWk9ORVx0MHhGQyAgLyogcmVkem9uZSBmb3Igc2xhYiBvYmplY3QgKi9cbiAjZGVmaW5lIEtBU0FOX1NMQUJfRlJFRVx0XHQweEZCICAvKiBmcmVlZCBzbGFiIG9iamVjdCAqL1xuKyNkZWZpbmUgS0FTQU5fTEFaWV9NTVVfUFRFXHQweEZEICAvKiBkaXJlY3QgcHRlIGFjY2VzcyBpbiBsYXp5IG1tdSBtb2RlICovXG4gI2RlZmluZSBLQVNBTl9WTUFMTE9DX0lOVkFMSURcdDB4RjggIC8qIGluYWNjZXNzaWJsZSBzcGFjZSBpbiB2bWFwIGFyZWEgKi9cbiAjZWxzZVxuICNkZWZpbmUgS0FTQU5fUEFHRV9GUkVFXHRcdEtBU0FOX1RBR19JTlZBTElEXG4gI2RlZmluZSBLQVNBTl9QQUdFX1JFRFpPTkVcdEtBU0FOX1RBR19JTlZBTElEXG4gI2RlZmluZSBLQVNBTl9TTEFCX1JFRFpPTkVcdEtBU0FOX1RBR19JTlZBTElEXG4gI2RlZmluZSBLQVNBTl9TTEFCX0ZSRUVcdFx0S0FTQU5fVEFHX0lOVkFMSURcbisjZGVmaW5lIEtBU0FOX0xBWllfTU1VX1BURVx0S0FTQU5fVEFHX0lOVkFMSURcbiAjZGVmaW5lIEtBU0FOX1ZNQUxMT0NfSU5WQUxJRFx0S0FTQU5fVEFHX0lOVkFMSUQgLyogb25seSB1c2VkIGZvciBTV19UQUdTICovXG4gI2VuZGlmXG4gXG5kaWZmIC0tZ2l0IGEvbW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuYyBiL21tL2thc2FuL3JlcG9ydF9nZW5lcmljLmNcbmluZGV4IGY1YjhlMzdiMzgwNWMuLjQ4OWQ0YThkNjkwMmQgMTAwNjQ0XG4tLS0gYS9tbS9rYXNhbi9yZXBvcnRfZ2VuZXJpYy5jXG4rKysgYi9tbS9rYXNhbi9yZXBvcnRfZ2VuZXJpYy5jXG5AQCAtMTEzLDYgKzExMyw5IEBAIHN0YXRpYyBjb25zdCBjaGFyICpnZXRfc2hhZG93X2J1Z190eXBlKHN0cnVjdCBrYXNhbl9yZXBvcnRfaW5mbyAqaW5mbylcbiBcdGNhc2UgS0FTQU5fU0xBQl9GUkVFX01FVEE6XG4gXHRcdGJ1Z190eXBlID0gXCJzbGFiLXVzZS1hZnRlci1mcmVlXCI7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBLQVNBTl9MQVpZX01NVV9QVEU6XG4rXHRcdGJ1Z190eXBlID0gXCJsYXp5LW1tdS1wdGUtYWNjZXNzXCI7XG4rXHRcdGJyZWFrO1xuIFx0Y2FzZSBLQVNBTl9BTExPQ0FfTEVGVDpcbiBcdGNhc2UgS0FTQU5fQUxMT0NBX1JJR0hUOlxuIFx0XHRidWdfdHlwZSA9IFwiYWxsb2NhLW91dC1vZi1ib3VuZHNcIjtcbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcbmluZGV4IDc3NTUyYjAzZDMxOGQuLjQ0MTlkMTZiMzlmOTYgMTAwNjQ0XG4tLS0gYS9tbS9tYWR2aXNlLmNcbisrKyBiL21tL21hZHZpc2UuY1xuQEAgLTQ1Miw3ICs0NTIsNyBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuIFx0aWYgKCFzdGFydF9wdGUpXG4gXHRcdHJldHVybiAwO1xuIFx0Zmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyhtbSk7XG4tXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuK1x0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIHN0YXJ0X3B0ZSk7XG4gXHRmb3IgKDsgYWRkciBcdTAwM2MgZW5kOyBwdGUgKz0gbnIsIGFkZHIgKz0gbnIgKiBQQUdFX1NJWkUpIHtcbiBcdFx0bnIgPSAxO1xuIFx0XHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG5AQCAtNTA3LDcgKzUwNyw3IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXG4gXHRcdFx0XHRpZiAoIXN0YXJ0X3B0ZSlcbiBcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHRmbHVzaF90bGJfYmF0Y2hlZF9wZW5kaW5nKG1tKTtcbi1cdFx0XHRcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4rXHRcdFx0XHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgc3RhcnRfcHRlKTtcbiBcdFx0XHRcdGlmICghZXJyKVxuIFx0XHRcdFx0XHRuciA9IDA7XG4gXHRcdFx0XHRjb250aW51ZTtcbkBAIC02NzQsNyArNjc0LDcgQEAgc3RhdGljIGludCBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGlmICghc3RhcnRfcHRlKVxuIFx0XHRyZXR1cm4gMDtcbiBcdGZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pO1xuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbitcdGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhtbSwgYWRkciwgZW5kLCBzdGFydF9wdGUpO1xuIFx0Zm9yICg7IGFkZHIgIT0gZW5kOyBwdGUgKz0gbnIsIGFkZHIgKz0gUEFHRV9TSVpFICogbnIpIHtcbiBcdFx0bnIgPSAxO1xuIFx0XHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG5AQCAtNzM0LDcgKzczNCw3IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHRpZiAoIXN0YXJ0X3B0ZSlcbiBcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHRmbHVzaF90bGJfYmF0Y2hlZF9wZW5kaW5nKG1tKTtcbi1cdFx0XHRcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4rXHRcdFx0XHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgcHRlKTtcbiBcdFx0XHRcdGlmICghZXJyKVxuIFx0XHRcdFx0XHRuciA9IDA7XG4gXHRcdFx0XHRjb250aW51ZTtcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA2YjgyODBjZmMxZGJlLi4wY2MwN2IwNDMzODRiIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtMTI3Miw3ICsxMjcyLDcgQEAgY29weV9wdGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsXG4gXHRzcGluX2xvY2tfbmVzdGVkKHNyY19wdGwsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbiBcdG9yaWdfc3JjX3B0ZSA9IHNyY19wdGU7XG4gXHRvcmlnX2RzdF9wdGUgPSBkc3RfcHRlO1xuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbitcdGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhzcmNfbW0sIGFkZHIsIGVuZCwgc3JjX3B0ZSk7XG4gXG4gXHRkbyB7XG4gXHRcdG5yID0gMTtcbkBAIC0xOTIyLDcgKzE5MjIsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB6YXBfcHRlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4gXHRcdHJldHVybiBhZGRyO1xuIFxuIFx0Zmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyhtbSk7XG4tXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuK1x0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIHN0YXJ0X3B0ZSk7XG4gXHRkbyB7XG4gXHRcdGJvb2wgYW55X3NraXBwZWQgPSBmYWxzZTtcbiBcbkBAIC0yOTE5LDcgKzI5MTksNyBAQCBzdGF0aWMgaW50IHJlbWFwX3B0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCxcbiBcdG1hcHBlZF9wdGUgPSBwdGUgPSBwdGVfYWxsb2NfbWFwX2xvY2sobW0sIHBtZCwgYWRkciwgXHUwMDI2cHRsKTtcbiBcdGlmICghcHRlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4rXHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMobW0sIGFkZHIsIGVuZCwgbWFwcGVkX3B0ZSk7XG4gXHRkbyB7XG4gXHRcdEJVR19PTighcHRlX25vbmUocHRlcF9nZXQocHRlKSkpO1xuIFx0XHRpZiAoIXBmbl9tb2RpZnlfYWxsb3dlZChwZm4sIHByb3QpKSB7XG5AQCAtMzMzMCw3ICszMzMwLDcgQEAgc3RhdGljIGludCBhcHBseV90b19wdGVfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuK1x0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBhZGRyLCBlbmQsIG1hcHBlZF9wdGUpO1xuIFxuIFx0aWYgKGZuKSB7XG4gXHRcdGRvIHtcbmRpZmYgLS1naXQgYS9tbS9tcHJvdGVjdC5jIGIvbW0vbXByb3RlY3QuY1xuaW5kZXggOWNiZjkzMmIwMjhjZi4uM2ZjMjY0MThlODM3ZCAxMDA2NDRcbi0tLSBhL21tL21wcm90ZWN0LmNcbisrKyBiL21tL21wcm90ZWN0LmNcbkBAIC0zMzcsNyArMzM3LDcgQEAgc3RhdGljIGxvbmcgY2hhbmdlX3B0ZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuIFx0XHRpc19wcml2YXRlX3NpbmdsZV90aHJlYWRlZCA9IHZtYV9pc19zaW5nbGVfdGhyZWFkZWRfcHJpdmF0ZSh2bWEpO1xuIFxuIFx0Zmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyh2bWEtXHUwMDNldm1fbW0pO1xuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbitcdGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIGVuZCwgcHRlKTtcbiBcdGRvIHtcbiBcdFx0bnJfcHRlcyA9IDE7XG4gXHRcdG9sZHB0ZSA9IHB0ZXBfZ2V0KHB0ZSk7XG5kaWZmIC0tZ2l0IGEvbW0vbXJlbWFwLmMgYi9tbS9tcmVtYXAuY1xuaW5kZXggZTljOGIxZDA1ODMyYi4uMGRmZTNkZTM5Y2NjNyAxMDA2NDRcbi0tLSBhL21tL21yZW1hcC5jXG4rKysgYi9tbS9tcmVtYXAuY1xuQEAgLTI2MCw3ICsyNjAsNyBAQCBzdGF0aWMgaW50IG1vdmVfcHRlcyhzdHJ1Y3QgcGFnZXRhYmxlX21vdmVfY29udHJvbCAqcG1jLFxuIFx0aWYgKG5ld19wdGwgIT0gb2xkX3B0bClcbiBcdFx0c3Bpbl9sb2NrX25lc3RlZChuZXdfcHRsLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4gXHRmbHVzaF90bGJfYmF0Y2hlZF9wZW5kaW5nKHZtYS1cdTAwM2V2bV9tbSk7XG4tXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuK1x0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKG1tLCBvbGRfYWRkciwgb2xkX2VuZCwgb2xkX3B0ZXApO1xuIFxuIFx0Zm9yICg7IG9sZF9hZGRyIFx1MDAzYyBvbGRfZW5kOyBvbGRfcHRlcCArPSBucl9wdGVzLCBvbGRfYWRkciArPSBucl9wdGVzICogUEFHRV9TSVpFLFxuIFx0XHRuZXdfcHRlcCArPSBucl9wdGVzLCBuZXdfYWRkciArPSBucl9wdGVzICogUEFHRV9TSVpFKSB7XG5kaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jXG5pbmRleCBmNGZhMjI3YThkN2YwLi4xYzZlZjhmZDA3OWUwIDEwMDY0NFxuLS0tIGEvbW0vdm1hbGxvYy5jXG4rKysgYi9tbS92bWFsbG9jLmNcbkBAIC0xMDksNyArMTA5LDcgQEAgc3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0aWYgKCFwdGUpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbitcdGxhenlfbW11X21vZGVfZW5hYmxlX3dpdGhfcHRlcyhcdTAwMjZpbml0X21tLCBhZGRyLCBlbmQsIHB0ZSk7XG4gXG4gXHRkbyB7XG4gXHRcdGlmICh1bmxpa2VseSghcHRlX25vbmUocHRlcF9nZXQocHRlKSkpKSB7XG5AQCAtMzkzLDcgKzM5Myw3IEBAIHN0YXRpYyB2b2lkIHZ1bm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IFBBR0VfU0laRTtcbiBcbiBcdHB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcik7XG4tXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuK1x0bGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKFx1MDAyNmluaXRfbW0sIGFkZHIsIGVuZCwgcHRlKTtcbiBcbiBcdGRvIHtcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuQEAgLTU2MCw3ICs1NjAsNyBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGlmICghcHRlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4rXHRsYXp5X21tdV9tb2RlX2VuYWJsZV93aXRoX3B0ZXMoXHUwMDI2aW5pdF9tbSwgYWRkciwgZW5kLCBwdGUpO1xuIFxuIFx0ZG8ge1xuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBhZ2VzWypucl07XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjo0MToxNS44MDc2NDQzNDZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY3OTIxMDQwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEp1c3RpZmljYXRpb246IEEgRGV0YWlsZWQgRXhhbWluYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHJ1bi4gS01TQU4ncyBhbGwgYWJvdXQgY2F0Y2hpbmcgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGhhbmRsZXMgdGhlIHVzdWFsIHN1c3BlY3RzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGFuZCBsb2NraW5nIGJ1Z3MuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIFwibGF6eSBNTVUgbW9kZVwiIGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIExldCdzIGRpZyBpbi5cblxuVGhlIHBhdGNoJ3MgZ290IGNoYW5nZXMgYWNyb3NzIHRoZSBib2FyZCwgZnJvbSBgbGF6eV9tbXUuaGAgdG8gbW9kaWZpY2F0aW9ucyBpbiB2YXJpb3VzIGtlcm5lbCBhcmVhcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBLQVNBTi4gSXQgbG9va3MgbGlrZSBpdCdzIGltcGxlbWVudGluZyBsYXp5IFBURSB1cGRhdGVzLiBJbnRlcmVzdGluZyDigJMgaXQncyBidWZmZXJpbmcgdGhvc2UgdXBkYXRlcy4gVGhlIGNvZGUgdXNlcyBgbGF6eV9tbXVfbW9kZV9lbmFibGVfd2l0aF9wdGVzKClgIHdoaWNoIHRha2VzIGEgYHB0ZV90ICpwdGVwYC4gQWgsIGFuZCB0aGVyZSdzIEtBU0FOIHBvaXNvbmluZy91bnBvaXNvbmluZyBvZiBQVEVzIChgS0FTQU5fTEFaWV9NTVVfUFRFYCkuIFdhaXQsIHRoaXMgaXMgKmV4cGxpY2l0bHkqIGEgS0FTQU4gZmVhdHVyZS4gSXQncyBhZGRpbmcgYSBuZXcgS0FTQU4gdGFnIGFuZCBhIG5ldyBidWcgdHlwZTogYFwibGF6eS1tbXUtcHRlLWFjY2Vzc1wiYC4gVGhpcyBpc24ndCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBhdCBhbGwsIGl0J3MgYWJvdXQgY2F0Y2hpbmcgKmludmFsaWQqIGFjY2Vzc2VzIHRvIFBURXMgZHVyaW5nIGxhenkgbW9kZSB1c2luZyBLQVNBTi5cblxuQWxyaWdodCwgbGV0J3MgcGxheSBkZXZpbCdzIGFkdm9jYXRlIGFuZCBjaGVjayBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCBtZSBzZWUuLi4gYHN0cnVjdCBpcHRlX3JhbmdlYCBpcyBhbGxvY2F0ZWQgaW4gYGxhenlfbW11X29ubGluZV9jcHVgIHVzaW5nIGBremFsbG9jX29iaigqcmFuZ2UsIGdmcClgLiBXYWl0LCB3aGF0IGlzIGBremFsbG9jX29iamA/IElzIHRoYXQgYSB0eXBvPyBJdCdzIG5vdCBhIHN0YW5kYXJkIGtlcm5lbCBmdW5jdGlvbi4gTGV0J3Mgc2VlIGlmIEkgY2FuIGZpbmQgaXQgd2l0aCBgZ3JlcGAuIE9oISBJdCdzIHByb2JhYmx5IGEgbWFjcm8gdGhhdCdzIGEgd3JhcHBlciBmb3IgYGt6YWxsb2Moc2l6ZW9mKCpyYW5nZSksIGdmcClgLiBBY3R1YWxseSwgaXQgZG9lc24ndCBtYXR0ZXIsIGl0J3MgYSB6ZXJvLWFsbG9jYXRpb24hXG5cbkxldCdzIGxvb2sgbW9yZSBjbG9zZWx5IGF0IHRoZSBjb2RlIGluIGBhcmNoL3MzOTAvbW0vbGF6eV9tbXUuY2A6XG5gYGBjXG5cdHJhbmdlID0ga3phbGxvY19vYmooKnJhbmdlLCBnZnApO1xuXHRpZiAoIXJhbmdlKVxuXHRcdHJldHVybiAtRU5PTUVNO1xuXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHJhbmdlLVx1MDAzZWNhY2hlKTsgaSsrKVxuXHRcdHJhbmdlLVx1MDAzZWNhY2hlW2ldID0gX19wdGUoUFRFX1BPSVNPTik7XG5gYGBcblllcywgZGVmaW5pdGVseSBhIHplcm8tYWxsb2NhdGlvbiwgYXMgZXhwZWN0ZWQuIFRoZSBQVEUgY2FjaGUgaXMgdGhlbiBpbml0aWFsaXplZCB3aXRoIHBvaXNvbiB2YWx1ZXMuXG5cbklzIGFueXRoaW5nIGhlcmUgcGFzc2VkIHRvIHVzZXIgc3BhY2U/IE5vcGUuIEl0J3MgcHVyZWx5IGludGVybmFsIE1NVSBwYWdlIHRhYmxlIG1hbmFnZW1lbnQuIFBURXMgYXJlbid0IGJlaW5nIHNlbnQgZGlyZWN0bHkgdG8gdXNlcnNwYWNlLiBJbiBmYWN0LCB0aGlzIHBhdGNoIGlzICphZGRpbmcqIEtBU0FOIGNoZWNrcyB0byBjYXRjaCAqZGlyZWN0KiBQVEUgYWNjZXNzZXMgaW4gbGF6eSBtb2RlLiBTaW5jZSBpdCdzIGJ1aWx0LWluLCBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCBoZXJlLiBLTVNBTidzIHB1cnBvc2UsIGNhdGNoaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW1zLCBpc24ndCB3aGF0IHRoaXMgcGF0Y2ggZG9lcy5cblxuTGV0J3MgZG91YmxlLWNoZWNrIGp1c3QgdG8gYmUgc3VyZS4uLiB0aGUgYHN0cnVjdCBpcHRlX3JhbmdlYCBoYXMgYSBgcHRlX3QgY2FjaGVbUFRSU19QRVJfUFRFXTtgLiBJdCdzIGluaXRpYWxpemVkIHRvIGBQVEVfUE9JU09OYCBpbiBgbGF6eV9tbXVfb25saW5lX2NwdWAuIGBlbnRlcl9pcHRlX3JhbmdlYCBzZXRzIHRoZSBiYXNlIGFkZHJlc3MsIGVuZCwgYW5kIFBURSwgYW5kIGBfX2xhenlfbW11X3NldF9wdGVgIHdyaXRlcyB0byBgcmFuZ2UtXHUwMDNlY2FjaGVbaWR4XWAuIE5vdGhpbmcgaXMgY29waWVkIHRvIHVzZXJzcGFjZSBhbmQgbm90aGluZyBpcyByZWFkIHVuaW5pdGlhbGl6ZWQuXG5cblRoZXJlZm9yZSwgbm8uIGBOZWVkc0tNU0FOID0gZmFsc2VgLlxuXG5UaGUgcGF0Y2gncyBhbGwgYWJvdXQgbGF6eSBQVEUgdXBkYXRlcyBvbiBzMzkwLCBleHBsaWNpdGx5IGFkZGluZyBLQVNBTiBwb2lzb25pbmcvdW5wb2lzb25pbmcgdG8gY2F0Y2ggZGlyZWN0IFBURSBhY2Nlc3NlcywgaW50cm9kdWNpbmcgYSBuZXcgS0FTQU4gYnVnIHR5cGUuIEFsbCBvZiB0aGUgY2hhbmdlcyBhcmUgaW50ZXJuYWwsIHBhZ2UgdGFibGUgcmVsYXRlZCwgYW5kIG5vIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UuIE5ld2x5IGFsbG9jYXRlZCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCAodmlhIHplcm8tYWxsb2NhdGlvbiBhbmQgZXhwbGljaXQgYFBURV9QT0lTT05gKS4gVGhlcmUncyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLCBubyBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBLQVNBTiBpcyB0aGUgcGVyZmVjdCB0b29sIGZvciBjaGVja2luZyB0aGlzLiBga3phbGxvY19vYmpgLCB3aGljaCBpcyB1c2VkLCBkb2VzIHplcm8gYWxsb2NhdGlvbiwgb3IgaXMgaW1wbGVtZW50ZWQgYXMgc3VjaC5cbmBgYFxuYGBgXG5JJ20gY2FsbGluZyBgc2V0LXJlc3VsdHNgIG5vdy5cbmBgYFxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQwMSwiT3V0cHV0VG9rZW5zIjoyMTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzc2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6NDE6NDIuNTk5NzUwNzUyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbGF6eSBNTVUgbW9kZSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIHRvIGJ1ZmZlciBwYWdlIHRhYmxlIGVudHJ5IChQVEUpIHVwZGF0ZXMuIEl0IGFsc28gZXhwbGljaXRseSBhZGRzIEtBU0FOIHBvaXNvbmluZy91bnBvaXNvbmluZyB0byBkZXRlY3QgaW52YWxpZCBkaXJlY3QgYWNjZXNzZXMgdG8gUFRFcyB3aGlsZSB0aGUgbGF6eSBNTVUgbW9kZSBpcyBhY3RpdmUsIGludHJvZHVjaW5nIGEgbmV3IEtBU0FOIGJ1ZyB0eXBlIChgbGF6eS1tbXUtcHRlLWFjY2Vzc2ApLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgdGFibGUgb3BlcmF0aW9ucy4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgYWxsIG5ld2x5IGFsbG9jYXRlZCBzdHJ1Y3R1cmVzIChlLmcuLCBgc3RydWN0IGlwdGVfcmFuZ2VgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGUuZy4sIHZpYSB6ZXJvLWFsbG9jYXRpb24gYW5kIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIG9mIHRoZSBgY2FjaGVgIGFycmF5IHRvIGBQVEVfUE9JU09OYCkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGlzIHBlcmZlY3RseSBzdWl0ZWQgYW5kIGV4cGxpY2l0bHkgZW5oYW5jZWQgYnkgdGhpcyBwYXRjaCB0byBjYXRjaCBhbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxhenkgTU1VIG1vZGUgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSB0byBidWZmZXIgcGFnZSB0YWJsZSBlbnRyeSAoUFRFKSB1cGRhdGVzLiBJdCBhbHNvIGV4cGxpY2l0bHkgYWRkcyBLQVNBTiBwb2lzb25pbmcvdW5wb2lzb25pbmcgdG8gZGV0ZWN0IGludmFsaWQgZGlyZWN0IGFjY2Vzc2VzIHRvIFBURXMgd2hpbGUgdGhlIGxhenkgTU1VIG1vZGUgaXMgYWN0aXZlLCBpbnRyb2R1Y2luZyBhIG5ldyBLQVNBTiBidWcgdHlwZSAoYGxhenktbW11LXB0ZS1hY2Nlc3NgKS4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IGNvbmZpbmVkIHRvIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHRhYmxlIG9wZXJhdGlvbnMuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIGFsbCBuZXdseSBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoZS5nLiwgYHN0cnVjdCBpcHRlX3JhbmdlYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlLmcuLCB2aWEgemVyby1hbGxvY2F0aW9uIGFuZCBleHBsaWNpdCBpbml0aWFsaXphdGlvbiBvZiB0aGUgYGNhY2hlYCBhcnJheSB0byBgUFRFX1BPSVNPTmApLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBpcyBwZXJmZWN0bHkgc3VpdGVkIGFuZCBleHBsaWNpdGx5IGVuaGFuY2VkIGJ5IHRoaXMgcGF0Y2ggdG8gY2F0Y2ggYW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgt4k8[1] Phase: Succeeded StartedAt: 2026-08-17 12:41:54 +0000 UTC FinishedAt: 2026-08-17 12:41:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgt4k8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-17 12:41:54 +0000 UTC FinishedAt: 2026-08-17 12:41:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgt4k8[2] Phase: Running StartedAt: 2026-08-17 12:41:54 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgt4k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["arch_enter_lazy_mmu_mode","arch_enter_lazy_mmu_mode_with_ptes","arch_leave_lazy_mmu_mode","arch_flush_lazy_mmu_mode","lazy_mmu_online_cpu","lazy_mmu_offline_cpu","__kasan_poison_pte","__kasan_unpoison_pte","___ptep_modify_prot_start","___ptep_modify_prot_commit"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"e90b7431-a06c-4cb3-9f54-4ce8f222fe4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-08-17 12:41:54 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["arch_enter_lazy_mmu_mode","arch_enter_lazy_mmu_mode_with_ptes","arch_leave_lazy_mmu_mode","arch_flush_lazy_mmu_mode","lazy_mmu_online_cpu","lazy_mmu_offline_cpu","__kasan_poison_pte","__kasan_unpoison_pte","___ptep_modify_prot_start","___ptep_modify_prot_commit"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"e90b7431-a06c-4cb3-9f54-4ce8f222fe4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowgt4k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["arch_enter_lazy_mmu_mode","arch_enter_lazy_mmu_mode_with_ptes","arch_leave_lazy_mmu_mode","arch_flush_lazy_mmu_mode","lazy_mmu_online_cpu","lazy_mmu_offline_cpu","__kasan_poison_pte","__kasan_unpoison_pte","___ptep_modify_prot_start","___ptep_modify_prot_commit"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"e90b7431-a06c-4cb3-9f54-4ce8f222fe4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-17 12:41:54 +0000 UTC FinishedAt: 2026-08-17 12:42:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgt4k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["arch_enter_lazy_mmu_mode","arch_enter_lazy_mmu_mode_with_ptes","arch_leave_lazy_mmu_mode","arch_flush_lazy_mmu_mode","lazy_mmu_online_cpu","lazy_mmu_offline_cpu","__kasan_poison_pte","__kasan_unpoison_pte","___ptep_modify_prot_start","___ptep_modify_prot_commit"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"e90b7431-a06c-4cb3-9f54-4ce8f222fe4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-17 12:41:54 +0000 UTC FinishedAt: 2026-08-17 12:41:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgt4k8/series-workflowgt4k8-convert-artifact-2742257487/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgt4k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["arch_enter_lazy_mmu_mode","arch_enter_lazy_mmu_mode_with_ptes","arch_leave_lazy_mmu_mode","arch_flush_lazy_mmu_mode","lazy_mmu_online_cpu","lazy_mmu_offline_cpu","__kasan_poison_pte","__kasan_unpoison_pte","___ptep_modify_prot_start","___ptep_modify_prot_commit"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"e90b7431-a06c-4cb3-9f54-4ce8f222fe4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-17 12:42:04 +0000 UTC FinishedAt: 2026-08-17 12:59:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgt4k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["arch_enter_lazy_mmu_mode","arch_enter_lazy_mmu_mode_with_ptes","arch_leave_lazy_mmu_mode","arch_flush_lazy_mmu_mode","lazy_mmu_online_cpu","lazy_mmu_offline_cpu","__kasan_poison_pte","__kasan_unpoison_pte","___ptep_modify_prot_start","___ptep_modify_prot_commit"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"e90b7431-a06c-4cb3-9f54-4ce8f222fe4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-17 12:42:04 +0000 UTC FinishedAt: 2026-08-17 12:59:16 +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:*13eba35e-79c1-4aee-aa31-652a3bc2c8a1,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-workflowgt4k8/series-workflowgt4k8-convert-artifact-2742257487/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": "74b15782-9b56-4e98-b73c-2a3daca7af47", "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-workflowgt4k8/series-workflowgt4k8-build-action-1693865621/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgt4k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["arch_enter_lazy_mmu_mode","arch_enter_lazy_mmu_mode_with_ptes","arch_leave_lazy_mmu_mode","arch_flush_lazy_mmu_mode","lazy_mmu_online_cpu","lazy_mmu_offline_cpu","__kasan_poison_pte","__kasan_unpoison_pte","___ptep_modify_prot_start","___ptep_modify_prot_commit"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"e90b7431-a06c-4cb3-9f54-4ce8f222fe4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-17 12:42:04 +0000 UTC FinishedAt: 2026-08-17 12:59:06 +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:*13eba35e-79c1-4aee-aa31-652a3bc2c8a1,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-workflowgt4k8/series-workflowgt4k8-convert-artifact-2742257487/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": "74b15782-9b56-4e98-b73c-2a3daca7af47", "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-workflowgt4k8/series-workflowgt4k8-build-action-1693865621/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgt4k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["arch_enter_lazy_mmu_mode","arch_enter_lazy_mmu_mode_with_ptes","arch_leave_lazy_mmu_mode","arch_flush_lazy_mmu_mode","lazy_mmu_online_cpu","lazy_mmu_offline_cpu","__kasan_poison_pte","__kasan_unpoison_pte","___ptep_modify_prot_start","___ptep_modify_prot_commit"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"e90b7431-a06c-4cb3-9f54-4ce8f222fe4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-17 12:59:16 +0000 UTC FinishedAt: 2026-08-17 12:59:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgt4k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["arch_enter_lazy_mmu_mode","arch_enter_lazy_mmu_mode_with_ptes","arch_leave_lazy_mmu_mode","arch_flush_lazy_mmu_mode","lazy_mmu_online_cpu","lazy_mmu_offline_cpu","__kasan_poison_pte","__kasan_unpoison_pte","___ptep_modify_prot_start","___ptep_modify_prot_commit"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"e90b7431-a06c-4cb3-9f54-4ce8f222fe4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-17 12:59:16 +0000 UTC FinishedAt: 2026-08-17 12:59:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgt4k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["arch_enter_lazy_mmu_mode","arch_enter_lazy_mmu_mode_with_ptes","arch_leave_lazy_mmu_mode","arch_flush_lazy_mmu_mode","lazy_mmu_online_cpu","lazy_mmu_offline_cpu","__kasan_poison_pte","__kasan_unpoison_pte","___ptep_modify_prot_start","___ptep_modify_prot_commit"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"e90b7431-a06c-4cb3-9f54-4ce8f222fe4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-17 12:59:16 +0000 UTC FinishedAt: 2026-08-17 12:59:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgt4k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["arch_enter_lazy_mmu_mode","arch_enter_lazy_mmu_mode_with_ptes","arch_leave_lazy_mmu_mode","arch_flush_lazy_mmu_mode","lazy_mmu_online_cpu","lazy_mmu_offline_cpu","__kasan_poison_pte","__kasan_unpoison_pte","___ptep_modify_prot_start","___ptep_modify_prot_commit"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"e90b7431-a06c-4cb3-9f54-4ce8f222fe4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-17 12:59:16 +0000 UTC FinishedAt: 2026-08-17 12:59:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"e90b7431-a06c-4cb3-9f54-4ce8f222fe4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgt4k8/series-workflowgt4k8-convert-artifact-2611850398/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgt4k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["arch_enter_lazy_mmu_mode","arch_enter_lazy_mmu_mode_with_ptes","arch_leave_lazy_mmu_mode","arch_flush_lazy_mmu_mode","lazy_mmu_online_cpu","lazy_mmu_offline_cpu","__kasan_poison_pte","__kasan_unpoison_pte","___ptep_modify_prot_start","___ptep_modify_prot_commit"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"e90b7431-a06c-4cb3-9f54-4ce8f222fe4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-17 12:59:26 +0000 UTC FinishedAt: 2026-08-17 13:01:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgt4k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["arch_enter_lazy_mmu_mode","arch_enter_lazy_mmu_mode_with_ptes","arch_leave_lazy_mmu_mode","arch_flush_lazy_mmu_mode","lazy_mmu_online_cpu","lazy_mmu_offline_cpu","__kasan_poison_pte","__kasan_unpoison_pte","___ptep_modify_prot_start","___ptep_modify_prot_commit"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"e90b7431-a06c-4cb3-9f54-4ce8f222fe4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-17 12:59:26 +0000 UTC FinishedAt: 2026-08-17 13:01:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*74b15782-9b56-4e98-b73c-2a3daca7af47,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-workflowgt4k8/series-workflowgt4k8-build-action-1693865621/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-workflowgt4k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["arch_enter_lazy_mmu_mode","arch_enter_lazy_mmu_mode_with_ptes","arch_leave_lazy_mmu_mode","arch_flush_lazy_mmu_mode","lazy_mmu_online_cpu","lazy_mmu_offline_cpu","__kasan_poison_pte","__kasan_unpoison_pte","___ptep_modify_prot_start","___ptep_modify_prot_commit"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"e90b7431-a06c-4cb3-9f54-4ce8f222fe4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-17 13:01:54 +0000 UTC FinishedAt: 2026-08-17 13:01:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgt4k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["arch_enter_lazy_mmu_mode","arch_enter_lazy_mmu_mode_with_ptes","arch_leave_lazy_mmu_mode","arch_flush_lazy_mmu_mode","lazy_mmu_online_cpu","lazy_mmu_offline_cpu","__kasan_poison_pte","__kasan_unpoison_pte","___ptep_modify_prot_start","___ptep_modify_prot_commit"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"e90b7431-a06c-4cb3-9f54-4ce8f222fe4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-17 13:01:54 +0000 UTC FinishedAt: 2026-08-17 13:01:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgt4k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["arch_enter_lazy_mmu_mode","arch_enter_lazy_mmu_mode_with_ptes","arch_leave_lazy_mmu_mode","arch_flush_lazy_mmu_mode","lazy_mmu_online_cpu","lazy_mmu_offline_cpu","__kasan_poison_pte","__kasan_unpoison_pte","___ptep_modify_prot_start","___ptep_modify_prot_commit"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"e90b7431-a06c-4cb3-9f54-4ce8f222fe4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-17 13:01:54 +0000 UTC FinishedAt: 2026-08-17 13:21:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgt4k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["arch_enter_lazy_mmu_mode","arch_enter_lazy_mmu_mode_with_ptes","arch_leave_lazy_mmu_mode","arch_flush_lazy_mmu_mode","lazy_mmu_online_cpu","lazy_mmu_offline_cpu","__kasan_poison_pte","__kasan_unpoison_pte","___ptep_modify_prot_start","___ptep_modify_prot_commit"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"e90b7431-a06c-4cb3-9f54-4ce8f222fe4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-17 13:01:54 +0000 UTC FinishedAt: 2026-08-17 13:21:05 +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:*13eba35e-79c1-4aee-aa31-652a3bc2c8a1,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-workflowgt4k8/series-workflowgt4k8-convert-artifact-2611850398/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": "868ff307-4c29-4665-b925-47c5efee6eb2", "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-workflowgt4k8/series-workflowgt4k8-build-action-2745653874/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgt4k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["arch_enter_lazy_mmu_mode","arch_enter_lazy_mmu_mode_with_ptes","arch_leave_lazy_mmu_mode","arch_flush_lazy_mmu_mode","lazy_mmu_online_cpu","lazy_mmu_offline_cpu","__kasan_poison_pte","__kasan_unpoison_pte","___ptep_modify_prot_start","___ptep_modify_prot_commit"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"e90b7431-a06c-4cb3-9f54-4ce8f222fe4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-17 13:01:54 +0000 UTC FinishedAt: 2026-08-17 13:20:55 +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:*13eba35e-79c1-4aee-aa31-652a3bc2c8a1,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-workflowgt4k8/series-workflowgt4k8-convert-artifact-2611850398/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": "868ff307-4c29-4665-b925-47c5efee6eb2", "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-workflowgt4k8/series-workflowgt4k8-build-action-2745653874/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgt4k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["arch_enter_lazy_mmu_mode","arch_enter_lazy_mmu_mode_with_ptes","arch_leave_lazy_mmu_mode","arch_flush_lazy_mmu_mode","lazy_mmu_online_cpu","lazy_mmu_offline_cpu","__kasan_poison_pte","__kasan_unpoison_pte","___ptep_modify_prot_start","___ptep_modify_prot_commit"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"e90b7431-a06c-4cb3-9f54-4ce8f222fe4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-17 13:21:05 +0000 UTC FinishedAt: 2026-08-17 13:21:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgt4k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["arch_enter_lazy_mmu_mode","arch_enter_lazy_mmu_mode_with_ptes","arch_leave_lazy_mmu_mode","arch_flush_lazy_mmu_mode","lazy_mmu_online_cpu","lazy_mmu_offline_cpu","__kasan_poison_pte","__kasan_unpoison_pte","___ptep_modify_prot_start","___ptep_modify_prot_commit"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"e90b7431-a06c-4cb3-9f54-4ce8f222fe4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-17 13:21:05 +0000 UTC FinishedAt: 2026-08-17 13:21:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgt4k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["arch_enter_lazy_mmu_mode","arch_enter_lazy_mmu_mode_with_ptes","arch_leave_lazy_mmu_mode","arch_flush_lazy_mmu_mode","lazy_mmu_online_cpu","lazy_mmu_offline_cpu","__kasan_poison_pte","__kasan_unpoison_pte","___ptep_modify_prot_start","___ptep_modify_prot_commit"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"e90b7431-a06c-4cb3-9f54-4ce8f222fe4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Running StartedAt: 2026-08-17 13:21:05 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgt4k8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["arch_enter_lazy_mmu_mode","arch_enter_lazy_mmu_mode_with_ptes","arch_leave_lazy_mmu_mode","arch_flush_lazy_mmu_mode","lazy_mmu_online_cpu","lazy_mmu_offline_cpu","__kasan_poison_pte","__kasan_unpoison_pte","___ptep_modify_prot_start","___ptep_modify_prot_commit"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["KASAN","KASAN_GENERIC","HOTPLUG_CPU"],"series_id":"e90b7431-a06c-4cb3-9f54-4ce8f222fe4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Running StartedAt: 2026-08-17 13:21:05 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*868ff307-4c29-4665-b925-47c5efee6eb2,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-workflowgt4k8/series-workflowgt4k8-build-action-2745653874/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil