Name: series-workflow2lgms Phase: Succeeded StartedAt: 2026-08-28 22:30:49 +0000 UTC FinishedAt: 2026-08-29 02:15:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lgms[0] Phase: Succeeded StartedAt: 2026-08-28 22:30:49 +0000 UTC FinishedAt: 2026-08-28 22:34:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lgms[0].run-triage Phase: Succeeded StartedAt: 2026-08-28 22:30:49 +0000 UTC FinishedAt: 2026-08-28 22:34:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "26260251022fbc2f248a3d747a9b2b961b18d2d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "USERFAULTFD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "26260251022fbc2f248a3d747a9b2b961b18d2d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "USERFAULTFD" ], "series_id": "d29aa814-4d08-47da-ba8d-41efb6ffcfcf" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "madvise_collapse", "collapse_pte_mapped_thp" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFkdmlzZV9jb2xsYXBzZSYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9wdGVfbWFwcGVkX3RocCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gZWFybHkgcmV0dXJuIGNoZWNrIChgdXNlcmZhdWx0ZmRfbWlub3Iodm1hKWApIGluIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKWAgdG8gcHJldmVudCBjb2xsYXBzaW5nIFBURS1tYXBwZWQgVEhQcyBmb3IgVk1BcyByZWdpc3RlcmVkIHdpdGggdXNlcmZhdWx0ZmQgbWlub3IgbW9kZS5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlIG9ubHkgY2hlY2tzIGV4aXN0aW5nIFZNQSBmbGFncyAoYHZtYS1cdTAwM2V2bV9mbGFnc2ApIGFuZCByZXR1cm5zIGFuIGVycm9yIGVudW0gdmFsdWUgKGBTQ0FOX1BURV9VRkZEYCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIG1vZGlmeSBzdHJ1Y3QgbGF5b3V0cy9wYWRkaW5nLCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy5cbi0gS0FTQU4vZ2VuZXJhbCBkZXRlY3RvciBhcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgLyBraHVnZXBhZ2VkIGxvZ2ljLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW4gVk1BIGxpZmVjeWNsZSAvIHBhZ2UgdGFibGUgbWFuYWdlbWVudCB3b3VsZCBmYWxsIHVuZGVyIHN0YW5kYXJkIG1lbW9yeSBtYW5hZ2VtZW50IHNlbWFudGljcywgcGFnZSBmYXVsdHMsIG9yIHBvaW50ZXIgdmFsaWRpdHksIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdHMuXG5cbkhlbmNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIFRIUCBwYWdlcyB3aXRoaW4gVk1BcyByZWdpc3RlcmVkIHdpdGggdXNlcmZhdWx0ZmQgbWlub3IgZmF1bHQgaGFuZGxpbmcgKHVzZXJmYXVsdGZkX21pbm9yKS4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbGxhcHNlIGxvZ2ljIHJlYWNoYWJsZSB2aWEgbWFkdmlzZShNQURWX0NPTExBUFNFKSBvciBraHVnZXBhZ2VkIGJhY2tncm91bmQgc2Nhbm5pbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1M2NiYjNhM2I5MzhmNDE2NDM0OGQzNTkzODU0ZWJjMjc2MmM4YWFkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjggMjI6MzI6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0va2h1Z2VwYWdlZC5jIGIvbW0va2h1Z2VwYWdlZC5jXG5pbmRleCBiMjM3ZjZlNzY2MmE1Li4yMjM1NjIyOWMxZTQyIDEwMDY0NFxuLS0tIGEvbW0va2h1Z2VwYWdlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9raHVnZXBhZ2VkLmNcbkBAIC0xODk5LDYgJiM0MzsxODk5LDEzIEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduXG4gXHRpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSkpXG4gXHRcdHJldHVybiBTQ0FOX1BURV9VRkZEO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogVXNlcmZhdWx0ZmQtbWlub3ItcmVnaXN0ZXJlZCBWTUFzIHNob3VsZCBub3QgYmUgY29sbGFwc2VkLCBhc1xuJiM0MztcdCAqIHVzZXJzcGFjZSBpcyBleHBlY3RpbmcgdG8gZXhwbGljaXRseSBpbnN0YWxsIFBURXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHVzZXJmYXVsdGZkX21pbm9yKHZtYSkpXG4mIzQzO1x0XHRyZXR1cm4gU0NBTl9QVEVfVUZGRDtcbiYjNDM7XG4gXHRmb2xpbyA9IGZpbGVtYXBfbG9ja19mb2xpbyh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcsXG4gXHRcdFx0ICAgICAgIGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgaGFkZHIpKTtcbiBcdGlmIChJU19FUlIoZm9saW8pKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjMyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFkdmlzZV9jb2xsYXBzZSYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9wdGVfbWFwcGVkX3RocCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKCkgdG8gcHJldmVudCBjb2xsYXBzaW5nIFBURS1tYXBwZWQgVEhQIHBhZ2VzIHdpdGhpbiBWTUFzIHJlZ2lzdGVyZWQgd2l0aCB1c2VyZmF1bHRmZCBtaW5vciBmYXVsdCBoYW5kbGluZyAodXNlcmZhdWx0ZmRfbWlub3IpLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29sbGFwc2UgbG9naWMgcmVhY2hhYmxlIHZpYSBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpIG9yIGtodWdlcGFnZWQgYmFja2dyb3VuZCBzY2FubmluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUzY2JiM2EzYjkzOGY0MTY0MzQ4ZDM1OTM4NTRlYmMyNzYyYzhhYWQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyOCAyMjozMjo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2todWdlcGFnZWQuYyBiL21tL2todWdlcGFnZWQuYwppbmRleCBiMjM3ZjZlNzY2MmE1Li4yMjM1NjIyOWMxZTQyIDEwMDY0NAotLS0gYS9tbS9raHVnZXBhZ2VkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0va2h1Z2VwYWdlZC5jCkBAIC0xODk5LDYgJiM0MzsxODk5LDEzIEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduCiAJaWYgKHVzZXJmYXVsdGZkX3Byb3RlY3RlZCh2bWEpKQogCQlyZXR1cm4gU0NBTl9QVEVfVUZGRDsKIAomIzQzOwkvKgomIzQzOwkgKiBVc2VyZmF1bHRmZC1taW5vci1yZWdpc3RlcmVkIFZNQXMgc2hvdWxkIG5vdCBiZSBjb2xsYXBzZWQsIGFzCiYjNDM7CSAqIHVzZXJzcGFjZSBpcyBleHBlY3RpbmcgdG8gZXhwbGljaXRseSBpbnN0YWxsIFBURXMuCiYjNDM7CSAqLwomIzQzOwlpZiAodXNlcmZhdWx0ZmRfbWlub3Iodm1hKSkKJiM0MzsJCXJldHVybiBTQ0FOX1BURV9VRkZEOwomIzQzOwogCWZvbGlvID0gZmlsZW1hcF9sb2NrX2ZvbGlvKHZtYS0mZ3Q7dm1fZmlsZS0mZ3Q7Zl9tYXBwaW5nLAogCQkJICAgICAgIGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgaGFkZHIpKTsKIAlpZiAoSVNfRVJSKGZvbGlvKSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLSFVHRVBBR0VEIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgY2hhbmdlIHdpdGhpbiBgbW0va2h1Z2VwYWdlZC5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgbW9kaWZpY2F0aW9uIGlzIGZvY3VzZWQgb24gdGhlIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGZ1bmN0aW9uLiBUaGUgY29kZSBzbmlwcGV0IGZsYWdzIGEgY2hlY2sgZm9yIGB1c2VyZmF1bHRmZF9taW5vcih2bWEpYCBhbmQsIGlmIHRydWUsIHJldHVybnMgYFNDQU5fUFRFX1VGRkRgLiBJbnRlcmVzdGluZy4gSXQgc2VlbXMgd2UmIzM5O3JlIHByZXZlbnRpbmcgVEhQIGNvbGxhcHNlIGluIGNlcnRhaW4gc2l0dWF0aW9ucy4gTXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gaG93IHVzZXJmYXVsdGZkIGludGVyYWN0cyB3aXRoIHRoZSB0cmFuc3BhcmVudCBodWdlIHBhZ2UgbWVjaGFuaXNtLiBVc2VyZmF1bHRmZHMsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgZ2l2ZSB1c2Vyc3BhY2UgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciBwYWdlIGZhdWx0cyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuCgpUbyBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaXMsIEkgbmVlZCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFRpbWUgdG8gcHVsbCB1cCBgbW0va2h1Z2VwYWdlZC5jYC4gTGV0JiMzOTtzIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgZnVuY3Rpb24gYW5kIGl0cyBzdXJyb3VuZGluZyBjYWxscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW1wbGljYXRpb25zIGhlcmUsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHRoZSBpbnRlcmFjdGlvbiBvZiB1c2VyZmF1bHRmZCwga2h1Z2VwYWdlZCwgYW5kIFBURSBtYW5pcHVsYXRpb24uIEkgc3VzcGVjdCB0aGF0IGNvbGxhcHNpbmcgdGhlIFRIUCBtaWdodCBpbnRlcmZlcmUgd2l0aCB1c2VyZmF1bHRmZCYjMzk7cyBleHBsaWNpdCBQVEUgaW5zdGFsbGF0aW9uIGV4cGVjdGF0aW9ucy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCB0cmFkZS1vZmZzIGFuZCBiZW5lZml0cyBvZiB0aGlzIGNoYW5nZT8gTGV0JiMzOTtzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4ODA6XHRcdC8qIEZhc3QgY2hlY2sgYmVmb3JlIGxvY2tpbmcgcGFnZSBpZiBhbHJlYWR5IFBNRC1tYXBwZWQgKi9cbjE4ODE6XHRcdHJlc3VsdCA9IGZpbmRfcG1kX29yX3RocF9vcl9ub25lKG1tLCBoYWRkciwgXHUwMDI2cG1kKTtcbjE4ODI6XHRcdGlmIChyZXN1bHQgPT0gU0NBTl9QTURfTUFQUEVEKVxuMTg4MzpcdFx0XHRyZXR1cm4gcmVzdWx0O1xuMTg4NDpcdFxuMTg4NTpcdFx0LypcbjE4ODY6XHRcdCAqIElmIHdlIGFyZSBoZXJlLCB3ZSYjMzk7dmUgc3VjY2VlZGVkIGluIHJlcGxhY2luZyBhbGwgdGhlIG5hdGl2ZSBwYWdlc1xuMTg4NzpcdFx0ICogaW4gdGhlIHBhZ2UgY2FjaGUgd2l0aCBhIHNpbmdsZSBodWdlcGFnZS4gSWYgYSBtbSB3ZXJlIHRvIGZhdWx0LWluXG4xODg4Olx0XHQgKiB0aGlzIG1lbW9yeSAobWFwcGVkIGJ5IGEgc3VpdGFibHkgYWxpZ25lZCBWTUEpLCB3ZSYjMzk7ZCBnZXQgdGhlIGh1Z2VwYWdlXG4xODg5Olx0XHQgKiBhbmQgbWFwIGl0IGJ5IGEgUE1ELCByZWdhcmRsZXNzIG9mIHN5c2ZzIFRIUCBzZXR0aW5ncy4gQXMgc3VjaCwgbGV0JiMzOTtzXG4xODkwOlx0XHQgKiBhbmFsb2dvdXNseSBlbGlkZSBzeXNmcyBUSFAgc2V0dGluZ3MgaGVyZSBhbmQgZm9yY2UgY29sbGFwc2UuXG4xODkxOlx0XHQgKi9cbjE4OTI6XHRcdGlmICghdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXIodm1hLCB2bWEtXHUwMDNldm1fZmxhZ3MsIFRWQV9GT1JDRURfQ09MTEFQU0UsIFBNRF9PUkRFUikpXG4xODkzOlx0XHRcdHJldHVybiBTQ0FOX1ZNQV9DSEVDSztcbjE4OTQ6XHRcbjE4OTU6XHRcdC8qXG4xODk2Olx0XHQgKiBLZWVwIHBtZCBwZ3RhYmxlIHdoaWxlIHRoZSB1ZmZkIGJpdCBpcyBpbiB1c2U7IHNlZSBjb21tZW50IGluXG4xODk3Olx0XHQgKiByZXRyYWN0X3BhZ2VfdGFibGVzKCkuXG4xODk4Olx0XHQgKi9cbjE4OTk6XHRcdGlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSlcbjE5MDA6XHRcdFx0cmV0dXJuIFNDQU5fUFRFX1VGRkQ7XG4xOTAxOlx0XG4xOTAyOlx0XHQvKlxuMTkwMzpcdFx0ICogVXNlcmZhdWx0ZmQtbWlub3ItcmVnaXN0ZXJlZCBWTUFzIHNob3VsZCBub3QgYmUgY29sbGFwc2VkLCBhc1xuMTkwNDpcdFx0ICogdXNlcnNwYWNlIGlzIGV4cGVjdGluZyB0byBleHBsaWNpdGx5IGluc3RhbGwgUFRFcy5cbjE5MDU6XHRcdCAqL1xuMTkwNjpcdFx0aWYgKHVzZXJmYXVsdGZkX21pbm9yKHZtYSkpXG4xOTA3Olx0XHRcdHJldHVybiBTQ0FOX1BURV9VRkZEO1xuMTkwODpcdFxuMTkwOTpcdFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8odm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nLFxuMTkxMDpcdFx0XHRcdCAgICAgICBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGhhZGRyKSk7XG4xOTExOlx0XHRpZiAoSVNfRVJSKGZvbGlvKSlcbjE5MTI6XHRcdFx0cmV0dXJuIFNDQU5fUEFHRV9OVUxMO1xuMTkxMzpcdFxuMTkxNDpcdFx0aWYgKCFpc19wbWRfb3JkZXIoZm9saW9fb3JkZXIoZm9saW8pKSkge1xuMTkxNTpcdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfQ09NUE9VTkQ7XG4xOTE2Olx0XHRcdGdvdG8gZHJvcF9mb2xpbztcbjE5MTc6XHRcdH1cbjE5MTg6XHRcbjE5MTk6XHRcdHJlc3VsdCA9IGZpbmRfcG1kX29yX3RocF9vcl9ub25lKG1tLCBoYWRkciwgXHUwMDI2cG1kKTtcbjE5MjA6XHRcdHN3aXRjaCAocmVzdWx0KSB7XG4xOTIxOlx0XHRjYXNlIFNDQU5fU1VDQ0VFRDpcbjE5MjI6XHRcdFx0YnJlYWs7XG4xOTIzOlx0XHRjYXNlIFNDQU5fTk9fUFRFX1RBQkxFOlxuMTkyNDpcdFx0XHQvKlxuMTkyNTpcdFx0XHQgKiBBbGwgcHRlIGVudHJpZXMgaGF2ZSBiZWVuIHJlbW92ZWQgYW5kIHBtZCBjbGVhcmVkLlxuMTkyNjpcdFx0XHQgKiBTa2lwIGFsbCB0aGUgcHRlIGNoZWNrcyBhbmQganVzdCB1cGRhdGUgdGhlIHBtZCBtYXBwaW5nLlxuMTkyNzpcdFx0XHQgKi9cbjE5Mjg6XHRcdFx0Z290byBtYXliZV9pbnN0YWxsX3BtZDtcbjE5Mjk6XHRcdGRlZmF1bHQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ0NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkh1bnRpbmcgRG93biBUaG9zZSBUSFAgQ29sbGFwc2luZyBDYWxsZXJzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLCBhbmQgbWF5YmUgZXZlbiB0aGUga2h1Z2VwYWdlZCBjYWxscyBhcmUgY29taW5nIGZyb20uIFRoZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIFRIUCBjb2xsYXBzaW5nIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCBpbiB0aGUgY29kZS4gSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGZvciB0aGUgZGlyZWN0IGNhbGxlcnMuIExldCYjMzk7cyBnZXQgcmlnaHQgdG8gaXQgLSBJJiMzOTtsbCBydW4gYSBzZWFyY2ggZm9yIHRoZSBjYWxsIHNpdGVzIG9mIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGFuZCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIHRvIGJ1aWxkIGEgbGlzdCBvZiBhbGwgbG9jYXRpb25zIHVzaW5nIHRob3NlIGZ1bmN0aW9ucy4gS25vd2luZyB0aGVpciBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSBhbiBpZGVhIGFib3V0IGhvdyBhbmQgd2hlcmUgdGhleSBhcmUgYmVpbmcgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jPTE4MjA9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgc2V0X2h1Z2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTE4NTUtXG5tbS9raHVnZXBhZ2VkLmM6MTg1NjpzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2todWdlcGFnZWQuYy0xODU3LVx0XHRib29sIGluc3RhbGxfcG1kKVxuLS1cbm1tL2todWdlcGFnZWQuYz0yMTAxPXZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjEwMy17XG5tbS9raHVnZXBhZ2VkLmM6MjEwNDpcdHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChtbSwgYWRkciwgaW5zdGFsbF9wbWQpO1xubW0va2h1Z2VwYWdlZC5jLTIxMDUtfVxuLS1cbm1tL2todWdlcGFnZWQuYz0yMjU0PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjYzMy1cdCAqIFJlbW92ZSBwdGUgcGFnZSB0YWJsZXMsIHNvIHdlIGNhbiByZS1mYXVsdCB0aGUgcGFnZSBhcyBodWdlLlxubW0va2h1Z2VwYWdlZC5jOjI2MzQ6XHQgKiBJZiBNQURWX0NPTExBUFNFLCBhZGp1c3QgcmVzdWx0IHRvIGNhbGwgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKCkuXG5tbS9raHVnZXBhZ2VkLmMtMjYzNS1cdCAqL1xuLS1cbm1tL2todWdlcGFnZWQuYz0yNzk3PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NpbmdsZV9wbWQodW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yODQxLVx0XHRlbHNlXG5tbS9raHVnZXBhZ2VkLmM6Mjg0MjpcdFx0XHRyZXN1bHQgPSB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIGFkZHIsXG5tbS9raHVnZXBhZ2VkLmMtMjg0My1cdFx0XHRcdFx0XHRcdCAgICAgIWNjLVx1MDAzZWlzX2todWdlcGFnZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxOTQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKlRyYWNpbmcgdGhlIENvbGxhcHNlIG9mIEh1Z2UgUGFnZXMqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZG9pbmcgaXMgbWVudGFsbHkgdHJhY2luZyB0aGUgY2FsbHMgdG8gYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB0aGUgZnVuY3Rpb24gd2hlcmUgdGhlIGFjdHVhbCBoZWF2eSBsaWZ0aW5nIGhhcHBlbnMgd2hlbiB3ZSYjMzk7cmUgYnJlYWtpbmcgZG93biBhIGh1Z2UgcGFnZSB0aGF0JiMzOTtzIGJlZW4gbWFwcGVkIHZpYSBQVEVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzLCB0aGUgZGlmZmVyZW50IGNvbnRleHRzIGluIHdoaWNoIHRoaXMgZnVuY3Rpb24gZ2V0cyBpbnZva2VkLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHVzZXItdHJpZ2dlcmVkIGRlZnJhZywgYSBiYWNrZ3JvdW5kIGtlcm5lbCBvcGVyYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBLbm93aW5nIHRoZSBjYWxsZXIgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgKndoeSogdGhlIGNvbGxhcHNlIGlzIGhhcHBlbmluZywgYW5kIHRoZXJlZm9yZSBmb3IgZGlhZ25vc2luZyBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgcmVsYXRlZCB0byBpdC4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZGlmZmVyZW50IGNvZGUgcGF0aHMgYW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHdoYXQgY29udGV4dCBpcyBwYXNzZWQgaW4sIHdoYXQgbG9ja3MgYXJlIGhlbGQsIGlmIGFueSwgYW5kIHdoYXQgYXNzdW1wdGlvbnMgdGhlIGNhbGxpbmcgY29kZSBpcyBtYWtpbmcgYWJvdXQgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCYjMzk7cyBiZWhhdmlvci4gSSBuZWVkIHRvIG1hcCB0aGUgY2F1c2FsIGNoYWluIHRvIGJlIGFibGUgdG8gcmVhc29uIGFib3V0IHBvc3NpYmxlIGZhaWx1cmUgbW9kZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29sbGFwc2VfcHRlX21hcHBlZF90aHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jPTE4MjA9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgc2V0X2h1Z2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTE4NTUtXG5tbS9raHVnZXBhZ2VkLmM6MTg1NjpzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2todWdlcGFnZWQuYy0xODU3LVx0XHRib29sIGluc3RhbGxfcG1kKVxuLS1cbm1tL2todWdlcGFnZWQuYy0yMDg5LS8qKlxubW0va2h1Z2VwYWdlZC5jOjIwOTA6ICogY29sbGFwc2VfcHRlX21hcHBlZF90aHAgLSBUcnkgdG8gY29sbGFwc2UgYSBwdGUtbWFwcGVkIFRIUCBmb3IgbW0gYXRcbm1tL2todWdlcGFnZWQuYy0yMDkxLSAqIGFkZHJlc3MgaGFkZHIuXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIxMDAtICovXG5tbS9raHVnZXBhZ2VkLmM6MjEwMTp2b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9raHVnZXBhZ2VkLmMtMjEwMi1cdFx0Ym9vbCBpbnN0YWxsX3BtZClcbm1tL2todWdlcGFnZWQuYy0yMTAzLXtcbm1tL2todWdlcGFnZWQuYzoyMTA0Olx0dHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLCBpbnN0YWxsX3BtZCk7XG5tbS9raHVnZXBhZ2VkLmMtMjEwNS19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTIyNTQ9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yNjMzLVx0ICogUmVtb3ZlIHB0ZSBwYWdlIHRhYmxlcywgc28gd2UgY2FuIHJlLWZhdWx0IHRoZSBwYWdlIGFzIGh1Z2UuXG5tbS9raHVnZXBhZ2VkLmM6MjYzNDpcdCAqIElmIE1BRFZfQ09MTEFQU0UsIGFkanVzdCByZXN1bHQgdG8gY2FsbCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKS5cbm1tL2todWdlcGFnZWQuYy0yNjM1LVx0ICovXG4tLVxubW0va2h1Z2VwYWdlZC5jPTI3OTc9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI4NDEtXHRcdGVsc2Vcbm1tL2todWdlcGFnZWQuYzoyODQyOlx0XHRcdHJlc3VsdCA9IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChtbSwgYWRkcixcbm1tL2todWdlcGFnZWQuYy0yODQzLVx0XHRcdFx0XHRcdFx0ICAgICAhY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA3MgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLiBUaW1lIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gYW5kIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gYXQgdGhlIGNvcmUuIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBwaW5wb2ludGluZyB0aGUgY2FsbGVycyB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkLCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMsIGFuZCB3aGF0IHRoYXQgdGVsbHMgbWUgYWJvdXQgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kgaGVyZS4gS25vd2luZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGltbWVkaWF0ZWx5IGdpdmUgbWUgY29udGV4dCwgYW5kIGhlbHAgbWUgcmVhc29uIGFib3V0IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgcmFjZSBjb25kaXRpb25zLCBvciBhcmVhcyByaXBlIGZvciBvcHRpbWl6YXRpb24uIEkmIzM5O20gdGhpbmtpbmcgSSBjYW4gc3RhcnQgYnkuLi4gd2VsbCwgSSBrbm93IHRoZXJlIGFyZSBwbGVudHkgb2YgYXBwcm9hY2hlcyBJIGNvdWxkIHVzZSwgc28gbGV0IG1lIGdldCBnb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29sbGFwc2VfcHRlX21hcHBlZF90aHAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg9MTk9ZXh0ZXJuIGJvb2wgY3VycmVudF9pc19raHVnZXBhZ2VkKHZvaWQpO1xuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg6MjA6dm9pZCBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtMjEtXHRcdGJvb2wgaW5zdGFsbF9wbWQpO1xuLS1cbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oPTQxPXN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC00NC19XG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaDo0NTpzdGF0aWMgaW5saW5lIHZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC00Ni1cdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGluc3RhbGxfcG1kKVxuLS1cbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jPTQ5OT1pbnQgdXByb2JlX3dyaXRlKHN0cnVjdCBhcmNoX3Vwcm9iZSAqYXVwcm9iZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxua2VybmVsL2V2ZW50cy91cHJvYmVzLmMtNTk5LVx0aWYgKHJldCBcdTAwM2UgMClcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jOjYwMDpcdFx0Y29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIHZhZGRyLCBmYWxzZSk7XG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYy02MDEtXG4tLVxubW0va2h1Z2VwYWdlZC5jPTE4MjA9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgc2V0X2h1Z2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTE4NTUtXG5tbS9raHVnZXBhZ2VkLmM6MTg1NjpzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2todWdlcGFnZWQuYy0xODU3LVx0XHRib29sIGluc3RhbGxfcG1kKVxuLS1cbm1tL2todWdlcGFnZWQuYy0yMDg5LS8qKlxubW0va2h1Z2VwYWdlZC5jOjIwOTA6ICogY29sbGFwc2VfcHRlX21hcHBlZF90aHAgLSBUcnkgdG8gY29sbGFwc2UgYSBwdGUtbWFwcGVkIFRIUCBmb3IgbW0gYXRcbm1tL2todWdlcGFnZWQuYy0yMDkxLSAqIGFkZHJlc3MgaGFkZHIuXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIxMDAtICovXG5tbS9raHVnZXBhZ2VkLmM6MjEwMTp2b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9raHVnZXBhZ2VkLmMtMjEwMi1cdFx0Ym9vbCBpbnN0YWxsX3BtZClcbm1tL2todWdlcGFnZWQuYy0yMTAzLXtcbm1tL2todWdlcGFnZWQuYzoyMTA0Olx0dHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLCBpbnN0YWxsX3BtZCk7XG5tbS9raHVnZXBhZ2VkLmMtMjEwNS19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTIyNTQ9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yNjMzLVx0ICogUmVtb3ZlIHB0ZSBwYWdlIHRhYmxlcywgc28gd2UgY2FuIHJlLWZhdWx0IHRoZSBwYWdlIGFzIGh1Z2UuXG5tbS9raHVnZXBhZ2VkLmM6MjYzNDpcdCAqIElmIE1BRFZfQ09MTEFQU0UsIGFkanVzdCByZXN1bHQgdG8gY2FsbCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKS5cbm1tL2todWdlcGFnZWQuYy0yNjM1LVx0ICovXG4tLVxubW0va2h1Z2VwYWdlZC5jPTI3OTc9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI4NDEtXHRcdGVsc2Vcbm1tL2todWdlcGFnZWQuYzoyODQyOlx0XHRcdHJlc3VsdCA9IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChtbSwgYWRkcixcbm1tL2todWdlcGFnZWQuYy0yODQzLVx0XHRcdFx0XHRcdFx0ICAgICAhY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIENhbGxzIGluIGBtbS9raHVnZXBhZ2VkLmNgKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGtodWdlcGFnZWQgY29kZSBhZ2Fpbi4gVGltZSB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGNvbnRleHQgZm9yIGBjb2xsYXBzZV9zaW5nbGVfcG1kYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoZW4qIGFuZCAqd2h5KiB0aGlzIGZ1bmN0aW9uIGdldHMgaW52b2tlZC4gVGhpcyB0ZWxscyBtZSBhIGxvdCBhYm91dCBob3cgdGhlIGtlcm5lbCBpcyBoYW5kbGluZyBwYWdlIG1lcmdlcyBhbmQgc3BsaXRzIHVuZGVyIGh1Z2VwYWdlcy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgcHJlZmVycmVkIGRlYnVnZ2luZyB0b29scywgbGlrZWx5IGEgY29tYmluYXRpb24gb2YgYHRyYWNlcG9pbnRzYCwgYGZ0cmFjZWAsIGFuZCBwb3RlbnRpYWxseSBhIGJpdCBvZiBzdGF0aWMgYW5hbHlzaXMgd2l0aCBzb21ldGhpbmcgbGlrZSBgY3Njb3BlYCBvciBgY2xhbmdkYCB0byBuYXZpZ2F0ZSB0aGUgY29kZSBlZmZpY2llbnRseS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgaW1tZWRpYXRlIGNhbGxlcnMgYW5kIGZyb20gdGhlcmUgSSB3aWxsIHRoZW4gZGV0ZXJtaW5lIHRoZSBjb250ZXh0IHdoaWNoIGNhbGxzIHRob3NlIGNhbGxlcnMuIFVsdGltYXRlbHksIHdoYXQgaXMgdGhlIHNlcXVlbmNlIG9mIGV2ZW50cyB0aGF0IHRyaWdnZXJzIGEgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIGNhbGw/IElzIGl0IHJlbGF0ZWQgdG8gZnJhZ21lbnRhdGlvbiwgbWVtb3J5IHByZXNzdXJlLCBOVU1BIGludGVyYWN0aW9ucywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgc29saWQgdW5kZXJzdGFuZGluZyBoZXJlIGlzIGNyaXRpY2FsIGZvciBkaWFnbm9zaW5nIHBlcmZvcm1hbmNlIGlzc3VlcyByZWxhdGVkIHRvIHRyYW5zcGFyZW50IGh1Z2VwYWdlcywgYW5kIG9wdGltaXppbmcgbXkgb3duIHNwZWNpZmljIHdvcmtsb2Fkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3OTU6XHQgKiB0aGUgcmVzdWx0cy5cbjI3OTY6XHQgKi9cbjI3OTc6XHRzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zaW5nbGVfcG1kKHVuc2lnbmVkIGxvbmcgYWRkcixcbjI3OTg6XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGJvb2wgKmxvY2tfZHJvcHBlZCxcbjI3OTk6XHRcdFx0c3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxuMjgwMDpcdHtcbjI4MDE6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVx1MDAzZXZtX21tO1xuMjgwMjpcdFx0Ym9vbCB0cmlnZ2VyZWRfd2IgPSBmYWxzZTtcbjI4MDM6XHRcdGVudW0gc2Nhbl9yZXN1bHQgcmVzdWx0O1xuMjgwNDpcdFx0c3RydWN0IGZpbGUgKmZpbGU7XG4yODA1Olx0XHRwZ29mZl90IHBnb2ZmO1xuMjgwNjpcdFxuMjgwNzpcdFx0bW1hcF9hc3NlcnRfbG9ja2VkKG1tKTtcbjI4MDg6XHRcbjI4MDk6XHRcdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkpIHtcbjI4MTA6XHRcdFx0cmVzdWx0ID0gY29sbGFwc2Vfc2Nhbl9wbWQobW0sIHZtYSwgYWRkciwgbG9ja19kcm9wcGVkLCBjYyk7XG4yODExOlx0XHRcdGdvdG8gZW5kO1xuMjgxMjpcdFx0fVxuMjgxMzpcdFxuMjgxNDpcdFx0ZmlsZSA9IGdldF9maWxlKHZtYS1cdTAwM2V2bV9maWxlKTtcbjI4MTU6XHRcdHBnb2ZmID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyKTtcbjI4MTY6XHRcbjI4MTc6XHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuMjgxODpcdFx0KmxvY2tfZHJvcHBlZCA9IHRydWU7XG4yODE5Olx0cmV0cnk6XG4yODIwOlx0XHRyZXN1bHQgPSBjb2xsYXBzZV9zY2FuX2ZpbGUobW0sIGFkZHIsIGZpbGUsIHBnb2ZmLCBjYyk7XG4yODIxOlx0XG4yODIyOlx0XHQvKlxuMjgyMzpcdFx0ICogRm9yIE1BRFZfQ09MTEFQU0UsIHdoZW4gZW5jb3VudGVyaW5nIGRpcnR5IHBhZ2VzLCB0cnkgdG8gd3JpdGViYWNrLFxuMjgyNDpcdFx0ICogdGhlbiByZXRyeSB0aGUgY29sbGFwc2Ugb25lIHRpbWUuXG4yODI1Olx0XHQgKi9cbjI4MjY6XHRcdGlmICghY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCBcdTAwMjZcdTAwMjYgcmVzdWx0ID09IFNDQU5fUEFHRV9ESVJUWV9PUl9XUklURUJBQ0sgXHUwMDI2XHUwMDI2XG4yODI3Olx0XHQgICAgIXRyaWdnZXJlZF93YiBcdTAwMjZcdTAwMjYgbWFwcGluZ19jYW5fd3JpdGViYWNrKGZpbGUtXHUwMDNlZl9tYXBwaW5nKSkge1xuMjgyODpcdFx0XHRjb25zdCBsb2ZmX3QgbHN0YXJ0ID0gKGxvZmZfdClwZ29mZiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbjI4Mjk6XHRcdFx0Y29uc3QgbG9mZl90IGxlbmQgPSBsc3RhcnQgJiM0MzsgSFBBR0VfUE1EX1NJWkUgLSAxO1xuMjgzMDpcdFxuMjgzMTpcdFx0XHRmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUtXHUwMDNlZl9tYXBwaW5nLCBsc3RhcnQsIGxlbmQpO1xuMjgzMjpcdFx0XHR0cmlnZ2VyZWRfd2IgPSB0cnVlO1xuMjgzMzpcdFx0XHRnb3RvIHJldHJ5O1xuMjgzNDpcdFx0fVxuMjgzNTpcdFx0ZnB1dChmaWxlKTtcbjI4MzY6XHRcbjI4Mzc6XHRcdGlmIChyZXN1bHQgPT0gU0NBTl9QVEVfTUFQUEVEX0hVR0VQQUdFKSB7XG4yODM4Olx0XHRcdG1tYXBfcmVhZF9sb2NrKG1tKTtcbjI4Mzk6XHRcdFx0aWYgKGNvbGxhcHNlX3Rlc3RfZXhpdF9vcl9kaXNhYmxlKG1tKSlcbjI4NDA6XHRcdFx0XHRyZXN1bHQgPSBTQ0FOX0FOWV9QUk9DRVNTO1xuMjg0MTpcdFx0XHRlbHNlXG4yODQyOlx0XHRcdFx0cmVzdWx0ID0gdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLFxuMjg0MzpcdFx0XHRcdFx0XHRcdFx0ICAgICAhY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCk7XG4yODQ0Olx0XHRcdGlmIChyZXN1bHQgPT0gU0NBTl9QTURfTUFQUEVEKVxuMjg0NTpcdFx0XHRcdHJlc3VsdCA9IFNDQU5fU1VDQ0VFRDtcbjI4NDY6XHRcdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4yODQ3Olx0XHR9XG4yODQ4Olx0ZW5kOlxuMjg0OTpcdFx0aWYgKGNjLVx1MDAzZWlzX2todWdlcGFnZWQgXHUwMDI2XHUwMDI2IHJlc3VsdCA9PSBTQ0FOX1NVQ0NFRUQpXG4yODUwOlx0XHRcdCYjNDM7JiM0MztraHVnZXBhZ2VkX3BhZ2VzX2NvbGxhcHNlZDtcbjI4NTE6XHRcdHJldHVybiByZXN1bHQ7XG4yODUyOlx0fVxuMjg1MzpcdFxuMjg1NDpcdHN0YXRpYyB2b2lkIGNvbGxhcHNlX3NjYW5fbW1fc2xvdCh1bnNpZ25lZCBpbnQgcHJvZ3Jlc3NfbWF4LFxuMjg1NTpcdFx0XHRlbnVtIHNjYW5fcmVzdWx0ICpyZXN1bHQsIHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYylcbjI4NTY6XHRcdF9fcmVsZWFzZXMoXHUwMDI2a2h1Z2VwYWdlZF9tbV9sb2NrKVxuMjg1NzpcdFx0X19hY3F1aXJlcyhcdTAwMjZraHVnZXBhZ2VkX21tX2xvY2spXG4yODU4Olx0e1xuMjg1OTpcdFx0c3RydWN0IHZtYV9pdGVyYXRvciB2bWk7XG4yODYwOlx0XHRzdHJ1Y3QgbW1fc2xvdCAqc2xvdDtcbjI4NjE6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuMjg2MjpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4yODYzOlx0XHR1bnNpZ25lZCBpbnQgcHJvZ3Jlc3NfcHJldiA9IGNjLVx1MDAzZXByb2dyZXNzO1xuMjg2NDpcdFxuMjg2NTpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZraHVnZXBhZ2VkX21tX2xvY2spO1xuMjg2NjpcdFx0KnJlc3VsdCA9IFNDQU5fRkFJTDtcbjI4Njc6XHRcbjI4Njg6XHRcdGlmIChraHVnZXBhZ2VkX3NjYW4ubW1fc2xvdCkge1xuMjg2OTpcdFx0XHRzbG90ID0ga2h1Z2VwYWdlZF9zY2FuLm1tX3Nsb3Q7XG4yODcwOlx0XHR9IGVsc2Uge1xuMjg3MTpcdFx0XHRzbG90ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZraHVnZXBhZ2VkX3NjYW4ubW1faGVhZCxcbjI4NzI6XHRcdFx0XHRcdCAgICAgc3RydWN0IG1tX3Nsb3QsIG1tX25vZGUpO1xuMjg3MzpcdFx0XHRraHVnZXBhZ2VkX3NjYW4uYWRkcmVzcyA9IDA7XG4yODc0Olx0XHRcdGtodWdlcGFnZWRfc2Nhbi5tbV9zbG90ID0gc2xvdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc3OQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgTUFEVl9DT0xMQVBTRWAqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJJiMzOTttIHdvbmRlcmluZyBhYm91dCB0aGUgYmVoYXZpb3Igb2YgYE1BRFZfQ09MTEFQU0VgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgc2VhcmNoIGZvciBgTUFEVl9DT0xMQVBTRWAuIEkmIzM5O2xsIG5lZWQgdG8gcmV2aWV3IHRoZSBzb3VyY2UgY29kZSwgbWF5YmUgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIG9yIG1hbiBwYWdlcyB0byB1bmRlcnN0YW5kIGl0cyBwcmVjaXNlIGZ1bmN0aW9uIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvbiB3aGF0IHRoaXMgc3lzdGVtIGNhbGwgKmFjdHVhbGx5KiBkb2VzIHVuZGVyIHRoZSBob29kLiBJIGV4cGVjdCB0byBkZWx2ZSBpbnRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSB0YWJsZSBzdHJ1Y3R1cmVzIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBtZWNoYW5pc21zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNQURWX0NPTExBUFNFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdD0xMjE9Zm9yIHdoaWNoIHZhcnkgYnkgc3lzdGVtLlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0xMjQtICAgICAgICAgIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgZ2xvYmFsbHkuIFRoaXMgaXMgYmVjYXVzZSBgYG1hZHZpc2UoLi4uLFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0OjEyNTogICAgICAgICAgTUFEVl9DT0xMQVBTRSlgYCBpZ25vcmVzIHRoZXNlIHNldHRpbmdzIGFuZCBjb2xsYXBzZXMgcmFuZ2VzIHRvXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMTI2LSAgICAgICAgICBQTUQtc2l6ZWQgaHVnZSBwYWdlcyB1bmNvbmRpdGlvbmFsbHkuXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0PTE5NT1uZXZlclxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0LTE5Ni1cdHNob3VsZCBiZSBzZWxmLWV4cGxhbmF0b3J5LiBOb3RlIHRoYXQgYGBtYWR2aXNlKC4uLixcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdDoxOTc6XHRNQURWX0NPTExBUFNFKWBgIGNhbiBzdGlsbCBjYXVzZSB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIHRvIGJlXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMTk4LVx0b2J0YWluZWQgZXZlbiBpZiB0aGlzIG1vZGUgaXMgc3BlY2lmaWVkIGV2ZXJ5d2hlcmUuXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0PTIzNT1zdXBwb3J0IHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzOjpcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMjM4LVx0XHRUaGlzIHdpbGwgZGlzYWJsZSBUSFBzIGNvbXBsZXRlbHkgZm9yIHRoZSBwcm9jZXNzLCBpcnJlc3BlY3RpdmVcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdDoyMzk6XHRcdG9mIGdsb2JhbCBUSFAgY29udHJvbHMgb3IgbWFkdmlzZSguLi4sIE1BRFZfQ09MTEFQU0UpIGJlaW5nIHVzZWQuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMjQwLVxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0yNDQtXHRcdC0gR2xvYmFsIFRIUCBjb250cm9scyBhcmUgc2V0IHRvIFwmIzM0O2Fsd2F5c1wmIzM0OyBvciBcJiMzNDttYWR2aXNlXCYjMzQ7IGFuZFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0OjI0NTpcdFx0ICBtYWR2aXNlKC4uLiwgTUFEVl9IVUdFUEFHRSkgb3IgbWFkdmlzZSguLi4sIE1BRFZfQ09MTEFQU0UpIGlzIHVzZWQuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q6MjQ2Olx0XHQtIEdsb2JhbCBUSFAgY29udHJvbHMgYXJlIHNldCB0byBcJiMzNDtuZXZlclwmIzM0OyBhbmQgbWFkdmlzZSguLi4sIE1BRFZfQ09MTEFQU0UpXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMjQ3LVx0XHQgIGlzIHVzZWQuIFRoaXMgaXMgdGhlIHNhbWUgYmVoYXZpb3IgYXMgaWYgVEhQcyB3b3VsZCBub3QgYmUgZGlzYWJsZWQgb25cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0yNDgtXHRcdCAgYSBwcm9jZXNzIGxldmVsLlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0OjI0OTpcdFx0Tm90ZSB0aGF0IE1BRFZfQ09MTEFQU0UgaXMgY3VycmVudGx5IGFsd2F5cyByZWplY3RlZCBpZlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0LTI1MC1cdFx0bWFkdmlzZSguLi4sIE1BRFZfTk9IVUdFUEFHRSkgaXMgc2V0IG9uIGFuIGFyZWEuXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0PTQ0NT1uZXZlclxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0OjQ0NjogICAgRG8gbm90IGFsbG9jYXRlIGh1Z2UgcGFnZXMuIE5vdGUgdGhhdCBgYG1hZHZpc2UoLi4uLCBNQURWX0NPTExBUFNFKWBgXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtNDQ3LSAgICBjYW4gc3RpbGwgY2F1c2UgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyB0byBiZSBvYnRhaW5lZCBldmVuIGlmIHRoaXMgbW9kZVxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdD01MDU9bmV2ZXJcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC01MDYtICAgIERvIG5vdCBhbGxvY2F0ZSBcdTAwM2NzaXplXHUwMDNlIGh1Z2UgcGFnZXMuIE5vdGUgdGhhdCBgYG1hZHZpc2UoLi4uLFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0OjUwNzogICAgTUFEVl9DT0xMQVBTRSlgYCBjYW4gc3RpbGwgY2F1c2UgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyB0byBiZSBvYnRhaW5lZFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0LTUwOC0gICAgZXZlbiBpZiB0aGlzIG1vZGUgaXMgc3BlY2lmaWVkIGV2ZXJ5d2hlcmU7XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0PTUzMj10aGF0IHN1cHBvcnRzIGVhY2ggYWN0aW9uIGFyZSBhcyBiZWxvdy5cbi0tXG5Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QtNTQ3LSAgIGZhaWwuXG5Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3Q6NTQ4OiAtIGBgY29sbGFwc2VgYDogQ2FsbCBgYG1hZHZpc2UoKWBgIGZvciB0aGUgcmVnaW9uIHdpdGggYGBNQURWX0NPTExBUFNFYGAuXG5Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QtNTQ5LSAgIFN1cHBvcnRlZCBieSBgYHZhZGRyYGAgYW5kIGBgZnZhZGRyYGAgb3BlcmF0aW9ucyBzZXQuIFdoZW5cbi0tXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0PTU2Mj1hcmUgZXh0cmEgcmVxdWlyZW1lbnRzIGZvciBhY2Nlc3NpbmcgdGhlbTpcbi0tXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTU2OC0gIEluIHBhcnRpY3VsYXIsIHRoaXMgaGFwcGVucyBpbiA6YzpmdW5jOmAhcmV0cmFjdF9wYWdlX3RhYmxlc2Agd2hlbiBoYW5kbGluZ1xuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDo1Njk6ICA6YzptYWNybzpgIU1BRFZfQ09MTEFQU0VgLlxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC01NzAtICBTbyBhY2Nlc3NpbmcgUFRFLWxldmVsIHBhZ2UgdGFibGVzIHJlcXVpcmVzIGF0IGxlYXN0IGhvbGRpbmcgYW4gUkNVIHJlYWQgbG9jaztcbi0tXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTU3OS0gIHRoZSByZXF1aXJlbWVudHMuIEluIHBhcnRpY3VsYXIsIHRoaXMgYWxzbyBoYXBwZW5zIGluIDpjOmZ1bmM6YCFyZXRyYWN0X3BhZ2VfdGFibGVzYFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDo1ODA6ICB3aGVuIGhhbmRsaW5nIDpjOm1hY3JvOmAhTUFEVl9DT0xMQVBTRWAuXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTU4MS1cbi0tXG5hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTc4LVxuYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDo3OTojZGVmaW5lIE1BRFZfQ09MTEFQU0VcdDI1XHRcdC8qIFN5bmNocm9ub3VzIGh1Z2VwYWdlIGNvbGxhcHNlICovXG5hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTgwLVxuLS1cbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0xMDUtXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmg6MTA2OiNkZWZpbmUgTUFEVl9DT0xMQVBTRVx0MjVcdFx0LyogU3luY2hyb25vdXMgaHVnZXBhZ2UgY29sbGFwc2UgKi9cbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0xMDctXG4tLVxuYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtNzItXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDo3MzojZGVmaW5lIE1BRFZfQ09MTEFQU0VcdDI1XHRcdC8qIFN5bmNocm9ub3VzIGh1Z2VwYWdlIGNvbGxhcHNlICovXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC03NC1cbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvc3lzX3BhcmlzYy5jPTM5ND1hc21saW5rYWdlIG5vdHJhY2UgbG9uZyBwYXJpc2NfbWFkdmlzZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLCBpbnQgYmVoYXZpb3IpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3N5c19wYXJpc2MuYy00MDQtXHRjYXNlIDcyOiBiZWhhdmlvciA9IE1BRFZfS0VFUE9ORk9SSztcdGJyZWFrO1xuYXJjaC9wYXJpc2Mva2VybmVsL3N5c19wYXJpc2MuYzo0MDU6XHRjYXNlIDczOiBiZWhhdmlvciA9IE1BRFZfQ09MTEFQU0U7XHRicmVhaztcbmFyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjLmMtNDA2LVx0fVxuLS1cbmFyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTExMy1cbmFyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjExNDojZGVmaW5lIE1BRFZfQ09MTEFQU0VcdDI1XHRcdC8qIFN5bmNocm9ub3VzIGh1Z2VwYWdlIGNvbGxhcHNlICovXG5hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0xMTUtXG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTkzPXN0cnVjdCBkYW1vbl90YXJnZXQge1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMTMtICogQERBTU9TX05PSFVHRVBBR0U6XHRDYWxsIGBgbWFkdmlzZSgpYGAgZm9yIHRoZSByZWdpb24gd2l0aCBNQURWX05PSFVHRVBBR0UuXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTE0OiAqIEBEQU1PU19DT0xMQVBTRTpcdENhbGwgYGBtYWR2aXNlKClgYCBmb3IgdGhlIHJlZ2lvbiB3aXRoIE1BRFZfQ09MTEFQU0UuXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTE1LSAqIEBEQU1PU19MUlVfUFJJTzpcdFByaW9yaXRpemUgdGhlIHJlZ2lvbiBvbiBpdHMgTFJVIGxpc3RzLlxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTk3PWVudW0gdHZhX3R5cGUge1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTEwMC1cdFRWQV9LSFVHRVBBR0VELFx0XHQvKiBLaHVnZXBhZ2VkIGNvbGxhcHNlLiAqL1xuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MTAxOlx0VFZBX0ZPUkNFRF9DT0xMQVBTRSxcdC8qIEZvcmNlZCBjb2xsYXBzZSAoZS5nLiBNQURWX0NPTExBUFNFKS4gKi9cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTEwMi19O1xuLS1cbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oLTc5LVxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmg6ODA6I2RlZmluZSBNQURWX0NPTExBUFNFXHQyNVx0XHQvKiBTeW5jaHJvbm91cyBodWdlcGFnZSBjb2xsYXBzZSAqL1xuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtODEtXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmg9MTM0PXN0cnVjdCBwcmN0bF9tbV9tYXAge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oLTE4Ny0gKiBEb24mIzM5O3QgZGlzYWJsZSBUSFBzIHdoZW4gZXhwbGljaXRseSBhZHZpc2VkIChlLmcuLCBNQURWX0hVR0VQQUdFIC9cbmluY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oOjE4ODogKiBWTV9IVUdFUEFHRSwgTUFEVl9DT0xMQVBTRSkuXG5pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaC0xODktICovXG4tLVxubW0vS2NvbmZpZz04ODU9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MDAtXHQgICYjMzk7dHJhbnNwYXJlbnRfaHVnZXBhZ2Vfc2htZW09JiMzOTsgb3B0aW9uIG9yIGF0IHJ1bnRpbWUgdmlhIHN5c2ZzXG5tbS9LY29uZmlnOjkwMTpcdCAga25vYi4gTm90ZSB0aGF0IG1hZHZpc2UoTUFEVl9DT0xMQVBTRSkgY2FuIHN0aWxsIGNhdXNlXG5tbS9LY29uZmlnLTkwMi1cdCAgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyB0byBiZSBvYnRhaW5lZCBldmVuIGlmIHRoaXMgbW9kZSBpc1xuLS1cbm1tL0tjb25maWc9OTMwPWNob2ljZVxuLS1cbm1tL0tjb25maWctOTQ1LVx0ICAmIzM5O3RyYW5zcGFyZW50X2h1Z2VwYWdlX3RtcGZzPSYjMzk7IG9wdGlvbi4gTm90ZSB0aGF0XG5tbS9LY29uZmlnOjk0NjpcdCAgbWFkdmlzZShNQURWX0NPTExBUFNFKSBjYW4gc3RpbGwgY2F1c2UgdHJhbnNwYXJlbnQgaHVnZSBwYWdlc1xubW0vS2NvbmZpZy05NDctXHQgIHRvIGJlIG9idGFpbmVkIGV2ZW4gaWYgdGhpcyBtb2RlIGlzIHNwZWNpZmllZC5cbi0tXG5tbS9kYW1vbi92YWRkci5jPTg3OT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl92YV9hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtOTAxLVx0Y2FzZSBEQU1PU19DT0xMQVBTRTpcbm1tL2RhbW9uL3ZhZGRyLmM6OTAyOlx0XHRtYWR2X2FjdGlvbiA9IE1BRFZfQ09MTEFQU0U7XG5tbS9kYW1vbi92YWRkci5jLTkwMy1cdFx0YnJlYWs7XG4tLVxubW0va2h1Z2VwYWdlZC5jPTM2Nz1zdGF0aWMgdW5zaWduZWQgaW50IGNvbGxhcHNlX21heF9wdGVzX25vbmUoc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjLFxuLS1cbm1tL2todWdlcGFnZWQuYy0zNzMtXHRcdHJldHVybiAwO1xubW0va2h1Z2VwYWdlZC5jOjM3NDpcdC8qIGZvciBNQURWX0NPTExBUFNFLCBhbGxvdyBhbnkgZW1wdHkvc2hhcmVkIHplcm9wYWdlIFBURXMgKi9cbm1tL2todWdlcGFnZWQuYy0zNzUtXHRpZiAoIWNjLVx1MDAzZWlzX2todWdlcGFnZWQpXG4tLVxubW0va2h1Z2VwYWdlZC5jPTQwNj1zdGF0aWMgdW5zaWduZWQgaW50IGNvbGxhcHNlX21heF9wdGVzX3NoYXJlZChzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTQwOS1cdC8qXG5tbS9raHVnZXBhZ2VkLmM6NDEwOlx0ICogRm9yIE1BRFZfQ09MTEFQU0UsIGRvIG5vdCByZXN0cmljdCB0aGUgbnVtYmVyIG9mIFBURXMgdGhhdCBtYXAgc2hhcmVkXG5tbS9raHVnZXBhZ2VkLmMtNDExLVx0ICogYW5vbnltb3VzIHBhZ2VzLlxuLS1cbm1tL2todWdlcGFnZWQuYz00MzQ9c3RhdGljIHVuc2lnbmVkIGludCBjb2xsYXBzZV9tYXhfcHRlc19zd2FwKHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYyxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNDM3LVx0Lypcbm1tL2todWdlcGFnZWQuYzo0Mzg6XHQgKiBGb3IgTUFEVl9DT0xMQVBTRSwgZG8gbm90IHJlc3RyaWN0IHRoZSBudW1iZXIgUFRFcyBlbnRyaWVzIG9yXG5tbS9raHVnZXBhZ2VkLmMtNDM5LVx0ICogcGFnZWNhY2hlIGVudHJpZXMgdGhhdCBhcmUgbm9uLXByZXNlbnQuXG4tLVxubW0va2h1Z2VwYWdlZC5jPTIyNTQ9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yMjY3LVx0Lypcbm1tL2todWdlcGFnZWQuYzoyMjY4Olx0ICogTUFEVl9DT0xMQVBTRSBpZ25vcmVzIHNobWVtIGh1Z2UgY29uZmlnLCBzbyBkbyBub3QgY2hlY2sgc2htZW1cbm1tL2todWdlcGFnZWQuYy0yMjY5LVx0ICpcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjYzMy1cdCAqIFJlbW92ZSBwdGUgcGFnZSB0YWJsZXMsIHNvIHdlIGNhbiByZS1mYXVsdCB0aGUgcGFnZSBhcyBodWdlLlxubW0va2h1Z2VwYWdlZC5jOjI2MzQ6XHQgKiBJZiBNQURWX0NPTExBUFNFLCBhZGp1c3QgcmVzdWx0IHRvIGNhbGwgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKCkuXG5tbS9raHVnZXBhZ2VkLmMtMjYzNS1cdCAqL1xuLS1cbm1tL2todWdlcGFnZWQuYz0yNzk3PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NpbmdsZV9wbWQodW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yODIyLVx0Lypcbm1tL2todWdlcGFnZWQuYzoyODIzOlx0ICogRm9yIE1BRFZfQ09MTEFQU0UsIHdoZW4gZW5jb3VudGVyaW5nIGRpcnR5IHBhZ2VzLCB0cnkgdG8gd3JpdGViYWNrLFxubW0va2h1Z2VwYWdlZC5jLTI4MjQtXHQgKiB0aGVuIHJldHJ5IHRoZSBjb2xsYXBzZSBvbmUgdGltZS5cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MzE2Mz1zdGF0aWMgaW50IG1hZHZpc2VfY29sbGFwc2VfZXJybm8oZW51bSBzY2FuX3Jlc3VsdCByKVxuLS1cbm1tL2todWdlcGFnZWQuYy0zMTY1LVx0Lypcbm1tL2todWdlcGFnZWQuYzozMTY2Olx0ICogTUFEVl9DT0xMQVBTRSBicmVha3MgZnJvbSBleGlzdGluZyBtYWR2aXNlKDIpIGNvbnZlbnRpb25zIHRvIHByb3ZpZGVcbm1tL2todWdlcGFnZWQuYy0zMTY3LVx0ICogYWN0aW9uYWJsZSBmZWVkYmFjayB0byBjYWxsZXIsIHNvIHRoZXkgbWF5IHRha2UgYW4gYXBwcm9wcmlhdGVcbi0tXG5tbS9tYWR2aXNlLmM9MTMzOD1zdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xMzYxLVx0XHRyZXR1cm4gbWFkdmlzZV9kb250bmVlZF9mcmVlKG1hZHZfYmVoYXZpb3IpO1xubW0vbWFkdmlzZS5jOjEzNjI6XHRjYXNlIE1BRFZfQ09MTEFQU0U6XG5tbS9tYWR2aXNlLmMtMTM2My1cdFx0cmV0dXJuIG1hZHZpc2VfY29sbGFwc2Uodm1hLCByYW5nZS1cdTAwM2VzdGFydCwgcmFuZ2UtXHUwMDNlZW5kLFxuLS1cbm1tL21hZHZpc2UuYz0xNTE4PW1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNTQxLVx0Y2FzZSBNQURWX05PSFVHRVBBR0U6XG5tbS9tYWR2aXNlLmM6MTU0MjpcdGNhc2UgTUFEVl9DT0xMQVBTRTpcbm1tL21hZHZpc2UuYy0xNTQzLSNlbmRpZlxuLS1cbm1tL21hZHZpc2UuYz0xNTYyPXN0YXRpYyBib29sIHByb2Nlc3NfbWFkdmlzZV9yZW1vdGVfdmFsaWQoaW50IGJlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNTY3LVx0Y2FzZSBNQURWX1dJTExORUVEOlxubW0vbWFkdmlzZS5jOjE1Njg6XHRjYXNlIE1BRFZfQ09MTEFQU0U6XG5tbS9tYWR2aXNlLmMtMTU2OS1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vbWFkdmlzZS5jPTE3NDI9c3RhdGljIGVudW0gbWFkdmlzZV9sb2NrX21vZGUgZ2V0X2xvY2tfbW9kZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTc1My1cdGNhc2UgTUFEVl9QT1BVTEFURV9XUklURTpcbm1tL21hZHZpc2UuYzoxNzU0Olx0Y2FzZSBNQURWX0NPTExBUFNFOlxubW0vbWFkdmlzZS5jLTE3NTUtXHRcdHJldHVybiBNQURWSVNFX01NQVBfUkVBRF9MT0NLO1xuLS1cbm1tL21hZHZpc2UuYz0xODg3PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxuLS1cbm1tL21hZHZpc2UuYy0xOTU1LSAqXHRcdGNvYWxlc2NlZCBpbnRvIFRIUCBhbmQgbmV3IHBhZ2VzIHdpbGwgbm90IGJlIGFsbG9jYXRlZCBhcyBUSFAuXG5tbS9tYWR2aXNlLmM6MTk1NjogKiAgTUFEVl9DT0xMQVBTRSAtIHN5bmNocm9ub3VzbHkgY29hbGVzY2UgcGFnZXMgaW50byBuZXcgVEhQLlxubW0vbWFkdmlzZS5jLTE5NTctICogIE1BRFZfRE9OVERVTVAgLSB0aGUgYXBwbGljYXRpb24gd2FudHMgdG8gcHJldmVudCBwYWdlcyBpbiB0aGUgZ2l2ZW4gcmFuZ2Vcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaC03OS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oOjgwOiNkZWZpbmUgTUFEVl9DT0xMQVBTRVx0MjVcdFx0LyogU3luY2hyb25vdXMgaHVnZXBhZ2UgY29sbGFwc2UgKi9cbnRvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oLTgxLVxuLS1cbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oPTEzND1zdHJ1Y3QgcHJjdGxfbW1fbWFwIHtcbi0tXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaC0xODctICogRG9uJiMzOTt0IGRpc2FibGUgVEhQcyB3aGVuIGV4cGxpY2l0bHkgYWR2aXNlZCAoZS5nLiwgTUFEVl9IVUdFUEFHRSAvXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaDoxODg6ICogVk1fSFVHRVBBR0UsIE1BRFZfQ09MTEFQU0UpLlxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmgtMTg5LSAqL1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM9MTc0PXN0YXRpYyB2b2lkIHRlc3RfY29sbGFwc2UoaW50IGZkLCB1NjQgZmxhZ3MpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0yMTgtXHQgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MjE5Olx0VEVTVF9BU1NFUlRfRVEobWFkdmlzZShtZW0sIHBtZF9zaXplLCBNQURWX0NPTExBUFNFKSwgLTEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0yMjAtXHRURVNUX0FTU0VSVF9FUShlcnJubywgRUlOVkFMKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYz0xMjc2PXN0YXRpYyB2b2lkIGRvX3Rlc3RfYW5vbl90aHBfY29sbGFwc2UoY2hhciAqbWVtLCBzaXplX3Qgc2l6ZSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYy0xMzA4LVx0XHQvKiBDb2xsYXBzZSBiZWZvcmUgYWN0dWFsbHkgQ09XLXNoYXJpbmcgdGhlIHBhZ2UuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYzoxMzA5Olx0XHRyZXQgPSBtYWR2aXNlKG1lbSwgc2l6ZSwgTUFEVl9DT0xMQVBTRSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYy0xMzEwLVx0XHRpZiAocmV0KSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYzoxMzExOlx0XHRcdGtzZnRfcGVycm9yKFwmIzM0O01BRFZfQ09MTEFQU0UgZmFpbGVkXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jLTEzMTItXHRcdFx0bG9nX3Rlc3RfcmVzdWx0KEtTRlRfU0tJUCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMtMTM4Ni1cdFx0LyogQ29sbGFwc2UgYmVmb3JlIGFueW9uZSBtb2RpZmllZCB0aGUgQ09XLXNoYXJlZCBwYWdlLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmM6MTM4NzpcdFx0cmV0ID0gbWFkdmlzZShtZW0sIHNpemUsIE1BRFZfQ09MTEFQU0UpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMtMTM4OC1cdFx0aWYgKHJldCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmM6MTM4OTpcdFx0XHRrc2Z0X3BlcnJvcihcJiMzNDtNQURWX0NPTExBUFNFIGZhaWxlZFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYy0xMzkwLVx0XHRcdGxvZ190ZXN0X3Jlc3VsdChLU0ZUX1NLSVApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYz0yMTkxPVRFU1RfRihndWFyZF9yZWdpb25zLCBjb2xsYXBzZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMjIzMy1cdCAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjIyMzQ6XHRFWFBFQ1RfTkUobWFkdmlzZShwdHIsIHNpemUsIE1BRFZfQ09MTEFQU0UpLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0yMjM1LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTIwODA9VEVTVF9GKGhtbSwgbWlncmF0ZV9hbm9uX2h1Z2VfZmF1bHQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMjExMC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjIxMTE6XHRyZXQgPSBtYWR2aXNlKG1hcCwgc2l6ZSwgTUFEVl9DT0xMQVBTRSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yMTEyLVx0QVNTRVJUX0VRKHJldCwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTIzMT1zdGF0aWMgdm9pZCBmaWxsX21lbW9yeShpbnQgKnAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yMzktLypcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoyNDA6ICogTUFEVl9DT0xMQVBTRSBpcyBhIGJlc3QtZWZmb3J0IHJlcXVlc3QgYW5kIG1heSBmYWlsIGlmIGFuIGludGVybmFsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjQxLSAqIHJlc291cmNlIGlzIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNlIGl0IHdpbGwgc2V0IGVycm5vIHRvXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTI0NT1zdGF0aWMgaW50IG1hZHZpc2VfY29sbGFwc2VfcmV0cnkodm9pZCAqcCwgdW5zaWduZWQgbG9uZyBzaXplKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNTAtcmV0cnk6XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MjUxOlx0cmV0ID0gbWFkdmlzZShwLCBzaXplLCBNQURWX0NPTExBUFNFKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNTItXHRpZiAocmV0IFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFQUdBSU4gXHUwMDI2XHUwMDI2IHJldHJ5KSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTI2Mz1zdGF0aWMgdm9pZCAqYWxsb2NfaHBhZ2Uoc3RydWN0IG1lbV9vcHMgKm9wcylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjcwLVx0ICogVk1BIHNob3VsZCBiZSBuZWl0aGVyIFZNX0hVR0VQQUdFIG5vciBWTV9OT0hVR0VQQUdFLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjI3MTpcdCAqIFRoZSBsYXR0ZXIgaXMgaW5lbGlnaWJsZSBmb3IgY29sbGFwc2UgYnkgTUFEVl9DT0xMQVBTRVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjI3MjpcdCAqIHdoaWxlIHRoZSBmb3JtZXIgbWlnaHQgY2F1c2UgTUFEVl9DT0xMQVBTRSB0byByYWNlIHdpdGhcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNzMtXHQgKiBraHVnZXBhZ2VkIG9uIGxvdy1sb2FkIHN5c3RlbSAobGlrZSBhIHRlc3QgbWFjaGluZSksIHdoaWNoXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6Mjc0Olx0ICogd291bGQgY2F1c2UgTUFEVl9DT0xMQVBTRSB0byBmYWlsIHdpdGggRUFHQUlOLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTI3NS1cdCAqL1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNzctXHRpZiAobWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBocGFnZV9wbWRfc2l6ZSkpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6Mjc4Olx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7bWFkdmlzZShNQURWX0NPTExBUFNFKVwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjc5LVx0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAxKSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoyODA6XHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDttYWR2aXNlKE1BRFZfQ09MTEFQU0UpXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yODEtXHRpZiAobWFkdmlzZShwLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9IVUdFUEFHRSkpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTUwOT1zdGF0aWMgdm9pZCBfX21hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01MTctXHQvKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjUxODpcdCAqIHJlYWRcdTAwMjZ3cml0ZSBmaWxlIGNvbGxhcHNlIHN1Y2NlZWRzIGZvciBNQURWX0NPTExBUFNFIGJlY2F1c2UgZGlydHlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01MTktXHQgKiBmb2xpb3MgYXJlIHdyaXR0ZW4gYmFjayBhZnRlciBjb2xsYXBzZSBmYWlscyBmb3IgZGlydHkgZm9saW9zIGFuZFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01MjMtXHQvKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjUyNDpcdCAqIFByZXZlbnQga2h1Z2VwYWdlZCBpbnRlcmZlcmVuY2UgYW5kIHRlc3RzIHRoYXQgTUFEVl9DT0xMQVBTRVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTUyNS1cdCAqIGlnbm9yZXMgL3N5cy9rZXJuZWwvbW0vdHJhbnNwYXJlbnRfaHVnZXBhZ2UvZW5hYmxlZFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYz0xMDc1PXN0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3dyaXR0ZW5fdGVzdChjb25zdCBjaGFyICpuYW1lLCBjaGFyICptZW0sIGxvbmcgc2l6ZSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTA4Ni1cdGlmICh1c2VfdGhwIFx1MDAyNlx1MDAyNlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjEwODc6XHQgICAgKG1hZHZpc2UobWVtLCBzaXplLCBNQURWX0NPTExBUFNFKSB8fFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTEwODgtXHQgICAgICFjaGVja19odWdlX2Fub24obWVtLCBzaXplIC8gaHBhZ2Vfc2l6ZSwgaHBhZ2Vfc2l6ZSkpKSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYz0yND1lbnVtIHRocF9jb2xsYXBzZV90eXBlIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jLTI3LVx0VEhQX0NPTExBUFNFX01BRFZfSFVHRVBBR0UsXHQvKiBNQURWX0hVR0VQQUdFIGJlZm9yZSBhY2Nlc3MgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmM6Mjg6XHRUSFBfQ09MTEFQU0VfTUFEVl9DT0xMQVBTRSxcdC8qIE1BRFZfQ09MTEFQU0UgYWZ0ZXIgYWNjZXNzICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jLTI5LX07XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYy0zMi0gKiBGdW5jdGlvbiB0byBtbWFwIGEgYnVmZmVyLCBmYXVsdCBpdCBpbiwgbWFkdmlzZSBpdCBhcHByb3ByaWF0ZWx5IChiZWZvcmVcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmM6MzM6ICogcGFnZSBmYXVsdCBmb3IgTUFEVl9IVUdFLCBhbmQgYWZ0ZXIgZm9yIE1BRFZfQ09MTEFQU0UpLCBhbmQgY2hlY2sgaWYgdGhlXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jLTM0LSAqIG1tYXAgcmVnaW9uIGlzIGh1Z2UuXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYz00MD1zdGF0aWMgaW50IHRlc3RfbW1hcF90aHAoZW51bSB0aHBfY29sbGFwc2VfdHlwZSBtYWR2aXNlX2J1Ziwgc2l6ZV90IHBtZHNpemUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYy02My1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmM6NjQ6XHRpZiAobWFkdmlzZV9idWYgPT0gVEhQX0NPTExBUFNFX01BRFZfQ09MTEFQU0UpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jOjY1Olx0XHRtYWR2aXNlKG1lbSwgcG1kc2l6ZSwgTUFEVl9DT0xMQVBTRSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jLTY2LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmM9NzU9c3RhdGljIHZvaWQgcHJjdGxfdGhwX2Rpc2FibGVfY29tcGxldGVseV90ZXN0KHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKmNvbnN0IF9tZXRhZGF0YSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jLTg3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYzo4ODpcdEFTU0VSVF9FUSh0ZXN0X21tYXBfdGhwKFRIUF9DT0xMQVBTRV9NQURWX0NPTExBUFNFLCBwbWRzaXplKSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jLTg5LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMtMTAxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYzoxMDI6XHRBU1NFUlRfRVEodGVzdF9tbWFwX3RocChUSFBfQ09MTEFQU0VfTUFEVl9DT0xMQVBTRSwgcG1kc2l6ZSksIDEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYy0xMDMtfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmM9MTgyPXN0YXRpYyB2b2lkIHByY3RsX3RocF9kaXNhYmxlX2V4Y2VwdF9tYWR2aXNlX3Rlc3Qoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqY29uc3QgX21ldGFkYXRhLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMtMTk1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYzoxOTY6XHRBU1NFUlRfRVEodGVzdF9tbWFwX3RocChUSFBfQ09MTEFQU0VfTUFEVl9DT0xMQVBTRSwgcG1kc2l6ZSksIDEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYy0xOTctXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYy0yMDktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jOjIxMDpcdEFTU0VSVF9FUSh0ZXN0X21tYXBfdGhwKFRIUF9DT0xMQVBTRV9NQURWX0NPTExBUFNFLCBwbWRzaXplKSwgMSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jLTIxMS19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvY2Vzc19tYWR2LmM9NjA9VEVTVF9GKHByb2Nlc3NfbWFkdmlzZSwgYmFzaWMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvY2Vzc19tYWR2LmMtMTIzLS8qXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuYzoxMjQ6ICogVGhpcyB0ZXN0IGRldGVybWluaXN0aWNhbGx5IHZhbGlkYXRlcyBwcm9jZXNzX21hZHZpc2UoKSB3aXRoIE1BRFZfQ09MTEFQU0VcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb2Nlc3NfbWFkdi5jLTEyNS0gKiBvbiBhIHJlbW90ZSBwcm9jZXNzLCBvdGhlciBhZHZpY2VzIGFyZSBkaWZmaWN1bHQgdG8gdmVyaWZ5IHJlbGlhYmx5LlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb2Nlc3NfbWFkdi5jLTEyOC0gKiBmb2N1cyBvbiBwcm9jZXNzX21hZHYgcmVtb3RlIHJlc3VsdCwgb25seSBjaGVjayBhZGRyZXNzZXMgYW5kIGxlbmd0aHMuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuYzoxMjk6ICogVGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBNQURWX0NPTExBUFNFIGNhbiBiZSBmb3VuZCBpbiB0aGUgcmVsZXZhbnQgdGVzdCBleGFtcGxlcyBpbiBraHVnZXBhZ2VkLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvY2Vzc19tYWR2LmMtMTMwLSAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvY2Vzc19tYWR2LmM9MTMxPVRFU1RfRihwcm9jZXNzX21hZHZpc2UsIHJlbW90ZV9jb2xsYXBzZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuYy0xOTUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuYzoxOTY6XHRyZXQgPSBzeXNfcHJvY2Vzc19tYWR2aXNlKHNlbGYtXHUwMDNlcmVtb3RlX3BpZGZkLCBcdTAwMjZ2ZWMsIDEsIE1BRFZfQ09MTEFQU0UsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuYy0xOTctXHRcdFx0XHQgIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jPTUzNj1zdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbGxhcHNlLCBib29sIHRlc3Rfd3ApXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmMtNTQ0LVx0LypcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jOjU0NTpcdCAqIE5PVEU6IE1BRFZfQ09MTEFQU0UgaXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggV1AsIHNvIHRlc3RpbmdcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jLTU0Ni1cdCAqIGJvdGggZG8gbm90IG1ha2UgbXVjaCBzZW5zZS5cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYy01NTAtXHRpZiAodWZmZF9yZWdpc3Rlcihnb3B0cy1cdTAwM2V1ZmZkLCBnb3B0cy1cdTAwM2VhcmVhX2RzdF9hbGlhcywgZ29wdHMtXHUwMDNlbnJfcGFnZXMgKiBnb3B0cy1cdTAwM2VwYWdlX3NpemUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYzo1NTE6XHRcdFx0ICAvKiBOT1RFISBNQURWX0NPTExBUFNFIG1heSBub3Qgd29yayB3aXRoIHVmZmQtd3AgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jLTU1Mi1cdFx0XHQgIGZhbHNlLCB0ZXN0X3dwLCB0cnVlKSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYy01ODEtXHRcdGlmIChtYWR2aXNlKGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzLCBnb3B0cy1cdTAwM2Vucl9wYWdlcyAqIGdvcHRzLVx1MDAzZXBhZ2Vfc2l6ZSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jOjU4MjpcdFx0XHQgICAgTUFEVl9DT0xMQVBTRSkpIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jLTU4My1cdFx0XHQvKiBJdCYjMzk7cyBmaW5lIHRvIGZhaWwgZm9yIHRoaXMgb25lLi4uICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYzo1ODQ6XHRcdFx0dWZmZF90ZXN0X3NraXAoXCYjMzQ7TUFEVl9DT0xMQVBTRSBmYWlsZWRcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmMtNTg1LVx0XHRcdHJldHVybjtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYz0yMzIyPXVmZmRfdGVzdF9jYXNlX3QgdWZmZF90ZXN0c1tdID0ge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jLTI0MjQtXHRcdC51ZmZkX2ZuID0gdWZmZF9taW5vcl9jb2xsYXBzZV90ZXN0LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmM6MjQyNTpcdFx0LyogTUFEVl9DT0xMQVBTRSBvbmx5IHdvcmtzIHdpdGggc2htZW0gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jLTI0MjYtXHRcdC5tZW1fdGFyZ2V0cyA9IE1FTV9TSE1FTSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jOjI0Mjc6XHRcdC8qIFdlIGNhbiYjMzk7dCB0ZXN0IE1BRFZfQ09MTEFQU0UsIHNvIHRyeSBvdXIgbHVjayAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmMtMjQyOC1cdFx0LnVmZmRfZmVhdHVyZV9yZXF1aXJlZCA9IFVGRkRfRkVBVFVSRV9NSU5PUl9TSE1FTSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwODUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYG1hZHZpc2VfY29sbGFwc2VgIGluIGBtbS9raHVnZXBhZ2VkLmNgKioKCk9rYXksIHNvIEkgd2FudCB0byBnZXQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgbWFkdmlzZV9jb2xsYXBzZWAgYWN0dWFsbHkgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBrZXJuZWwmIzM5O3MgaHVnZSBwYWdlIG1hbmFnZW1lbnQuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIGRpZ2dpbmcgaW50byB0aGUgY29kZSBpdHNlbGYuIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCB0byBgbW0va2h1Z2VwYWdlZC5jYCBhbmQgemVybyBpbiBvbiB0aGUgYG1hZHZpc2VfY29sbGFwc2VgIGZ1bmN0aW9uLiBNeSBtYWluIGZvY3VzIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBsb2dpYyDigJMgaG93IGl0IGFjdHVhbGx5IGNvbGxhcHNlcyBvciB1bi1jb2xsYXBzZXMgbWVtb3J5IG1hcHBpbmdzIGJhc2VkIG9uIHRoZSBgTUFEVl9DT0xMQVBTRWAgYWR2aWNlLCBhbmQgYWxzbyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBzdXJyb3VuZGluZyBzeW1ib2xzIGFuZCBkYXRhIHN0cnVjdHVyZXMgaXQgcmVsaWVzIG9uLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBsZWFkIG1lIHRvIHRoZSB1bmRlcmx5aW5nIGFsZ29yaXRobXMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHBhZ2UgdGFibGUgaGFuZGxpbmcgYW5kIG90aGVyIHJlbGF0ZWQgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50cy4gSXQmIzM5O3MgdGltZSB0byBnZXQgaGFuZHMtb24gYW5kIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFkdmlzZV9jb2xsYXBzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmM9MzE1OD1ib29sIGN1cnJlbnRfaXNfa2h1Z2VwYWdlZCh2b2lkKVxuLS1cbm1tL2todWdlcGFnZWQuYy0zMTYyLVxubW0va2h1Z2VwYWdlZC5jOjMxNjM6c3RhdGljIGludCBtYWR2aXNlX2NvbGxhcHNlX2Vycm5vKGVudW0gc2Nhbl9yZXN1bHQgcilcbm1tL2todWdlcGFnZWQuYy0zMTY0LXtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzE5NC1cbm1tL2todWdlcGFnZWQuYzozMTk1OmludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0va2h1Z2VwYWdlZC5jLTMxOTYtXHRcdCAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgKmxvY2tfZHJvcHBlZClcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzI4Mi1cdHJldHVybiB0aHBzID09ICgoaGVuZCAtIGhzdGFydCkgXHUwMDNlXHUwMDNlIEhQQUdFX1BNRF9TSElGVCkgPyAwXG5tbS9raHVnZXBhZ2VkLmM6MzI4MzpcdFx0XHQ6IG1hZHZpc2VfY29sbGFwc2VfZXJybm8obGFzdF9mYWlsKTtcbm1tL2todWdlcGFnZWQuYy0zMjg0LX1cbi0tXG5tbS9tYWR2aXNlLmM9MTMzOD1zdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xMzYyLVx0Y2FzZSBNQURWX0NPTExBUFNFOlxubW0vbWFkdmlzZS5jOjEzNjM6XHRcdHJldHVybiBtYWR2aXNlX2NvbGxhcHNlKHZtYSwgcmFuZ2UtXHUwMDNlc3RhcnQsIHJhbmdlLVx1MDAzZWVuZCxcbm1tL21hZHZpc2UuYy0xMzY0LVx0XHRcdFx1MDAyNm1hZHZfYmVoYXZpb3ItXHUwMDNlbG9ja19kcm9wcGVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3NTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGl2aW5nIGludG8gYG1hZHZpc2VfY29sbGFwc2VgIGFuZCBJdHMgVEhQIEltcGxpY2F0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYG1hZHZpc2VfY29sbGFwc2VgIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL2todWdlcGFnZWQuY2AuIE15IHByaW1hcnkgaW50ZXJlc3QgaGVyZSwgYXMgYWx3YXlzLCBpcyB1bmRlcnN0YW5kaW5nIHRoZSBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpIGludGVyYWN0aW9uLCBhbmQgaG93IHRoaXMgZnVuY3Rpb24gcGxheXMgYSBwYXJ0IGluIHRoZSBiaWcgcGljdHVyZS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCB0aGF0IGxlYWRzIGludG8gYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgbWFnaWMg4oCTIG9yIHBvdGVudGlhbCBoZWFkYWNoZXMg4oCTIGhhcHBlbiwgYW5kIHVuZGVyc3RhbmRpbmcgKmhvdyogYG1hZHZpc2VfY29sbGFwc2VgIHRyaWdnZXJzIHRoYXQgZnVuY3Rpb24gaXMgY3J1Y2lhbC4gSSB3YW50IHRvIHNlZSBpZiBpdCYjMzk7cyBhIGRpcmVjdCBjYWxsLCBvciBpZiB0aGVyZSBhcmUgaW50ZXJtZWRpYXJpZXMuIFdoYXQgYXJlIHRoZSBjb25kaXRpb25zIHRoYXQgaGF2ZSB0byBiZSBtZXQgZm9yIHRoaXMgY29sbGFwc2UgYXR0ZW1wdCB0byBldmVuIGJlIGNvbnNpZGVyZWQ/IEkgYmV0IGl0IGRlYWxzIHdpdGggYE1BRFZfQ09MTEFQU0VgIGFuZCBzaGFyZWQgbWVtb3J5IHJlZ2lvbnMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgYWxsIHRoZSBpbXBsaWNhdGlvbnMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBrZXJuZWwgZGVhbHMgd2l0aCBwYWdlcyBpbiB0aGUgbWlkZGxlIG9mIGEgVEhQLCBhbmQgaG93IHRoZSBjb2xsYXBzZSB3b3JrcyBpbiB0ZXJtcyBvZiBwYWdlIHRhYmxlIGVudHJpZXMuIElzIGl0IGEgZ3JhY2VmdWwgZGVncmFkYXRpb24sIG9yIGlzIGl0IGEgbW9yZSBkaXNydXB0aXZlIG9wZXJhdGlvbj8gSSB3YW50IHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBwaXRmYWxscywgc3luY2hyb25pemF0aW9uIGlzc3Vlcywgb3Igc3VidGxlIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2YuIExldCYjMzk7cyBzZWUgaG93IGVmZmljaWVudGx5IGl0IGhhbmRsZXMgdGhlIHRhc2ssIGFuZCBpZiB0aGVyZSBhcmUgYW55IGFyZWFzIGZvciBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIGRvd24gdGhlIGxpbmUuIFRoYXQmIzM5O3MgdGhlIGNvcmUgZm9jdXMgcmlnaHQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzE5NTpcdGludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuMzE5NjpcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sICpsb2NrX2Ryb3BwZWQpXG4zMTk3Olx0e1xuMzE5ODpcdFx0c3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjO1xuMzE5OTpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXHUwMDNldm1fbW07XG4zMjAwOlx0XHR1bnNpZ25lZCBsb25nIGhzdGFydCwgaGVuZCwgYWRkcjtcbjMyMDE6XHRcdGVudW0gc2Nhbl9yZXN1bHQgbGFzdF9mYWlsID0gU0NBTl9GQUlMO1xuMzIwMjpcdFx0aW50IHRocHMgPSAwO1xuMzIwMzpcdFx0Ym9vbCBtbWFwX3VubG9ja2VkID0gZmFsc2U7XG4zMjA0Olx0XG4zMjA1Olx0XHRCVUdfT04odm1hLVx1MDAzZXZtX3N0YXJ0IFx1MDAzZSBzdGFydCk7XG4zMjA2Olx0XHRCVUdfT04odm1hLVx1MDAzZXZtX2VuZCBcdTAwM2MgZW5kKTtcbjMyMDc6XHRcbjMyMDg6XHRcdGlmICghY29sbGFwc2VfcG9zc2libGUodm1hLCB2bWEtXHUwMDNldm1fZmxhZ3MsIFRWQV9GT1JDRURfQ09MTEFQU0UpKVxuMzIwOTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMyMTA6XHRcbjMyMTE6XHRcdGhzdGFydCA9IEFMSUdOKHN0YXJ0LCBIUEFHRV9QTURfU0laRSk7XG4zMjEyOlx0XHRoZW5kID0gQUxJR05fRE9XTihlbmQsIEhQQUdFX1BNRF9TSVpFKTtcbjMyMTM6XHRcbjMyMTQ6XHRcdGlmIChoc3RhcnQgXHUwMDNlPSBoZW5kKVxuMzIxNTpcdFx0XHRyZXR1cm4gMDtcbjMyMTY6XHRcbjMyMTc6XHRcdGNjID0ga21hbGxvY19vYmooKmNjKTtcbjMyMTg6XHRcdGlmICghY2MpXG4zMjE5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMzIyMDpcdFx0Y2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCA9IGZhbHNlO1xuMzIyMTpcdFx0Y2MtXHUwMDNlcHJvZ3Jlc3MgPSAwO1xuMzIyMjpcdFxuMzIyMzpcdFx0bW1ncmFiKG1tKTtcbjMyMjQ6XHRcdGxydV9hZGRfZHJhaW5fYWxsKCk7XG4zMjI1Olx0XG4zMjI2Olx0XHRmb3IgKGFkZHIgPSBoc3RhcnQ7IGFkZHIgXHUwMDNjIGhlbmQ7IGFkZHIgJiM0Mzs9IEhQQUdFX1BNRF9TSVpFKSB7XG4zMjI3Olx0XHRcdGVudW0gc2Nhbl9yZXN1bHQgcmVzdWx0ID0gU0NBTl9GQUlMO1xuMzIyODpcdFxuMzIyOTpcdFx0XHRpZiAobW1hcF91bmxvY2tlZCkge1xuMzIzMDpcdFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuMzIzMTpcdFx0XHRcdG1tYXBfcmVhZF9sb2NrKG1tKTtcbjMyMzI6XHRcdFx0XHRtbWFwX3VubG9ja2VkID0gZmFsc2U7XG4zMjMzOlx0XHRcdFx0KmxvY2tfZHJvcHBlZCA9IHRydWU7XG4zMjM0Olx0XHRcdFx0cmVzdWx0ID0gaHVnZXBhZ2Vfdm1hX3JldmFsaWRhdGUobW0sIGFkZHIsIGZhbHNlLCBcdTAwMjZ2bWEsXG4zMjM1Olx0XHRcdFx0XHRcdFx0XHQgY2MsIEhQQUdFX1BNRF9PUkRFUik7XG4zMjM2Olx0XHRcdFx0aWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpIHtcbjMyMzc6XHRcdFx0XHRcdGxhc3RfZmFpbCA9IHJlc3VsdDtcbjMyMzg6XHRcdFx0XHRcdGdvdG8gb3V0X25vbG9jaztcbjMyMzk6XHRcdFx0XHR9XG4zMjQwOlx0XG4zMjQxOlx0XHRcdFx0aGVuZCA9IG1pbihoZW5kLCB2bWEtXHUwMDNldm1fZW5kIFx1MDAyNiBIUEFHRV9QTURfTUFTSyk7XG4zMjQyOlx0XHRcdH1cbjMyNDM6XHRcbjMyNDQ6XHRcdFx0cmVzdWx0ID0gY29sbGFwc2Vfc2luZ2xlX3BtZChhZGRyLCB2bWEsIFx1MDAyNm1tYXBfdW5sb2NrZWQsIGNjKTtcbjMyNDU6XHRcbjMyNDY6XHRcdFx0c3dpdGNoIChyZXN1bHQpIHtcbjMyNDc6XHRcdFx0Y2FzZSBTQ0FOX1NVQ0NFRUQ6XG4zMjQ4Olx0XHRcdGNhc2UgU0NBTl9QTURfTUFQUEVEOlxuMzI0OTpcdFx0XHRcdCYjNDM7JiM0Mzt0aHBzO1xuMzI1MDpcdFx0XHRcdGJyZWFrO1xuMzI1MTpcdFx0XHQvKiBXaGl0ZWxpc3RlZCBzZXQgb2YgcmVzdWx0cyB3aGVyZSBjb250aW51aW5nIE9LICovXG4zMjUyOlx0XHRcdGNhc2UgU0NBTl9OT19QVEVfVEFCTEU6XG4zMjUzOlx0XHRcdGNhc2UgU0NBTl9QVEVfTk9OX1BSRVNFTlQ6XG4zMjU0Olx0XHRcdGNhc2UgU0NBTl9QVEVfVUZGRDpcbjMyNTU6XHRcdFx0Y2FzZSBTQ0FOX0xBQ0tfUkVGRVJFTkNFRF9QQUdFOlxuMzI1NjpcdFx0XHRjYXNlIFNDQU5fUEFHRV9OVUxMOlxuMzI1NzpcdFx0XHRjYXNlIFNDQU5fUEFHRV9DT1VOVDpcbjMyNTg6XHRcdFx0Y2FzZSBTQ0FOX1BBR0VfTE9DSzpcbjMyNTk6XHRcdFx0Y2FzZSBTQ0FOX1BBR0VfQ09NUE9VTkQ6XG4zMjYwOlx0XHRcdGNhc2UgU0NBTl9QQUdFX0xSVTpcbjMyNjE6XHRcdFx0Y2FzZSBTQ0FOX0RFTF9QQUdFX0xSVTpcbjMyNjI6XHRcdFx0XHRsYXN0X2ZhaWwgPSByZXN1bHQ7XG4zMjYzOlx0XHRcdFx0YnJlYWs7XG4zMjY0Olx0XHRcdGRlZmF1bHQ6XG4zMjY1Olx0XHRcdFx0bGFzdF9mYWlsID0gcmVzdWx0O1xuMzI2NjpcdFx0XHRcdC8qIE90aGVyIGVycm9yLCBleGl0ICovXG4zMjY3Olx0XHRcdFx0Z290byBvdXRfbWF5YmVsb2NrO1xuMzI2ODpcdFx0XHR9XG4zMjY5Olx0XHR9XG4zMjcwOlx0XG4zMjcxOlx0b3V0X21heWJlbG9jazpcbjMyNzI6XHRcdC8qIENhbGxlciBleHBlY3RzIHVzIHRvIGhvbGQgbW1hcF9sb2NrIG9uIHJldHVybiAqL1xuMzI3MzpcdFx0aWYgKG1tYXBfdW5sb2NrZWQpIHtcbjMyNzQ6XHRcdFx0KmxvY2tfZHJvcHBlZCA9IHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzMwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBLY29uZmlnIERlcGVuZGVuY2llcyBmb3IgS2h1Z2VwYWdlZCBhbmQgVXNlcmZhdWx0ZmQqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUga2VybmVsIGNvZGUgYW5kIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdGhhdCBjb250cm9sIHRoZSBpbmNsdXNpb24gb2YgYG1tL2todWdlcGFnZWQuY2AgYW5kLCBpbiBwYXJ0aWN1bGFyLCB1c2VyZmF1bHRmZCBmdW5jdGlvbmFsaXR5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIEtjb25maWcgc3ltYm9scyB0aGF0IHVsdGltYXRlbHkgcmVzdWx0IGluIHRoYXQgY29kZSBiZWluZyBjb21waWxlZC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgZGlyZWN0bHkgYXQgdGhlIGJ1aWxkIHByb2Nlc3MuIFRoZSBzaW1wbGVzdCBhcHByb2FjaCBzZWVtcyB0byBiZSB0byBjaGVjayBgbW0vTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhleSBhcmUgaGFuZGxlZCBhdCBidWlsZCB0aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtraHVnZXBhZ2VkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4NzIgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm1tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgJiM0Mzs9IG1pZ3JhdGVfZGV2aWNlLm9cbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICYjNDM7PSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICYjNDM7PSBwYWdlX2NvdW50ZXIub1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjMtI2luY2x1ZGUgXHUwMDNjbGludXgvbW1fdHlwZXMuaFx1MDAzZVxubW0vaHVnZV9tZW1vcnkuYzoyNDojaW5jbHVkZSBcdTAwM2NsaW51eC9raHVnZXBhZ2VkLmhcdTAwM2Vcbm1tL2h1Z2VfbWVtb3J5LmMtMjUtI2luY2x1ZGUgXHUwMDNjbGludXgvZnJlZXplci5oXHUwMDNlXG4tLVxubW0vaHVnZV9tZW1vcnkuYy01Ni0gKiBndWFyYW50ZWVkIHRvIGJlbmVmaXQgZnJvbSBpdC4gV2hlbiB0cmFuc3BhcmVudCBodWdlcGFnZSBzdXBwb3J0IGlzXG5tbS9odWdlX21lbW9yeS5jOjU3OiAqIGVuYWJsZWQsIGl0IGlzIGZvciBhbGwgbWFwcGluZ3MsIGFuZCBraHVnZXBhZ2VkIHNjYW5zIGFsbCBtYXBwaW5ncy5cbm1tL2h1Z2VfbWVtb3J5LmM6NTg6ICogRGVmcmFnIGlzIGludm9rZWQgYnkga2h1Z2VwYWdlZCBodWdlcGFnZSBhbGxvY2F0aW9ucyBhbmQgYnkgcGFnZSBmYXVsdHNcbm1tL2h1Z2VfbWVtb3J5LmMtNTktICogZm9yIGFsbCBodWdlcGFnZSBhbGxvY2F0aW9ucy5cbi0tXG5tbS9odWdlX21lbW9yeS5jPTEyMT11bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTQ4LVxubW0vaHVnZV9tZW1vcnkuYzoxNDk6XHQvKiBraHVnZXBhZ2VkIGRvZXNuJiMzOTt0IGNvbGxhcHNlIERBWCB2bWEsIGJ1dCBwYWdlIGZhdWx0IGlzIGZpbmUuICovXG5tbS9odWdlX21lbW9yeS5jLTE1MC1cdGlmICh2bWFfaXNfZGF4KHZtYSkpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xNTMtXHQvKlxubW0vaHVnZV9tZW1vcnkuYzoxNTQ6XHQgKiBraHVnZXBhZ2VkIHNwZWNpYWwgVk1BIGFuZCBodWdldGxiIFZNQS5cbm1tL2h1Z2VfbWVtb3J5LmMtMTU1LVx0ICogTXVzdCBiZSBjaGVja2VkIGFmdGVyIGRheCBzaW5jZSBzb21lIGRheCBtYXBwaW5ncyBtYXkgaGF2ZVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDQ1PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NTUtXHRpZiAoc2V0X2dsb2JhbF9lbmFibGVkX21vZGUobW9kZSkpIHtcbm1tL2h1Z2VfbWVtb3J5LmM6NDU2Olx0XHRpbnQgZXJyID0gc3RhcnRfc3RvcF9raHVnZXBhZ2VkKCk7XG5tbS9odWdlX21lbW9yeS5jLTQ1Ny1cbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ2My1cdFx0ICogY2hhbmdlLCBhcyB0aGUgcHJldmlvdXMgY29kZSBhbHdheXMgY2FsbGVkXG5tbS9odWdlX21lbW9yeS5jOjQ2NDpcdFx0ICogc3RhcnRfc3RvcF9raHVnZXBhZ2VkKCkgd2hpY2ggZG9lcyB0aGlzIGludGVybmFsbHkuXG5tbS9odWdlX21lbW9yeS5jLTQ2NS1cdFx0ICovXG4tLVxubW0vaHVnZV9tZW1vcnkuYz02ODA9c3RhdGljIHNzaXplX3QgYW5vbl9lbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNjkxLVx0aWYgKHNldF9hbm9uX2VuYWJsZWRfbW9kZShvcmRlciwgbW9kZSkpIHtcbm1tL2h1Z2VfbWVtb3J5LmM6NjkyOlx0XHRpbnQgZXJyID0gc3RhcnRfc3RvcF9raHVnZXBhZ2VkKCk7XG5tbS9odWdlX21lbW9yeS5jLTY5My1cbi0tXG5tbS9odWdlX21lbW9yeS5jLTY5OS1cdFx0ICogY2hhbmdlLCBhcyB0aGUgcHJldmlvdXMgY29kZSBhbHdheXMgY2FsbGVkXG5tbS9odWdlX21lbW9yeS5jOjcwMDpcdFx0ICogc3RhcnRfc3RvcF9raHVnZXBhZ2VkKCkgd2hpY2ggZG9lcyB0aGlzIGludGVybmFsbHkuXG5tbS9odWdlX21lbW9yeS5jLTcwMS1cdFx0ICovXG4tLVxubW0vaHVnZV9tZW1vcnkuYz05MzM9c3RhdGljIGludCBfX2luaXQgaHVnZXBhZ2VfaW5pdF9zeXNmcyhzdHJ1Y3Qga29iamVjdCAqKmh1Z2VwYWdlX2tvYmopXG4tLVxubW0vaHVnZV9tZW1vcnkuYy05NTktXG5tbS9odWdlX21lbW9yeS5jOjk2MDpcdGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgqaHVnZXBhZ2Vfa29iaiwgXHUwMDI2a2h1Z2VwYWdlZF9hdHRyX2dyb3VwKTtcbm1tL2h1Z2VfbWVtb3J5LmMtOTYxLVx0aWYgKGVycikge1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9OTkxPXN0YXRpYyB2b2lkIF9faW5pdCBodWdlcGFnZV9leGl0X3N5c2ZzKHN0cnVjdCBrb2JqZWN0ICpodWdlcGFnZV9rb2JqKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtOTk5LVxubW0vaHVnZV9tZW1vcnkuYzoxMDAwOlx0c3lzZnNfcmVtb3ZlX2dyb3VwKGh1Z2VwYWdlX2tvYmosIFx1MDAyNmtodWdlcGFnZWRfYXR0cl9ncm91cCk7XG5tbS9odWdlX21lbW9yeS5jLTEwMDEtXHRzeXNmc19yZW1vdmVfZ3JvdXAoaHVnZXBhZ2Vfa29iaiwgXHUwMDI2aHVnZXBhZ2VfYXR0cl9ncm91cCk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xMDUxPXN0YXRpYyBpbnQgX19pbml0IGh1Z2VwYWdlX2luaXQodm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEwNjktXG5tbS9odWdlX21lbW9yeS5jOjEwNzA6XHRlcnIgPSBraHVnZXBhZ2VkX2luaXQoKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTA3MS1cdGlmIChlcnIpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMDg3LVxubW0vaHVnZV9tZW1vcnkuYzoxMDg4Olx0ZXJyID0gc3RhcnRfc3RvcF9raHVnZXBhZ2VkKCk7XG5tbS9odWdlX21lbW9yeS5jLTEwODktXHRpZiAoZXJyKVxubW0vaHVnZV9tZW1vcnkuYzoxMDkwOlx0XHRnb3RvIGVycl9raHVnZXBhZ2VkO1xubW0vaHVnZV9tZW1vcnkuYy0xMDkxLVxubW0vaHVnZV9tZW1vcnkuYy0xMDkyLVx0cmV0dXJuIDA7XG5tbS9odWdlX21lbW9yeS5jOjEwOTM6ZXJyX2todWdlcGFnZWQ6XG5tbS9odWdlX21lbW9yeS5jLTEwOTQtXHR0aHBfc2hyaW5rZXJfZXhpdCgpO1xubW0vaHVnZV9tZW1vcnkuYy0xMDk1LWVycl9zaHJpbmtlcjpcbm1tL2h1Z2VfbWVtb3J5LmM6MTA5NjpcdGtodWdlcGFnZWRfZGVzdHJveSgpO1xubW0vaHVnZV9tZW1vcnkuYy0xMDk3LWVycl9zbGFiOlxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTUyMD12bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTUzMC1cdFx0cmV0dXJuIHJldDtcbm1tL2h1Z2VfbWVtb3J5LmM6MTUzMTpcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgdm1hLVx1MDAzZXZtX2ZsYWdzKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTUzMi1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ1NDc9c3RhdGljIGJvb2wgdGhwX3VuZGVydXNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU1MS1cbm1tL2h1Z2VfbWVtb3J5LmM6NDU1MjpcdGlmIChraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgPT0gSFBBR0VfUE1EX05SIC0gMSlcbm1tL2h1Z2VfbWVtb3J5LmMtNDU1My1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU1OS1cdFx0aWYgKHBhZ2VzX2lkZW50aWNhbChmb2xpb19wYWdlKGZvbGlvLCBpKSwgWkVST19QQUdFKDApKSkge1xubW0vaHVnZV9tZW1vcnkuYzo0NTYwOlx0XHRcdGlmICgmIzQzOyYjNDM7bnVtX3plcm9fcGFnZXMgXHUwMDNlIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSlcbm1tL2h1Z2VfbWVtb3J5LmMtNDU2MS1cdFx0XHRcdHJldHVybiB0cnVlO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU2Ni1cdFx0XHQgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDU2NzpcdFx0XHRpZiAoJiM0MzsmIzQzO251bV9maWxsZWRfcGFnZXMgXHUwMDNlPSBIUEFHRV9QTURfTlIgLSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmUpXG5tbS9odWdlX21lbW9yeS5jLTQ1NjgtXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vaW50ZXJuYWwuaC0xMC0jaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG5tbS9pbnRlcm5hbC5oOjExOiNpbmNsdWRlIFx1MDAzY2xpbnV4L2todWdlcGFnZWQuaFx1MDAzZVxubW0vaW50ZXJuYWwuaC0xMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4tLVxubW0vaW50ZXJuYWwuaD03MDk9cG1kX3QgKm1tX2ZpbmRfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpO1xuLS1cbm1tL2ludGVybmFsLmgtNzExLS8qXG5tbS9pbnRlcm5hbC5oOjcxMjogKiBpbiBtbS9raHVnZXBhZ2VkLmNcbm1tL2ludGVybmFsLmgtNzEzLSAqL1xuLS1cbm1tL2todWdlcGFnZWQuYy0xMS0jaW5jbHVkZSBcdTAwM2NsaW51eC9rdGhyZWFkLmhcdTAwM2Vcbm1tL2todWdlcGFnZWQuYzoxMjojaW5jbHVkZSBcdTAwM2NsaW51eC9raHVnZXBhZ2VkLmhcdTAwM2Vcbm1tL2todWdlcGFnZWQuYy0xMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9mcmVlemVyLmhcdTAwM2Vcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MzM9ZW51bSBzY2FuX3Jlc3VsdCB7XG4tLVxubW0va2h1Z2VwYWdlZC5jLTcwLVxubW0va2h1Z2VwYWdlZC5jOjcxOnN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmtodWdlcGFnZWRfdGhyZWFkIF9fcmVhZF9tb3N0bHk7XG5tbS9raHVnZXBhZ2VkLmM6NzI6c3RhdGljIERFRklORV9NVVRFWChraHVnZXBhZ2VkX211dGV4KTtcbm1tL2todWdlcGFnZWQuYy03My1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtNzctICovXG5tbS9raHVnZXBhZ2VkLmM6Nzg6c3RhdGljIHVuc2lnbmVkIGludCBraHVnZXBhZ2VkX3BhZ2VzX3RvX3NjYW4gX19yZWFkX21vc3RseTtcbm1tL2todWdlcGFnZWQuYzo3OTpzdGF0aWMgdW5zaWduZWQgaW50IGtodWdlcGFnZWRfcGFnZXNfY29sbGFwc2VkO1xubW0va2h1Z2VwYWdlZC5jOjgwOnN0YXRpYyB1bnNpZ25lZCBpbnQga2h1Z2VwYWdlZF9mdWxsX3NjYW5zO1xubW0va2h1Z2VwYWdlZC5jOjgxOnN0YXRpYyB1bnNpZ25lZCBpbnQga2h1Z2VwYWdlZF9zY2FuX3NsZWVwX21pbGxpc2VjcyBfX3JlYWRfbW9zdGx5ID0gMTAwMDA7XG5tbS9raHVnZXBhZ2VkLmMtODItLyogZHVyaW5nIGZyYWdtZW50YXRpb24gcG9sbCB0aGUgaHVnZXBhZ2UgYWxsb2NhdG9yIG9uY2UgZXZlcnkgbWludXRlICovXG5tbS9raHVnZXBhZ2VkLmM6ODM6c3RhdGljIHVuc2lnbmVkIGludCBraHVnZXBhZ2VkX2FsbG9jX3NsZWVwX21pbGxpc2VjcyBfX3JlYWRfbW9zdGx5ID0gNjAwMDA7XG5tbS9raHVnZXBhZ2VkLmM6ODQ6c3RhdGljIHVuc2lnbmVkIGxvbmcga2h1Z2VwYWdlZF9zbGVlcF9leHBpcmU7XG5tbS9raHVnZXBhZ2VkLmM6ODU6c3RhdGljIERFRklORV9TUElOTE9DSyhraHVnZXBhZ2VkX21tX2xvY2spO1xubW0va2h1Z2VwYWdlZC5jOjg2OnN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChraHVnZXBhZ2VkX3dhaXQpO1xubW0va2h1Z2VwYWdlZC5jLTg3LS8qXG4tLVxubW0va2h1Z2VwYWdlZC5jLTkxLSAqXG5tbS9raHVnZXBhZ2VkLmM6OTI6ICogTm90ZSB0aGF0IHRoZXNlIGFyZSBvbmx5IHJlc3BlY3RlZCBpZiBjb2xsYXBzZSB3YXMgaW5pdGlhdGVkIGJ5IGtodWdlcGFnZWQuXG5tbS9raHVnZXBhZ2VkLmMtOTMtICovXG5tbS9raHVnZXBhZ2VkLmMtOTQtI2RlZmluZSBLSFVHRVBBR0VEX01BWF9QVEVTX0xJTUlUIChIUEFHRV9QTURfTlIgLSAxKVxubW0va2h1Z2VwYWdlZC5jOjk1OnVuc2lnbmVkIGludCBraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgX19yZWFkX21vc3RseTtcbm1tL2todWdlcGFnZWQuYzo5NjpzdGF0aWMgdW5zaWduZWQgaW50IGtodWdlcGFnZWRfbWF4X3B0ZXNfc3dhcCBfX3JlYWRfbW9zdGx5O1xubW0va2h1Z2VwYWdlZC5jOjk3OnN0YXRpYyB1bnNpZ25lZCBpbnQga2h1Z2VwYWdlZF9tYXhfcHRlc19zaGFyZWQgX19yZWFkX21vc3RseTtcbm1tL2todWdlcGFnZWQuYy05OC1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTA2PXN0cnVjdCBjb2xsYXBzZV9jb250cm9sIHtcbm1tL2todWdlcGFnZWQuYzoxMDc6XHRib29sIGlzX2todWdlcGFnZWQ7XG5tbS9raHVnZXBhZ2VkLmMtMTA4LVxuLS1cbm1tL2todWdlcGFnZWQuYy0xMTEtXG5tbS9raHVnZXBhZ2VkLmM6MTEyOlx0LyogTnVtIHBhZ2VzIHNjYW5uZWQgKHNlZSBraHVnZXBhZ2VkX3BhZ2VzX3RvX3NjYW4pICovXG5tbS9raHVnZXBhZ2VkLmMtMTEzLVx0dW5zaWduZWQgaW50IHByb2dyZXNzO1xuLS1cbm1tL2todWdlcGFnZWQuYy0xMjItLyoqXG5tbS9raHVnZXBhZ2VkLmM6MTIzOiAqIHN0cnVjdCBraHVnZXBhZ2VkX3NjYW4gLSBjdXJzb3IgZm9yIHNjYW5uaW5nXG5tbS9raHVnZXBhZ2VkLmMtMTI0LSAqIEBtbV9oZWFkOiB0aGUgaGVhZCBvZiB0aGUgbW0gbGlzdCB0byBzY2FuXG4tLVxubW0va2h1Z2VwYWdlZC5jLTEyNy0gKlxubW0va2h1Z2VwYWdlZC5jOjEyODogKiBUaGVyZSBpcyBvbmx5IHRoZSBvbmUga2h1Z2VwYWdlZF9zY2FuIGluc3RhbmNlIG9mIHRoaXMgY3Vyc29yIHN0cnVjdHVyZS5cbm1tL2todWdlcGFnZWQuYy0xMjktICovXG5tbS9raHVnZXBhZ2VkLmM6MTMwOnN0cnVjdCBraHVnZXBhZ2VkX3NjYW4ge1xubW0va2h1Z2VwYWdlZC5jLTEzMS1cdHN0cnVjdCBsaXN0X2hlYWQgbW1faGVhZDtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTM1LVxubW0va2h1Z2VwYWdlZC5jOjEzNjpzdGF0aWMgc3RydWN0IGtodWdlcGFnZWRfc2NhbiBraHVnZXBhZ2VkX3NjYW4gPSB7XG5tbS9raHVnZXBhZ2VkLmM6MTM3Olx0Lm1tX2hlYWQgPSBMSVNUX0hFQURfSU5JVChraHVnZXBhZ2VkX3NjYW4ubW1faGVhZCksXG5tbS9raHVnZXBhZ2VkLmMtMTM4LX07XG4tLVxubW0va2h1Z2VwYWdlZC5jPTE0MT1zdGF0aWMgc3NpemVfdCBzY2FuX3NsZWVwX21pbGxpc2Vjc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xNDQte1xubW0va2h1Z2VwYWdlZC5jOjE0NTpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXVcXG5cJiMzNDssIGtodWdlcGFnZWRfc2Nhbl9zbGVlcF9taWxsaXNlY3MpO1xubW0va2h1Z2VwYWdlZC5jLTE0Ni19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTE0OD1zdGF0aWMgc3NpemVfdCBfX3NsZWVwX21pbGxpc2Vjc19zdG9yZShjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTU4LVx0Km1pbGxpc2VjcyA9IG1zZWNzO1xubW0va2h1Z2VwYWdlZC5jOjE1OTpcdGtodWdlcGFnZWRfc2xlZXBfZXhwaXJlID0gMDtcbm1tL2todWdlcGFnZWQuYzoxNjA6XHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2a2h1Z2VwYWdlZF93YWl0KTtcbm1tL2todWdlcGFnZWQuYy0xNjEtXG4tLVxubW0va2h1Z2VwYWdlZC5jPTE2NT1zdGF0aWMgc3NpemVfdCBzY2FuX3NsZWVwX21pbGxpc2Vjc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTY4LXtcbm1tL2todWdlcGFnZWQuYzoxNjk6XHRyZXR1cm4gX19zbGVlcF9taWxsaXNlY3Nfc3RvcmUoYnVmLCBjb3VudCwgXHUwMDI2a2h1Z2VwYWdlZF9zY2FuX3NsZWVwX21pbGxpc2Vjcyk7XG5tbS9raHVnZXBhZ2VkLmMtMTcwLX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTc0PXN0YXRpYyBzc2l6ZV90IGFsbG9jX3NsZWVwX21pbGxpc2Vjc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xNzcte1xubW0va2h1Z2VwYWdlZC5jOjE3ODpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXVcXG5cJiMzNDssIGtodWdlcGFnZWRfYWxsb2Nfc2xlZXBfbWlsbGlzZWNzKTtcbm1tL2todWdlcGFnZWQuYy0xNzktfVxuLS1cbm1tL2todWdlcGFnZWQuYz0xODE9c3RhdGljIHNzaXplX3QgYWxsb2Nfc2xlZXBfbWlsbGlzZWNzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xODQte1xubW0va2h1Z2VwYWdlZC5jOjE4NTpcdHJldHVybiBfX3NsZWVwX21pbGxpc2Vjc19zdG9yZShidWYsIGNvdW50LCBcdTAwMjZraHVnZXBhZ2VkX2FsbG9jX3NsZWVwX21pbGxpc2Vjcyk7XG5tbS9raHVnZXBhZ2VkLmMtMTg2LX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTkwPXN0YXRpYyBzc2l6ZV90IHBhZ2VzX3RvX3NjYW5fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTkzLXtcbm1tL2todWdlcGFnZWQuYzoxOTQ6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyV1XFxuXCYjMzQ7LCBraHVnZXBhZ2VkX3BhZ2VzX3RvX3NjYW4pO1xubW0va2h1Z2VwYWdlZC5jLTE5NS19XG5tbS9raHVnZXBhZ2VkLmM9MTk2PXN0YXRpYyBzc2l6ZV90IHBhZ2VzX3RvX3NjYW5fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIwNi1cbm1tL2todWdlcGFnZWQuYzoyMDc6XHRraHVnZXBhZ2VkX3BhZ2VzX3RvX3NjYW4gPSBwYWdlcztcbm1tL2todWdlcGFnZWQuYy0yMDgtXG4tLVxubW0va2h1Z2VwYWdlZC5jPTIxND1zdGF0aWMgc3NpemVfdCBwYWdlc19jb2xsYXBzZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjE3LXtcbm1tL2todWdlcGFnZWQuYzoyMTg6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyV1XFxuXCYjMzQ7LCBraHVnZXBhZ2VkX3BhZ2VzX2NvbGxhcHNlZCk7XG5tbS9raHVnZXBhZ2VkLmMtMjE5LX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MjIzPXN0YXRpYyBzc2l6ZV90IGZ1bGxfc2NhbnNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjI2LXtcbm1tL2todWdlcGFnZWQuYzoyMjc6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyV1XFxuXCYjMzQ7LCBraHVnZXBhZ2VkX2Z1bGxfc2NhbnMpO1xubW0va2h1Z2VwYWdlZC5jLTIyOC19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTIzOD1zdGF0aWMgc3NpemVfdCBkZWZyYWdfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI0NC19XG5tbS9raHVnZXBhZ2VkLmM6MjQ1OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUga2h1Z2VwYWdlZF9kZWZyYWdfYXR0ciA9XG5tbS9raHVnZXBhZ2VkLmMtMjQ2LVx0X19BVFRSX1JXKGRlZnJhZyk7XG4tLVxubW0va2h1Z2VwYWdlZC5jLTI0OC0vKlxubW0va2h1Z2VwYWdlZC5jOjI0OTogKiBtYXhfcHRlc19ub25lIGNvbnRyb2xzIGlmIGtodWdlcGFnZWQgc2hvdWxkIGNvbGxhcHNlIGh1Z2VwYWdlcyBvdmVyXG5tbS9raHVnZXBhZ2VkLmMtMjUwLSAqIGFueSB1bm1hcHBlZCBwdGVzIGluIHR1cm4gcG90ZW50aWFsbHkgaW5jcmVhc2luZyB0aGUgbWVtb3J5XG5tbS9raHVnZXBhZ2VkLmM6MjUxOiAqIGZvb3RwcmludCBvZiB0aGUgdm1hcy4gV2hlbiBtYXhfcHRlc19ub25lIGlzIDAga2h1Z2VwYWdlZCB3aWxsIG5vdFxubW0va2h1Z2VwYWdlZC5jLTI1Mi0gKiByZWR1Y2UgdGhlIGF2YWlsYWJsZSBmcmVlIG1lbW9yeSBpbiB0aGUgc3lzdGVtIGFzIGl0XG5tbS9raHVnZXBhZ2VkLmMtMjUzLSAqIHJ1bnMuIEluY3JlYXNpbmcgbWF4X3B0ZXNfbm9uZSB3aWxsIGluc3RlYWQgcG90ZW50aWFsbHkgcmVkdWNlIHRoZVxubW0va2h1Z2VwYWdlZC5jOjI1NDogKiBmcmVlIG1lbW9yeSBpbiB0aGUgc3lzdGVtIGR1cmluZyB0aGUga2h1Z2VwYWdlZCBzY2FuLlxubW0va2h1Z2VwYWdlZC5jLTI1NS0gKi9cbm1tL2todWdlcGFnZWQuYz0yNTY9c3RhdGljIHNzaXplX3QgbWF4X3B0ZXNfbm9uZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yNTkte1xubW0va2h1Z2VwYWdlZC5jOjI2MDpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXVcXG5cJiMzNDssIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSk7XG5tbS9raHVnZXBhZ2VkLmMtMjYxLX1cbm1tL2todWdlcGFnZWQuYz0yNjI9c3RhdGljIHNzaXplX3QgbWF4X3B0ZXNfbm9uZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjcyLVxubW0va2h1Z2VwYWdlZC5jOjI3MzpcdGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSA9IG1heF9wdGVzX25vbmU7XG5tbS9raHVnZXBhZ2VkLmMtMjc0LVxuLS1cbm1tL2todWdlcGFnZWQuYy0yNzYtfVxubW0va2h1Z2VwYWdlZC5jOjI3NzpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZV9hdHRyID1cbm1tL2todWdlcGFnZWQuYy0yNzgtXHRfX0FUVFJfUlcobWF4X3B0ZXNfbm9uZSk7XG4tLVxubW0va2h1Z2VwYWdlZC5jPTI4MD1zdGF0aWMgc3NpemVfdCBtYXhfcHRlc19zd2FwX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI4My17XG5tbS9raHVnZXBhZ2VkLmM6Mjg0Olx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDsldVxcblwmIzM0Oywga2h1Z2VwYWdlZF9tYXhfcHRlc19zd2FwKTtcbm1tL2todWdlcGFnZWQuYy0yODUtfVxuLS1cbm1tL2todWdlcGFnZWQuYz0yODc9c3RhdGljIHNzaXplX3QgbWF4X3B0ZXNfc3dhcF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjk3LVxubW0va2h1Z2VwYWdlZC5jOjI5ODpcdGtodWdlcGFnZWRfbWF4X3B0ZXNfc3dhcCA9IG1heF9wdGVzX3N3YXA7XG5tbS9raHVnZXBhZ2VkLmMtMjk5LVxuLS1cbm1tL2todWdlcGFnZWQuYy0zMDItXG5tbS9raHVnZXBhZ2VkLmM6MzAzOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUga2h1Z2VwYWdlZF9tYXhfcHRlc19zd2FwX2F0dHIgPVxubW0va2h1Z2VwYWdlZC5jLTMwNC1cdF9fQVRUUl9SVyhtYXhfcHRlc19zd2FwKTtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MzA2PXN0YXRpYyBzc2l6ZV90IG1heF9wdGVzX3NoYXJlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2todWdlcGFnZWQuYy0zMDkte1xubW0va2h1Z2VwYWdlZC5jOjMxMDpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXVcXG5cJiMzNDssIGtodWdlcGFnZWRfbWF4X3B0ZXNfc2hhcmVkKTtcbm1tL2todWdlcGFnZWQuYy0zMTEtfVxuLS1cbm1tL2todWdlcGFnZWQuYz0zMTM9c3RhdGljIHNzaXplX3QgbWF4X3B0ZXNfc2hhcmVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2todWdlcGFnZWQuYy0zMjMtXG5tbS9raHVnZXBhZ2VkLmM6MzI0Olx0a2h1Z2VwYWdlZF9tYXhfcHRlc19zaGFyZWQgPSBtYXhfcHRlc19zaGFyZWQ7XG5tbS9raHVnZXBhZ2VkLmMtMzI1LVxuLS1cbm1tL2todWdlcGFnZWQuYy0zMjgtXG5tbS9raHVnZXBhZ2VkLmM6MzI5OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUga2h1Z2VwYWdlZF9tYXhfcHRlc19zaGFyZWRfYXR0ciA9XG5tbS9raHVnZXBhZ2VkLmMtMzMwLVx0X19BVFRSX1JXKG1heF9wdGVzX3NoYXJlZCk7XG5tbS9raHVnZXBhZ2VkLmMtMzMxLVxubW0va2h1Z2VwYWdlZC5jOjMzMjpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqa2h1Z2VwYWdlZF9hdHRyW10gPSB7XG5tbS9raHVnZXBhZ2VkLmM6MzMzOlx0XHUwMDI2a2h1Z2VwYWdlZF9kZWZyYWdfYXR0ci5hdHRyLFxubW0va2h1Z2VwYWdlZC5jOjMzNDpcdFx1MDAyNmtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZV9hdHRyLmF0dHIsXG5tbS9raHVnZXBhZ2VkLmM6MzM1Olx0XHUwMDI2a2h1Z2VwYWdlZF9tYXhfcHRlc19zd2FwX2F0dHIuYXR0cixcbm1tL2todWdlcGFnZWQuYzozMzY6XHRcdTAwMjZraHVnZXBhZ2VkX21heF9wdGVzX3NoYXJlZF9hdHRyLmF0dHIsXG5tbS9raHVnZXBhZ2VkLmMtMzM3LVx0XHUwMDI2cGFnZXNfdG9fc2Nhbl9hdHRyLmF0dHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTM0NC1cbm1tL2todWdlcGFnZWQuYzozNDU6c3RydWN0IGF0dHJpYnV0ZV9ncm91cCBraHVnZXBhZ2VkX2F0dHJfZ3JvdXAgPSB7XG5tbS9raHVnZXBhZ2VkLmM6MzQ2Olx0LmF0dHJzID0ga2h1Z2VwYWdlZF9hdHRyLFxubW0va2h1Z2VwYWdlZC5jOjM0NzpcdC5uYW1lID0gXCYjMzQ7a2h1Z2VwYWdlZFwmIzM0Oyxcbm1tL2todWdlcGFnZWQuYy0zNDgtfTtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MzY3PXN0YXRpYyB1bnNpZ25lZCBpbnQgY29sbGFwc2VfbWF4X3B0ZXNfbm9uZShzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTM2OS17XG5tbS9raHVnZXBhZ2VkLmM6MzcwOlx0Y29uc3QgdW5zaWduZWQgaW50IG1heF9wdGVzX25vbmUgPSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmU7XG5tbS9raHVnZXBhZ2VkLmMtMzcxLVxuLS1cbm1tL2todWdlcGFnZWQuYy0zNzQtXHQvKiBmb3IgTUFEVl9DT0xMQVBTRSwgYWxsb3cgYW55IGVtcHR5L3NoYXJlZCB6ZXJvcGFnZSBQVEVzICovXG5tbS9raHVnZXBhZ2VkLmM6Mzc1Olx0aWYgKCFjYy1cdTAwM2Vpc19raHVnZXBhZ2VkKVxubW0va2h1Z2VwYWdlZC5jLTM3Ni1cdFx0cmV0dXJuIEhQQUdFX1BNRF9OUjtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9NDA2PXN0YXRpYyB1bnNpZ25lZCBpbnQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYyxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNDEyLVx0ICovXG5tbS9raHVnZXBhZ2VkLmM6NDEzOlx0aWYgKCFjYy1cdTAwM2Vpc19raHVnZXBhZ2VkKVxubW0va2h1Z2VwYWdlZC5jLTQxNC1cdFx0cmV0dXJuIEhQQUdFX1BNRF9OUjtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNDIxLVx0LyogZm9yIFBNRCBjb2xsYXBzZSwgcmVzcGVjdCB0aGUgdXNlciBkZWZpbmVkIG1heGltdW0gKi9cbm1tL2todWdlcGFnZWQuYzo0MjI6XHRyZXR1cm4ga2h1Z2VwYWdlZF9tYXhfcHRlc19zaGFyZWQ7XG5tbS9raHVnZXBhZ2VkLmMtNDIzLX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9NDM0PXN0YXRpYyB1bnNpZ25lZCBpbnQgY29sbGFwc2VfbWF4X3B0ZXNfc3dhcChzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTQ0MC1cdCAqL1xubW0va2h1Z2VwYWdlZC5jOjQ0MTpcdGlmICghY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZClcbm1tL2todWdlcGFnZWQuYy00NDItXHRcdHJldHVybiBIUEFHRV9QTURfTlI7XG4tLVxubW0va2h1Z2VwYWdlZC5jLTQ0Ni1cdC8qIGZvciBQTUQgY29sbGFwc2UsIHJlc3BlY3QgdGhlIHVzZXIgZGVmaW5lZCBtYXhpbXVtICovXG5tbS9raHVnZXBhZ2VkLmM6NDQ3Olx0cmV0dXJuIGtodWdlcGFnZWRfbWF4X3B0ZXNfc3dhcDtcbm1tL2todWdlcGFnZWQuYy00NDgtfVxuLS1cbm1tL2todWdlcGFnZWQuYz00NTA9aW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTQ1Ny1cdFx0Lypcbm1tL2todWdlcGFnZWQuYzo0NTg6XHRcdCAqIElmIHRoZSB2bWEgYmVjb21lIGdvb2QgZm9yIGtodWdlcGFnZWQgdG8gc2Nhbixcbm1tL2todWdlcGFnZWQuYy00NTktXHRcdCAqIHJlZ2lzdGVyIGl0IGhlcmUgd2l0aG91dCB3YWl0aW5nIGEgcGFnZSBmYXVsdCB0aGF0XG4tLVxubW0va2h1Z2VwYWdlZC5jLTQ2MS1cdFx0ICovXG5tbS9raHVnZXBhZ2VkLmM6NDYyOlx0XHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWEsICp2bV9mbGFncyk7XG5tbS9raHVnZXBhZ2VkLmMtNDYzLVx0XHRicmVhaztcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNDY3LVx0XHQvKlxubW0va2h1Z2VwYWdlZC5jOjQ2ODpcdFx0ICogU2V0dGluZyBWTV9OT0hVR0VQQUdFIHdpbGwgcHJldmVudCBraHVnZXBhZ2VkIGZyb20gc2Nhbm5pbmdcbm1tL2todWdlcGFnZWQuYzo0Njk6XHRcdCAqIHRoaXMgdm1hIGV2ZW4gaWYgd2UgbGVhdmUgdGhlIG1tIHJlZ2lzdGVyZWQgaW4ga2h1Z2VwYWdlZCBpZlxubW0va2h1Z2VwYWdlZC5jLTQ3MC1cdFx0ICogaXQgZ290IHJlZ2lzdGVyZWQgYmVmb3JlIFZNX05PSFVHRVBBR0Ugd2FzIHNldC5cbi0tXG5tbS9raHVnZXBhZ2VkLmMtNDc3LVxubW0va2h1Z2VwYWdlZC5jOjQ3ODppbnQgX19pbml0IGtodWdlcGFnZWRfaW5pdCh2b2lkKVxubW0va2h1Z2VwYWdlZC5jLTQ3OS17XG4tLVxubW0va2h1Z2VwYWdlZC5jLTQ4My1cbm1tL2todWdlcGFnZWQuYzo0ODQ6XHRraHVnZXBhZ2VkX3BhZ2VzX3RvX3NjYW4gPSBIUEFHRV9QTURfTlIgKiA4O1xubW0va2h1Z2VwYWdlZC5jOjQ4NTpcdGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSA9IEtIVUdFUEFHRURfTUFYX1BURVNfTElNSVQ7XG5tbS9raHVnZXBhZ2VkLmM6NDg2Olx0a2h1Z2VwYWdlZF9tYXhfcHRlc19zd2FwID0gSFBBR0VfUE1EX05SIC8gODtcbm1tL2todWdlcGFnZWQuYzo0ODc6XHRraHVnZXBhZ2VkX21heF9wdGVzX3NoYXJlZCA9IEhQQUdFX1BNRF9OUiAvIDI7XG5tbS9raHVnZXBhZ2VkLmMtNDg4LVxuLS1cbm1tL2todWdlcGFnZWQuYy00OTEtXG5tbS9raHVnZXBhZ2VkLmM6NDkyOnZvaWQgX19pbml0IGtodWdlcGFnZWRfZGVzdHJveSh2b2lkKVxubW0va2h1Z2VwYWdlZC5jLTQ5My17XG4tLVxubW0va2h1Z2VwYWdlZC5jPTUyMD1zdGF0aWMgYm9vbCBodWdlcGFnZV9lbmFibGVkKHZvaWQpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTUzNy1cbm1tL2todWdlcGFnZWQuYzo1Mzg6dm9pZCBfX2todWdlcGFnZWRfZW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS9raHVnZXBhZ2VkLmMtNTM5LXtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNTQyLVxubW0va2h1Z2VwYWdlZC5jOjU0MzpcdC8qIF9fa2h1Z2VwYWdlZF9leGl0KCkgbXVzdCBub3QgcnVuIGZyb20gdW5kZXIgdXMgKi9cbm1tL2todWdlcGFnZWQuYy01NDQtXHRWTV9CVUdfT05fTU0oY29sbGFwc2VfdGVzdF9leGl0KG1tKSwgbW0pO1xuLS1cbm1tL2todWdlcGFnZWQuYy01NTQtXG5tbS9raHVnZXBhZ2VkLmM6NTU1Olx0c3Bpbl9sb2NrKFx1MDAyNmtodWdlcGFnZWRfbW1fbG9jayk7XG5tbS9raHVnZXBhZ2VkLmMtNTU2LVx0bW1fc2xvdF9pbnNlcnQobW1fc2xvdHNfaGFzaCwgbW0sIHNsb3QpO1xuLS1cbm1tL2todWdlcGFnZWQuYy01NjAtXHQgKi9cbm1tL2todWdlcGFnZWQuYzo1NjE6XHR3YWtldXAgPSBsaXN0X2VtcHR5KFx1MDAyNmtodWdlcGFnZWRfc2Nhbi5tbV9oZWFkKTtcbm1tL2todWdlcGFnZWQuYzo1NjI6XHRsaXN0X2FkZF90YWlsKFx1MDAyNnNsb3QtXHUwMDNlbW1fbm9kZSwgXHUwMDI2a2h1Z2VwYWdlZF9zY2FuLm1tX2hlYWQpO1xubW0va2h1Z2VwYWdlZC5jOjU2MzpcdHNwaW5fdW5sb2NrKFx1MDAyNmtodWdlcGFnZWRfbW1fbG9jayk7XG5tbS9raHVnZXBhZ2VkLmMtNTY0LVxuLS1cbm1tL2todWdlcGFnZWQuYy01NjYtXHRpZiAod2FrZXVwKVxubW0va2h1Z2VwYWdlZC5jOjU2NzpcdFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFx1MDAyNmtodWdlcGFnZWRfd2FpdCk7XG5tbS9raHVnZXBhZ2VkLmMtNTY4LX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9NTc0PXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNTc4LVxubW0va2h1Z2VwYWdlZC5jOjU3OTpcdC8qIElmIGtodWdlcGFnZWQgaXMgc2Nhbm5pbmcgYW4gYW5vbnltb3VzIHZtYSwgYWxsb3cgbVRIUCBjb2xsYXBzZSAqL1xubW0va2h1Z2VwYWdlZC5jLTU4MC1cdGlmICgodHZhX2ZsYWdzID09IFRWQV9LSFVHRVBBR0VEKSBcdTAwMjZcdTAwMjYgdm1hX2lzX2Fub255bW91cyh2bWEpKVxuLS1cbm1tL2todWdlcGFnZWQuYz01ODg9c3RhdGljIGJvb2wgY29sbGFwc2VfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTU5My1cbm1tL2todWdlcGFnZWQuYzo1OTQ6dm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2todWdlcGFnZWQuYy01OTUtXHRcdFx0ICB2bV9mbGFnc190IHZtX2ZsYWdzKVxuLS1cbm1tL2todWdlcGFnZWQuYy01OTgtXHQgICAgXHUwMDI2XHUwMDI2IGNvbGxhcHNlX3Bvc3NpYmxlKHZtYSwgdm1fZmxhZ3MsIFRWQV9LSFVHRVBBR0VEKSlcbm1tL2todWdlcGFnZWQuYzo1OTk6XHRcdF9fa2h1Z2VwYWdlZF9lbnRlcih2bWEtXHUwMDNldm1fbW0pO1xubW0va2h1Z2VwYWdlZC5jLTYwMC19XG5tbS9raHVnZXBhZ2VkLmMtNjAxLVxubW0va2h1Z2VwYWdlZC5jOjYwMjp2b2lkIF9fa2h1Z2VwYWdlZF9leGl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0va2h1Z2VwYWdlZC5jLTYwMy17XG4tLVxubW0va2h1Z2VwYWdlZC5jLTYwNi1cbm1tL2todWdlcGFnZWQuYzo2MDc6XHRzcGluX2xvY2soXHUwMDI2a2h1Z2VwYWdlZF9tbV9sb2NrKTtcbm1tL2todWdlcGFnZWQuYy02MDgtXHRzbG90ID0gbW1fc2xvdF9sb29rdXAobW1fc2xvdHNfaGFzaCwgbW0pO1xubW0va2h1Z2VwYWdlZC5jOjYwOTpcdGlmIChzbG90IFx1MDAyNlx1MDAyNiBraHVnZXBhZ2VkX3NjYW4ubW1fc2xvdCAhPSBzbG90KSB7XG5tbS9raHVnZXBhZ2VkLmMtNjEwLVx0XHRtbV9zbG90X3JlbW92ZShzbG90KTtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNjEyLVx0fVxubW0va2h1Z2VwYWdlZC5jOjYxMzpcdHNwaW5fdW5sb2NrKFx1MDAyNmtodWdlcGFnZWRfbW1fbG9jayk7XG5tbS9raHVnZXBhZ2VkLmMtNjE0LVxuLS1cbm1tL2todWdlcGFnZWQuYy02MjMtXHRcdCAqIHVuZGVyIG1tYXAgc2VtIHJlYWQgbW9kZSkuIFN0b3AgaGVyZSAoYWZ0ZXIgd2UgcmV0dXJuIGFsbFxubW0va2h1Z2VwYWdlZC5jOjYyNDpcdFx0ICogcGFnZXRhYmxlcyB3aWxsIGJlIGRlc3Ryb3llZCkgdW50aWwga2h1Z2VwYWdlZCBoYXMgZmluaXNoZWRcbm1tL2todWdlcGFnZWQuYy02MjUtXHRcdCAqIHdvcmtpbmcgb24gdGhlIHBhZ2V0YWJsZXMgdW5kZXIgdGhlIG1tYXBfbG9jay5cbi0tXG5tbS9raHVnZXBhZ2VkLmM9NjY4PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IF9fY29sbGFwc2VfaHVnZV9wYWdlX2lzb2xhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTcxNS1cdFx0ICovXG5tbS9raHVnZXBhZ2VkLmM6NzE2Olx0XHRpZiAoY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCBcdTAwMjZcdTAwMjYgISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0RST1BQQUJMRSkgXHUwMDI2XHUwMDI2XG5tbS9raHVnZXBhZ2VkLmMtNzE3LVx0XHQgICAgZm9saW9fdGVzdF9sYXp5ZnJlZShmb2xpbykgXHUwMDI2XHUwMDI2ICFwdGVfZGlydHkocHRldmFsKSkge1xuLS1cbm1tL2todWdlcGFnZWQuYy04MDYtXHRcdC8qXG5tbS9raHVnZXBhZ2VkLmM6ODA3Olx0XHQgKiBJZiBjb2xsYXBzZSB3YXMgaW5pdGlhdGVkIGJ5IGtodWdlcGFnZWQsIGNoZWNrIHRoYXQgdGhlcmUgaXNcbm1tL2todWdlcGFnZWQuYy04MDgtXHRcdCAqIGVub3VnaCB5b3VuZyBwdGUgdG8ganVzdGlmeSBjb2xsYXBzaW5nIHRoZSBwYWdlXG5tbS9raHVnZXBhZ2VkLmMtODA5LVx0XHQgKi9cbm1tL2todWdlcGFnZWQuYzo4MTA6XHRcdGlmIChjYy1cdTAwM2Vpc19raHVnZXBhZ2VkIFx1MDAyNlx1MDAyNlxubW0va2h1Z2VwYWdlZC5jLTgxMS1cdFx0ICAgIChwdGVfeW91bmcocHRldmFsKSB8fCBmb2xpb190ZXN0X3lvdW5nKGZvbGlvKSB8fFxuLS1cbm1tL2todWdlcGFnZWQuYy04MTYtXG5tbS9raHVnZXBhZ2VkLmM6ODE3Olx0aWYgKHVubGlrZWx5KGNjLVx1MDAzZWlzX2todWdlcGFnZWQgXHUwMDI2XHUwMDI2ICFyZWZlcmVuY2VkKSkge1xubW0va2h1Z2VwYWdlZC5jLTgxOC1cdFx0cmVzdWx0ID0gU0NBTl9MQUNLX1JFRkVSRU5DRURfUEFHRTtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9OTM0PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IF9fY29sbGFwc2VfaHVnZV9wYWdlX2NvcHkocHRlX3QgKnB0ZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtOTcyLVxubW0va2h1Z2VwYWdlZC5jOjk3MzpzdGF0aWMgdm9pZCBraHVnZXBhZ2VkX2FsbG9jX3NsZWVwKHZvaWQpXG5tbS9raHVnZXBhZ2VkLmMtOTc0LXtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtOTc2LVxubW0va2h1Z2VwYWdlZC5jOjk3NzpcdGFkZF93YWl0X3F1ZXVlKFx1MDAyNmtodWdlcGFnZWRfd2FpdCwgXHUwMDI2d2FpdCk7XG5tbS9raHVnZXBhZ2VkLmMtOTc4LVx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEV8VEFTS19GUkVFWkFCTEUpO1xubW0va2h1Z2VwYWdlZC5jOjk3OTpcdHNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcyhraHVnZXBhZ2VkX2FsbG9jX3NsZWVwX21pbGxpc2VjcykpO1xubW0va2h1Z2VwYWdlZC5jOjk4MDpcdHJlbW92ZV93YWl0X3F1ZXVlKFx1MDAyNmtodWdlcGFnZWRfd2FpdCwgXHUwMDI2d2FpdCk7XG5tbS9raHVnZXBhZ2VkLmMtOTgxLX1cbm1tL2todWdlcGFnZWQuYy05ODItXG5tbS9raHVnZXBhZ2VkLmM6OTgzOnN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCBraHVnZXBhZ2VkX2NvbGxhcHNlX2NvbnRyb2wgPSB7XG5tbS9raHVnZXBhZ2VkLmM6OTg0Olx0LmlzX2todWdlcGFnZWQgPSB0cnVlLFxubW0va2h1Z2VwYWdlZC5jLTk4NS19O1xuLS1cbm1tL2todWdlcGFnZWQuYz05ODc9c3RhdGljIGJvb2wgY29sbGFwc2Vfc2Nhbl9hYm9ydChpbnQgbmlkLCBzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTEwMTAtXG5tbS9raHVnZXBhZ2VkLmM6MTAxMTojZGVmaW5lIGtodWdlcGFnZWRfZGVmcmFnKClcdFx0XHRcdFx0XFxcbm1tL2todWdlcGFnZWQuYy0xMDEyLVx0KHRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzIFx1MDAyNlx0XHRcdFx0XFxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTAxNC1cbm1tL2todWdlcGFnZWQuYzoxMDE1Oi8qIERlZnJhZyBmb3Iga2h1Z2VwYWdlZCB3aWxsIGVudGVyIGRpcmVjdCByZWNsYWltL2NvbXBhY3Rpb24gaWYgbmVjZXNzYXJ5ICovXG5tbS9raHVnZXBhZ2VkLmM6MTAxNjpzdGF0aWMgaW5saW5lIGdmcF90IGFsbG9jX2h1Z2VwYWdlX2todWdlcGFnZWRfZ2ZwbWFzayh2b2lkKVxubW0va2h1Z2VwYWdlZC5jLTEwMTcte1xubW0va2h1Z2VwYWdlZC5jOjEwMTg6XHRyZXR1cm4ga2h1Z2VwYWdlZF9kZWZyYWcoKSA/IEdGUF9UUkFOU0hVR0UgOiBHRlBfVFJBTlNIVUdFX0xJR0hUO1xubW0va2h1Z2VwYWdlZC5jLTEwMTktfVxuLS1cbm1tL2todWdlcGFnZWQuYz0xMDUzPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGh1Z2VwYWdlX3ZtYV9yZXZhbGlkYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTEwNTctXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbm1tL2todWdlcGFnZWQuYzoxMDU4Olx0ZW51bSB0dmFfdHlwZSB0eXBlID0gY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCA/IFRWQV9LSFVHRVBBR0VEIDpcbm1tL2todWdlcGFnZWQuYy0xMDU5LVx0XHRcdFx0IFRWQV9GT1JDRURfQ09MTEFQU0U7XG4tLVxubW0va2h1Z2VwYWdlZC5jLTEwODAtXHQgKiBBbm9uIFZNQSBleHBlY3RlZCwgdGhlIGFkZHJlc3MgbWF5IGJlIHVubWFwcGVkIHRoZW5cbm1tL2todWdlcGFnZWQuYzoxMDgxOlx0ICogcmVtYXBwZWQgdG8gZmlsZSBhZnRlciBraHVnZXBhZ2VkIHJlYXF1aXJlZCB0aGUgbW1hcF9sb2NrLlxubW0va2h1Z2VwYWdlZC5jLTEwODItXHQgKlxuLS1cbm1tL2todWdlcGFnZWQuYz0xMDkxPXN0YXRpYyBpbmxpbmUgZW51bSBzY2FuX3Jlc3VsdCBjaGVja19wbWRfc3RhdGUocG1kX3QgKnBtZClcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTA5OC1cdC8qXG5tbS9raHVnZXBhZ2VkLmM6MTA5OTpcdCAqIFRoZSBmb2xpbyBtYXkgYmUgdW5kZXIgbWlncmF0aW9uIHdoZW4ga2h1Z2VwYWdlZCBpcyB0cnlpbmcgdG9cbm1tL2todWdlcGFnZWQuYy0xMTAwLVx0ICogY29sbGFwc2UgaXQuIE1pZ3JhdGlvbiBzdWNjZXNzIG9yIGZhaWx1cmUgd2lsbCBldmVudHVhbGx5IGVuZFxuLS1cbm1tL2todWdlcGFnZWQuYz0xMTI0PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNoZWNrX3BtZF9zdGlsbF92YWxpZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTEzOC0gKiBCcmluZyBtaXNzaW5nIHBhZ2VzIGluIGZyb20gc3dhcCwgdG8gY29tcGxldGUgVEhQIGNvbGxhcHNlLlxubW0va2h1Z2VwYWdlZC5jOjExMzk6ICogT25seSBkb25lIGlmIGtodWdlcGFnZWRfc2Nhbl9wbWQgYmVsaWV2ZXMgaXQgaXMgd29ydGh3aGlsZS5cbm1tL2todWdlcGFnZWQuYy0xMTQwLSAqXG4tLVxubW0va2h1Z2VwYWdlZC5jPTEyMzk9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgYWxsb2NfY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqKmZvbGlvcCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0va2h1Z2VwYWdlZC5jLTEyNDEte1xubW0va2h1Z2VwYWdlZC5jOjEyNDI6XHRnZnBfdCBnZnAgPSAoY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCA/IGFsbG9jX2h1Z2VwYWdlX2todWdlcGFnZWRfZ2ZwbWFzaygpIDpcbm1tL2todWdlcGFnZWQuYy0xMjQzLVx0XHQgICAgIEdGUF9UUkFOU0hVR0UpO1xuLS1cbm1tL2todWdlcGFnZWQuYz0xNTkyPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NjYW5fcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xNTk4LVx0dW5zaWduZWQgaW50IG1heF9wdGVzX25vbmUgPSBjb2xsYXBzZV9tYXhfcHRlc19ub25lKGNjLCB2bWEsIEhQQUdFX1BNRF9PUkRFUik7XG5tbS9raHVnZXBhZ2VkLmM6MTU5OTpcdGVudW0gdHZhX3R5cGUgdHZhX2ZsYWdzID0gY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCA/IFRWQV9LSFVHRVBBR0VEIDogVFZBX0ZPUkNFRF9DT0xMQVBTRTtcbm1tL2todWdlcGFnZWQuYy0xNjAwLVx0cG1kX3QgKnBtZDtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTcwMC1cdFx0ICovXG5tbS9raHVnZXBhZ2VkLmM6MTcwMTpcdFx0aWYgKGNjLVx1MDAzZWlzX2todWdlcGFnZWQgXHUwMDI2XHUwMDI2ICEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9EUk9QUEFCTEUpIFx1MDAyNlx1MDAyNlxubW0va2h1Z2VwYWdlZC5jLTE3MDItXHRcdCAgICBmb2xpb190ZXN0X2xhenlmcmVlKGZvbGlvKSBcdTAwMjZcdTAwMjYgIXB0ZV9kaXJ0eShwdGV2YWwpKSB7XG4tLVxubW0va2h1Z2VwYWdlZC5jLTE3NjQtXHRcdC8qXG5tbS9raHVnZXBhZ2VkLmM6MTc2NTpcdFx0ICogSWYgY29sbGFwc2Ugd2FzIGluaXRpYXRlZCBieSBraHVnZXBhZ2VkLCBjaGVjayB0aGF0IHRoZXJlIGlzXG5tbS9raHVnZXBhZ2VkLmMtMTc2Ni1cdFx0ICogZW5vdWdoIHlvdW5nIHB0ZSB0byBqdXN0aWZ5IGNvbGxhcHNpbmcgdGhlIHBhZ2Vcbm1tL2todWdlcGFnZWQuYy0xNzY3LVx0XHQgKi9cbm1tL2todWdlcGFnZWQuYzoxNzY4Olx0XHRpZiAoY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCBcdTAwMjZcdTAwMjZcbm1tL2todWdlcGFnZWQuYy0xNzY5LVx0XHQgICAgKHB0ZV95b3VuZyhwdGV2YWwpIHx8IGZvbGlvX3Rlc3RfeW91bmcoZm9saW8pIHx8XG4tLVxubW0va2h1Z2VwYWdlZC5jLTE3NzMtXHR9XG5tbS9raHVnZXBhZ2VkLmM6MTc3NDpcdGlmIChjYy1cdTAwM2Vpc19raHVnZXBhZ2VkIFx1MDAyNlx1MDAyNlxubW0va2h1Z2VwYWdlZC5jLTE3NzUtXHRcdCAgICghcmVmZXJlbmNlZCB8fFxuLS1cbm1tL2todWdlcGFnZWQuYy0xNzkxLW91dDpcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODE2NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLgoKKipJbnZlc3RpZ2F0aW5nIFRSQU5TUEFSRU5UX0hVR0VQQUdFIGFuZCBVU0VSRkFVTFRGRCBpbiBLY29uZmlnKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGZlYXR1cmVzLCBUUkFOU1BBUkVOVF9IVUdFUEFHRSBhbmQgVVNFUkZBVUxURkQsIGFyZSBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGVzIOKAkyBzcGVjaWZpY2FsbHksIEkmIzM5O2xsIHN0YXJ0IHdpdGggYG1tL0tjb25maWdgIGFuZCBzZWUgd2hhdCB0aGUgZGVmaW5pdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhcmUgZm9yIFRSQU5TUEFSRU5UX0hVR0VQQUdFLiBUaGVuLCBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSB0aGUgYEtjb25maWdgIGZvciBVU0VSRkFVTFRGRCwgd2hpY2ggaXMgbGlrZWx5IGluIG9yIG5lYXIgdGhlIHJlbGV2YW50IGNvZGUsIGBmcy91c2VyZmF1bHRmZC5jYCBvciBhIHNpbWlsYXIgZmlsZXN5c3RlbS1zcGVjaWZpYyBkaXJlY3RvcnkuIEkmIzM5O20gYWZ0ZXIgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzIHRvIGdldCBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGFyZSBjb250cm9sbGVkIGF0IGNvbXBpbGUgdGltZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODM1PWNvbmZpZyBNTV9JRFxuLS1cbm1tL0tjb25maWctODM3LVxubW0vS2NvbmZpZzo4Mzg6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04MzktXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg1Nj1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg2MS1cbm1tL0tjb25maWc6ODYyOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xubW0vS2NvbmZpZy04NjMtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NjgtXG5tbS9LY29uZmlnOjg2OTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXG5tbS9LY29uZmlnLTg3MC1cdFx0Ym9vbCBcJiMzNDttYWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NzctXG5tbS9LY29uZmlnOjg3ODpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxubW0vS2NvbmZpZy04NzktXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg4NT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg5NC1cbm1tL0tjb25maWc6ODk1Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcbm1tL0tjb25maWctODk2LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MDQtXG5tbS9LY29uZmlnOjkwNTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05MDYtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MTItXG5tbS9LY29uZmlnOjkxMzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTkxNC1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTIwLVxubW0vS2NvbmZpZzo5MjE6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTIyLVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9OTMwPWNob2ljZVxuLS1cbm1tL0tjb25maWctOTM5LVxubW0vS2NvbmZpZzo5NDA6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxubW0vS2NvbmZpZy05NDEtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0OC1cbm1tL0tjb25maWc6OTQ5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTk1MC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk1Ni1cbm1tL0tjb25maWc6OTU3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTU4LVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NjQtXG5tbS9LY29uZmlnOjk2NTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05NjYtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MTM3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBVc2VyZmF1bHRmZCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGB1c2VyZmF1bHRmZGAgZmVhdHVyZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIHNob3VsZCBwcm9iYWJseSByZWZyZXNoIG15IG1lbW9yeSBvZiBob3cgdGhpcyBpcyBjb25maWd1cmVkLiBMZXQmIzM5O3Mgc3RhcnQgYnkgaGl0dGluZyB0aGUgc291cmNlIGNvZGUgZGlyZWN0bHkg4oCTIHNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IGBmcy91c2VyZmF1bHRmZC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBUaGVuLCB0byBmaWd1cmUgb3V0IGhvdyBpdCYjMzk7cyBlbmFibGVkIG9yIGRpc2FibGVkIGF0IGJ1aWxkIHRpbWUsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgdGhlcmUmIzM5O3MgYSBjb3JyZXNwb25kaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZmxleGlibGUgdGhpcyBmZWF0dXJlIGlzIGFuZCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBjaG9pY2VzLiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgb3Igb3ZlcmFsbCBzeXN0ZW0gYmVoYXZpb3IuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgdG8gd2hhdCBpcyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYz0xMTY2PXN0YXRpYyB2b2lkIHNob3dfc21hcF92bWFfZmxhZ3Moc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTIzNi0jZW5kaWYgLyogQ09ORklHX0FSQ0hfSEFTX1BLRVlTICovXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTIzNzojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUlxuZnMvcHJvYy90YXNrX21tdS5jLTEyMzgtXHRcdFtpbG9nMihWTV9VRkZEX01JTk9SKV1cdD0gXCYjMzQ7dWlcJiMzNDssXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTIzOTojZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUiAqL1xuZnMvcHJvYy90YXNrX21tdS5jOjEyNDA6I2lmZGVmIENPTkZJR19VU0VSRkFVTFRGRF9SV1BcbmZzL3Byb2MvdGFza19tbXUuYy0xMjQxLVx0XHRbaWxvZzIoVk1fVUZGRF9SV1ApXVx0PSBcJiMzNDt1clwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk2MTUKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqVHJhY2luZyB0aGUgVVNFUkZBVUxURkQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZXhhY3QgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYFVTRVJGQVVMVEZEYCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIHN5c3RlbS4gVGhpcyBpcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgaXQgcmVxdWlyZXMgYSBzeXN0ZW1hdGljIGFwcHJvYWNoLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGxldmVyYWdlIHRoZSBLY29uZmlnIGluZnJhc3RydWN0dXJlIGl0c2VsZiwga25vd2luZyBob3cgY3J1Y2lhbCBpdCBpcyB0byBrZXJuZWwgYnVpbGQgY29uZmlndXJhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGBLY29uZmlnYCBsYW5ndWFnZSBhbmQgc2VhcmNoIHRvb2xzIHRvIHBpbnBvaW50IGV2ZXJ5IGluc3RhbmNlIG9mIHRoYXQgc3ltYm9sLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3IgYGZpbmRgIGNvbW1hbmQsIG1heWJlIHVzaW5nIGEgcmVjdXJzaXZlIHNlYXJjaCBhY3Jvc3MgdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgbG9va2luZyBmb3IgdGhlIHN0cmluZyAmIzM0O1VTRVJGQVVMVEZEJiMzNDsuCgpIb3dldmVyLCBJIGtub3cgdGhhdCBqdXN0IHNlYXJjaGluZyBmb3IgdGhlIHN0cmluZyAmIzM0O1VTRVJGQVVMVEZEJiMzNDsgbWlnaHQgYmUgdG9vIGJyb2FkOyB0aGF0IGNvdWxkIHBpY2sgdXAgYW55IHVzYWdlIG9mIHRoYXQgbmFtZSwgbm90IG5lY2Vzc2FyaWx5IHRoZSAqZGVmaW5pdGlvbiogb2YgdGhlIGNvbmZpZyBvcHRpb24uIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UuIEkmIzM5O2xsIGZvY3VzIG9uIEtjb25maWcgZmlsZXMgKC5jb25maWcgb3IgS2NvbmZpZyBmaWxlcykgZGlyZWN0bHkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGZvY3VzIHN0YXlzIG9uIHRoZSBhY3R1YWwgZGVmaW5pdGlvbi4gVGhlIG1vc3QgZWZmZWN0aXZlIGFwcHJvYWNoLCBJIHRoaW5rLCB3aWxsIGludm9sdmUgc2VhcmNoaW5nIGZvciB0aGUgYGNvbmZpZ2Aga2V5d29yZCBmb2xsb3dlZCBieSBgVVNFUkZBVUxURkRgLCBzbyBJIGNhbiBxdWlja2x5IGlkZW50aWZ5IHRoZSBkZWZpbml0aW9uIGl0c2VsZi4KCk9uY2UgSSBoYXZlIHRob3NlIGhpdHMsIEkmIzM5O2xsIG5lZWQgdG8gcXVpY2tseSBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGluIGVhY2ggZmlsZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBhc3NvY2lhdGVkIHdpdGggYFVTRVJGQVVMVEZEYC4gV2hhdCBvdGhlciBvcHRpb25zIGRvZXMgaXQgZGVwZW5kIG9uPyBBcmUgdGhlcmUgYW55IHNlbGVjdCBzdGF0ZW1lbnRzIGludm9sdmVkPyBXaGF0JiMzOTtzIHRoZSBoZWxwIHRleHQgYXNzb2NpYXRlZCB3aXRoIGl0PyBUaGUgYnJvYWRlciBjb250ZXh0IHdpbGwgcmV2ZWFsIHRoZSByYXRpb25hbGUgYmVoaW5kIGl0cyBhdmFpbGFiaWxpdHkgYW5kIGFueSBwcmVjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQuIEkmIzM5O2xsIGxpa2VseSBuZWVkIHRvIHRyYWNlIHRoZSBwYXRocyB0aHJvdWdoIGFueSBgaWZgIHN0YXRlbWVudHMgb3IgZGVwZW5kZW5jaWVzIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgcXVpY2sgYXVkaXQgd2lsbCBnaXZlIG1lIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSBpbiB0aGUga2VybmVsLiBGaW5hbGx5LCBJJiMzOTtsbCBvcmdhbml6ZSBteSBmaW5kaW5ncyB0byBwcm92aWRlIGEgY29tcGxldGUgb3ZlcnZpZXcgb2YgdGhlIG9wdGlvbnMgcmVsYXRlZCB0byBgVVNFUkZBVUxURkRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNFUkZBVUxURkQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzc3PWNvbmZpZyBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1Jcbi0tXG5tbS9LY29uZmlnLTEzODEtXG5tbS9LY29uZmlnOjEzODI6Y29uZmlnIFVTRVJGQVVMVEZEX1JXUFxubW0vS2NvbmZpZy0xMzgzLVx0ZGVmX2Jvb2wgeVxuLS1cbm1tL0tjb25maWctMTM5MC1cbm1tL0tjb25maWc6MTM5MTptZW51Y29uZmlnIFVTRVJGQVVMVEZEXG5tbS9LY29uZmlnLTEzOTItXHRib29sIFwmIzM0O0VuYWJsZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMTg2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIGFyZWEgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIHJlbGV2YW50IHNldHRpbmdzIGFyZSBsaWtlbHkgY2x1c3RlcmVkIHNvbWV3aGVyZSBhcm91bmQgdGhlIGBtbS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYmV0d2VlbiBsaW5lcyAxMzcwIGFuZCAxNDAwLiBUaGlzIHJhbmdlIGZlZWxzIGxpa2UgYSBwbGF1c2libGUgc3BvdCBmb3IgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRvIHJlc2lkZS4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCB3ZSBjYW4gdW5jb3Zlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzcwOlx0XHQgIGRpZmZlcmVuY2UgaW4gdGhlaXIgbmFtZS5cbjEzNzE6XHRcbjEzNzI6XHRjb25maWcgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQXG4xMzczOlx0XHRib29sXG4xMzc0Olx0XHRoZWxwXG4xMzc1Olx0XHQgIEFyY2ggaGFzIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gc3VwcG9ydFxuMTM3NjpcdFxuMTM3NzpcdGNvbmZpZyBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcbjEzNzg6XHRcdGJvb2xcbjEzNzk6XHRcdGhlbHBcbjEzODA6XHRcdCAgQXJjaCBoYXMgdXNlcmZhdWx0ZmQgbWlub3IgZmF1bHQgc3VwcG9ydFxuMTM4MTpcdFxuMTM4MjpcdGNvbmZpZyBVU0VSRkFVTFRGRF9SV1BcbjEzODM6XHRcdGRlZl9ib29sIHlcbjEzODQ6XHRcdGRlcGVuZHMgb24gNjRCSVQgXHUwMDI2XHUwMDI2IEFSQ0hfSEFTX1BURV9QUk9UTk9ORSBcdTAwMjZcdTAwMjYgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQXG4xMzg1Olx0XHRoZWxwXG4xMzg2Olx0XHQgIFVzZXJmYXVsdGZkIHJlYWQtd3JpdGUgcHJvdGVjdGlvbiAoVUZGRElPX1JXUFJPVEVDVCkgZGVsaXZlcnMgYVxuMTM4NzpcdFx0ICB1c2VyZmF1bHRmZCBub3RpZmljYXRpb24gb24gZXZlcnkgYWNjZXNzIC0tIHJlYWQgb3Igd3JpdGUgLS0gdG8gYVxuMTM4ODpcdFx0ICBwcm90ZWN0ZWQgcmFuZ2UsIGxldHRpbmcgdXNlcnNwYWNlIG9ic2VydmUgdGhlIHdvcmtpbmcgc2V0IG9mIGFcbjEzODk6XHRcdCAgcHJvY2Vzcy5cbjEzOTA6XHRcbjEzOTE6XHRtZW51Y29uZmlnIFVTRVJGQVVMVEZEXG4xMzkyOlx0XHRib29sIFwmIzM0O0VuYWJsZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsXCYjMzQ7XG4xMzkzOlx0XHRkZXBlbmRzIG9uIE1NVVxuMTM5NDpcdFx0aGVscFxuMTM5NTpcdFx0ICBFbmFibGUgdGhlIHVzZXJmYXVsdGZkKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gaW50ZXJjZXB0IGFuZFxuMTM5NjpcdFx0ICBoYW5kbGUgcGFnZSBmYXVsdHMgaW4gdXNlcmxhbmQuXG4xMzk3Olx0XG4xMzk4Olx0aWYgVVNFUkZBVUxURkRcbjEzOTk6XHRjb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4xNDAwOlx0XHRib29sIFwmIzM0O1VzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gc3VwcG9ydCBmb3Igc2htZW0vaHVnZXRsYmZzXCYjMzQ7XG4xNDAxOlx0XHRkZWZhdWx0IHlcbjE0MDI6XHRcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQXG4xNDAzOlx0XG4xNDA0Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwODM4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyBgdXNlcmZhdWx0ZmRfbWlub3JgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgdXNlcmZhdWx0ZmRfbWlub3JgIHZhcmlhYmxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8ga25vdyAqd2hlcmUqIHRoaXMgaXMgZGVmaW5lZC4gTXkgaW5zdGluY3QgaXMgdG8gZ3JlcCBmb3IgaXQg4oCTIHRoYXQmIzM5O3MgdGhlIGZhc3Rlc3Qgd2F5IHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIGl0cyB1c2FnZSBhbmQgbG9jYXRpb24gd2l0aGluIHRoZSBjb2RlYmFzZS4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgbGVhZCBtZSB0byB0aGUgcmVsZXZhbnQgc3RydWN0dXJlIG9yIGZ1bmN0aW9uIGRlZmluaXRpb24uIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNlcmZhdWx0ZmRfbWlub3ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MjEyPXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yMTYtXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoyMTc6c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX21pbm9yKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjE4LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0zNjE9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX3dwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTM2NS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjM2NjpzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfbWlub3Ioc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0zNjcte1xuLS1cbm1tL2h1Z2V0bGIuYz01NzUyPXN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfbm9fcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9odWdldGxiLmMtNTg3OS1cdFx0LyogQ2hlY2sgZm9yIHBhZ2UgaW4gdXNlcmZhdWx0IHJhbmdlLiAqL1xubW0vaHVnZXRsYi5jOjU4ODA6XHRcdGlmICh1c2VyZmF1bHRmZF9taW5vcih2bWEpKSB7XG5tbS9odWdldGxiLmMtNTg4MS1cdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLS1cbm1tL2todWdlcGFnZWQuYz0xODU2PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xOTA1LVx0ICovXG5tbS9raHVnZXBhZ2VkLmM6MTkwNjpcdGlmICh1c2VyZmF1bHRmZF9taW5vcih2bWEpKVxubW0va2h1Z2VwYWdlZC5jLTE5MDctXHRcdHJldHVybiBTQ0FOX1BURV9VRkZEO1xuLS1cbm1tL3NobWVtLmM9MjQxNz1zdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9zaG1lbS5jLTI0NDEtXHRmb2xpbyA9IGZpbGVtYXBfZ2V0X2VudHJ5KGlub2RlLVx1MDAzZWlfbWFwcGluZywgaW5kZXgpO1xubW0vc2htZW0uYzoyNDQyOlx0aWYgKGZvbGlvIFx1MDAyNlx1MDAyNiB2bWEgXHUwMDI2XHUwMDI2IHVzZXJmYXVsdGZkX21pbm9yKHZtYSkpIHtcbm1tL3NobWVtLmMtMjQ0My1cdFx0aWYgKCF4YV9pc192YWx1ZShmb2xpbykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNTg5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBVc2VyZmF1bHRmZCBLZXJuZWwgSGVhZGVyKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBpbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaGAgaGVhZGVyIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDIxNy4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCBhIHBhcnRpY3VsYXIgcGllY2Ugb2YgZnVuY3Rpb25hbGl0eSBvciBkYXRhIHN0cnVjdHVyZSByZWxhdGVkIHRvIHVzZXJmYXVsdGZkIHRoYXQmIzM5O3MgZGVmaW5lZCBvciB1c2VkIGFyb3VuZCB0aGF0IGFyZWEuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gZXhwZWN0aW5nIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGNvbnRleHQsIGFuZCBhbnkgc3VidGxldGllcyBpbiB0aGUgaW1wbGVtZW50YXRpb24gc2hvdWxkIGp1bXAgb3V0IGF0IG1lIGFzIEkgcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgZ29hbCBpcyB0byBleHRyYWN0IGEgc3BlY2lmaWMgYXNwZWN0IG9mIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMDpcdH1cbiAyMTE6XHRcbiAyMTI6XHRzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gMjEzOlx0e1xuIDIxNDpcdFx0cmV0dXJuIHZtYV90ZXN0X2FueV9tYXNrKHZtYSwgVk1BX1VGRkRfV1ApO1xuIDIxNTpcdH1cbiAyMTY6XHRcbiAyMTc6XHRzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfbWlub3Ioc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gMjE4Olx0e1xuIDIxOTpcdFx0cmV0dXJuIHZtYV90ZXN0X2FueV9tYXNrKHZtYSwgVk1BX1VGRkRfTUlOT1IpO1xuIDIyMDpcdH1cbiAyMjE6XHRcbiAyMjI6XHRzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfcndwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIDIyMzpcdHtcbiAyMjQ6XHRcdC8qXG4gMjI1Olx0XHQgKiBDYWxsZXJzIGdhdGUgUEFHRV9OT05FIHVzYWdlIG9uIHRoaXM7IFBBR0VfTk9ORSBpcyBhIEJVSUxEX0JVRygpXG4gMjI2Olx0XHQgKiB3aXRob3V0IENPTkZJR19BUkNIX0hBU19QVEVfUFJPVE5PTkUsIHNvIGZvbGQgdG8gZmFsc2UuXG4gMjI3Olx0XHQgKi9cbiAyMjg6XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQVJDSF9IQVNfUFRFX1BST1ROT05FKSlcbiAyMjk6XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjEzNQoJCQkJCQkJb3V0cHV0OiA2MwoJCQkJCQkJdGhvdWdodHM6IDczMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHVzZXJmYXVsdGZkIGFuZCBUcmFuc3BhcmVudCBIdWdlcGFnZXMgSW50ZXJhY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgaG93IFRyYW5zcGFyZW50IEh1Z2VwYWdlcyAoVEhQKSBpbnRlcmFjdHMgd2l0aCB1c2VyZmF1bHRmZCwgc3BlY2lmaWNhbGx5IHRoZSBtaW5vciBmYXVsdCBoYW5kbGluZy4gVGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAsIHdoZXJlIHRoZXkmIzM5O3ZlIGFkZGVkIGEgY2hlY2s6IGlmIGEgVk1BIGlzIHJlZ2lzdGVyZWQgZm9yIHVzZXJmYXVsdGZkIG1pbm9yIGhhbmRsaW5nLCBkb24mIzM5O3QgY29sbGFwc2UgaXQgaW50byBhIFRIUC4gVGhpcyBtYWtlcyBzZW5zZTsgdXNlcmZhdWx0ZmQgbWlub3IgVk1BcyBhcmUgZXhwbGljaXRseSBtYW5hZ2VkIGJ5IHVzZXJzcGFjZSwgc28gY29sbGFwc2luZyB0aGVtIHdvdWxkIGJyZWFrIHRoYXQuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyB3b3J0aCBmdXp6aW5nPyYjMzQ7IEFic29sdXRlbHkhIFRoaXMgaXMgc21hY2sgZGFiIGluIHRoZSBtaWRkbGUgb2YgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIGBraHVnZXBhZ2VkYCwgYHVzZXJmYXVsdGZkYCwgYW5kIFRIUHMg4oCTIGFsbCBvZiB3aGljaCBhcmUgY3JpdGljYWwgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhpcyBjb2RlIGlzIHRvdWNoZWQgYnkgc2V2ZXJhbCBzeXN0ZW0gY2FsbHMgdGhhdCBhcmUgbGlrZWx5IGV4cG9zZWQgdG8gZnV6emluZy4gSSBjYW4gc2VlIHRoaXMgYmVpbmcgdHJpZ2dlcmVkIHRocm91Z2ggYHVzZXJmYXVsdGZkYCwgYG1hZHZpc2VgIHdpdGggYE1BRFZfQ09MTEFQU0VgLCBgbW1hcGAgY2FsbHMsIHNobWVtLCB0bXBmcywgZmlsZS1iYWNrZWQgbWVtb3J5IGludGVyYWN0aW9ucywgYW5kIGV2ZW4gaG93IHRoZSBga2h1Z2VwYWdlZGAga3RocmVhZCBpdHNlbGYgd29ya3MuIEl0JiMzOTtzIGEgZ29sZG1pbmUuCgpUbyBjb25maXJtIHJlYWNoYWJpbGl0eSwgSSBuZWVkIHRvIGtub3cgaG93IHVzZXJzcGFjZSBjYW4gYWN0dWFsbHkgY3JlYXRlIGEgdXNlcmZhdWx0ZmQgbWlub3IgcmVnaXN0ZXJlZCBWTUEuIEl0IGxvb2tzIGxpa2UgYHNobWVtYCwgYGh1Z2V0bGJmc2AsIG9yIGEgcmVndWxhciBmaWxlIGNvdWxkIGRvIGl0LiBUaGVuLCBjYWxsaW5nIGBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpYCBvciBqdXN0IGxldHRpbmcgYGtodWdlcGFnZWRgIHNjYW4gaXQsIG9yIGV2ZW4gdXNpbmcgYHVwcm9iZXNgIG9yIGBjb2xsYXBzZV9maWxlYCBzaG91bGQgYmUgZW5vdWdoIHRvIHRyaWdnZXIgdGhpcy4KCkkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYFVTRVJGQVVMVEZEYCBhcmUgZW5hYmxlZCB0byBldmVuIHRlc3QgdGhpcy4KCk5vdywgZm9yIGZvY3VzIHN5bWJvbHPigKYgSSBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIGVudHJ5cG9pbnRzLiBMZXQmIzM5O3Mgc2VlLi4uIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGxvb2tzIGltcG9ydGFudCwgYnV0IGl0JiMzOTtzIHN0YXRpYywgc28gdGhhdCYjMzk7cyBub3QgaWRlYWwuIEhvd2V2ZXIsIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgaXMgKm5vdCogc3RhdGljLCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBvbmUgdG8gbG9vayBhdCEgU2FtZSBmb3IgYG1hZHZpc2VfY29sbGFwc2VgLCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgLCBhbmQgYGh1Z2VwYWdlX21hZHZpc2VgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoZWlyIGRlY2xhcmF0aW9ucyBhbmQgZGVmaW5pdGlvbnMgdG8gYmUgc3VyZSB0aGV5IGFyZSBub24tc3RhdGljIGFuZCBleHBvc2VkIHRvIHRoZSB3aWRlciBrZXJuZWwgYW5kIGhlbmNlLCB0byB1c2Vyc3BhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oaW50fHZvaWR8ZW51bXxib29sfHVuc2lnbmVkfGxvbmcpIChtYWR2aXNlX2NvbGxhcHNlfGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwfGh1Z2VwYWdlX21hZHZpc2V8a2h1Z2VwYWdlZCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jPTQzND1zdGF0aWMgdW5zaWduZWQgaW50IGNvbGxhcHNlX21heF9wdGVzX3N3YXAoc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjLFxuLS1cbm1tL2todWdlcGFnZWQuYy00NDktXG5tbS9raHVnZXBhZ2VkLmM6NDUwOmludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0va2h1Z2VwYWdlZC5jLTQ1MS1cdFx0ICAgICB2bV9mbGFnc190ICp2bV9mbGFncywgaW50IGFkdmljZSlcbi0tXG5tbS9raHVnZXBhZ2VkLmM9NTg4PXN0YXRpYyBib29sIGNvbGxhcHNlX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2todWdlcGFnZWQuYy01OTMtXG5tbS9raHVnZXBhZ2VkLmM6NTk0OnZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9raHVnZXBhZ2VkLmMtNTk1LVx0XHRcdCAgdm1fZmxhZ3NfdCB2bV9mbGFncylcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTg1Nj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjEwMC0gKi9cbm1tL2todWdlcGFnZWQuYzoyMTAxOnZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2todWdlcGFnZWQuYy0yMTAyLVx0XHRib29sIGluc3RhbGxfcG1kKVxuLS1cbm1tL2todWdlcGFnZWQuYz0zMTI0PWludCBzdGFydF9zdG9wX2todWdlcGFnZWQodm9pZClcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzE1MC1cbm1tL2todWdlcGFnZWQuYzozMTUxOnZvaWQga2h1Z2VwYWdlZF9taW5fZnJlZV9rYnl0ZXNfdXBkYXRlKHZvaWQpXG5tbS9raHVnZXBhZ2VkLmMtMzE1Mi17XG4tLVxubW0va2h1Z2VwYWdlZC5jPTMxNjM9c3RhdGljIGludCBtYWR2aXNlX2NvbGxhcHNlX2Vycm5vKGVudW0gc2Nhbl9yZXN1bHQgcilcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzE5NC1cbm1tL2todWdlcGFnZWQuYzozMTk1OmludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0va2h1Z2VwYWdlZC5jLTMxOTYtXHRcdCAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgKmxvY2tfZHJvcHBlZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQwMTYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBSZWxldmFudCBTeW1ib2xzIGFuZCBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gY29uc2lkZXJpbmcgYWxsIHRoZSByZWxldmFudCBzeW1ib2xzIGluIHRoaXMgYXJlYS4gTGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGJlIGltcG9ydGFudCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBtYWluIHN1YmplY3QuIFJpZ2h0LCBJIHNob3VsZCBiZSBsb29raW5nIGF0IGBtYWR2aXNlX2NvbGxhcHNlYCwgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCwgYW5kIGBodWdlcGFnZV9tYWR2aXNlYC4gVGhvc2UgZmVlbCBsaWtlIHRoZXkmIzM5O3JlIHJlbGF0ZWQsIHNvIEkgbmVlZCB0byBrZWVwIHRoZW0gaW4gbWluZCBhcyBJIGRpZyBkZWVwZXIuCgpOZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSBlc3NlbnRpYWwsIHN0YXJ0aW5nIHdpdGggYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkga25vdyB0aGF0IGRyaXZlcyB0aGUgaW5jbHVzaW9uIG9mIGBodWdlX21lbW9yeS5vYCBhbmQgYGtodWdlcGFnZWQub2AgaW4gYG1tL01ha2VmaWxlYCwgYnV0IEkgc2hvdWxkIGNoZWNrIHRoZSBtYWtlIGZpbGUgdG8gY29uZmlybS4KClRoZW4sIHRoZXJl4oCZcyBgQ09ORklHX1VTRVJGQVVMVEZEYC4gSSBzaG91bGQgbG9vayBpbnRvIHRoYXQgaW4gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SYCwgcGFydGljdWxhcmx5IHNpbmNlIHg4NiBhbmQgb3RoZXIgYXJjaGl0ZWN0dXJlcyBzZWxlY3QgaXQuIEkgc2hvdWxkIGdvIGFuZCBjaGVjayB0aGF0IGFzIHdlbGwgdG8gcm91bmQgb3V0IHRoZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTI1NC1cdHNlbGVjdCBUSFJFQURfSU5GT19JTl9UQVNLXG5hcmNoL2FybTY0L0tjb25maWc6MjU1Olx0c2VsZWN0IEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUiBpZiBVU0VSRkFVTFRGRFxuYXJjaC9hcm02NC9LY29uZmlnLTI1Ni1cdHNlbGVjdCBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfV1AgaWYgVVNFUkZBVUxURkRcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnPTI9Y29uZmlnIExPT05HQVJDSFxuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWctMTMwLVx0c2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBpZiA2NEJJVFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzoxMzE6XHRzZWxlY3QgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SIGlmIDY0QklUIFx1MDAyNlx1MDAyNiBVU0VSRkFVTFRGRFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy0xMzItXHRzZWxlY3QgSEFWRV9BU01fTU9EVkVSU0lPTlNcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTE1My1cdHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEIGlmIDY0QklUIFx1MDAyNlx1MDAyNiBNTVVcbmFyY2gvcmlzY3YvS2NvbmZpZzoxNTQ6XHRzZWxlY3QgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SIGlmIDY0QklUIFx1MDAyNlx1MDAyNiBVU0VSRkFVTFRGRFxuYXJjaC9yaXNjdi9LY29uZmlnLTE1NS1cdHNlbGVjdCBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfV1AgaWYgNjRCSVQgXHUwMDI2XHUwMDI2IE1NVSBcdTAwMjZcdTAwMjYgVVNFUkZBVUxURkQgXHUwMDI2XHUwMDI2IFJJU0NWX0lTQV9TVlJTVzYwVDU5QlxuLS1cbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4NlxuLS1cbmFyY2gveDg2L0tjb25maWctMjEzLVx0c2VsZWN0IEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9XUCAgICAgICAgIGlmIFg4Nl82NCBcdTAwMjZcdTAwMjYgVVNFUkZBVUxURkRcbmFyY2gveDg2L0tjb25maWc6MjE0Olx0c2VsZWN0IEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUlx0aWYgWDg2XzY0IFx1MDAyNlx1MDAyNiBVU0VSRkFVTFRGRFxuYXJjaC94ODYvS2NvbmZpZy0yMTUtXHRzZWxlY3QgSEFWRV9BUkNIX1ZNQVBfU1RBQ0tcdFx0aWYgWDg2XzY0XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTExNjY9c3RhdGljIHZvaWQgc2hvd19zbWFwX3ZtYV9mbGFncyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0xMjM2LSNlbmRpZiAvKiBDT05GSUdfQVJDSF9IQVNfUEtFWVMgKi9cbmZzL3Byb2MvdGFza19tbXUuYzoxMjM3OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTIzOC1cdFx0W2lsb2cyKFZNX1VGRkRfTUlOT1IpXVx0PSBcJiMzNDt1aVwmIzM0OyxcbmZzL3Byb2MvdGFza19tbXUuYzoxMjM5OiNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SICovXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTI0MC0jaWZkZWYgQ09ORklHX1VTRVJGQVVMVEZEX1JXUFxuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0yOTQ9ZW51bSB7XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTUwMS0jZW5kaWZcbmluY2x1ZGUvbGludXgvbW0uaDo1MDI6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcbmluY2x1ZGUvbGludXgvbW0uaC01MDMtI2RlZmluZSBWTV9VRkZEX01JTk9SXHRJTklUX1ZNX0ZMQUcoVUZGRF9NSU5PUilcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtNTIwLSNkZWZpbmUgVk1BX1VGRkRfV1BcdFx0bWtfdm1hX2ZsYWdzKFZNQV9VRkZEX1dQX0JJVClcbmluY2x1ZGUvbGludXgvbW0uaDo1MjE6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcbmluY2x1ZGUvbGludXgvbW0uaC01MjItI2RlZmluZSBWTUFfVUZGRF9NSU5PUlx0XHRta192bWFfZmxhZ3MoVk1BX1VGRkRfTUlOT1JfQklUKVxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaD0xNjA9SUZfSEFWRV9QR19BUkNIXzMoYXJjaF8zKVxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaC0xODItXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmg6MTgzOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmgtMTg0LSMgZGVmaW5lIElGX0hBVkVfVUZGRF9NSU5PUihmbGFnLCBuYW1lKSB7ZmxhZywgbmFtZX0sXG4tLVxubW0vS2NvbmZpZz0xMzcyPWNvbmZpZyBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfV1Bcbi0tXG5tbS9LY29uZmlnLTEzNzYtXG5tbS9LY29uZmlnOjEzNzc6Y29uZmlnIEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUlxubW0vS2NvbmZpZy0xMzc4LVx0Ym9vbFxuLS1cbm1tL3VzZXJmYXVsdGZkLmM9MzcxNj1zdGF0aWMgaW50IHVzZXJmYXVsdGZkX3JlZ2lzdGVyKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTM3NjgtXHRpZiAodWZmZGlvX3JlZ2lzdGVyLm1vZGUgXHUwMDI2IFVGRkRJT19SRUdJU1RFUl9NT0RFX01JTk9SKSB7XG5tbS91c2VyZmF1bHRmZC5jOjM3Njk6I2lmbmRlZiBDT05GSUdfSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXG5tbS91c2VyZmF1bHRmZC5jLTM3NzAtXHRcdGdvdG8gb3V0O1xuLS1cbm1tL3VzZXJmYXVsdGZkLmM9NDMxNj1zdGF0aWMgX191NjQgdWZmZF9hcGlfYXZhaWxhYmxlX2ZlYXR1cmVzKHZvaWQpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy00MzE5LVxubW0vdXNlcmZhdWx0ZmQuYzo0MzIwOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1IpKVxubW0vdXNlcmZhdWx0ZmQuYy00MzIxLVx0XHRmIFx1MDAyNj0gfihVRkZEX0ZFQVRVUkVfTUlOT1JfSFVHRVRMQkZTIHwgVUZGRF9GRUFUVVJFX01JTk9SX1NITUVNKTtcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oPTEwMD1lbnVtIHtcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTI5OS0jZW5kaWZcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmg6MzAwOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTMwMS0jZGVmaW5lIFZNX1VGRkRfTUlOT1JcdElOSVRfVk1fRkxBRyhVRkZEX01JTk9SKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTg3MgoJCQkJCQkJb3V0cHV0OiAxMzYKCQkJCQkJCXRob3VnaHRzOiAxNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29uZmlndXJhdGlvbiBmb3IgVXNlcmZhdWx0ZmQtTWlub3IgU3VwcG9ydCoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JgIGlzIGF1dG9tYXRpY2FsbHkgaGFuZGxlZCBpZiBgVVNFUkZBVUxURkRgIGlzIGVuYWJsZWQgb24gdGhlIHN0YW5kYXJkIGFyY2hpdGVjdHVyZXMgbGlrZSB4ODZfNjQgYW5kIGFybTY0IOKAkyB0aGF0JiMzOTtzIGdvb2QsIG9uZSBsZXNzIHRoaW5nIHRvIHdvcnJ5IGFib3V0LiBUaGVyZWZvcmUsIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYFVTRVJGQVVMVEZEYC4gVGhlc2UgYXJlIHRoZSBrZXkgZW5hYmxlcnMuCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGF0IGV2ZXJ5dGhpbmcgYWxpZ25zIHdpdGggbXkgcmVxdWlyZW1lbnRzLiBZZXMsIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byB0cnVlLCBzbyB0aGF0JiMzOTtzIHRoZSBncmVlbiBsaWdodC4gVGhlIGBFbmFibGVDb25maWdzYCBhcnJheSBjb25maXJtcyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgVVNFUkZBVUxURkRgIGFzIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEFuZCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJyYXkgaGlnaGxpZ2h0cyB0aGUgY3J1Y2lhbCBmdW5jdGlvbnM6IGBtYWR2aXNlX2NvbGxhcHNlYCBhbmQgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYC4gVGhlIHJlYXNvbmluZyBjbGFyaWZpZXMgdGhlIHNwZWNpZmljIGlzc3VlIGFkZHJlc3NlZCDigJMgYSBjaGVjayBpbnRyb2R1Y2VkIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIFRIUHMgZm9yIFZNQXMgdGhhdCBhcmUgdXNpbmcgdXNlcmZhdWx0ZmQtbWlub3IuIEl0IG1ha2VzIHNlbnNlOyB0aGUgcGF0Y2ggaXMgYWJvdXQgcHJvdGVjdGluZyB0aG9zZSBtYXBwaW5ncywgYW5kIHRob3NlIHR3byBmdW5jdGlvbnMgYXJlIGtleSBmb3IgdGhpcyB2dWxuZXJhYmlsaXR5LgoKTm93LCBhbGwgc2VlbXMgd2VsbCwgYW5kIEkgY2FuIG1vdmUgb24gdG8gdGhlIG5leHQgc3RlcCB3aGljaCBpcyB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIEkgY2FuIG5vdyBtb3ZlIHRvIHRoZSBuZXh0IHN0YWdlIG9mIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hZHZpc2VfY29sbGFwc2UmIzM0OywKICAgICYjMzQ7Y29sbGFwc2VfcHRlX21hcHBlZF90aHAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIFRIUCBwYWdlcyB3aXRoaW4gVk1BcyByZWdpc3RlcmVkIHdpdGggdXNlcmZhdWx0ZmQgbWlub3IgZmF1bHQgaGFuZGxpbmcgKHVzZXJmYXVsdGZkX21pbm9yKS4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbGxhcHNlIGxvZ2ljIHJlYWNoYWJsZSB2aWEgbWFkdmlzZShNQURWX0NPTExBUFNFKSBvciBraHVnZXBhZ2VkIGJhY2tncm91bmQgc2Nhbm5pbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFkdmlzZV9jb2xsYXBzZSYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9wdGVfbWFwcGVkX3RocCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKCkgdG8gcHJldmVudCBjb2xsYXBzaW5nIFBURS1tYXBwZWQgVEhQIHBhZ2VzIHdpdGhpbiBWTUFzIHJlZ2lzdGVyZWQgd2l0aCB1c2VyZmF1bHRmZCBtaW5vciBmYXVsdCBoYW5kbGluZyAodXNlcmZhdWx0ZmRfbWlub3IpLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29sbGFwc2UgbG9naWMgcmVhY2hhYmxlIHZpYSBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpIG9yIGtodWdlcGFnZWQgYmFja2dyb3VuZCBzY2FubmluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjozNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gZWFybHkgcmV0dXJuIGNoZWNrIChgdXNlcmZhdWx0ZmRfbWlub3Iodm1hKWApIGluIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKWAgdG8gcHJldmVudCBjb2xsYXBzaW5nIFBURS1tYXBwZWQgVEhQcyBmb3IgVk1BcyByZWdpc3RlcmVkIHdpdGggdXNlcmZhdWx0ZmQgbWlub3IgbW9kZS5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlIG9ubHkgY2hlY2tzIGV4aXN0aW5nIFZNQSBmbGFncyAoYHZtYS1cdTAwM2V2bV9mbGFnc2ApIGFuZCByZXR1cm5zIGFuIGVycm9yIGVudW0gdmFsdWUgKGBTQ0FOX1BURV9VRkZEYCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIG1vZGlmeSBzdHJ1Y3QgbGF5b3V0cy9wYWRkaW5nLCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy5cbi0gS0FTQU4vZ2VuZXJhbCBkZXRlY3RvciBhcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgLyBraHVnZXBhZ2VkIGxvZ2ljLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW4gVk1BIGxpZmVjeWNsZSAvIHBhZ2UgdGFibGUgbWFuYWdlbWVudCB3b3VsZCBmYWxsIHVuZGVyIHN0YW5kYXJkIG1lbW9yeSBtYW5hZ2VtZW50IHNlbWFudGljcywgcGFnZSBmYXVsdHMsIG9yIHBvaW50ZXIgdmFsaWRpdHksIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdHMuXG5cbkhlbmNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTNjYmIzYTNiOTM4ZjQxNjQzNDhkMzU5Mzg1NGViYzI3NjJjOGFhZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDI4IDIyOjMyOjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0va2h1Z2VwYWdlZC5jIGIvbW0va2h1Z2VwYWdlZC5jCmluZGV4IGIyMzdmNmU3NjYyYTUuLjIyMzU2MjI5YzFlNDIgMTAwNjQ0Ci0tLSBhL21tL2todWdlcGFnZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9raHVnZXBhZ2VkLmMKQEAgLTE4OTksNiAmIzQzOzE4OTksMTMgQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ24KIAlpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSkpCiAJCXJldHVybiBTQ0FOX1BURV9VRkZEOwogCiYjNDM7CS8qCiYjNDM7CSAqIFVzZXJmYXVsdGZkLW1pbm9yLXJlZ2lzdGVyZWQgVk1BcyBzaG91bGQgbm90IGJlIGNvbGxhcHNlZCwgYXMKJiM0MzsJICogdXNlcnNwYWNlIGlzIGV4cGVjdGluZyB0byBleHBsaWNpdGx5IGluc3RhbGwgUFRFcy4KJiM0MzsJICovCiYjNDM7CWlmICh1c2VyZmF1bHRmZF9taW5vcih2bWEpKQomIzQzOwkJcmV0dXJuIFNDQU5fUFRFX1VGRkQ7CiYjNDM7CiAJZm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8odm1hLSZndDt2bV9maWxlLSZndDtmX21hcHBpbmcsCiAJCQkgICAgICAgbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBoYWRkcikpOwogCWlmIChJU19FUlIoZm9saW8pKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLaHVnZXBhZ2VkIFBhdGNoOiBVc2VyZmF1bHRmZCBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciBga2h1Z2VwYWdlZC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCB0aGlzIGlzIGRlYWxpbmcgd2l0aCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHVzZXJmYXVsdGZkLiYjMzQ7IEkgaW1tZWRpYXRlbHkgaG9uZSBpbiBvbiB0aGUgYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgZnVuY3Rpb24sIHdoaWNoIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIGF0dGVtcHRpbmcgdG8gY29sbGFwc2UgcGFnZSB0YWJsZSBlbnRyaWVzIGludG8gYSBUSFAgcmVzaWRlcy4KCk5vdywgSSBzZWUgdGhlIGFkZGVkIGNvbmRpdGlvbmFsIGNoZWNrOiBgaWYgKHVzZXJmYXVsdGZkX21pbm9yKHZtYSkpIHJldHVybiBTQ0FOX1BURV9VRkZEO2AuIFRoaXMgaXMgY3JpdGljYWwuIFRoZSBleGlzdGluZyBjaGVjayBhbHJlYWR5IGNvbnNpZGVycyBgdXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSlgLiBUaGUgbmV3IGFkZGl0aW9uIGNsYXJpZmllcyB0aGF0IGlmIGEgVk1BIGhhcyBiZWVuIHJlZ2lzdGVyZWQgYXMgYSBtaW5vciB1c2VyZmF1bHRmZCwgdGhhdCBtZWFucyB1c2Vyc3BhY2UgZXhwbGljaXRseSBleHBlY3RzIHRvIGNvbnRyb2wgdGhlIFBURSBpbnN0YWxsYXRpb24uIFdlICpzaG91bGQgbm90KiBjb2xsYXBzZSB0aG9zZS4gVGhhdCYjMzk7cyB0aGUga2V5IHRha2Vhd2F5IGhlcmUuIFRoaXMgZW5oYW5jZW1lbnQgc2VlbXMgdG8gcHJldmVudCBraHVnZXBhZ2VkIGZyb20gaW50ZXJmZXJpbmcgd2l0aCB1c2Vyc3BhY2UmIzM5O3MgZXhwbGljaXQgUFRFIG1hbmFnZW1lbnQgZm9yIG1pbm9yIHVzZXJmYXVsdGZkIFZNQXMuIFRoZSBpbXBsaWNhdGlvbiBpcyBhdm9pZGluZyB1bmludGVudGlvbmFsIFRIUCBjb2xsYXBzZSBpbiBtaW5vciB1c2VyZmF1bHRmZCBWTUFzIHdoaWNoIGNvdWxkIGNhdXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3VyIGluIHVzZXJzcGFjZSwgc3VjaCBhcyBicm9rZW4gb3IgdW5leHBlY3RlZCBiZWhhdmlvdXIgaW4gdGhlIGZhdWx0LWhhbmRsaW5nIGxvZ2ljLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgc2VtYW50aWNzIG9mIGB1c2VyZmF1bHRmZF9taW5vcmAgYW5kIGB1c2VyZmF1bHRmZF9wcm90ZWN0ZWRgIHRvIGZ1bGx5IGdyYXNwIHRoZSBudWFuY2VzLCBidXQgdGhpcyBwYXRjaCBhcHBlYXJzIHRvIGJlIGEgZ29vZCwgdGFyZ2V0ZWQgc29sdXRpb24gdG8gZW5zdXJlIGNvcnJlY3QgaW50ZXJhY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gcmV2aWV3IHRoZSByZWxhdGVkIGNvZGUgcGF0aHMgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gdG8gZnVsbHkgZXZhbHVhdGUgdGhlIHBvdGVudGlhbCBpbXBhY3QgYW5kIGFueSBjb3JuZXIgY2FzZXMsIGJ1dCB0aGUgaW50ZW50IHNlZW1zIHNvdW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg4NTpcdFx0LypcbjE4ODY6XHRcdCAqIElmIHdlIGFyZSBoZXJlLCB3ZSYjMzk7dmUgc3VjY2VlZGVkIGluIHJlcGxhY2luZyBhbGwgdGhlIG5hdGl2ZSBwYWdlc1xuMTg4NzpcdFx0ICogaW4gdGhlIHBhZ2UgY2FjaGUgd2l0aCBhIHNpbmdsZSBodWdlcGFnZS4gSWYgYSBtbSB3ZXJlIHRvIGZhdWx0LWluXG4xODg4Olx0XHQgKiB0aGlzIG1lbW9yeSAobWFwcGVkIGJ5IGEgc3VpdGFibHkgYWxpZ25lZCBWTUEpLCB3ZSYjMzk7ZCBnZXQgdGhlIGh1Z2VwYWdlXG4xODg5Olx0XHQgKiBhbmQgbWFwIGl0IGJ5IGEgUE1ELCByZWdhcmRsZXNzIG9mIHN5c2ZzIFRIUCBzZXR0aW5ncy4gQXMgc3VjaCwgbGV0JiMzOTtzXG4xODkwOlx0XHQgKiBhbmFsb2dvdXNseSBlbGlkZSBzeXNmcyBUSFAgc2V0dGluZ3MgaGVyZSBhbmQgZm9yY2UgY29sbGFwc2UuXG4xODkxOlx0XHQgKi9cbjE4OTI6XHRcdGlmICghdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXIodm1hLCB2bWEtXHUwMDNldm1fZmxhZ3MsIFRWQV9GT1JDRURfQ09MTEFQU0UsIFBNRF9PUkRFUikpXG4xODkzOlx0XHRcdHJldHVybiBTQ0FOX1ZNQV9DSEVDSztcbjE4OTQ6XHRcbjE4OTU6XHRcdC8qXG4xODk2Olx0XHQgKiBLZWVwIHBtZCBwZ3RhYmxlIHdoaWxlIHRoZSB1ZmZkIGJpdCBpcyBpbiB1c2U7IHNlZSBjb21tZW50IGluXG4xODk3Olx0XHQgKiByZXRyYWN0X3BhZ2VfdGFibGVzKCkuXG4xODk4Olx0XHQgKi9cbjE4OTk6XHRcdGlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSlcbjE5MDA6XHRcdFx0cmV0dXJuIFNDQU5fUFRFX1VGRkQ7XG4xOTAxOlx0XG4xOTAyOlx0XHQvKlxuMTkwMzpcdFx0ICogVXNlcmZhdWx0ZmQtbWlub3ItcmVnaXN0ZXJlZCBWTUFzIHNob3VsZCBub3QgYmUgY29sbGFwc2VkLCBhc1xuMTkwNDpcdFx0ICogdXNlcnNwYWNlIGlzIGV4cGVjdGluZyB0byBleHBsaWNpdGx5IGluc3RhbGwgUFRFcy5cbjE5MDU6XHRcdCAqL1xuMTkwNjpcdFx0aWYgKHVzZXJmYXVsdGZkX21pbm9yKHZtYSkpXG4xOTA3Olx0XHRcdHJldHVybiBTQ0FOX1BURV9VRkZEO1xuMTkwODpcdFxuMTkwOTpcdFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8odm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nLFxuMTkxMDpcdFx0XHRcdCAgICAgICBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGhhZGRyKSk7XG4xOTExOlx0XHRpZiAoSVNfRVJSKGZvbGlvKSlcbjE5MTI6XHRcdFx0cmV0dXJuIFNDQU5fUEFHRV9OVUxMO1xuMTkxMzpcdFxuMTkxNDpcdFx0aWYgKCFpc19wbWRfb3JkZXIoZm9saW9fb3JkZXIoZm9saW8pKSkge1xuMTkxNTpcdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfQ09NUE9VTkQ7XG4xOTE2Olx0XHRcdGdvdG8gZHJvcF9mb2xpbztcbjE5MTc6XHRcdH1cbjE5MTg6XHRcbjE5MTk6XHRcdHJlc3VsdCA9IGZpbmRfcG1kX29yX3RocF9vcl9ub25lKG1tLCBoYWRkciwgXHUwMDI2cG1kKTtcbjE5MjA6XHRcdHN3aXRjaCAocmVzdWx0KSB7XG4xOTIxOlx0XHRjYXNlIFNDQU5fU1VDQ0VFRDpcbjE5MjI6XHRcdFx0YnJlYWs7XG4xOTIzOlx0XHRjYXNlIFNDQU5fTk9fUFRFX1RBQkxFOlxuMTkyNDpcdFx0XHQvKlxuMTkyNTpcdFx0XHQgKiBBbGwgcHRlIGVudHJpZXMgaGF2ZSBiZWVuIHJlbW92ZWQgYW5kIHBtZCBjbGVhcmVkLlxuMTkyNjpcdFx0XHQgKiBTa2lwIGFsbCB0aGUgcHRlIGNoZWNrcyBhbmQganVzdCB1cGRhdGUgdGhlIHBtZCBtYXBwaW5nLlxuMTkyNzpcdFx0XHQgKi9cbjE5Mjg6XHRcdFx0Z290byBtYXliZV9pbnN0YWxsX3BtZDtcbjE5Mjk6XHRcdGRlZmF1bHQ6XG4xOTMwOlx0XHRcdGdvdG8gZHJvcF9mb2xpbztcbjE5MzE6XHRcdH1cbjE5MzI6XHRcbjE5MzM6XHRcdHJlc3VsdCA9IFNDQU5fRkFJTDtcbjE5MzQ6XHRcdHN0YXJ0X3B0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sobW0sIHBtZCwgaGFkZHIsIFx1MDAyNnB0bCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MzkKCQkJCQkJCW91dHB1dDogMjI4CgkJCQkJCQl0aG91Z2h0czogMzk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2g6IEEgRGVlcCBEaXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBwYXRjaC4gSXQmIzM5O3MgaW5qZWN0aW5nIGEgY2hlY2ssIGBpZiAodXNlcmZhdWx0ZmRfbWlub3Iodm1hKSkgcmV0dXJuIFNDQU5fUFRFX1VGRkQ7YCwgcmlnaHQgaW50byBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKClgLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgYSBndWFyZDsgYSBzYWZldHkgbmV0LiBUaGUgYHVzZXJmYXVsdGZkX21pbm9yKHZtYSlgIGNoZWNrIGJvaWxzIGRvd24gdG8gaW5zcGVjdGluZyBgdm1hLSZndDt2bV9mbGFnc2AgYW5kIHNlZWluZyBpZiB0aGUgYFZNX1VGRkRfTUlOT1JgIGZsYWcgaXMgc2V0LiBJZiBpdCAqaXMqLCB0aGUgY29sbGFwc2Ugb2YgUFRFLW1hcHBlZCBUSFBzIHdpdGhpbiBraHVnZXBhZ2VkIGlzIHNob3J0LWNpcmN1aXRlZC4gVGhlIGdvYWwgaXMgY2xlYXI6IHByZXZlbnQga2h1Z2VwYWdlZCBmcm9tIGNvbGxhcHNpbmcgVk1BcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5IHVzZXJmYXVsdGZkIGluICYjMzQ7bWlub3IgbW9kZS4mIzM0OyBUaGlzIGF2b2lkcyBhbnkgdXNlciBzcGFjZSBjb25mdXNpb24sIGFzIHVzZXIgc3BhY2UgZXhwZWN0cyB0byBoYW5kbGUgaXRzIG1pbm9yIGZhdWx0cyBleHBsaWNpdGx5LgoKTm93IGNvbWVzIHRoZSBjcnVjaWFsIHBhcnQ6IHRoZSBzYWZldHkgYXNzZXNzbWVudC4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBEb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXM/IExlYWtzPyBQYWRkaW5nIHByb2JsZW1zPyBSZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeT8gVGhlIGFuc3dlciwgYXMgSSBzZWUgaXQsIGlzIGEgcmVzb3VuZGluZyAmIzM0O25vLiYjMzQ7IFRoaXMgcGF0Y2ggaXMgcmVtYXJrYWJseSBjbGVhbi4gSXQmIzM5O3MgYSBzaW1wbGUsIHRhcmdldGVkIGd1YXJkLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBpbnZvbHZlZC4gVGhlcmUmIzM5O3Mgbm8gY29weWluZyBvZiB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZSDigJMgYSBjcml0aWNhbCBwb2ludC4gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGluZmx1ZW5jaW5nIGJyYW5jaGluZyBsb2dpYy4gSXQmIzM5O3Mgc29sZWx5IGZvY3VzZWQgb24gcHJldmVudGluZyB0aGUgY29sbGFwc2Ugb2YgUFRFcyB0byBQTURzIGZvciB0aG9zZSBzcGVjaWZpYyB1c2VyZmF1bHRmZC1taW5vciBWTUFzLgoKTGV0JiMzOTtzIGRvIGEgcmlnb3JvdXMgS01TQU4gY2hlY2sgZm9yIGdvb2QgbWVhc3VyZS4gSSYjMzk7bSBnb2luZyB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYSBpbiBteSBoZWFkOgoKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgbWlnaHQgYmUgdW5pbml0aWFsaXplZD8gTm9wZSwgdGhpcyBpc24mIzM5O3Qgc2VuZGluZyBhbnl0aGluZy4KMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLCBgdm1hYCBpcyBhIHZhbGlkIGB2bV9hcmVhX3N0cnVjdGAgcG9pbnRlciwgYW5kIGB2bV9mbGFnc2AgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuCjMuICBBbGxvY2F0aW9uIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI/IE5vcGUsIG5vIG5ldyBhbGxvY2F0aW9ucy4KNC4gIEJvdW5kcyBjaGVja3MgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgcmVhZHM/IE5vcGUsIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgdG91Y2ggYW55IG9mIHRoYXQuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBjbGVhcmx5IGBmYWxzZWAuIFRoaXMgaXMgYSBjbGVhbiwgd2VsbC1zY29wZWQgY2hhbmdlLiBJdCYjMzk7cyBhYm91dCBwcm90ZWN0aW5nIGEgc3BlY2lmaWMsIHdlbGwtZGVmaW5lZCB1c2VyIHNwYWNlIGV4cGVjdGF0aW9uIHdpdGhpbiB0aGUgdXNlcmZhdWx0ZmQgZnJhbWV3b3JrLiBUaGUgYWJzZW5jZSBvZiBjb21wbGV4IG1lbW9yeSBtYW5pcHVsYXRpb24gbWFrZXMgaXQgYSB2ZXJ5IGxvdy1yaXNrIHBhdGNoIGZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLiBUaGlzIGlzIGEgZ29vZCBzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFuIGVhcmx5IHJldHVybiBjaGVjayAoYHVzZXJmYXVsdGZkX21pbm9yKHZtYSlgKSBpbiBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKClgIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIFRIUHMgZm9yIFZNQXMgcmVnaXN0ZXJlZCB3aXRoIHVzZXJmYXVsdGZkIG1pbm9yIG1vZGUuXG5cbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZSBvbmx5IGNoZWNrcyBleGlzdGluZyBWTUEgZmxhZ3MgKGB2bWEtXHUwMDNldm1fZmxhZ3NgKSBhbmQgcmV0dXJucyBhbiBlcnJvciBlbnVtIHZhbHVlIChgU0NBTl9QVEVfVUZGRGApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBtb2RpZnkgc3RydWN0IGxheW91dHMvcGFkZGluZywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBib3VuZHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXG4tIEtBU0FOL2dlbmVyYWwgZGV0ZWN0b3IgYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IC8ga2h1Z2VwYWdlZCBsb2dpYy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBidWdzIGluIFZNQSBsaWZlY3ljbGUgLyBwYWdlIHRhYmxlIG1hbmFnZW1lbnQgd291bGQgZmFsbCB1bmRlciBzdGFuZGFyZCBtZW1vcnkgbWFuYWdlbWVudCBzZW1hbnRpY3MsIHBhZ2UgZmF1bHRzLCBvciBwb2ludGVyIHZhbGlkaXR5LCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RzLlxuXG5IZW5jZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFuIGVhcmx5IHJldHVybiBjaGVjayAoYHVzZXJmYXVsdGZkX21pbm9yKHZtYSlgKSBpbiBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKClgIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIFRIUHMgZm9yIFZNQXMgcmVnaXN0ZXJlZCB3aXRoIHVzZXJmYXVsdGZkIG1pbm9yIG1vZGUuXG5cbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZSBvbmx5IGNoZWNrcyBleGlzdGluZyBWTUEgZmxhZ3MgKGB2bWEtXHUwMDNldm1fZmxhZ3NgKSBhbmQgcmV0dXJucyBhbiBlcnJvciBlbnVtIHZhbHVlIChgU0NBTl9QVEVfVUZGRGApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBtb2RpZnkgc3RydWN0IGxheW91dHMvcGFkZGluZywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBib3VuZHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXG4tIEtBU0FOL2dlbmVyYWwgZGV0ZWN0b3IgYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IC8ga2h1Z2VwYWdlZCBsb2dpYy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBidWdzIGluIFZNQSBsaWZlY3ljbGUgLyBwYWdlIHRhYmxlIG1hbmFnZW1lbnQgd291bGQgZmFsbCB1bmRlciBzdGFuZGFyZCBtZW1vcnkgbWFuYWdlbWVudCBzZW1hbnRpY3MsIHBhZ2UgZmF1bHRzLCBvciBwb2ludGVyIHZhbGlkaXR5LCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RzLlxuXG5IZW5jZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjMyOjQ3LjY5Nzc0NzM5NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NDMxMzkwNjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJVU0VSRkFVTFRGRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hZHZpc2VfY29sbGFwc2VcIixcbiAgICBcImNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIGVhcmx5IHJldHVybiBjaGVjayAoYHVzZXJmYXVsdGZkX21pbm9yKHZtYSlgKSBpbiBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKClgIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIFRIUHMgZm9yIFZNQXMgcmVnaXN0ZXJlZCB3aXRoIHVzZXJmYXVsdGZkIG1pbm9yIG1vZGUuXFxuXFxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlIG9ubHkgY2hlY2tzIGV4aXN0aW5nIFZNQSBmbGFncyAoYHZtYS1cXHUwMDNldm1fZmxhZ3NgKSBhbmQgcmV0dXJucyBhbiBlcnJvciBlbnVtIHZhbHVlIChgU0NBTl9QVEVfVUZGRGApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBtb2RpZnkgc3RydWN0IGxheW91dHMvcGFkZGluZywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBib3VuZHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXFxuLSBLQVNBTi9nZW5lcmFsIGRldGVjdG9yIGFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCAvIGtodWdlcGFnZWQgbG9naWMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbiBWTUEgbGlmZWN5Y2xlIC8gcGFnZSB0YWJsZSBtYW5hZ2VtZW50IHdvdWxkIGZhbGwgdW5kZXIgc3RhbmRhcmQgbWVtb3J5IG1hbmFnZW1lbnQgc2VtYW50aWNzLCBwYWdlIGZhdWx0cywgb3IgcG9pbnRlciB2YWxpZGl0eSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0cy5cXG5cXG5IZW5jZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIFRIUCBwYWdlcyB3aXRoaW4gVk1BcyByZWdpc3RlcmVkIHdpdGggdXNlcmZhdWx0ZmQgbWlub3IgZmF1bHQgaGFuZGxpbmcgKHVzZXJmYXVsdGZkX21pbm9yKS4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbGxhcHNlIGxvZ2ljIHJlYWNoYWJsZSB2aWEgbWFkdmlzZShNQURWX0NPTExBUFNFKSBvciBraHVnZXBhZ2VkIGJhY2tncm91bmQgc2Nhbm5pbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjMyOjQ3LjY5Nzc1MjY2NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk4NjU2ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTNjYmIzYTNiOTM4ZjQxNjQzNDhkMzU5Mzg1NGViYzI3NjJjOGFhZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAyOCAyMjozMjo0NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmNcXG5pbmRleCBiMjM3ZjZlNzY2MmE1Li4yMjM1NjIyOWMxZTQyIDEwMDY0NFxcbi0tLSBhL21tL2todWdlcGFnZWQuY1xcbisrKyBiL21tL2todWdlcGFnZWQuY1xcbkBAIC0xODk5LDYgKzE4OTksMTMgQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25cXG4gXFx0aWYgKHVzZXJmYXVsdGZkX3Byb3RlY3RlZCh2bWEpKVxcbiBcXHRcXHRyZXR1cm4gU0NBTl9QVEVfVUZGRDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFVzZXJmYXVsdGZkLW1pbm9yLXJlZ2lzdGVyZWQgVk1BcyBzaG91bGQgbm90IGJlIGNvbGxhcHNlZCwgYXNcXG4rXFx0ICogdXNlcnNwYWNlIGlzIGV4cGVjdGluZyB0byBleHBsaWNpdGx5IGluc3RhbGwgUFRFcy5cXG4rXFx0ICovXFxuK1xcdGlmICh1c2VyZmF1bHRmZF9taW5vcih2bWEpKVxcbitcXHRcXHRyZXR1cm4gU0NBTl9QVEVfVUZGRDtcXG4rXFxuIFxcdGZvbGlvID0gZmlsZW1hcF9sb2NrX2ZvbGlvKHZtYS1cXHUwMDNldm1fZmlsZS1cXHUwMDNlZl9tYXBwaW5nLFxcbiBcXHRcXHRcXHQgICAgICAgbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBoYWRkcikpO1xcbiBcXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzI6NDguMDk3MDE2MjA1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4NjE5MzI2ODY0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiVVNFUkZBVUxURkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWR2aXNlX2NvbGxhcHNlXCIsXG4gICAgXCJjb2xsYXBzZV9wdGVfbWFwcGVkX3RocFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBpbiB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKSB0byBwcmV2ZW50IGNvbGxhcHNpbmcgUFRFLW1hcHBlZCBUSFAgcGFnZXMgd2l0aGluIFZNQXMgcmVnaXN0ZXJlZCB3aXRoIHVzZXJmYXVsdGZkIG1pbm9yIGZhdWx0IGhhbmRsaW5nICh1c2VyZmF1bHRmZF9taW5vcikuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2xsYXBzZSBsb2dpYyByZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9DT0xMQVBTRSkgb3Iga2h1Z2VwYWdlZCBiYWNrZ3JvdW5kIHNjYW5uaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1M2NiYjNhM2I5MzhmNDE2NDM0OGQzNTkzODU0ZWJjMjc2MmM4YWFkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjggMjI6MzI6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IGIyMzdmNmU3NjYyYTUuLjIyMzU2MjI5YzFlNDIgMTAwNjQ0XG4tLS0gYS9tbS9raHVnZXBhZ2VkLmNcbisrKyBiL21tL2todWdlcGFnZWQuY1xuQEAgLTE4OTksNiArMTg5OSwxMyBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnblxuIFx0aWYgKHVzZXJmYXVsdGZkX3Byb3RlY3RlZCh2bWEpKVxuIFx0XHRyZXR1cm4gU0NBTl9QVEVfVUZGRDtcbiBcbitcdC8qXG4rXHQgKiBVc2VyZmF1bHRmZC1taW5vci1yZWdpc3RlcmVkIFZNQXMgc2hvdWxkIG5vdCBiZSBjb2xsYXBzZWQsIGFzXG4rXHQgKiB1c2Vyc3BhY2UgaXMgZXhwZWN0aW5nIHRvIGV4cGxpY2l0bHkgaW5zdGFsbCBQVEVzLlxuK1x0ICovXG4rXHRpZiAodXNlcmZhdWx0ZmRfbWlub3Iodm1hKSlcbitcdFx0cmV0dXJuIFNDQU5fUFRFX1VGRkQ7XG4rXG4gXHRmb2xpbyA9IGZpbGVtYXBfbG9ja19mb2xpbyh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcsXG4gXHRcdFx0ICAgICAgIGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgaGFkZHIpKTtcbiBcdGlmIChJU19FUlIoZm9saW8pKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzI6NDguMDk3MDE3Njk1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTUyNzQxOTYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLSFVHRVBBR0VEIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGEgY2hhbmdlIHdpdGhpbiBgbW0va2h1Z2VwYWdlZC5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgbW9kaWZpY2F0aW9uIGlzIGZvY3VzZWQgb24gdGhlIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGZ1bmN0aW9uLiBUaGUgY29kZSBzbmlwcGV0IGZsYWdzIGEgY2hlY2sgZm9yIGB1c2VyZmF1bHRmZF9taW5vcih2bWEpYCBhbmQsIGlmIHRydWUsIHJldHVybnMgYFNDQU5fUFRFX1VGRkRgLiBJbnRlcmVzdGluZy4gSXQgc2VlbXMgd2UncmUgcHJldmVudGluZyBUSFAgY29sbGFwc2UgaW4gY2VydGFpbiBzaXR1YXRpb25zLiBNeSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRoaXMgaXMgcmVsYXRlZCB0byBob3cgdXNlcmZhdWx0ZmQgaW50ZXJhY3RzIHdpdGggdGhlIHRyYW5zcGFyZW50IGh1Z2UgcGFnZSBtZWNoYW5pc20uIFVzZXJmYXVsdGZkcywgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBnaXZlIHVzZXJzcGFjZSBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIHBhZ2UgZmF1bHRzIGFuZCBtZW1vcnkgbWFuYWdlbWVudC5cblxuVG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGlzLCBJIG5lZWQgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBUaW1lIHRvIHB1bGwgdXAgYG1tL2todWdlcGFnZWQuY2AuIExldCdzIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgZnVuY3Rpb24gYW5kIGl0cyBzdXJyb3VuZGluZyBjYWxscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW1wbGljYXRpb25zIGhlcmUsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHRoZSBpbnRlcmFjdGlvbiBvZiB1c2VyZmF1bHRmZCwga2h1Z2VwYWdlZCwgYW5kIFBURSBtYW5pcHVsYXRpb24uIEkgc3VzcGVjdCB0aGF0IGNvbGxhcHNpbmcgdGhlIFRIUCBtaWdodCBpbnRlcmZlcmUgd2l0aCB1c2VyZmF1bHRmZCdzIGV4cGxpY2l0IFBURSBpbnN0YWxsYXRpb24gZXhwZWN0YXRpb25zLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIHRyYWRlLW9mZnMgYW5kIGJlbmVmaXRzIG9mIHRoaXMgY2hhbmdlPyBMZXQncyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzI6NTMuNjI0NDM5MDY0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2todWdlcGFnZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODgwOlxcdFxcdC8qIEZhc3QgY2hlY2sgYmVmb3JlIGxvY2tpbmcgcGFnZSBpZiBhbHJlYWR5IFBNRC1tYXBwZWQgKi9cXG4xODgxOlxcdFxcdHJlc3VsdCA9IGZpbmRfcG1kX29yX3RocF9vcl9ub25lKG1tLCBoYWRkciwgXFx1MDAyNnBtZCk7XFxuMTg4MjpcXHRcXHRpZiAocmVzdWx0ID09IFNDQU5fUE1EX01BUFBFRClcXG4xODgzOlxcdFxcdFxcdHJldHVybiByZXN1bHQ7XFxuMTg4NDpcXHRcXG4xODg1OlxcdFxcdC8qXFxuMTg4NjpcXHRcXHQgKiBJZiB3ZSBhcmUgaGVyZSwgd2UndmUgc3VjY2VlZGVkIGluIHJlcGxhY2luZyBhbGwgdGhlIG5hdGl2ZSBwYWdlc1xcbjE4ODc6XFx0XFx0ICogaW4gdGhlIHBhZ2UgY2FjaGUgd2l0aCBhIHNpbmdsZSBodWdlcGFnZS4gSWYgYSBtbSB3ZXJlIHRvIGZhdWx0LWluXFxuMTg4ODpcXHRcXHQgKiB0aGlzIG1lbW9yeSAobWFwcGVkIGJ5IGEgc3VpdGFibHkgYWxpZ25lZCBWTUEpLCB3ZSdkIGdldCB0aGUgaHVnZXBhZ2VcXG4xODg5OlxcdFxcdCAqIGFuZCBtYXAgaXQgYnkgYSBQTUQsIHJlZ2FyZGxlc3Mgb2Ygc3lzZnMgVEhQIHNldHRpbmdzLiBBcyBzdWNoLCBsZXQnc1xcbjE4OTA6XFx0XFx0ICogYW5hbG9nb3VzbHkgZWxpZGUgc3lzZnMgVEhQIHNldHRpbmdzIGhlcmUgYW5kIGZvcmNlIGNvbGxhcHNlLlxcbjE4OTE6XFx0XFx0ICovXFxuMTg5MjpcXHRcXHRpZiAoIXRocF92bWFfYWxsb3dhYmxlX29yZGVyKHZtYSwgdm1hLVxcdTAwM2V2bV9mbGFncywgVFZBX0ZPUkNFRF9DT0xMQVBTRSwgUE1EX09SREVSKSlcXG4xODkzOlxcdFxcdFxcdHJldHVybiBTQ0FOX1ZNQV9DSEVDSztcXG4xODk0OlxcdFxcbjE4OTU6XFx0XFx0LypcXG4xODk2OlxcdFxcdCAqIEtlZXAgcG1kIHBndGFibGUgd2hpbGUgdGhlIHVmZmQgYml0IGlzIGluIHVzZTsgc2VlIGNvbW1lbnQgaW5cXG4xODk3OlxcdFxcdCAqIHJldHJhY3RfcGFnZV90YWJsZXMoKS5cXG4xODk4OlxcdFxcdCAqL1xcbjE4OTk6XFx0XFx0aWYgKHVzZXJmYXVsdGZkX3Byb3RlY3RlZCh2bWEpKVxcbjE5MDA6XFx0XFx0XFx0cmV0dXJuIFNDQU5fUFRFX1VGRkQ7XFxuMTkwMTpcXHRcXG4xOTAyOlxcdFxcdC8qXFxuMTkwMzpcXHRcXHQgKiBVc2VyZmF1bHRmZC1taW5vci1yZWdpc3RlcmVkIFZNQXMgc2hvdWxkIG5vdCBiZSBjb2xsYXBzZWQsIGFzXFxuMTkwNDpcXHRcXHQgKiB1c2Vyc3BhY2UgaXMgZXhwZWN0aW5nIHRvIGV4cGxpY2l0bHkgaW5zdGFsbCBQVEVzLlxcbjE5MDU6XFx0XFx0ICovXFxuMTkwNjpcXHRcXHRpZiAodXNlcmZhdWx0ZmRfbWlub3Iodm1hKSlcXG4xOTA3OlxcdFxcdFxcdHJldHVybiBTQ0FOX1BURV9VRkZEO1xcbjE5MDg6XFx0XFxuMTkwOTpcXHRcXHRmb2xpbyA9IGZpbGVtYXBfbG9ja19mb2xpbyh2bWEtXFx1MDAzZXZtX2ZpbGUtXFx1MDAzZWZfbWFwcGluZyxcXG4xOTEwOlxcdFxcdFxcdFxcdCAgICAgICBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGhhZGRyKSk7XFxuMTkxMTpcXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG4xOTEyOlxcdFxcdFxcdHJldHVybiBTQ0FOX1BBR0VfTlVMTDtcXG4xOTEzOlxcdFxcbjE5MTQ6XFx0XFx0aWYgKCFpc19wbWRfb3JkZXIoZm9saW9fb3JkZXIoZm9saW8pKSkge1xcbjE5MTU6XFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QQUdFX0NPTVBPVU5EO1xcbjE5MTY6XFx0XFx0XFx0Z290byBkcm9wX2ZvbGlvO1xcbjE5MTc6XFx0XFx0fVxcbjE5MTg6XFx0XFxuMTkxOTpcXHRcXHRyZXN1bHQgPSBmaW5kX3BtZF9vcl90aHBfb3Jfbm9uZShtbSwgaGFkZHIsIFxcdTAwMjZwbWQpO1xcbjE5MjA6XFx0XFx0c3dpdGNoIChyZXN1bHQpIHtcXG4xOTIxOlxcdFxcdGNhc2UgU0NBTl9TVUNDRUVEOlxcbjE5MjI6XFx0XFx0XFx0YnJlYWs7XFxuMTkyMzpcXHRcXHRjYXNlIFNDQU5fTk9fUFRFX1RBQkxFOlxcbjE5MjQ6XFx0XFx0XFx0LypcXG4xOTI1OlxcdFxcdFxcdCAqIEFsbCBwdGUgZW50cmllcyBoYXZlIGJlZW4gcmVtb3ZlZCBhbmQgcG1kIGNsZWFyZWQuXFxuMTkyNjpcXHRcXHRcXHQgKiBTa2lwIGFsbCB0aGUgcHRlIGNoZWNrcyBhbmQganVzdCB1cGRhdGUgdGhlIHBtZCBtYXBwaW5nLlxcbjE5Mjc6XFx0XFx0XFx0ICovXFxuMTkyODpcXHRcXHRcXHRnb3RvIG1heWJlX2luc3RhbGxfcG1kO1xcbjE5Mjk6XFx0XFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzI6NTMuNjI0NTc2NDE0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzQzMjQ0NzU3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqSHVudGluZyBEb3duIFRob3NlIFRIUCBDb2xsYXBzaW5nIENhbGxlcnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCwgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCwgYW5kIG1heWJlIGV2ZW4gdGhlIGtodWdlcGFnZWQgY2FsbHMgYXJlIGNvbWluZyBmcm9tLiBUaGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBUSFAgY29sbGFwc2luZyBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgaW4gdGhlIGNvZGUuIEknbSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGZvciB0aGUgZGlyZWN0IGNhbGxlcnMuIExldCdzIGdldCByaWdodCB0byBpdCAtIEknbGwgcnVuIGEgc2VhcmNoIGZvciB0aGUgY2FsbCBzaXRlcyBvZiBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBhbmQgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCB0byBidWlsZCBhIGxpc3Qgb2YgYWxsIGxvY2F0aW9ucyB1c2luZyB0aG9zZSBmdW5jdGlvbnMuIEtub3dpbmcgdGhlaXIgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgYW4gaWRlYSBhYm91dCBob3cgYW5kIHdoZXJlIHRoZXkgYXJlIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NDUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjMzOjAxLjA1NzAyNTc0MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDEzODE1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz0xODIwPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHNldF9odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE4NTUtXFxubW0va2h1Z2VwYWdlZC5jOjE4NTY6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTE4NTctXFx0XFx0Ym9vbCBpbnN0YWxsX3BtZClcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMTAxPXZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMTAzLXtcXG5tbS9raHVnZXBhZ2VkLmM6MjEwNDpcXHR0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIGFkZHIsIGluc3RhbGxfcG1kKTtcXG5tbS9raHVnZXBhZ2VkLmMtMjEwNS19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MjI1ND1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjYzMy1cXHQgKiBSZW1vdmUgcHRlIHBhZ2UgdGFibGVzLCBzbyB3ZSBjYW4gcmUtZmF1bHQgdGhlIHBhZ2UgYXMgaHVnZS5cXG5tbS9raHVnZXBhZ2VkLmM6MjYzNDpcXHQgKiBJZiBNQURWX0NPTExBUFNFLCBhZGp1c3QgcmVzdWx0IHRvIGNhbGwgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKCkuXFxubW0va2h1Z2VwYWdlZC5jLTI2MzUtXFx0ICovXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9Mjc5Nz1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zaW5nbGVfcG1kKHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yODQxLVxcdFxcdGVsc2VcXG5tbS9raHVnZXBhZ2VkLmM6Mjg0MjpcXHRcXHRcXHRyZXN1bHQgPSB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTI4NDMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAhY2MtXFx1MDAzZWlzX2todWdlcGFnZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozMzowMS4xMjcxNjc3NTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjc4OTk5NTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqVHJhY2luZyB0aGUgQ29sbGFwc2Ugb2YgSHVnZSBQYWdlcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgbWVudGFsbHkgdHJhY2luZyB0aGUgY2FsbHMgdG8gYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYC4gVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHRoZSBmdW5jdGlvbiB3aGVyZSB0aGUgYWN0dWFsIGhlYXZ5IGxpZnRpbmcgaGFwcGVucyB3aGVuIHdlJ3JlIGJyZWFraW5nIGRvd24gYSBodWdlIHBhZ2UgdGhhdCdzIGJlZW4gbWFwcGVkIHZpYSBQVEVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzLCB0aGUgZGlmZmVyZW50IGNvbnRleHRzIGluIHdoaWNoIHRoaXMgZnVuY3Rpb24gZ2V0cyBpbnZva2VkLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHVzZXItdHJpZ2dlcmVkIGRlZnJhZywgYSBiYWNrZ3JvdW5kIGtlcm5lbCBvcGVyYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBLbm93aW5nIHRoZSBjYWxsZXIgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgKndoeSogdGhlIGNvbGxhcHNlIGlzIGhhcHBlbmluZywgYW5kIHRoZXJlZm9yZSBmb3IgZGlhZ25vc2luZyBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgcmVsYXRlZCB0byBpdC4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBkaWZmZXJlbnQgY29kZSBwYXRocyBhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgd2hhdCBjb250ZXh0IGlzIHBhc3NlZCBpbiwgd2hhdCBsb2NrcyBhcmUgaGVsZCwgaWYgYW55LCBhbmQgd2hhdCBhc3N1bXB0aW9ucyB0aGUgY2FsbGluZyBjb2RlIGlzIG1ha2luZyBhYm91dCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgJ3MgYmVoYXZpb3IuIEkgbmVlZCB0byBtYXAgdGhlIGNhdXNhbCBjaGFpbiB0byBiZSBhYmxlIHRvIHJlYXNvbiBhYm91dCBwb3NzaWJsZSBmYWlsdXJlIG1vZGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTk0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzM6MDQuODA2MTY5Nzc2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMDc1MTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9raHVnZXBhZ2VkLmM9MTgyMD1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBzZXRfaHVnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xODU1LVxcbm1tL2todWdlcGFnZWQuYzoxODU2OnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2todWdlcGFnZWQuYy0xODU3LVxcdFxcdGJvb2wgaW5zdGFsbF9wbWQpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjA4OS0vKipcXG5tbS9raHVnZXBhZ2VkLmM6MjA5MDogKiBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocCAtIFRyeSB0byBjb2xsYXBzZSBhIHB0ZS1tYXBwZWQgVEhQIGZvciBtbSBhdFxcbm1tL2todWdlcGFnZWQuYy0yMDkxLSAqIGFkZHJlc3MgaGFkZHIuXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjEwMC0gKi9cXG5tbS9raHVnZXBhZ2VkLmM6MjEwMTp2b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTIxMDItXFx0XFx0Ym9vbCBpbnN0YWxsX3BtZClcXG5tbS9raHVnZXBhZ2VkLmMtMjEwMy17XFxubW0va2h1Z2VwYWdlZC5jOjIxMDQ6XFx0dHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLCBpbnN0YWxsX3BtZCk7XFxubW0va2h1Z2VwYWdlZC5jLTIxMDUtfVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTIyNTQ9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI2MzMtXFx0ICogUmVtb3ZlIHB0ZSBwYWdlIHRhYmxlcywgc28gd2UgY2FuIHJlLWZhdWx0IHRoZSBwYWdlIGFzIGh1Z2UuXFxubW0va2h1Z2VwYWdlZC5jOjI2MzQ6XFx0ICogSWYgTUFEVl9DT0xMQVBTRSwgYWRqdXN0IHJlc3VsdCB0byBjYWxsIHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpLlxcbm1tL2todWdlcGFnZWQuYy0yNjM1LVxcdCAqL1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTI3OTc9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjg0MS1cXHRcXHRlbHNlXFxubW0va2h1Z2VwYWdlZC5jOjI4NDI6XFx0XFx0XFx0cmVzdWx0ID0gdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLFxcbm1tL2todWdlcGFnZWQuYy0yODQzLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIWNjLVxcdTAwM2Vpc19raHVnZXBhZ2VkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzM6MDQuODU3MjQ5MDEyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEyMjcwNjQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLiBUaW1lIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gYW5kIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiBhdCB0aGUgY29yZS4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIHBpbnBvaW50aW5nIHRoZSBjYWxsZXJzIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQsIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcywgYW5kIHdoYXQgdGhhdCB0ZWxscyBtZSBhYm91dCB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSBoZXJlLiBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgaW1tZWRpYXRlbHkgZ2l2ZSBtZSBjb250ZXh0LCBhbmQgaGVscCBtZSByZWFzb24gYWJvdXQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIGFyZWFzIHJpcGUgZm9yIG9wdGltaXphdGlvbi4gSSdtIHRoaW5raW5nIEkgY2FuIHN0YXJ0IGJ5Li4uIHdlbGwsIEkga25vdyB0aGVyZSBhcmUgcGxlbnR5IG9mIGFwcHJvYWNoZXMgSSBjb3VsZCB1c2UsIHNvIGxldCBtZSBnZXQgZ29pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNzIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozMzowNi45Nzk5NTg4MThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDA0NTMzNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29sbGFwc2VfcHRlX21hcHBlZF90aHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg9MTk9ZXh0ZXJuIGJvb2wgY3VycmVudF9pc19raHVnZXBhZ2VkKHZvaWQpO1xcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oOjIwOnZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC0yMS1cXHRcXHRib29sIGluc3RhbGxfcG1kKTtcXG4tLVxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oPTQxPXN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTQ0LX1cXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaDo0NTpzdGF0aWMgaW5saW5lIHZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtNDYtXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGluc3RhbGxfcG1kKVxcbi0tXFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmM9NDk5PWludCB1cHJvYmVfd3JpdGUoc3RydWN0IGFyY2hfdXByb2JlICphdXByb2JlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTU5OS1cXHRpZiAocmV0IFxcdTAwM2UgMClcXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYzo2MDA6XFx0XFx0Y29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIHZhZGRyLCBmYWxzZSk7XFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmMtNjAxLVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTE4MjA9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgc2V0X2h1Z2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTg1NS1cXG5tbS9raHVnZXBhZ2VkLmM6MTg1NjpzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9raHVnZXBhZ2VkLmMtMTg1Ny1cXHRcXHRib29sIGluc3RhbGxfcG1kKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIwODktLyoqXFxubW0va2h1Z2VwYWdlZC5jOjIwOTA6ICogY29sbGFwc2VfcHRlX21hcHBlZF90aHAgLSBUcnkgdG8gY29sbGFwc2UgYSBwdGUtbWFwcGVkIFRIUCBmb3IgbW0gYXRcXG5tbS9raHVnZXBhZ2VkLmMtMjA5MS0gKiBhZGRyZXNzIGhhZGRyLlxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIxMDAtICovXFxubW0va2h1Z2VwYWdlZC5jOjIxMDE6dm9pZCBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2todWdlcGFnZWQuYy0yMTAyLVxcdFxcdGJvb2wgaW5zdGFsbF9wbWQpXFxubW0va2h1Z2VwYWdlZC5jLTIxMDMte1xcbm1tL2todWdlcGFnZWQuYzoyMTA0OlxcdHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChtbSwgYWRkciwgaW5zdGFsbF9wbWQpO1xcbm1tL2todWdlcGFnZWQuYy0yMTA1LX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMjU0PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNjMzLVxcdCAqIFJlbW92ZSBwdGUgcGFnZSB0YWJsZXMsIHNvIHdlIGNhbiByZS1mYXVsdCB0aGUgcGFnZSBhcyBodWdlLlxcbm1tL2todWdlcGFnZWQuYzoyNjM0OlxcdCAqIElmIE1BRFZfQ09MTEFQU0UsIGFkanVzdCByZXN1bHQgdG8gY2FsbCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKS5cXG5tbS9raHVnZXBhZ2VkLmMtMjYzNS1cXHQgKi9cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yNzk3PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NpbmdsZV9wbWQodW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI4NDEtXFx0XFx0ZWxzZVxcbm1tL2todWdlcGFnZWQuYzoyODQyOlxcdFxcdFxcdHJlc3VsdCA9IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChtbSwgYWRkcixcXG5tbS9raHVnZXBhZ2VkLmMtMjg0My1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICFjYy1cXHUwMDNlaXNfa2h1Z2VwYWdlZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjMzOjA4Ljg4MDQxODc4MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTU2MDUwMDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIENhbGxzIGluIGBtbS9raHVnZXBhZ2VkLmNgKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBraHVnZXBhZ2VkIGNvZGUgYWdhaW4uIFRpbWUgdG8gZmlndXJlIG91dCB0aGUgY2FsbGluZyBjb250ZXh0IGZvciBgY29sbGFwc2Vfc2luZ2xlX3BtZGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aGVuKiBhbmQgKndoeSogdGhpcyBmdW5jdGlvbiBnZXRzIGludm9rZWQuIFRoaXMgdGVsbHMgbWUgYSBsb3QgYWJvdXQgaG93IHRoZSBrZXJuZWwgaXMgaGFuZGxpbmcgcGFnZSBtZXJnZXMgYW5kIHNwbGl0cyB1bmRlciBodWdlcGFnZXMuIEknbGwgbmVlZCB0byB1c2UgbXkgcHJlZmVycmVkIGRlYnVnZ2luZyB0b29scywgbGlrZWx5IGEgY29tYmluYXRpb24gb2YgYHRyYWNlcG9pbnRzYCwgYGZ0cmFjZWAsIGFuZCBwb3RlbnRpYWxseSBhIGJpdCBvZiBzdGF0aWMgYW5hbHlzaXMgd2l0aCBzb21ldGhpbmcgbGlrZSBgY3Njb3BlYCBvciBgY2xhbmdkYCB0byBuYXZpZ2F0ZSB0aGUgY29kZSBlZmZpY2llbnRseS4gSSdtIGxvb2tpbmcgZm9yIHRoZSBpbW1lZGlhdGUgY2FsbGVycyBhbmQgZnJvbSB0aGVyZSBJIHdpbGwgdGhlbiBkZXRlcm1pbmUgdGhlIGNvbnRleHQgd2hpY2ggY2FsbHMgdGhvc2UgY2FsbGVycy4gVWx0aW1hdGVseSwgd2hhdCBpcyB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIHRoYXQgdHJpZ2dlcnMgYSBgY29sbGFwc2Vfc2luZ2xlX3BtZGAgY2FsbD8gSXMgaXQgcmVsYXRlZCB0byBmcmFnbWVudGF0aW9uLCBtZW1vcnkgcHJlc3N1cmUsIE5VTUEgaW50ZXJhY3Rpb25zLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBzb2xpZCB1bmRlcnN0YW5kaW5nIGhlcmUgaXMgY3JpdGljYWwgZm9yIGRpYWdub3NpbmcgcGVyZm9ybWFuY2UgaXNzdWVzIHJlbGF0ZWQgdG8gdHJhbnNwYXJlbnQgaHVnZXBhZ2VzLCBhbmQgb3B0aW1pemluZyBteSBvd24gc3BlY2lmaWMgd29ya2xvYWRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjAyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzM6MTMuMDM2NDcxNzU4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9raHVnZXBhZ2VkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjc5NSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjc5NTpcXHQgKiB0aGUgcmVzdWx0cy5cXG4yNzk2OlxcdCAqL1xcbjI3OTc6XFx0c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXFxuMjc5ODpcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgYm9vbCAqbG9ja19kcm9wcGVkLFxcbjI3OTk6XFx0XFx0XFx0c3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxcbjI4MDA6XFx0e1xcbjI4MDE6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXFx1MDAzZXZtX21tO1xcbjI4MDI6XFx0XFx0Ym9vbCB0cmlnZ2VyZWRfd2IgPSBmYWxzZTtcXG4yODAzOlxcdFxcdGVudW0gc2Nhbl9yZXN1bHQgcmVzdWx0O1xcbjI4MDQ6XFx0XFx0c3RydWN0IGZpbGUgKmZpbGU7XFxuMjgwNTpcXHRcXHRwZ29mZl90IHBnb2ZmO1xcbjI4MDY6XFx0XFxuMjgwNzpcXHRcXHRtbWFwX2Fzc2VydF9sb2NrZWQobW0pO1xcbjI4MDg6XFx0XFxuMjgwOTpcXHRcXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpKSB7XFxuMjgxMDpcXHRcXHRcXHRyZXN1bHQgPSBjb2xsYXBzZV9zY2FuX3BtZChtbSwgdm1hLCBhZGRyLCBsb2NrX2Ryb3BwZWQsIGNjKTtcXG4yODExOlxcdFxcdFxcdGdvdG8gZW5kO1xcbjI4MTI6XFx0XFx0fVxcbjI4MTM6XFx0XFxuMjgxNDpcXHRcXHRmaWxlID0gZ2V0X2ZpbGUodm1hLVxcdTAwM2V2bV9maWxlKTtcXG4yODE1OlxcdFxcdHBnb2ZmID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyKTtcXG4yODE2OlxcdFxcbjI4MTc6XFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuMjgxODpcXHRcXHQqbG9ja19kcm9wcGVkID0gdHJ1ZTtcXG4yODE5OlxcdHJldHJ5OlxcbjI4MjA6XFx0XFx0cmVzdWx0ID0gY29sbGFwc2Vfc2Nhbl9maWxlKG1tLCBhZGRyLCBmaWxlLCBwZ29mZiwgY2MpO1xcbjI4MjE6XFx0XFxuMjgyMjpcXHRcXHQvKlxcbjI4MjM6XFx0XFx0ICogRm9yIE1BRFZfQ09MTEFQU0UsIHdoZW4gZW5jb3VudGVyaW5nIGRpcnR5IHBhZ2VzLCB0cnkgdG8gd3JpdGViYWNrLFxcbjI4MjQ6XFx0XFx0ICogdGhlbiByZXRyeSB0aGUgY29sbGFwc2Ugb25lIHRpbWUuXFxuMjgyNTpcXHRcXHQgKi9cXG4yODI2OlxcdFxcdGlmICghY2MtXFx1MDAzZWlzX2todWdlcGFnZWQgXFx1MDAyNlxcdTAwMjYgcmVzdWx0ID09IFNDQU5fUEFHRV9ESVJUWV9PUl9XUklURUJBQ0sgXFx1MDAyNlxcdTAwMjZcXG4yODI3OlxcdFxcdCAgICAhdHJpZ2dlcmVkX3diIFxcdTAwMjZcXHUwMDI2IG1hcHBpbmdfY2FuX3dyaXRlYmFjayhmaWxlLVxcdTAwM2VmX21hcHBpbmcpKSB7XFxuMjgyODpcXHRcXHRcXHRjb25zdCBsb2ZmX3QgbHN0YXJ0ID0gKGxvZmZfdClwZ29mZiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbjI4Mjk6XFx0XFx0XFx0Y29uc3QgbG9mZl90IGxlbmQgPSBsc3RhcnQgKyBIUEFHRV9QTURfU0laRSAtIDE7XFxuMjgzMDpcXHRcXG4yODMxOlxcdFxcdFxcdGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZS1cXHUwMDNlZl9tYXBwaW5nLCBsc3RhcnQsIGxlbmQpO1xcbjI4MzI6XFx0XFx0XFx0dHJpZ2dlcmVkX3diID0gdHJ1ZTtcXG4yODMzOlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjgzNDpcXHRcXHR9XFxuMjgzNTpcXHRcXHRmcHV0KGZpbGUpO1xcbjI4MzY6XFx0XFxuMjgzNzpcXHRcXHRpZiAocmVzdWx0ID09IFNDQU5fUFRFX01BUFBFRF9IVUdFUEFHRSkge1xcbjI4Mzg6XFx0XFx0XFx0bW1hcF9yZWFkX2xvY2sobW0pO1xcbjI4Mzk6XFx0XFx0XFx0aWYgKGNvbGxhcHNlX3Rlc3RfZXhpdF9vcl9kaXNhYmxlKG1tKSlcXG4yODQwOlxcdFxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fQU5ZX1BST0NFU1M7XFxuMjg0MTpcXHRcXHRcXHRlbHNlXFxuMjg0MjpcXHRcXHRcXHRcXHRyZXN1bHQgPSB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIGFkZHIsXFxuMjg0MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICFjYy1cXHUwMDNlaXNfa2h1Z2VwYWdlZCk7XFxuMjg0NDpcXHRcXHRcXHRpZiAocmVzdWx0ID09IFNDQU5fUE1EX01BUFBFRClcXG4yODQ1OlxcdFxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fU1VDQ0VFRDtcXG4yODQ2OlxcdFxcdFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbjI4NDc6XFx0XFx0fVxcbjI4NDg6XFx0ZW5kOlxcbjI4NDk6XFx0XFx0aWYgKGNjLVxcdTAwM2Vpc19raHVnZXBhZ2VkIFxcdTAwMjZcXHUwMDI2IHJlc3VsdCA9PSBTQ0FOX1NVQ0NFRUQpXFxuMjg1MDpcXHRcXHRcXHQrK2todWdlcGFnZWRfcGFnZXNfY29sbGFwc2VkO1xcbjI4NTE6XFx0XFx0cmV0dXJuIHJlc3VsdDtcXG4yODUyOlxcdH1cXG4yODUzOlxcdFxcbjI4NTQ6XFx0c3RhdGljIHZvaWQgY29sbGFwc2Vfc2Nhbl9tbV9zbG90KHVuc2lnbmVkIGludCBwcm9ncmVzc19tYXgsXFxuMjg1NTpcXHRcXHRcXHRlbnVtIHNjYW5fcmVzdWx0ICpyZXN1bHQsIHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYylcXG4yODU2OlxcdFxcdF9fcmVsZWFzZXMoXFx1MDAyNmtodWdlcGFnZWRfbW1fbG9jaylcXG4yODU3OlxcdFxcdF9fYWNxdWlyZXMoXFx1MDAyNmtodWdlcGFnZWRfbW1fbG9jaylcXG4yODU4OlxcdHtcXG4yODU5OlxcdFxcdHN0cnVjdCB2bWFfaXRlcmF0b3Igdm1pO1xcbjI4NjA6XFx0XFx0c3RydWN0IG1tX3Nsb3QgKnNsb3Q7XFxuMjg2MTpcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG4yODYyOlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbjI4NjM6XFx0XFx0dW5zaWduZWQgaW50IHByb2dyZXNzX3ByZXYgPSBjYy1cXHUwMDNlcHJvZ3Jlc3M7XFxuMjg2NDpcXHRcXG4yODY1OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmtodWdlcGFnZWRfbW1fbG9jayk7XFxuMjg2NjpcXHRcXHQqcmVzdWx0ID0gU0NBTl9GQUlMO1xcbjI4Njc6XFx0XFxuMjg2ODpcXHRcXHRpZiAoa2h1Z2VwYWdlZF9zY2FuLm1tX3Nsb3QpIHtcXG4yODY5OlxcdFxcdFxcdHNsb3QgPSBraHVnZXBhZ2VkX3NjYW4ubW1fc2xvdDtcXG4yODcwOlxcdFxcdH0gZWxzZSB7XFxuMjg3MTpcXHRcXHRcXHRzbG90ID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2a2h1Z2VwYWdlZF9zY2FuLm1tX2hlYWQsXFxuMjg3MjpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtbV9zbG90LCBtbV9ub2RlKTtcXG4yODczOlxcdFxcdFxcdGtodWdlcGFnZWRfc2Nhbi5hZGRyZXNzID0gMDtcXG4yODc0OlxcdFxcdFxcdGtodWdlcGFnZWRfc2Nhbi5tbV9zbG90ID0gc2xvdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzM6MTMuMDM2NjIxODc4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMDM3MjE0NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgTUFEVl9DT0xMQVBTRWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEknbSB3b25kZXJpbmcgYWJvdXQgdGhlIGJlaGF2aW9yIG9mIGBNQURWX0NPTExBUFNFYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgaG93IGl0J3MgaW1wbGVtZW50ZWQuIExldCdzIHN0YXJ0IHdpdGggYSBzZWFyY2ggZm9yIGBNQURWX0NPTExBUFNFYC4gSSdsbCBuZWVkIHRvIHJldmlldyB0aGUgc291cmNlIGNvZGUsIG1heWJlIHRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiBvciBtYW4gcGFnZXMgdG8gdW5kZXJzdGFuZCBpdHMgcHJlY2lzZSBmdW5jdGlvbiBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvbiB3aGF0IHRoaXMgc3lzdGVtIGNhbGwgKmFjdHVhbGx5KiBkb2VzIHVuZGVyIHRoZSBob29kLiBJIGV4cGVjdCB0byBkZWx2ZSBpbnRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSB0YWJsZSBzdHJ1Y3R1cmVzIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBtZWNoYW5pc21zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Nzc5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozMzoxNS4yNDAzNDU4NjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjE3NjQzOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUFEVl9DT0xMQVBTRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q9MTIxPWZvciB3aGljaCB2YXJ5IGJ5IHN5c3RlbS5cXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0xMjQtICAgICAgICAgIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgZ2xvYmFsbHkuIFRoaXMgaXMgYmVjYXVzZSBgYG1hZHZpc2UoLi4uLFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdDoxMjU6ICAgICAgICAgIE1BRFZfQ09MTEFQU0UpYGAgaWdub3JlcyB0aGVzZSBzZXR0aW5ncyBhbmQgY29sbGFwc2VzIHJhbmdlcyB0b1xcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0xMjYtICAgICAgICAgIFBNRC1zaXplZCBodWdlIHBhZ2VzIHVuY29uZGl0aW9uYWxseS5cXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdD0xOTU9bmV2ZXJcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMTk2LVxcdHNob3VsZCBiZSBzZWxmLWV4cGxhbmF0b3J5LiBOb3RlIHRoYXQgYGBtYWR2aXNlKC4uLixcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q6MTk3OlxcdE1BRFZfQ09MTEFQU0UpYGAgY2FuIHN0aWxsIGNhdXNlIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgdG8gYmVcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMTk4LVxcdG9idGFpbmVkIGV2ZW4gaWYgdGhpcyBtb2RlIGlzIHNwZWNpZmllZCBldmVyeXdoZXJlLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0PTIzNT1zdXBwb3J0IHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0yMzgtXFx0XFx0VGhpcyB3aWxsIGRpc2FibGUgVEhQcyBjb21wbGV0ZWx5IGZvciB0aGUgcHJvY2VzcywgaXJyZXNwZWN0aXZlXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0OjIzOTpcXHRcXHRvZiBnbG9iYWwgVEhQIGNvbnRyb2xzIG9yIG1hZHZpc2UoLi4uLCBNQURWX0NPTExBUFNFKSBiZWluZyB1c2VkLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0yNDAtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMjQ0LVxcdFxcdC0gR2xvYmFsIFRIUCBjb250cm9scyBhcmUgc2V0IHRvIFxcXCJhbHdheXNcXFwiIG9yIFxcXCJtYWR2aXNlXFxcIiBhbmRcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q6MjQ1OlxcdFxcdCAgbWFkdmlzZSguLi4sIE1BRFZfSFVHRVBBR0UpIG9yIG1hZHZpc2UoLi4uLCBNQURWX0NPTExBUFNFKSBpcyB1c2VkLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdDoyNDY6XFx0XFx0LSBHbG9iYWwgVEhQIGNvbnRyb2xzIGFyZSBzZXQgdG8gXFxcIm5ldmVyXFxcIiBhbmQgbWFkdmlzZSguLi4sIE1BRFZfQ09MTEFQU0UpXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0LTI0Ny1cXHRcXHQgIGlzIHVzZWQuIFRoaXMgaXMgdGhlIHNhbWUgYmVoYXZpb3IgYXMgaWYgVEhQcyB3b3VsZCBub3QgYmUgZGlzYWJsZWQgb25cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMjQ4LVxcdFxcdCAgYSBwcm9jZXNzIGxldmVsLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdDoyNDk6XFx0XFx0Tm90ZSB0aGF0IE1BRFZfQ09MTEFQU0UgaXMgY3VycmVudGx5IGFsd2F5cyByZWplY3RlZCBpZlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0yNTAtXFx0XFx0bWFkdmlzZSguLi4sIE1BRFZfTk9IVUdFUEFHRSkgaXMgc2V0IG9uIGFuIGFyZWEuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q9NDQ1PW5ldmVyXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0OjQ0NjogICAgRG8gbm90IGFsbG9jYXRlIGh1Z2UgcGFnZXMuIE5vdGUgdGhhdCBgYG1hZHZpc2UoLi4uLCBNQURWX0NPTExBUFNFKWBgXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0LTQ0Ny0gICAgY2FuIHN0aWxsIGNhdXNlIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgdG8gYmUgb2J0YWluZWQgZXZlbiBpZiB0aGlzIG1vZGVcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdD01MDU9bmV2ZXJcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtNTA2LSAgICBEbyBub3QgYWxsb2NhdGUgXFx1MDAzY3NpemVcXHUwMDNlIGh1Z2UgcGFnZXMuIE5vdGUgdGhhdCBgYG1hZHZpc2UoLi4uLFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdDo1MDc6ICAgIE1BRFZfQ09MTEFQU0UpYGAgY2FuIHN0aWxsIGNhdXNlIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgdG8gYmUgb2J0YWluZWRcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtNTA4LSAgICBldmVuIGlmIHRoaXMgbW9kZSBpcyBzcGVjaWZpZWQgZXZlcnl3aGVyZTtcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdD01MzI9dGhhdCBzdXBwb3J0cyBlYWNoIGFjdGlvbiBhcmUgYXMgYmVsb3cuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QtNTQ3LSAgIGZhaWwuXFxuRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0OjU0ODogLSBgYGNvbGxhcHNlYGA6IENhbGwgYGBtYWR2aXNlKClgYCBmb3IgdGhlIHJlZ2lvbiB3aXRoIGBgTUFEVl9DT0xMQVBTRWBgLlxcbkRvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdC01NDktICAgU3VwcG9ydGVkIGJ5IGBgdmFkZHJgYCBhbmQgYGBmdmFkZHJgYCBvcGVyYXRpb25zIHNldC4gV2hlblxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdD01NjI9YXJlIGV4dHJhIHJlcXVpcmVtZW50cyBmb3IgYWNjZXNzaW5nIHRoZW06XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTU2OC0gIEluIHBhcnRpY3VsYXIsIHRoaXMgaGFwcGVucyBpbiA6YzpmdW5jOmAhcmV0cmFjdF9wYWdlX3RhYmxlc2Agd2hlbiBoYW5kbGluZ1xcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q6NTY5OiAgOmM6bWFjcm86YCFNQURWX0NPTExBUFNFYC5cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTU3MC0gIFNvIGFjY2Vzc2luZyBQVEUtbGV2ZWwgcGFnZSB0YWJsZXMgcmVxdWlyZXMgYXQgbGVhc3QgaG9sZGluZyBhbiBSQ1UgcmVhZCBsb2NrO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC01NzktICB0aGUgcmVxdWlyZW1lbnRzLiBJbiBwYXJ0aWN1bGFyLCB0aGlzIGFsc28gaGFwcGVucyBpbiA6YzpmdW5jOmAhcmV0cmFjdF9wYWdlX3RhYmxlc2BcXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjU4MDogIHdoZW4gaGFuZGxpbmcgOmM6bWFjcm86YCFNQURWX0NPTExBUFNFYC5cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTU4MS1cXG4tLVxcbmFyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtNzgtXFxuYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDo3OTojZGVmaW5lIE1BRFZfQ09MTEFQU0VcXHQyNVxcdFxcdC8qIFN5bmNocm9ub3VzIGh1Z2VwYWdlIGNvbGxhcHNlICovXFxuYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC04MC1cXG4tLVxcbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0xMDUtXFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjEwNjojZGVmaW5lIE1BRFZfQ09MTEFQU0VcXHQyNVxcdFxcdC8qIFN5bmNocm9ub3VzIGh1Z2VwYWdlIGNvbGxhcHNlICovXFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTEwNy1cXG4tLVxcbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTcyLVxcbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjczOiNkZWZpbmUgTUFEVl9DT0xMQVBTRVxcdDI1XFx0XFx0LyogU3luY2hyb25vdXMgaHVnZXBhZ2UgY29sbGFwc2UgKi9cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC03NC1cXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjLmM9Mzk0PWFzbWxpbmthZ2Ugbm90cmFjZSBsb25nIHBhcmlzY19tYWR2aXNlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sIGludCBiZWhhdmlvcilcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjLmMtNDA0LVxcdGNhc2UgNzI6IGJlaGF2aW9yID0gTUFEVl9LRUVQT05GT1JLO1xcdGJyZWFrO1xcbmFyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjLmM6NDA1OlxcdGNhc2UgNzM6IGJlaGF2aW9yID0gTUFEVl9DT0xMQVBTRTtcXHRicmVhaztcXG5hcmNoL3BhcmlzYy9rZXJuZWwvc3lzX3BhcmlzYy5jLTQwNi1cXHR9XFxuLS1cXG5hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0xMTMtXFxuYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmg6MTE0OiNkZWZpbmUgTUFEVl9DT0xMQVBTRVxcdDI1XFx0XFx0LyogU3luY2hyb25vdXMgaHVnZXBhZ2UgY29sbGFwc2UgKi9cXG5hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0xMTUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9OTM9c3RydWN0IGRhbW9uX3RhcmdldCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTEzLSAqIEBEQU1PU19OT0hVR0VQQUdFOlxcdENhbGwgYGBtYWR2aXNlKClgYCBmb3IgdGhlIHJlZ2lvbiB3aXRoIE1BRFZfTk9IVUdFUEFHRS5cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTE0OiAqIEBEQU1PU19DT0xMQVBTRTpcXHRDYWxsIGBgbWFkdmlzZSgpYGAgZm9yIHRoZSByZWdpb24gd2l0aCBNQURWX0NPTExBUFNFLlxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMTUtICogQERBTU9TX0xSVV9QUklPOlxcdFByaW9yaXRpemUgdGhlIHJlZ2lvbiBvbiBpdHMgTFJVIGxpc3RzLlxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9OTc9ZW51bSB0dmFfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xMDAtXFx0VFZBX0tIVUdFUEFHRUQsXFx0XFx0LyogS2h1Z2VwYWdlZCBjb2xsYXBzZS4gKi9cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoxMDE6XFx0VFZBX0ZPUkNFRF9DT0xMQVBTRSxcXHQvKiBGb3JjZWQgY29sbGFwc2UgKGUuZy4gTUFEVl9DT0xMQVBTRSkuICovXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTAyLX07XFxuLS1cXG5pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaC03OS1cXG5pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaDo4MDojZGVmaW5lIE1BRFZfQ09MTEFQU0VcXHQyNVxcdFxcdC8qIFN5bmNocm9ub3VzIGh1Z2VwYWdlIGNvbGxhcHNlICovXFxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtODEtXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaD0xMzQ9c3RydWN0IHByY3RsX21tX21hcCB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaC0xODctICogRG9uJ3QgZGlzYWJsZSBUSFBzIHdoZW4gZXhwbGljaXRseSBhZHZpc2VkIChlLmcuLCBNQURWX0hVR0VQQUdFIC9cXG5pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaDoxODg6ICogVk1fSFVHRVBBR0UsIE1BRFZfQ09MTEFQU0UpLlxcbmluY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oLTE4OS0gKi9cXG4tLVxcbm1tL0tjb25maWc9ODg1PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05MDAtXFx0ICAndHJhbnNwYXJlbnRfaHVnZXBhZ2Vfc2htZW09JyBvcHRpb24gb3IgYXQgcnVudGltZSB2aWEgc3lzZnNcXG5tbS9LY29uZmlnOjkwMTpcXHQgIGtub2IuIE5vdGUgdGhhdCBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpIGNhbiBzdGlsbCBjYXVzZVxcbm1tL0tjb25maWctOTAyLVxcdCAgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyB0byBiZSBvYnRhaW5lZCBldmVuIGlmIHRoaXMgbW9kZSBpc1xcbi0tXFxubW0vS2NvbmZpZz05MzA9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTk0NS1cXHQgICd0cmFuc3BhcmVudF9odWdlcGFnZV90bXBmcz0nIG9wdGlvbi4gTm90ZSB0aGF0XFxubW0vS2NvbmZpZzo5NDY6XFx0ICBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpIGNhbiBzdGlsbCBjYXVzZSB0cmFuc3BhcmVudCBodWdlIHBhZ2VzXFxubW0vS2NvbmZpZy05NDctXFx0ICB0byBiZSBvYnRhaW5lZCBldmVuIGlmIHRoaXMgbW9kZSBpcyBzcGVjaWZpZWQuXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTg3OT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl92YV9hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy05MDEtXFx0Y2FzZSBEQU1PU19DT0xMQVBTRTpcXG5tbS9kYW1vbi92YWRkci5jOjkwMjpcXHRcXHRtYWR2X2FjdGlvbiA9IE1BRFZfQ09MTEFQU0U7XFxubW0vZGFtb24vdmFkZHIuYy05MDMtXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MzY3PXN0YXRpYyB1bnNpZ25lZCBpbnQgY29sbGFwc2VfbWF4X3B0ZXNfbm9uZShzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzczLVxcdFxcdHJldHVybiAwO1xcbm1tL2todWdlcGFnZWQuYzozNzQ6XFx0LyogZm9yIE1BRFZfQ09MTEFQU0UsIGFsbG93IGFueSBlbXB0eS9zaGFyZWQgemVyb3BhZ2UgUFRFcyAqL1xcbm1tL2todWdlcGFnZWQuYy0zNzUtXFx0aWYgKCFjYy1cXHUwMDNlaXNfa2h1Z2VwYWdlZClcXG4tLVxcbm1tL2todWdlcGFnZWQuYz00MDY9c3RhdGljIHVuc2lnbmVkIGludCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTQwOS1cXHQvKlxcbm1tL2todWdlcGFnZWQuYzo0MTA6XFx0ICogRm9yIE1BRFZfQ09MTEFQU0UsIGRvIG5vdCByZXN0cmljdCB0aGUgbnVtYmVyIG9mIFBURXMgdGhhdCBtYXAgc2hhcmVkXFxubW0va2h1Z2VwYWdlZC5jLTQxMS1cXHQgKiBhbm9ueW1vdXMgcGFnZXMuXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NDM0PXN0YXRpYyB1bnNpZ25lZCBpbnQgY29sbGFwc2VfbWF4X3B0ZXNfc3dhcChzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNDM3LVxcdC8qXFxubW0va2h1Z2VwYWdlZC5jOjQzODpcXHQgKiBGb3IgTUFEVl9DT0xMQVBTRSwgZG8gbm90IHJlc3RyaWN0IHRoZSBudW1iZXIgUFRFcyBlbnRyaWVzIG9yXFxubW0va2h1Z2VwYWdlZC5jLTQzOS1cXHQgKiBwYWdlY2FjaGUgZW50cmllcyB0aGF0IGFyZSBub24tcHJlc2VudC5cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMjU0PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMjY3LVxcdC8qXFxubW0va2h1Z2VwYWdlZC5jOjIyNjg6XFx0ICogTUFEVl9DT0xMQVBTRSBpZ25vcmVzIHNobWVtIGh1Z2UgY29uZmlnLCBzbyBkbyBub3QgY2hlY2sgc2htZW1cXG5tbS9raHVnZXBhZ2VkLmMtMjI2OS1cXHQgKlxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI2MzMtXFx0ICogUmVtb3ZlIHB0ZSBwYWdlIHRhYmxlcywgc28gd2UgY2FuIHJlLWZhdWx0IHRoZSBwYWdlIGFzIGh1Z2UuXFxubW0va2h1Z2VwYWdlZC5jOjI2MzQ6XFx0ICogSWYgTUFEVl9DT0xMQVBTRSwgYWRqdXN0IHJlc3VsdCB0byBjYWxsIHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpLlxcbm1tL2todWdlcGFnZWQuYy0yNjM1LVxcdCAqL1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTI3OTc9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjgyMi1cXHQvKlxcbm1tL2todWdlcGFnZWQuYzoyODIzOlxcdCAqIEZvciBNQURWX0NPTExBUFNFLCB3aGVuIGVuY291bnRlcmluZyBkaXJ0eSBwYWdlcywgdHJ5IHRvIHdyaXRlYmFjayxcXG5tbS9raHVnZXBhZ2VkLmMtMjgyNC1cXHQgKiB0aGVuIHJldHJ5IHRoZSBjb2xsYXBzZSBvbmUgdGltZS5cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0zMTYzPXN0YXRpYyBpbnQgbWFkdmlzZV9jb2xsYXBzZV9lcnJubyhlbnVtIHNjYW5fcmVzdWx0IHIpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzE2NS1cXHQvKlxcbm1tL2todWdlcGFnZWQuYzozMTY2OlxcdCAqIE1BRFZfQ09MTEFQU0UgYnJlYWtzIGZyb20gZXhpc3RpbmcgbWFkdmlzZSgyKSBjb252ZW50aW9ucyB0byBwcm92aWRlXFxubW0va2h1Z2VwYWdlZC5jLTMxNjctXFx0ICogYWN0aW9uYWJsZSBmZWVkYmFjayB0byBjYWxsZXIsIHNvIHRoZXkgbWF5IHRha2UgYW4gYXBwcm9wcmlhdGVcXG4tLVxcbm1tL21hZHZpc2UuYz0xMzM4PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTM2MS1cXHRcXHRyZXR1cm4gbWFkdmlzZV9kb250bmVlZF9mcmVlKG1hZHZfYmVoYXZpb3IpO1xcbm1tL21hZHZpc2UuYzoxMzYyOlxcdGNhc2UgTUFEVl9DT0xMQVBTRTpcXG5tbS9tYWR2aXNlLmMtMTM2My1cXHRcXHRyZXR1cm4gbWFkdmlzZV9jb2xsYXBzZSh2bWEsIHJhbmdlLVxcdTAwM2VzdGFydCwgcmFuZ2UtXFx1MDAzZWVuZCxcXG4tLVxcbm1tL21hZHZpc2UuYz0xNTE4PW1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE1NDEtXFx0Y2FzZSBNQURWX05PSFVHRVBBR0U6XFxubW0vbWFkdmlzZS5jOjE1NDI6XFx0Y2FzZSBNQURWX0NPTExBUFNFOlxcbm1tL21hZHZpc2UuYy0xNTQzLSNlbmRpZlxcbi0tXFxubW0vbWFkdmlzZS5jPTE1NjI9c3RhdGljIGJvb2wgcHJvY2Vzc19tYWR2aXNlX3JlbW90ZV92YWxpZChpbnQgYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTU2Ny1cXHRjYXNlIE1BRFZfV0lMTE5FRUQ6XFxubW0vbWFkdmlzZS5jOjE1Njg6XFx0Y2FzZSBNQURWX0NPTExBUFNFOlxcbm1tL21hZHZpc2UuYy0xNTY5LVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vbWFkdmlzZS5jPTE3NDI9c3RhdGljIGVudW0gbWFkdmlzZV9sb2NrX21vZGUgZ2V0X2xvY2tfbW9kZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNzUzLVxcdGNhc2UgTUFEVl9QT1BVTEFURV9XUklURTpcXG5tbS9tYWR2aXNlLmM6MTc1NDpcXHRjYXNlIE1BRFZfQ09MTEFQU0U6XFxubW0vbWFkdmlzZS5jLTE3NTUtXFx0XFx0cmV0dXJuIE1BRFZJU0VfTU1BUF9SRUFEX0xPQ0s7XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTg4Nz1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcXG4tLVxcbm1tL21hZHZpc2UuYy0xOTU1LSAqXFx0XFx0Y29hbGVzY2VkIGludG8gVEhQIGFuZCBuZXcgcGFnZXMgd2lsbCBub3QgYmUgYWxsb2NhdGVkIGFzIFRIUC5cXG5tbS9tYWR2aXNlLmM6MTk1NjogKiAgTUFEVl9DT0xMQVBTRSAtIHN5bmNocm9ub3VzbHkgY29hbGVzY2UgcGFnZXMgaW50byBuZXcgVEhQLlxcbm1tL21hZHZpc2UuYy0xOTU3LSAqICBNQURWX0RPTlREVU1QIC0gdGhlIGFwcGxpY2F0aW9uIHdhbnRzIHRvIHByZXZlbnQgcGFnZXMgaW4gdGhlIGdpdmVuIHJhbmdlXFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaC03OS1cXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaDo4MDojZGVmaW5lIE1BRFZfQ09MTEFQU0VcXHQyNVxcdFxcdC8qIFN5bmNocm9ub3VzIGh1Z2VwYWdlIGNvbGxhcHNlICovXFxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtODEtXFxuLS1cXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaD0xMzQ9c3RydWN0IHByY3RsX21tX21hcCB7XFxuLS1cXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaC0xODctICogRG9uJ3QgZGlzYWJsZSBUSFBzIHdoZW4gZXhwbGljaXRseSBhZHZpc2VkIChlLmcuLCBNQURWX0hVR0VQQUdFIC9cXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaDoxODg6ICogVk1fSFVHRVBBR0UsIE1BRFZfQ09MTEFQU0UpLlxcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oLTE4OS0gKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM9MTc0PXN0YXRpYyB2b2lkIHRlc3RfY29sbGFwc2UoaW50IGZkLCB1NjQgZmxhZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTIxOC1cXHQgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjIxOTpcXHRURVNUX0FTU0VSVF9FUShtYWR2aXNlKG1lbSwgcG1kX3NpemUsIE1BRFZfQ09MTEFQU0UpLCAtMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0yMjAtXFx0VEVTVF9BU1NFUlRfRVEoZXJybm8sIEVJTlZBTCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYz0xMjc2PXN0YXRpYyB2b2lkIGRvX3Rlc3RfYW5vbl90aHBfY29sbGFwc2UoY2hhciAqbWVtLCBzaXplX3Qgc2l6ZSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jLTEzMDgtXFx0XFx0LyogQ29sbGFwc2UgYmVmb3JlIGFjdHVhbGx5IENPVy1zaGFyaW5nIHRoZSBwYWdlLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jOjEzMDk6XFx0XFx0cmV0ID0gbWFkdmlzZShtZW0sIHNpemUsIE1BRFZfQ09MTEFQU0UpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jLTEzMTAtXFx0XFx0aWYgKHJldCkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jOjEzMTE6XFx0XFx0XFx0a3NmdF9wZXJyb3IoXFxcIk1BRFZfQ09MTEFQU0UgZmFpbGVkXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMtMTMxMi1cXHRcXHRcXHRsb2dfdGVzdF9yZXN1bHQoS1NGVF9TS0lQKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jLTEzODYtXFx0XFx0LyogQ29sbGFwc2UgYmVmb3JlIGFueW9uZSBtb2RpZmllZCB0aGUgQ09XLXNoYXJlZCBwYWdlLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jOjEzODc6XFx0XFx0cmV0ID0gbWFkdmlzZShtZW0sIHNpemUsIE1BRFZfQ09MTEFQU0UpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jLTEzODgtXFx0XFx0aWYgKHJldCkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jOjEzODk6XFx0XFx0XFx0a3NmdF9wZXJyb3IoXFxcIk1BRFZfQ09MTEFQU0UgZmFpbGVkXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMtMTM5MC1cXHRcXHRcXHRsb2dfdGVzdF9yZXN1bHQoS1NGVF9TS0lQKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYz0yMTkxPVRFU1RfRihndWFyZF9yZWdpb25zLCBjb2xsYXBzZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0yMjMzLVxcdCAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzoyMjM0OlxcdEVYUEVDVF9ORShtYWR2aXNlKHB0ciwgc2l6ZSwgTUFEVl9DT0xMQVBTRSksIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0yMjM1LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MjA4MD1URVNUX0YoaG1tLCBtaWdyYXRlX2Fub25faHVnZV9mYXVsdClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTIxMTAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MjExMTpcXHRyZXQgPSBtYWR2aXNlKG1hcCwgc2l6ZSwgTUFEVl9DT0xMQVBTRSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMjExMi1cXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz0yMzE9c3RhdGljIHZvaWQgZmlsbF9tZW1vcnkoaW50ICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yMzktLypcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MjQwOiAqIE1BRFZfQ09MTEFQU0UgaXMgYSBiZXN0LWVmZm9ydCByZXF1ZXN0IGFuZCBtYXkgZmFpbCBpZiBhbiBpbnRlcm5hbFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNDEtICogcmVzb3VyY2UgaXMgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUsIGluIHdoaWNoIGNhc2UgaXQgd2lsbCBzZXQgZXJybm8gdG9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz0yNDU9c3RhdGljIGludCBtYWR2aXNlX2NvbGxhcHNlX3JldHJ5KHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNTAtcmV0cnk6XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjI1MTpcXHRyZXQgPSBtYWR2aXNlKHAsIHNpemUsIE1BRFZfQ09MTEFQU0UpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNTItXFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFQUdBSU4gXFx1MDAyNlxcdTAwMjYgcmV0cnkpIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz0yNjM9c3RhdGljIHZvaWQgKmFsbG9jX2hwYWdlKHN0cnVjdCBtZW1fb3BzICpvcHMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjcwLVxcdCAqIFZNQSBzaG91bGQgYmUgbmVpdGhlciBWTV9IVUdFUEFHRSBub3IgVk1fTk9IVUdFUEFHRS5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MjcxOlxcdCAqIFRoZSBsYXR0ZXIgaXMgaW5lbGlnaWJsZSBmb3IgY29sbGFwc2UgYnkgTUFEVl9DT0xMQVBTRVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoyNzI6XFx0ICogd2hpbGUgdGhlIGZvcm1lciBtaWdodCBjYXVzZSBNQURWX0NPTExBUFNFIHRvIHJhY2Ugd2l0aFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNzMtXFx0ICoga2h1Z2VwYWdlZCBvbiBsb3ctbG9hZCBzeXN0ZW0gKGxpa2UgYSB0ZXN0IG1hY2hpbmUpLCB3aGljaFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoyNzQ6XFx0ICogd291bGQgY2F1c2UgTUFEVl9DT0xMQVBTRSB0byBmYWlsIHdpdGggRUFHQUlOLlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNzUtXFx0ICovXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjc3LVxcdGlmIChtYWR2aXNlX2NvbGxhcHNlX3JldHJ5KHAsIGhwYWdlX3BtZF9zaXplKSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6Mjc4OlxcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwibWFkdmlzZShNQURWX0NPTExBUFNFKVxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNzktXFx0aWYgKCFvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMSkpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjI4MDpcXHRcXHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXFxcIm1hZHZpc2UoTUFEVl9DT0xMQVBTRSlcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjgxLVxcdGlmIChtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz01MDk9c3RhdGljIHZvaWQgX19tYWR2aXNlX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01MTctXFx0LypcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6NTE4OlxcdCAqIHJlYWRcXHUwMDI2d3JpdGUgZmlsZSBjb2xsYXBzZSBzdWNjZWVkcyBmb3IgTUFEVl9DT0xMQVBTRSBiZWNhdXNlIGRpcnR5XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTUxOS1cXHQgKiBmb2xpb3MgYXJlIHdyaXR0ZW4gYmFjayBhZnRlciBjb2xsYXBzZSBmYWlscyBmb3IgZGlydHkgZm9saW9zIGFuZFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTUyMy1cXHQvKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzo1MjQ6XFx0ICogUHJldmVudCBraHVnZXBhZ2VkIGludGVyZmVyZW5jZSBhbmQgdGVzdHMgdGhhdCBNQURWX0NPTExBUFNFXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTUyNS1cXHQgKiBpZ25vcmVzIC9zeXMva2VybmVsL21tL3RyYW5zcGFyZW50X2h1Z2VwYWdlL2VuYWJsZWRcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYz0xMDc1PXN0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3dyaXR0ZW5fdGVzdChjb25zdCBjaGFyICpuYW1lLCBjaGFyICptZW0sIGxvbmcgc2l6ZSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMDg2LVxcdGlmICh1c2VfdGhwIFxcdTAwMjZcXHUwMDI2XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjEwODc6XFx0ICAgIChtYWR2aXNlKG1lbSwgc2l6ZSwgTUFEVl9DT0xMQVBTRSkgfHxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTA4OC1cXHQgICAgICFjaGVja19odWdlX2Fub24obWVtLCBzaXplIC8gaHBhZ2Vfc2l6ZSwgaHBhZ2Vfc2l6ZSkpKSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jPTI0PWVudW0gdGhwX2NvbGxhcHNlX3R5cGUge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYy0yNy1cXHRUSFBfQ09MTEFQU0VfTUFEVl9IVUdFUEFHRSxcXHQvKiBNQURWX0hVR0VQQUdFIGJlZm9yZSBhY2Nlc3MgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jOjI4OlxcdFRIUF9DT0xMQVBTRV9NQURWX0NPTExBUFNFLFxcdC8qIE1BRFZfQ09MTEFQU0UgYWZ0ZXIgYWNjZXNzICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYy0yOS19O1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYy0zMi0gKiBGdW5jdGlvbiB0byBtbWFwIGEgYnVmZmVyLCBmYXVsdCBpdCBpbiwgbWFkdmlzZSBpdCBhcHByb3ByaWF0ZWx5IChiZWZvcmVcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jOjMzOiAqIHBhZ2UgZmF1bHQgZm9yIE1BRFZfSFVHRSwgYW5kIGFmdGVyIGZvciBNQURWX0NPTExBUFNFKSwgYW5kIGNoZWNrIGlmIHRoZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMtMzQtICogbW1hcCByZWdpb24gaXMgaHVnZS5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmM9NDA9c3RhdGljIGludCB0ZXN0X21tYXBfdGhwKGVudW0gdGhwX2NvbGxhcHNlX3R5cGUgbWFkdmlzZV9idWYsIHNpemVfdCBwbWRzaXplKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYy02My1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jOjY0OlxcdGlmIChtYWR2aXNlX2J1ZiA9PSBUSFBfQ09MTEFQU0VfTUFEVl9DT0xMQVBTRSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jOjY1OlxcdFxcdG1hZHZpc2UobWVtLCBwbWRzaXplLCBNQURWX0NPTExBUFNFKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jLTY2LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYz03NT1zdGF0aWMgdm9pZCBwcmN0bF90aHBfZGlzYWJsZV9jb21wbGV0ZWx5X3Rlc3Qoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqY29uc3QgX21ldGFkYXRhLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYy04Ny1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jOjg4OlxcdEFTU0VSVF9FUSh0ZXN0X21tYXBfdGhwKFRIUF9DT0xMQVBTRV9NQURWX0NPTExBUFNFLCBwbWRzaXplKSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYy04OS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMtMTAxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmM6MTAyOlxcdEFTU0VSVF9FUSh0ZXN0X21tYXBfdGhwKFRIUF9DT0xMQVBTRV9NQURWX0NPTExBUFNFLCBwbWRzaXplKSwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYy0xMDMtfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYz0xODI9c3RhdGljIHZvaWQgcHJjdGxfdGhwX2Rpc2FibGVfZXhjZXB0X21hZHZpc2VfdGVzdChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpjb25zdCBfbWV0YWRhdGEsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jLTE5NS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jOjE5NjpcXHRBU1NFUlRfRVEodGVzdF9tbWFwX3RocChUSFBfQ09MTEFQU0VfTUFEVl9DT0xMQVBTRSwgcG1kc2l6ZSksIDEpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMtMTk3LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYy0yMDktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYzoyMTA6XFx0QVNTRVJUX0VRKHRlc3RfbW1hcF90aHAoVEhQX0NPTExBUFNFX01BRFZfQ09MTEFQU0UsIHBtZHNpemUpLCAxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jLTIxMS19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuYz02MD1URVNUX0YocHJvY2Vzc19tYWR2aXNlLCBiYXNpYylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb2Nlc3NfbWFkdi5jLTEyMy0vKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb2Nlc3NfbWFkdi5jOjEyNDogKiBUaGlzIHRlc3QgZGV0ZXJtaW5pc3RpY2FsbHkgdmFsaWRhdGVzIHByb2Nlc3NfbWFkdmlzZSgpIHdpdGggTUFEVl9DT0xMQVBTRVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb2Nlc3NfbWFkdi5jLTEyNS0gKiBvbiBhIHJlbW90ZSBwcm9jZXNzLCBvdGhlciBhZHZpY2VzIGFyZSBkaWZmaWN1bHQgdG8gdmVyaWZ5IHJlbGlhYmx5Llxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvY2Vzc19tYWR2LmMtMTI4LSAqIGZvY3VzIG9uIHByb2Nlc3NfbWFkdiByZW1vdGUgcmVzdWx0LCBvbmx5IGNoZWNrIGFkZHJlc3NlcyBhbmQgbGVuZ3Rocy5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuYzoxMjk6ICogVGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBNQURWX0NPTExBUFNFIGNhbiBiZSBmb3VuZCBpbiB0aGUgcmVsZXZhbnQgdGVzdCBleGFtcGxlcyBpbiBraHVnZXBhZ2VkLlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb2Nlc3NfbWFkdi5jLTEzMC0gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuYz0xMzE9VEVTVF9GKHByb2Nlc3NfbWFkdmlzZSwgcmVtb3RlX2NvbGxhcHNlKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvY2Vzc19tYWR2LmMtMTk1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb2Nlc3NfbWFkdi5jOjE5NjpcXHRyZXQgPSBzeXNfcHJvY2Vzc19tYWR2aXNlKHNlbGYtXFx1MDAzZXJlbW90ZV9waWRmZCwgXFx1MDAyNnZlYywgMSwgTUFEVl9DT0xMQVBTRSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuYy0xOTctXFx0XFx0XFx0XFx0ICAwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jPTUzNj1zdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbGxhcHNlLCBib29sIHRlc3Rfd3ApXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYy01NDQtXFx0LypcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYzo1NDU6XFx0ICogTk9URTogTUFEVl9DT0xMQVBTRSBpcyBub3QgeWV0IGNvbXBhdGlibGUgd2l0aCBXUCwgc28gdGVzdGluZ1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jLTU0Ni1cXHQgKiBib3RoIGRvIG5vdCBtYWtlIG11Y2ggc2Vuc2UuXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYy01NTAtXFx0aWYgKHVmZmRfcmVnaXN0ZXIoZ29wdHMtXFx1MDAzZXVmZmQsIGdvcHRzLVxcdTAwM2VhcmVhX2RzdF9hbGlhcywgZ29wdHMtXFx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXFx1MDAzZXBhZ2Vfc2l6ZSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYzo1NTE6XFx0XFx0XFx0ICAvKiBOT1RFISBNQURWX0NPTExBUFNFIG1heSBub3Qgd29yayB3aXRoIHVmZmQtd3AgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYy01NTItXFx0XFx0XFx0ICBmYWxzZSwgdGVzdF93cCwgdHJ1ZSkpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYy01ODEtXFx0XFx0aWYgKG1hZHZpc2UoZ29wdHMtXFx1MDAzZWFyZWFfZHN0X2FsaWFzLCBnb3B0cy1cXHUwMDNlbnJfcGFnZXMgKiBnb3B0cy1cXHUwMDNlcGFnZV9zaXplLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jOjU4MjpcXHRcXHRcXHQgICAgTUFEVl9DT0xMQVBTRSkpIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYy01ODMtXFx0XFx0XFx0LyogSXQncyBmaW5lIHRvIGZhaWwgZm9yIHRoaXMgb25lLi4uICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmM6NTg0OlxcdFxcdFxcdHVmZmRfdGVzdF9za2lwKFxcXCJNQURWX0NPTExBUFNFIGZhaWxlZFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jLTU4NS1cXHRcXHRcXHRyZXR1cm47XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYz0yMzIyPXVmZmRfdGVzdF9jYXNlX3QgdWZmZF90ZXN0c1tdID0ge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmMtMjQyNC1cXHRcXHQudWZmZF9mbiA9IHVmZmRfbWlub3JfY29sbGFwc2VfdGVzdCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYzoyNDI1OlxcdFxcdC8qIE1BRFZfQ09MTEFQU0Ugb25seSB3b3JrcyB3aXRoIHNobWVtICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmMtMjQyNi1cXHRcXHQubWVtX3RhcmdldHMgPSBNRU1fU0hNRU0sXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmM6MjQyNzpcXHRcXHQvKiBXZSBjYW4ndCB0ZXN0IE1BRFZfQ09MTEFQU0UsIHNvIHRyeSBvdXIgbHVjayAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jLTI0MjgtXFx0XFx0LnVmZmRfZmVhdHVyZV9yZXF1aXJlZCA9IFVGRkRfRkVBVFVSRV9NSU5PUl9TSE1FTSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzM6MTYuOTYyMTE3MzIzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3ODUxNDMzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBtYWR2aXNlX2NvbGxhcHNlYCBpbiBgbW0va2h1Z2VwYWdlZC5jYCoqXG5cbk9rYXksIHNvIEkgd2FudCB0byBnZXQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgbWFkdmlzZV9jb2xsYXBzZWAgYWN0dWFsbHkgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBrZXJuZWwncyBodWdlIHBhZ2UgbWFuYWdlbWVudC4gVGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgaXMgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSdtIGdvaW5nIHRvIGhlYWQgc3RyYWlnaHQgdG8gYG1tL2todWdlcGFnZWQuY2AgYW5kIHplcm8gaW4gb24gdGhlIGBtYWR2aXNlX2NvbGxhcHNlYCBmdW5jdGlvbi4gTXkgbWFpbiBmb2N1cyBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgbG9naWMg4oCTIGhvdyBpdCBhY3R1YWxseSBjb2xsYXBzZXMgb3IgdW4tY29sbGFwc2VzIG1lbW9yeSBtYXBwaW5ncyBiYXNlZCBvbiB0aGUgYE1BRFZfQ09MTEFQU0VgIGFkdmljZSwgYW5kIGFsc28gdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgc3Vycm91bmRpbmcgc3ltYm9scyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGl0IHJlbGllcyBvbi4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgbGVhZCBtZSB0byB0aGUgdW5kZXJseWluZyBhbGdvcml0aG1zLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHBhZ2UgdGFibGUgaGFuZGxpbmcgYW5kIG90aGVyIHJlbGF0ZWQgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50cy4gSXQncyB0aW1lIHRvIGdldCBoYW5kcy1vbiBhbmQgdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA4NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjMzOjIwLjc0NzI2Mjg4NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0Nzg4MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZV9jb2xsYXBzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2h1Z2VwYWdlZC5jPTMxNTg9Ym9vbCBjdXJyZW50X2lzX2todWdlcGFnZWQodm9pZClcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0zMTYyLVxcbm1tL2todWdlcGFnZWQuYzozMTYzOnN0YXRpYyBpbnQgbWFkdmlzZV9jb2xsYXBzZV9lcnJubyhlbnVtIHNjYW5fcmVzdWx0IHIpXFxubW0va2h1Z2VwYWdlZC5jLTMxNjQte1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTMxOTQtXFxubW0va2h1Z2VwYWdlZC5jOjMxOTU6aW50IG1hZHZpc2VfY29sbGFwc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0va2h1Z2VwYWdlZC5jLTMxOTYtXFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCAqbG9ja19kcm9wcGVkKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTMyODItXFx0cmV0dXJuIHRocHMgPT0gKChoZW5kIC0gaHN0YXJ0KSBcXHUwMDNlXFx1MDAzZSBIUEFHRV9QTURfU0hJRlQpID8gMFxcbm1tL2todWdlcGFnZWQuYzozMjgzOlxcdFxcdFxcdDogbWFkdmlzZV9jb2xsYXBzZV9lcnJubyhsYXN0X2ZhaWwpO1xcbm1tL2todWdlcGFnZWQuYy0zMjg0LX1cXG4tLVxcbm1tL21hZHZpc2UuYz0xMzM4PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTM2Mi1cXHRjYXNlIE1BRFZfQ09MTEFQU0U6XFxubW0vbWFkdmlzZS5jOjEzNjM6XFx0XFx0cmV0dXJuIG1hZHZpc2VfY29sbGFwc2Uodm1hLCByYW5nZS1cXHUwMDNlc3RhcnQsIHJhbmdlLVxcdTAwM2VlbmQsXFxubW0vbWFkdmlzZS5jLTEzNjQtXFx0XFx0XFx0XFx1MDAyNm1hZHZfYmVoYXZpb3ItXFx1MDAzZWxvY2tfZHJvcHBlZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjMzOjIwLjgwMjc0OTY1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NTM2OTMxMTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEaXZpbmcgaW50byBgbWFkdmlzZV9jb2xsYXBzZWAgYW5kIEl0cyBUSFAgSW1wbGljYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSB0aGlua2luZyBhYm91dCBgbWFkdmlzZV9jb2xsYXBzZWAgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0va2h1Z2VwYWdlZC5jYC4gTXkgcHJpbWFyeSBpbnRlcmVzdCBoZXJlLCBhcyBhbHdheXMsIGlzIHVuZGVyc3RhbmRpbmcgdGhlIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykgaW50ZXJhY3Rpb24sIGFuZCBob3cgdGhpcyBmdW5jdGlvbiBwbGF5cyBhIHBhcnQgaW4gdGhlIGJpZyBwaWN0dXJlLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIHRoYXQgbGVhZHMgaW50byBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYC4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIOKAkyBvciBwb3RlbnRpYWwgaGVhZGFjaGVzIOKAkyBoYXBwZW4sIGFuZCB1bmRlcnN0YW5kaW5nICpob3cqIGBtYWR2aXNlX2NvbGxhcHNlYCB0cmlnZ2VycyB0aGF0IGZ1bmN0aW9uIGlzIGNydWNpYWwuIEkgd2FudCB0byBzZWUgaWYgaXQncyBhIGRpcmVjdCBjYWxsLCBvciBpZiB0aGVyZSBhcmUgaW50ZXJtZWRpYXJpZXMuIFdoYXQgYXJlIHRoZSBjb25kaXRpb25zIHRoYXQgaGF2ZSB0byBiZSBtZXQgZm9yIHRoaXMgY29sbGFwc2UgYXR0ZW1wdCB0byBldmVuIGJlIGNvbnNpZGVyZWQ/IEkgYmV0IGl0IGRlYWxzIHdpdGggYE1BRFZfQ09MTEFQU0VgIGFuZCBzaGFyZWQgbWVtb3J5IHJlZ2lvbnMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgYWxsIHRoZSBpbXBsaWNhdGlvbnMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBrZXJuZWwgZGVhbHMgd2l0aCBwYWdlcyBpbiB0aGUgbWlkZGxlIG9mIGEgVEhQLCBhbmQgaG93IHRoZSBjb2xsYXBzZSB3b3JrcyBpbiB0ZXJtcyBvZiBwYWdlIHRhYmxlIGVudHJpZXMuIElzIGl0IGEgZ3JhY2VmdWwgZGVncmFkYXRpb24sIG9yIGlzIGl0IGEgbW9yZSBkaXNydXB0aXZlIG9wZXJhdGlvbj8gSSB3YW50IHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBwaXRmYWxscywgc3luY2hyb25pemF0aW9uIGlzc3Vlcywgb3Igc3VidGxlIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2YuIExldCdzIHNlZSBob3cgZWZmaWNpZW50bHkgaXQgaGFuZGxlcyB0aGUgdGFzaywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgYXJlYXMgZm9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gZG93biB0aGUgbGluZS4gVGhhdCdzIHRoZSBjb3JlIGZvY3VzIHJpZ2h0IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3NTAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozMzoyOC4zMzk2ODQxNzlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2todWdlcGFnZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTk1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTk1OlxcdGludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbjMxOTY6XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCAqbG9ja19kcm9wcGVkKVxcbjMxOTc6XFx0e1xcbjMxOTg6XFx0XFx0c3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjO1xcbjMxOTk6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXFx1MDAzZXZtX21tO1xcbjMyMDA6XFx0XFx0dW5zaWduZWQgbG9uZyBoc3RhcnQsIGhlbmQsIGFkZHI7XFxuMzIwMTpcXHRcXHRlbnVtIHNjYW5fcmVzdWx0IGxhc3RfZmFpbCA9IFNDQU5fRkFJTDtcXG4zMjAyOlxcdFxcdGludCB0aHBzID0gMDtcXG4zMjAzOlxcdFxcdGJvb2wgbW1hcF91bmxvY2tlZCA9IGZhbHNlO1xcbjMyMDQ6XFx0XFxuMzIwNTpcXHRcXHRCVUdfT04odm1hLVxcdTAwM2V2bV9zdGFydCBcXHUwMDNlIHN0YXJ0KTtcXG4zMjA2OlxcdFxcdEJVR19PTih2bWEtXFx1MDAzZXZtX2VuZCBcXHUwMDNjIGVuZCk7XFxuMzIwNzpcXHRcXG4zMjA4OlxcdFxcdGlmICghY29sbGFwc2VfcG9zc2libGUodm1hLCB2bWEtXFx1MDAzZXZtX2ZsYWdzLCBUVkFfRk9SQ0VEX0NPTExBUFNFKSlcXG4zMjA5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMyMTA6XFx0XFxuMzIxMTpcXHRcXHRoc3RhcnQgPSBBTElHTihzdGFydCwgSFBBR0VfUE1EX1NJWkUpO1xcbjMyMTI6XFx0XFx0aGVuZCA9IEFMSUdOX0RPV04oZW5kLCBIUEFHRV9QTURfU0laRSk7XFxuMzIxMzpcXHRcXG4zMjE0OlxcdFxcdGlmIChoc3RhcnQgXFx1MDAzZT0gaGVuZClcXG4zMjE1OlxcdFxcdFxcdHJldHVybiAwO1xcbjMyMTY6XFx0XFxuMzIxNzpcXHRcXHRjYyA9IGttYWxsb2Nfb2JqKCpjYyk7XFxuMzIxODpcXHRcXHRpZiAoIWNjKVxcbjMyMTk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMzIyMDpcXHRcXHRjYy1cXHUwMDNlaXNfa2h1Z2VwYWdlZCA9IGZhbHNlO1xcbjMyMjE6XFx0XFx0Y2MtXFx1MDAzZXByb2dyZXNzID0gMDtcXG4zMjIyOlxcdFxcbjMyMjM6XFx0XFx0bW1ncmFiKG1tKTtcXG4zMjI0OlxcdFxcdGxydV9hZGRfZHJhaW5fYWxsKCk7XFxuMzIyNTpcXHRcXG4zMjI2OlxcdFxcdGZvciAoYWRkciA9IGhzdGFydDsgYWRkciBcXHUwMDNjIGhlbmQ7IGFkZHIgKz0gSFBBR0VfUE1EX1NJWkUpIHtcXG4zMjI3OlxcdFxcdFxcdGVudW0gc2Nhbl9yZXN1bHQgcmVzdWx0ID0gU0NBTl9GQUlMO1xcbjMyMjg6XFx0XFxuMzIyOTpcXHRcXHRcXHRpZiAobW1hcF91bmxvY2tlZCkge1xcbjMyMzA6XFx0XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuMzIzMTpcXHRcXHRcXHRcXHRtbWFwX3JlYWRfbG9jayhtbSk7XFxuMzIzMjpcXHRcXHRcXHRcXHRtbWFwX3VubG9ja2VkID0gZmFsc2U7XFxuMzIzMzpcXHRcXHRcXHRcXHQqbG9ja19kcm9wcGVkID0gdHJ1ZTtcXG4zMjM0OlxcdFxcdFxcdFxcdHJlc3VsdCA9IGh1Z2VwYWdlX3ZtYV9yZXZhbGlkYXRlKG1tLCBhZGRyLCBmYWxzZSwgXFx1MDAyNnZtYSxcXG4zMjM1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBjYywgSFBBR0VfUE1EX09SREVSKTtcXG4zMjM2OlxcdFxcdFxcdFxcdGlmIChyZXN1bHQgIT0gU0NBTl9TVUNDRUVEKSB7XFxuMzIzNzpcXHRcXHRcXHRcXHRcXHRsYXN0X2ZhaWwgPSByZXN1bHQ7XFxuMzIzODpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9ub2xvY2s7XFxuMzIzOTpcXHRcXHRcXHRcXHR9XFxuMzI0MDpcXHRcXG4zMjQxOlxcdFxcdFxcdFxcdGhlbmQgPSBtaW4oaGVuZCwgdm1hLVxcdTAwM2V2bV9lbmQgXFx1MDAyNiBIUEFHRV9QTURfTUFTSyk7XFxuMzI0MjpcXHRcXHRcXHR9XFxuMzI0MzpcXHRcXG4zMjQ0OlxcdFxcdFxcdHJlc3VsdCA9IGNvbGxhcHNlX3NpbmdsZV9wbWQoYWRkciwgdm1hLCBcXHUwMDI2bW1hcF91bmxvY2tlZCwgY2MpO1xcbjMyNDU6XFx0XFxuMzI0NjpcXHRcXHRcXHRzd2l0Y2ggKHJlc3VsdCkge1xcbjMyNDc6XFx0XFx0XFx0Y2FzZSBTQ0FOX1NVQ0NFRUQ6XFxuMzI0ODpcXHRcXHRcXHRjYXNlIFNDQU5fUE1EX01BUFBFRDpcXG4zMjQ5OlxcdFxcdFxcdFxcdCsrdGhwcztcXG4zMjUwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjMyNTE6XFx0XFx0XFx0LyogV2hpdGVsaXN0ZWQgc2V0IG9mIHJlc3VsdHMgd2hlcmUgY29udGludWluZyBPSyAqL1xcbjMyNTI6XFx0XFx0XFx0Y2FzZSBTQ0FOX05PX1BURV9UQUJMRTpcXG4zMjUzOlxcdFxcdFxcdGNhc2UgU0NBTl9QVEVfTk9OX1BSRVNFTlQ6XFxuMzI1NDpcXHRcXHRcXHRjYXNlIFNDQU5fUFRFX1VGRkQ6XFxuMzI1NTpcXHRcXHRcXHRjYXNlIFNDQU5fTEFDS19SRUZFUkVOQ0VEX1BBR0U6XFxuMzI1NjpcXHRcXHRcXHRjYXNlIFNDQU5fUEFHRV9OVUxMOlxcbjMyNTc6XFx0XFx0XFx0Y2FzZSBTQ0FOX1BBR0VfQ09VTlQ6XFxuMzI1ODpcXHRcXHRcXHRjYXNlIFNDQU5fUEFHRV9MT0NLOlxcbjMyNTk6XFx0XFx0XFx0Y2FzZSBTQ0FOX1BBR0VfQ09NUE9VTkQ6XFxuMzI2MDpcXHRcXHRcXHRjYXNlIFNDQU5fUEFHRV9MUlU6XFxuMzI2MTpcXHRcXHRcXHRjYXNlIFNDQU5fREVMX1BBR0VfTFJVOlxcbjMyNjI6XFx0XFx0XFx0XFx0bGFzdF9mYWlsID0gcmVzdWx0O1xcbjMyNjM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzI2NDpcXHRcXHRcXHRkZWZhdWx0OlxcbjMyNjU6XFx0XFx0XFx0XFx0bGFzdF9mYWlsID0gcmVzdWx0O1xcbjMyNjY6XFx0XFx0XFx0XFx0LyogT3RoZXIgZXJyb3IsIGV4aXQgKi9cXG4zMjY3OlxcdFxcdFxcdFxcdGdvdG8gb3V0X21heWJlbG9jaztcXG4zMjY4OlxcdFxcdFxcdH1cXG4zMjY5OlxcdFxcdH1cXG4zMjcwOlxcdFxcbjMyNzE6XFx0b3V0X21heWJlbG9jazpcXG4zMjcyOlxcdFxcdC8qIENhbGxlciBleHBlY3RzIHVzIHRvIGhvbGQgbW1hcF9sb2NrIG9uIHJldHVybiAqL1xcbjMyNzM6XFx0XFx0aWYgKG1tYXBfdW5sb2NrZWQpIHtcXG4zMjc0OlxcdFxcdFxcdCpsb2NrX2Ryb3BwZWQgPSB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozMzoyOC4zMzk4NTk0NzlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDY5Mzk0NjM3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEtjb25maWcgRGVwZW5kZW5jaWVzIGZvciBLaHVnZXBhZ2VkIGFuZCBVc2VyZmF1bHRmZCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUga2VybmVsIGNvZGUgYW5kIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdGhhdCBjb250cm9sIHRoZSBpbmNsdXNpb24gb2YgYG1tL2todWdlcGFnZWQuY2AgYW5kLCBpbiBwYXJ0aWN1bGFyLCB1c2VyZmF1bHRmZCBmdW5jdGlvbmFsaXR5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIEtjb25maWcgc3ltYm9scyB0aGF0IHVsdGltYXRlbHkgcmVzdWx0IGluIHRoYXQgY29kZSBiZWluZyBjb21waWxlZC4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBkaXJlY3RseSBhdCB0aGUgYnVpbGQgcHJvY2Vzcy4gVGhlIHNpbXBsZXN0IGFwcHJvYWNoIHNlZW1zIHRvIGJlIHRvIGNoZWNrIGBtbS9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkIGF0IGJ1aWxkIHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzMwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozMzozMy4wMzM4MDg2N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4NTgwNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2h1Z2VwYWdlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4NzIgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm1tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xcbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXFxubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICs9IHBhZ2VfY291bnRlci5vXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTIzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbV90eXBlcy5oXFx1MDAzZVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjQ6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2todWdlcGFnZWQuaFxcdTAwM2VcXG5tbS9odWdlX21lbW9yeS5jLTI1LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcmVlemVyLmhcXHUwMDNlXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTU2LSAqIGd1YXJhbnRlZWQgdG8gYmVuZWZpdCBmcm9tIGl0LiBXaGVuIHRyYW5zcGFyZW50IGh1Z2VwYWdlIHN1cHBvcnQgaXNcXG5tbS9odWdlX21lbW9yeS5jOjU3OiAqIGVuYWJsZWQsIGl0IGlzIGZvciBhbGwgbWFwcGluZ3MsIGFuZCBraHVnZXBhZ2VkIHNjYW5zIGFsbCBtYXBwaW5ncy5cXG5tbS9odWdlX21lbW9yeS5jOjU4OiAqIERlZnJhZyBpcyBpbnZva2VkIGJ5IGtodWdlcGFnZWQgaHVnZXBhZ2UgYWxsb2NhdGlvbnMgYW5kIGJ5IHBhZ2UgZmF1bHRzXFxubW0vaHVnZV9tZW1vcnkuYy01OS0gKiBmb3IgYWxsIGh1Z2VwYWdlIGFsbG9jYXRpb25zLlxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xMjE9dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTQ4LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTQ5OlxcdC8qIGtodWdlcGFnZWQgZG9lc24ndCBjb2xsYXBzZSBEQVggdm1hLCBidXQgcGFnZSBmYXVsdCBpcyBmaW5lLiAqL1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTUwLVxcdGlmICh2bWFfaXNfZGF4KHZtYSkpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE1My1cXHQvKlxcbm1tL2h1Z2VfbWVtb3J5LmM6MTU0OlxcdCAqIGtodWdlcGFnZWQgc3BlY2lhbCBWTUEgYW5kIGh1Z2V0bGIgVk1BLlxcbm1tL2h1Z2VfbWVtb3J5LmMtMTU1LVxcdCAqIE11c3QgYmUgY2hlY2tlZCBhZnRlciBkYXggc2luY2Ugc29tZSBkYXggbWFwcGluZ3MgbWF5IGhhdmVcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDQ1PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ1NS1cXHRpZiAoc2V0X2dsb2JhbF9lbmFibGVkX21vZGUobW9kZSkpIHtcXG5tbS9odWdlX21lbW9yeS5jOjQ1NjpcXHRcXHRpbnQgZXJyID0gc3RhcnRfc3RvcF9raHVnZXBhZ2VkKCk7XFxubW0vaHVnZV9tZW1vcnkuYy00NTctXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ2My1cXHRcXHQgKiBjaGFuZ2UsIGFzIHRoZSBwcmV2aW91cyBjb2RlIGFsd2F5cyBjYWxsZWRcXG5tbS9odWdlX21lbW9yeS5jOjQ2NDpcXHRcXHQgKiBzdGFydF9zdG9wX2todWdlcGFnZWQoKSB3aGljaCBkb2VzIHRoaXMgaW50ZXJuYWxseS5cXG5tbS9odWdlX21lbW9yeS5jLTQ2NS1cXHRcXHQgKi9cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NjgwPXN0YXRpYyBzc2l6ZV90IGFub25fZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNjkxLVxcdGlmIChzZXRfYW5vbl9lbmFibGVkX21vZGUob3JkZXIsIG1vZGUpKSB7XFxubW0vaHVnZV9tZW1vcnkuYzo2OTI6XFx0XFx0aW50IGVyciA9IHN0YXJ0X3N0b3Bfa2h1Z2VwYWdlZCgpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNjkzLVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy02OTktXFx0XFx0ICogY2hhbmdlLCBhcyB0aGUgcHJldmlvdXMgY29kZSBhbHdheXMgY2FsbGVkXFxubW0vaHVnZV9tZW1vcnkuYzo3MDA6XFx0XFx0ICogc3RhcnRfc3RvcF9raHVnZXBhZ2VkKCkgd2hpY2ggZG9lcyB0aGlzIGludGVybmFsbHkuXFxubW0vaHVnZV9tZW1vcnkuYy03MDEtXFx0XFx0ICovXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTkzMz1zdGF0aWMgaW50IF9faW5pdCBodWdlcGFnZV9pbml0X3N5c2ZzKHN0cnVjdCBrb2JqZWN0ICoqaHVnZXBhZ2Vfa29iailcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtOTU5LVxcbm1tL2h1Z2VfbWVtb3J5LmM6OTYwOlxcdGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgqaHVnZXBhZ2Vfa29iaiwgXFx1MDAyNmtodWdlcGFnZWRfYXR0cl9ncm91cCk7XFxubW0vaHVnZV9tZW1vcnkuYy05NjEtXFx0aWYgKGVycikge1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz05OTE9c3RhdGljIHZvaWQgX19pbml0IGh1Z2VwYWdlX2V4aXRfc3lzZnMoc3RydWN0IGtvYmplY3QgKmh1Z2VwYWdlX2tvYmopXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTk5OS1cXG5tbS9odWdlX21lbW9yeS5jOjEwMDA6XFx0c3lzZnNfcmVtb3ZlX2dyb3VwKGh1Z2VwYWdlX2tvYmosIFxcdTAwMjZraHVnZXBhZ2VkX2F0dHJfZ3JvdXApO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTAwMS1cXHRzeXNmc19yZW1vdmVfZ3JvdXAoaHVnZXBhZ2Vfa29iaiwgXFx1MDAyNmh1Z2VwYWdlX2F0dHJfZ3JvdXApO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xMDUxPXN0YXRpYyBpbnQgX19pbml0IGh1Z2VwYWdlX2luaXQodm9pZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA2OS1cXG5tbS9odWdlX21lbW9yeS5jOjEwNzA6XFx0ZXJyID0ga2h1Z2VwYWdlZF9pbml0KCk7XFxubW0vaHVnZV9tZW1vcnkuYy0xMDcxLVxcdGlmIChlcnIpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTEwODctXFxubW0vaHVnZV9tZW1vcnkuYzoxMDg4OlxcdGVyciA9IHN0YXJ0X3N0b3Bfa2h1Z2VwYWdlZCgpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTA4OS1cXHRpZiAoZXJyKVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTA5MDpcXHRcXHRnb3RvIGVycl9raHVnZXBhZ2VkO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTA5MS1cXG5tbS9odWdlX21lbW9yeS5jLTEwOTItXFx0cmV0dXJuIDA7XFxubW0vaHVnZV9tZW1vcnkuYzoxMDkzOmVycl9raHVnZXBhZ2VkOlxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA5NC1cXHR0aHBfc2hyaW5rZXJfZXhpdCgpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTA5NS1lcnJfc2hyaW5rZXI6XFxubW0vaHVnZV9tZW1vcnkuYzoxMDk2OlxcdGtodWdlcGFnZWRfZGVzdHJveSgpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTA5Ny1lcnJfc2xhYjpcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTUyMD12bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xNTMwLVxcdFxcdHJldHVybiByZXQ7XFxubW0vaHVnZV9tZW1vcnkuYzoxNTMxOlxcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgdm1hLVxcdTAwM2V2bV9mbGFncyk7XFxubW0vaHVnZV9tZW1vcnkuYy0xNTMyLVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NTQ3PXN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU1MS1cXG5tbS9odWdlX21lbW9yeS5jOjQ1NTI6XFx0aWYgKGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSA9PSBIUEFHRV9QTURfTlIgLSAxKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU1My1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ1NTktXFx0XFx0aWYgKHBhZ2VzX2lkZW50aWNhbChmb2xpb19wYWdlKGZvbGlvLCBpKSwgWkVST19QQUdFKDApKSkge1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDU2MDpcXHRcXHRcXHRpZiAoKytudW1femVyb19wYWdlcyBcXHUwMDNlIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSlcXG5tbS9odWdlX21lbW9yeS5jLTQ1NjEtXFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ1NjYtXFx0XFx0XFx0ICovXFxubW0vaHVnZV9tZW1vcnkuYzo0NTY3OlxcdFxcdFxcdGlmICgrK251bV9maWxsZWRfcGFnZXMgXFx1MDAzZT0gSFBBR0VfUE1EX05SIC0ga2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU2OC1cXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9pbnRlcm5hbC5oLTEwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbm1tL2ludGVybmFsLmg6MTE6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2todWdlcGFnZWQuaFxcdTAwM2VcXG5tbS9pbnRlcm5hbC5oLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbi0tXFxubW0vaW50ZXJuYWwuaD03MDk9cG1kX3QgKm1tX2ZpbmRfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpO1xcbi0tXFxubW0vaW50ZXJuYWwuaC03MTEtLypcXG5tbS9pbnRlcm5hbC5oOjcxMjogKiBpbiBtbS9raHVnZXBhZ2VkLmNcXG5tbS9pbnRlcm5hbC5oLTcxMy0gKi9cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMS0jaW5jbHVkZSBcXHUwMDNjbGludXgva3RocmVhZC5oXFx1MDAzZVxcbm1tL2todWdlcGFnZWQuYzoxMjojaW5jbHVkZSBcXHUwMDNjbGludXgva2h1Z2VwYWdlZC5oXFx1MDAzZVxcbm1tL2todWdlcGFnZWQuYy0xMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvZnJlZXplci5oXFx1MDAzZVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTMzPWVudW0gc2Nhbl9yZXN1bHQge1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTcwLVxcbm1tL2todWdlcGFnZWQuYzo3MTpzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpraHVnZXBhZ2VkX3RocmVhZCBfX3JlYWRfbW9zdGx5O1xcbm1tL2todWdlcGFnZWQuYzo3MjpzdGF0aWMgREVGSU5FX01VVEVYKGtodWdlcGFnZWRfbXV0ZXgpO1xcbm1tL2todWdlcGFnZWQuYy03My1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy03Ny0gKi9cXG5tbS9raHVnZXBhZ2VkLmM6Nzg6c3RhdGljIHVuc2lnbmVkIGludCBraHVnZXBhZ2VkX3BhZ2VzX3RvX3NjYW4gX19yZWFkX21vc3RseTtcXG5tbS9raHVnZXBhZ2VkLmM6Nzk6c3RhdGljIHVuc2lnbmVkIGludCBraHVnZXBhZ2VkX3BhZ2VzX2NvbGxhcHNlZDtcXG5tbS9raHVnZXBhZ2VkLmM6ODA6c3RhdGljIHVuc2lnbmVkIGludCBraHVnZXBhZ2VkX2Z1bGxfc2NhbnM7XFxubW0va2h1Z2VwYWdlZC5jOjgxOnN0YXRpYyB1bnNpZ25lZCBpbnQga2h1Z2VwYWdlZF9zY2FuX3NsZWVwX21pbGxpc2VjcyBfX3JlYWRfbW9zdGx5ID0gMTAwMDA7XFxubW0va2h1Z2VwYWdlZC5jLTgyLS8qIGR1cmluZyBmcmFnbWVudGF0aW9uIHBvbGwgdGhlIGh1Z2VwYWdlIGFsbG9jYXRvciBvbmNlIGV2ZXJ5IG1pbnV0ZSAqL1xcbm1tL2todWdlcGFnZWQuYzo4MzpzdGF0aWMgdW5zaWduZWQgaW50IGtodWdlcGFnZWRfYWxsb2Nfc2xlZXBfbWlsbGlzZWNzIF9fcmVhZF9tb3N0bHkgPSA2MDAwMDtcXG5tbS9raHVnZXBhZ2VkLmM6ODQ6c3RhdGljIHVuc2lnbmVkIGxvbmcga2h1Z2VwYWdlZF9zbGVlcF9leHBpcmU7XFxubW0va2h1Z2VwYWdlZC5jOjg1OnN0YXRpYyBERUZJTkVfU1BJTkxPQ0soa2h1Z2VwYWdlZF9tbV9sb2NrKTtcXG5tbS9raHVnZXBhZ2VkLmM6ODY6c3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGtodWdlcGFnZWRfd2FpdCk7XFxubW0va2h1Z2VwYWdlZC5jLTg3LS8qXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtOTEtICpcXG5tbS9raHVnZXBhZ2VkLmM6OTI6ICogTm90ZSB0aGF0IHRoZXNlIGFyZSBvbmx5IHJlc3BlY3RlZCBpZiBjb2xsYXBzZSB3YXMgaW5pdGlhdGVkIGJ5IGtodWdlcGFnZWQuXFxubW0va2h1Z2VwYWdlZC5jLTkzLSAqL1xcbm1tL2todWdlcGFnZWQuYy05NC0jZGVmaW5lIEtIVUdFUEFHRURfTUFYX1BURVNfTElNSVQgKEhQQUdFX1BNRF9OUiAtIDEpXFxubW0va2h1Z2VwYWdlZC5jOjk1OnVuc2lnbmVkIGludCBraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgX19yZWFkX21vc3RseTtcXG5tbS9raHVnZXBhZ2VkLmM6OTY6c3RhdGljIHVuc2lnbmVkIGludCBraHVnZXBhZ2VkX21heF9wdGVzX3N3YXAgX19yZWFkX21vc3RseTtcXG5tbS9raHVnZXBhZ2VkLmM6OTc6c3RhdGljIHVuc2lnbmVkIGludCBraHVnZXBhZ2VkX21heF9wdGVzX3NoYXJlZCBfX3JlYWRfbW9zdGx5O1xcbm1tL2todWdlcGFnZWQuYy05OC1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xMDY9c3RydWN0IGNvbGxhcHNlX2NvbnRyb2wge1xcbm1tL2todWdlcGFnZWQuYzoxMDc6XFx0Ym9vbCBpc19raHVnZXBhZ2VkO1xcbm1tL2todWdlcGFnZWQuYy0xMDgtXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTExLVxcbm1tL2todWdlcGFnZWQuYzoxMTI6XFx0LyogTnVtIHBhZ2VzIHNjYW5uZWQgKHNlZSBraHVnZXBhZ2VkX3BhZ2VzX3RvX3NjYW4pICovXFxubW0va2h1Z2VwYWdlZC5jLTExMy1cXHR1bnNpZ25lZCBpbnQgcHJvZ3Jlc3M7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTIyLS8qKlxcbm1tL2todWdlcGFnZWQuYzoxMjM6ICogc3RydWN0IGtodWdlcGFnZWRfc2NhbiAtIGN1cnNvciBmb3Igc2Nhbm5pbmdcXG5tbS9raHVnZXBhZ2VkLmMtMTI0LSAqIEBtbV9oZWFkOiB0aGUgaGVhZCBvZiB0aGUgbW0gbGlzdCB0byBzY2FuXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTI3LSAqXFxubW0va2h1Z2VwYWdlZC5jOjEyODogKiBUaGVyZSBpcyBvbmx5IHRoZSBvbmUga2h1Z2VwYWdlZF9zY2FuIGluc3RhbmNlIG9mIHRoaXMgY3Vyc29yIHN0cnVjdHVyZS5cXG5tbS9raHVnZXBhZ2VkLmMtMTI5LSAqL1xcbm1tL2todWdlcGFnZWQuYzoxMzA6c3RydWN0IGtodWdlcGFnZWRfc2NhbiB7XFxubW0va2h1Z2VwYWdlZC5jLTEzMS1cXHRzdHJ1Y3QgbGlzdF9oZWFkIG1tX2hlYWQ7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTM1LVxcbm1tL2todWdlcGFnZWQuYzoxMzY6c3RhdGljIHN0cnVjdCBraHVnZXBhZ2VkX3NjYW4ga2h1Z2VwYWdlZF9zY2FuID0ge1xcbm1tL2todWdlcGFnZWQuYzoxMzc6XFx0Lm1tX2hlYWQgPSBMSVNUX0hFQURfSU5JVChraHVnZXBhZ2VkX3NjYW4ubW1faGVhZCksXFxubW0va2h1Z2VwYWdlZC5jLTEzOC19O1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTE0MT1zdGF0aWMgc3NpemVfdCBzY2FuX3NsZWVwX21pbGxpc2Vjc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE0NC17XFxubW0va2h1Z2VwYWdlZC5jOjE0NTpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwga2h1Z2VwYWdlZF9zY2FuX3NsZWVwX21pbGxpc2Vjcyk7XFxubW0va2h1Z2VwYWdlZC5jLTE0Ni19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTQ4PXN0YXRpYyBzc2l6ZV90IF9fc2xlZXBfbWlsbGlzZWNzX3N0b3JlKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE1OC1cXHQqbWlsbGlzZWNzID0gbXNlY3M7XFxubW0va2h1Z2VwYWdlZC5jOjE1OTpcXHRraHVnZXBhZ2VkX3NsZWVwX2V4cGlyZSA9IDA7XFxubW0va2h1Z2VwYWdlZC5jOjE2MDpcXHR3YWtlX3VwX2ludGVycnVwdGlibGUoXFx1MDAyNmtodWdlcGFnZWRfd2FpdCk7XFxubW0va2h1Z2VwYWdlZC5jLTE2MS1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xNjU9c3RhdGljIHNzaXplX3Qgc2Nhbl9zbGVlcF9taWxsaXNlY3Nfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTY4LXtcXG5tbS9raHVnZXBhZ2VkLmM6MTY5OlxcdHJldHVybiBfX3NsZWVwX21pbGxpc2Vjc19zdG9yZShidWYsIGNvdW50LCBcXHUwMDI2a2h1Z2VwYWdlZF9zY2FuX3NsZWVwX21pbGxpc2Vjcyk7XFxubW0va2h1Z2VwYWdlZC5jLTE3MC19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTc0PXN0YXRpYyBzc2l6ZV90IGFsbG9jX3NsZWVwX21pbGxpc2Vjc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE3Ny17XFxubW0va2h1Z2VwYWdlZC5jOjE3ODpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwga2h1Z2VwYWdlZF9hbGxvY19zbGVlcF9taWxsaXNlY3MpO1xcbm1tL2todWdlcGFnZWQuYy0xNzktfVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTE4MT1zdGF0aWMgc3NpemVfdCBhbGxvY19zbGVlcF9taWxsaXNlY3Nfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTg0LXtcXG5tbS9raHVnZXBhZ2VkLmM6MTg1OlxcdHJldHVybiBfX3NsZWVwX21pbGxpc2Vjc19zdG9yZShidWYsIGNvdW50LCBcXHUwMDI2a2h1Z2VwYWdlZF9hbGxvY19zbGVlcF9taWxsaXNlY3MpO1xcbm1tL2todWdlcGFnZWQuYy0xODYtfVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTE5MD1zdGF0aWMgc3NpemVfdCBwYWdlc190b19zY2FuX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTkzLXtcXG5tbS9raHVnZXBhZ2VkLmM6MTk0OlxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiV1XFxcXG5cXFwiLCBraHVnZXBhZ2VkX3BhZ2VzX3RvX3NjYW4pO1xcbm1tL2todWdlcGFnZWQuYy0xOTUtfVxcbm1tL2todWdlcGFnZWQuYz0xOTY9c3RhdGljIHNzaXplX3QgcGFnZXNfdG9fc2Nhbl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMDYtXFxubW0va2h1Z2VwYWdlZC5jOjIwNzpcXHRraHVnZXBhZ2VkX3BhZ2VzX3RvX3NjYW4gPSBwYWdlcztcXG5tbS9raHVnZXBhZ2VkLmMtMjA4LVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTIxND1zdGF0aWMgc3NpemVfdCBwYWdlc19jb2xsYXBzZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMTcte1xcbm1tL2todWdlcGFnZWQuYzoyMTg6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXVcXFxcblxcXCIsIGtodWdlcGFnZWRfcGFnZXNfY29sbGFwc2VkKTtcXG5tbS9raHVnZXBhZ2VkLmMtMjE5LX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMjM9c3RhdGljIHNzaXplX3QgZnVsbF9zY2Fuc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIyNi17XFxubW0va2h1Z2VwYWdlZC5jOjIyNzpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwga2h1Z2VwYWdlZF9mdWxsX3NjYW5zKTtcXG5tbS9raHVnZXBhZ2VkLmMtMjI4LX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMzg9c3RhdGljIHNzaXplX3QgZGVmcmFnX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI0NC19XFxubW0va2h1Z2VwYWdlZC5jOjI0NTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGtodWdlcGFnZWRfZGVmcmFnX2F0dHIgPVxcbm1tL2todWdlcGFnZWQuYy0yNDYtXFx0X19BVFRSX1JXKGRlZnJhZyk7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjQ4LS8qXFxubW0va2h1Z2VwYWdlZC5jOjI0OTogKiBtYXhfcHRlc19ub25lIGNvbnRyb2xzIGlmIGtodWdlcGFnZWQgc2hvdWxkIGNvbGxhcHNlIGh1Z2VwYWdlcyBvdmVyXFxubW0va2h1Z2VwYWdlZC5jLTI1MC0gKiBhbnkgdW5tYXBwZWQgcHRlcyBpbiB0dXJuIHBvdGVudGlhbGx5IGluY3JlYXNpbmcgdGhlIG1lbW9yeVxcbm1tL2todWdlcGFnZWQuYzoyNTE6ICogZm9vdHByaW50IG9mIHRoZSB2bWFzLiBXaGVuIG1heF9wdGVzX25vbmUgaXMgMCBraHVnZXBhZ2VkIHdpbGwgbm90XFxubW0va2h1Z2VwYWdlZC5jLTI1Mi0gKiByZWR1Y2UgdGhlIGF2YWlsYWJsZSBmcmVlIG1lbW9yeSBpbiB0aGUgc3lzdGVtIGFzIGl0XFxubW0va2h1Z2VwYWdlZC5jLTI1My0gKiBydW5zLiBJbmNyZWFzaW5nIG1heF9wdGVzX25vbmUgd2lsbCBpbnN0ZWFkIHBvdGVudGlhbGx5IHJlZHVjZSB0aGVcXG5tbS9raHVnZXBhZ2VkLmM6MjU0OiAqIGZyZWUgbWVtb3J5IGluIHRoZSBzeXN0ZW0gZHVyaW5nIHRoZSBraHVnZXBhZ2VkIHNjYW4uXFxubW0va2h1Z2VwYWdlZC5jLTI1NS0gKi9cXG5tbS9raHVnZXBhZ2VkLmM9MjU2PXN0YXRpYyBzc2l6ZV90IG1heF9wdGVzX25vbmVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNTkte1xcbm1tL2todWdlcGFnZWQuYzoyNjA6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXVcXFxcblxcXCIsIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSk7XFxubW0va2h1Z2VwYWdlZC5jLTI2MS19XFxubW0va2h1Z2VwYWdlZC5jPTI2Mj1zdGF0aWMgc3NpemVfdCBtYXhfcHRlc19ub25lX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI3Mi1cXG5tbS9raHVnZXBhZ2VkLmM6MjczOlxcdGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSA9IG1heF9wdGVzX25vbmU7XFxubW0va2h1Z2VwYWdlZC5jLTI3NC1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNzYtfVxcbm1tL2todWdlcGFnZWQuYzoyNzc6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmVfYXR0ciA9XFxubW0va2h1Z2VwYWdlZC5jLTI3OC1cXHRfX0FUVFJfUlcobWF4X3B0ZXNfbm9uZSk7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MjgwPXN0YXRpYyBzc2l6ZV90IG1heF9wdGVzX3N3YXBfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yODMte1xcbm1tL2todWdlcGFnZWQuYzoyODQ6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXVcXFxcblxcXCIsIGtodWdlcGFnZWRfbWF4X3B0ZXNfc3dhcCk7XFxubW0va2h1Z2VwYWdlZC5jLTI4NS19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9Mjg3PXN0YXRpYyBzc2l6ZV90IG1heF9wdGVzX3N3YXBfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjk3LVxcbm1tL2todWdlcGFnZWQuYzoyOTg6XFx0a2h1Z2VwYWdlZF9tYXhfcHRlc19zd2FwID0gbWF4X3B0ZXNfc3dhcDtcXG5tbS9raHVnZXBhZ2VkLmMtMjk5LVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTMwMi1cXG5tbS9raHVnZXBhZ2VkLmM6MzAzOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUga2h1Z2VwYWdlZF9tYXhfcHRlc19zd2FwX2F0dHIgPVxcbm1tL2todWdlcGFnZWQuYy0zMDQtXFx0X19BVFRSX1JXKG1heF9wdGVzX3N3YXApO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTMwNj1zdGF0aWMgc3NpemVfdCBtYXhfcHRlc19zaGFyZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0zMDkte1xcbm1tL2todWdlcGFnZWQuYzozMTA6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXVcXFxcblxcXCIsIGtodWdlcGFnZWRfbWF4X3B0ZXNfc2hhcmVkKTtcXG5tbS9raHVnZXBhZ2VkLmMtMzExLX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0zMTM9c3RhdGljIHNzaXplX3QgbWF4X3B0ZXNfc2hhcmVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTMyMy1cXG5tbS9raHVnZXBhZ2VkLmM6MzI0OlxcdGtodWdlcGFnZWRfbWF4X3B0ZXNfc2hhcmVkID0gbWF4X3B0ZXNfc2hhcmVkO1xcbm1tL2todWdlcGFnZWQuYy0zMjUtXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzI4LVxcbm1tL2todWdlcGFnZWQuYzozMjk6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBraHVnZXBhZ2VkX21heF9wdGVzX3NoYXJlZF9hdHRyID1cXG5tbS9raHVnZXBhZ2VkLmMtMzMwLVxcdF9fQVRUUl9SVyhtYXhfcHRlc19zaGFyZWQpO1xcbm1tL2todWdlcGFnZWQuYy0zMzEtXFxubW0va2h1Z2VwYWdlZC5jOjMzMjpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqa2h1Z2VwYWdlZF9hdHRyW10gPSB7XFxubW0va2h1Z2VwYWdlZC5jOjMzMzpcXHRcXHUwMDI2a2h1Z2VwYWdlZF9kZWZyYWdfYXR0ci5hdHRyLFxcbm1tL2todWdlcGFnZWQuYzozMzQ6XFx0XFx1MDAyNmtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZV9hdHRyLmF0dHIsXFxubW0va2h1Z2VwYWdlZC5jOjMzNTpcXHRcXHUwMDI2a2h1Z2VwYWdlZF9tYXhfcHRlc19zd2FwX2F0dHIuYXR0cixcXG5tbS9raHVnZXBhZ2VkLmM6MzM2OlxcdFxcdTAwMjZraHVnZXBhZ2VkX21heF9wdGVzX3NoYXJlZF9hdHRyLmF0dHIsXFxubW0va2h1Z2VwYWdlZC5jLTMzNy1cXHRcXHUwMDI2cGFnZXNfdG9fc2Nhbl9hdHRyLmF0dHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzQ0LVxcbm1tL2todWdlcGFnZWQuYzozNDU6c3RydWN0IGF0dHJpYnV0ZV9ncm91cCBraHVnZXBhZ2VkX2F0dHJfZ3JvdXAgPSB7XFxubW0va2h1Z2VwYWdlZC5jOjM0NjpcXHQuYXR0cnMgPSBraHVnZXBhZ2VkX2F0dHIsXFxubW0va2h1Z2VwYWdlZC5jOjM0NzpcXHQubmFtZSA9IFxcXCJraHVnZXBhZ2VkXFxcIixcXG5tbS9raHVnZXBhZ2VkLmMtMzQ4LX07XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MzY3PXN0YXRpYyB1bnNpZ25lZCBpbnQgY29sbGFwc2VfbWF4X3B0ZXNfbm9uZShzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzY5LXtcXG5tbS9raHVnZXBhZ2VkLmM6MzcwOlxcdGNvbnN0IHVuc2lnbmVkIGludCBtYXhfcHRlc19ub25lID0ga2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lO1xcbm1tL2todWdlcGFnZWQuYy0zNzEtXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzc0LVxcdC8qIGZvciBNQURWX0NPTExBUFNFLCBhbGxvdyBhbnkgZW1wdHkvc2hhcmVkIHplcm9wYWdlIFBURXMgKi9cXG5tbS9raHVnZXBhZ2VkLmM6Mzc1OlxcdGlmICghY2MtXFx1MDAzZWlzX2todWdlcGFnZWQpXFxubW0va2h1Z2VwYWdlZC5jLTM3Ni1cXHRcXHRyZXR1cm4gSFBBR0VfUE1EX05SO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTQwNj1zdGF0aWMgdW5zaWduZWQgaW50IGNvbGxhcHNlX21heF9wdGVzX3NoYXJlZChzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNDEyLVxcdCAqL1xcbm1tL2todWdlcGFnZWQuYzo0MTM6XFx0aWYgKCFjYy1cXHUwMDNlaXNfa2h1Z2VwYWdlZClcXG5tbS9raHVnZXBhZ2VkLmMtNDE0LVxcdFxcdHJldHVybiBIUEFHRV9QTURfTlI7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNDIxLVxcdC8qIGZvciBQTUQgY29sbGFwc2UsIHJlc3BlY3QgdGhlIHVzZXIgZGVmaW5lZCBtYXhpbXVtICovXFxubW0va2h1Z2VwYWdlZC5jOjQyMjpcXHRyZXR1cm4ga2h1Z2VwYWdlZF9tYXhfcHRlc19zaGFyZWQ7XFxubW0va2h1Z2VwYWdlZC5jLTQyMy19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NDM0PXN0YXRpYyB1bnNpZ25lZCBpbnQgY29sbGFwc2VfbWF4X3B0ZXNfc3dhcChzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNDQwLVxcdCAqL1xcbm1tL2todWdlcGFnZWQuYzo0NDE6XFx0aWYgKCFjYy1cXHUwMDNlaXNfa2h1Z2VwYWdlZClcXG5tbS9raHVnZXBhZ2VkLmMtNDQyLVxcdFxcdHJldHVybiBIUEFHRV9QTURfTlI7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNDQ2LVxcdC8qIGZvciBQTUQgY29sbGFwc2UsIHJlc3BlY3QgdGhlIHVzZXIgZGVmaW5lZCBtYXhpbXVtICovXFxubW0va2h1Z2VwYWdlZC5jOjQ0NzpcXHRyZXR1cm4ga2h1Z2VwYWdlZF9tYXhfcHRlc19zd2FwO1xcbm1tL2todWdlcGFnZWQuYy00NDgtfVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTQ1MD1pbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy00NTctXFx0XFx0LypcXG5tbS9raHVnZXBhZ2VkLmM6NDU4OlxcdFxcdCAqIElmIHRoZSB2bWEgYmVjb21lIGdvb2QgZm9yIGtodWdlcGFnZWQgdG8gc2NhbixcXG5tbS9raHVnZXBhZ2VkLmMtNDU5LVxcdFxcdCAqIHJlZ2lzdGVyIGl0IGhlcmUgd2l0aG91dCB3YWl0aW5nIGEgcGFnZSBmYXVsdCB0aGF0XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNDYxLVxcdFxcdCAqL1xcbm1tL2todWdlcGFnZWQuYzo0NjI6XFx0XFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCAqdm1fZmxhZ3MpO1xcbm1tL2todWdlcGFnZWQuYy00NjMtXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNDY3LVxcdFxcdC8qXFxubW0va2h1Z2VwYWdlZC5jOjQ2ODpcXHRcXHQgKiBTZXR0aW5nIFZNX05PSFVHRVBBR0Ugd2lsbCBwcmV2ZW50IGtodWdlcGFnZWQgZnJvbSBzY2FubmluZ1xcbm1tL2todWdlcGFnZWQuYzo0Njk6XFx0XFx0ICogdGhpcyB2bWEgZXZlbiBpZiB3ZSBsZWF2ZSB0aGUgbW0gcmVnaXN0ZXJlZCBpbiBraHVnZXBhZ2VkIGlmXFxubW0va2h1Z2VwYWdlZC5jLTQ3MC1cXHRcXHQgKiBpdCBnb3QgcmVnaXN0ZXJlZCBiZWZvcmUgVk1fTk9IVUdFUEFHRSB3YXMgc2V0Llxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTQ3Ny1cXG5tbS9raHVnZXBhZ2VkLmM6NDc4OmludCBfX2luaXQga2h1Z2VwYWdlZF9pbml0KHZvaWQpXFxubW0va2h1Z2VwYWdlZC5jLTQ3OS17XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNDgzLVxcbm1tL2todWdlcGFnZWQuYzo0ODQ6XFx0a2h1Z2VwYWdlZF9wYWdlc190b19zY2FuID0gSFBBR0VfUE1EX05SICogODtcXG5tbS9raHVnZXBhZ2VkLmM6NDg1OlxcdGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSA9IEtIVUdFUEFHRURfTUFYX1BURVNfTElNSVQ7XFxubW0va2h1Z2VwYWdlZC5jOjQ4NjpcXHRraHVnZXBhZ2VkX21heF9wdGVzX3N3YXAgPSBIUEFHRV9QTURfTlIgLyA4O1xcbm1tL2todWdlcGFnZWQuYzo0ODc6XFx0a2h1Z2VwYWdlZF9tYXhfcHRlc19zaGFyZWQgPSBIUEFHRV9QTURfTlIgLyAyO1xcbm1tL2todWdlcGFnZWQuYy00ODgtXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNDkxLVxcbm1tL2todWdlcGFnZWQuYzo0OTI6dm9pZCBfX2luaXQga2h1Z2VwYWdlZF9kZXN0cm95KHZvaWQpXFxubW0va2h1Z2VwYWdlZC5jLTQ5My17XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NTIwPXN0YXRpYyBib29sIGh1Z2VwYWdlX2VuYWJsZWQodm9pZClcXG4tLVxcbm1tL2todWdlcGFnZWQuYy01MzctXFxubW0va2h1Z2VwYWdlZC5jOjUzODp2b2lkIF9fa2h1Z2VwYWdlZF9lbnRlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS9raHVnZXBhZ2VkLmMtNTM5LXtcXG4tLVxcbm1tL2todWdlcGFnZWQuYy01NDItXFxubW0va2h1Z2VwYWdlZC5jOjU0MzpcXHQvKiBfX2todWdlcGFnZWRfZXhpdCgpIG11c3Qgbm90IHJ1biBmcm9tIHVuZGVyIHVzICovXFxubW0va2h1Z2VwYWdlZC5jLTU0NC1cXHRWTV9CVUdfT05fTU0oY29sbGFwc2VfdGVzdF9leGl0KG1tKSwgbW0pO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTU1NC1cXG5tbS9raHVnZXBhZ2VkLmM6NTU1OlxcdHNwaW5fbG9jayhcXHUwMDI2a2h1Z2VwYWdlZF9tbV9sb2NrKTtcXG5tbS9raHVnZXBhZ2VkLmMtNTU2LVxcdG1tX3Nsb3RfaW5zZXJ0KG1tX3Nsb3RzX2hhc2gsIG1tLCBzbG90KTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYy01NjAtXFx0ICovXFxubW0va2h1Z2VwYWdlZC5jOjU2MTpcXHR3YWtldXAgPSBsaXN0X2VtcHR5KFxcdTAwMjZraHVnZXBhZ2VkX3NjYW4ubW1faGVhZCk7XFxubW0va2h1Z2VwYWdlZC5jOjU2MjpcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZzbG90LVxcdTAwM2VtbV9ub2RlLCBcXHUwMDI2a2h1Z2VwYWdlZF9zY2FuLm1tX2hlYWQpO1xcbm1tL2todWdlcGFnZWQuYzo1NjM6XFx0c3Bpbl91bmxvY2soXFx1MDAyNmtodWdlcGFnZWRfbW1fbG9jayk7XFxubW0va2h1Z2VwYWdlZC5jLTU2NC1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy01NjYtXFx0aWYgKHdha2V1cClcXG5tbS9raHVnZXBhZ2VkLmM6NTY3OlxcdFxcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcXHUwMDI2a2h1Z2VwYWdlZF93YWl0KTtcXG5tbS9raHVnZXBhZ2VkLmMtNTY4LX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz01NzQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTU3OC1cXG5tbS9raHVnZXBhZ2VkLmM6NTc5OlxcdC8qIElmIGtodWdlcGFnZWQgaXMgc2Nhbm5pbmcgYW4gYW5vbnltb3VzIHZtYSwgYWxsb3cgbVRIUCBjb2xsYXBzZSAqL1xcbm1tL2todWdlcGFnZWQuYy01ODAtXFx0aWYgKCh0dmFfZmxhZ3MgPT0gVFZBX0tIVUdFUEFHRUQpIFxcdTAwMjZcXHUwMDI2IHZtYV9pc19hbm9ueW1vdXModm1hKSlcXG4tLVxcbm1tL2todWdlcGFnZWQuYz01ODg9c3RhdGljIGJvb2wgY29sbGFwc2VfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTkzLVxcbm1tL2todWdlcGFnZWQuYzo1OTQ6dm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9raHVnZXBhZ2VkLmMtNTk1LVxcdFxcdFxcdCAgdm1fZmxhZ3NfdCB2bV9mbGFncylcXG4tLVxcbm1tL2todWdlcGFnZWQuYy01OTgtXFx0ICAgIFxcdTAwMjZcXHUwMDI2IGNvbGxhcHNlX3Bvc3NpYmxlKHZtYSwgdm1fZmxhZ3MsIFRWQV9LSFVHRVBBR0VEKSlcXG5tbS9raHVnZXBhZ2VkLmM6NTk5OlxcdFxcdF9fa2h1Z2VwYWdlZF9lbnRlcih2bWEtXFx1MDAzZXZtX21tKTtcXG5tbS9raHVnZXBhZ2VkLmMtNjAwLX1cXG5tbS9raHVnZXBhZ2VkLmMtNjAxLVxcbm1tL2todWdlcGFnZWQuYzo2MDI6dm9pZCBfX2todWdlcGFnZWRfZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS9raHVnZXBhZ2VkLmMtNjAzLXtcXG4tLVxcbm1tL2todWdlcGFnZWQuYy02MDYtXFxubW0va2h1Z2VwYWdlZC5jOjYwNzpcXHRzcGluX2xvY2soXFx1MDAyNmtodWdlcGFnZWRfbW1fbG9jayk7XFxubW0va2h1Z2VwYWdlZC5jLTYwOC1cXHRzbG90ID0gbW1fc2xvdF9sb29rdXAobW1fc2xvdHNfaGFzaCwgbW0pO1xcbm1tL2todWdlcGFnZWQuYzo2MDk6XFx0aWYgKHNsb3QgXFx1MDAyNlxcdTAwMjYga2h1Z2VwYWdlZF9zY2FuLm1tX3Nsb3QgIT0gc2xvdCkge1xcbm1tL2todWdlcGFnZWQuYy02MTAtXFx0XFx0bW1fc2xvdF9yZW1vdmUoc2xvdCk7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNjEyLVxcdH1cXG5tbS9raHVnZXBhZ2VkLmM6NjEzOlxcdHNwaW5fdW5sb2NrKFxcdTAwMjZraHVnZXBhZ2VkX21tX2xvY2spO1xcbm1tL2todWdlcGFnZWQuYy02MTQtXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNjIzLVxcdFxcdCAqIHVuZGVyIG1tYXAgc2VtIHJlYWQgbW9kZSkuIFN0b3AgaGVyZSAoYWZ0ZXIgd2UgcmV0dXJuIGFsbFxcbm1tL2todWdlcGFnZWQuYzo2MjQ6XFx0XFx0ICogcGFnZXRhYmxlcyB3aWxsIGJlIGRlc3Ryb3llZCkgdW50aWwga2h1Z2VwYWdlZCBoYXMgZmluaXNoZWRcXG5tbS9raHVnZXBhZ2VkLmMtNjI1LVxcdFxcdCAqIHdvcmtpbmcgb24gdGhlIHBhZ2V0YWJsZXMgdW5kZXIgdGhlIG1tYXBfbG9jay5cXG4tLVxcbm1tL2todWdlcGFnZWQuYz02Njg9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgX19jb2xsYXBzZV9odWdlX3BhZ2VfaXNvbGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy03MTUtXFx0XFx0ICovXFxubW0va2h1Z2VwYWdlZC5jOjcxNjpcXHRcXHRpZiAoY2MtXFx1MDAzZWlzX2todWdlcGFnZWQgXFx1MDAyNlxcdTAwMjYgISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fRFJPUFBBQkxFKSBcXHUwMDI2XFx1MDAyNlxcbm1tL2todWdlcGFnZWQuYy03MTctXFx0XFx0ICAgIGZvbGlvX3Rlc3RfbGF6eWZyZWUoZm9saW8pIFxcdTAwMjZcXHUwMDI2ICFwdGVfZGlydHkocHRldmFsKSkge1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTgwNi1cXHRcXHQvKlxcbm1tL2todWdlcGFnZWQuYzo4MDc6XFx0XFx0ICogSWYgY29sbGFwc2Ugd2FzIGluaXRpYXRlZCBieSBraHVnZXBhZ2VkLCBjaGVjayB0aGF0IHRoZXJlIGlzXFxubW0va2h1Z2VwYWdlZC5jLTgwOC1cXHRcXHQgKiBlbm91Z2ggeW91bmcgcHRlIHRvIGp1c3RpZnkgY29sbGFwc2luZyB0aGUgcGFnZVxcbm1tL2todWdlcGFnZWQuYy04MDktXFx0XFx0ICovXFxubW0va2h1Z2VwYWdlZC5jOjgxMDpcXHRcXHRpZiAoY2MtXFx1MDAzZWlzX2todWdlcGFnZWQgXFx1MDAyNlxcdTAwMjZcXG5tbS9raHVnZXBhZ2VkLmMtODExLVxcdFxcdCAgICAocHRlX3lvdW5nKHB0ZXZhbCkgfHwgZm9saW9fdGVzdF95b3VuZyhmb2xpbykgfHxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy04MTYtXFxubW0va2h1Z2VwYWdlZC5jOjgxNzpcXHRpZiAodW5saWtlbHkoY2MtXFx1MDAzZWlzX2todWdlcGFnZWQgXFx1MDAyNlxcdTAwMjYgIXJlZmVyZW5jZWQpKSB7XFxubW0va2h1Z2VwYWdlZC5jLTgxOC1cXHRcXHRyZXN1bHQgPSBTQ0FOX0xBQ0tfUkVGRVJFTkNFRF9QQUdFO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTkzND1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBfX2NvbGxhcHNlX2h1Z2VfcGFnZV9jb3B5KHB0ZV90ICpwdGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtOTcyLVxcbm1tL2todWdlcGFnZWQuYzo5NzM6c3RhdGljIHZvaWQga2h1Z2VwYWdlZF9hbGxvY19zbGVlcCh2b2lkKVxcbm1tL2todWdlcGFnZWQuYy05NzQte1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTk3Ni1cXG5tbS9raHVnZXBhZ2VkLmM6OTc3OlxcdGFkZF93YWl0X3F1ZXVlKFxcdTAwMjZraHVnZXBhZ2VkX3dhaXQsIFxcdTAwMjZ3YWl0KTtcXG5tbS9raHVnZXBhZ2VkLmMtOTc4LVxcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFfFRBU0tfRlJFRVpBQkxFKTtcXG5tbS9raHVnZXBhZ2VkLmM6OTc5OlxcdHNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcyhraHVnZXBhZ2VkX2FsbG9jX3NsZWVwX21pbGxpc2VjcykpO1xcbm1tL2todWdlcGFnZWQuYzo5ODA6XFx0cmVtb3ZlX3dhaXRfcXVldWUoXFx1MDAyNmtodWdlcGFnZWRfd2FpdCwgXFx1MDAyNndhaXQpO1xcbm1tL2todWdlcGFnZWQuYy05ODEtfVxcbm1tL2todWdlcGFnZWQuYy05ODItXFxubW0va2h1Z2VwYWdlZC5jOjk4MzpzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wga2h1Z2VwYWdlZF9jb2xsYXBzZV9jb250cm9sID0ge1xcbm1tL2todWdlcGFnZWQuYzo5ODQ6XFx0LmlzX2todWdlcGFnZWQgPSB0cnVlLFxcbm1tL2todWdlcGFnZWQuYy05ODUtfTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz05ODc9c3RhdGljIGJvb2wgY29sbGFwc2Vfc2Nhbl9hYm9ydChpbnQgbmlkLCBzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTAxMC1cXG5tbS9raHVnZXBhZ2VkLmM6MTAxMTojZGVmaW5lIGtodWdlcGFnZWRfZGVmcmFnKClcXHRcXHRcXHRcXHRcXHRcXFxcXFxubW0va2h1Z2VwYWdlZC5jLTEwMTItXFx0KHRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzIFxcdTAwMjZcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTAxNC1cXG5tbS9raHVnZXBhZ2VkLmM6MTAxNTovKiBEZWZyYWcgZm9yIGtodWdlcGFnZWQgd2lsbCBlbnRlciBkaXJlY3QgcmVjbGFpbS9jb21wYWN0aW9uIGlmIG5lY2Vzc2FyeSAqL1xcbm1tL2todWdlcGFnZWQuYzoxMDE2OnN0YXRpYyBpbmxpbmUgZ2ZwX3QgYWxsb2NfaHVnZXBhZ2Vfa2h1Z2VwYWdlZF9nZnBtYXNrKHZvaWQpXFxubW0va2h1Z2VwYWdlZC5jLTEwMTcte1xcbm1tL2todWdlcGFnZWQuYzoxMDE4OlxcdHJldHVybiBraHVnZXBhZ2VkX2RlZnJhZygpID8gR0ZQX1RSQU5TSFVHRSA6IEdGUF9UUkFOU0hVR0VfTElHSFQ7XFxubW0va2h1Z2VwYWdlZC5jLTEwMTktfVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTEwNTM9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgaHVnZXBhZ2Vfdm1hX3JldmFsaWRhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMDU3LVxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbm1tL2todWdlcGFnZWQuYzoxMDU4OlxcdGVudW0gdHZhX3R5cGUgdHlwZSA9IGNjLVxcdTAwM2Vpc19raHVnZXBhZ2VkID8gVFZBX0tIVUdFUEFHRUQgOlxcbm1tL2todWdlcGFnZWQuYy0xMDU5LVxcdFxcdFxcdFxcdCBUVkFfRk9SQ0VEX0NPTExBUFNFO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEwODAtXFx0ICogQW5vbiBWTUEgZXhwZWN0ZWQsIHRoZSBhZGRyZXNzIG1heSBiZSB1bm1hcHBlZCB0aGVuXFxubW0va2h1Z2VwYWdlZC5jOjEwODE6XFx0ICogcmVtYXBwZWQgdG8gZmlsZSBhZnRlciBraHVnZXBhZ2VkIHJlYXF1aXJlZCB0aGUgbW1hcF9sb2NrLlxcbm1tL2todWdlcGFnZWQuYy0xMDgyLVxcdCAqXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTA5MT1zdGF0aWMgaW5saW5lIGVudW0gc2Nhbl9yZXN1bHQgY2hlY2tfcG1kX3N0YXRlKHBtZF90ICpwbWQpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTA5OC1cXHQvKlxcbm1tL2todWdlcGFnZWQuYzoxMDk5OlxcdCAqIFRoZSBmb2xpbyBtYXkgYmUgdW5kZXIgbWlncmF0aW9uIHdoZW4ga2h1Z2VwYWdlZCBpcyB0cnlpbmcgdG9cXG5tbS9raHVnZXBhZ2VkLmMtMTEwMC1cXHQgKiBjb2xsYXBzZSBpdC4gTWlncmF0aW9uIHN1Y2Nlc3Mgb3IgZmFpbHVyZSB3aWxsIGV2ZW50dWFsbHkgZW5kXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTEyND1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjaGVja19wbWRfc3RpbGxfdmFsaWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTEzOC0gKiBCcmluZyBtaXNzaW5nIHBhZ2VzIGluIGZyb20gc3dhcCwgdG8gY29tcGxldGUgVEhQIGNvbGxhcHNlLlxcbm1tL2todWdlcGFnZWQuYzoxMTM5OiAqIE9ubHkgZG9uZSBpZiBraHVnZXBhZ2VkX3NjYW5fcG1kIGJlbGlldmVzIGl0IGlzIHdvcnRod2hpbGUuXFxubW0va2h1Z2VwYWdlZC5jLTExNDAtICpcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xMjM5PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGFsbG9jX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEyNDEte1xcbm1tL2todWdlcGFnZWQuYzoxMjQyOlxcdGdmcF90IGdmcCA9IChjYy1cXHUwMDNlaXNfa2h1Z2VwYWdlZCA/IGFsbG9jX2h1Z2VwYWdlX2todWdlcGFnZWRfZ2ZwbWFzaygpIDpcXG5tbS9raHVnZXBhZ2VkLmMtMTI0My1cXHRcXHQgICAgIEdGUF9UUkFOU0hVR0UpO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTE1OTI9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2Nhbl9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTU5OC1cXHR1bnNpZ25lZCBpbnQgbWF4X3B0ZXNfbm9uZSA9IGNvbGxhcHNlX21heF9wdGVzX25vbmUoY2MsIHZtYSwgSFBBR0VfUE1EX09SREVSKTtcXG5tbS9raHVnZXBhZ2VkLmM6MTU5OTpcXHRlbnVtIHR2YV90eXBlIHR2YV9mbGFncyA9IGNjLVxcdTAwM2Vpc19raHVnZXBhZ2VkID8gVFZBX0tIVUdFUEFHRUQgOiBUVkFfRk9SQ0VEX0NPTExBUFNFO1xcbm1tL2todWdlcGFnZWQuYy0xNjAwLVxcdHBtZF90ICpwbWQ7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTcwMC1cXHRcXHQgKi9cXG5tbS9raHVnZXBhZ2VkLmM6MTcwMTpcXHRcXHRpZiAoY2MtXFx1MDAzZWlzX2todWdlcGFnZWQgXFx1MDAyNlxcdTAwMjYgISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fRFJPUFBBQkxFKSBcXHUwMDI2XFx1MDAyNlxcbm1tL2todWdlcGFnZWQuYy0xNzAyLVxcdFxcdCAgICBmb2xpb190ZXN0X2xhenlmcmVlKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhcHRlX2RpcnR5KHB0ZXZhbCkpIHtcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xNzY0LVxcdFxcdC8qXFxubW0va2h1Z2VwYWdlZC5jOjE3NjU6XFx0XFx0ICogSWYgY29sbGFwc2Ugd2FzIGluaXRpYXRlZCBieSBraHVnZXBhZ2VkLCBjaGVjayB0aGF0IHRoZXJlIGlzXFxubW0va2h1Z2VwYWdlZC5jLTE3NjYtXFx0XFx0ICogZW5vdWdoIHlvdW5nIHB0ZSB0byBqdXN0aWZ5IGNvbGxhcHNpbmcgdGhlIHBhZ2VcXG5tbS9raHVnZXBhZ2VkLmMtMTc2Ny1cXHRcXHQgKi9cXG5tbS9raHVnZXBhZ2VkLmM6MTc2ODpcXHRcXHRpZiAoY2MtXFx1MDAzZWlzX2todWdlcGFnZWQgXFx1MDAyNlxcdTAwMjZcXG5tbS9raHVnZXBhZ2VkLmMtMTc2OS1cXHRcXHQgICAgKHB0ZV95b3VuZyhwdGV2YWwpIHx8IGZvbGlvX3Rlc3RfeW91bmcoZm9saW8pIHx8XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTc3My1cXHR9XFxubW0va2h1Z2VwYWdlZC5jOjE3NzQ6XFx0aWYgKGNjLVxcdTAwM2Vpc19raHVnZXBhZ2VkIFxcdTAwMjZcXHUwMDI2XFxubW0va2h1Z2VwYWdlZC5jLTE3NzUtXFx0XFx0ICAgKCFyZWZlcmVuY2VkIHx8XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTc5MS1vdXQ6XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjMzOjMzLjA4NDY3Mjk0N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Nzc1NTIxNjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLlxuXG4qKkludmVzdGlnYXRpbmcgVFJBTlNQQVJFTlRfSFVHRVBBR0UgYW5kIFVTRVJGQVVMVEZEIGluIEtjb25maWcqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHR3byBmZWF0dXJlcywgVFJBTlNQQVJFTlRfSFVHRVBBR0UgYW5kIFVTRVJGQVVMVEZELCBhcmUgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlcyDigJMgc3BlY2lmaWNhbGx5LCBJJ2xsIHN0YXJ0IHdpdGggYG1tL0tjb25maWdgIGFuZCBzZWUgd2hhdCB0aGUgZGVmaW5pdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhcmUgZm9yIFRSQU5TUEFSRU5UX0hVR0VQQUdFLiBUaGVuLCBJJ2xsIG5lZWQgdG8gbG9jYXRlIHRoZSBgS2NvbmZpZ2AgZm9yIFVTRVJGQVVMVEZELCB3aGljaCBpcyBsaWtlbHkgaW4gb3IgbmVhciB0aGUgcmVsZXZhbnQgY29kZSwgYGZzL3VzZXJmYXVsdGZkLmNgIG9yIGEgc2ltaWxhciBmaWxlc3lzdGVtLXNwZWNpZmljIGRpcmVjdG9yeS4gSSdtIGFmdGVyIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGFueSByZWxhdGVkIGRlcGVuZGVuY2llcyB0byBnZXQgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBhcmUgY29udHJvbGxlZCBhdCBjb21waWxlIHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MTY2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzM6MzkuODYwMTk2NzAzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTQ3NjM0MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTgzNT1jb25maWcgTU1fSURcXG4tLVxcbm1tL0tjb25maWctODM3LVxcbm1tL0tjb25maWc6ODM4Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTgzOS1cXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbi0tXFxubW0vS2NvbmZpZz04NTY9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg2MS1cXG5tbS9LY29uZmlnOjg2MjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04NjMtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NjgtXFxubW0vS2NvbmZpZzo4Njk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9LY29uZmlnLTg3MC1cXHRcXHRib29sIFxcXCJtYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NzctXFxubW0vS2NvbmZpZzo4Nzg6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXFxubW0vS2NvbmZpZy04NzktXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg4NT1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODk0LVxcbm1tL0tjb25maWc6ODk1OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXFxubW0vS2NvbmZpZy04OTYtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkwNC1cXG5tbS9LY29uZmlnOjkwNTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTkwNi1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkxMi1cXG5tbS9LY29uZmlnOjkxMzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTE0LVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MjAtXFxubW0vS2NvbmZpZzo5MjE6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05MjItXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz05MzA9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTkzOS1cXG5tbS9LY29uZmlnOjk0MDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxcbm1tL0tjb25maWctOTQxLVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NDgtXFxubW0vS2NvbmZpZzo5NDk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05NTAtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NTYtXFxubW0vS2NvbmZpZzo5NTc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTk1OC1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTY0LVxcbm1tL0tjb25maWc6OTY1OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTY2LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzM6NDAuMTc0OTY1Njk4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3Mjg2NzY1NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgVXNlcmZhdWx0ZmQgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGB1c2VyZmF1bHRmZGAgZmVhdHVyZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIHNob3VsZCBwcm9iYWJseSByZWZyZXNoIG15IG1lbW9yeSBvZiBob3cgdGhpcyBpcyBjb25maWd1cmVkLiBMZXQncyBzdGFydCBieSBoaXR0aW5nIHRoZSBzb3VyY2UgY29kZSBkaXJlY3RseSDigJMgc3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBhdCBgZnMvdXNlcmZhdWx0ZmQuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gVGhlbiwgdG8gZmlndXJlIG91dCBob3cgaXQncyBlbmFibGVkIG9yIGRpc2FibGVkIGF0IGJ1aWxkIHRpbWUsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlLiBJJ20gZ3Vlc3NpbmcgdGhhdCB0aGVyZSdzIGEgY29ycmVzcG9uZGluZyBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGZsZXhpYmxlIHRoaXMgZmVhdHVyZSBpcyBhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gY2hvaWNlcy4gSSdtIGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgb3Igb3ZlcmFsbCBzeXN0ZW0gYmVoYXZpb3IuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgdG8gd2hhdCBpcyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MTM3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzM6NDQuOTAzNjQ1Mjg1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDE0Njk4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJVU0VSRkFVTFRGRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy90YXNrX21tdS5jPTExNjY9c3RhdGljIHZvaWQgc2hvd19zbWFwX3ZtYV9mbGFncyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTEyMzYtI2VuZGlmIC8qIENPTkZJR19BUkNIX0hBU19QS0VZUyAqL1xcbmZzL3Byb2MvdGFza19tbXUuYzoxMjM3OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXFxuZnMvcHJvYy90YXNrX21tdS5jLTEyMzgtXFx0XFx0W2lsb2cyKFZNX1VGRkRfTUlOT1IpXVxcdD0gXFxcInVpXFxcIixcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTIzOTojZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUiAqL1xcbmZzL3Byb2MvdGFza19tbXUuYzoxMjQwOiNpZmRlZiBDT05GSUdfVVNFUkZBVUxURkRfUldQXFxuZnMvcHJvYy90YXNrX21tdS5jLTEyNDEtXFx0XFx0W2lsb2cyKFZNX1VGRkRfUldQKV1cXHQ9IFxcXCJ1clxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjMzOjQ0Ljk3Mzc5NjI3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0MjE0NTAwNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipUcmFjaW5nIHRoZSBVU0VSRkFVTFRGRCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBVU0VSRkFVTFRGRGAgd2l0aGluIHRoZSBrZXJuZWwncyBLY29uZmlnIHN5c3RlbS4gVGhpcyBpcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgaXQgcmVxdWlyZXMgYSBzeXN0ZW1hdGljIGFwcHJvYWNoLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGxldmVyYWdlIHRoZSBLY29uZmlnIGluZnJhc3RydWN0dXJlIGl0c2VsZiwga25vd2luZyBob3cgY3J1Y2lhbCBpdCBpcyB0byBrZXJuZWwgYnVpbGQgY29uZmlndXJhdGlvbnMuIEknbGwgbmVlZCB0byB1c2UgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgYEtjb25maWdgIGxhbmd1YWdlIGFuZCBzZWFyY2ggdG9vbHMgdG8gcGlucG9pbnQgZXZlcnkgaW5zdGFuY2Ugb2YgdGhhdCBzeW1ib2wuIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3IgYGZpbmRgIGNvbW1hbmQsIG1heWJlIHVzaW5nIGEgcmVjdXJzaXZlIHNlYXJjaCBhY3Jvc3MgdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgbG9va2luZyBmb3IgdGhlIHN0cmluZyBcIlVTRVJGQVVMVEZEXCIuXG5cbkhvd2V2ZXIsIEkga25vdyB0aGF0IGp1c3Qgc2VhcmNoaW5nIGZvciB0aGUgc3RyaW5nIFwiVVNFUkZBVUxURkRcIiBtaWdodCBiZSB0b28gYnJvYWQ7IHRoYXQgY291bGQgcGljayB1cCBhbnkgdXNhZ2Ugb2YgdGhhdCBuYW1lLCBub3QgbmVjZXNzYXJpbHkgdGhlICpkZWZpbml0aW9uKiBvZiB0aGUgY29uZmlnIG9wdGlvbi4gSSBuZWVkIHRvIGJlIG1vcmUgcHJlY2lzZS4gSSdsbCBmb2N1cyBvbiBLY29uZmlnIGZpbGVzICguY29uZmlnIG9yIEtjb25maWcgZmlsZXMpIGRpcmVjdGx5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBmb2N1cyBzdGF5cyBvbiB0aGUgYWN0dWFsIGRlZmluaXRpb24uIFRoZSBtb3N0IGVmZmVjdGl2ZSBhcHByb2FjaCwgSSB0aGluaywgd2lsbCBpbnZvbHZlIHNlYXJjaGluZyBmb3IgdGhlIGBjb25maWdgIGtleXdvcmQgZm9sbG93ZWQgYnkgYFVTRVJGQVVMVEZEYCwgc28gSSBjYW4gcXVpY2tseSBpZGVudGlmeSB0aGUgZGVmaW5pdGlvbiBpdHNlbGYuXG5cbk9uY2UgSSBoYXZlIHRob3NlIGhpdHMsIEknbGwgbmVlZCB0byBxdWlja2x5IGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgaW4gZWFjaCBmaWxlLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIGFzc29jaWF0ZWQgd2l0aCBgVVNFUkZBVUxURkRgLiBXaGF0IG90aGVyIG9wdGlvbnMgZG9lcyBpdCBkZXBlbmQgb24/IEFyZSB0aGVyZSBhbnkgc2VsZWN0IHN0YXRlbWVudHMgaW52b2x2ZWQ/IFdoYXQncyB0aGUgaGVscCB0ZXh0IGFzc29jaWF0ZWQgd2l0aCBpdD8gVGhlIGJyb2FkZXIgY29udGV4dCB3aWxsIHJldmVhbCB0aGUgcmF0aW9uYWxlIGJlaGluZCBpdHMgYXZhaWxhYmlsaXR5IGFuZCBhbnkgcHJlY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0LiBJJ2xsIGxpa2VseSBuZWVkIHRvIHRyYWNlIHRoZSBwYXRocyB0aHJvdWdoIGFueSBgaWZgIHN0YXRlbWVudHMgb3IgZGVwZW5kZW5jaWVzIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgcXVpY2sgYXVkaXQgd2lsbCBnaXZlIG1lIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSBpbiB0aGUga2VybmVsLiBGaW5hbGx5LCBJJ2xsIG9yZ2FuaXplIG15IGZpbmRpbmdzIHRvIHByb3ZpZGUgYSBjb21wbGV0ZSBvdmVydmlldyBvZiB0aGUgb3B0aW9ucyByZWxhdGVkIHRvIGBVU0VSRkFVTFRGRGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjE1LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzM6NTAuMzk1MjQ4ODlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzI3ODI2OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTRVJGQVVMVEZEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM3Nz1jb25maWcgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXFxuLS1cXG5tbS9LY29uZmlnLTEzODEtXFxubW0vS2NvbmZpZzoxMzgyOmNvbmZpZyBVU0VSRkFVTFRGRF9SV1BcXG5tbS9LY29uZmlnLTEzODMtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxubW0vS2NvbmZpZy0xMzkwLVxcbm1tL0tjb25maWc6MTM5MTptZW51Y29uZmlnIFVTRVJGQVVMVEZEXFxubW0vS2NvbmZpZy0xMzkyLVxcdGJvb2wgXFxcIkVuYWJsZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozMzo1MS45NjgwMzY2N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzgwMTk2NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBhcmVhIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHRoZSByZWxldmFudCBzZXR0aW5ncyBhcmUgbGlrZWx5IGNsdXN0ZXJlZCBzb21ld2hlcmUgYXJvdW5kIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGJldHdlZW4gbGluZXMgMTM3MCBhbmQgMTQwMC4gVGhpcyByYW5nZSBmZWVscyBsaWtlIGEgcGxhdXNpYmxlIHNwb3QgZm9yIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zIEknbSBpbnRlcmVzdGVkIGluIHRvIHJlc2lkZS4gTGV0J3Mgc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IHdlIGNhbiB1bmNvdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDE4NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjMzOjUzLjc0ODIzNjIyNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzcwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzcwOlxcdFxcdCAgZGlmZmVyZW5jZSBpbiB0aGVpciBuYW1lLlxcbjEzNzE6XFx0XFxuMTM3MjpcXHRjb25maWcgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQXFxuMTM3MzpcXHRcXHRib29sXFxuMTM3NDpcXHRcXHRoZWxwXFxuMTM3NTpcXHRcXHQgIEFyY2ggaGFzIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gc3VwcG9ydFxcbjEzNzY6XFx0XFxuMTM3NzpcXHRjb25maWcgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXFxuMTM3ODpcXHRcXHRib29sXFxuMTM3OTpcXHRcXHRoZWxwXFxuMTM4MDpcXHRcXHQgIEFyY2ggaGFzIHVzZXJmYXVsdGZkIG1pbm9yIGZhdWx0IHN1cHBvcnRcXG4xMzgxOlxcdFxcbjEzODI6XFx0Y29uZmlnIFVTRVJGQVVMVEZEX1JXUFxcbjEzODM6XFx0XFx0ZGVmX2Jvb2wgeVxcbjEzODQ6XFx0XFx0ZGVwZW5kcyBvbiA2NEJJVCBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBU19QVEVfUFJPVE5PTkUgXFx1MDAyNlxcdTAwMjYgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQXFxuMTM4NTpcXHRcXHRoZWxwXFxuMTM4NjpcXHRcXHQgIFVzZXJmYXVsdGZkIHJlYWQtd3JpdGUgcHJvdGVjdGlvbiAoVUZGRElPX1JXUFJPVEVDVCkgZGVsaXZlcnMgYVxcbjEzODc6XFx0XFx0ICB1c2VyZmF1bHRmZCBub3RpZmljYXRpb24gb24gZXZlcnkgYWNjZXNzIC0tIHJlYWQgb3Igd3JpdGUgLS0gdG8gYVxcbjEzODg6XFx0XFx0ICBwcm90ZWN0ZWQgcmFuZ2UsIGxldHRpbmcgdXNlcnNwYWNlIG9ic2VydmUgdGhlIHdvcmtpbmcgc2V0IG9mIGFcXG4xMzg5OlxcdFxcdCAgcHJvY2Vzcy5cXG4xMzkwOlxcdFxcbjEzOTE6XFx0bWVudWNvbmZpZyBVU0VSRkFVTFRGRFxcbjEzOTI6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHVzZXJmYXVsdGZkKCkgc3lzdGVtIGNhbGxcXFwiXFxuMTM5MzpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbjEzOTQ6XFx0XFx0aGVscFxcbjEzOTU6XFx0XFx0ICBFbmFibGUgdGhlIHVzZXJmYXVsdGZkKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gaW50ZXJjZXB0IGFuZFxcbjEzOTY6XFx0XFx0ICBoYW5kbGUgcGFnZSBmYXVsdHMgaW4gdXNlcmxhbmQuXFxuMTM5NzpcXHRcXG4xMzk4OlxcdGlmIFVTRVJGQVVMVEZEXFxuMTM5OTpcXHRjb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuMTQwMDpcXHRcXHRib29sIFxcXCJVc2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnQgZm9yIHNobWVtL2h1Z2V0bGJmc1xcXCJcXG4xNDAxOlxcdFxcdGRlZmF1bHQgeVxcbjE0MDI6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfV1BcXG4xNDAzOlxcdFxcbjE0MDQ6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozMzo1My43NDgzNDI0MTZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkwNjEzMzcyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBgdXNlcmZhdWx0ZmRfbWlub3JgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHVzZXJmYXVsdGZkX21pbm9yYCB2YXJpYWJsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGtub3cgKndoZXJlKiB0aGlzIGlzIGRlZmluZWQuIE15IGluc3RpbmN0IGlzIHRvIGdyZXAgZm9yIGl0IOKAkyB0aGF0J3MgdGhlIGZhc3Rlc3Qgd2F5IHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIGl0cyB1c2FnZSBhbmQgbG9jYXRpb24gd2l0aGluIHRoZSBjb2RlYmFzZS4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgbGVhZCBtZSB0byB0aGUgcmVsZXZhbnQgc3RydWN0dXJlIG9yIGZ1bmN0aW9uIGRlZmluaXRpb24uIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA4MzgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjMzOjU2LjY1NDQ3ODM1OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNzI4MzY4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyZmF1bHRmZF9taW5vclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0yMTI9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX3dwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjE2LVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjIxNzpzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfbWlub3Ioc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjE4LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTM2MT1zdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0zNjUtXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MzY2OnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9taW5vcihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0zNjcte1xcbi0tXFxubW0vaHVnZXRsYi5jPTU3NTI9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl9ub19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vaHVnZXRsYi5jLTU4NzktXFx0XFx0LyogQ2hlY2sgZm9yIHBhZ2UgaW4gdXNlcmZhdWx0IHJhbmdlLiAqL1xcbm1tL2h1Z2V0bGIuYzo1ODgwOlxcdFxcdGlmICh1c2VyZmF1bHRmZF9taW5vcih2bWEpKSB7XFxubW0vaHVnZXRsYi5jLTU4ODEtXFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xODU2PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE5MDUtXFx0ICovXFxubW0va2h1Z2VwYWdlZC5jOjE5MDY6XFx0aWYgKHVzZXJmYXVsdGZkX21pbm9yKHZtYSkpXFxubW0va2h1Z2VwYWdlZC5jLTE5MDctXFx0XFx0cmV0dXJuIFNDQU5fUFRFX1VGRkQ7XFxuLS1cXG5tbS9zaG1lbS5jPTI0MTc9c3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuLS1cXG5tbS9zaG1lbS5jLTI0NDEtXFx0Zm9saW8gPSBmaWxlbWFwX2dldF9lbnRyeShpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCBpbmRleCk7XFxubW0vc2htZW0uYzoyNDQyOlxcdGlmIChmb2xpbyBcXHUwMDI2XFx1MDAyNiB2bWEgXFx1MDAyNlxcdTAwMjYgdXNlcmZhdWx0ZmRfbWlub3Iodm1hKSkge1xcbm1tL3NobWVtLmMtMjQ0My1cXHRcXHRpZiAoIXhhX2lzX3ZhbHVlKGZvbGlvKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzM6NTguMTcxNzY2OTgzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MDYyOTk0MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBVc2VyZmF1bHRmZCBLZXJuZWwgSGVhZGVyKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBpbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaGAgaGVhZGVyIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIHplcm9pbmcgaW4gb24gdGhlIGNvZGUgYXJvdW5kIGxpbmUgMjE3LiBJJ20gaG9waW5nIHRvIHVuZGVyc3RhbmQgYSBwYXJ0aWN1bGFyIHBpZWNlIG9mIGZ1bmN0aW9uYWxpdHkgb3IgZGF0YSBzdHJ1Y3R1cmUgcmVsYXRlZCB0byB1c2VyZmF1bHRmZCB0aGF0J3MgZGVmaW5lZCBvciB1c2VkIGFyb3VuZCB0aGF0IGFyZWEuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBleHBlY3RpbmcgdG8gcXVpY2tseSBncmFzcCB0aGUgY29udGV4dCwgYW5kIGFueSBzdWJ0bGV0aWVzIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBzaG91bGQganVtcCBvdXQgYXQgbWUgYXMgSSByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBNeSBnb2FsIGlzIHRvIGV4dHJhY3QgYSBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE1ODksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozNDowMS41NzgwNjkwMTZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxMDpcXHR9XFxuIDIxMTpcXHRcXG4gMjEyOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gMjEzOlxcdHtcXG4gMjE0OlxcdFxcdHJldHVybiB2bWFfdGVzdF9hbnlfbWFzayh2bWEsIFZNQV9VRkZEX1dQKTtcXG4gMjE1OlxcdH1cXG4gMjE2OlxcdFxcbiAyMTc6XFx0c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX21pbm9yKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiAyMTg6XFx0e1xcbiAyMTk6XFx0XFx0cmV0dXJuIHZtYV90ZXN0X2FueV9tYXNrKHZtYSwgVk1BX1VGRkRfTUlOT1IpO1xcbiAyMjA6XFx0fVxcbiAyMjE6XFx0XFxuIDIyMjpcXHRzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfcndwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiAyMjM6XFx0e1xcbiAyMjQ6XFx0XFx0LypcXG4gMjI1OlxcdFxcdCAqIENhbGxlcnMgZ2F0ZSBQQUdFX05PTkUgdXNhZ2Ugb24gdGhpczsgUEFHRV9OT05FIGlzIGEgQlVJTERfQlVHKClcXG4gMjI2OlxcdFxcdCAqIHdpdGhvdXQgQ09ORklHX0FSQ0hfSEFTX1BURV9QUk9UTk9ORSwgc28gZm9sZCB0byBmYWxzZS5cXG4gMjI3OlxcdFxcdCAqL1xcbiAyMjg6XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19QVEVfUFJPVE5PTkUpKVxcbiAyMjk6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozNDowMS41NzgxNzcwNzZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQwNjMyNDczNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHVzZXJmYXVsdGZkIGFuZCBUcmFuc3BhcmVudCBIdWdlcGFnZXMgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdHdlYWtzIGhvdyBUcmFuc3BhcmVudCBIdWdlcGFnZXMgKFRIUCkgaW50ZXJhY3RzIHdpdGggdXNlcmZhdWx0ZmQsIHNwZWNpZmljYWxseSB0aGUgbWlub3IgZmF1bHQgaGFuZGxpbmcuIFRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLCB3aGVyZSB0aGV5J3ZlIGFkZGVkIGEgY2hlY2s6IGlmIGEgVk1BIGlzIHJlZ2lzdGVyZWQgZm9yIHVzZXJmYXVsdGZkIG1pbm9yIGhhbmRsaW5nLCBkb24ndCBjb2xsYXBzZSBpdCBpbnRvIGEgVEhQLiBUaGlzIG1ha2VzIHNlbnNlOyB1c2VyZmF1bHRmZCBtaW5vciBWTUFzIGFyZSBleHBsaWNpdGx5IG1hbmFnZWQgYnkgdXNlcnNwYWNlLCBzbyBjb2xsYXBzaW5nIHRoZW0gd291bGQgYnJlYWsgdGhhdC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIklzIHRoaXMgd29ydGggZnV6emluZz9cIiBBYnNvbHV0ZWx5ISBUaGlzIGlzIHNtYWNrIGRhYiBpbiB0aGUgbWlkZGxlIG9mIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIGBraHVnZXBhZ2VkYCwgYHVzZXJmYXVsdGZkYCwgYW5kIFRIUHMg4oCTIGFsbCBvZiB3aGljaCBhcmUgY3JpdGljYWwgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhpcyBjb2RlIGlzIHRvdWNoZWQgYnkgc2V2ZXJhbCBzeXN0ZW0gY2FsbHMgdGhhdCBhcmUgbGlrZWx5IGV4cG9zZWQgdG8gZnV6emluZy4gSSBjYW4gc2VlIHRoaXMgYmVpbmcgdHJpZ2dlcmVkIHRocm91Z2ggYHVzZXJmYXVsdGZkYCwgYG1hZHZpc2VgIHdpdGggYE1BRFZfQ09MTEFQU0VgLCBgbW1hcGAgY2FsbHMsIHNobWVtLCB0bXBmcywgZmlsZS1iYWNrZWQgbWVtb3J5IGludGVyYWN0aW9ucywgYW5kIGV2ZW4gaG93IHRoZSBga2h1Z2VwYWdlZGAga3RocmVhZCBpdHNlbGYgd29ya3MuIEl0J3MgYSBnb2xkbWluZS5cblxuVG8gY29uZmlybSByZWFjaGFiaWxpdHksIEkgbmVlZCB0byBrbm93IGhvdyB1c2Vyc3BhY2UgY2FuIGFjdHVhbGx5IGNyZWF0ZSBhIHVzZXJmYXVsdGZkIG1pbm9yIHJlZ2lzdGVyZWQgVk1BLiBJdCBsb29rcyBsaWtlIGBzaG1lbWAsIGBodWdldGxiZnNgLCBvciBhIHJlZ3VsYXIgZmlsZSBjb3VsZCBkbyBpdC4gVGhlbiwgY2FsbGluZyBgbWFkdmlzZShNQURWX0NPTExBUFNFKWAgb3IganVzdCBsZXR0aW5nIGBraHVnZXBhZ2VkYCBzY2FuIGl0LCBvciBldmVuIHVzaW5nIGB1cHJvYmVzYCBvciBgY29sbGFwc2VfZmlsZWAgc2hvdWxkIGJlIGVub3VnaCB0byB0cmlnZ2VyIHRoaXMuXG5cbkknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgVVNFUkZBVUxURkRgIGFyZSBlbmFibGVkIHRvIGV2ZW4gdGVzdCB0aGlzLlxuXG5Ob3csIGZvciBmb2N1cyBzeW1ib2xz4oCmIEkgbmVlZCB0byBpZGVudGlmeSB3aGljaCBmdW5jdGlvbnMgYXJlIHRoZSBlbnRyeXBvaW50cy4gTGV0J3Mgc2VlLi4uIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGxvb2tzIGltcG9ydGFudCwgYnV0IGl0J3Mgc3RhdGljLCBzbyB0aGF0J3Mgbm90IGlkZWFsLiBIb3dldmVyLCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGlzICpub3QqIHN0YXRpYywgc28gdGhhdCdzIGEgZ29vZCBvbmUgdG8gbG9vayBhdCEgU2FtZSBmb3IgYG1hZHZpc2VfY29sbGFwc2VgLCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgLCBhbmQgYGh1Z2VwYWdlX21hZHZpc2VgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoZWlyIGRlY2xhcmF0aW9ucyBhbmQgZGVmaW5pdGlvbnMgdG8gYmUgc3VyZSB0aGV5IGFyZSBub24tc3RhdGljIGFuZCBleHBvc2VkIHRvIHRoZSB3aWRlciBrZXJuZWwgYW5kIGhlbmNlLCB0byB1c2Vyc3BhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMTM1LCJPdXRwdXRUb2tlbnMiOjYzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzQ6MDYuOTg0NTAzNjkyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY2OTg0MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZHxlbnVtfGJvb2x8dW5zaWduZWR8bG9uZykgKG1hZHZpc2VfY29sbGFwc2V8Y29sbGFwc2VfcHRlX21hcHBlZF90aHB8aHVnZXBhZ2VfbWFkdmlzZXxraHVnZXBhZ2VkKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2h1Z2VwYWdlZC5jPTQzND1zdGF0aWMgdW5zaWduZWQgaW50IGNvbGxhcHNlX21heF9wdGVzX3N3YXAoc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTQ0OS1cXG5tbS9raHVnZXBhZ2VkLmM6NDUwOmludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2todWdlcGFnZWQuYy00NTEtXFx0XFx0ICAgICB2bV9mbGFnc190ICp2bV9mbGFncywgaW50IGFkdmljZSlcXG4tLVxcbm1tL2todWdlcGFnZWQuYz01ODg9c3RhdGljIGJvb2wgY29sbGFwc2VfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTkzLVxcbm1tL2todWdlcGFnZWQuYzo1OTQ6dm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9raHVnZXBhZ2VkLmMtNTk1LVxcdFxcdFxcdCAgdm1fZmxhZ3NfdCB2bV9mbGFncylcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xODU2PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIxMDAtICovXFxubW0va2h1Z2VwYWdlZC5jOjIxMDE6dm9pZCBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2todWdlcGFnZWQuYy0yMTAyLVxcdFxcdGJvb2wgaW5zdGFsbF9wbWQpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MzEyND1pbnQgc3RhcnRfc3RvcF9raHVnZXBhZ2VkKHZvaWQpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzE1MC1cXG5tbS9raHVnZXBhZ2VkLmM6MzE1MTp2b2lkIGtodWdlcGFnZWRfbWluX2ZyZWVfa2J5dGVzX3VwZGF0ZSh2b2lkKVxcbm1tL2todWdlcGFnZWQuYy0zMTUyLXtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0zMTYzPXN0YXRpYyBpbnQgbWFkdmlzZV9jb2xsYXBzZV9lcnJubyhlbnVtIHNjYW5fcmVzdWx0IHIpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzE5NC1cXG5tbS9raHVnZXBhZ2VkLmM6MzE5NTppbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9raHVnZXBhZ2VkLmMtMzE5Ni1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sICpsb2NrX2Ryb3BwZWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjM0OjA3LjA5MTIxMjY3NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDI3NDA0NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gUmVsZXZhbnQgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBjb25zaWRlcmluZyBhbGwgdGhlIHJlbGV2YW50IHN5bWJvbHMgaW4gdGhpcyBhcmVhLiBMZXQgbWUgcXVpY2tseSBzY2FuIGZvciBhbnl0aGluZyBlbHNlIHRoYXQgbWlnaHQgYmUgaW1wb3J0YW50IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIG1haW4gc3ViamVjdC4gUmlnaHQsIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgYG1hZHZpc2VfY29sbGFwc2VgLCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLCBhbmQgYGh1Z2VwYWdlX21hZHZpc2VgLiBUaG9zZSBmZWVsIGxpa2UgdGhleSdyZSByZWxhdGVkLCBzbyBJIG5lZWQgdG8ga2VlcCB0aGVtIGluIG1pbmQgYXMgSSBkaWcgZGVlcGVyLlxuXG5OZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSBlc3NlbnRpYWwsIHN0YXJ0aW5nIHdpdGggYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkga25vdyB0aGF0IGRyaXZlcyB0aGUgaW5jbHVzaW9uIG9mIGBodWdlX21lbW9yeS5vYCBhbmQgYGtodWdlcGFnZWQub2AgaW4gYG1tL01ha2VmaWxlYCwgYnV0IEkgc2hvdWxkIGNoZWNrIHRoZSBtYWtlIGZpbGUgdG8gY29uZmlybS5cblxuVGhlbiwgdGhlcmXigJlzIGBDT05GSUdfVVNFUkZBVUxURkRgLiBJIHNob3VsZCBsb29rIGludG8gdGhhdCBpbiB0aGUgYG1tL0tjb25maWdgIGZpbGUuIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIGBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JgLCBwYXJ0aWN1bGFybHkgc2luY2UgeDg2IGFuZCBvdGhlciBhcmNoaXRlY3R1cmVzIHNlbGVjdCBpdC4gSSBzaG91bGQgZ28gYW5kIGNoZWNrIHRoYXQgYXMgd2VsbCB0byByb3VuZCBvdXQgdGhlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MDE2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjM0OjA5LjUxODYxOTU0NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NDIwMjU0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMjU0LVxcdHNlbGVjdCBUSFJFQURfSU5GT19JTl9UQVNLXFxuYXJjaC9hcm02NC9LY29uZmlnOjI1NTpcXHRzZWxlY3QgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SIGlmIFVTRVJGQVVMVEZEXFxuYXJjaC9hcm02NC9LY29uZmlnLTI1Ni1cXHRzZWxlY3QgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQIGlmIFVTRVJGQVVMVEZEXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnPTI9Y29uZmlnIExPT05HQVJDSFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy0xMzAtXFx0c2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBpZiA2NEJJVFxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6MTMxOlxcdHNlbGVjdCBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1IgaWYgNjRCSVQgXFx1MDAyNlxcdTAwMjYgVVNFUkZBVUxURkRcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTEzMi1cXHRzZWxlY3QgSEFWRV9BU01fTU9EVkVSU0lPTlNcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1ZcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xNTMtXFx0c2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgaWYgNjRCSVQgXFx1MDAyNlxcdTAwMjYgTU1VXFxuYXJjaC9yaXNjdi9LY29uZmlnOjE1NDpcXHRzZWxlY3QgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SIGlmIDY0QklUIFxcdTAwMjZcXHUwMDI2IFVTRVJGQVVMVEZEXFxuYXJjaC9yaXNjdi9LY29uZmlnLTE1NS1cXHRzZWxlY3QgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQIGlmIDY0QklUIFxcdTAwMjZcXHUwMDI2IE1NVSBcXHUwMDI2XFx1MDAyNiBVU0VSRkFVTFRGRCBcXHUwMDI2XFx1MDAyNiBSSVNDVl9JU0FfU1ZSU1c2MFQ1OUJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yMTMtXFx0c2VsZWN0IEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9XUCAgICAgICAgIGlmIFg4Nl82NCBcXHUwMDI2XFx1MDAyNiBVU0VSRkFVTFRGRFxcbmFyY2gveDg2L0tjb25maWc6MjE0OlxcdHNlbGVjdCBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcXHRpZiBYODZfNjQgXFx1MDAyNlxcdTAwMjYgVVNFUkZBVUxURkRcXG5hcmNoL3g4Ni9LY29uZmlnLTIxNS1cXHRzZWxlY3QgSEFWRV9BUkNIX1ZNQVBfU1RBQ0tcXHRcXHRpZiBYODZfNjRcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0xMTY2PXN0YXRpYyB2b2lkIHNob3dfc21hcF92bWFfZmxhZ3Moc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0xMjM2LSNlbmRpZiAvKiBDT05GSUdfQVJDSF9IQVNfUEtFWVMgKi9cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTIzNzojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUlxcbmZzL3Byb2MvdGFza19tbXUuYy0xMjM4LVxcdFxcdFtpbG9nMihWTV9VRkZEX01JTk9SKV1cXHQ9IFxcXCJ1aVxcXCIsXFxuZnMvcHJvYy90YXNrX21tdS5jOjEyMzk6I2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1IgKi9cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTI0MC0jaWZkZWYgQ09ORklHX1VTRVJGQVVMVEZEX1JXUFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTI5ND1lbnVtIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC01MDEtI2VuZGlmXFxuaW5jbHVkZS9saW51eC9tbS5oOjUwMjojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUlxcbmluY2x1ZGUvbGludXgvbW0uaC01MDMtI2RlZmluZSBWTV9VRkZEX01JTk9SXFx0SU5JVF9WTV9GTEFHKFVGRkRfTUlOT1IpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtNTIwLSNkZWZpbmUgVk1BX1VGRkRfV1BcXHRcXHRta192bWFfZmxhZ3MoVk1BX1VGRkRfV1BfQklUKVxcbmluY2x1ZGUvbGludXgvbW0uaDo1MjE6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcXG5pbmNsdWRlL2xpbnV4L21tLmgtNTIyLSNkZWZpbmUgVk1BX1VGRkRfTUlOT1JcXHRcXHRta192bWFfZmxhZ3MoVk1BX1VGRkRfTUlOT1JfQklUKVxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oPTE2MD1JRl9IQVZFX1BHX0FSQ0hfMyhhcmNoXzMpXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmgtMTgyLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaDoxODM6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmgtMTg0LSMgZGVmaW5lIElGX0hBVkVfVUZGRF9NSU5PUihmbGFnLCBuYW1lKSB7ZmxhZywgbmFtZX0sXFxuLS1cXG5tbS9LY29uZmlnPTEzNzI9Y29uZmlnIEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9XUFxcbi0tXFxubW0vS2NvbmZpZy0xMzc2LVxcbm1tL0tjb25maWc6MTM3Nzpjb25maWcgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXFxubW0vS2NvbmZpZy0xMzc4LVxcdGJvb2xcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9MzcxNj1zdGF0aWMgaW50IHVzZXJmYXVsdGZkX3JlZ2lzdGVyKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMzc2OC1cXHRpZiAodWZmZGlvX3JlZ2lzdGVyLm1vZGUgXFx1MDAyNiBVRkZESU9fUkVHSVNURVJfTU9ERV9NSU5PUikge1xcbm1tL3VzZXJmYXVsdGZkLmM6Mzc2OTojaWZuZGVmIENPTkZJR19IQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcXG5tbS91c2VyZmF1bHRmZC5jLTM3NzAtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTQzMTY9c3RhdGljIF9fdTY0IHVmZmRfYXBpX2F2YWlsYWJsZV9mZWF0dXJlcyh2b2lkKVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy00MzE5LVxcbm1tL3VzZXJmYXVsdGZkLmM6NDMyMDpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUikpXFxubW0vdXNlcmZhdWx0ZmQuYy00MzIxLVxcdFxcdGYgXFx1MDAyNj0gfihVRkZEX0ZFQVRVUkVfTUlOT1JfSFVHRVRMQkZTIHwgVUZGRF9GRUFUVVJFX01JTk9SX1NITUVNKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmg9MTAwPWVudW0ge1xcbi0tXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC0yOTktI2VuZGlmXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaDozMDA6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTMwMS0jZGVmaW5lIFZNX1VGRkRfTUlOT1JcXHRJTklUX1ZNX0ZMQUcoVUZGRF9NSU5PUilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzQ6MTEuMDAyODI3MjdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIwNDA2MjkyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb25maWd1cmF0aW9uIGZvciBVc2VyZmF1bHRmZC1NaW5vciBTdXBwb3J0KipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SYCBpcyBhdXRvbWF0aWNhbGx5IGhhbmRsZWQgaWYgYFVTRVJGQVVMVEZEYCBpcyBlbmFibGVkIG9uIHRoZSBzdGFuZGFyZCBhcmNoaXRlY3R1cmVzIGxpa2UgeDg2XzY0IGFuZCBhcm02NCDigJMgdGhhdCdzIGdvb2QsIG9uZSBsZXNzIHRoaW5nIHRvIHdvcnJ5IGFib3V0LiBUaGVyZWZvcmUsIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYFVTRVJGQVVMVEZEYC4gVGhlc2UgYXJlIHRoZSBrZXkgZW5hYmxlcnMuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IHRoYXQgZXZlcnl0aGluZyBhbGlnbnMgd2l0aCBteSByZXF1aXJlbWVudHMuIFllcywgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIHRydWUsIHNvIHRoYXQncyB0aGUgZ3JlZW4gbGlnaHQuIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJyYXkgY29uZmlybXMgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYFVTRVJGQVVMVEZEYCBhcyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBBbmQgdGhlIGBGb2N1c1N5bWJvbHNgIGFycmF5IGhpZ2hsaWdodHMgdGhlIGNydWNpYWwgZnVuY3Rpb25zOiBgbWFkdmlzZV9jb2xsYXBzZWAgYW5kIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAuIFRoZSByZWFzb25pbmcgY2xhcmlmaWVzIHRoZSBzcGVjaWZpYyBpc3N1ZSBhZGRyZXNzZWQg4oCTIGEgY2hlY2sgaW50cm9kdWNlZCB0byBwcmV2ZW50IGNvbGxhcHNpbmcgUFRFLW1hcHBlZCBUSFBzIGZvciBWTUFzIHRoYXQgYXJlIHVzaW5nIHVzZXJmYXVsdGZkLW1pbm9yLiBJdCBtYWtlcyBzZW5zZTsgdGhlIHBhdGNoIGlzIGFib3V0IHByb3RlY3RpbmcgdGhvc2UgbWFwcGluZ3MsIGFuZCB0aG9zZSB0d28gZnVuY3Rpb25zIGFyZSBrZXkgZm9yIHRoaXMgdnVsbmVyYWJpbGl0eS5cblxuTm93LCBhbGwgc2VlbXMgd2VsbCwgYW5kIEkgY2FuIG1vdmUgb24gdG8gdGhlIG5leHQgc3RlcCB3aGljaCBpcyB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIEkgY2FuIG5vdyBtb3ZlIHRvIHRoZSBuZXh0IHN0YWdlIG9mIHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1ODcyLCJPdXRwdXRUb2tlbnMiOjEzNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozNDoxNC4yMDY4OTMzOVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMzg1MDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiVVNFUkZBVUxURkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWR2aXNlX2NvbGxhcHNlXCIsXG4gICAgXCJjb2xsYXBzZV9wdGVfbWFwcGVkX3RocFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBpbiB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKSB0byBwcmV2ZW50IGNvbGxhcHNpbmcgUFRFLW1hcHBlZCBUSFAgcGFnZXMgd2l0aGluIFZNQXMgcmVnaXN0ZXJlZCB3aXRoIHVzZXJmYXVsdGZkIG1pbm9yIGZhdWx0IGhhbmRsaW5nICh1c2VyZmF1bHRmZF9taW5vcikuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2xsYXBzZSBsb2dpYyByZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9DT0xMQVBTRSkgb3Iga2h1Z2VwYWdlZCBiYWNrZ3JvdW5kIHNjYW5uaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJVU0VSRkFVTFRGRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hZHZpc2VfY29sbGFwc2VcIixcbiAgICBcImNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIFRIUCBwYWdlcyB3aXRoaW4gVk1BcyByZWdpc3RlcmVkIHdpdGggdXNlcmZhdWx0ZmQgbWlub3IgZmF1bHQgaGFuZGxpbmcgKHVzZXJmYXVsdGZkX21pbm9yKS4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbGxhcHNlIGxvZ2ljIHJlYWNoYWJsZSB2aWEgbWFkdmlzZShNQURWX0NPTExBUFNFKSBvciBraHVnZXBhZ2VkIGJhY2tncm91bmQgc2Nhbm5pbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjM0OjE0LjI5MDI5MTg1NFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4Mzg4MzU2NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozNDoxNC4yOTA5MjI0NTRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMjgzODIwMTA4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBlYXJseSByZXR1cm4gY2hlY2sgKGB1c2VyZmF1bHRmZF9taW5vcih2bWEpYCkgaW4gYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpYCB0byBwcmV2ZW50IGNvbGxhcHNpbmcgUFRFLW1hcHBlZCBUSFBzIGZvciBWTUFzIHJlZ2lzdGVyZWQgd2l0aCB1c2VyZmF1bHRmZCBtaW5vciBtb2RlLlxcblxcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZSBvbmx5IGNoZWNrcyBleGlzdGluZyBWTUEgZmxhZ3MgKGB2bWEtXFx1MDAzZXZtX2ZsYWdzYCkgYW5kIHJldHVybnMgYW4gZXJyb3IgZW51bSB2YWx1ZSAoYFNDQU5fUFRFX1VGRkRgKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgbW9kaWZ5IHN0cnVjdCBsYXlvdXRzL3BhZGRpbmcsIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLCBvciBhbHRlciBidWZmZXIgYm91bmRzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxcbi0gS0FTQU4vZ2VuZXJhbCBkZXRlY3RvciBhcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgLyBraHVnZXBhZ2VkIGxvZ2ljLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW4gVk1BIGxpZmVjeWNsZSAvIHBhZ2UgdGFibGUgbWFuYWdlbWVudCB3b3VsZCBmYWxsIHVuZGVyIHN0YW5kYXJkIG1lbW9yeSBtYW5hZ2VtZW50IHNlbWFudGljcywgcGFnZSBmYXVsdHMsIG9yIHBvaW50ZXIgdmFsaWRpdHksIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdHMuXFxuXFxuSGVuY2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUzY2JiM2EzYjkzOGY0MTY0MzQ4ZDM1OTM4NTRlYmMyNzYyYzhhYWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyOCAyMjozMjo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2todWdlcGFnZWQuYyBiL21tL2todWdlcGFnZWQuY1xuaW5kZXggYjIzN2Y2ZTc2NjJhNS4uMjIzNTYyMjljMWU0MiAxMDA2NDRcbi0tLSBhL21tL2todWdlcGFnZWQuY1xuKysrIGIvbW0va2h1Z2VwYWdlZC5jXG5AQCAtMTg5OSw2ICsxODk5LDEzIEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduXG4gXHRpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSkpXG4gXHRcdHJldHVybiBTQ0FOX1BURV9VRkZEO1xuIFxuK1x0LypcbitcdCAqIFVzZXJmYXVsdGZkLW1pbm9yLXJlZ2lzdGVyZWQgVk1BcyBzaG91bGQgbm90IGJlIGNvbGxhcHNlZCwgYXNcbitcdCAqIHVzZXJzcGFjZSBpcyBleHBlY3RpbmcgdG8gZXhwbGljaXRseSBpbnN0YWxsIFBURXMuXG4rXHQgKi9cbitcdGlmICh1c2VyZmF1bHRmZF9taW5vcih2bWEpKVxuK1x0XHRyZXR1cm4gU0NBTl9QVEVfVUZGRDtcbitcbiBcdGZvbGlvID0gZmlsZW1hcF9sb2NrX2ZvbGlvKHZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZWZfbWFwcGluZyxcbiBcdFx0XHQgICAgICAgbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBoYWRkcikpO1xuIFx0aWYgKElTX0VSUihmb2xpbykpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozNDoxNC4yOTA5MjU2ODRaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjQ3MTk4OTU3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLaHVnZXBhZ2VkIFBhdGNoOiBVc2VyZmF1bHRmZCBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBmb3IgYGtodWdlcGFnZWQuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJBaCwgdGhpcyBpcyBkZWFsaW5nIHdpdGggVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB1c2VyZmF1bHRmZC5cIiBJIGltbWVkaWF0ZWx5IGhvbmUgaW4gb24gdGhlIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGZ1bmN0aW9uLCB3aGljaCBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiBhdHRlbXB0aW5nIHRvIGNvbGxhcHNlIHBhZ2UgdGFibGUgZW50cmllcyBpbnRvIGEgVEhQIHJlc2lkZXMuXG5cbk5vdywgSSBzZWUgdGhlIGFkZGVkIGNvbmRpdGlvbmFsIGNoZWNrOiBgaWYgKHVzZXJmYXVsdGZkX21pbm9yKHZtYSkpIHJldHVybiBTQ0FOX1BURV9VRkZEO2AuIFRoaXMgaXMgY3JpdGljYWwuIFRoZSBleGlzdGluZyBjaGVjayBhbHJlYWR5IGNvbnNpZGVycyBgdXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSlgLiBUaGUgbmV3IGFkZGl0aW9uIGNsYXJpZmllcyB0aGF0IGlmIGEgVk1BIGhhcyBiZWVuIHJlZ2lzdGVyZWQgYXMgYSBtaW5vciB1c2VyZmF1bHRmZCwgdGhhdCBtZWFucyB1c2Vyc3BhY2UgZXhwbGljaXRseSBleHBlY3RzIHRvIGNvbnRyb2wgdGhlIFBURSBpbnN0YWxsYXRpb24uIFdlICpzaG91bGQgbm90KiBjb2xsYXBzZSB0aG9zZS4gVGhhdCdzIHRoZSBrZXkgdGFrZWF3YXkgaGVyZS4gVGhpcyBlbmhhbmNlbWVudCBzZWVtcyB0byBwcmV2ZW50IGtodWdlcGFnZWQgZnJvbSBpbnRlcmZlcmluZyB3aXRoIHVzZXJzcGFjZSdzIGV4cGxpY2l0IFBURSBtYW5hZ2VtZW50IGZvciBtaW5vciB1c2VyZmF1bHRmZCBWTUFzLiBUaGUgaW1wbGljYXRpb24gaXMgYXZvaWRpbmcgdW5pbnRlbnRpb25hbCBUSFAgY29sbGFwc2UgaW4gbWlub3IgdXNlcmZhdWx0ZmQgVk1BcyB3aGljaCBjb3VsZCBjYXVzZSB1bmV4cGVjdGVkIGJlaGF2aW91ciBpbiB1c2Vyc3BhY2UsIHN1Y2ggYXMgYnJva2VuIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3VyIGluIHRoZSBmYXVsdC1oYW5kbGluZyBsb2dpYy4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgc2VtYW50aWNzIG9mIGB1c2VyZmF1bHRmZF9taW5vcmAgYW5kIGB1c2VyZmF1bHRmZF9wcm90ZWN0ZWRgIHRvIGZ1bGx5IGdyYXNwIHRoZSBudWFuY2VzLCBidXQgdGhpcyBwYXRjaCBhcHBlYXJzIHRvIGJlIGEgZ29vZCwgdGFyZ2V0ZWQgc29sdXRpb24gdG8gZW5zdXJlIGNvcnJlY3QgaW50ZXJhY3Rpb24uIEknbGwgbmVlZCB0byByZXZpZXcgdGhlIHJlbGF0ZWQgY29kZSBwYXRocyBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiB0byBmdWxseSBldmFsdWF0ZSB0aGUgcG90ZW50aWFsIGltcGFjdCBhbmQgYW55IGNvcm5lciBjYXNlcywgYnV0IHRoZSBpbnRlbnQgc2VlbXMgc291bmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozNDoyMC43NjI5MTg4NjhaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyMjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2todWdlcGFnZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODg1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODg1OlxcdFxcdC8qXFxuMTg4NjpcXHRcXHQgKiBJZiB3ZSBhcmUgaGVyZSwgd2UndmUgc3VjY2VlZGVkIGluIHJlcGxhY2luZyBhbGwgdGhlIG5hdGl2ZSBwYWdlc1xcbjE4ODc6XFx0XFx0ICogaW4gdGhlIHBhZ2UgY2FjaGUgd2l0aCBhIHNpbmdsZSBodWdlcGFnZS4gSWYgYSBtbSB3ZXJlIHRvIGZhdWx0LWluXFxuMTg4ODpcXHRcXHQgKiB0aGlzIG1lbW9yeSAobWFwcGVkIGJ5IGEgc3VpdGFibHkgYWxpZ25lZCBWTUEpLCB3ZSdkIGdldCB0aGUgaHVnZXBhZ2VcXG4xODg5OlxcdFxcdCAqIGFuZCBtYXAgaXQgYnkgYSBQTUQsIHJlZ2FyZGxlc3Mgb2Ygc3lzZnMgVEhQIHNldHRpbmdzLiBBcyBzdWNoLCBsZXQnc1xcbjE4OTA6XFx0XFx0ICogYW5hbG9nb3VzbHkgZWxpZGUgc3lzZnMgVEhQIHNldHRpbmdzIGhlcmUgYW5kIGZvcmNlIGNvbGxhcHNlLlxcbjE4OTE6XFx0XFx0ICovXFxuMTg5MjpcXHRcXHRpZiAoIXRocF92bWFfYWxsb3dhYmxlX29yZGVyKHZtYSwgdm1hLVxcdTAwM2V2bV9mbGFncywgVFZBX0ZPUkNFRF9DT0xMQVBTRSwgUE1EX09SREVSKSlcXG4xODkzOlxcdFxcdFxcdHJldHVybiBTQ0FOX1ZNQV9DSEVDSztcXG4xODk0OlxcdFxcbjE4OTU6XFx0XFx0LypcXG4xODk2OlxcdFxcdCAqIEtlZXAgcG1kIHBndGFibGUgd2hpbGUgdGhlIHVmZmQgYml0IGlzIGluIHVzZTsgc2VlIGNvbW1lbnQgaW5cXG4xODk3OlxcdFxcdCAqIHJldHJhY3RfcGFnZV90YWJsZXMoKS5cXG4xODk4OlxcdFxcdCAqL1xcbjE4OTk6XFx0XFx0aWYgKHVzZXJmYXVsdGZkX3Byb3RlY3RlZCh2bWEpKVxcbjE5MDA6XFx0XFx0XFx0cmV0dXJuIFNDQU5fUFRFX1VGRkQ7XFxuMTkwMTpcXHRcXG4xOTAyOlxcdFxcdC8qXFxuMTkwMzpcXHRcXHQgKiBVc2VyZmF1bHRmZC1taW5vci1yZWdpc3RlcmVkIFZNQXMgc2hvdWxkIG5vdCBiZSBjb2xsYXBzZWQsIGFzXFxuMTkwNDpcXHRcXHQgKiB1c2Vyc3BhY2UgaXMgZXhwZWN0aW5nIHRvIGV4cGxpY2l0bHkgaW5zdGFsbCBQVEVzLlxcbjE5MDU6XFx0XFx0ICovXFxuMTkwNjpcXHRcXHRpZiAodXNlcmZhdWx0ZmRfbWlub3Iodm1hKSlcXG4xOTA3OlxcdFxcdFxcdHJldHVybiBTQ0FOX1BURV9VRkZEO1xcbjE5MDg6XFx0XFxuMTkwOTpcXHRcXHRmb2xpbyA9IGZpbGVtYXBfbG9ja19mb2xpbyh2bWEtXFx1MDAzZXZtX2ZpbGUtXFx1MDAzZWZfbWFwcGluZyxcXG4xOTEwOlxcdFxcdFxcdFxcdCAgICAgICBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGhhZGRyKSk7XFxuMTkxMTpcXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG4xOTEyOlxcdFxcdFxcdHJldHVybiBTQ0FOX1BBR0VfTlVMTDtcXG4xOTEzOlxcdFxcbjE5MTQ6XFx0XFx0aWYgKCFpc19wbWRfb3JkZXIoZm9saW9fb3JkZXIoZm9saW8pKSkge1xcbjE5MTU6XFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QQUdFX0NPTVBPVU5EO1xcbjE5MTY6XFx0XFx0XFx0Z290byBkcm9wX2ZvbGlvO1xcbjE5MTc6XFx0XFx0fVxcbjE5MTg6XFx0XFxuMTkxOTpcXHRcXHRyZXN1bHQgPSBmaW5kX3BtZF9vcl90aHBfb3Jfbm9uZShtbSwgaGFkZHIsIFxcdTAwMjZwbWQpO1xcbjE5MjA6XFx0XFx0c3dpdGNoIChyZXN1bHQpIHtcXG4xOTIxOlxcdFxcdGNhc2UgU0NBTl9TVUNDRUVEOlxcbjE5MjI6XFx0XFx0XFx0YnJlYWs7XFxuMTkyMzpcXHRcXHRjYXNlIFNDQU5fTk9fUFRFX1RBQkxFOlxcbjE5MjQ6XFx0XFx0XFx0LypcXG4xOTI1OlxcdFxcdFxcdCAqIEFsbCBwdGUgZW50cmllcyBoYXZlIGJlZW4gcmVtb3ZlZCBhbmQgcG1kIGNsZWFyZWQuXFxuMTkyNjpcXHRcXHRcXHQgKiBTa2lwIGFsbCB0aGUgcHRlIGNoZWNrcyBhbmQganVzdCB1cGRhdGUgdGhlIHBtZCBtYXBwaW5nLlxcbjE5Mjc6XFx0XFx0XFx0ICovXFxuMTkyODpcXHRcXHRcXHRnb3RvIG1heWJlX2luc3RhbGxfcG1kO1xcbjE5Mjk6XFx0XFx0ZGVmYXVsdDpcXG4xOTMwOlxcdFxcdFxcdGdvdG8gZHJvcF9mb2xpbztcXG4xOTMxOlxcdFxcdH1cXG4xOTMyOlxcdFxcbjE5MzM6XFx0XFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xcbjE5MzQ6XFx0XFx0c3RhcnRfcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCBoYWRkciwgXFx1MDAyNnB0bCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjM0OjIwLjc2MzE0Mjc3OFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzY1OTU1NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2g6IEEgRGVlcCBEaXZlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IG9mIHRoaXMgcGF0Y2guIEl0J3MgaW5qZWN0aW5nIGEgY2hlY2ssIGBpZiAodXNlcmZhdWx0ZmRfbWlub3Iodm1hKSkgcmV0dXJuIFNDQU5fUFRFX1VGRkQ7YCwgcmlnaHQgaW50byBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKClgLiBFc3NlbnRpYWxseSwgaXQncyBhIGd1YXJkOyBhIHNhZmV0eSBuZXQuIFRoZSBgdXNlcmZhdWx0ZmRfbWlub3Iodm1hKWAgY2hlY2sgYm9pbHMgZG93biB0byBpbnNwZWN0aW5nIGB2bWEtXHUwMDNldm1fZmxhZ3NgIGFuZCBzZWVpbmcgaWYgdGhlIGBWTV9VRkZEX01JTk9SYCBmbGFnIGlzIHNldC4gSWYgaXQgKmlzKiwgdGhlIGNvbGxhcHNlIG9mIFBURS1tYXBwZWQgVEhQcyB3aXRoaW4ga2h1Z2VwYWdlZCBpcyBzaG9ydC1jaXJjdWl0ZWQuIFRoZSBnb2FsIGlzIGNsZWFyOiBwcmV2ZW50IGtodWdlcGFnZWQgZnJvbSBjb2xsYXBzaW5nIFZNQXMgdGhhdCBhcmUgbWFuYWdlZCBieSB1c2VyZmF1bHRmZCBpbiBcIm1pbm9yIG1vZGUuXCIgVGhpcyBhdm9pZHMgYW55IHVzZXIgc3BhY2UgY29uZnVzaW9uLCBhcyB1c2VyIHNwYWNlIGV4cGVjdHMgdG8gaGFuZGxlIGl0cyBtaW5vciBmYXVsdHMgZXhwbGljaXRseS5cblxuTm93IGNvbWVzIHRoZSBjcnVjaWFsIHBhcnQ6IHRoZSBzYWZldHkgYXNzZXNzbWVudC4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBEb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXM/IExlYWtzPyBQYWRkaW5nIHByb2JsZW1zPyBSZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeT8gVGhlIGFuc3dlciwgYXMgSSBzZWUgaXQsIGlzIGEgcmVzb3VuZGluZyBcIm5vLlwiIFRoaXMgcGF0Y2ggaXMgcmVtYXJrYWJseSBjbGVhbi4gSXQncyBhIHNpbXBsZSwgdGFyZ2V0ZWQgZ3VhcmQuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGludm9sdmVkLiBUaGVyZSdzIG5vIGNvcHlpbmcgb2YgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2Ug4oCTIGEgY3JpdGljYWwgcG9pbnQuIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBpbmZsdWVuY2luZyBicmFuY2hpbmcgbG9naWMuIEl0J3Mgc29sZWx5IGZvY3VzZWQgb24gcHJldmVudGluZyB0aGUgY29sbGFwc2Ugb2YgUFRFcyB0byBQTURzIGZvciB0aG9zZSBzcGVjaWZpYyB1c2VyZmF1bHRmZC1taW5vciBWTUFzLlxuXG5MZXQncyBkbyBhIHJpZ29yb3VzIEtNU0FOIGNoZWNrIGZvciBnb29kIG1lYXN1cmUuIEknbSBnb2luZyB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYSBpbiBteSBoZWFkOlxuXG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBtaWdodCBiZSB1bmluaXRpYWxpemVkPyBOb3BlLCB0aGlzIGlzbid0IHNlbmRpbmcgYW55dGhpbmcuXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUsIGB2bWFgIGlzIGEgdmFsaWQgYHZtX2FyZWFfc3RydWN0YCBwb2ludGVyLCBhbmQgYHZtX2ZsYWdzYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC5cbjMuICBBbGxvY2F0aW9uIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI/IE5vcGUsIG5vIG5ldyBhbGxvY2F0aW9ucy5cbjQuICBCb3VuZHMgY2hlY2tzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIHJlYWRzPyBOb3BlLCB0aGlzIHBhdGNoIGRvZXNuJ3QgdG91Y2ggYW55IG9mIHRoYXQuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGNsZWFybHkgYGZhbHNlYC4gVGhpcyBpcyBhIGNsZWFuLCB3ZWxsLXNjb3BlZCBjaGFuZ2UuIEl0J3MgYWJvdXQgcHJvdGVjdGluZyBhIHNwZWNpZmljLCB3ZWxsLWRlZmluZWQgdXNlciBzcGFjZSBleHBlY3RhdGlvbiB3aXRoaW4gdGhlIHVzZXJmYXVsdGZkIGZyYW1ld29yay4gVGhlIGFic2VuY2Ugb2YgY29tcGxleCBtZW1vcnkgbWFuaXB1bGF0aW9uIG1ha2VzIGl0IGEgdmVyeSBsb3ctcmlzayBwYXRjaCBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZS4gVGhpcyBpcyBhIGdvb2Qgc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYzOSwiT3V0cHV0VG9rZW5zIjoyMjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozNDoyNy4xMjkxMDI1MzhaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYW4gZWFybHkgcmV0dXJuIGNoZWNrIChgdXNlcmZhdWx0ZmRfbWlub3Iodm1hKWApIGluIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKWAgdG8gcHJldmVudCBjb2xsYXBzaW5nIFBURS1tYXBwZWQgVEhQcyBmb3IgVk1BcyByZWdpc3RlcmVkIHdpdGggdXNlcmZhdWx0ZmQgbWlub3IgbW9kZS5cXG5cXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBjaGFuZ2Ugb25seSBjaGVja3MgZXhpc3RpbmcgVk1BIGZsYWdzIChgdm1hLVxcdTAwM2V2bV9mbGFnc2ApIGFuZCByZXR1cm5zIGFuIGVycm9yIGVudW0gdmFsdWUgKGBTQ0FOX1BURV9VRkZEYCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIG1vZGlmeSBzdHJ1Y3QgbGF5b3V0cy9wYWRkaW5nLCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy5cXG4tIEtBU0FOL2dlbmVyYWwgZGV0ZWN0b3IgYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IC8ga2h1Z2VwYWdlZCBsb2dpYy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBidWdzIGluIFZNQSBsaWZlY3ljbGUgLyBwYWdlIHRhYmxlIG1hbmFnZW1lbnQgd291bGQgZmFsbCB1bmRlciBzdGFuZGFyZCBtZW1vcnkgbWFuYWdlbWVudCBzZW1hbnRpY3MsIHBhZ2UgZmF1bHRzLCBvciBwb2ludGVyIHZhbGlkaXR5LCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RzLlxcblxcbkhlbmNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIGVhcmx5IHJldHVybiBjaGVjayAoYHVzZXJmYXVsdGZkX21pbm9yKHZtYSlgKSBpbiBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKClgIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIFRIUHMgZm9yIFZNQXMgcmVnaXN0ZXJlZCB3aXRoIHVzZXJmYXVsdGZkIG1pbm9yIG1vZGUuXFxuXFxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlIG9ubHkgY2hlY2tzIGV4aXN0aW5nIFZNQSBmbGFncyAoYHZtYS1cXHUwMDNldm1fZmxhZ3NgKSBhbmQgcmV0dXJucyBhbiBlcnJvciBlbnVtIHZhbHVlIChgU0NBTl9QVEVfVUZGRGApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBtb2RpZnkgc3RydWN0IGxheW91dHMvcGFkZGluZywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBib3VuZHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXFxuLSBLQVNBTi9nZW5lcmFsIGRldGVjdG9yIGFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCAvIGtodWdlcGFnZWQgbG9naWMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbiBWTUEgbGlmZWN5Y2xlIC8gcGFnZSB0YWJsZSBtYW5hZ2VtZW50IHdvdWxkIGZhbGwgdW5kZXIgc3RhbmRhcmQgbWVtb3J5IG1hbmFnZW1lbnQgc2VtYW50aWNzLCBwYWdlIGZhdWx0cywgb3IgcG9pbnRlciB2YWxpZGl0eSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0cy5cXG5cXG5IZW5jZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2lgms[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-28 22:30:49 +0000 UTC FinishedAt: 2026-08-28 22:34:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "26260251022fbc2f248a3d747a9b2b961b18d2d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "USERFAULTFD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "26260251022fbc2f248a3d747a9b2b961b18d2d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "USERFAULTFD" ], "series_id": "d29aa814-4d08-47da-ba8d-41efb6ffcfcf" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "madvise_collapse", "collapse_pte_mapped_thp" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFkdmlzZV9jb2xsYXBzZSYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9wdGVfbWFwcGVkX3RocCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gZWFybHkgcmV0dXJuIGNoZWNrIChgdXNlcmZhdWx0ZmRfbWlub3Iodm1hKWApIGluIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKWAgdG8gcHJldmVudCBjb2xsYXBzaW5nIFBURS1tYXBwZWQgVEhQcyBmb3IgVk1BcyByZWdpc3RlcmVkIHdpdGggdXNlcmZhdWx0ZmQgbWlub3IgbW9kZS5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlIG9ubHkgY2hlY2tzIGV4aXN0aW5nIFZNQSBmbGFncyAoYHZtYS1cdTAwM2V2bV9mbGFnc2ApIGFuZCByZXR1cm5zIGFuIGVycm9yIGVudW0gdmFsdWUgKGBTQ0FOX1BURV9VRkZEYCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIG1vZGlmeSBzdHJ1Y3QgbGF5b3V0cy9wYWRkaW5nLCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy5cbi0gS0FTQU4vZ2VuZXJhbCBkZXRlY3RvciBhcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgLyBraHVnZXBhZ2VkIGxvZ2ljLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW4gVk1BIGxpZmVjeWNsZSAvIHBhZ2UgdGFibGUgbWFuYWdlbWVudCB3b3VsZCBmYWxsIHVuZGVyIHN0YW5kYXJkIG1lbW9yeSBtYW5hZ2VtZW50IHNlbWFudGljcywgcGFnZSBmYXVsdHMsIG9yIHBvaW50ZXIgdmFsaWRpdHksIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdHMuXG5cbkhlbmNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIFRIUCBwYWdlcyB3aXRoaW4gVk1BcyByZWdpc3RlcmVkIHdpdGggdXNlcmZhdWx0ZmQgbWlub3IgZmF1bHQgaGFuZGxpbmcgKHVzZXJmYXVsdGZkX21pbm9yKS4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbGxhcHNlIGxvZ2ljIHJlYWNoYWJsZSB2aWEgbWFkdmlzZShNQURWX0NPTExBUFNFKSBvciBraHVnZXBhZ2VkIGJhY2tncm91bmQgc2Nhbm5pbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1M2NiYjNhM2I5MzhmNDE2NDM0OGQzNTkzODU0ZWJjMjc2MmM4YWFkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjggMjI6MzI6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0va2h1Z2VwYWdlZC5jIGIvbW0va2h1Z2VwYWdlZC5jXG5pbmRleCBiMjM3ZjZlNzY2MmE1Li4yMjM1NjIyOWMxZTQyIDEwMDY0NFxuLS0tIGEvbW0va2h1Z2VwYWdlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9raHVnZXBhZ2VkLmNcbkBAIC0xODk5LDYgJiM0MzsxODk5LDEzIEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduXG4gXHRpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSkpXG4gXHRcdHJldHVybiBTQ0FOX1BURV9VRkZEO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogVXNlcmZhdWx0ZmQtbWlub3ItcmVnaXN0ZXJlZCBWTUFzIHNob3VsZCBub3QgYmUgY29sbGFwc2VkLCBhc1xuJiM0MztcdCAqIHVzZXJzcGFjZSBpcyBleHBlY3RpbmcgdG8gZXhwbGljaXRseSBpbnN0YWxsIFBURXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHVzZXJmYXVsdGZkX21pbm9yKHZtYSkpXG4mIzQzO1x0XHRyZXR1cm4gU0NBTl9QVEVfVUZGRDtcbiYjNDM7XG4gXHRmb2xpbyA9IGZpbGVtYXBfbG9ja19mb2xpbyh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcsXG4gXHRcdFx0ICAgICAgIGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgaGFkZHIpKTtcbiBcdGlmIChJU19FUlIoZm9saW8pKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjMyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFkdmlzZV9jb2xsYXBzZSYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9wdGVfbWFwcGVkX3RocCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKCkgdG8gcHJldmVudCBjb2xsYXBzaW5nIFBURS1tYXBwZWQgVEhQIHBhZ2VzIHdpdGhpbiBWTUFzIHJlZ2lzdGVyZWQgd2l0aCB1c2VyZmF1bHRmZCBtaW5vciBmYXVsdCBoYW5kbGluZyAodXNlcmZhdWx0ZmRfbWlub3IpLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29sbGFwc2UgbG9naWMgcmVhY2hhYmxlIHZpYSBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpIG9yIGtodWdlcGFnZWQgYmFja2dyb3VuZCBzY2FubmluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUzY2JiM2EzYjkzOGY0MTY0MzQ4ZDM1OTM4NTRlYmMyNzYyYzhhYWQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyOCAyMjozMjo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2todWdlcGFnZWQuYyBiL21tL2todWdlcGFnZWQuYwppbmRleCBiMjM3ZjZlNzY2MmE1Li4yMjM1NjIyOWMxZTQyIDEwMDY0NAotLS0gYS9tbS9raHVnZXBhZ2VkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0va2h1Z2VwYWdlZC5jCkBAIC0xODk5LDYgJiM0MzsxODk5LDEzIEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduCiAJaWYgKHVzZXJmYXVsdGZkX3Byb3RlY3RlZCh2bWEpKQogCQlyZXR1cm4gU0NBTl9QVEVfVUZGRDsKIAomIzQzOwkvKgomIzQzOwkgKiBVc2VyZmF1bHRmZC1taW5vci1yZWdpc3RlcmVkIFZNQXMgc2hvdWxkIG5vdCBiZSBjb2xsYXBzZWQsIGFzCiYjNDM7CSAqIHVzZXJzcGFjZSBpcyBleHBlY3RpbmcgdG8gZXhwbGljaXRseSBpbnN0YWxsIFBURXMuCiYjNDM7CSAqLwomIzQzOwlpZiAodXNlcmZhdWx0ZmRfbWlub3Iodm1hKSkKJiM0MzsJCXJldHVybiBTQ0FOX1BURV9VRkZEOwomIzQzOwogCWZvbGlvID0gZmlsZW1hcF9sb2NrX2ZvbGlvKHZtYS0mZ3Q7dm1fZmlsZS0mZ3Q7Zl9tYXBwaW5nLAogCQkJICAgICAgIGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgaGFkZHIpKTsKIAlpZiAoSVNfRVJSKGZvbGlvKSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLSFVHRVBBR0VEIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgY2hhbmdlIHdpdGhpbiBgbW0va2h1Z2VwYWdlZC5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgbW9kaWZpY2F0aW9uIGlzIGZvY3VzZWQgb24gdGhlIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGZ1bmN0aW9uLiBUaGUgY29kZSBzbmlwcGV0IGZsYWdzIGEgY2hlY2sgZm9yIGB1c2VyZmF1bHRmZF9taW5vcih2bWEpYCBhbmQsIGlmIHRydWUsIHJldHVybnMgYFNDQU5fUFRFX1VGRkRgLiBJbnRlcmVzdGluZy4gSXQgc2VlbXMgd2UmIzM5O3JlIHByZXZlbnRpbmcgVEhQIGNvbGxhcHNlIGluIGNlcnRhaW4gc2l0dWF0aW9ucy4gTXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gaG93IHVzZXJmYXVsdGZkIGludGVyYWN0cyB3aXRoIHRoZSB0cmFuc3BhcmVudCBodWdlIHBhZ2UgbWVjaGFuaXNtLiBVc2VyZmF1bHRmZHMsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgZ2l2ZSB1c2Vyc3BhY2UgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciBwYWdlIGZhdWx0cyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuCgpUbyBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaXMsIEkgbmVlZCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFRpbWUgdG8gcHVsbCB1cCBgbW0va2h1Z2VwYWdlZC5jYC4gTGV0JiMzOTtzIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgZnVuY3Rpb24gYW5kIGl0cyBzdXJyb3VuZGluZyBjYWxscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW1wbGljYXRpb25zIGhlcmUsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHRoZSBpbnRlcmFjdGlvbiBvZiB1c2VyZmF1bHRmZCwga2h1Z2VwYWdlZCwgYW5kIFBURSBtYW5pcHVsYXRpb24uIEkgc3VzcGVjdCB0aGF0IGNvbGxhcHNpbmcgdGhlIFRIUCBtaWdodCBpbnRlcmZlcmUgd2l0aCB1c2VyZmF1bHRmZCYjMzk7cyBleHBsaWNpdCBQVEUgaW5zdGFsbGF0aW9uIGV4cGVjdGF0aW9ucy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCB0cmFkZS1vZmZzIGFuZCBiZW5lZml0cyBvZiB0aGlzIGNoYW5nZT8gTGV0JiMzOTtzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4ODA6XHRcdC8qIEZhc3QgY2hlY2sgYmVmb3JlIGxvY2tpbmcgcGFnZSBpZiBhbHJlYWR5IFBNRC1tYXBwZWQgKi9cbjE4ODE6XHRcdHJlc3VsdCA9IGZpbmRfcG1kX29yX3RocF9vcl9ub25lKG1tLCBoYWRkciwgXHUwMDI2cG1kKTtcbjE4ODI6XHRcdGlmIChyZXN1bHQgPT0gU0NBTl9QTURfTUFQUEVEKVxuMTg4MzpcdFx0XHRyZXR1cm4gcmVzdWx0O1xuMTg4NDpcdFxuMTg4NTpcdFx0LypcbjE4ODY6XHRcdCAqIElmIHdlIGFyZSBoZXJlLCB3ZSYjMzk7dmUgc3VjY2VlZGVkIGluIHJlcGxhY2luZyBhbGwgdGhlIG5hdGl2ZSBwYWdlc1xuMTg4NzpcdFx0ICogaW4gdGhlIHBhZ2UgY2FjaGUgd2l0aCBhIHNpbmdsZSBodWdlcGFnZS4gSWYgYSBtbSB3ZXJlIHRvIGZhdWx0LWluXG4xODg4Olx0XHQgKiB0aGlzIG1lbW9yeSAobWFwcGVkIGJ5IGEgc3VpdGFibHkgYWxpZ25lZCBWTUEpLCB3ZSYjMzk7ZCBnZXQgdGhlIGh1Z2VwYWdlXG4xODg5Olx0XHQgKiBhbmQgbWFwIGl0IGJ5IGEgUE1ELCByZWdhcmRsZXNzIG9mIHN5c2ZzIFRIUCBzZXR0aW5ncy4gQXMgc3VjaCwgbGV0JiMzOTtzXG4xODkwOlx0XHQgKiBhbmFsb2dvdXNseSBlbGlkZSBzeXNmcyBUSFAgc2V0dGluZ3MgaGVyZSBhbmQgZm9yY2UgY29sbGFwc2UuXG4xODkxOlx0XHQgKi9cbjE4OTI6XHRcdGlmICghdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXIodm1hLCB2bWEtXHUwMDNldm1fZmxhZ3MsIFRWQV9GT1JDRURfQ09MTEFQU0UsIFBNRF9PUkRFUikpXG4xODkzOlx0XHRcdHJldHVybiBTQ0FOX1ZNQV9DSEVDSztcbjE4OTQ6XHRcbjE4OTU6XHRcdC8qXG4xODk2Olx0XHQgKiBLZWVwIHBtZCBwZ3RhYmxlIHdoaWxlIHRoZSB1ZmZkIGJpdCBpcyBpbiB1c2U7IHNlZSBjb21tZW50IGluXG4xODk3Olx0XHQgKiByZXRyYWN0X3BhZ2VfdGFibGVzKCkuXG4xODk4Olx0XHQgKi9cbjE4OTk6XHRcdGlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSlcbjE5MDA6XHRcdFx0cmV0dXJuIFNDQU5fUFRFX1VGRkQ7XG4xOTAxOlx0XG4xOTAyOlx0XHQvKlxuMTkwMzpcdFx0ICogVXNlcmZhdWx0ZmQtbWlub3ItcmVnaXN0ZXJlZCBWTUFzIHNob3VsZCBub3QgYmUgY29sbGFwc2VkLCBhc1xuMTkwNDpcdFx0ICogdXNlcnNwYWNlIGlzIGV4cGVjdGluZyB0byBleHBsaWNpdGx5IGluc3RhbGwgUFRFcy5cbjE5MDU6XHRcdCAqL1xuMTkwNjpcdFx0aWYgKHVzZXJmYXVsdGZkX21pbm9yKHZtYSkpXG4xOTA3Olx0XHRcdHJldHVybiBTQ0FOX1BURV9VRkZEO1xuMTkwODpcdFxuMTkwOTpcdFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8odm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nLFxuMTkxMDpcdFx0XHRcdCAgICAgICBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGhhZGRyKSk7XG4xOTExOlx0XHRpZiAoSVNfRVJSKGZvbGlvKSlcbjE5MTI6XHRcdFx0cmV0dXJuIFNDQU5fUEFHRV9OVUxMO1xuMTkxMzpcdFxuMTkxNDpcdFx0aWYgKCFpc19wbWRfb3JkZXIoZm9saW9fb3JkZXIoZm9saW8pKSkge1xuMTkxNTpcdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfQ09NUE9VTkQ7XG4xOTE2Olx0XHRcdGdvdG8gZHJvcF9mb2xpbztcbjE5MTc6XHRcdH1cbjE5MTg6XHRcbjE5MTk6XHRcdHJlc3VsdCA9IGZpbmRfcG1kX29yX3RocF9vcl9ub25lKG1tLCBoYWRkciwgXHUwMDI2cG1kKTtcbjE5MjA6XHRcdHN3aXRjaCAocmVzdWx0KSB7XG4xOTIxOlx0XHRjYXNlIFNDQU5fU1VDQ0VFRDpcbjE5MjI6XHRcdFx0YnJlYWs7XG4xOTIzOlx0XHRjYXNlIFNDQU5fTk9fUFRFX1RBQkxFOlxuMTkyNDpcdFx0XHQvKlxuMTkyNTpcdFx0XHQgKiBBbGwgcHRlIGVudHJpZXMgaGF2ZSBiZWVuIHJlbW92ZWQgYW5kIHBtZCBjbGVhcmVkLlxuMTkyNjpcdFx0XHQgKiBTa2lwIGFsbCB0aGUgcHRlIGNoZWNrcyBhbmQganVzdCB1cGRhdGUgdGhlIHBtZCBtYXBwaW5nLlxuMTkyNzpcdFx0XHQgKi9cbjE5Mjg6XHRcdFx0Z290byBtYXliZV9pbnN0YWxsX3BtZDtcbjE5Mjk6XHRcdGRlZmF1bHQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ0NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkh1bnRpbmcgRG93biBUaG9zZSBUSFAgQ29sbGFwc2luZyBDYWxsZXJzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLCBhbmQgbWF5YmUgZXZlbiB0aGUga2h1Z2VwYWdlZCBjYWxscyBhcmUgY29taW5nIGZyb20uIFRoZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIFRIUCBjb2xsYXBzaW5nIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCBpbiB0aGUgY29kZS4gSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGZvciB0aGUgZGlyZWN0IGNhbGxlcnMuIExldCYjMzk7cyBnZXQgcmlnaHQgdG8gaXQgLSBJJiMzOTtsbCBydW4gYSBzZWFyY2ggZm9yIHRoZSBjYWxsIHNpdGVzIG9mIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGFuZCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIHRvIGJ1aWxkIGEgbGlzdCBvZiBhbGwgbG9jYXRpb25zIHVzaW5nIHRob3NlIGZ1bmN0aW9ucy4gS25vd2luZyB0aGVpciBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSBhbiBpZGVhIGFib3V0IGhvdyBhbmQgd2hlcmUgdGhleSBhcmUgYmVpbmcgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jPTE4MjA9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgc2V0X2h1Z2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTE4NTUtXG5tbS9raHVnZXBhZ2VkLmM6MTg1NjpzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2todWdlcGFnZWQuYy0xODU3LVx0XHRib29sIGluc3RhbGxfcG1kKVxuLS1cbm1tL2todWdlcGFnZWQuYz0yMTAxPXZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjEwMy17XG5tbS9raHVnZXBhZ2VkLmM6MjEwNDpcdHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChtbSwgYWRkciwgaW5zdGFsbF9wbWQpO1xubW0va2h1Z2VwYWdlZC5jLTIxMDUtfVxuLS1cbm1tL2todWdlcGFnZWQuYz0yMjU0PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjYzMy1cdCAqIFJlbW92ZSBwdGUgcGFnZSB0YWJsZXMsIHNvIHdlIGNhbiByZS1mYXVsdCB0aGUgcGFnZSBhcyBodWdlLlxubW0va2h1Z2VwYWdlZC5jOjI2MzQ6XHQgKiBJZiBNQURWX0NPTExBUFNFLCBhZGp1c3QgcmVzdWx0IHRvIGNhbGwgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKCkuXG5tbS9raHVnZXBhZ2VkLmMtMjYzNS1cdCAqL1xuLS1cbm1tL2todWdlcGFnZWQuYz0yNzk3PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NpbmdsZV9wbWQodW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yODQxLVx0XHRlbHNlXG5tbS9raHVnZXBhZ2VkLmM6Mjg0MjpcdFx0XHRyZXN1bHQgPSB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIGFkZHIsXG5tbS9raHVnZXBhZ2VkLmMtMjg0My1cdFx0XHRcdFx0XHRcdCAgICAgIWNjLVx1MDAzZWlzX2todWdlcGFnZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxOTQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKlRyYWNpbmcgdGhlIENvbGxhcHNlIG9mIEh1Z2UgUGFnZXMqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZG9pbmcgaXMgbWVudGFsbHkgdHJhY2luZyB0aGUgY2FsbHMgdG8gYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB0aGUgZnVuY3Rpb24gd2hlcmUgdGhlIGFjdHVhbCBoZWF2eSBsaWZ0aW5nIGhhcHBlbnMgd2hlbiB3ZSYjMzk7cmUgYnJlYWtpbmcgZG93biBhIGh1Z2UgcGFnZSB0aGF0JiMzOTtzIGJlZW4gbWFwcGVkIHZpYSBQVEVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzLCB0aGUgZGlmZmVyZW50IGNvbnRleHRzIGluIHdoaWNoIHRoaXMgZnVuY3Rpb24gZ2V0cyBpbnZva2VkLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHVzZXItdHJpZ2dlcmVkIGRlZnJhZywgYSBiYWNrZ3JvdW5kIGtlcm5lbCBvcGVyYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBLbm93aW5nIHRoZSBjYWxsZXIgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgKndoeSogdGhlIGNvbGxhcHNlIGlzIGhhcHBlbmluZywgYW5kIHRoZXJlZm9yZSBmb3IgZGlhZ25vc2luZyBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgcmVsYXRlZCB0byBpdC4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZGlmZmVyZW50IGNvZGUgcGF0aHMgYW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHdoYXQgY29udGV4dCBpcyBwYXNzZWQgaW4sIHdoYXQgbG9ja3MgYXJlIGhlbGQsIGlmIGFueSwgYW5kIHdoYXQgYXNzdW1wdGlvbnMgdGhlIGNhbGxpbmcgY29kZSBpcyBtYWtpbmcgYWJvdXQgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCYjMzk7cyBiZWhhdmlvci4gSSBuZWVkIHRvIG1hcCB0aGUgY2F1c2FsIGNoYWluIHRvIGJlIGFibGUgdG8gcmVhc29uIGFib3V0IHBvc3NpYmxlIGZhaWx1cmUgbW9kZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29sbGFwc2VfcHRlX21hcHBlZF90aHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jPTE4MjA9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgc2V0X2h1Z2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTE4NTUtXG5tbS9raHVnZXBhZ2VkLmM6MTg1NjpzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2todWdlcGFnZWQuYy0xODU3LVx0XHRib29sIGluc3RhbGxfcG1kKVxuLS1cbm1tL2todWdlcGFnZWQuYy0yMDg5LS8qKlxubW0va2h1Z2VwYWdlZC5jOjIwOTA6ICogY29sbGFwc2VfcHRlX21hcHBlZF90aHAgLSBUcnkgdG8gY29sbGFwc2UgYSBwdGUtbWFwcGVkIFRIUCBmb3IgbW0gYXRcbm1tL2todWdlcGFnZWQuYy0yMDkxLSAqIGFkZHJlc3MgaGFkZHIuXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIxMDAtICovXG5tbS9raHVnZXBhZ2VkLmM6MjEwMTp2b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9raHVnZXBhZ2VkLmMtMjEwMi1cdFx0Ym9vbCBpbnN0YWxsX3BtZClcbm1tL2todWdlcGFnZWQuYy0yMTAzLXtcbm1tL2todWdlcGFnZWQuYzoyMTA0Olx0dHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLCBpbnN0YWxsX3BtZCk7XG5tbS9raHVnZXBhZ2VkLmMtMjEwNS19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTIyNTQ9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yNjMzLVx0ICogUmVtb3ZlIHB0ZSBwYWdlIHRhYmxlcywgc28gd2UgY2FuIHJlLWZhdWx0IHRoZSBwYWdlIGFzIGh1Z2UuXG5tbS9raHVnZXBhZ2VkLmM6MjYzNDpcdCAqIElmIE1BRFZfQ09MTEFQU0UsIGFkanVzdCByZXN1bHQgdG8gY2FsbCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKS5cbm1tL2todWdlcGFnZWQuYy0yNjM1LVx0ICovXG4tLVxubW0va2h1Z2VwYWdlZC5jPTI3OTc9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI4NDEtXHRcdGVsc2Vcbm1tL2todWdlcGFnZWQuYzoyODQyOlx0XHRcdHJlc3VsdCA9IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChtbSwgYWRkcixcbm1tL2todWdlcGFnZWQuYy0yODQzLVx0XHRcdFx0XHRcdFx0ICAgICAhY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA3MgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLiBUaW1lIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gYW5kIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gYXQgdGhlIGNvcmUuIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBwaW5wb2ludGluZyB0aGUgY2FsbGVycyB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkLCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMsIGFuZCB3aGF0IHRoYXQgdGVsbHMgbWUgYWJvdXQgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kgaGVyZS4gS25vd2luZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGltbWVkaWF0ZWx5IGdpdmUgbWUgY29udGV4dCwgYW5kIGhlbHAgbWUgcmVhc29uIGFib3V0IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgcmFjZSBjb25kaXRpb25zLCBvciBhcmVhcyByaXBlIGZvciBvcHRpbWl6YXRpb24uIEkmIzM5O20gdGhpbmtpbmcgSSBjYW4gc3RhcnQgYnkuLi4gd2VsbCwgSSBrbm93IHRoZXJlIGFyZSBwbGVudHkgb2YgYXBwcm9hY2hlcyBJIGNvdWxkIHVzZSwgc28gbGV0IG1lIGdldCBnb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29sbGFwc2VfcHRlX21hcHBlZF90aHAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg9MTk9ZXh0ZXJuIGJvb2wgY3VycmVudF9pc19raHVnZXBhZ2VkKHZvaWQpO1xuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg6MjA6dm9pZCBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtMjEtXHRcdGJvb2wgaW5zdGFsbF9wbWQpO1xuLS1cbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oPTQxPXN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC00NC19XG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaDo0NTpzdGF0aWMgaW5saW5lIHZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC00Ni1cdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGluc3RhbGxfcG1kKVxuLS1cbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jPTQ5OT1pbnQgdXByb2JlX3dyaXRlKHN0cnVjdCBhcmNoX3Vwcm9iZSAqYXVwcm9iZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxua2VybmVsL2V2ZW50cy91cHJvYmVzLmMtNTk5LVx0aWYgKHJldCBcdTAwM2UgMClcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jOjYwMDpcdFx0Y29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIHZhZGRyLCBmYWxzZSk7XG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYy02MDEtXG4tLVxubW0va2h1Z2VwYWdlZC5jPTE4MjA9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgc2V0X2h1Z2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTE4NTUtXG5tbS9raHVnZXBhZ2VkLmM6MTg1NjpzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2todWdlcGFnZWQuYy0xODU3LVx0XHRib29sIGluc3RhbGxfcG1kKVxuLS1cbm1tL2todWdlcGFnZWQuYy0yMDg5LS8qKlxubW0va2h1Z2VwYWdlZC5jOjIwOTA6ICogY29sbGFwc2VfcHRlX21hcHBlZF90aHAgLSBUcnkgdG8gY29sbGFwc2UgYSBwdGUtbWFwcGVkIFRIUCBmb3IgbW0gYXRcbm1tL2todWdlcGFnZWQuYy0yMDkxLSAqIGFkZHJlc3MgaGFkZHIuXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIxMDAtICovXG5tbS9raHVnZXBhZ2VkLmM6MjEwMTp2b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9raHVnZXBhZ2VkLmMtMjEwMi1cdFx0Ym9vbCBpbnN0YWxsX3BtZClcbm1tL2todWdlcGFnZWQuYy0yMTAzLXtcbm1tL2todWdlcGFnZWQuYzoyMTA0Olx0dHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLCBpbnN0YWxsX3BtZCk7XG5tbS9raHVnZXBhZ2VkLmMtMjEwNS19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTIyNTQ9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yNjMzLVx0ICogUmVtb3ZlIHB0ZSBwYWdlIHRhYmxlcywgc28gd2UgY2FuIHJlLWZhdWx0IHRoZSBwYWdlIGFzIGh1Z2UuXG5tbS9raHVnZXBhZ2VkLmM6MjYzNDpcdCAqIElmIE1BRFZfQ09MTEFQU0UsIGFkanVzdCByZXN1bHQgdG8gY2FsbCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKS5cbm1tL2todWdlcGFnZWQuYy0yNjM1LVx0ICovXG4tLVxubW0va2h1Z2VwYWdlZC5jPTI3OTc9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI4NDEtXHRcdGVsc2Vcbm1tL2todWdlcGFnZWQuYzoyODQyOlx0XHRcdHJlc3VsdCA9IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChtbSwgYWRkcixcbm1tL2todWdlcGFnZWQuYy0yODQzLVx0XHRcdFx0XHRcdFx0ICAgICAhY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIENhbGxzIGluIGBtbS9raHVnZXBhZ2VkLmNgKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGtodWdlcGFnZWQgY29kZSBhZ2Fpbi4gVGltZSB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGNvbnRleHQgZm9yIGBjb2xsYXBzZV9zaW5nbGVfcG1kYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoZW4qIGFuZCAqd2h5KiB0aGlzIGZ1bmN0aW9uIGdldHMgaW52b2tlZC4gVGhpcyB0ZWxscyBtZSBhIGxvdCBhYm91dCBob3cgdGhlIGtlcm5lbCBpcyBoYW5kbGluZyBwYWdlIG1lcmdlcyBhbmQgc3BsaXRzIHVuZGVyIGh1Z2VwYWdlcy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgcHJlZmVycmVkIGRlYnVnZ2luZyB0b29scywgbGlrZWx5IGEgY29tYmluYXRpb24gb2YgYHRyYWNlcG9pbnRzYCwgYGZ0cmFjZWAsIGFuZCBwb3RlbnRpYWxseSBhIGJpdCBvZiBzdGF0aWMgYW5hbHlzaXMgd2l0aCBzb21ldGhpbmcgbGlrZSBgY3Njb3BlYCBvciBgY2xhbmdkYCB0byBuYXZpZ2F0ZSB0aGUgY29kZSBlZmZpY2llbnRseS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgaW1tZWRpYXRlIGNhbGxlcnMgYW5kIGZyb20gdGhlcmUgSSB3aWxsIHRoZW4gZGV0ZXJtaW5lIHRoZSBjb250ZXh0IHdoaWNoIGNhbGxzIHRob3NlIGNhbGxlcnMuIFVsdGltYXRlbHksIHdoYXQgaXMgdGhlIHNlcXVlbmNlIG9mIGV2ZW50cyB0aGF0IHRyaWdnZXJzIGEgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIGNhbGw/IElzIGl0IHJlbGF0ZWQgdG8gZnJhZ21lbnRhdGlvbiwgbWVtb3J5IHByZXNzdXJlLCBOVU1BIGludGVyYWN0aW9ucywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgc29saWQgdW5kZXJzdGFuZGluZyBoZXJlIGlzIGNyaXRpY2FsIGZvciBkaWFnbm9zaW5nIHBlcmZvcm1hbmNlIGlzc3VlcyByZWxhdGVkIHRvIHRyYW5zcGFyZW50IGh1Z2VwYWdlcywgYW5kIG9wdGltaXppbmcgbXkgb3duIHNwZWNpZmljIHdvcmtsb2Fkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3OTU6XHQgKiB0aGUgcmVzdWx0cy5cbjI3OTY6XHQgKi9cbjI3OTc6XHRzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zaW5nbGVfcG1kKHVuc2lnbmVkIGxvbmcgYWRkcixcbjI3OTg6XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGJvb2wgKmxvY2tfZHJvcHBlZCxcbjI3OTk6XHRcdFx0c3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxuMjgwMDpcdHtcbjI4MDE6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVx1MDAzZXZtX21tO1xuMjgwMjpcdFx0Ym9vbCB0cmlnZ2VyZWRfd2IgPSBmYWxzZTtcbjI4MDM6XHRcdGVudW0gc2Nhbl9yZXN1bHQgcmVzdWx0O1xuMjgwNDpcdFx0c3RydWN0IGZpbGUgKmZpbGU7XG4yODA1Olx0XHRwZ29mZl90IHBnb2ZmO1xuMjgwNjpcdFxuMjgwNzpcdFx0bW1hcF9hc3NlcnRfbG9ja2VkKG1tKTtcbjI4MDg6XHRcbjI4MDk6XHRcdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkpIHtcbjI4MTA6XHRcdFx0cmVzdWx0ID0gY29sbGFwc2Vfc2Nhbl9wbWQobW0sIHZtYSwgYWRkciwgbG9ja19kcm9wcGVkLCBjYyk7XG4yODExOlx0XHRcdGdvdG8gZW5kO1xuMjgxMjpcdFx0fVxuMjgxMzpcdFxuMjgxNDpcdFx0ZmlsZSA9IGdldF9maWxlKHZtYS1cdTAwM2V2bV9maWxlKTtcbjI4MTU6XHRcdHBnb2ZmID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyKTtcbjI4MTY6XHRcbjI4MTc6XHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuMjgxODpcdFx0KmxvY2tfZHJvcHBlZCA9IHRydWU7XG4yODE5Olx0cmV0cnk6XG4yODIwOlx0XHRyZXN1bHQgPSBjb2xsYXBzZV9zY2FuX2ZpbGUobW0sIGFkZHIsIGZpbGUsIHBnb2ZmLCBjYyk7XG4yODIxOlx0XG4yODIyOlx0XHQvKlxuMjgyMzpcdFx0ICogRm9yIE1BRFZfQ09MTEFQU0UsIHdoZW4gZW5jb3VudGVyaW5nIGRpcnR5IHBhZ2VzLCB0cnkgdG8gd3JpdGViYWNrLFxuMjgyNDpcdFx0ICogdGhlbiByZXRyeSB0aGUgY29sbGFwc2Ugb25lIHRpbWUuXG4yODI1Olx0XHQgKi9cbjI4MjY6XHRcdGlmICghY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCBcdTAwMjZcdTAwMjYgcmVzdWx0ID09IFNDQU5fUEFHRV9ESVJUWV9PUl9XUklURUJBQ0sgXHUwMDI2XHUwMDI2XG4yODI3Olx0XHQgICAgIXRyaWdnZXJlZF93YiBcdTAwMjZcdTAwMjYgbWFwcGluZ19jYW5fd3JpdGViYWNrKGZpbGUtXHUwMDNlZl9tYXBwaW5nKSkge1xuMjgyODpcdFx0XHRjb25zdCBsb2ZmX3QgbHN0YXJ0ID0gKGxvZmZfdClwZ29mZiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbjI4Mjk6XHRcdFx0Y29uc3QgbG9mZl90IGxlbmQgPSBsc3RhcnQgJiM0MzsgSFBBR0VfUE1EX1NJWkUgLSAxO1xuMjgzMDpcdFxuMjgzMTpcdFx0XHRmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUtXHUwMDNlZl9tYXBwaW5nLCBsc3RhcnQsIGxlbmQpO1xuMjgzMjpcdFx0XHR0cmlnZ2VyZWRfd2IgPSB0cnVlO1xuMjgzMzpcdFx0XHRnb3RvIHJldHJ5O1xuMjgzNDpcdFx0fVxuMjgzNTpcdFx0ZnB1dChmaWxlKTtcbjI4MzY6XHRcbjI4Mzc6XHRcdGlmIChyZXN1bHQgPT0gU0NBTl9QVEVfTUFQUEVEX0hVR0VQQUdFKSB7XG4yODM4Olx0XHRcdG1tYXBfcmVhZF9sb2NrKG1tKTtcbjI4Mzk6XHRcdFx0aWYgKGNvbGxhcHNlX3Rlc3RfZXhpdF9vcl9kaXNhYmxlKG1tKSlcbjI4NDA6XHRcdFx0XHRyZXN1bHQgPSBTQ0FOX0FOWV9QUk9DRVNTO1xuMjg0MTpcdFx0XHRlbHNlXG4yODQyOlx0XHRcdFx0cmVzdWx0ID0gdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLFxuMjg0MzpcdFx0XHRcdFx0XHRcdFx0ICAgICAhY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCk7XG4yODQ0Olx0XHRcdGlmIChyZXN1bHQgPT0gU0NBTl9QTURfTUFQUEVEKVxuMjg0NTpcdFx0XHRcdHJlc3VsdCA9IFNDQU5fU1VDQ0VFRDtcbjI4NDY6XHRcdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4yODQ3Olx0XHR9XG4yODQ4Olx0ZW5kOlxuMjg0OTpcdFx0aWYgKGNjLVx1MDAzZWlzX2todWdlcGFnZWQgXHUwMDI2XHUwMDI2IHJlc3VsdCA9PSBTQ0FOX1NVQ0NFRUQpXG4yODUwOlx0XHRcdCYjNDM7JiM0MztraHVnZXBhZ2VkX3BhZ2VzX2NvbGxhcHNlZDtcbjI4NTE6XHRcdHJldHVybiByZXN1bHQ7XG4yODUyOlx0fVxuMjg1MzpcdFxuMjg1NDpcdHN0YXRpYyB2b2lkIGNvbGxhcHNlX3NjYW5fbW1fc2xvdCh1bnNpZ25lZCBpbnQgcHJvZ3Jlc3NfbWF4LFxuMjg1NTpcdFx0XHRlbnVtIHNjYW5fcmVzdWx0ICpyZXN1bHQsIHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYylcbjI4NTY6XHRcdF9fcmVsZWFzZXMoXHUwMDI2a2h1Z2VwYWdlZF9tbV9sb2NrKVxuMjg1NzpcdFx0X19hY3F1aXJlcyhcdTAwMjZraHVnZXBhZ2VkX21tX2xvY2spXG4yODU4Olx0e1xuMjg1OTpcdFx0c3RydWN0IHZtYV9pdGVyYXRvciB2bWk7XG4yODYwOlx0XHRzdHJ1Y3QgbW1fc2xvdCAqc2xvdDtcbjI4NjE6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuMjg2MjpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4yODYzOlx0XHR1bnNpZ25lZCBpbnQgcHJvZ3Jlc3NfcHJldiA9IGNjLVx1MDAzZXByb2dyZXNzO1xuMjg2NDpcdFxuMjg2NTpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZraHVnZXBhZ2VkX21tX2xvY2spO1xuMjg2NjpcdFx0KnJlc3VsdCA9IFNDQU5fRkFJTDtcbjI4Njc6XHRcbjI4Njg6XHRcdGlmIChraHVnZXBhZ2VkX3NjYW4ubW1fc2xvdCkge1xuMjg2OTpcdFx0XHRzbG90ID0ga2h1Z2VwYWdlZF9zY2FuLm1tX3Nsb3Q7XG4yODcwOlx0XHR9IGVsc2Uge1xuMjg3MTpcdFx0XHRzbG90ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZraHVnZXBhZ2VkX3NjYW4ubW1faGVhZCxcbjI4NzI6XHRcdFx0XHRcdCAgICAgc3RydWN0IG1tX3Nsb3QsIG1tX25vZGUpO1xuMjg3MzpcdFx0XHRraHVnZXBhZ2VkX3NjYW4uYWRkcmVzcyA9IDA7XG4yODc0Olx0XHRcdGtodWdlcGFnZWRfc2Nhbi5tbV9zbG90ID0gc2xvdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc3OQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgTUFEVl9DT0xMQVBTRWAqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJJiMzOTttIHdvbmRlcmluZyBhYm91dCB0aGUgYmVoYXZpb3Igb2YgYE1BRFZfQ09MTEFQU0VgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgc2VhcmNoIGZvciBgTUFEVl9DT0xMQVBTRWAuIEkmIzM5O2xsIG5lZWQgdG8gcmV2aWV3IHRoZSBzb3VyY2UgY29kZSwgbWF5YmUgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIG9yIG1hbiBwYWdlcyB0byB1bmRlcnN0YW5kIGl0cyBwcmVjaXNlIGZ1bmN0aW9uIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvbiB3aGF0IHRoaXMgc3lzdGVtIGNhbGwgKmFjdHVhbGx5KiBkb2VzIHVuZGVyIHRoZSBob29kLiBJIGV4cGVjdCB0byBkZWx2ZSBpbnRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSB0YWJsZSBzdHJ1Y3R1cmVzIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBtZWNoYW5pc21zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNQURWX0NPTExBUFNFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdD0xMjE9Zm9yIHdoaWNoIHZhcnkgYnkgc3lzdGVtLlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0xMjQtICAgICAgICAgIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgZ2xvYmFsbHkuIFRoaXMgaXMgYmVjYXVzZSBgYG1hZHZpc2UoLi4uLFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0OjEyNTogICAgICAgICAgTUFEVl9DT0xMQVBTRSlgYCBpZ25vcmVzIHRoZXNlIHNldHRpbmdzIGFuZCBjb2xsYXBzZXMgcmFuZ2VzIHRvXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMTI2LSAgICAgICAgICBQTUQtc2l6ZWQgaHVnZSBwYWdlcyB1bmNvbmRpdGlvbmFsbHkuXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0PTE5NT1uZXZlclxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0LTE5Ni1cdHNob3VsZCBiZSBzZWxmLWV4cGxhbmF0b3J5LiBOb3RlIHRoYXQgYGBtYWR2aXNlKC4uLixcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdDoxOTc6XHRNQURWX0NPTExBUFNFKWBgIGNhbiBzdGlsbCBjYXVzZSB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIHRvIGJlXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMTk4LVx0b2J0YWluZWQgZXZlbiBpZiB0aGlzIG1vZGUgaXMgc3BlY2lmaWVkIGV2ZXJ5d2hlcmUuXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0PTIzNT1zdXBwb3J0IHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzOjpcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMjM4LVx0XHRUaGlzIHdpbGwgZGlzYWJsZSBUSFBzIGNvbXBsZXRlbHkgZm9yIHRoZSBwcm9jZXNzLCBpcnJlc3BlY3RpdmVcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdDoyMzk6XHRcdG9mIGdsb2JhbCBUSFAgY29udHJvbHMgb3IgbWFkdmlzZSguLi4sIE1BRFZfQ09MTEFQU0UpIGJlaW5nIHVzZWQuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMjQwLVxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0yNDQtXHRcdC0gR2xvYmFsIFRIUCBjb250cm9scyBhcmUgc2V0IHRvIFwmIzM0O2Fsd2F5c1wmIzM0OyBvciBcJiMzNDttYWR2aXNlXCYjMzQ7IGFuZFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0OjI0NTpcdFx0ICBtYWR2aXNlKC4uLiwgTUFEVl9IVUdFUEFHRSkgb3IgbWFkdmlzZSguLi4sIE1BRFZfQ09MTEFQU0UpIGlzIHVzZWQuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q6MjQ2Olx0XHQtIEdsb2JhbCBUSFAgY29udHJvbHMgYXJlIHNldCB0byBcJiMzNDtuZXZlclwmIzM0OyBhbmQgbWFkdmlzZSguLi4sIE1BRFZfQ09MTEFQU0UpXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMjQ3LVx0XHQgIGlzIHVzZWQuIFRoaXMgaXMgdGhlIHNhbWUgYmVoYXZpb3IgYXMgaWYgVEhQcyB3b3VsZCBub3QgYmUgZGlzYWJsZWQgb25cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0yNDgtXHRcdCAgYSBwcm9jZXNzIGxldmVsLlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0OjI0OTpcdFx0Tm90ZSB0aGF0IE1BRFZfQ09MTEFQU0UgaXMgY3VycmVudGx5IGFsd2F5cyByZWplY3RlZCBpZlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0LTI1MC1cdFx0bWFkdmlzZSguLi4sIE1BRFZfTk9IVUdFUEFHRSkgaXMgc2V0IG9uIGFuIGFyZWEuXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0PTQ0NT1uZXZlclxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0OjQ0NjogICAgRG8gbm90IGFsbG9jYXRlIGh1Z2UgcGFnZXMuIE5vdGUgdGhhdCBgYG1hZHZpc2UoLi4uLCBNQURWX0NPTExBUFNFKWBgXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtNDQ3LSAgICBjYW4gc3RpbGwgY2F1c2UgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyB0byBiZSBvYnRhaW5lZCBldmVuIGlmIHRoaXMgbW9kZVxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdD01MDU9bmV2ZXJcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC01MDYtICAgIERvIG5vdCBhbGxvY2F0ZSBcdTAwM2NzaXplXHUwMDNlIGh1Z2UgcGFnZXMuIE5vdGUgdGhhdCBgYG1hZHZpc2UoLi4uLFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0OjUwNzogICAgTUFEVl9DT0xMQVBTRSlgYCBjYW4gc3RpbGwgY2F1c2UgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyB0byBiZSBvYnRhaW5lZFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0LTUwOC0gICAgZXZlbiBpZiB0aGlzIG1vZGUgaXMgc3BlY2lmaWVkIGV2ZXJ5d2hlcmU7XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0PTUzMj10aGF0IHN1cHBvcnRzIGVhY2ggYWN0aW9uIGFyZSBhcyBiZWxvdy5cbi0tXG5Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QtNTQ3LSAgIGZhaWwuXG5Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3Q6NTQ4OiAtIGBgY29sbGFwc2VgYDogQ2FsbCBgYG1hZHZpc2UoKWBgIGZvciB0aGUgcmVnaW9uIHdpdGggYGBNQURWX0NPTExBUFNFYGAuXG5Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QtNTQ5LSAgIFN1cHBvcnRlZCBieSBgYHZhZGRyYGAgYW5kIGBgZnZhZGRyYGAgb3BlcmF0aW9ucyBzZXQuIFdoZW5cbi0tXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0PTU2Mj1hcmUgZXh0cmEgcmVxdWlyZW1lbnRzIGZvciBhY2Nlc3NpbmcgdGhlbTpcbi0tXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTU2OC0gIEluIHBhcnRpY3VsYXIsIHRoaXMgaGFwcGVucyBpbiA6YzpmdW5jOmAhcmV0cmFjdF9wYWdlX3RhYmxlc2Agd2hlbiBoYW5kbGluZ1xuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDo1Njk6ICA6YzptYWNybzpgIU1BRFZfQ09MTEFQU0VgLlxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC01NzAtICBTbyBhY2Nlc3NpbmcgUFRFLWxldmVsIHBhZ2UgdGFibGVzIHJlcXVpcmVzIGF0IGxlYXN0IGhvbGRpbmcgYW4gUkNVIHJlYWQgbG9jaztcbi0tXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTU3OS0gIHRoZSByZXF1aXJlbWVudHMuIEluIHBhcnRpY3VsYXIsIHRoaXMgYWxzbyBoYXBwZW5zIGluIDpjOmZ1bmM6YCFyZXRyYWN0X3BhZ2VfdGFibGVzYFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDo1ODA6ICB3aGVuIGhhbmRsaW5nIDpjOm1hY3JvOmAhTUFEVl9DT0xMQVBTRWAuXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTU4MS1cbi0tXG5hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTc4LVxuYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDo3OTojZGVmaW5lIE1BRFZfQ09MTEFQU0VcdDI1XHRcdC8qIFN5bmNocm9ub3VzIGh1Z2VwYWdlIGNvbGxhcHNlICovXG5hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTgwLVxuLS1cbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0xMDUtXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmg6MTA2OiNkZWZpbmUgTUFEVl9DT0xMQVBTRVx0MjVcdFx0LyogU3luY2hyb25vdXMgaHVnZXBhZ2UgY29sbGFwc2UgKi9cbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0xMDctXG4tLVxuYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtNzItXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDo3MzojZGVmaW5lIE1BRFZfQ09MTEFQU0VcdDI1XHRcdC8qIFN5bmNocm9ub3VzIGh1Z2VwYWdlIGNvbGxhcHNlICovXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC03NC1cbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvc3lzX3BhcmlzYy5jPTM5ND1hc21saW5rYWdlIG5vdHJhY2UgbG9uZyBwYXJpc2NfbWFkdmlzZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLCBpbnQgYmVoYXZpb3IpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3N5c19wYXJpc2MuYy00MDQtXHRjYXNlIDcyOiBiZWhhdmlvciA9IE1BRFZfS0VFUE9ORk9SSztcdGJyZWFrO1xuYXJjaC9wYXJpc2Mva2VybmVsL3N5c19wYXJpc2MuYzo0MDU6XHRjYXNlIDczOiBiZWhhdmlvciA9IE1BRFZfQ09MTEFQU0U7XHRicmVhaztcbmFyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjLmMtNDA2LVx0fVxuLS1cbmFyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTExMy1cbmFyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjExNDojZGVmaW5lIE1BRFZfQ09MTEFQU0VcdDI1XHRcdC8qIFN5bmNocm9ub3VzIGh1Z2VwYWdlIGNvbGxhcHNlICovXG5hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0xMTUtXG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTkzPXN0cnVjdCBkYW1vbl90YXJnZXQge1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMTMtICogQERBTU9TX05PSFVHRVBBR0U6XHRDYWxsIGBgbWFkdmlzZSgpYGAgZm9yIHRoZSByZWdpb24gd2l0aCBNQURWX05PSFVHRVBBR0UuXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTE0OiAqIEBEQU1PU19DT0xMQVBTRTpcdENhbGwgYGBtYWR2aXNlKClgYCBmb3IgdGhlIHJlZ2lvbiB3aXRoIE1BRFZfQ09MTEFQU0UuXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTE1LSAqIEBEQU1PU19MUlVfUFJJTzpcdFByaW9yaXRpemUgdGhlIHJlZ2lvbiBvbiBpdHMgTFJVIGxpc3RzLlxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTk3PWVudW0gdHZhX3R5cGUge1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTEwMC1cdFRWQV9LSFVHRVBBR0VELFx0XHQvKiBLaHVnZXBhZ2VkIGNvbGxhcHNlLiAqL1xuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MTAxOlx0VFZBX0ZPUkNFRF9DT0xMQVBTRSxcdC8qIEZvcmNlZCBjb2xsYXBzZSAoZS5nLiBNQURWX0NPTExBUFNFKS4gKi9cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTEwMi19O1xuLS1cbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oLTc5LVxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmg6ODA6I2RlZmluZSBNQURWX0NPTExBUFNFXHQyNVx0XHQvKiBTeW5jaHJvbm91cyBodWdlcGFnZSBjb2xsYXBzZSAqL1xuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtODEtXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmg9MTM0PXN0cnVjdCBwcmN0bF9tbV9tYXAge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oLTE4Ny0gKiBEb24mIzM5O3QgZGlzYWJsZSBUSFBzIHdoZW4gZXhwbGljaXRseSBhZHZpc2VkIChlLmcuLCBNQURWX0hVR0VQQUdFIC9cbmluY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oOjE4ODogKiBWTV9IVUdFUEFHRSwgTUFEVl9DT0xMQVBTRSkuXG5pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaC0xODktICovXG4tLVxubW0vS2NvbmZpZz04ODU9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MDAtXHQgICYjMzk7dHJhbnNwYXJlbnRfaHVnZXBhZ2Vfc2htZW09JiMzOTsgb3B0aW9uIG9yIGF0IHJ1bnRpbWUgdmlhIHN5c2ZzXG5tbS9LY29uZmlnOjkwMTpcdCAga25vYi4gTm90ZSB0aGF0IG1hZHZpc2UoTUFEVl9DT0xMQVBTRSkgY2FuIHN0aWxsIGNhdXNlXG5tbS9LY29uZmlnLTkwMi1cdCAgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyB0byBiZSBvYnRhaW5lZCBldmVuIGlmIHRoaXMgbW9kZSBpc1xuLS1cbm1tL0tjb25maWc9OTMwPWNob2ljZVxuLS1cbm1tL0tjb25maWctOTQ1LVx0ICAmIzM5O3RyYW5zcGFyZW50X2h1Z2VwYWdlX3RtcGZzPSYjMzk7IG9wdGlvbi4gTm90ZSB0aGF0XG5tbS9LY29uZmlnOjk0NjpcdCAgbWFkdmlzZShNQURWX0NPTExBUFNFKSBjYW4gc3RpbGwgY2F1c2UgdHJhbnNwYXJlbnQgaHVnZSBwYWdlc1xubW0vS2NvbmZpZy05NDctXHQgIHRvIGJlIG9idGFpbmVkIGV2ZW4gaWYgdGhpcyBtb2RlIGlzIHNwZWNpZmllZC5cbi0tXG5tbS9kYW1vbi92YWRkci5jPTg3OT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl92YV9hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtOTAxLVx0Y2FzZSBEQU1PU19DT0xMQVBTRTpcbm1tL2RhbW9uL3ZhZGRyLmM6OTAyOlx0XHRtYWR2X2FjdGlvbiA9IE1BRFZfQ09MTEFQU0U7XG5tbS9kYW1vbi92YWRkci5jLTkwMy1cdFx0YnJlYWs7XG4tLVxubW0va2h1Z2VwYWdlZC5jPTM2Nz1zdGF0aWMgdW5zaWduZWQgaW50IGNvbGxhcHNlX21heF9wdGVzX25vbmUoc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjLFxuLS1cbm1tL2todWdlcGFnZWQuYy0zNzMtXHRcdHJldHVybiAwO1xubW0va2h1Z2VwYWdlZC5jOjM3NDpcdC8qIGZvciBNQURWX0NPTExBUFNFLCBhbGxvdyBhbnkgZW1wdHkvc2hhcmVkIHplcm9wYWdlIFBURXMgKi9cbm1tL2todWdlcGFnZWQuYy0zNzUtXHRpZiAoIWNjLVx1MDAzZWlzX2todWdlcGFnZWQpXG4tLVxubW0va2h1Z2VwYWdlZC5jPTQwNj1zdGF0aWMgdW5zaWduZWQgaW50IGNvbGxhcHNlX21heF9wdGVzX3NoYXJlZChzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTQwOS1cdC8qXG5tbS9raHVnZXBhZ2VkLmM6NDEwOlx0ICogRm9yIE1BRFZfQ09MTEFQU0UsIGRvIG5vdCByZXN0cmljdCB0aGUgbnVtYmVyIG9mIFBURXMgdGhhdCBtYXAgc2hhcmVkXG5tbS9raHVnZXBhZ2VkLmMtNDExLVx0ICogYW5vbnltb3VzIHBhZ2VzLlxuLS1cbm1tL2todWdlcGFnZWQuYz00MzQ9c3RhdGljIHVuc2lnbmVkIGludCBjb2xsYXBzZV9tYXhfcHRlc19zd2FwKHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYyxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNDM3LVx0Lypcbm1tL2todWdlcGFnZWQuYzo0Mzg6XHQgKiBGb3IgTUFEVl9DT0xMQVBTRSwgZG8gbm90IHJlc3RyaWN0IHRoZSBudW1iZXIgUFRFcyBlbnRyaWVzIG9yXG5tbS9raHVnZXBhZ2VkLmMtNDM5LVx0ICogcGFnZWNhY2hlIGVudHJpZXMgdGhhdCBhcmUgbm9uLXByZXNlbnQuXG4tLVxubW0va2h1Z2VwYWdlZC5jPTIyNTQ9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yMjY3LVx0Lypcbm1tL2todWdlcGFnZWQuYzoyMjY4Olx0ICogTUFEVl9DT0xMQVBTRSBpZ25vcmVzIHNobWVtIGh1Z2UgY29uZmlnLCBzbyBkbyBub3QgY2hlY2sgc2htZW1cbm1tL2todWdlcGFnZWQuYy0yMjY5LVx0ICpcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjYzMy1cdCAqIFJlbW92ZSBwdGUgcGFnZSB0YWJsZXMsIHNvIHdlIGNhbiByZS1mYXVsdCB0aGUgcGFnZSBhcyBodWdlLlxubW0va2h1Z2VwYWdlZC5jOjI2MzQ6XHQgKiBJZiBNQURWX0NPTExBUFNFLCBhZGp1c3QgcmVzdWx0IHRvIGNhbGwgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKCkuXG5tbS9raHVnZXBhZ2VkLmMtMjYzNS1cdCAqL1xuLS1cbm1tL2todWdlcGFnZWQuYz0yNzk3PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NpbmdsZV9wbWQodW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yODIyLVx0Lypcbm1tL2todWdlcGFnZWQuYzoyODIzOlx0ICogRm9yIE1BRFZfQ09MTEFQU0UsIHdoZW4gZW5jb3VudGVyaW5nIGRpcnR5IHBhZ2VzLCB0cnkgdG8gd3JpdGViYWNrLFxubW0va2h1Z2VwYWdlZC5jLTI4MjQtXHQgKiB0aGVuIHJldHJ5IHRoZSBjb2xsYXBzZSBvbmUgdGltZS5cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MzE2Mz1zdGF0aWMgaW50IG1hZHZpc2VfY29sbGFwc2VfZXJybm8oZW51bSBzY2FuX3Jlc3VsdCByKVxuLS1cbm1tL2todWdlcGFnZWQuYy0zMTY1LVx0Lypcbm1tL2todWdlcGFnZWQuYzozMTY2Olx0ICogTUFEVl9DT0xMQVBTRSBicmVha3MgZnJvbSBleGlzdGluZyBtYWR2aXNlKDIpIGNvbnZlbnRpb25zIHRvIHByb3ZpZGVcbm1tL2todWdlcGFnZWQuYy0zMTY3LVx0ICogYWN0aW9uYWJsZSBmZWVkYmFjayB0byBjYWxsZXIsIHNvIHRoZXkgbWF5IHRha2UgYW4gYXBwcm9wcmlhdGVcbi0tXG5tbS9tYWR2aXNlLmM9MTMzOD1zdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xMzYxLVx0XHRyZXR1cm4gbWFkdmlzZV9kb250bmVlZF9mcmVlKG1hZHZfYmVoYXZpb3IpO1xubW0vbWFkdmlzZS5jOjEzNjI6XHRjYXNlIE1BRFZfQ09MTEFQU0U6XG5tbS9tYWR2aXNlLmMtMTM2My1cdFx0cmV0dXJuIG1hZHZpc2VfY29sbGFwc2Uodm1hLCByYW5nZS1cdTAwM2VzdGFydCwgcmFuZ2UtXHUwMDNlZW5kLFxuLS1cbm1tL21hZHZpc2UuYz0xNTE4PW1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNTQxLVx0Y2FzZSBNQURWX05PSFVHRVBBR0U6XG5tbS9tYWR2aXNlLmM6MTU0MjpcdGNhc2UgTUFEVl9DT0xMQVBTRTpcbm1tL21hZHZpc2UuYy0xNTQzLSNlbmRpZlxuLS1cbm1tL21hZHZpc2UuYz0xNTYyPXN0YXRpYyBib29sIHByb2Nlc3NfbWFkdmlzZV9yZW1vdGVfdmFsaWQoaW50IGJlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNTY3LVx0Y2FzZSBNQURWX1dJTExORUVEOlxubW0vbWFkdmlzZS5jOjE1Njg6XHRjYXNlIE1BRFZfQ09MTEFQU0U6XG5tbS9tYWR2aXNlLmMtMTU2OS1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vbWFkdmlzZS5jPTE3NDI9c3RhdGljIGVudW0gbWFkdmlzZV9sb2NrX21vZGUgZ2V0X2xvY2tfbW9kZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTc1My1cdGNhc2UgTUFEVl9QT1BVTEFURV9XUklURTpcbm1tL21hZHZpc2UuYzoxNzU0Olx0Y2FzZSBNQURWX0NPTExBUFNFOlxubW0vbWFkdmlzZS5jLTE3NTUtXHRcdHJldHVybiBNQURWSVNFX01NQVBfUkVBRF9MT0NLO1xuLS1cbm1tL21hZHZpc2UuYz0xODg3PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxuLS1cbm1tL21hZHZpc2UuYy0xOTU1LSAqXHRcdGNvYWxlc2NlZCBpbnRvIFRIUCBhbmQgbmV3IHBhZ2VzIHdpbGwgbm90IGJlIGFsbG9jYXRlZCBhcyBUSFAuXG5tbS9tYWR2aXNlLmM6MTk1NjogKiAgTUFEVl9DT0xMQVBTRSAtIHN5bmNocm9ub3VzbHkgY29hbGVzY2UgcGFnZXMgaW50byBuZXcgVEhQLlxubW0vbWFkdmlzZS5jLTE5NTctICogIE1BRFZfRE9OVERVTVAgLSB0aGUgYXBwbGljYXRpb24gd2FudHMgdG8gcHJldmVudCBwYWdlcyBpbiB0aGUgZ2l2ZW4gcmFuZ2Vcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaC03OS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oOjgwOiNkZWZpbmUgTUFEVl9DT0xMQVBTRVx0MjVcdFx0LyogU3luY2hyb25vdXMgaHVnZXBhZ2UgY29sbGFwc2UgKi9cbnRvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oLTgxLVxuLS1cbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oPTEzND1zdHJ1Y3QgcHJjdGxfbW1fbWFwIHtcbi0tXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaC0xODctICogRG9uJiMzOTt0IGRpc2FibGUgVEhQcyB3aGVuIGV4cGxpY2l0bHkgYWR2aXNlZCAoZS5nLiwgTUFEVl9IVUdFUEFHRSAvXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaDoxODg6ICogVk1fSFVHRVBBR0UsIE1BRFZfQ09MTEFQU0UpLlxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmgtMTg5LSAqL1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM9MTc0PXN0YXRpYyB2b2lkIHRlc3RfY29sbGFwc2UoaW50IGZkLCB1NjQgZmxhZ3MpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0yMTgtXHQgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MjE5Olx0VEVTVF9BU1NFUlRfRVEobWFkdmlzZShtZW0sIHBtZF9zaXplLCBNQURWX0NPTExBUFNFKSwgLTEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0yMjAtXHRURVNUX0FTU0VSVF9FUShlcnJubywgRUlOVkFMKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYz0xMjc2PXN0YXRpYyB2b2lkIGRvX3Rlc3RfYW5vbl90aHBfY29sbGFwc2UoY2hhciAqbWVtLCBzaXplX3Qgc2l6ZSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYy0xMzA4LVx0XHQvKiBDb2xsYXBzZSBiZWZvcmUgYWN0dWFsbHkgQ09XLXNoYXJpbmcgdGhlIHBhZ2UuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYzoxMzA5Olx0XHRyZXQgPSBtYWR2aXNlKG1lbSwgc2l6ZSwgTUFEVl9DT0xMQVBTRSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYy0xMzEwLVx0XHRpZiAocmV0KSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYzoxMzExOlx0XHRcdGtzZnRfcGVycm9yKFwmIzM0O01BRFZfQ09MTEFQU0UgZmFpbGVkXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jLTEzMTItXHRcdFx0bG9nX3Rlc3RfcmVzdWx0KEtTRlRfU0tJUCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMtMTM4Ni1cdFx0LyogQ29sbGFwc2UgYmVmb3JlIGFueW9uZSBtb2RpZmllZCB0aGUgQ09XLXNoYXJlZCBwYWdlLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmM6MTM4NzpcdFx0cmV0ID0gbWFkdmlzZShtZW0sIHNpemUsIE1BRFZfQ09MTEFQU0UpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMtMTM4OC1cdFx0aWYgKHJldCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmM6MTM4OTpcdFx0XHRrc2Z0X3BlcnJvcihcJiMzNDtNQURWX0NPTExBUFNFIGZhaWxlZFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYy0xMzkwLVx0XHRcdGxvZ190ZXN0X3Jlc3VsdChLU0ZUX1NLSVApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYz0yMTkxPVRFU1RfRihndWFyZF9yZWdpb25zLCBjb2xsYXBzZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMtMjIzMy1cdCAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jOjIyMzQ6XHRFWFBFQ1RfTkUobWFkdmlzZShwdHIsIHNpemUsIE1BRFZfQ09MTEFQU0UpLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0yMjM1LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTIwODA9VEVTVF9GKGhtbSwgbWlncmF0ZV9hbm9uX2h1Z2VfZmF1bHQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMjExMC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjIxMTE6XHRyZXQgPSBtYWR2aXNlKG1hcCwgc2l6ZSwgTUFEVl9DT0xMQVBTRSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yMTEyLVx0QVNTRVJUX0VRKHJldCwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTIzMT1zdGF0aWMgdm9pZCBmaWxsX21lbW9yeShpbnQgKnAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yMzktLypcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoyNDA6ICogTUFEVl9DT0xMQVBTRSBpcyBhIGJlc3QtZWZmb3J0IHJlcXVlc3QgYW5kIG1heSBmYWlsIGlmIGFuIGludGVybmFsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjQxLSAqIHJlc291cmNlIGlzIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNlIGl0IHdpbGwgc2V0IGVycm5vIHRvXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTI0NT1zdGF0aWMgaW50IG1hZHZpc2VfY29sbGFwc2VfcmV0cnkodm9pZCAqcCwgdW5zaWduZWQgbG9uZyBzaXplKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNTAtcmV0cnk6XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MjUxOlx0cmV0ID0gbWFkdmlzZShwLCBzaXplLCBNQURWX0NPTExBUFNFKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNTItXHRpZiAocmV0IFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFQUdBSU4gXHUwMDI2XHUwMDI2IHJldHJ5KSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTI2Mz1zdGF0aWMgdm9pZCAqYWxsb2NfaHBhZ2Uoc3RydWN0IG1lbV9vcHMgKm9wcylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjcwLVx0ICogVk1BIHNob3VsZCBiZSBuZWl0aGVyIFZNX0hVR0VQQUdFIG5vciBWTV9OT0hVR0VQQUdFLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjI3MTpcdCAqIFRoZSBsYXR0ZXIgaXMgaW5lbGlnaWJsZSBmb3IgY29sbGFwc2UgYnkgTUFEVl9DT0xMQVBTRVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjI3MjpcdCAqIHdoaWxlIHRoZSBmb3JtZXIgbWlnaHQgY2F1c2UgTUFEVl9DT0xMQVBTRSB0byByYWNlIHdpdGhcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNzMtXHQgKiBraHVnZXBhZ2VkIG9uIGxvdy1sb2FkIHN5c3RlbSAobGlrZSBhIHRlc3QgbWFjaGluZSksIHdoaWNoXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6Mjc0Olx0ICogd291bGQgY2F1c2UgTUFEVl9DT0xMQVBTRSB0byBmYWlsIHdpdGggRUFHQUlOLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTI3NS1cdCAqL1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNzctXHRpZiAobWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBocGFnZV9wbWRfc2l6ZSkpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6Mjc4Olx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7bWFkdmlzZShNQURWX0NPTExBUFNFKVwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjc5LVx0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAxKSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoyODA6XHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDttYWR2aXNlKE1BRFZfQ09MTEFQU0UpXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yODEtXHRpZiAobWFkdmlzZShwLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9IVUdFUEFHRSkpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTUwOT1zdGF0aWMgdm9pZCBfX21hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01MTctXHQvKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjUxODpcdCAqIHJlYWRcdTAwMjZ3cml0ZSBmaWxlIGNvbGxhcHNlIHN1Y2NlZWRzIGZvciBNQURWX0NPTExBUFNFIGJlY2F1c2UgZGlydHlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01MTktXHQgKiBmb2xpb3MgYXJlIHdyaXR0ZW4gYmFjayBhZnRlciBjb2xsYXBzZSBmYWlscyBmb3IgZGlydHkgZm9saW9zIGFuZFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01MjMtXHQvKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjUyNDpcdCAqIFByZXZlbnQga2h1Z2VwYWdlZCBpbnRlcmZlcmVuY2UgYW5kIHRlc3RzIHRoYXQgTUFEVl9DT0xMQVBTRVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTUyNS1cdCAqIGlnbm9yZXMgL3N5cy9rZXJuZWwvbW0vdHJhbnNwYXJlbnRfaHVnZXBhZ2UvZW5hYmxlZFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYz0xMDc1PXN0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3dyaXR0ZW5fdGVzdChjb25zdCBjaGFyICpuYW1lLCBjaGFyICptZW0sIGxvbmcgc2l6ZSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTA4Ni1cdGlmICh1c2VfdGhwIFx1MDAyNlx1MDAyNlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjEwODc6XHQgICAgKG1hZHZpc2UobWVtLCBzaXplLCBNQURWX0NPTExBUFNFKSB8fFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTEwODgtXHQgICAgICFjaGVja19odWdlX2Fub24obWVtLCBzaXplIC8gaHBhZ2Vfc2l6ZSwgaHBhZ2Vfc2l6ZSkpKSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYz0yND1lbnVtIHRocF9jb2xsYXBzZV90eXBlIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jLTI3LVx0VEhQX0NPTExBUFNFX01BRFZfSFVHRVBBR0UsXHQvKiBNQURWX0hVR0VQQUdFIGJlZm9yZSBhY2Nlc3MgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmM6Mjg6XHRUSFBfQ09MTEFQU0VfTUFEVl9DT0xMQVBTRSxcdC8qIE1BRFZfQ09MTEFQU0UgYWZ0ZXIgYWNjZXNzICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jLTI5LX07XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYy0zMi0gKiBGdW5jdGlvbiB0byBtbWFwIGEgYnVmZmVyLCBmYXVsdCBpdCBpbiwgbWFkdmlzZSBpdCBhcHByb3ByaWF0ZWx5IChiZWZvcmVcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmM6MzM6ICogcGFnZSBmYXVsdCBmb3IgTUFEVl9IVUdFLCBhbmQgYWZ0ZXIgZm9yIE1BRFZfQ09MTEFQU0UpLCBhbmQgY2hlY2sgaWYgdGhlXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jLTM0LSAqIG1tYXAgcmVnaW9uIGlzIGh1Z2UuXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYz00MD1zdGF0aWMgaW50IHRlc3RfbW1hcF90aHAoZW51bSB0aHBfY29sbGFwc2VfdHlwZSBtYWR2aXNlX2J1Ziwgc2l6ZV90IHBtZHNpemUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYy02My1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmM6NjQ6XHRpZiAobWFkdmlzZV9idWYgPT0gVEhQX0NPTExBUFNFX01BRFZfQ09MTEFQU0UpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jOjY1Olx0XHRtYWR2aXNlKG1lbSwgcG1kc2l6ZSwgTUFEVl9DT0xMQVBTRSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jLTY2LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmM9NzU9c3RhdGljIHZvaWQgcHJjdGxfdGhwX2Rpc2FibGVfY29tcGxldGVseV90ZXN0KHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKmNvbnN0IF9tZXRhZGF0YSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jLTg3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYzo4ODpcdEFTU0VSVF9FUSh0ZXN0X21tYXBfdGhwKFRIUF9DT0xMQVBTRV9NQURWX0NPTExBUFNFLCBwbWRzaXplKSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jLTg5LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMtMTAxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYzoxMDI6XHRBU1NFUlRfRVEodGVzdF9tbWFwX3RocChUSFBfQ09MTEFQU0VfTUFEVl9DT0xMQVBTRSwgcG1kc2l6ZSksIDEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYy0xMDMtfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmM9MTgyPXN0YXRpYyB2b2lkIHByY3RsX3RocF9kaXNhYmxlX2V4Y2VwdF9tYWR2aXNlX3Rlc3Qoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqY29uc3QgX21ldGFkYXRhLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMtMTk1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYzoxOTY6XHRBU1NFUlRfRVEodGVzdF9tbWFwX3RocChUSFBfQ09MTEFQU0VfTUFEVl9DT0xMQVBTRSwgcG1kc2l6ZSksIDEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYy0xOTctXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYy0yMDktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jOjIxMDpcdEFTU0VSVF9FUSh0ZXN0X21tYXBfdGhwKFRIUF9DT0xMQVBTRV9NQURWX0NPTExBUFNFLCBwbWRzaXplKSwgMSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jLTIxMS19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvY2Vzc19tYWR2LmM9NjA9VEVTVF9GKHByb2Nlc3NfbWFkdmlzZSwgYmFzaWMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvY2Vzc19tYWR2LmMtMTIzLS8qXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuYzoxMjQ6ICogVGhpcyB0ZXN0IGRldGVybWluaXN0aWNhbGx5IHZhbGlkYXRlcyBwcm9jZXNzX21hZHZpc2UoKSB3aXRoIE1BRFZfQ09MTEFQU0VcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb2Nlc3NfbWFkdi5jLTEyNS0gKiBvbiBhIHJlbW90ZSBwcm9jZXNzLCBvdGhlciBhZHZpY2VzIGFyZSBkaWZmaWN1bHQgdG8gdmVyaWZ5IHJlbGlhYmx5LlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb2Nlc3NfbWFkdi5jLTEyOC0gKiBmb2N1cyBvbiBwcm9jZXNzX21hZHYgcmVtb3RlIHJlc3VsdCwgb25seSBjaGVjayBhZGRyZXNzZXMgYW5kIGxlbmd0aHMuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuYzoxMjk6ICogVGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBNQURWX0NPTExBUFNFIGNhbiBiZSBmb3VuZCBpbiB0aGUgcmVsZXZhbnQgdGVzdCBleGFtcGxlcyBpbiBraHVnZXBhZ2VkLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvY2Vzc19tYWR2LmMtMTMwLSAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvY2Vzc19tYWR2LmM9MTMxPVRFU1RfRihwcm9jZXNzX21hZHZpc2UsIHJlbW90ZV9jb2xsYXBzZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuYy0xOTUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuYzoxOTY6XHRyZXQgPSBzeXNfcHJvY2Vzc19tYWR2aXNlKHNlbGYtXHUwMDNlcmVtb3RlX3BpZGZkLCBcdTAwMjZ2ZWMsIDEsIE1BRFZfQ09MTEFQU0UsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuYy0xOTctXHRcdFx0XHQgIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jPTUzNj1zdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbGxhcHNlLCBib29sIHRlc3Rfd3ApXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmMtNTQ0LVx0LypcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jOjU0NTpcdCAqIE5PVEU6IE1BRFZfQ09MTEFQU0UgaXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggV1AsIHNvIHRlc3RpbmdcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jLTU0Ni1cdCAqIGJvdGggZG8gbm90IG1ha2UgbXVjaCBzZW5zZS5cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYy01NTAtXHRpZiAodWZmZF9yZWdpc3Rlcihnb3B0cy1cdTAwM2V1ZmZkLCBnb3B0cy1cdTAwM2VhcmVhX2RzdF9hbGlhcywgZ29wdHMtXHUwMDNlbnJfcGFnZXMgKiBnb3B0cy1cdTAwM2VwYWdlX3NpemUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYzo1NTE6XHRcdFx0ICAvKiBOT1RFISBNQURWX0NPTExBUFNFIG1heSBub3Qgd29yayB3aXRoIHVmZmQtd3AgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jLTU1Mi1cdFx0XHQgIGZhbHNlLCB0ZXN0X3dwLCB0cnVlKSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYy01ODEtXHRcdGlmIChtYWR2aXNlKGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzLCBnb3B0cy1cdTAwM2Vucl9wYWdlcyAqIGdvcHRzLVx1MDAzZXBhZ2Vfc2l6ZSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jOjU4MjpcdFx0XHQgICAgTUFEVl9DT0xMQVBTRSkpIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jLTU4My1cdFx0XHQvKiBJdCYjMzk7cyBmaW5lIHRvIGZhaWwgZm9yIHRoaXMgb25lLi4uICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYzo1ODQ6XHRcdFx0dWZmZF90ZXN0X3NraXAoXCYjMzQ7TUFEVl9DT0xMQVBTRSBmYWlsZWRcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmMtNTg1LVx0XHRcdHJldHVybjtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYz0yMzIyPXVmZmRfdGVzdF9jYXNlX3QgdWZmZF90ZXN0c1tdID0ge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jLTI0MjQtXHRcdC51ZmZkX2ZuID0gdWZmZF9taW5vcl9jb2xsYXBzZV90ZXN0LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmM6MjQyNTpcdFx0LyogTUFEVl9DT0xMQVBTRSBvbmx5IHdvcmtzIHdpdGggc2htZW0gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jLTI0MjYtXHRcdC5tZW1fdGFyZ2V0cyA9IE1FTV9TSE1FTSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jOjI0Mjc6XHRcdC8qIFdlIGNhbiYjMzk7dCB0ZXN0IE1BRFZfQ09MTEFQU0UsIHNvIHRyeSBvdXIgbHVjayAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmMtMjQyOC1cdFx0LnVmZmRfZmVhdHVyZV9yZXF1aXJlZCA9IFVGRkRfRkVBVFVSRV9NSU5PUl9TSE1FTSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwODUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYG1hZHZpc2VfY29sbGFwc2VgIGluIGBtbS9raHVnZXBhZ2VkLmNgKioKCk9rYXksIHNvIEkgd2FudCB0byBnZXQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgbWFkdmlzZV9jb2xsYXBzZWAgYWN0dWFsbHkgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBrZXJuZWwmIzM5O3MgaHVnZSBwYWdlIG1hbmFnZW1lbnQuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIGRpZ2dpbmcgaW50byB0aGUgY29kZSBpdHNlbGYuIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCB0byBgbW0va2h1Z2VwYWdlZC5jYCBhbmQgemVybyBpbiBvbiB0aGUgYG1hZHZpc2VfY29sbGFwc2VgIGZ1bmN0aW9uLiBNeSBtYWluIGZvY3VzIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBsb2dpYyDigJMgaG93IGl0IGFjdHVhbGx5IGNvbGxhcHNlcyBvciB1bi1jb2xsYXBzZXMgbWVtb3J5IG1hcHBpbmdzIGJhc2VkIG9uIHRoZSBgTUFEVl9DT0xMQVBTRWAgYWR2aWNlLCBhbmQgYWxzbyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBzdXJyb3VuZGluZyBzeW1ib2xzIGFuZCBkYXRhIHN0cnVjdHVyZXMgaXQgcmVsaWVzIG9uLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBsZWFkIG1lIHRvIHRoZSB1bmRlcmx5aW5nIGFsZ29yaXRobXMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHBhZ2UgdGFibGUgaGFuZGxpbmcgYW5kIG90aGVyIHJlbGF0ZWQgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50cy4gSXQmIzM5O3MgdGltZSB0byBnZXQgaGFuZHMtb24gYW5kIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFkdmlzZV9jb2xsYXBzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmM9MzE1OD1ib29sIGN1cnJlbnRfaXNfa2h1Z2VwYWdlZCh2b2lkKVxuLS1cbm1tL2todWdlcGFnZWQuYy0zMTYyLVxubW0va2h1Z2VwYWdlZC5jOjMxNjM6c3RhdGljIGludCBtYWR2aXNlX2NvbGxhcHNlX2Vycm5vKGVudW0gc2Nhbl9yZXN1bHQgcilcbm1tL2todWdlcGFnZWQuYy0zMTY0LXtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzE5NC1cbm1tL2todWdlcGFnZWQuYzozMTk1OmludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0va2h1Z2VwYWdlZC5jLTMxOTYtXHRcdCAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgKmxvY2tfZHJvcHBlZClcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzI4Mi1cdHJldHVybiB0aHBzID09ICgoaGVuZCAtIGhzdGFydCkgXHUwMDNlXHUwMDNlIEhQQUdFX1BNRF9TSElGVCkgPyAwXG5tbS9raHVnZXBhZ2VkLmM6MzI4MzpcdFx0XHQ6IG1hZHZpc2VfY29sbGFwc2VfZXJybm8obGFzdF9mYWlsKTtcbm1tL2todWdlcGFnZWQuYy0zMjg0LX1cbi0tXG5tbS9tYWR2aXNlLmM9MTMzOD1zdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xMzYyLVx0Y2FzZSBNQURWX0NPTExBUFNFOlxubW0vbWFkdmlzZS5jOjEzNjM6XHRcdHJldHVybiBtYWR2aXNlX2NvbGxhcHNlKHZtYSwgcmFuZ2UtXHUwMDNlc3RhcnQsIHJhbmdlLVx1MDAzZWVuZCxcbm1tL21hZHZpc2UuYy0xMzY0LVx0XHRcdFx1MDAyNm1hZHZfYmVoYXZpb3ItXHUwMDNlbG9ja19kcm9wcGVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3NTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGl2aW5nIGludG8gYG1hZHZpc2VfY29sbGFwc2VgIGFuZCBJdHMgVEhQIEltcGxpY2F0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYG1hZHZpc2VfY29sbGFwc2VgIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL2todWdlcGFnZWQuY2AuIE15IHByaW1hcnkgaW50ZXJlc3QgaGVyZSwgYXMgYWx3YXlzLCBpcyB1bmRlcnN0YW5kaW5nIHRoZSBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpIGludGVyYWN0aW9uLCBhbmQgaG93IHRoaXMgZnVuY3Rpb24gcGxheXMgYSBwYXJ0IGluIHRoZSBiaWcgcGljdHVyZS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCB0aGF0IGxlYWRzIGludG8gYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgbWFnaWMg4oCTIG9yIHBvdGVudGlhbCBoZWFkYWNoZXMg4oCTIGhhcHBlbiwgYW5kIHVuZGVyc3RhbmRpbmcgKmhvdyogYG1hZHZpc2VfY29sbGFwc2VgIHRyaWdnZXJzIHRoYXQgZnVuY3Rpb24gaXMgY3J1Y2lhbC4gSSB3YW50IHRvIHNlZSBpZiBpdCYjMzk7cyBhIGRpcmVjdCBjYWxsLCBvciBpZiB0aGVyZSBhcmUgaW50ZXJtZWRpYXJpZXMuIFdoYXQgYXJlIHRoZSBjb25kaXRpb25zIHRoYXQgaGF2ZSB0byBiZSBtZXQgZm9yIHRoaXMgY29sbGFwc2UgYXR0ZW1wdCB0byBldmVuIGJlIGNvbnNpZGVyZWQ/IEkgYmV0IGl0IGRlYWxzIHdpdGggYE1BRFZfQ09MTEFQU0VgIGFuZCBzaGFyZWQgbWVtb3J5IHJlZ2lvbnMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgYWxsIHRoZSBpbXBsaWNhdGlvbnMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBrZXJuZWwgZGVhbHMgd2l0aCBwYWdlcyBpbiB0aGUgbWlkZGxlIG9mIGEgVEhQLCBhbmQgaG93IHRoZSBjb2xsYXBzZSB3b3JrcyBpbiB0ZXJtcyBvZiBwYWdlIHRhYmxlIGVudHJpZXMuIElzIGl0IGEgZ3JhY2VmdWwgZGVncmFkYXRpb24sIG9yIGlzIGl0IGEgbW9yZSBkaXNydXB0aXZlIG9wZXJhdGlvbj8gSSB3YW50IHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBwaXRmYWxscywgc3luY2hyb25pemF0aW9uIGlzc3Vlcywgb3Igc3VidGxlIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2YuIExldCYjMzk7cyBzZWUgaG93IGVmZmljaWVudGx5IGl0IGhhbmRsZXMgdGhlIHRhc2ssIGFuZCBpZiB0aGVyZSBhcmUgYW55IGFyZWFzIGZvciBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIGRvd24gdGhlIGxpbmUuIFRoYXQmIzM5O3MgdGhlIGNvcmUgZm9jdXMgcmlnaHQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzE5NTpcdGludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuMzE5NjpcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sICpsb2NrX2Ryb3BwZWQpXG4zMTk3Olx0e1xuMzE5ODpcdFx0c3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjO1xuMzE5OTpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXHUwMDNldm1fbW07XG4zMjAwOlx0XHR1bnNpZ25lZCBsb25nIGhzdGFydCwgaGVuZCwgYWRkcjtcbjMyMDE6XHRcdGVudW0gc2Nhbl9yZXN1bHQgbGFzdF9mYWlsID0gU0NBTl9GQUlMO1xuMzIwMjpcdFx0aW50IHRocHMgPSAwO1xuMzIwMzpcdFx0Ym9vbCBtbWFwX3VubG9ja2VkID0gZmFsc2U7XG4zMjA0Olx0XG4zMjA1Olx0XHRCVUdfT04odm1hLVx1MDAzZXZtX3N0YXJ0IFx1MDAzZSBzdGFydCk7XG4zMjA2Olx0XHRCVUdfT04odm1hLVx1MDAzZXZtX2VuZCBcdTAwM2MgZW5kKTtcbjMyMDc6XHRcbjMyMDg6XHRcdGlmICghY29sbGFwc2VfcG9zc2libGUodm1hLCB2bWEtXHUwMDNldm1fZmxhZ3MsIFRWQV9GT1JDRURfQ09MTEFQU0UpKVxuMzIwOTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMyMTA6XHRcbjMyMTE6XHRcdGhzdGFydCA9IEFMSUdOKHN0YXJ0LCBIUEFHRV9QTURfU0laRSk7XG4zMjEyOlx0XHRoZW5kID0gQUxJR05fRE9XTihlbmQsIEhQQUdFX1BNRF9TSVpFKTtcbjMyMTM6XHRcbjMyMTQ6XHRcdGlmIChoc3RhcnQgXHUwMDNlPSBoZW5kKVxuMzIxNTpcdFx0XHRyZXR1cm4gMDtcbjMyMTY6XHRcbjMyMTc6XHRcdGNjID0ga21hbGxvY19vYmooKmNjKTtcbjMyMTg6XHRcdGlmICghY2MpXG4zMjE5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMzIyMDpcdFx0Y2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCA9IGZhbHNlO1xuMzIyMTpcdFx0Y2MtXHUwMDNlcHJvZ3Jlc3MgPSAwO1xuMzIyMjpcdFxuMzIyMzpcdFx0bW1ncmFiKG1tKTtcbjMyMjQ6XHRcdGxydV9hZGRfZHJhaW5fYWxsKCk7XG4zMjI1Olx0XG4zMjI2Olx0XHRmb3IgKGFkZHIgPSBoc3RhcnQ7IGFkZHIgXHUwMDNjIGhlbmQ7IGFkZHIgJiM0Mzs9IEhQQUdFX1BNRF9TSVpFKSB7XG4zMjI3Olx0XHRcdGVudW0gc2Nhbl9yZXN1bHQgcmVzdWx0ID0gU0NBTl9GQUlMO1xuMzIyODpcdFxuMzIyOTpcdFx0XHRpZiAobW1hcF91bmxvY2tlZCkge1xuMzIzMDpcdFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuMzIzMTpcdFx0XHRcdG1tYXBfcmVhZF9sb2NrKG1tKTtcbjMyMzI6XHRcdFx0XHRtbWFwX3VubG9ja2VkID0gZmFsc2U7XG4zMjMzOlx0XHRcdFx0KmxvY2tfZHJvcHBlZCA9IHRydWU7XG4zMjM0Olx0XHRcdFx0cmVzdWx0ID0gaHVnZXBhZ2Vfdm1hX3JldmFsaWRhdGUobW0sIGFkZHIsIGZhbHNlLCBcdTAwMjZ2bWEsXG4zMjM1Olx0XHRcdFx0XHRcdFx0XHQgY2MsIEhQQUdFX1BNRF9PUkRFUik7XG4zMjM2Olx0XHRcdFx0aWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpIHtcbjMyMzc6XHRcdFx0XHRcdGxhc3RfZmFpbCA9IHJlc3VsdDtcbjMyMzg6XHRcdFx0XHRcdGdvdG8gb3V0X25vbG9jaztcbjMyMzk6XHRcdFx0XHR9XG4zMjQwOlx0XG4zMjQxOlx0XHRcdFx0aGVuZCA9IG1pbihoZW5kLCB2bWEtXHUwMDNldm1fZW5kIFx1MDAyNiBIUEFHRV9QTURfTUFTSyk7XG4zMjQyOlx0XHRcdH1cbjMyNDM6XHRcbjMyNDQ6XHRcdFx0cmVzdWx0ID0gY29sbGFwc2Vfc2luZ2xlX3BtZChhZGRyLCB2bWEsIFx1MDAyNm1tYXBfdW5sb2NrZWQsIGNjKTtcbjMyNDU6XHRcbjMyNDY6XHRcdFx0c3dpdGNoIChyZXN1bHQpIHtcbjMyNDc6XHRcdFx0Y2FzZSBTQ0FOX1NVQ0NFRUQ6XG4zMjQ4Olx0XHRcdGNhc2UgU0NBTl9QTURfTUFQUEVEOlxuMzI0OTpcdFx0XHRcdCYjNDM7JiM0Mzt0aHBzO1xuMzI1MDpcdFx0XHRcdGJyZWFrO1xuMzI1MTpcdFx0XHQvKiBXaGl0ZWxpc3RlZCBzZXQgb2YgcmVzdWx0cyB3aGVyZSBjb250aW51aW5nIE9LICovXG4zMjUyOlx0XHRcdGNhc2UgU0NBTl9OT19QVEVfVEFCTEU6XG4zMjUzOlx0XHRcdGNhc2UgU0NBTl9QVEVfTk9OX1BSRVNFTlQ6XG4zMjU0Olx0XHRcdGNhc2UgU0NBTl9QVEVfVUZGRDpcbjMyNTU6XHRcdFx0Y2FzZSBTQ0FOX0xBQ0tfUkVGRVJFTkNFRF9QQUdFOlxuMzI1NjpcdFx0XHRjYXNlIFNDQU5fUEFHRV9OVUxMOlxuMzI1NzpcdFx0XHRjYXNlIFNDQU5fUEFHRV9DT1VOVDpcbjMyNTg6XHRcdFx0Y2FzZSBTQ0FOX1BBR0VfTE9DSzpcbjMyNTk6XHRcdFx0Y2FzZSBTQ0FOX1BBR0VfQ09NUE9VTkQ6XG4zMjYwOlx0XHRcdGNhc2UgU0NBTl9QQUdFX0xSVTpcbjMyNjE6XHRcdFx0Y2FzZSBTQ0FOX0RFTF9QQUdFX0xSVTpcbjMyNjI6XHRcdFx0XHRsYXN0X2ZhaWwgPSByZXN1bHQ7XG4zMjYzOlx0XHRcdFx0YnJlYWs7XG4zMjY0Olx0XHRcdGRlZmF1bHQ6XG4zMjY1Olx0XHRcdFx0bGFzdF9mYWlsID0gcmVzdWx0O1xuMzI2NjpcdFx0XHRcdC8qIE90aGVyIGVycm9yLCBleGl0ICovXG4zMjY3Olx0XHRcdFx0Z290byBvdXRfbWF5YmVsb2NrO1xuMzI2ODpcdFx0XHR9XG4zMjY5Olx0XHR9XG4zMjcwOlx0XG4zMjcxOlx0b3V0X21heWJlbG9jazpcbjMyNzI6XHRcdC8qIENhbGxlciBleHBlY3RzIHVzIHRvIGhvbGQgbW1hcF9sb2NrIG9uIHJldHVybiAqL1xuMzI3MzpcdFx0aWYgKG1tYXBfdW5sb2NrZWQpIHtcbjMyNzQ6XHRcdFx0KmxvY2tfZHJvcHBlZCA9IHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzMwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBLY29uZmlnIERlcGVuZGVuY2llcyBmb3IgS2h1Z2VwYWdlZCBhbmQgVXNlcmZhdWx0ZmQqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUga2VybmVsIGNvZGUgYW5kIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdGhhdCBjb250cm9sIHRoZSBpbmNsdXNpb24gb2YgYG1tL2todWdlcGFnZWQuY2AgYW5kLCBpbiBwYXJ0aWN1bGFyLCB1c2VyZmF1bHRmZCBmdW5jdGlvbmFsaXR5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIEtjb25maWcgc3ltYm9scyB0aGF0IHVsdGltYXRlbHkgcmVzdWx0IGluIHRoYXQgY29kZSBiZWluZyBjb21waWxlZC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgZGlyZWN0bHkgYXQgdGhlIGJ1aWxkIHByb2Nlc3MuIFRoZSBzaW1wbGVzdCBhcHByb2FjaCBzZWVtcyB0byBiZSB0byBjaGVjayBgbW0vTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhleSBhcmUgaGFuZGxlZCBhdCBidWlsZCB0aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtraHVnZXBhZ2VkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4NzIgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm1tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgJiM0Mzs9IG1pZ3JhdGVfZGV2aWNlLm9cbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICYjNDM7PSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICYjNDM7PSBwYWdlX2NvdW50ZXIub1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjMtI2luY2x1ZGUgXHUwMDNjbGludXgvbW1fdHlwZXMuaFx1MDAzZVxubW0vaHVnZV9tZW1vcnkuYzoyNDojaW5jbHVkZSBcdTAwM2NsaW51eC9raHVnZXBhZ2VkLmhcdTAwM2Vcbm1tL2h1Z2VfbWVtb3J5LmMtMjUtI2luY2x1ZGUgXHUwMDNjbGludXgvZnJlZXplci5oXHUwMDNlXG4tLVxubW0vaHVnZV9tZW1vcnkuYy01Ni0gKiBndWFyYW50ZWVkIHRvIGJlbmVmaXQgZnJvbSBpdC4gV2hlbiB0cmFuc3BhcmVudCBodWdlcGFnZSBzdXBwb3J0IGlzXG5tbS9odWdlX21lbW9yeS5jOjU3OiAqIGVuYWJsZWQsIGl0IGlzIGZvciBhbGwgbWFwcGluZ3MsIGFuZCBraHVnZXBhZ2VkIHNjYW5zIGFsbCBtYXBwaW5ncy5cbm1tL2h1Z2VfbWVtb3J5LmM6NTg6ICogRGVmcmFnIGlzIGludm9rZWQgYnkga2h1Z2VwYWdlZCBodWdlcGFnZSBhbGxvY2F0aW9ucyBhbmQgYnkgcGFnZSBmYXVsdHNcbm1tL2h1Z2VfbWVtb3J5LmMtNTktICogZm9yIGFsbCBodWdlcGFnZSBhbGxvY2F0aW9ucy5cbi0tXG5tbS9odWdlX21lbW9yeS5jPTEyMT11bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTQ4LVxubW0vaHVnZV9tZW1vcnkuYzoxNDk6XHQvKiBraHVnZXBhZ2VkIGRvZXNuJiMzOTt0IGNvbGxhcHNlIERBWCB2bWEsIGJ1dCBwYWdlIGZhdWx0IGlzIGZpbmUuICovXG5tbS9odWdlX21lbW9yeS5jLTE1MC1cdGlmICh2bWFfaXNfZGF4KHZtYSkpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xNTMtXHQvKlxubW0vaHVnZV9tZW1vcnkuYzoxNTQ6XHQgKiBraHVnZXBhZ2VkIHNwZWNpYWwgVk1BIGFuZCBodWdldGxiIFZNQS5cbm1tL2h1Z2VfbWVtb3J5LmMtMTU1LVx0ICogTXVzdCBiZSBjaGVja2VkIGFmdGVyIGRheCBzaW5jZSBzb21lIGRheCBtYXBwaW5ncyBtYXkgaGF2ZVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDQ1PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NTUtXHRpZiAoc2V0X2dsb2JhbF9lbmFibGVkX21vZGUobW9kZSkpIHtcbm1tL2h1Z2VfbWVtb3J5LmM6NDU2Olx0XHRpbnQgZXJyID0gc3RhcnRfc3RvcF9raHVnZXBhZ2VkKCk7XG5tbS9odWdlX21lbW9yeS5jLTQ1Ny1cbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ2My1cdFx0ICogY2hhbmdlLCBhcyB0aGUgcHJldmlvdXMgY29kZSBhbHdheXMgY2FsbGVkXG5tbS9odWdlX21lbW9yeS5jOjQ2NDpcdFx0ICogc3RhcnRfc3RvcF9raHVnZXBhZ2VkKCkgd2hpY2ggZG9lcyB0aGlzIGludGVybmFsbHkuXG5tbS9odWdlX21lbW9yeS5jLTQ2NS1cdFx0ICovXG4tLVxubW0vaHVnZV9tZW1vcnkuYz02ODA9c3RhdGljIHNzaXplX3QgYW5vbl9lbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNjkxLVx0aWYgKHNldF9hbm9uX2VuYWJsZWRfbW9kZShvcmRlciwgbW9kZSkpIHtcbm1tL2h1Z2VfbWVtb3J5LmM6NjkyOlx0XHRpbnQgZXJyID0gc3RhcnRfc3RvcF9raHVnZXBhZ2VkKCk7XG5tbS9odWdlX21lbW9yeS5jLTY5My1cbi0tXG5tbS9odWdlX21lbW9yeS5jLTY5OS1cdFx0ICogY2hhbmdlLCBhcyB0aGUgcHJldmlvdXMgY29kZSBhbHdheXMgY2FsbGVkXG5tbS9odWdlX21lbW9yeS5jOjcwMDpcdFx0ICogc3RhcnRfc3RvcF9raHVnZXBhZ2VkKCkgd2hpY2ggZG9lcyB0aGlzIGludGVybmFsbHkuXG5tbS9odWdlX21lbW9yeS5jLTcwMS1cdFx0ICovXG4tLVxubW0vaHVnZV9tZW1vcnkuYz05MzM9c3RhdGljIGludCBfX2luaXQgaHVnZXBhZ2VfaW5pdF9zeXNmcyhzdHJ1Y3Qga29iamVjdCAqKmh1Z2VwYWdlX2tvYmopXG4tLVxubW0vaHVnZV9tZW1vcnkuYy05NTktXG5tbS9odWdlX21lbW9yeS5jOjk2MDpcdGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgqaHVnZXBhZ2Vfa29iaiwgXHUwMDI2a2h1Z2VwYWdlZF9hdHRyX2dyb3VwKTtcbm1tL2h1Z2VfbWVtb3J5LmMtOTYxLVx0aWYgKGVycikge1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9OTkxPXN0YXRpYyB2b2lkIF9faW5pdCBodWdlcGFnZV9leGl0X3N5c2ZzKHN0cnVjdCBrb2JqZWN0ICpodWdlcGFnZV9rb2JqKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtOTk5LVxubW0vaHVnZV9tZW1vcnkuYzoxMDAwOlx0c3lzZnNfcmVtb3ZlX2dyb3VwKGh1Z2VwYWdlX2tvYmosIFx1MDAyNmtodWdlcGFnZWRfYXR0cl9ncm91cCk7XG5tbS9odWdlX21lbW9yeS5jLTEwMDEtXHRzeXNmc19yZW1vdmVfZ3JvdXAoaHVnZXBhZ2Vfa29iaiwgXHUwMDI2aHVnZXBhZ2VfYXR0cl9ncm91cCk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xMDUxPXN0YXRpYyBpbnQgX19pbml0IGh1Z2VwYWdlX2luaXQodm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEwNjktXG5tbS9odWdlX21lbW9yeS5jOjEwNzA6XHRlcnIgPSBraHVnZXBhZ2VkX2luaXQoKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTA3MS1cdGlmIChlcnIpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMDg3LVxubW0vaHVnZV9tZW1vcnkuYzoxMDg4Olx0ZXJyID0gc3RhcnRfc3RvcF9raHVnZXBhZ2VkKCk7XG5tbS9odWdlX21lbW9yeS5jLTEwODktXHRpZiAoZXJyKVxubW0vaHVnZV9tZW1vcnkuYzoxMDkwOlx0XHRnb3RvIGVycl9raHVnZXBhZ2VkO1xubW0vaHVnZV9tZW1vcnkuYy0xMDkxLVxubW0vaHVnZV9tZW1vcnkuYy0xMDkyLVx0cmV0dXJuIDA7XG5tbS9odWdlX21lbW9yeS5jOjEwOTM6ZXJyX2todWdlcGFnZWQ6XG5tbS9odWdlX21lbW9yeS5jLTEwOTQtXHR0aHBfc2hyaW5rZXJfZXhpdCgpO1xubW0vaHVnZV9tZW1vcnkuYy0xMDk1LWVycl9zaHJpbmtlcjpcbm1tL2h1Z2VfbWVtb3J5LmM6MTA5NjpcdGtodWdlcGFnZWRfZGVzdHJveSgpO1xubW0vaHVnZV9tZW1vcnkuYy0xMDk3LWVycl9zbGFiOlxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTUyMD12bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTUzMC1cdFx0cmV0dXJuIHJldDtcbm1tL2h1Z2VfbWVtb3J5LmM6MTUzMTpcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgdm1hLVx1MDAzZXZtX2ZsYWdzKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTUzMi1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ1NDc9c3RhdGljIGJvb2wgdGhwX3VuZGVydXNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU1MS1cbm1tL2h1Z2VfbWVtb3J5LmM6NDU1MjpcdGlmIChraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgPT0gSFBBR0VfUE1EX05SIC0gMSlcbm1tL2h1Z2VfbWVtb3J5LmMtNDU1My1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU1OS1cdFx0aWYgKHBhZ2VzX2lkZW50aWNhbChmb2xpb19wYWdlKGZvbGlvLCBpKSwgWkVST19QQUdFKDApKSkge1xubW0vaHVnZV9tZW1vcnkuYzo0NTYwOlx0XHRcdGlmICgmIzQzOyYjNDM7bnVtX3plcm9fcGFnZXMgXHUwMDNlIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSlcbm1tL2h1Z2VfbWVtb3J5LmMtNDU2MS1cdFx0XHRcdHJldHVybiB0cnVlO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU2Ni1cdFx0XHQgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDU2NzpcdFx0XHRpZiAoJiM0MzsmIzQzO251bV9maWxsZWRfcGFnZXMgXHUwMDNlPSBIUEFHRV9QTURfTlIgLSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmUpXG5tbS9odWdlX21lbW9yeS5jLTQ1NjgtXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vaW50ZXJuYWwuaC0xMC0jaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG5tbS9pbnRlcm5hbC5oOjExOiNpbmNsdWRlIFx1MDAzY2xpbnV4L2todWdlcGFnZWQuaFx1MDAzZVxubW0vaW50ZXJuYWwuaC0xMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4tLVxubW0vaW50ZXJuYWwuaD03MDk9cG1kX3QgKm1tX2ZpbmRfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpO1xuLS1cbm1tL2ludGVybmFsLmgtNzExLS8qXG5tbS9pbnRlcm5hbC5oOjcxMjogKiBpbiBtbS9raHVnZXBhZ2VkLmNcbm1tL2ludGVybmFsLmgtNzEzLSAqL1xuLS1cbm1tL2todWdlcGFnZWQuYy0xMS0jaW5jbHVkZSBcdTAwM2NsaW51eC9rdGhyZWFkLmhcdTAwM2Vcbm1tL2todWdlcGFnZWQuYzoxMjojaW5jbHVkZSBcdTAwM2NsaW51eC9raHVnZXBhZ2VkLmhcdTAwM2Vcbm1tL2todWdlcGFnZWQuYy0xMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9mcmVlemVyLmhcdTAwM2Vcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MzM9ZW51bSBzY2FuX3Jlc3VsdCB7XG4tLVxubW0va2h1Z2VwYWdlZC5jLTcwLVxubW0va2h1Z2VwYWdlZC5jOjcxOnN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmtodWdlcGFnZWRfdGhyZWFkIF9fcmVhZF9tb3N0bHk7XG5tbS9raHVnZXBhZ2VkLmM6NzI6c3RhdGljIERFRklORV9NVVRFWChraHVnZXBhZ2VkX211dGV4KTtcbm1tL2todWdlcGFnZWQuYy03My1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtNzctICovXG5tbS9raHVnZXBhZ2VkLmM6Nzg6c3RhdGljIHVuc2lnbmVkIGludCBraHVnZXBhZ2VkX3BhZ2VzX3RvX3NjYW4gX19yZWFkX21vc3RseTtcbm1tL2todWdlcGFnZWQuYzo3OTpzdGF0aWMgdW5zaWduZWQgaW50IGtodWdlcGFnZWRfcGFnZXNfY29sbGFwc2VkO1xubW0va2h1Z2VwYWdlZC5jOjgwOnN0YXRpYyB1bnNpZ25lZCBpbnQga2h1Z2VwYWdlZF9mdWxsX3NjYW5zO1xubW0va2h1Z2VwYWdlZC5jOjgxOnN0YXRpYyB1bnNpZ25lZCBpbnQga2h1Z2VwYWdlZF9zY2FuX3NsZWVwX21pbGxpc2VjcyBfX3JlYWRfbW9zdGx5ID0gMTAwMDA7XG5tbS9raHVnZXBhZ2VkLmMtODItLyogZHVyaW5nIGZyYWdtZW50YXRpb24gcG9sbCB0aGUgaHVnZXBhZ2UgYWxsb2NhdG9yIG9uY2UgZXZlcnkgbWludXRlICovXG5tbS9raHVnZXBhZ2VkLmM6ODM6c3RhdGljIHVuc2lnbmVkIGludCBraHVnZXBhZ2VkX2FsbG9jX3NsZWVwX21pbGxpc2VjcyBfX3JlYWRfbW9zdGx5ID0gNjAwMDA7XG5tbS9raHVnZXBhZ2VkLmM6ODQ6c3RhdGljIHVuc2lnbmVkIGxvbmcga2h1Z2VwYWdlZF9zbGVlcF9leHBpcmU7XG5tbS9raHVnZXBhZ2VkLmM6ODU6c3RhdGljIERFRklORV9TUElOTE9DSyhraHVnZXBhZ2VkX21tX2xvY2spO1xubW0va2h1Z2VwYWdlZC5jOjg2OnN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChraHVnZXBhZ2VkX3dhaXQpO1xubW0va2h1Z2VwYWdlZC5jLTg3LS8qXG4tLVxubW0va2h1Z2VwYWdlZC5jLTkxLSAqXG5tbS9raHVnZXBhZ2VkLmM6OTI6ICogTm90ZSB0aGF0IHRoZXNlIGFyZSBvbmx5IHJlc3BlY3RlZCBpZiBjb2xsYXBzZSB3YXMgaW5pdGlhdGVkIGJ5IGtodWdlcGFnZWQuXG5tbS9raHVnZXBhZ2VkLmMtOTMtICovXG5tbS9raHVnZXBhZ2VkLmMtOTQtI2RlZmluZSBLSFVHRVBBR0VEX01BWF9QVEVTX0xJTUlUIChIUEFHRV9QTURfTlIgLSAxKVxubW0va2h1Z2VwYWdlZC5jOjk1OnVuc2lnbmVkIGludCBraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgX19yZWFkX21vc3RseTtcbm1tL2todWdlcGFnZWQuYzo5NjpzdGF0aWMgdW5zaWduZWQgaW50IGtodWdlcGFnZWRfbWF4X3B0ZXNfc3dhcCBfX3JlYWRfbW9zdGx5O1xubW0va2h1Z2VwYWdlZC5jOjk3OnN0YXRpYyB1bnNpZ25lZCBpbnQga2h1Z2VwYWdlZF9tYXhfcHRlc19zaGFyZWQgX19yZWFkX21vc3RseTtcbm1tL2todWdlcGFnZWQuYy05OC1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTA2PXN0cnVjdCBjb2xsYXBzZV9jb250cm9sIHtcbm1tL2todWdlcGFnZWQuYzoxMDc6XHRib29sIGlzX2todWdlcGFnZWQ7XG5tbS9raHVnZXBhZ2VkLmMtMTA4LVxuLS1cbm1tL2todWdlcGFnZWQuYy0xMTEtXG5tbS9raHVnZXBhZ2VkLmM6MTEyOlx0LyogTnVtIHBhZ2VzIHNjYW5uZWQgKHNlZSBraHVnZXBhZ2VkX3BhZ2VzX3RvX3NjYW4pICovXG5tbS9raHVnZXBhZ2VkLmMtMTEzLVx0dW5zaWduZWQgaW50IHByb2dyZXNzO1xuLS1cbm1tL2todWdlcGFnZWQuYy0xMjItLyoqXG5tbS9raHVnZXBhZ2VkLmM6MTIzOiAqIHN0cnVjdCBraHVnZXBhZ2VkX3NjYW4gLSBjdXJzb3IgZm9yIHNjYW5uaW5nXG5tbS9raHVnZXBhZ2VkLmMtMTI0LSAqIEBtbV9oZWFkOiB0aGUgaGVhZCBvZiB0aGUgbW0gbGlzdCB0byBzY2FuXG4tLVxubW0va2h1Z2VwYWdlZC5jLTEyNy0gKlxubW0va2h1Z2VwYWdlZC5jOjEyODogKiBUaGVyZSBpcyBvbmx5IHRoZSBvbmUga2h1Z2VwYWdlZF9zY2FuIGluc3RhbmNlIG9mIHRoaXMgY3Vyc29yIHN0cnVjdHVyZS5cbm1tL2todWdlcGFnZWQuYy0xMjktICovXG5tbS9raHVnZXBhZ2VkLmM6MTMwOnN0cnVjdCBraHVnZXBhZ2VkX3NjYW4ge1xubW0va2h1Z2VwYWdlZC5jLTEzMS1cdHN0cnVjdCBsaXN0X2hlYWQgbW1faGVhZDtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTM1LVxubW0va2h1Z2VwYWdlZC5jOjEzNjpzdGF0aWMgc3RydWN0IGtodWdlcGFnZWRfc2NhbiBraHVnZXBhZ2VkX3NjYW4gPSB7XG5tbS9raHVnZXBhZ2VkLmM6MTM3Olx0Lm1tX2hlYWQgPSBMSVNUX0hFQURfSU5JVChraHVnZXBhZ2VkX3NjYW4ubW1faGVhZCksXG5tbS9raHVnZXBhZ2VkLmMtMTM4LX07XG4tLVxubW0va2h1Z2VwYWdlZC5jPTE0MT1zdGF0aWMgc3NpemVfdCBzY2FuX3NsZWVwX21pbGxpc2Vjc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xNDQte1xubW0va2h1Z2VwYWdlZC5jOjE0NTpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXVcXG5cJiMzNDssIGtodWdlcGFnZWRfc2Nhbl9zbGVlcF9taWxsaXNlY3MpO1xubW0va2h1Z2VwYWdlZC5jLTE0Ni19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTE0OD1zdGF0aWMgc3NpemVfdCBfX3NsZWVwX21pbGxpc2Vjc19zdG9yZShjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTU4LVx0Km1pbGxpc2VjcyA9IG1zZWNzO1xubW0va2h1Z2VwYWdlZC5jOjE1OTpcdGtodWdlcGFnZWRfc2xlZXBfZXhwaXJlID0gMDtcbm1tL2todWdlcGFnZWQuYzoxNjA6XHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2a2h1Z2VwYWdlZF93YWl0KTtcbm1tL2todWdlcGFnZWQuYy0xNjEtXG4tLVxubW0va2h1Z2VwYWdlZC5jPTE2NT1zdGF0aWMgc3NpemVfdCBzY2FuX3NsZWVwX21pbGxpc2Vjc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTY4LXtcbm1tL2todWdlcGFnZWQuYzoxNjk6XHRyZXR1cm4gX19zbGVlcF9taWxsaXNlY3Nfc3RvcmUoYnVmLCBjb3VudCwgXHUwMDI2a2h1Z2VwYWdlZF9zY2FuX3NsZWVwX21pbGxpc2Vjcyk7XG5tbS9raHVnZXBhZ2VkLmMtMTcwLX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTc0PXN0YXRpYyBzc2l6ZV90IGFsbG9jX3NsZWVwX21pbGxpc2Vjc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xNzcte1xubW0va2h1Z2VwYWdlZC5jOjE3ODpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXVcXG5cJiMzNDssIGtodWdlcGFnZWRfYWxsb2Nfc2xlZXBfbWlsbGlzZWNzKTtcbm1tL2todWdlcGFnZWQuYy0xNzktfVxuLS1cbm1tL2todWdlcGFnZWQuYz0xODE9c3RhdGljIHNzaXplX3QgYWxsb2Nfc2xlZXBfbWlsbGlzZWNzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xODQte1xubW0va2h1Z2VwYWdlZC5jOjE4NTpcdHJldHVybiBfX3NsZWVwX21pbGxpc2Vjc19zdG9yZShidWYsIGNvdW50LCBcdTAwMjZraHVnZXBhZ2VkX2FsbG9jX3NsZWVwX21pbGxpc2Vjcyk7XG5tbS9raHVnZXBhZ2VkLmMtMTg2LX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTkwPXN0YXRpYyBzc2l6ZV90IHBhZ2VzX3RvX3NjYW5fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTkzLXtcbm1tL2todWdlcGFnZWQuYzoxOTQ6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyV1XFxuXCYjMzQ7LCBraHVnZXBhZ2VkX3BhZ2VzX3RvX3NjYW4pO1xubW0va2h1Z2VwYWdlZC5jLTE5NS19XG5tbS9raHVnZXBhZ2VkLmM9MTk2PXN0YXRpYyBzc2l6ZV90IHBhZ2VzX3RvX3NjYW5fc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIwNi1cbm1tL2todWdlcGFnZWQuYzoyMDc6XHRraHVnZXBhZ2VkX3BhZ2VzX3RvX3NjYW4gPSBwYWdlcztcbm1tL2todWdlcGFnZWQuYy0yMDgtXG4tLVxubW0va2h1Z2VwYWdlZC5jPTIxND1zdGF0aWMgc3NpemVfdCBwYWdlc19jb2xsYXBzZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjE3LXtcbm1tL2todWdlcGFnZWQuYzoyMTg6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyV1XFxuXCYjMzQ7LCBraHVnZXBhZ2VkX3BhZ2VzX2NvbGxhcHNlZCk7XG5tbS9raHVnZXBhZ2VkLmMtMjE5LX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MjIzPXN0YXRpYyBzc2l6ZV90IGZ1bGxfc2NhbnNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjI2LXtcbm1tL2todWdlcGFnZWQuYzoyMjc6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyV1XFxuXCYjMzQ7LCBraHVnZXBhZ2VkX2Z1bGxfc2NhbnMpO1xubW0va2h1Z2VwYWdlZC5jLTIyOC19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTIzOD1zdGF0aWMgc3NpemVfdCBkZWZyYWdfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI0NC19XG5tbS9raHVnZXBhZ2VkLmM6MjQ1OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUga2h1Z2VwYWdlZF9kZWZyYWdfYXR0ciA9XG5tbS9raHVnZXBhZ2VkLmMtMjQ2LVx0X19BVFRSX1JXKGRlZnJhZyk7XG4tLVxubW0va2h1Z2VwYWdlZC5jLTI0OC0vKlxubW0va2h1Z2VwYWdlZC5jOjI0OTogKiBtYXhfcHRlc19ub25lIGNvbnRyb2xzIGlmIGtodWdlcGFnZWQgc2hvdWxkIGNvbGxhcHNlIGh1Z2VwYWdlcyBvdmVyXG5tbS9raHVnZXBhZ2VkLmMtMjUwLSAqIGFueSB1bm1hcHBlZCBwdGVzIGluIHR1cm4gcG90ZW50aWFsbHkgaW5jcmVhc2luZyB0aGUgbWVtb3J5XG5tbS9raHVnZXBhZ2VkLmM6MjUxOiAqIGZvb3RwcmludCBvZiB0aGUgdm1hcy4gV2hlbiBtYXhfcHRlc19ub25lIGlzIDAga2h1Z2VwYWdlZCB3aWxsIG5vdFxubW0va2h1Z2VwYWdlZC5jLTI1Mi0gKiByZWR1Y2UgdGhlIGF2YWlsYWJsZSBmcmVlIG1lbW9yeSBpbiB0aGUgc3lzdGVtIGFzIGl0XG5tbS9raHVnZXBhZ2VkLmMtMjUzLSAqIHJ1bnMuIEluY3JlYXNpbmcgbWF4X3B0ZXNfbm9uZSB3aWxsIGluc3RlYWQgcG90ZW50aWFsbHkgcmVkdWNlIHRoZVxubW0va2h1Z2VwYWdlZC5jOjI1NDogKiBmcmVlIG1lbW9yeSBpbiB0aGUgc3lzdGVtIGR1cmluZyB0aGUga2h1Z2VwYWdlZCBzY2FuLlxubW0va2h1Z2VwYWdlZC5jLTI1NS0gKi9cbm1tL2todWdlcGFnZWQuYz0yNTY9c3RhdGljIHNzaXplX3QgbWF4X3B0ZXNfbm9uZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yNTkte1xubW0va2h1Z2VwYWdlZC5jOjI2MDpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXVcXG5cJiMzNDssIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSk7XG5tbS9raHVnZXBhZ2VkLmMtMjYxLX1cbm1tL2todWdlcGFnZWQuYz0yNjI9c3RhdGljIHNzaXplX3QgbWF4X3B0ZXNfbm9uZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjcyLVxubW0va2h1Z2VwYWdlZC5jOjI3MzpcdGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSA9IG1heF9wdGVzX25vbmU7XG5tbS9raHVnZXBhZ2VkLmMtMjc0LVxuLS1cbm1tL2todWdlcGFnZWQuYy0yNzYtfVxubW0va2h1Z2VwYWdlZC5jOjI3NzpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZV9hdHRyID1cbm1tL2todWdlcGFnZWQuYy0yNzgtXHRfX0FUVFJfUlcobWF4X3B0ZXNfbm9uZSk7XG4tLVxubW0va2h1Z2VwYWdlZC5jPTI4MD1zdGF0aWMgc3NpemVfdCBtYXhfcHRlc19zd2FwX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI4My17XG5tbS9raHVnZXBhZ2VkLmM6Mjg0Olx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDsldVxcblwmIzM0Oywga2h1Z2VwYWdlZF9tYXhfcHRlc19zd2FwKTtcbm1tL2todWdlcGFnZWQuYy0yODUtfVxuLS1cbm1tL2todWdlcGFnZWQuYz0yODc9c3RhdGljIHNzaXplX3QgbWF4X3B0ZXNfc3dhcF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjk3LVxubW0va2h1Z2VwYWdlZC5jOjI5ODpcdGtodWdlcGFnZWRfbWF4X3B0ZXNfc3dhcCA9IG1heF9wdGVzX3N3YXA7XG5tbS9raHVnZXBhZ2VkLmMtMjk5LVxuLS1cbm1tL2todWdlcGFnZWQuYy0zMDItXG5tbS9raHVnZXBhZ2VkLmM6MzAzOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUga2h1Z2VwYWdlZF9tYXhfcHRlc19zd2FwX2F0dHIgPVxubW0va2h1Z2VwYWdlZC5jLTMwNC1cdF9fQVRUUl9SVyhtYXhfcHRlc19zd2FwKTtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MzA2PXN0YXRpYyBzc2l6ZV90IG1heF9wdGVzX3NoYXJlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2todWdlcGFnZWQuYy0zMDkte1xubW0va2h1Z2VwYWdlZC5jOjMxMDpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXVcXG5cJiMzNDssIGtodWdlcGFnZWRfbWF4X3B0ZXNfc2hhcmVkKTtcbm1tL2todWdlcGFnZWQuYy0zMTEtfVxuLS1cbm1tL2todWdlcGFnZWQuYz0zMTM9c3RhdGljIHNzaXplX3QgbWF4X3B0ZXNfc2hhcmVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2todWdlcGFnZWQuYy0zMjMtXG5tbS9raHVnZXBhZ2VkLmM6MzI0Olx0a2h1Z2VwYWdlZF9tYXhfcHRlc19zaGFyZWQgPSBtYXhfcHRlc19zaGFyZWQ7XG5tbS9raHVnZXBhZ2VkLmMtMzI1LVxuLS1cbm1tL2todWdlcGFnZWQuYy0zMjgtXG5tbS9raHVnZXBhZ2VkLmM6MzI5OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUga2h1Z2VwYWdlZF9tYXhfcHRlc19zaGFyZWRfYXR0ciA9XG5tbS9raHVnZXBhZ2VkLmMtMzMwLVx0X19BVFRSX1JXKG1heF9wdGVzX3NoYXJlZCk7XG5tbS9raHVnZXBhZ2VkLmMtMzMxLVxubW0va2h1Z2VwYWdlZC5jOjMzMjpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqa2h1Z2VwYWdlZF9hdHRyW10gPSB7XG5tbS9raHVnZXBhZ2VkLmM6MzMzOlx0XHUwMDI2a2h1Z2VwYWdlZF9kZWZyYWdfYXR0ci5hdHRyLFxubW0va2h1Z2VwYWdlZC5jOjMzNDpcdFx1MDAyNmtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZV9hdHRyLmF0dHIsXG5tbS9raHVnZXBhZ2VkLmM6MzM1Olx0XHUwMDI2a2h1Z2VwYWdlZF9tYXhfcHRlc19zd2FwX2F0dHIuYXR0cixcbm1tL2todWdlcGFnZWQuYzozMzY6XHRcdTAwMjZraHVnZXBhZ2VkX21heF9wdGVzX3NoYXJlZF9hdHRyLmF0dHIsXG5tbS9raHVnZXBhZ2VkLmMtMzM3LVx0XHUwMDI2cGFnZXNfdG9fc2Nhbl9hdHRyLmF0dHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTM0NC1cbm1tL2todWdlcGFnZWQuYzozNDU6c3RydWN0IGF0dHJpYnV0ZV9ncm91cCBraHVnZXBhZ2VkX2F0dHJfZ3JvdXAgPSB7XG5tbS9raHVnZXBhZ2VkLmM6MzQ2Olx0LmF0dHJzID0ga2h1Z2VwYWdlZF9hdHRyLFxubW0va2h1Z2VwYWdlZC5jOjM0NzpcdC5uYW1lID0gXCYjMzQ7a2h1Z2VwYWdlZFwmIzM0Oyxcbm1tL2todWdlcGFnZWQuYy0zNDgtfTtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MzY3PXN0YXRpYyB1bnNpZ25lZCBpbnQgY29sbGFwc2VfbWF4X3B0ZXNfbm9uZShzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTM2OS17XG5tbS9raHVnZXBhZ2VkLmM6MzcwOlx0Y29uc3QgdW5zaWduZWQgaW50IG1heF9wdGVzX25vbmUgPSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmU7XG5tbS9raHVnZXBhZ2VkLmMtMzcxLVxuLS1cbm1tL2todWdlcGFnZWQuYy0zNzQtXHQvKiBmb3IgTUFEVl9DT0xMQVBTRSwgYWxsb3cgYW55IGVtcHR5L3NoYXJlZCB6ZXJvcGFnZSBQVEVzICovXG5tbS9raHVnZXBhZ2VkLmM6Mzc1Olx0aWYgKCFjYy1cdTAwM2Vpc19raHVnZXBhZ2VkKVxubW0va2h1Z2VwYWdlZC5jLTM3Ni1cdFx0cmV0dXJuIEhQQUdFX1BNRF9OUjtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9NDA2PXN0YXRpYyB1bnNpZ25lZCBpbnQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYyxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNDEyLVx0ICovXG5tbS9raHVnZXBhZ2VkLmM6NDEzOlx0aWYgKCFjYy1cdTAwM2Vpc19raHVnZXBhZ2VkKVxubW0va2h1Z2VwYWdlZC5jLTQxNC1cdFx0cmV0dXJuIEhQQUdFX1BNRF9OUjtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNDIxLVx0LyogZm9yIFBNRCBjb2xsYXBzZSwgcmVzcGVjdCB0aGUgdXNlciBkZWZpbmVkIG1heGltdW0gKi9cbm1tL2todWdlcGFnZWQuYzo0MjI6XHRyZXR1cm4ga2h1Z2VwYWdlZF9tYXhfcHRlc19zaGFyZWQ7XG5tbS9raHVnZXBhZ2VkLmMtNDIzLX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9NDM0PXN0YXRpYyB1bnNpZ25lZCBpbnQgY29sbGFwc2VfbWF4X3B0ZXNfc3dhcChzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTQ0MC1cdCAqL1xubW0va2h1Z2VwYWdlZC5jOjQ0MTpcdGlmICghY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZClcbm1tL2todWdlcGFnZWQuYy00NDItXHRcdHJldHVybiBIUEFHRV9QTURfTlI7XG4tLVxubW0va2h1Z2VwYWdlZC5jLTQ0Ni1cdC8qIGZvciBQTUQgY29sbGFwc2UsIHJlc3BlY3QgdGhlIHVzZXIgZGVmaW5lZCBtYXhpbXVtICovXG5tbS9raHVnZXBhZ2VkLmM6NDQ3Olx0cmV0dXJuIGtodWdlcGFnZWRfbWF4X3B0ZXNfc3dhcDtcbm1tL2todWdlcGFnZWQuYy00NDgtfVxuLS1cbm1tL2todWdlcGFnZWQuYz00NTA9aW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTQ1Ny1cdFx0Lypcbm1tL2todWdlcGFnZWQuYzo0NTg6XHRcdCAqIElmIHRoZSB2bWEgYmVjb21lIGdvb2QgZm9yIGtodWdlcGFnZWQgdG8gc2Nhbixcbm1tL2todWdlcGFnZWQuYy00NTktXHRcdCAqIHJlZ2lzdGVyIGl0IGhlcmUgd2l0aG91dCB3YWl0aW5nIGEgcGFnZSBmYXVsdCB0aGF0XG4tLVxubW0va2h1Z2VwYWdlZC5jLTQ2MS1cdFx0ICovXG5tbS9raHVnZXBhZ2VkLmM6NDYyOlx0XHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWEsICp2bV9mbGFncyk7XG5tbS9raHVnZXBhZ2VkLmMtNDYzLVx0XHRicmVhaztcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNDY3LVx0XHQvKlxubW0va2h1Z2VwYWdlZC5jOjQ2ODpcdFx0ICogU2V0dGluZyBWTV9OT0hVR0VQQUdFIHdpbGwgcHJldmVudCBraHVnZXBhZ2VkIGZyb20gc2Nhbm5pbmdcbm1tL2todWdlcGFnZWQuYzo0Njk6XHRcdCAqIHRoaXMgdm1hIGV2ZW4gaWYgd2UgbGVhdmUgdGhlIG1tIHJlZ2lzdGVyZWQgaW4ga2h1Z2VwYWdlZCBpZlxubW0va2h1Z2VwYWdlZC5jLTQ3MC1cdFx0ICogaXQgZ290IHJlZ2lzdGVyZWQgYmVmb3JlIFZNX05PSFVHRVBBR0Ugd2FzIHNldC5cbi0tXG5tbS9raHVnZXBhZ2VkLmMtNDc3LVxubW0va2h1Z2VwYWdlZC5jOjQ3ODppbnQgX19pbml0IGtodWdlcGFnZWRfaW5pdCh2b2lkKVxubW0va2h1Z2VwYWdlZC5jLTQ3OS17XG4tLVxubW0va2h1Z2VwYWdlZC5jLTQ4My1cbm1tL2todWdlcGFnZWQuYzo0ODQ6XHRraHVnZXBhZ2VkX3BhZ2VzX3RvX3NjYW4gPSBIUEFHRV9QTURfTlIgKiA4O1xubW0va2h1Z2VwYWdlZC5jOjQ4NTpcdGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSA9IEtIVUdFUEFHRURfTUFYX1BURVNfTElNSVQ7XG5tbS9raHVnZXBhZ2VkLmM6NDg2Olx0a2h1Z2VwYWdlZF9tYXhfcHRlc19zd2FwID0gSFBBR0VfUE1EX05SIC8gODtcbm1tL2todWdlcGFnZWQuYzo0ODc6XHRraHVnZXBhZ2VkX21heF9wdGVzX3NoYXJlZCA9IEhQQUdFX1BNRF9OUiAvIDI7XG5tbS9raHVnZXBhZ2VkLmMtNDg4LVxuLS1cbm1tL2todWdlcGFnZWQuYy00OTEtXG5tbS9raHVnZXBhZ2VkLmM6NDkyOnZvaWQgX19pbml0IGtodWdlcGFnZWRfZGVzdHJveSh2b2lkKVxubW0va2h1Z2VwYWdlZC5jLTQ5My17XG4tLVxubW0va2h1Z2VwYWdlZC5jPTUyMD1zdGF0aWMgYm9vbCBodWdlcGFnZV9lbmFibGVkKHZvaWQpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTUzNy1cbm1tL2todWdlcGFnZWQuYzo1Mzg6dm9pZCBfX2todWdlcGFnZWRfZW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS9raHVnZXBhZ2VkLmMtNTM5LXtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNTQyLVxubW0va2h1Z2VwYWdlZC5jOjU0MzpcdC8qIF9fa2h1Z2VwYWdlZF9leGl0KCkgbXVzdCBub3QgcnVuIGZyb20gdW5kZXIgdXMgKi9cbm1tL2todWdlcGFnZWQuYy01NDQtXHRWTV9CVUdfT05fTU0oY29sbGFwc2VfdGVzdF9leGl0KG1tKSwgbW0pO1xuLS1cbm1tL2todWdlcGFnZWQuYy01NTQtXG5tbS9raHVnZXBhZ2VkLmM6NTU1Olx0c3Bpbl9sb2NrKFx1MDAyNmtodWdlcGFnZWRfbW1fbG9jayk7XG5tbS9raHVnZXBhZ2VkLmMtNTU2LVx0bW1fc2xvdF9pbnNlcnQobW1fc2xvdHNfaGFzaCwgbW0sIHNsb3QpO1xuLS1cbm1tL2todWdlcGFnZWQuYy01NjAtXHQgKi9cbm1tL2todWdlcGFnZWQuYzo1NjE6XHR3YWtldXAgPSBsaXN0X2VtcHR5KFx1MDAyNmtodWdlcGFnZWRfc2Nhbi5tbV9oZWFkKTtcbm1tL2todWdlcGFnZWQuYzo1NjI6XHRsaXN0X2FkZF90YWlsKFx1MDAyNnNsb3QtXHUwMDNlbW1fbm9kZSwgXHUwMDI2a2h1Z2VwYWdlZF9zY2FuLm1tX2hlYWQpO1xubW0va2h1Z2VwYWdlZC5jOjU2MzpcdHNwaW5fdW5sb2NrKFx1MDAyNmtodWdlcGFnZWRfbW1fbG9jayk7XG5tbS9raHVnZXBhZ2VkLmMtNTY0LVxuLS1cbm1tL2todWdlcGFnZWQuYy01NjYtXHRpZiAod2FrZXVwKVxubW0va2h1Z2VwYWdlZC5jOjU2NzpcdFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFx1MDAyNmtodWdlcGFnZWRfd2FpdCk7XG5tbS9raHVnZXBhZ2VkLmMtNTY4LX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9NTc0PXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNTc4LVxubW0va2h1Z2VwYWdlZC5jOjU3OTpcdC8qIElmIGtodWdlcGFnZWQgaXMgc2Nhbm5pbmcgYW4gYW5vbnltb3VzIHZtYSwgYWxsb3cgbVRIUCBjb2xsYXBzZSAqL1xubW0va2h1Z2VwYWdlZC5jLTU4MC1cdGlmICgodHZhX2ZsYWdzID09IFRWQV9LSFVHRVBBR0VEKSBcdTAwMjZcdTAwMjYgdm1hX2lzX2Fub255bW91cyh2bWEpKVxuLS1cbm1tL2todWdlcGFnZWQuYz01ODg9c3RhdGljIGJvb2wgY29sbGFwc2VfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTU5My1cbm1tL2todWdlcGFnZWQuYzo1OTQ6dm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2todWdlcGFnZWQuYy01OTUtXHRcdFx0ICB2bV9mbGFnc190IHZtX2ZsYWdzKVxuLS1cbm1tL2todWdlcGFnZWQuYy01OTgtXHQgICAgXHUwMDI2XHUwMDI2IGNvbGxhcHNlX3Bvc3NpYmxlKHZtYSwgdm1fZmxhZ3MsIFRWQV9LSFVHRVBBR0VEKSlcbm1tL2todWdlcGFnZWQuYzo1OTk6XHRcdF9fa2h1Z2VwYWdlZF9lbnRlcih2bWEtXHUwMDNldm1fbW0pO1xubW0va2h1Z2VwYWdlZC5jLTYwMC19XG5tbS9raHVnZXBhZ2VkLmMtNjAxLVxubW0va2h1Z2VwYWdlZC5jOjYwMjp2b2lkIF9fa2h1Z2VwYWdlZF9leGl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0va2h1Z2VwYWdlZC5jLTYwMy17XG4tLVxubW0va2h1Z2VwYWdlZC5jLTYwNi1cbm1tL2todWdlcGFnZWQuYzo2MDc6XHRzcGluX2xvY2soXHUwMDI2a2h1Z2VwYWdlZF9tbV9sb2NrKTtcbm1tL2todWdlcGFnZWQuYy02MDgtXHRzbG90ID0gbW1fc2xvdF9sb29rdXAobW1fc2xvdHNfaGFzaCwgbW0pO1xubW0va2h1Z2VwYWdlZC5jOjYwOTpcdGlmIChzbG90IFx1MDAyNlx1MDAyNiBraHVnZXBhZ2VkX3NjYW4ubW1fc2xvdCAhPSBzbG90KSB7XG5tbS9raHVnZXBhZ2VkLmMtNjEwLVx0XHRtbV9zbG90X3JlbW92ZShzbG90KTtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNjEyLVx0fVxubW0va2h1Z2VwYWdlZC5jOjYxMzpcdHNwaW5fdW5sb2NrKFx1MDAyNmtodWdlcGFnZWRfbW1fbG9jayk7XG5tbS9raHVnZXBhZ2VkLmMtNjE0LVxuLS1cbm1tL2todWdlcGFnZWQuYy02MjMtXHRcdCAqIHVuZGVyIG1tYXAgc2VtIHJlYWQgbW9kZSkuIFN0b3AgaGVyZSAoYWZ0ZXIgd2UgcmV0dXJuIGFsbFxubW0va2h1Z2VwYWdlZC5jOjYyNDpcdFx0ICogcGFnZXRhYmxlcyB3aWxsIGJlIGRlc3Ryb3llZCkgdW50aWwga2h1Z2VwYWdlZCBoYXMgZmluaXNoZWRcbm1tL2todWdlcGFnZWQuYy02MjUtXHRcdCAqIHdvcmtpbmcgb24gdGhlIHBhZ2V0YWJsZXMgdW5kZXIgdGhlIG1tYXBfbG9jay5cbi0tXG5tbS9raHVnZXBhZ2VkLmM9NjY4PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IF9fY29sbGFwc2VfaHVnZV9wYWdlX2lzb2xhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTcxNS1cdFx0ICovXG5tbS9raHVnZXBhZ2VkLmM6NzE2Olx0XHRpZiAoY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCBcdTAwMjZcdTAwMjYgISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0RST1BQQUJMRSkgXHUwMDI2XHUwMDI2XG5tbS9raHVnZXBhZ2VkLmMtNzE3LVx0XHQgICAgZm9saW9fdGVzdF9sYXp5ZnJlZShmb2xpbykgXHUwMDI2XHUwMDI2ICFwdGVfZGlydHkocHRldmFsKSkge1xuLS1cbm1tL2todWdlcGFnZWQuYy04MDYtXHRcdC8qXG5tbS9raHVnZXBhZ2VkLmM6ODA3Olx0XHQgKiBJZiBjb2xsYXBzZSB3YXMgaW5pdGlhdGVkIGJ5IGtodWdlcGFnZWQsIGNoZWNrIHRoYXQgdGhlcmUgaXNcbm1tL2todWdlcGFnZWQuYy04MDgtXHRcdCAqIGVub3VnaCB5b3VuZyBwdGUgdG8ganVzdGlmeSBjb2xsYXBzaW5nIHRoZSBwYWdlXG5tbS9raHVnZXBhZ2VkLmMtODA5LVx0XHQgKi9cbm1tL2todWdlcGFnZWQuYzo4MTA6XHRcdGlmIChjYy1cdTAwM2Vpc19raHVnZXBhZ2VkIFx1MDAyNlx1MDAyNlxubW0va2h1Z2VwYWdlZC5jLTgxMS1cdFx0ICAgIChwdGVfeW91bmcocHRldmFsKSB8fCBmb2xpb190ZXN0X3lvdW5nKGZvbGlvKSB8fFxuLS1cbm1tL2todWdlcGFnZWQuYy04MTYtXG5tbS9raHVnZXBhZ2VkLmM6ODE3Olx0aWYgKHVubGlrZWx5KGNjLVx1MDAzZWlzX2todWdlcGFnZWQgXHUwMDI2XHUwMDI2ICFyZWZlcmVuY2VkKSkge1xubW0va2h1Z2VwYWdlZC5jLTgxOC1cdFx0cmVzdWx0ID0gU0NBTl9MQUNLX1JFRkVSRU5DRURfUEFHRTtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9OTM0PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IF9fY29sbGFwc2VfaHVnZV9wYWdlX2NvcHkocHRlX3QgKnB0ZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtOTcyLVxubW0va2h1Z2VwYWdlZC5jOjk3MzpzdGF0aWMgdm9pZCBraHVnZXBhZ2VkX2FsbG9jX3NsZWVwKHZvaWQpXG5tbS9raHVnZXBhZ2VkLmMtOTc0LXtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtOTc2LVxubW0va2h1Z2VwYWdlZC5jOjk3NzpcdGFkZF93YWl0X3F1ZXVlKFx1MDAyNmtodWdlcGFnZWRfd2FpdCwgXHUwMDI2d2FpdCk7XG5tbS9raHVnZXBhZ2VkLmMtOTc4LVx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEV8VEFTS19GUkVFWkFCTEUpO1xubW0va2h1Z2VwYWdlZC5jOjk3OTpcdHNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcyhraHVnZXBhZ2VkX2FsbG9jX3NsZWVwX21pbGxpc2VjcykpO1xubW0va2h1Z2VwYWdlZC5jOjk4MDpcdHJlbW92ZV93YWl0X3F1ZXVlKFx1MDAyNmtodWdlcGFnZWRfd2FpdCwgXHUwMDI2d2FpdCk7XG5tbS9raHVnZXBhZ2VkLmMtOTgxLX1cbm1tL2todWdlcGFnZWQuYy05ODItXG5tbS9raHVnZXBhZ2VkLmM6OTgzOnN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCBraHVnZXBhZ2VkX2NvbGxhcHNlX2NvbnRyb2wgPSB7XG5tbS9raHVnZXBhZ2VkLmM6OTg0Olx0LmlzX2todWdlcGFnZWQgPSB0cnVlLFxubW0va2h1Z2VwYWdlZC5jLTk4NS19O1xuLS1cbm1tL2todWdlcGFnZWQuYz05ODc9c3RhdGljIGJvb2wgY29sbGFwc2Vfc2Nhbl9hYm9ydChpbnQgbmlkLCBzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTEwMTAtXG5tbS9raHVnZXBhZ2VkLmM6MTAxMTojZGVmaW5lIGtodWdlcGFnZWRfZGVmcmFnKClcdFx0XHRcdFx0XFxcbm1tL2todWdlcGFnZWQuYy0xMDEyLVx0KHRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzIFx1MDAyNlx0XHRcdFx0XFxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTAxNC1cbm1tL2todWdlcGFnZWQuYzoxMDE1Oi8qIERlZnJhZyBmb3Iga2h1Z2VwYWdlZCB3aWxsIGVudGVyIGRpcmVjdCByZWNsYWltL2NvbXBhY3Rpb24gaWYgbmVjZXNzYXJ5ICovXG5tbS9raHVnZXBhZ2VkLmM6MTAxNjpzdGF0aWMgaW5saW5lIGdmcF90IGFsbG9jX2h1Z2VwYWdlX2todWdlcGFnZWRfZ2ZwbWFzayh2b2lkKVxubW0va2h1Z2VwYWdlZC5jLTEwMTcte1xubW0va2h1Z2VwYWdlZC5jOjEwMTg6XHRyZXR1cm4ga2h1Z2VwYWdlZF9kZWZyYWcoKSA/IEdGUF9UUkFOU0hVR0UgOiBHRlBfVFJBTlNIVUdFX0xJR0hUO1xubW0va2h1Z2VwYWdlZC5jLTEwMTktfVxuLS1cbm1tL2todWdlcGFnZWQuYz0xMDUzPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGh1Z2VwYWdlX3ZtYV9yZXZhbGlkYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTEwNTctXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbm1tL2todWdlcGFnZWQuYzoxMDU4Olx0ZW51bSB0dmFfdHlwZSB0eXBlID0gY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCA/IFRWQV9LSFVHRVBBR0VEIDpcbm1tL2todWdlcGFnZWQuYy0xMDU5LVx0XHRcdFx0IFRWQV9GT1JDRURfQ09MTEFQU0U7XG4tLVxubW0va2h1Z2VwYWdlZC5jLTEwODAtXHQgKiBBbm9uIFZNQSBleHBlY3RlZCwgdGhlIGFkZHJlc3MgbWF5IGJlIHVubWFwcGVkIHRoZW5cbm1tL2todWdlcGFnZWQuYzoxMDgxOlx0ICogcmVtYXBwZWQgdG8gZmlsZSBhZnRlciBraHVnZXBhZ2VkIHJlYXF1aXJlZCB0aGUgbW1hcF9sb2NrLlxubW0va2h1Z2VwYWdlZC5jLTEwODItXHQgKlxuLS1cbm1tL2todWdlcGFnZWQuYz0xMDkxPXN0YXRpYyBpbmxpbmUgZW51bSBzY2FuX3Jlc3VsdCBjaGVja19wbWRfc3RhdGUocG1kX3QgKnBtZClcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTA5OC1cdC8qXG5tbS9raHVnZXBhZ2VkLmM6MTA5OTpcdCAqIFRoZSBmb2xpbyBtYXkgYmUgdW5kZXIgbWlncmF0aW9uIHdoZW4ga2h1Z2VwYWdlZCBpcyB0cnlpbmcgdG9cbm1tL2todWdlcGFnZWQuYy0xMTAwLVx0ICogY29sbGFwc2UgaXQuIE1pZ3JhdGlvbiBzdWNjZXNzIG9yIGZhaWx1cmUgd2lsbCBldmVudHVhbGx5IGVuZFxuLS1cbm1tL2todWdlcGFnZWQuYz0xMTI0PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNoZWNrX3BtZF9zdGlsbF92YWxpZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTEzOC0gKiBCcmluZyBtaXNzaW5nIHBhZ2VzIGluIGZyb20gc3dhcCwgdG8gY29tcGxldGUgVEhQIGNvbGxhcHNlLlxubW0va2h1Z2VwYWdlZC5jOjExMzk6ICogT25seSBkb25lIGlmIGtodWdlcGFnZWRfc2Nhbl9wbWQgYmVsaWV2ZXMgaXQgaXMgd29ydGh3aGlsZS5cbm1tL2todWdlcGFnZWQuYy0xMTQwLSAqXG4tLVxubW0va2h1Z2VwYWdlZC5jPTEyMzk9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgYWxsb2NfY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqKmZvbGlvcCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0va2h1Z2VwYWdlZC5jLTEyNDEte1xubW0va2h1Z2VwYWdlZC5jOjEyNDI6XHRnZnBfdCBnZnAgPSAoY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCA/IGFsbG9jX2h1Z2VwYWdlX2todWdlcGFnZWRfZ2ZwbWFzaygpIDpcbm1tL2todWdlcGFnZWQuYy0xMjQzLVx0XHQgICAgIEdGUF9UUkFOU0hVR0UpO1xuLS1cbm1tL2todWdlcGFnZWQuYz0xNTkyPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NjYW5fcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xNTk4LVx0dW5zaWduZWQgaW50IG1heF9wdGVzX25vbmUgPSBjb2xsYXBzZV9tYXhfcHRlc19ub25lKGNjLCB2bWEsIEhQQUdFX1BNRF9PUkRFUik7XG5tbS9raHVnZXBhZ2VkLmM6MTU5OTpcdGVudW0gdHZhX3R5cGUgdHZhX2ZsYWdzID0gY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCA/IFRWQV9LSFVHRVBBR0VEIDogVFZBX0ZPUkNFRF9DT0xMQVBTRTtcbm1tL2todWdlcGFnZWQuYy0xNjAwLVx0cG1kX3QgKnBtZDtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTcwMC1cdFx0ICovXG5tbS9raHVnZXBhZ2VkLmM6MTcwMTpcdFx0aWYgKGNjLVx1MDAzZWlzX2todWdlcGFnZWQgXHUwMDI2XHUwMDI2ICEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9EUk9QUEFCTEUpIFx1MDAyNlx1MDAyNlxubW0va2h1Z2VwYWdlZC5jLTE3MDItXHRcdCAgICBmb2xpb190ZXN0X2xhenlmcmVlKGZvbGlvKSBcdTAwMjZcdTAwMjYgIXB0ZV9kaXJ0eShwdGV2YWwpKSB7XG4tLVxubW0va2h1Z2VwYWdlZC5jLTE3NjQtXHRcdC8qXG5tbS9raHVnZXBhZ2VkLmM6MTc2NTpcdFx0ICogSWYgY29sbGFwc2Ugd2FzIGluaXRpYXRlZCBieSBraHVnZXBhZ2VkLCBjaGVjayB0aGF0IHRoZXJlIGlzXG5tbS9raHVnZXBhZ2VkLmMtMTc2Ni1cdFx0ICogZW5vdWdoIHlvdW5nIHB0ZSB0byBqdXN0aWZ5IGNvbGxhcHNpbmcgdGhlIHBhZ2Vcbm1tL2todWdlcGFnZWQuYy0xNzY3LVx0XHQgKi9cbm1tL2todWdlcGFnZWQuYzoxNzY4Olx0XHRpZiAoY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCBcdTAwMjZcdTAwMjZcbm1tL2todWdlcGFnZWQuYy0xNzY5LVx0XHQgICAgKHB0ZV95b3VuZyhwdGV2YWwpIHx8IGZvbGlvX3Rlc3RfeW91bmcoZm9saW8pIHx8XG4tLVxubW0va2h1Z2VwYWdlZC5jLTE3NzMtXHR9XG5tbS9raHVnZXBhZ2VkLmM6MTc3NDpcdGlmIChjYy1cdTAwM2Vpc19raHVnZXBhZ2VkIFx1MDAyNlx1MDAyNlxubW0va2h1Z2VwYWdlZC5jLTE3NzUtXHRcdCAgICghcmVmZXJlbmNlZCB8fFxuLS1cbm1tL2todWdlcGFnZWQuYy0xNzkxLW91dDpcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODE2NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLgoKKipJbnZlc3RpZ2F0aW5nIFRSQU5TUEFSRU5UX0hVR0VQQUdFIGFuZCBVU0VSRkFVTFRGRCBpbiBLY29uZmlnKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGZlYXR1cmVzLCBUUkFOU1BBUkVOVF9IVUdFUEFHRSBhbmQgVVNFUkZBVUxURkQsIGFyZSBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGVzIOKAkyBzcGVjaWZpY2FsbHksIEkmIzM5O2xsIHN0YXJ0IHdpdGggYG1tL0tjb25maWdgIGFuZCBzZWUgd2hhdCB0aGUgZGVmaW5pdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhcmUgZm9yIFRSQU5TUEFSRU5UX0hVR0VQQUdFLiBUaGVuLCBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSB0aGUgYEtjb25maWdgIGZvciBVU0VSRkFVTFRGRCwgd2hpY2ggaXMgbGlrZWx5IGluIG9yIG5lYXIgdGhlIHJlbGV2YW50IGNvZGUsIGBmcy91c2VyZmF1bHRmZC5jYCBvciBhIHNpbWlsYXIgZmlsZXN5c3RlbS1zcGVjaWZpYyBkaXJlY3RvcnkuIEkmIzM5O20gYWZ0ZXIgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzIHRvIGdldCBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGFyZSBjb250cm9sbGVkIGF0IGNvbXBpbGUgdGltZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODM1PWNvbmZpZyBNTV9JRFxuLS1cbm1tL0tjb25maWctODM3LVxubW0vS2NvbmZpZzo4Mzg6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04MzktXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg1Nj1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg2MS1cbm1tL0tjb25maWc6ODYyOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xubW0vS2NvbmZpZy04NjMtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NjgtXG5tbS9LY29uZmlnOjg2OTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXG5tbS9LY29uZmlnLTg3MC1cdFx0Ym9vbCBcJiMzNDttYWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NzctXG5tbS9LY29uZmlnOjg3ODpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxubW0vS2NvbmZpZy04NzktXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg4NT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg5NC1cbm1tL0tjb25maWc6ODk1Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcbm1tL0tjb25maWctODk2LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MDQtXG5tbS9LY29uZmlnOjkwNTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05MDYtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MTItXG5tbS9LY29uZmlnOjkxMzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTkxNC1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTIwLVxubW0vS2NvbmZpZzo5MjE6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTIyLVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9OTMwPWNob2ljZVxuLS1cbm1tL0tjb25maWctOTM5LVxubW0vS2NvbmZpZzo5NDA6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxubW0vS2NvbmZpZy05NDEtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0OC1cbm1tL0tjb25maWc6OTQ5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTk1MC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk1Ni1cbm1tL0tjb25maWc6OTU3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTU4LVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NjQtXG5tbS9LY29uZmlnOjk2NTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05NjYtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MTM3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBVc2VyZmF1bHRmZCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGB1c2VyZmF1bHRmZGAgZmVhdHVyZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIHNob3VsZCBwcm9iYWJseSByZWZyZXNoIG15IG1lbW9yeSBvZiBob3cgdGhpcyBpcyBjb25maWd1cmVkLiBMZXQmIzM5O3Mgc3RhcnQgYnkgaGl0dGluZyB0aGUgc291cmNlIGNvZGUgZGlyZWN0bHkg4oCTIHNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IGBmcy91c2VyZmF1bHRmZC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBUaGVuLCB0byBmaWd1cmUgb3V0IGhvdyBpdCYjMzk7cyBlbmFibGVkIG9yIGRpc2FibGVkIGF0IGJ1aWxkIHRpbWUsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgdGhlcmUmIzM5O3MgYSBjb3JyZXNwb25kaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZmxleGlibGUgdGhpcyBmZWF0dXJlIGlzIGFuZCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBjaG9pY2VzLiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgb3Igb3ZlcmFsbCBzeXN0ZW0gYmVoYXZpb3IuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgdG8gd2hhdCBpcyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYz0xMTY2PXN0YXRpYyB2b2lkIHNob3dfc21hcF92bWFfZmxhZ3Moc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTIzNi0jZW5kaWYgLyogQ09ORklHX0FSQ0hfSEFTX1BLRVlTICovXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTIzNzojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUlxuZnMvcHJvYy90YXNrX21tdS5jLTEyMzgtXHRcdFtpbG9nMihWTV9VRkZEX01JTk9SKV1cdD0gXCYjMzQ7dWlcJiMzNDssXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTIzOTojZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUiAqL1xuZnMvcHJvYy90YXNrX21tdS5jOjEyNDA6I2lmZGVmIENPTkZJR19VU0VSRkFVTFRGRF9SV1BcbmZzL3Byb2MvdGFza19tbXUuYy0xMjQxLVx0XHRbaWxvZzIoVk1fVUZGRF9SV1ApXVx0PSBcJiMzNDt1clwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk2MTUKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqVHJhY2luZyB0aGUgVVNFUkZBVUxURkQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZXhhY3QgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYFVTRVJGQVVMVEZEYCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIHN5c3RlbS4gVGhpcyBpcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgaXQgcmVxdWlyZXMgYSBzeXN0ZW1hdGljIGFwcHJvYWNoLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGxldmVyYWdlIHRoZSBLY29uZmlnIGluZnJhc3RydWN0dXJlIGl0c2VsZiwga25vd2luZyBob3cgY3J1Y2lhbCBpdCBpcyB0byBrZXJuZWwgYnVpbGQgY29uZmlndXJhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGBLY29uZmlnYCBsYW5ndWFnZSBhbmQgc2VhcmNoIHRvb2xzIHRvIHBpbnBvaW50IGV2ZXJ5IGluc3RhbmNlIG9mIHRoYXQgc3ltYm9sLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3IgYGZpbmRgIGNvbW1hbmQsIG1heWJlIHVzaW5nIGEgcmVjdXJzaXZlIHNlYXJjaCBhY3Jvc3MgdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgbG9va2luZyBmb3IgdGhlIHN0cmluZyAmIzM0O1VTRVJGQVVMVEZEJiMzNDsuCgpIb3dldmVyLCBJIGtub3cgdGhhdCBqdXN0IHNlYXJjaGluZyBmb3IgdGhlIHN0cmluZyAmIzM0O1VTRVJGQVVMVEZEJiMzNDsgbWlnaHQgYmUgdG9vIGJyb2FkOyB0aGF0IGNvdWxkIHBpY2sgdXAgYW55IHVzYWdlIG9mIHRoYXQgbmFtZSwgbm90IG5lY2Vzc2FyaWx5IHRoZSAqZGVmaW5pdGlvbiogb2YgdGhlIGNvbmZpZyBvcHRpb24uIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UuIEkmIzM5O2xsIGZvY3VzIG9uIEtjb25maWcgZmlsZXMgKC5jb25maWcgb3IgS2NvbmZpZyBmaWxlcykgZGlyZWN0bHkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGZvY3VzIHN0YXlzIG9uIHRoZSBhY3R1YWwgZGVmaW5pdGlvbi4gVGhlIG1vc3QgZWZmZWN0aXZlIGFwcHJvYWNoLCBJIHRoaW5rLCB3aWxsIGludm9sdmUgc2VhcmNoaW5nIGZvciB0aGUgYGNvbmZpZ2Aga2V5d29yZCBmb2xsb3dlZCBieSBgVVNFUkZBVUxURkRgLCBzbyBJIGNhbiBxdWlja2x5IGlkZW50aWZ5IHRoZSBkZWZpbml0aW9uIGl0c2VsZi4KCk9uY2UgSSBoYXZlIHRob3NlIGhpdHMsIEkmIzM5O2xsIG5lZWQgdG8gcXVpY2tseSBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGluIGVhY2ggZmlsZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBhc3NvY2lhdGVkIHdpdGggYFVTRVJGQVVMVEZEYC4gV2hhdCBvdGhlciBvcHRpb25zIGRvZXMgaXQgZGVwZW5kIG9uPyBBcmUgdGhlcmUgYW55IHNlbGVjdCBzdGF0ZW1lbnRzIGludm9sdmVkPyBXaGF0JiMzOTtzIHRoZSBoZWxwIHRleHQgYXNzb2NpYXRlZCB3aXRoIGl0PyBUaGUgYnJvYWRlciBjb250ZXh0IHdpbGwgcmV2ZWFsIHRoZSByYXRpb25hbGUgYmVoaW5kIGl0cyBhdmFpbGFiaWxpdHkgYW5kIGFueSBwcmVjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQuIEkmIzM5O2xsIGxpa2VseSBuZWVkIHRvIHRyYWNlIHRoZSBwYXRocyB0aHJvdWdoIGFueSBgaWZgIHN0YXRlbWVudHMgb3IgZGVwZW5kZW5jaWVzIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgcXVpY2sgYXVkaXQgd2lsbCBnaXZlIG1lIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSBpbiB0aGUga2VybmVsLiBGaW5hbGx5LCBJJiMzOTtsbCBvcmdhbml6ZSBteSBmaW5kaW5ncyB0byBwcm92aWRlIGEgY29tcGxldGUgb3ZlcnZpZXcgb2YgdGhlIG9wdGlvbnMgcmVsYXRlZCB0byBgVVNFUkZBVUxURkRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNFUkZBVUxURkQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzc3PWNvbmZpZyBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1Jcbi0tXG5tbS9LY29uZmlnLTEzODEtXG5tbS9LY29uZmlnOjEzODI6Y29uZmlnIFVTRVJGQVVMVEZEX1JXUFxubW0vS2NvbmZpZy0xMzgzLVx0ZGVmX2Jvb2wgeVxuLS1cbm1tL0tjb25maWctMTM5MC1cbm1tL0tjb25maWc6MTM5MTptZW51Y29uZmlnIFVTRVJGQVVMVEZEXG5tbS9LY29uZmlnLTEzOTItXHRib29sIFwmIzM0O0VuYWJsZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMTg2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIGFyZWEgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIHJlbGV2YW50IHNldHRpbmdzIGFyZSBsaWtlbHkgY2x1c3RlcmVkIHNvbWV3aGVyZSBhcm91bmQgdGhlIGBtbS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYmV0d2VlbiBsaW5lcyAxMzcwIGFuZCAxNDAwLiBUaGlzIHJhbmdlIGZlZWxzIGxpa2UgYSBwbGF1c2libGUgc3BvdCBmb3IgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRvIHJlc2lkZS4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCB3ZSBjYW4gdW5jb3Zlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzcwOlx0XHQgIGRpZmZlcmVuY2UgaW4gdGhlaXIgbmFtZS5cbjEzNzE6XHRcbjEzNzI6XHRjb25maWcgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQXG4xMzczOlx0XHRib29sXG4xMzc0Olx0XHRoZWxwXG4xMzc1Olx0XHQgIEFyY2ggaGFzIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gc3VwcG9ydFxuMTM3NjpcdFxuMTM3NzpcdGNvbmZpZyBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcbjEzNzg6XHRcdGJvb2xcbjEzNzk6XHRcdGhlbHBcbjEzODA6XHRcdCAgQXJjaCBoYXMgdXNlcmZhdWx0ZmQgbWlub3IgZmF1bHQgc3VwcG9ydFxuMTM4MTpcdFxuMTM4MjpcdGNvbmZpZyBVU0VSRkFVTFRGRF9SV1BcbjEzODM6XHRcdGRlZl9ib29sIHlcbjEzODQ6XHRcdGRlcGVuZHMgb24gNjRCSVQgXHUwMDI2XHUwMDI2IEFSQ0hfSEFTX1BURV9QUk9UTk9ORSBcdTAwMjZcdTAwMjYgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQXG4xMzg1Olx0XHRoZWxwXG4xMzg2Olx0XHQgIFVzZXJmYXVsdGZkIHJlYWQtd3JpdGUgcHJvdGVjdGlvbiAoVUZGRElPX1JXUFJPVEVDVCkgZGVsaXZlcnMgYVxuMTM4NzpcdFx0ICB1c2VyZmF1bHRmZCBub3RpZmljYXRpb24gb24gZXZlcnkgYWNjZXNzIC0tIHJlYWQgb3Igd3JpdGUgLS0gdG8gYVxuMTM4ODpcdFx0ICBwcm90ZWN0ZWQgcmFuZ2UsIGxldHRpbmcgdXNlcnNwYWNlIG9ic2VydmUgdGhlIHdvcmtpbmcgc2V0IG9mIGFcbjEzODk6XHRcdCAgcHJvY2Vzcy5cbjEzOTA6XHRcbjEzOTE6XHRtZW51Y29uZmlnIFVTRVJGQVVMVEZEXG4xMzkyOlx0XHRib29sIFwmIzM0O0VuYWJsZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsXCYjMzQ7XG4xMzkzOlx0XHRkZXBlbmRzIG9uIE1NVVxuMTM5NDpcdFx0aGVscFxuMTM5NTpcdFx0ICBFbmFibGUgdGhlIHVzZXJmYXVsdGZkKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gaW50ZXJjZXB0IGFuZFxuMTM5NjpcdFx0ICBoYW5kbGUgcGFnZSBmYXVsdHMgaW4gdXNlcmxhbmQuXG4xMzk3Olx0XG4xMzk4Olx0aWYgVVNFUkZBVUxURkRcbjEzOTk6XHRjb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4xNDAwOlx0XHRib29sIFwmIzM0O1VzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gc3VwcG9ydCBmb3Igc2htZW0vaHVnZXRsYmZzXCYjMzQ7XG4xNDAxOlx0XHRkZWZhdWx0IHlcbjE0MDI6XHRcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQXG4xNDAzOlx0XG4xNDA0Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwODM4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyBgdXNlcmZhdWx0ZmRfbWlub3JgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgdXNlcmZhdWx0ZmRfbWlub3JgIHZhcmlhYmxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8ga25vdyAqd2hlcmUqIHRoaXMgaXMgZGVmaW5lZC4gTXkgaW5zdGluY3QgaXMgdG8gZ3JlcCBmb3IgaXQg4oCTIHRoYXQmIzM5O3MgdGhlIGZhc3Rlc3Qgd2F5IHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIGl0cyB1c2FnZSBhbmQgbG9jYXRpb24gd2l0aGluIHRoZSBjb2RlYmFzZS4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgbGVhZCBtZSB0byB0aGUgcmVsZXZhbnQgc3RydWN0dXJlIG9yIGZ1bmN0aW9uIGRlZmluaXRpb24uIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNlcmZhdWx0ZmRfbWlub3ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MjEyPXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yMTYtXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoyMTc6c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX21pbm9yKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjE4LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0zNjE9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX3dwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTM2NS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjM2NjpzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfbWlub3Ioc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0zNjcte1xuLS1cbm1tL2h1Z2V0bGIuYz01NzUyPXN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfbm9fcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9odWdldGxiLmMtNTg3OS1cdFx0LyogQ2hlY2sgZm9yIHBhZ2UgaW4gdXNlcmZhdWx0IHJhbmdlLiAqL1xubW0vaHVnZXRsYi5jOjU4ODA6XHRcdGlmICh1c2VyZmF1bHRmZF9taW5vcih2bWEpKSB7XG5tbS9odWdldGxiLmMtNTg4MS1cdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLS1cbm1tL2todWdlcGFnZWQuYz0xODU2PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xOTA1LVx0ICovXG5tbS9raHVnZXBhZ2VkLmM6MTkwNjpcdGlmICh1c2VyZmF1bHRmZF9taW5vcih2bWEpKVxubW0va2h1Z2VwYWdlZC5jLTE5MDctXHRcdHJldHVybiBTQ0FOX1BURV9VRkZEO1xuLS1cbm1tL3NobWVtLmM9MjQxNz1zdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9zaG1lbS5jLTI0NDEtXHRmb2xpbyA9IGZpbGVtYXBfZ2V0X2VudHJ5KGlub2RlLVx1MDAzZWlfbWFwcGluZywgaW5kZXgpO1xubW0vc2htZW0uYzoyNDQyOlx0aWYgKGZvbGlvIFx1MDAyNlx1MDAyNiB2bWEgXHUwMDI2XHUwMDI2IHVzZXJmYXVsdGZkX21pbm9yKHZtYSkpIHtcbm1tL3NobWVtLmMtMjQ0My1cdFx0aWYgKCF4YV9pc192YWx1ZShmb2xpbykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNTg5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBVc2VyZmF1bHRmZCBLZXJuZWwgSGVhZGVyKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBpbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaGAgaGVhZGVyIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDIxNy4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCBhIHBhcnRpY3VsYXIgcGllY2Ugb2YgZnVuY3Rpb25hbGl0eSBvciBkYXRhIHN0cnVjdHVyZSByZWxhdGVkIHRvIHVzZXJmYXVsdGZkIHRoYXQmIzM5O3MgZGVmaW5lZCBvciB1c2VkIGFyb3VuZCB0aGF0IGFyZWEuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gZXhwZWN0aW5nIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGNvbnRleHQsIGFuZCBhbnkgc3VidGxldGllcyBpbiB0aGUgaW1wbGVtZW50YXRpb24gc2hvdWxkIGp1bXAgb3V0IGF0IG1lIGFzIEkgcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgZ29hbCBpcyB0byBleHRyYWN0IGEgc3BlY2lmaWMgYXNwZWN0IG9mIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMDpcdH1cbiAyMTE6XHRcbiAyMTI6XHRzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gMjEzOlx0e1xuIDIxNDpcdFx0cmV0dXJuIHZtYV90ZXN0X2FueV9tYXNrKHZtYSwgVk1BX1VGRkRfV1ApO1xuIDIxNTpcdH1cbiAyMTY6XHRcbiAyMTc6XHRzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfbWlub3Ioc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gMjE4Olx0e1xuIDIxOTpcdFx0cmV0dXJuIHZtYV90ZXN0X2FueV9tYXNrKHZtYSwgVk1BX1VGRkRfTUlOT1IpO1xuIDIyMDpcdH1cbiAyMjE6XHRcbiAyMjI6XHRzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfcndwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIDIyMzpcdHtcbiAyMjQ6XHRcdC8qXG4gMjI1Olx0XHQgKiBDYWxsZXJzIGdhdGUgUEFHRV9OT05FIHVzYWdlIG9uIHRoaXM7IFBBR0VfTk9ORSBpcyBhIEJVSUxEX0JVRygpXG4gMjI2Olx0XHQgKiB3aXRob3V0IENPTkZJR19BUkNIX0hBU19QVEVfUFJPVE5PTkUsIHNvIGZvbGQgdG8gZmFsc2UuXG4gMjI3Olx0XHQgKi9cbiAyMjg6XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQVJDSF9IQVNfUFRFX1BST1ROT05FKSlcbiAyMjk6XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjEzNQoJCQkJCQkJb3V0cHV0OiA2MwoJCQkJCQkJdGhvdWdodHM6IDczMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHVzZXJmYXVsdGZkIGFuZCBUcmFuc3BhcmVudCBIdWdlcGFnZXMgSW50ZXJhY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgaG93IFRyYW5zcGFyZW50IEh1Z2VwYWdlcyAoVEhQKSBpbnRlcmFjdHMgd2l0aCB1c2VyZmF1bHRmZCwgc3BlY2lmaWNhbGx5IHRoZSBtaW5vciBmYXVsdCBoYW5kbGluZy4gVGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAsIHdoZXJlIHRoZXkmIzM5O3ZlIGFkZGVkIGEgY2hlY2s6IGlmIGEgVk1BIGlzIHJlZ2lzdGVyZWQgZm9yIHVzZXJmYXVsdGZkIG1pbm9yIGhhbmRsaW5nLCBkb24mIzM5O3QgY29sbGFwc2UgaXQgaW50byBhIFRIUC4gVGhpcyBtYWtlcyBzZW5zZTsgdXNlcmZhdWx0ZmQgbWlub3IgVk1BcyBhcmUgZXhwbGljaXRseSBtYW5hZ2VkIGJ5IHVzZXJzcGFjZSwgc28gY29sbGFwc2luZyB0aGVtIHdvdWxkIGJyZWFrIHRoYXQuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyB3b3J0aCBmdXp6aW5nPyYjMzQ7IEFic29sdXRlbHkhIFRoaXMgaXMgc21hY2sgZGFiIGluIHRoZSBtaWRkbGUgb2YgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIGBraHVnZXBhZ2VkYCwgYHVzZXJmYXVsdGZkYCwgYW5kIFRIUHMg4oCTIGFsbCBvZiB3aGljaCBhcmUgY3JpdGljYWwgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhpcyBjb2RlIGlzIHRvdWNoZWQgYnkgc2V2ZXJhbCBzeXN0ZW0gY2FsbHMgdGhhdCBhcmUgbGlrZWx5IGV4cG9zZWQgdG8gZnV6emluZy4gSSBjYW4gc2VlIHRoaXMgYmVpbmcgdHJpZ2dlcmVkIHRocm91Z2ggYHVzZXJmYXVsdGZkYCwgYG1hZHZpc2VgIHdpdGggYE1BRFZfQ09MTEFQU0VgLCBgbW1hcGAgY2FsbHMsIHNobWVtLCB0bXBmcywgZmlsZS1iYWNrZWQgbWVtb3J5IGludGVyYWN0aW9ucywgYW5kIGV2ZW4gaG93IHRoZSBga2h1Z2VwYWdlZGAga3RocmVhZCBpdHNlbGYgd29ya3MuIEl0JiMzOTtzIGEgZ29sZG1pbmUuCgpUbyBjb25maXJtIHJlYWNoYWJpbGl0eSwgSSBuZWVkIHRvIGtub3cgaG93IHVzZXJzcGFjZSBjYW4gYWN0dWFsbHkgY3JlYXRlIGEgdXNlcmZhdWx0ZmQgbWlub3IgcmVnaXN0ZXJlZCBWTUEuIEl0IGxvb2tzIGxpa2UgYHNobWVtYCwgYGh1Z2V0bGJmc2AsIG9yIGEgcmVndWxhciBmaWxlIGNvdWxkIGRvIGl0LiBUaGVuLCBjYWxsaW5nIGBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpYCBvciBqdXN0IGxldHRpbmcgYGtodWdlcGFnZWRgIHNjYW4gaXQsIG9yIGV2ZW4gdXNpbmcgYHVwcm9iZXNgIG9yIGBjb2xsYXBzZV9maWxlYCBzaG91bGQgYmUgZW5vdWdoIHRvIHRyaWdnZXIgdGhpcy4KCkkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYFVTRVJGQVVMVEZEYCBhcmUgZW5hYmxlZCB0byBldmVuIHRlc3QgdGhpcy4KCk5vdywgZm9yIGZvY3VzIHN5bWJvbHPigKYgSSBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIGVudHJ5cG9pbnRzLiBMZXQmIzM5O3Mgc2VlLi4uIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGxvb2tzIGltcG9ydGFudCwgYnV0IGl0JiMzOTtzIHN0YXRpYywgc28gdGhhdCYjMzk7cyBub3QgaWRlYWwuIEhvd2V2ZXIsIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgaXMgKm5vdCogc3RhdGljLCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBvbmUgdG8gbG9vayBhdCEgU2FtZSBmb3IgYG1hZHZpc2VfY29sbGFwc2VgLCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgLCBhbmQgYGh1Z2VwYWdlX21hZHZpc2VgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoZWlyIGRlY2xhcmF0aW9ucyBhbmQgZGVmaW5pdGlvbnMgdG8gYmUgc3VyZSB0aGV5IGFyZSBub24tc3RhdGljIGFuZCBleHBvc2VkIHRvIHRoZSB3aWRlciBrZXJuZWwgYW5kIGhlbmNlLCB0byB1c2Vyc3BhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oaW50fHZvaWR8ZW51bXxib29sfHVuc2lnbmVkfGxvbmcpIChtYWR2aXNlX2NvbGxhcHNlfGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwfGh1Z2VwYWdlX21hZHZpc2V8a2h1Z2VwYWdlZCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jPTQzND1zdGF0aWMgdW5zaWduZWQgaW50IGNvbGxhcHNlX21heF9wdGVzX3N3YXAoc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjLFxuLS1cbm1tL2todWdlcGFnZWQuYy00NDktXG5tbS9raHVnZXBhZ2VkLmM6NDUwOmludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0va2h1Z2VwYWdlZC5jLTQ1MS1cdFx0ICAgICB2bV9mbGFnc190ICp2bV9mbGFncywgaW50IGFkdmljZSlcbi0tXG5tbS9raHVnZXBhZ2VkLmM9NTg4PXN0YXRpYyBib29sIGNvbGxhcHNlX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2todWdlcGFnZWQuYy01OTMtXG5tbS9raHVnZXBhZ2VkLmM6NTk0OnZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9raHVnZXBhZ2VkLmMtNTk1LVx0XHRcdCAgdm1fZmxhZ3NfdCB2bV9mbGFncylcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTg1Nj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjEwMC0gKi9cbm1tL2todWdlcGFnZWQuYzoyMTAxOnZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2todWdlcGFnZWQuYy0yMTAyLVx0XHRib29sIGluc3RhbGxfcG1kKVxuLS1cbm1tL2todWdlcGFnZWQuYz0zMTI0PWludCBzdGFydF9zdG9wX2todWdlcGFnZWQodm9pZClcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzE1MC1cbm1tL2todWdlcGFnZWQuYzozMTUxOnZvaWQga2h1Z2VwYWdlZF9taW5fZnJlZV9rYnl0ZXNfdXBkYXRlKHZvaWQpXG5tbS9raHVnZXBhZ2VkLmMtMzE1Mi17XG4tLVxubW0va2h1Z2VwYWdlZC5jPTMxNjM9c3RhdGljIGludCBtYWR2aXNlX2NvbGxhcHNlX2Vycm5vKGVudW0gc2Nhbl9yZXN1bHQgcilcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzE5NC1cbm1tL2todWdlcGFnZWQuYzozMTk1OmludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0va2h1Z2VwYWdlZC5jLTMxOTYtXHRcdCAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgKmxvY2tfZHJvcHBlZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQwMTYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBSZWxldmFudCBTeW1ib2xzIGFuZCBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gY29uc2lkZXJpbmcgYWxsIHRoZSByZWxldmFudCBzeW1ib2xzIGluIHRoaXMgYXJlYS4gTGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGJlIGltcG9ydGFudCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBtYWluIHN1YmplY3QuIFJpZ2h0LCBJIHNob3VsZCBiZSBsb29raW5nIGF0IGBtYWR2aXNlX2NvbGxhcHNlYCwgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCwgYW5kIGBodWdlcGFnZV9tYWR2aXNlYC4gVGhvc2UgZmVlbCBsaWtlIHRoZXkmIzM5O3JlIHJlbGF0ZWQsIHNvIEkgbmVlZCB0byBrZWVwIHRoZW0gaW4gbWluZCBhcyBJIGRpZyBkZWVwZXIuCgpOZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSBlc3NlbnRpYWwsIHN0YXJ0aW5nIHdpdGggYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkga25vdyB0aGF0IGRyaXZlcyB0aGUgaW5jbHVzaW9uIG9mIGBodWdlX21lbW9yeS5vYCBhbmQgYGtodWdlcGFnZWQub2AgaW4gYG1tL01ha2VmaWxlYCwgYnV0IEkgc2hvdWxkIGNoZWNrIHRoZSBtYWtlIGZpbGUgdG8gY29uZmlybS4KClRoZW4sIHRoZXJl4oCZcyBgQ09ORklHX1VTRVJGQVVMVEZEYC4gSSBzaG91bGQgbG9vayBpbnRvIHRoYXQgaW4gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SYCwgcGFydGljdWxhcmx5IHNpbmNlIHg4NiBhbmQgb3RoZXIgYXJjaGl0ZWN0dXJlcyBzZWxlY3QgaXQuIEkgc2hvdWxkIGdvIGFuZCBjaGVjayB0aGF0IGFzIHdlbGwgdG8gcm91bmQgb3V0IHRoZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTI1NC1cdHNlbGVjdCBUSFJFQURfSU5GT19JTl9UQVNLXG5hcmNoL2FybTY0L0tjb25maWc6MjU1Olx0c2VsZWN0IEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUiBpZiBVU0VSRkFVTFRGRFxuYXJjaC9hcm02NC9LY29uZmlnLTI1Ni1cdHNlbGVjdCBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfV1AgaWYgVVNFUkZBVUxURkRcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnPTI9Y29uZmlnIExPT05HQVJDSFxuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWctMTMwLVx0c2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBpZiA2NEJJVFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzoxMzE6XHRzZWxlY3QgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SIGlmIDY0QklUIFx1MDAyNlx1MDAyNiBVU0VSRkFVTFRGRFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy0xMzItXHRzZWxlY3QgSEFWRV9BU01fTU9EVkVSU0lPTlNcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTE1My1cdHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEIGlmIDY0QklUIFx1MDAyNlx1MDAyNiBNTVVcbmFyY2gvcmlzY3YvS2NvbmZpZzoxNTQ6XHRzZWxlY3QgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SIGlmIDY0QklUIFx1MDAyNlx1MDAyNiBVU0VSRkFVTFRGRFxuYXJjaC9yaXNjdi9LY29uZmlnLTE1NS1cdHNlbGVjdCBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfV1AgaWYgNjRCSVQgXHUwMDI2XHUwMDI2IE1NVSBcdTAwMjZcdTAwMjYgVVNFUkZBVUxURkQgXHUwMDI2XHUwMDI2IFJJU0NWX0lTQV9TVlJTVzYwVDU5QlxuLS1cbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4NlxuLS1cbmFyY2gveDg2L0tjb25maWctMjEzLVx0c2VsZWN0IEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9XUCAgICAgICAgIGlmIFg4Nl82NCBcdTAwMjZcdTAwMjYgVVNFUkZBVUxURkRcbmFyY2gveDg2L0tjb25maWc6MjE0Olx0c2VsZWN0IEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUlx0aWYgWDg2XzY0IFx1MDAyNlx1MDAyNiBVU0VSRkFVTFRGRFxuYXJjaC94ODYvS2NvbmZpZy0yMTUtXHRzZWxlY3QgSEFWRV9BUkNIX1ZNQVBfU1RBQ0tcdFx0aWYgWDg2XzY0XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTExNjY9c3RhdGljIHZvaWQgc2hvd19zbWFwX3ZtYV9mbGFncyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0xMjM2LSNlbmRpZiAvKiBDT05GSUdfQVJDSF9IQVNfUEtFWVMgKi9cbmZzL3Byb2MvdGFza19tbXUuYzoxMjM3OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTIzOC1cdFx0W2lsb2cyKFZNX1VGRkRfTUlOT1IpXVx0PSBcJiMzNDt1aVwmIzM0OyxcbmZzL3Byb2MvdGFza19tbXUuYzoxMjM5OiNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SICovXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTI0MC0jaWZkZWYgQ09ORklHX1VTRVJGQVVMVEZEX1JXUFxuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0yOTQ9ZW51bSB7XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTUwMS0jZW5kaWZcbmluY2x1ZGUvbGludXgvbW0uaDo1MDI6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcbmluY2x1ZGUvbGludXgvbW0uaC01MDMtI2RlZmluZSBWTV9VRkZEX01JTk9SXHRJTklUX1ZNX0ZMQUcoVUZGRF9NSU5PUilcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtNTIwLSNkZWZpbmUgVk1BX1VGRkRfV1BcdFx0bWtfdm1hX2ZsYWdzKFZNQV9VRkZEX1dQX0JJVClcbmluY2x1ZGUvbGludXgvbW0uaDo1MjE6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcbmluY2x1ZGUvbGludXgvbW0uaC01MjItI2RlZmluZSBWTUFfVUZGRF9NSU5PUlx0XHRta192bWFfZmxhZ3MoVk1BX1VGRkRfTUlOT1JfQklUKVxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaD0xNjA9SUZfSEFWRV9QR19BUkNIXzMoYXJjaF8zKVxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaC0xODItXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmg6MTgzOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmgtMTg0LSMgZGVmaW5lIElGX0hBVkVfVUZGRF9NSU5PUihmbGFnLCBuYW1lKSB7ZmxhZywgbmFtZX0sXG4tLVxubW0vS2NvbmZpZz0xMzcyPWNvbmZpZyBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfV1Bcbi0tXG5tbS9LY29uZmlnLTEzNzYtXG5tbS9LY29uZmlnOjEzNzc6Y29uZmlnIEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUlxubW0vS2NvbmZpZy0xMzc4LVx0Ym9vbFxuLS1cbm1tL3VzZXJmYXVsdGZkLmM9MzcxNj1zdGF0aWMgaW50IHVzZXJmYXVsdGZkX3JlZ2lzdGVyKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTM3NjgtXHRpZiAodWZmZGlvX3JlZ2lzdGVyLm1vZGUgXHUwMDI2IFVGRkRJT19SRUdJU1RFUl9NT0RFX01JTk9SKSB7XG5tbS91c2VyZmF1bHRmZC5jOjM3Njk6I2lmbmRlZiBDT05GSUdfSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXG5tbS91c2VyZmF1bHRmZC5jLTM3NzAtXHRcdGdvdG8gb3V0O1xuLS1cbm1tL3VzZXJmYXVsdGZkLmM9NDMxNj1zdGF0aWMgX191NjQgdWZmZF9hcGlfYXZhaWxhYmxlX2ZlYXR1cmVzKHZvaWQpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy00MzE5LVxubW0vdXNlcmZhdWx0ZmQuYzo0MzIwOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1IpKVxubW0vdXNlcmZhdWx0ZmQuYy00MzIxLVx0XHRmIFx1MDAyNj0gfihVRkZEX0ZFQVRVUkVfTUlOT1JfSFVHRVRMQkZTIHwgVUZGRF9GRUFUVVJFX01JTk9SX1NITUVNKTtcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oPTEwMD1lbnVtIHtcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTI5OS0jZW5kaWZcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmg6MzAwOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTMwMS0jZGVmaW5lIFZNX1VGRkRfTUlOT1JcdElOSVRfVk1fRkxBRyhVRkZEX01JTk9SKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTg3MgoJCQkJCQkJb3V0cHV0OiAxMzYKCQkJCQkJCXRob3VnaHRzOiAxNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29uZmlndXJhdGlvbiBmb3IgVXNlcmZhdWx0ZmQtTWlub3IgU3VwcG9ydCoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JgIGlzIGF1dG9tYXRpY2FsbHkgaGFuZGxlZCBpZiBgVVNFUkZBVUxURkRgIGlzIGVuYWJsZWQgb24gdGhlIHN0YW5kYXJkIGFyY2hpdGVjdHVyZXMgbGlrZSB4ODZfNjQgYW5kIGFybTY0IOKAkyB0aGF0JiMzOTtzIGdvb2QsIG9uZSBsZXNzIHRoaW5nIHRvIHdvcnJ5IGFib3V0LiBUaGVyZWZvcmUsIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYFVTRVJGQVVMVEZEYC4gVGhlc2UgYXJlIHRoZSBrZXkgZW5hYmxlcnMuCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGF0IGV2ZXJ5dGhpbmcgYWxpZ25zIHdpdGggbXkgcmVxdWlyZW1lbnRzLiBZZXMsIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byB0cnVlLCBzbyB0aGF0JiMzOTtzIHRoZSBncmVlbiBsaWdodC4gVGhlIGBFbmFibGVDb25maWdzYCBhcnJheSBjb25maXJtcyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgVVNFUkZBVUxURkRgIGFzIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEFuZCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJyYXkgaGlnaGxpZ2h0cyB0aGUgY3J1Y2lhbCBmdW5jdGlvbnM6IGBtYWR2aXNlX2NvbGxhcHNlYCBhbmQgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYC4gVGhlIHJlYXNvbmluZyBjbGFyaWZpZXMgdGhlIHNwZWNpZmljIGlzc3VlIGFkZHJlc3NlZCDigJMgYSBjaGVjayBpbnRyb2R1Y2VkIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIFRIUHMgZm9yIFZNQXMgdGhhdCBhcmUgdXNpbmcgdXNlcmZhdWx0ZmQtbWlub3IuIEl0IG1ha2VzIHNlbnNlOyB0aGUgcGF0Y2ggaXMgYWJvdXQgcHJvdGVjdGluZyB0aG9zZSBtYXBwaW5ncywgYW5kIHRob3NlIHR3byBmdW5jdGlvbnMgYXJlIGtleSBmb3IgdGhpcyB2dWxuZXJhYmlsaXR5LgoKTm93LCBhbGwgc2VlbXMgd2VsbCwgYW5kIEkgY2FuIG1vdmUgb24gdG8gdGhlIG5leHQgc3RlcCB3aGljaCBpcyB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIEkgY2FuIG5vdyBtb3ZlIHRvIHRoZSBuZXh0IHN0YWdlIG9mIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hZHZpc2VfY29sbGFwc2UmIzM0OywKICAgICYjMzQ7Y29sbGFwc2VfcHRlX21hcHBlZF90aHAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIFRIUCBwYWdlcyB3aXRoaW4gVk1BcyByZWdpc3RlcmVkIHdpdGggdXNlcmZhdWx0ZmQgbWlub3IgZmF1bHQgaGFuZGxpbmcgKHVzZXJmYXVsdGZkX21pbm9yKS4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbGxhcHNlIGxvZ2ljIHJlYWNoYWJsZSB2aWEgbWFkdmlzZShNQURWX0NPTExBUFNFKSBvciBraHVnZXBhZ2VkIGJhY2tncm91bmQgc2Nhbm5pbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFkdmlzZV9jb2xsYXBzZSYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9wdGVfbWFwcGVkX3RocCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKCkgdG8gcHJldmVudCBjb2xsYXBzaW5nIFBURS1tYXBwZWQgVEhQIHBhZ2VzIHdpdGhpbiBWTUFzIHJlZ2lzdGVyZWQgd2l0aCB1c2VyZmF1bHRmZCBtaW5vciBmYXVsdCBoYW5kbGluZyAodXNlcmZhdWx0ZmRfbWlub3IpLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29sbGFwc2UgbG9naWMgcmVhY2hhYmxlIHZpYSBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpIG9yIGtodWdlcGFnZWQgYmFja2dyb3VuZCBzY2FubmluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjozNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gZWFybHkgcmV0dXJuIGNoZWNrIChgdXNlcmZhdWx0ZmRfbWlub3Iodm1hKWApIGluIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKWAgdG8gcHJldmVudCBjb2xsYXBzaW5nIFBURS1tYXBwZWQgVEhQcyBmb3IgVk1BcyByZWdpc3RlcmVkIHdpdGggdXNlcmZhdWx0ZmQgbWlub3IgbW9kZS5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlIG9ubHkgY2hlY2tzIGV4aXN0aW5nIFZNQSBmbGFncyAoYHZtYS1cdTAwM2V2bV9mbGFnc2ApIGFuZCByZXR1cm5zIGFuIGVycm9yIGVudW0gdmFsdWUgKGBTQ0FOX1BURV9VRkZEYCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIG1vZGlmeSBzdHJ1Y3QgbGF5b3V0cy9wYWRkaW5nLCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy5cbi0gS0FTQU4vZ2VuZXJhbCBkZXRlY3RvciBhcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgLyBraHVnZXBhZ2VkIGxvZ2ljLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW4gVk1BIGxpZmVjeWNsZSAvIHBhZ2UgdGFibGUgbWFuYWdlbWVudCB3b3VsZCBmYWxsIHVuZGVyIHN0YW5kYXJkIG1lbW9yeSBtYW5hZ2VtZW50IHNlbWFudGljcywgcGFnZSBmYXVsdHMsIG9yIHBvaW50ZXIgdmFsaWRpdHksIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdHMuXG5cbkhlbmNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTNjYmIzYTNiOTM4ZjQxNjQzNDhkMzU5Mzg1NGViYzI3NjJjOGFhZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDI4IDIyOjMyOjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0va2h1Z2VwYWdlZC5jIGIvbW0va2h1Z2VwYWdlZC5jCmluZGV4IGIyMzdmNmU3NjYyYTUuLjIyMzU2MjI5YzFlNDIgMTAwNjQ0Ci0tLSBhL21tL2todWdlcGFnZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9raHVnZXBhZ2VkLmMKQEAgLTE4OTksNiAmIzQzOzE4OTksMTMgQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ24KIAlpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSkpCiAJCXJldHVybiBTQ0FOX1BURV9VRkZEOwogCiYjNDM7CS8qCiYjNDM7CSAqIFVzZXJmYXVsdGZkLW1pbm9yLXJlZ2lzdGVyZWQgVk1BcyBzaG91bGQgbm90IGJlIGNvbGxhcHNlZCwgYXMKJiM0MzsJICogdXNlcnNwYWNlIGlzIGV4cGVjdGluZyB0byBleHBsaWNpdGx5IGluc3RhbGwgUFRFcy4KJiM0MzsJICovCiYjNDM7CWlmICh1c2VyZmF1bHRmZF9taW5vcih2bWEpKQomIzQzOwkJcmV0dXJuIFNDQU5fUFRFX1VGRkQ7CiYjNDM7CiAJZm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8odm1hLSZndDt2bV9maWxlLSZndDtmX21hcHBpbmcsCiAJCQkgICAgICAgbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBoYWRkcikpOwogCWlmIChJU19FUlIoZm9saW8pKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLaHVnZXBhZ2VkIFBhdGNoOiBVc2VyZmF1bHRmZCBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciBga2h1Z2VwYWdlZC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCB0aGlzIGlzIGRlYWxpbmcgd2l0aCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHVzZXJmYXVsdGZkLiYjMzQ7IEkgaW1tZWRpYXRlbHkgaG9uZSBpbiBvbiB0aGUgYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgZnVuY3Rpb24sIHdoaWNoIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIGF0dGVtcHRpbmcgdG8gY29sbGFwc2UgcGFnZSB0YWJsZSBlbnRyaWVzIGludG8gYSBUSFAgcmVzaWRlcy4KCk5vdywgSSBzZWUgdGhlIGFkZGVkIGNvbmRpdGlvbmFsIGNoZWNrOiBgaWYgKHVzZXJmYXVsdGZkX21pbm9yKHZtYSkpIHJldHVybiBTQ0FOX1BURV9VRkZEO2AuIFRoaXMgaXMgY3JpdGljYWwuIFRoZSBleGlzdGluZyBjaGVjayBhbHJlYWR5IGNvbnNpZGVycyBgdXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSlgLiBUaGUgbmV3IGFkZGl0aW9uIGNsYXJpZmllcyB0aGF0IGlmIGEgVk1BIGhhcyBiZWVuIHJlZ2lzdGVyZWQgYXMgYSBtaW5vciB1c2VyZmF1bHRmZCwgdGhhdCBtZWFucyB1c2Vyc3BhY2UgZXhwbGljaXRseSBleHBlY3RzIHRvIGNvbnRyb2wgdGhlIFBURSBpbnN0YWxsYXRpb24uIFdlICpzaG91bGQgbm90KiBjb2xsYXBzZSB0aG9zZS4gVGhhdCYjMzk7cyB0aGUga2V5IHRha2Vhd2F5IGhlcmUuIFRoaXMgZW5oYW5jZW1lbnQgc2VlbXMgdG8gcHJldmVudCBraHVnZXBhZ2VkIGZyb20gaW50ZXJmZXJpbmcgd2l0aCB1c2Vyc3BhY2UmIzM5O3MgZXhwbGljaXQgUFRFIG1hbmFnZW1lbnQgZm9yIG1pbm9yIHVzZXJmYXVsdGZkIFZNQXMuIFRoZSBpbXBsaWNhdGlvbiBpcyBhdm9pZGluZyB1bmludGVudGlvbmFsIFRIUCBjb2xsYXBzZSBpbiBtaW5vciB1c2VyZmF1bHRmZCBWTUFzIHdoaWNoIGNvdWxkIGNhdXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3VyIGluIHVzZXJzcGFjZSwgc3VjaCBhcyBicm9rZW4gb3IgdW5leHBlY3RlZCBiZWhhdmlvdXIgaW4gdGhlIGZhdWx0LWhhbmRsaW5nIGxvZ2ljLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgc2VtYW50aWNzIG9mIGB1c2VyZmF1bHRmZF9taW5vcmAgYW5kIGB1c2VyZmF1bHRmZF9wcm90ZWN0ZWRgIHRvIGZ1bGx5IGdyYXNwIHRoZSBudWFuY2VzLCBidXQgdGhpcyBwYXRjaCBhcHBlYXJzIHRvIGJlIGEgZ29vZCwgdGFyZ2V0ZWQgc29sdXRpb24gdG8gZW5zdXJlIGNvcnJlY3QgaW50ZXJhY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gcmV2aWV3IHRoZSByZWxhdGVkIGNvZGUgcGF0aHMgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gdG8gZnVsbHkgZXZhbHVhdGUgdGhlIHBvdGVudGlhbCBpbXBhY3QgYW5kIGFueSBjb3JuZXIgY2FzZXMsIGJ1dCB0aGUgaW50ZW50IHNlZW1zIHNvdW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg4NTpcdFx0LypcbjE4ODY6XHRcdCAqIElmIHdlIGFyZSBoZXJlLCB3ZSYjMzk7dmUgc3VjY2VlZGVkIGluIHJlcGxhY2luZyBhbGwgdGhlIG5hdGl2ZSBwYWdlc1xuMTg4NzpcdFx0ICogaW4gdGhlIHBhZ2UgY2FjaGUgd2l0aCBhIHNpbmdsZSBodWdlcGFnZS4gSWYgYSBtbSB3ZXJlIHRvIGZhdWx0LWluXG4xODg4Olx0XHQgKiB0aGlzIG1lbW9yeSAobWFwcGVkIGJ5IGEgc3VpdGFibHkgYWxpZ25lZCBWTUEpLCB3ZSYjMzk7ZCBnZXQgdGhlIGh1Z2VwYWdlXG4xODg5Olx0XHQgKiBhbmQgbWFwIGl0IGJ5IGEgUE1ELCByZWdhcmRsZXNzIG9mIHN5c2ZzIFRIUCBzZXR0aW5ncy4gQXMgc3VjaCwgbGV0JiMzOTtzXG4xODkwOlx0XHQgKiBhbmFsb2dvdXNseSBlbGlkZSBzeXNmcyBUSFAgc2V0dGluZ3MgaGVyZSBhbmQgZm9yY2UgY29sbGFwc2UuXG4xODkxOlx0XHQgKi9cbjE4OTI6XHRcdGlmICghdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXIodm1hLCB2bWEtXHUwMDNldm1fZmxhZ3MsIFRWQV9GT1JDRURfQ09MTEFQU0UsIFBNRF9PUkRFUikpXG4xODkzOlx0XHRcdHJldHVybiBTQ0FOX1ZNQV9DSEVDSztcbjE4OTQ6XHRcbjE4OTU6XHRcdC8qXG4xODk2Olx0XHQgKiBLZWVwIHBtZCBwZ3RhYmxlIHdoaWxlIHRoZSB1ZmZkIGJpdCBpcyBpbiB1c2U7IHNlZSBjb21tZW50IGluXG4xODk3Olx0XHQgKiByZXRyYWN0X3BhZ2VfdGFibGVzKCkuXG4xODk4Olx0XHQgKi9cbjE4OTk6XHRcdGlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSlcbjE5MDA6XHRcdFx0cmV0dXJuIFNDQU5fUFRFX1VGRkQ7XG4xOTAxOlx0XG4xOTAyOlx0XHQvKlxuMTkwMzpcdFx0ICogVXNlcmZhdWx0ZmQtbWlub3ItcmVnaXN0ZXJlZCBWTUFzIHNob3VsZCBub3QgYmUgY29sbGFwc2VkLCBhc1xuMTkwNDpcdFx0ICogdXNlcnNwYWNlIGlzIGV4cGVjdGluZyB0byBleHBsaWNpdGx5IGluc3RhbGwgUFRFcy5cbjE5MDU6XHRcdCAqL1xuMTkwNjpcdFx0aWYgKHVzZXJmYXVsdGZkX21pbm9yKHZtYSkpXG4xOTA3Olx0XHRcdHJldHVybiBTQ0FOX1BURV9VRkZEO1xuMTkwODpcdFxuMTkwOTpcdFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8odm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nLFxuMTkxMDpcdFx0XHRcdCAgICAgICBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGhhZGRyKSk7XG4xOTExOlx0XHRpZiAoSVNfRVJSKGZvbGlvKSlcbjE5MTI6XHRcdFx0cmV0dXJuIFNDQU5fUEFHRV9OVUxMO1xuMTkxMzpcdFxuMTkxNDpcdFx0aWYgKCFpc19wbWRfb3JkZXIoZm9saW9fb3JkZXIoZm9saW8pKSkge1xuMTkxNTpcdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfQ09NUE9VTkQ7XG4xOTE2Olx0XHRcdGdvdG8gZHJvcF9mb2xpbztcbjE5MTc6XHRcdH1cbjE5MTg6XHRcbjE5MTk6XHRcdHJlc3VsdCA9IGZpbmRfcG1kX29yX3RocF9vcl9ub25lKG1tLCBoYWRkciwgXHUwMDI2cG1kKTtcbjE5MjA6XHRcdHN3aXRjaCAocmVzdWx0KSB7XG4xOTIxOlx0XHRjYXNlIFNDQU5fU1VDQ0VFRDpcbjE5MjI6XHRcdFx0YnJlYWs7XG4xOTIzOlx0XHRjYXNlIFNDQU5fTk9fUFRFX1RBQkxFOlxuMTkyNDpcdFx0XHQvKlxuMTkyNTpcdFx0XHQgKiBBbGwgcHRlIGVudHJpZXMgaGF2ZSBiZWVuIHJlbW92ZWQgYW5kIHBtZCBjbGVhcmVkLlxuMTkyNjpcdFx0XHQgKiBTa2lwIGFsbCB0aGUgcHRlIGNoZWNrcyBhbmQganVzdCB1cGRhdGUgdGhlIHBtZCBtYXBwaW5nLlxuMTkyNzpcdFx0XHQgKi9cbjE5Mjg6XHRcdFx0Z290byBtYXliZV9pbnN0YWxsX3BtZDtcbjE5Mjk6XHRcdGRlZmF1bHQ6XG4xOTMwOlx0XHRcdGdvdG8gZHJvcF9mb2xpbztcbjE5MzE6XHRcdH1cbjE5MzI6XHRcbjE5MzM6XHRcdHJlc3VsdCA9IFNDQU5fRkFJTDtcbjE5MzQ6XHRcdHN0YXJ0X3B0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sobW0sIHBtZCwgaGFkZHIsIFx1MDAyNnB0bCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MzkKCQkJCQkJCW91dHB1dDogMjI4CgkJCQkJCQl0aG91Z2h0czogMzk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2g6IEEgRGVlcCBEaXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBwYXRjaC4gSXQmIzM5O3MgaW5qZWN0aW5nIGEgY2hlY2ssIGBpZiAodXNlcmZhdWx0ZmRfbWlub3Iodm1hKSkgcmV0dXJuIFNDQU5fUFRFX1VGRkQ7YCwgcmlnaHQgaW50byBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKClgLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgYSBndWFyZDsgYSBzYWZldHkgbmV0LiBUaGUgYHVzZXJmYXVsdGZkX21pbm9yKHZtYSlgIGNoZWNrIGJvaWxzIGRvd24gdG8gaW5zcGVjdGluZyBgdm1hLSZndDt2bV9mbGFnc2AgYW5kIHNlZWluZyBpZiB0aGUgYFZNX1VGRkRfTUlOT1JgIGZsYWcgaXMgc2V0LiBJZiBpdCAqaXMqLCB0aGUgY29sbGFwc2Ugb2YgUFRFLW1hcHBlZCBUSFBzIHdpdGhpbiBraHVnZXBhZ2VkIGlzIHNob3J0LWNpcmN1aXRlZC4gVGhlIGdvYWwgaXMgY2xlYXI6IHByZXZlbnQga2h1Z2VwYWdlZCBmcm9tIGNvbGxhcHNpbmcgVk1BcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5IHVzZXJmYXVsdGZkIGluICYjMzQ7bWlub3IgbW9kZS4mIzM0OyBUaGlzIGF2b2lkcyBhbnkgdXNlciBzcGFjZSBjb25mdXNpb24sIGFzIHVzZXIgc3BhY2UgZXhwZWN0cyB0byBoYW5kbGUgaXRzIG1pbm9yIGZhdWx0cyBleHBsaWNpdGx5LgoKTm93IGNvbWVzIHRoZSBjcnVjaWFsIHBhcnQ6IHRoZSBzYWZldHkgYXNzZXNzbWVudC4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBEb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXM/IExlYWtzPyBQYWRkaW5nIHByb2JsZW1zPyBSZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeT8gVGhlIGFuc3dlciwgYXMgSSBzZWUgaXQsIGlzIGEgcmVzb3VuZGluZyAmIzM0O25vLiYjMzQ7IFRoaXMgcGF0Y2ggaXMgcmVtYXJrYWJseSBjbGVhbi4gSXQmIzM5O3MgYSBzaW1wbGUsIHRhcmdldGVkIGd1YXJkLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBpbnZvbHZlZC4gVGhlcmUmIzM5O3Mgbm8gY29weWluZyBvZiB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZSDigJMgYSBjcml0aWNhbCBwb2ludC4gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGluZmx1ZW5jaW5nIGJyYW5jaGluZyBsb2dpYy4gSXQmIzM5O3Mgc29sZWx5IGZvY3VzZWQgb24gcHJldmVudGluZyB0aGUgY29sbGFwc2Ugb2YgUFRFcyB0byBQTURzIGZvciB0aG9zZSBzcGVjaWZpYyB1c2VyZmF1bHRmZC1taW5vciBWTUFzLgoKTGV0JiMzOTtzIGRvIGEgcmlnb3JvdXMgS01TQU4gY2hlY2sgZm9yIGdvb2QgbWVhc3VyZS4gSSYjMzk7bSBnb2luZyB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYSBpbiBteSBoZWFkOgoKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgbWlnaHQgYmUgdW5pbml0aWFsaXplZD8gTm9wZSwgdGhpcyBpc24mIzM5O3Qgc2VuZGluZyBhbnl0aGluZy4KMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLCBgdm1hYCBpcyBhIHZhbGlkIGB2bV9hcmVhX3N0cnVjdGAgcG9pbnRlciwgYW5kIGB2bV9mbGFnc2AgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuCjMuICBBbGxvY2F0aW9uIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI/IE5vcGUsIG5vIG5ldyBhbGxvY2F0aW9ucy4KNC4gIEJvdW5kcyBjaGVja3MgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgcmVhZHM/IE5vcGUsIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgdG91Y2ggYW55IG9mIHRoYXQuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBjbGVhcmx5IGBmYWxzZWAuIFRoaXMgaXMgYSBjbGVhbiwgd2VsbC1zY29wZWQgY2hhbmdlLiBJdCYjMzk7cyBhYm91dCBwcm90ZWN0aW5nIGEgc3BlY2lmaWMsIHdlbGwtZGVmaW5lZCB1c2VyIHNwYWNlIGV4cGVjdGF0aW9uIHdpdGhpbiB0aGUgdXNlcmZhdWx0ZmQgZnJhbWV3b3JrLiBUaGUgYWJzZW5jZSBvZiBjb21wbGV4IG1lbW9yeSBtYW5pcHVsYXRpb24gbWFrZXMgaXQgYSB2ZXJ5IGxvdy1yaXNrIHBhdGNoIGZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLiBUaGlzIGlzIGEgZ29vZCBzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFuIGVhcmx5IHJldHVybiBjaGVjayAoYHVzZXJmYXVsdGZkX21pbm9yKHZtYSlgKSBpbiBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKClgIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIFRIUHMgZm9yIFZNQXMgcmVnaXN0ZXJlZCB3aXRoIHVzZXJmYXVsdGZkIG1pbm9yIG1vZGUuXG5cbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZSBvbmx5IGNoZWNrcyBleGlzdGluZyBWTUEgZmxhZ3MgKGB2bWEtXHUwMDNldm1fZmxhZ3NgKSBhbmQgcmV0dXJucyBhbiBlcnJvciBlbnVtIHZhbHVlIChgU0NBTl9QVEVfVUZGRGApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBtb2RpZnkgc3RydWN0IGxheW91dHMvcGFkZGluZywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBib3VuZHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXG4tIEtBU0FOL2dlbmVyYWwgZGV0ZWN0b3IgYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IC8ga2h1Z2VwYWdlZCBsb2dpYy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBidWdzIGluIFZNQSBsaWZlY3ljbGUgLyBwYWdlIHRhYmxlIG1hbmFnZW1lbnQgd291bGQgZmFsbCB1bmRlciBzdGFuZGFyZCBtZW1vcnkgbWFuYWdlbWVudCBzZW1hbnRpY3MsIHBhZ2UgZmF1bHRzLCBvciBwb2ludGVyIHZhbGlkaXR5LCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RzLlxuXG5IZW5jZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFuIGVhcmx5IHJldHVybiBjaGVjayAoYHVzZXJmYXVsdGZkX21pbm9yKHZtYSlgKSBpbiBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKClgIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIFRIUHMgZm9yIFZNQXMgcmVnaXN0ZXJlZCB3aXRoIHVzZXJmYXVsdGZkIG1pbm9yIG1vZGUuXG5cbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZSBvbmx5IGNoZWNrcyBleGlzdGluZyBWTUEgZmxhZ3MgKGB2bWEtXHUwMDNldm1fZmxhZ3NgKSBhbmQgcmV0dXJucyBhbiBlcnJvciBlbnVtIHZhbHVlIChgU0NBTl9QVEVfVUZGRGApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBtb2RpZnkgc3RydWN0IGxheW91dHMvcGFkZGluZywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBib3VuZHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXG4tIEtBU0FOL2dlbmVyYWwgZGV0ZWN0b3IgYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IC8ga2h1Z2VwYWdlZCBsb2dpYy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBidWdzIGluIFZNQSBsaWZlY3ljbGUgLyBwYWdlIHRhYmxlIG1hbmFnZW1lbnQgd291bGQgZmFsbCB1bmRlciBzdGFuZGFyZCBtZW1vcnkgbWFuYWdlbWVudCBzZW1hbnRpY3MsIHBhZ2UgZmF1bHRzLCBvciBwb2ludGVyIHZhbGlkaXR5LCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RzLlxuXG5IZW5jZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjMyOjQ3LjY5Nzc0NzM5NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NDMxMzkwNjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJVU0VSRkFVTFRGRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hZHZpc2VfY29sbGFwc2VcIixcbiAgICBcImNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIGVhcmx5IHJldHVybiBjaGVjayAoYHVzZXJmYXVsdGZkX21pbm9yKHZtYSlgKSBpbiBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKClgIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIFRIUHMgZm9yIFZNQXMgcmVnaXN0ZXJlZCB3aXRoIHVzZXJmYXVsdGZkIG1pbm9yIG1vZGUuXFxuXFxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlIG9ubHkgY2hlY2tzIGV4aXN0aW5nIFZNQSBmbGFncyAoYHZtYS1cXHUwMDNldm1fZmxhZ3NgKSBhbmQgcmV0dXJucyBhbiBlcnJvciBlbnVtIHZhbHVlIChgU0NBTl9QVEVfVUZGRGApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBtb2RpZnkgc3RydWN0IGxheW91dHMvcGFkZGluZywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBib3VuZHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXFxuLSBLQVNBTi9nZW5lcmFsIGRldGVjdG9yIGFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCAvIGtodWdlcGFnZWQgbG9naWMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbiBWTUEgbGlmZWN5Y2xlIC8gcGFnZSB0YWJsZSBtYW5hZ2VtZW50IHdvdWxkIGZhbGwgdW5kZXIgc3RhbmRhcmQgbWVtb3J5IG1hbmFnZW1lbnQgc2VtYW50aWNzLCBwYWdlIGZhdWx0cywgb3IgcG9pbnRlciB2YWxpZGl0eSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0cy5cXG5cXG5IZW5jZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIFRIUCBwYWdlcyB3aXRoaW4gVk1BcyByZWdpc3RlcmVkIHdpdGggdXNlcmZhdWx0ZmQgbWlub3IgZmF1bHQgaGFuZGxpbmcgKHVzZXJmYXVsdGZkX21pbm9yKS4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbGxhcHNlIGxvZ2ljIHJlYWNoYWJsZSB2aWEgbWFkdmlzZShNQURWX0NPTExBUFNFKSBvciBraHVnZXBhZ2VkIGJhY2tncm91bmQgc2Nhbm5pbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjMyOjQ3LjY5Nzc1MjY2NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk4NjU2ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTNjYmIzYTNiOTM4ZjQxNjQzNDhkMzU5Mzg1NGViYzI3NjJjOGFhZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAyOCAyMjozMjo0NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmNcXG5pbmRleCBiMjM3ZjZlNzY2MmE1Li4yMjM1NjIyOWMxZTQyIDEwMDY0NFxcbi0tLSBhL21tL2todWdlcGFnZWQuY1xcbisrKyBiL21tL2todWdlcGFnZWQuY1xcbkBAIC0xODk5LDYgKzE4OTksMTMgQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25cXG4gXFx0aWYgKHVzZXJmYXVsdGZkX3Byb3RlY3RlZCh2bWEpKVxcbiBcXHRcXHRyZXR1cm4gU0NBTl9QVEVfVUZGRDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFVzZXJmYXVsdGZkLW1pbm9yLXJlZ2lzdGVyZWQgVk1BcyBzaG91bGQgbm90IGJlIGNvbGxhcHNlZCwgYXNcXG4rXFx0ICogdXNlcnNwYWNlIGlzIGV4cGVjdGluZyB0byBleHBsaWNpdGx5IGluc3RhbGwgUFRFcy5cXG4rXFx0ICovXFxuK1xcdGlmICh1c2VyZmF1bHRmZF9taW5vcih2bWEpKVxcbitcXHRcXHRyZXR1cm4gU0NBTl9QVEVfVUZGRDtcXG4rXFxuIFxcdGZvbGlvID0gZmlsZW1hcF9sb2NrX2ZvbGlvKHZtYS1cXHUwMDNldm1fZmlsZS1cXHUwMDNlZl9tYXBwaW5nLFxcbiBcXHRcXHRcXHQgICAgICAgbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBoYWRkcikpO1xcbiBcXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzI6NDguMDk3MDE2MjA1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4NjE5MzI2ODY0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiVVNFUkZBVUxURkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWR2aXNlX2NvbGxhcHNlXCIsXG4gICAgXCJjb2xsYXBzZV9wdGVfbWFwcGVkX3RocFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBpbiB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKSB0byBwcmV2ZW50IGNvbGxhcHNpbmcgUFRFLW1hcHBlZCBUSFAgcGFnZXMgd2l0aGluIFZNQXMgcmVnaXN0ZXJlZCB3aXRoIHVzZXJmYXVsdGZkIG1pbm9yIGZhdWx0IGhhbmRsaW5nICh1c2VyZmF1bHRmZF9taW5vcikuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2xsYXBzZSBsb2dpYyByZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9DT0xMQVBTRSkgb3Iga2h1Z2VwYWdlZCBiYWNrZ3JvdW5kIHNjYW5uaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1M2NiYjNhM2I5MzhmNDE2NDM0OGQzNTkzODU0ZWJjMjc2MmM4YWFkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjggMjI6MzI6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IGIyMzdmNmU3NjYyYTUuLjIyMzU2MjI5YzFlNDIgMTAwNjQ0XG4tLS0gYS9tbS9raHVnZXBhZ2VkLmNcbisrKyBiL21tL2todWdlcGFnZWQuY1xuQEAgLTE4OTksNiArMTg5OSwxMyBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnblxuIFx0aWYgKHVzZXJmYXVsdGZkX3Byb3RlY3RlZCh2bWEpKVxuIFx0XHRyZXR1cm4gU0NBTl9QVEVfVUZGRDtcbiBcbitcdC8qXG4rXHQgKiBVc2VyZmF1bHRmZC1taW5vci1yZWdpc3RlcmVkIFZNQXMgc2hvdWxkIG5vdCBiZSBjb2xsYXBzZWQsIGFzXG4rXHQgKiB1c2Vyc3BhY2UgaXMgZXhwZWN0aW5nIHRvIGV4cGxpY2l0bHkgaW5zdGFsbCBQVEVzLlxuK1x0ICovXG4rXHRpZiAodXNlcmZhdWx0ZmRfbWlub3Iodm1hKSlcbitcdFx0cmV0dXJuIFNDQU5fUFRFX1VGRkQ7XG4rXG4gXHRmb2xpbyA9IGZpbGVtYXBfbG9ja19mb2xpbyh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcsXG4gXHRcdFx0ICAgICAgIGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgaGFkZHIpKTtcbiBcdGlmIChJU19FUlIoZm9saW8pKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzI6NDguMDk3MDE3Njk1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTUyNzQxOTYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLSFVHRVBBR0VEIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGEgY2hhbmdlIHdpdGhpbiBgbW0va2h1Z2VwYWdlZC5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgbW9kaWZpY2F0aW9uIGlzIGZvY3VzZWQgb24gdGhlIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGZ1bmN0aW9uLiBUaGUgY29kZSBzbmlwcGV0IGZsYWdzIGEgY2hlY2sgZm9yIGB1c2VyZmF1bHRmZF9taW5vcih2bWEpYCBhbmQsIGlmIHRydWUsIHJldHVybnMgYFNDQU5fUFRFX1VGRkRgLiBJbnRlcmVzdGluZy4gSXQgc2VlbXMgd2UncmUgcHJldmVudGluZyBUSFAgY29sbGFwc2UgaW4gY2VydGFpbiBzaXR1YXRpb25zLiBNeSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRoaXMgaXMgcmVsYXRlZCB0byBob3cgdXNlcmZhdWx0ZmQgaW50ZXJhY3RzIHdpdGggdGhlIHRyYW5zcGFyZW50IGh1Z2UgcGFnZSBtZWNoYW5pc20uIFVzZXJmYXVsdGZkcywgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBnaXZlIHVzZXJzcGFjZSBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIHBhZ2UgZmF1bHRzIGFuZCBtZW1vcnkgbWFuYWdlbWVudC5cblxuVG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGlzLCBJIG5lZWQgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBUaW1lIHRvIHB1bGwgdXAgYG1tL2todWdlcGFnZWQuY2AuIExldCdzIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgZnVuY3Rpb24gYW5kIGl0cyBzdXJyb3VuZGluZyBjYWxscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW1wbGljYXRpb25zIGhlcmUsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHRoZSBpbnRlcmFjdGlvbiBvZiB1c2VyZmF1bHRmZCwga2h1Z2VwYWdlZCwgYW5kIFBURSBtYW5pcHVsYXRpb24uIEkgc3VzcGVjdCB0aGF0IGNvbGxhcHNpbmcgdGhlIFRIUCBtaWdodCBpbnRlcmZlcmUgd2l0aCB1c2VyZmF1bHRmZCdzIGV4cGxpY2l0IFBURSBpbnN0YWxsYXRpb24gZXhwZWN0YXRpb25zLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIHRyYWRlLW9mZnMgYW5kIGJlbmVmaXRzIG9mIHRoaXMgY2hhbmdlPyBMZXQncyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzI6NTMuNjI0NDM5MDY0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2todWdlcGFnZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODgwOlxcdFxcdC8qIEZhc3QgY2hlY2sgYmVmb3JlIGxvY2tpbmcgcGFnZSBpZiBhbHJlYWR5IFBNRC1tYXBwZWQgKi9cXG4xODgxOlxcdFxcdHJlc3VsdCA9IGZpbmRfcG1kX29yX3RocF9vcl9ub25lKG1tLCBoYWRkciwgXFx1MDAyNnBtZCk7XFxuMTg4MjpcXHRcXHRpZiAocmVzdWx0ID09IFNDQU5fUE1EX01BUFBFRClcXG4xODgzOlxcdFxcdFxcdHJldHVybiByZXN1bHQ7XFxuMTg4NDpcXHRcXG4xODg1OlxcdFxcdC8qXFxuMTg4NjpcXHRcXHQgKiBJZiB3ZSBhcmUgaGVyZSwgd2UndmUgc3VjY2VlZGVkIGluIHJlcGxhY2luZyBhbGwgdGhlIG5hdGl2ZSBwYWdlc1xcbjE4ODc6XFx0XFx0ICogaW4gdGhlIHBhZ2UgY2FjaGUgd2l0aCBhIHNpbmdsZSBodWdlcGFnZS4gSWYgYSBtbSB3ZXJlIHRvIGZhdWx0LWluXFxuMTg4ODpcXHRcXHQgKiB0aGlzIG1lbW9yeSAobWFwcGVkIGJ5IGEgc3VpdGFibHkgYWxpZ25lZCBWTUEpLCB3ZSdkIGdldCB0aGUgaHVnZXBhZ2VcXG4xODg5OlxcdFxcdCAqIGFuZCBtYXAgaXQgYnkgYSBQTUQsIHJlZ2FyZGxlc3Mgb2Ygc3lzZnMgVEhQIHNldHRpbmdzLiBBcyBzdWNoLCBsZXQnc1xcbjE4OTA6XFx0XFx0ICogYW5hbG9nb3VzbHkgZWxpZGUgc3lzZnMgVEhQIHNldHRpbmdzIGhlcmUgYW5kIGZvcmNlIGNvbGxhcHNlLlxcbjE4OTE6XFx0XFx0ICovXFxuMTg5MjpcXHRcXHRpZiAoIXRocF92bWFfYWxsb3dhYmxlX29yZGVyKHZtYSwgdm1hLVxcdTAwM2V2bV9mbGFncywgVFZBX0ZPUkNFRF9DT0xMQVBTRSwgUE1EX09SREVSKSlcXG4xODkzOlxcdFxcdFxcdHJldHVybiBTQ0FOX1ZNQV9DSEVDSztcXG4xODk0OlxcdFxcbjE4OTU6XFx0XFx0LypcXG4xODk2OlxcdFxcdCAqIEtlZXAgcG1kIHBndGFibGUgd2hpbGUgdGhlIHVmZmQgYml0IGlzIGluIHVzZTsgc2VlIGNvbW1lbnQgaW5cXG4xODk3OlxcdFxcdCAqIHJldHJhY3RfcGFnZV90YWJsZXMoKS5cXG4xODk4OlxcdFxcdCAqL1xcbjE4OTk6XFx0XFx0aWYgKHVzZXJmYXVsdGZkX3Byb3RlY3RlZCh2bWEpKVxcbjE5MDA6XFx0XFx0XFx0cmV0dXJuIFNDQU5fUFRFX1VGRkQ7XFxuMTkwMTpcXHRcXG4xOTAyOlxcdFxcdC8qXFxuMTkwMzpcXHRcXHQgKiBVc2VyZmF1bHRmZC1taW5vci1yZWdpc3RlcmVkIFZNQXMgc2hvdWxkIG5vdCBiZSBjb2xsYXBzZWQsIGFzXFxuMTkwNDpcXHRcXHQgKiB1c2Vyc3BhY2UgaXMgZXhwZWN0aW5nIHRvIGV4cGxpY2l0bHkgaW5zdGFsbCBQVEVzLlxcbjE5MDU6XFx0XFx0ICovXFxuMTkwNjpcXHRcXHRpZiAodXNlcmZhdWx0ZmRfbWlub3Iodm1hKSlcXG4xOTA3OlxcdFxcdFxcdHJldHVybiBTQ0FOX1BURV9VRkZEO1xcbjE5MDg6XFx0XFxuMTkwOTpcXHRcXHRmb2xpbyA9IGZpbGVtYXBfbG9ja19mb2xpbyh2bWEtXFx1MDAzZXZtX2ZpbGUtXFx1MDAzZWZfbWFwcGluZyxcXG4xOTEwOlxcdFxcdFxcdFxcdCAgICAgICBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGhhZGRyKSk7XFxuMTkxMTpcXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG4xOTEyOlxcdFxcdFxcdHJldHVybiBTQ0FOX1BBR0VfTlVMTDtcXG4xOTEzOlxcdFxcbjE5MTQ6XFx0XFx0aWYgKCFpc19wbWRfb3JkZXIoZm9saW9fb3JkZXIoZm9saW8pKSkge1xcbjE5MTU6XFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QQUdFX0NPTVBPVU5EO1xcbjE5MTY6XFx0XFx0XFx0Z290byBkcm9wX2ZvbGlvO1xcbjE5MTc6XFx0XFx0fVxcbjE5MTg6XFx0XFxuMTkxOTpcXHRcXHRyZXN1bHQgPSBmaW5kX3BtZF9vcl90aHBfb3Jfbm9uZShtbSwgaGFkZHIsIFxcdTAwMjZwbWQpO1xcbjE5MjA6XFx0XFx0c3dpdGNoIChyZXN1bHQpIHtcXG4xOTIxOlxcdFxcdGNhc2UgU0NBTl9TVUNDRUVEOlxcbjE5MjI6XFx0XFx0XFx0YnJlYWs7XFxuMTkyMzpcXHRcXHRjYXNlIFNDQU5fTk9fUFRFX1RBQkxFOlxcbjE5MjQ6XFx0XFx0XFx0LypcXG4xOTI1OlxcdFxcdFxcdCAqIEFsbCBwdGUgZW50cmllcyBoYXZlIGJlZW4gcmVtb3ZlZCBhbmQgcG1kIGNsZWFyZWQuXFxuMTkyNjpcXHRcXHRcXHQgKiBTa2lwIGFsbCB0aGUgcHRlIGNoZWNrcyBhbmQganVzdCB1cGRhdGUgdGhlIHBtZCBtYXBwaW5nLlxcbjE5Mjc6XFx0XFx0XFx0ICovXFxuMTkyODpcXHRcXHRcXHRnb3RvIG1heWJlX2luc3RhbGxfcG1kO1xcbjE5Mjk6XFx0XFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzI6NTMuNjI0NTc2NDE0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzQzMjQ0NzU3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqSHVudGluZyBEb3duIFRob3NlIFRIUCBDb2xsYXBzaW5nIENhbGxlcnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCwgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCwgYW5kIG1heWJlIGV2ZW4gdGhlIGtodWdlcGFnZWQgY2FsbHMgYXJlIGNvbWluZyBmcm9tLiBUaGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBUSFAgY29sbGFwc2luZyBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgaW4gdGhlIGNvZGUuIEknbSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGZvciB0aGUgZGlyZWN0IGNhbGxlcnMuIExldCdzIGdldCByaWdodCB0byBpdCAtIEknbGwgcnVuIGEgc2VhcmNoIGZvciB0aGUgY2FsbCBzaXRlcyBvZiBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBhbmQgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCB0byBidWlsZCBhIGxpc3Qgb2YgYWxsIGxvY2F0aW9ucyB1c2luZyB0aG9zZSBmdW5jdGlvbnMuIEtub3dpbmcgdGhlaXIgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgYW4gaWRlYSBhYm91dCBob3cgYW5kIHdoZXJlIHRoZXkgYXJlIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NDUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjMzOjAxLjA1NzAyNTc0MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDEzODE1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz0xODIwPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHNldF9odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE4NTUtXFxubW0va2h1Z2VwYWdlZC5jOjE4NTY6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTE4NTctXFx0XFx0Ym9vbCBpbnN0YWxsX3BtZClcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMTAxPXZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMTAzLXtcXG5tbS9raHVnZXBhZ2VkLmM6MjEwNDpcXHR0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIGFkZHIsIGluc3RhbGxfcG1kKTtcXG5tbS9raHVnZXBhZ2VkLmMtMjEwNS19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MjI1ND1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjYzMy1cXHQgKiBSZW1vdmUgcHRlIHBhZ2UgdGFibGVzLCBzbyB3ZSBjYW4gcmUtZmF1bHQgdGhlIHBhZ2UgYXMgaHVnZS5cXG5tbS9raHVnZXBhZ2VkLmM6MjYzNDpcXHQgKiBJZiBNQURWX0NPTExBUFNFLCBhZGp1c3QgcmVzdWx0IHRvIGNhbGwgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKCkuXFxubW0va2h1Z2VwYWdlZC5jLTI2MzUtXFx0ICovXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9Mjc5Nz1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zaW5nbGVfcG1kKHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yODQxLVxcdFxcdGVsc2VcXG5tbS9raHVnZXBhZ2VkLmM6Mjg0MjpcXHRcXHRcXHRyZXN1bHQgPSB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTI4NDMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAhY2MtXFx1MDAzZWlzX2todWdlcGFnZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozMzowMS4xMjcxNjc3NTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjc4OTk5NTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqVHJhY2luZyB0aGUgQ29sbGFwc2Ugb2YgSHVnZSBQYWdlcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgbWVudGFsbHkgdHJhY2luZyB0aGUgY2FsbHMgdG8gYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYC4gVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHRoZSBmdW5jdGlvbiB3aGVyZSB0aGUgYWN0dWFsIGhlYXZ5IGxpZnRpbmcgaGFwcGVucyB3aGVuIHdlJ3JlIGJyZWFraW5nIGRvd24gYSBodWdlIHBhZ2UgdGhhdCdzIGJlZW4gbWFwcGVkIHZpYSBQVEVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzLCB0aGUgZGlmZmVyZW50IGNvbnRleHRzIGluIHdoaWNoIHRoaXMgZnVuY3Rpb24gZ2V0cyBpbnZva2VkLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHVzZXItdHJpZ2dlcmVkIGRlZnJhZywgYSBiYWNrZ3JvdW5kIGtlcm5lbCBvcGVyYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBLbm93aW5nIHRoZSBjYWxsZXIgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgKndoeSogdGhlIGNvbGxhcHNlIGlzIGhhcHBlbmluZywgYW5kIHRoZXJlZm9yZSBmb3IgZGlhZ25vc2luZyBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgcmVsYXRlZCB0byBpdC4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBkaWZmZXJlbnQgY29kZSBwYXRocyBhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgd2hhdCBjb250ZXh0IGlzIHBhc3NlZCBpbiwgd2hhdCBsb2NrcyBhcmUgaGVsZCwgaWYgYW55LCBhbmQgd2hhdCBhc3N1bXB0aW9ucyB0aGUgY2FsbGluZyBjb2RlIGlzIG1ha2luZyBhYm91dCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgJ3MgYmVoYXZpb3IuIEkgbmVlZCB0byBtYXAgdGhlIGNhdXNhbCBjaGFpbiB0byBiZSBhYmxlIHRvIHJlYXNvbiBhYm91dCBwb3NzaWJsZSBmYWlsdXJlIG1vZGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTk0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzM6MDQuODA2MTY5Nzc2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMDc1MTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9raHVnZXBhZ2VkLmM9MTgyMD1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBzZXRfaHVnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xODU1LVxcbm1tL2todWdlcGFnZWQuYzoxODU2OnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2todWdlcGFnZWQuYy0xODU3LVxcdFxcdGJvb2wgaW5zdGFsbF9wbWQpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjA4OS0vKipcXG5tbS9raHVnZXBhZ2VkLmM6MjA5MDogKiBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocCAtIFRyeSB0byBjb2xsYXBzZSBhIHB0ZS1tYXBwZWQgVEhQIGZvciBtbSBhdFxcbm1tL2todWdlcGFnZWQuYy0yMDkxLSAqIGFkZHJlc3MgaGFkZHIuXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjEwMC0gKi9cXG5tbS9raHVnZXBhZ2VkLmM6MjEwMTp2b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTIxMDItXFx0XFx0Ym9vbCBpbnN0YWxsX3BtZClcXG5tbS9raHVnZXBhZ2VkLmMtMjEwMy17XFxubW0va2h1Z2VwYWdlZC5jOjIxMDQ6XFx0dHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLCBpbnN0YWxsX3BtZCk7XFxubW0va2h1Z2VwYWdlZC5jLTIxMDUtfVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTIyNTQ9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI2MzMtXFx0ICogUmVtb3ZlIHB0ZSBwYWdlIHRhYmxlcywgc28gd2UgY2FuIHJlLWZhdWx0IHRoZSBwYWdlIGFzIGh1Z2UuXFxubW0va2h1Z2VwYWdlZC5jOjI2MzQ6XFx0ICogSWYgTUFEVl9DT0xMQVBTRSwgYWRqdXN0IHJlc3VsdCB0byBjYWxsIHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpLlxcbm1tL2todWdlcGFnZWQuYy0yNjM1LVxcdCAqL1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTI3OTc9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjg0MS1cXHRcXHRlbHNlXFxubW0va2h1Z2VwYWdlZC5jOjI4NDI6XFx0XFx0XFx0cmVzdWx0ID0gdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLFxcbm1tL2todWdlcGFnZWQuYy0yODQzLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIWNjLVxcdTAwM2Vpc19raHVnZXBhZ2VkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzM6MDQuODU3MjQ5MDEyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEyMjcwNjQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLiBUaW1lIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gYW5kIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiBhdCB0aGUgY29yZS4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIHBpbnBvaW50aW5nIHRoZSBjYWxsZXJzIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQsIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcywgYW5kIHdoYXQgdGhhdCB0ZWxscyBtZSBhYm91dCB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSBoZXJlLiBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgaW1tZWRpYXRlbHkgZ2l2ZSBtZSBjb250ZXh0LCBhbmQgaGVscCBtZSByZWFzb24gYWJvdXQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIGFyZWFzIHJpcGUgZm9yIG9wdGltaXphdGlvbi4gSSdtIHRoaW5raW5nIEkgY2FuIHN0YXJ0IGJ5Li4uIHdlbGwsIEkga25vdyB0aGVyZSBhcmUgcGxlbnR5IG9mIGFwcHJvYWNoZXMgSSBjb3VsZCB1c2UsIHNvIGxldCBtZSBnZXQgZ29pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNzIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozMzowNi45Nzk5NTg4MThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDA0NTMzNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29sbGFwc2VfcHRlX21hcHBlZF90aHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg9MTk9ZXh0ZXJuIGJvb2wgY3VycmVudF9pc19raHVnZXBhZ2VkKHZvaWQpO1xcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oOjIwOnZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC0yMS1cXHRcXHRib29sIGluc3RhbGxfcG1kKTtcXG4tLVxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oPTQxPXN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTQ0LX1cXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaDo0NTpzdGF0aWMgaW5saW5lIHZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtNDYtXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGluc3RhbGxfcG1kKVxcbi0tXFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmM9NDk5PWludCB1cHJvYmVfd3JpdGUoc3RydWN0IGFyY2hfdXByb2JlICphdXByb2JlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTU5OS1cXHRpZiAocmV0IFxcdTAwM2UgMClcXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYzo2MDA6XFx0XFx0Y29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIHZhZGRyLCBmYWxzZSk7XFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmMtNjAxLVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTE4MjA9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgc2V0X2h1Z2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTg1NS1cXG5tbS9raHVnZXBhZ2VkLmM6MTg1NjpzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9raHVnZXBhZ2VkLmMtMTg1Ny1cXHRcXHRib29sIGluc3RhbGxfcG1kKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIwODktLyoqXFxubW0va2h1Z2VwYWdlZC5jOjIwOTA6ICogY29sbGFwc2VfcHRlX21hcHBlZF90aHAgLSBUcnkgdG8gY29sbGFwc2UgYSBwdGUtbWFwcGVkIFRIUCBmb3IgbW0gYXRcXG5tbS9raHVnZXBhZ2VkLmMtMjA5MS0gKiBhZGRyZXNzIGhhZGRyLlxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIxMDAtICovXFxubW0va2h1Z2VwYWdlZC5jOjIxMDE6dm9pZCBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2todWdlcGFnZWQuYy0yMTAyLVxcdFxcdGJvb2wgaW5zdGFsbF9wbWQpXFxubW0va2h1Z2VwYWdlZC5jLTIxMDMte1xcbm1tL2todWdlcGFnZWQuYzoyMTA0OlxcdHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChtbSwgYWRkciwgaW5zdGFsbF9wbWQpO1xcbm1tL2todWdlcGFnZWQuYy0yMTA1LX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMjU0PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNjMzLVxcdCAqIFJlbW92ZSBwdGUgcGFnZSB0YWJsZXMsIHNvIHdlIGNhbiByZS1mYXVsdCB0aGUgcGFnZSBhcyBodWdlLlxcbm1tL2todWdlcGFnZWQuYzoyNjM0OlxcdCAqIElmIE1BRFZfQ09MTEFQU0UsIGFkanVzdCByZXN1bHQgdG8gY2FsbCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKS5cXG5tbS9raHVnZXBhZ2VkLmMtMjYzNS1cXHQgKi9cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yNzk3PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NpbmdsZV9wbWQodW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI4NDEtXFx0XFx0ZWxzZVxcbm1tL2todWdlcGFnZWQuYzoyODQyOlxcdFxcdFxcdHJlc3VsdCA9IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChtbSwgYWRkcixcXG5tbS9raHVnZXBhZ2VkLmMtMjg0My1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICFjYy1cXHUwMDNlaXNfa2h1Z2VwYWdlZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjMzOjA4Ljg4MDQxODc4MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTU2MDUwMDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIENhbGxzIGluIGBtbS9raHVnZXBhZ2VkLmNgKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBraHVnZXBhZ2VkIGNvZGUgYWdhaW4uIFRpbWUgdG8gZmlndXJlIG91dCB0aGUgY2FsbGluZyBjb250ZXh0IGZvciBgY29sbGFwc2Vfc2luZ2xlX3BtZGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aGVuKiBhbmQgKndoeSogdGhpcyBmdW5jdGlvbiBnZXRzIGludm9rZWQuIFRoaXMgdGVsbHMgbWUgYSBsb3QgYWJvdXQgaG93IHRoZSBrZXJuZWwgaXMgaGFuZGxpbmcgcGFnZSBtZXJnZXMgYW5kIHNwbGl0cyB1bmRlciBodWdlcGFnZXMuIEknbGwgbmVlZCB0byB1c2UgbXkgcHJlZmVycmVkIGRlYnVnZ2luZyB0b29scywgbGlrZWx5IGEgY29tYmluYXRpb24gb2YgYHRyYWNlcG9pbnRzYCwgYGZ0cmFjZWAsIGFuZCBwb3RlbnRpYWxseSBhIGJpdCBvZiBzdGF0aWMgYW5hbHlzaXMgd2l0aCBzb21ldGhpbmcgbGlrZSBgY3Njb3BlYCBvciBgY2xhbmdkYCB0byBuYXZpZ2F0ZSB0aGUgY29kZSBlZmZpY2llbnRseS4gSSdtIGxvb2tpbmcgZm9yIHRoZSBpbW1lZGlhdGUgY2FsbGVycyBhbmQgZnJvbSB0aGVyZSBJIHdpbGwgdGhlbiBkZXRlcm1pbmUgdGhlIGNvbnRleHQgd2hpY2ggY2FsbHMgdGhvc2UgY2FsbGVycy4gVWx0aW1hdGVseSwgd2hhdCBpcyB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIHRoYXQgdHJpZ2dlcnMgYSBgY29sbGFwc2Vfc2luZ2xlX3BtZGAgY2FsbD8gSXMgaXQgcmVsYXRlZCB0byBmcmFnbWVudGF0aW9uLCBtZW1vcnkgcHJlc3N1cmUsIE5VTUEgaW50ZXJhY3Rpb25zLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBzb2xpZCB1bmRlcnN0YW5kaW5nIGhlcmUgaXMgY3JpdGljYWwgZm9yIGRpYWdub3NpbmcgcGVyZm9ybWFuY2UgaXNzdWVzIHJlbGF0ZWQgdG8gdHJhbnNwYXJlbnQgaHVnZXBhZ2VzLCBhbmQgb3B0aW1pemluZyBteSBvd24gc3BlY2lmaWMgd29ya2xvYWRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjAyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzM6MTMuMDM2NDcxNzU4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9raHVnZXBhZ2VkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjc5NSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjc5NTpcXHQgKiB0aGUgcmVzdWx0cy5cXG4yNzk2OlxcdCAqL1xcbjI3OTc6XFx0c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXFxuMjc5ODpcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgYm9vbCAqbG9ja19kcm9wcGVkLFxcbjI3OTk6XFx0XFx0XFx0c3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxcbjI4MDA6XFx0e1xcbjI4MDE6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXFx1MDAzZXZtX21tO1xcbjI4MDI6XFx0XFx0Ym9vbCB0cmlnZ2VyZWRfd2IgPSBmYWxzZTtcXG4yODAzOlxcdFxcdGVudW0gc2Nhbl9yZXN1bHQgcmVzdWx0O1xcbjI4MDQ6XFx0XFx0c3RydWN0IGZpbGUgKmZpbGU7XFxuMjgwNTpcXHRcXHRwZ29mZl90IHBnb2ZmO1xcbjI4MDY6XFx0XFxuMjgwNzpcXHRcXHRtbWFwX2Fzc2VydF9sb2NrZWQobW0pO1xcbjI4MDg6XFx0XFxuMjgwOTpcXHRcXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpKSB7XFxuMjgxMDpcXHRcXHRcXHRyZXN1bHQgPSBjb2xsYXBzZV9zY2FuX3BtZChtbSwgdm1hLCBhZGRyLCBsb2NrX2Ryb3BwZWQsIGNjKTtcXG4yODExOlxcdFxcdFxcdGdvdG8gZW5kO1xcbjI4MTI6XFx0XFx0fVxcbjI4MTM6XFx0XFxuMjgxNDpcXHRcXHRmaWxlID0gZ2V0X2ZpbGUodm1hLVxcdTAwM2V2bV9maWxlKTtcXG4yODE1OlxcdFxcdHBnb2ZmID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyKTtcXG4yODE2OlxcdFxcbjI4MTc6XFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuMjgxODpcXHRcXHQqbG9ja19kcm9wcGVkID0gdHJ1ZTtcXG4yODE5OlxcdHJldHJ5OlxcbjI4MjA6XFx0XFx0cmVzdWx0ID0gY29sbGFwc2Vfc2Nhbl9maWxlKG1tLCBhZGRyLCBmaWxlLCBwZ29mZiwgY2MpO1xcbjI4MjE6XFx0XFxuMjgyMjpcXHRcXHQvKlxcbjI4MjM6XFx0XFx0ICogRm9yIE1BRFZfQ09MTEFQU0UsIHdoZW4gZW5jb3VudGVyaW5nIGRpcnR5IHBhZ2VzLCB0cnkgdG8gd3JpdGViYWNrLFxcbjI4MjQ6XFx0XFx0ICogdGhlbiByZXRyeSB0aGUgY29sbGFwc2Ugb25lIHRpbWUuXFxuMjgyNTpcXHRcXHQgKi9cXG4yODI2OlxcdFxcdGlmICghY2MtXFx1MDAzZWlzX2todWdlcGFnZWQgXFx1MDAyNlxcdTAwMjYgcmVzdWx0ID09IFNDQU5fUEFHRV9ESVJUWV9PUl9XUklURUJBQ0sgXFx1MDAyNlxcdTAwMjZcXG4yODI3OlxcdFxcdCAgICAhdHJpZ2dlcmVkX3diIFxcdTAwMjZcXHUwMDI2IG1hcHBpbmdfY2FuX3dyaXRlYmFjayhmaWxlLVxcdTAwM2VmX21hcHBpbmcpKSB7XFxuMjgyODpcXHRcXHRcXHRjb25zdCBsb2ZmX3QgbHN0YXJ0ID0gKGxvZmZfdClwZ29mZiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbjI4Mjk6XFx0XFx0XFx0Y29uc3QgbG9mZl90IGxlbmQgPSBsc3RhcnQgKyBIUEFHRV9QTURfU0laRSAtIDE7XFxuMjgzMDpcXHRcXG4yODMxOlxcdFxcdFxcdGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZS1cXHUwMDNlZl9tYXBwaW5nLCBsc3RhcnQsIGxlbmQpO1xcbjI4MzI6XFx0XFx0XFx0dHJpZ2dlcmVkX3diID0gdHJ1ZTtcXG4yODMzOlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjgzNDpcXHRcXHR9XFxuMjgzNTpcXHRcXHRmcHV0KGZpbGUpO1xcbjI4MzY6XFx0XFxuMjgzNzpcXHRcXHRpZiAocmVzdWx0ID09IFNDQU5fUFRFX01BUFBFRF9IVUdFUEFHRSkge1xcbjI4Mzg6XFx0XFx0XFx0bW1hcF9yZWFkX2xvY2sobW0pO1xcbjI4Mzk6XFx0XFx0XFx0aWYgKGNvbGxhcHNlX3Rlc3RfZXhpdF9vcl9kaXNhYmxlKG1tKSlcXG4yODQwOlxcdFxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fQU5ZX1BST0NFU1M7XFxuMjg0MTpcXHRcXHRcXHRlbHNlXFxuMjg0MjpcXHRcXHRcXHRcXHRyZXN1bHQgPSB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIGFkZHIsXFxuMjg0MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICFjYy1cXHUwMDNlaXNfa2h1Z2VwYWdlZCk7XFxuMjg0NDpcXHRcXHRcXHRpZiAocmVzdWx0ID09IFNDQU5fUE1EX01BUFBFRClcXG4yODQ1OlxcdFxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fU1VDQ0VFRDtcXG4yODQ2OlxcdFxcdFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbjI4NDc6XFx0XFx0fVxcbjI4NDg6XFx0ZW5kOlxcbjI4NDk6XFx0XFx0aWYgKGNjLVxcdTAwM2Vpc19raHVnZXBhZ2VkIFxcdTAwMjZcXHUwMDI2IHJlc3VsdCA9PSBTQ0FOX1NVQ0NFRUQpXFxuMjg1MDpcXHRcXHRcXHQrK2todWdlcGFnZWRfcGFnZXNfY29sbGFwc2VkO1xcbjI4NTE6XFx0XFx0cmV0dXJuIHJlc3VsdDtcXG4yODUyOlxcdH1cXG4yODUzOlxcdFxcbjI4NTQ6XFx0c3RhdGljIHZvaWQgY29sbGFwc2Vfc2Nhbl9tbV9zbG90KHVuc2lnbmVkIGludCBwcm9ncmVzc19tYXgsXFxuMjg1NTpcXHRcXHRcXHRlbnVtIHNjYW5fcmVzdWx0ICpyZXN1bHQsIHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYylcXG4yODU2OlxcdFxcdF9fcmVsZWFzZXMoXFx1MDAyNmtodWdlcGFnZWRfbW1fbG9jaylcXG4yODU3OlxcdFxcdF9fYWNxdWlyZXMoXFx1MDAyNmtodWdlcGFnZWRfbW1fbG9jaylcXG4yODU4OlxcdHtcXG4yODU5OlxcdFxcdHN0cnVjdCB2bWFfaXRlcmF0b3Igdm1pO1xcbjI4NjA6XFx0XFx0c3RydWN0IG1tX3Nsb3QgKnNsb3Q7XFxuMjg2MTpcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG4yODYyOlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbjI4NjM6XFx0XFx0dW5zaWduZWQgaW50IHByb2dyZXNzX3ByZXYgPSBjYy1cXHUwMDNlcHJvZ3Jlc3M7XFxuMjg2NDpcXHRcXG4yODY1OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmtodWdlcGFnZWRfbW1fbG9jayk7XFxuMjg2NjpcXHRcXHQqcmVzdWx0ID0gU0NBTl9GQUlMO1xcbjI4Njc6XFx0XFxuMjg2ODpcXHRcXHRpZiAoa2h1Z2VwYWdlZF9zY2FuLm1tX3Nsb3QpIHtcXG4yODY5OlxcdFxcdFxcdHNsb3QgPSBraHVnZXBhZ2VkX3NjYW4ubW1fc2xvdDtcXG4yODcwOlxcdFxcdH0gZWxzZSB7XFxuMjg3MTpcXHRcXHRcXHRzbG90ID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2a2h1Z2VwYWdlZF9zY2FuLm1tX2hlYWQsXFxuMjg3MjpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtbV9zbG90LCBtbV9ub2RlKTtcXG4yODczOlxcdFxcdFxcdGtodWdlcGFnZWRfc2Nhbi5hZGRyZXNzID0gMDtcXG4yODc0OlxcdFxcdFxcdGtodWdlcGFnZWRfc2Nhbi5tbV9zbG90ID0gc2xvdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzM6MTMuMDM2NjIxODc4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMDM3MjE0NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgTUFEVl9DT0xMQVBTRWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEknbSB3b25kZXJpbmcgYWJvdXQgdGhlIGJlaGF2aW9yIG9mIGBNQURWX0NPTExBUFNFYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgaG93IGl0J3MgaW1wbGVtZW50ZWQuIExldCdzIHN0YXJ0IHdpdGggYSBzZWFyY2ggZm9yIGBNQURWX0NPTExBUFNFYC4gSSdsbCBuZWVkIHRvIHJldmlldyB0aGUgc291cmNlIGNvZGUsIG1heWJlIHRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiBvciBtYW4gcGFnZXMgdG8gdW5kZXJzdGFuZCBpdHMgcHJlY2lzZSBmdW5jdGlvbiBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvbiB3aGF0IHRoaXMgc3lzdGVtIGNhbGwgKmFjdHVhbGx5KiBkb2VzIHVuZGVyIHRoZSBob29kLiBJIGV4cGVjdCB0byBkZWx2ZSBpbnRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSB0YWJsZSBzdHJ1Y3R1cmVzIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBtZWNoYW5pc21zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Nzc5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozMzoxNS4yNDAzNDU4NjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjE3NjQzOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUFEVl9DT0xMQVBTRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q9MTIxPWZvciB3aGljaCB2YXJ5IGJ5IHN5c3RlbS5cXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0xMjQtICAgICAgICAgIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgZ2xvYmFsbHkuIFRoaXMgaXMgYmVjYXVzZSBgYG1hZHZpc2UoLi4uLFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdDoxMjU6ICAgICAgICAgIE1BRFZfQ09MTEFQU0UpYGAgaWdub3JlcyB0aGVzZSBzZXR0aW5ncyBhbmQgY29sbGFwc2VzIHJhbmdlcyB0b1xcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0xMjYtICAgICAgICAgIFBNRC1zaXplZCBodWdlIHBhZ2VzIHVuY29uZGl0aW9uYWxseS5cXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdD0xOTU9bmV2ZXJcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMTk2LVxcdHNob3VsZCBiZSBzZWxmLWV4cGxhbmF0b3J5LiBOb3RlIHRoYXQgYGBtYWR2aXNlKC4uLixcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q6MTk3OlxcdE1BRFZfQ09MTEFQU0UpYGAgY2FuIHN0aWxsIGNhdXNlIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgdG8gYmVcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMTk4LVxcdG9idGFpbmVkIGV2ZW4gaWYgdGhpcyBtb2RlIGlzIHNwZWNpZmllZCBldmVyeXdoZXJlLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0PTIzNT1zdXBwb3J0IHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0yMzgtXFx0XFx0VGhpcyB3aWxsIGRpc2FibGUgVEhQcyBjb21wbGV0ZWx5IGZvciB0aGUgcHJvY2VzcywgaXJyZXNwZWN0aXZlXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0OjIzOTpcXHRcXHRvZiBnbG9iYWwgVEhQIGNvbnRyb2xzIG9yIG1hZHZpc2UoLi4uLCBNQURWX0NPTExBUFNFKSBiZWluZyB1c2VkLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0yNDAtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMjQ0LVxcdFxcdC0gR2xvYmFsIFRIUCBjb250cm9scyBhcmUgc2V0IHRvIFxcXCJhbHdheXNcXFwiIG9yIFxcXCJtYWR2aXNlXFxcIiBhbmRcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q6MjQ1OlxcdFxcdCAgbWFkdmlzZSguLi4sIE1BRFZfSFVHRVBBR0UpIG9yIG1hZHZpc2UoLi4uLCBNQURWX0NPTExBUFNFKSBpcyB1c2VkLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdDoyNDY6XFx0XFx0LSBHbG9iYWwgVEhQIGNvbnRyb2xzIGFyZSBzZXQgdG8gXFxcIm5ldmVyXFxcIiBhbmQgbWFkdmlzZSguLi4sIE1BRFZfQ09MTEFQU0UpXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0LTI0Ny1cXHRcXHQgIGlzIHVzZWQuIFRoaXMgaXMgdGhlIHNhbWUgYmVoYXZpb3IgYXMgaWYgVEhQcyB3b3VsZCBub3QgYmUgZGlzYWJsZWQgb25cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMjQ4LVxcdFxcdCAgYSBwcm9jZXNzIGxldmVsLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdDoyNDk6XFx0XFx0Tm90ZSB0aGF0IE1BRFZfQ09MTEFQU0UgaXMgY3VycmVudGx5IGFsd2F5cyByZWplY3RlZCBpZlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0yNTAtXFx0XFx0bWFkdmlzZSguLi4sIE1BRFZfTk9IVUdFUEFHRSkgaXMgc2V0IG9uIGFuIGFyZWEuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q9NDQ1PW5ldmVyXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0OjQ0NjogICAgRG8gbm90IGFsbG9jYXRlIGh1Z2UgcGFnZXMuIE5vdGUgdGhhdCBgYG1hZHZpc2UoLi4uLCBNQURWX0NPTExBUFNFKWBgXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0LTQ0Ny0gICAgY2FuIHN0aWxsIGNhdXNlIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgdG8gYmUgb2J0YWluZWQgZXZlbiBpZiB0aGlzIG1vZGVcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdD01MDU9bmV2ZXJcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtNTA2LSAgICBEbyBub3QgYWxsb2NhdGUgXFx1MDAzY3NpemVcXHUwMDNlIGh1Z2UgcGFnZXMuIE5vdGUgdGhhdCBgYG1hZHZpc2UoLi4uLFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdDo1MDc6ICAgIE1BRFZfQ09MTEFQU0UpYGAgY2FuIHN0aWxsIGNhdXNlIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgdG8gYmUgb2J0YWluZWRcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtNTA4LSAgICBldmVuIGlmIHRoaXMgbW9kZSBpcyBzcGVjaWZpZWQgZXZlcnl3aGVyZTtcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdD01MzI9dGhhdCBzdXBwb3J0cyBlYWNoIGFjdGlvbiBhcmUgYXMgYmVsb3cuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QtNTQ3LSAgIGZhaWwuXFxuRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0OjU0ODogLSBgYGNvbGxhcHNlYGA6IENhbGwgYGBtYWR2aXNlKClgYCBmb3IgdGhlIHJlZ2lvbiB3aXRoIGBgTUFEVl9DT0xMQVBTRWBgLlxcbkRvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdC01NDktICAgU3VwcG9ydGVkIGJ5IGBgdmFkZHJgYCBhbmQgYGBmdmFkZHJgYCBvcGVyYXRpb25zIHNldC4gV2hlblxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdD01NjI9YXJlIGV4dHJhIHJlcXVpcmVtZW50cyBmb3IgYWNjZXNzaW5nIHRoZW06XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTU2OC0gIEluIHBhcnRpY3VsYXIsIHRoaXMgaGFwcGVucyBpbiA6YzpmdW5jOmAhcmV0cmFjdF9wYWdlX3RhYmxlc2Agd2hlbiBoYW5kbGluZ1xcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q6NTY5OiAgOmM6bWFjcm86YCFNQURWX0NPTExBUFNFYC5cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTU3MC0gIFNvIGFjY2Vzc2luZyBQVEUtbGV2ZWwgcGFnZSB0YWJsZXMgcmVxdWlyZXMgYXQgbGVhc3QgaG9sZGluZyBhbiBSQ1UgcmVhZCBsb2NrO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC01NzktICB0aGUgcmVxdWlyZW1lbnRzLiBJbiBwYXJ0aWN1bGFyLCB0aGlzIGFsc28gaGFwcGVucyBpbiA6YzpmdW5jOmAhcmV0cmFjdF9wYWdlX3RhYmxlc2BcXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjU4MDogIHdoZW4gaGFuZGxpbmcgOmM6bWFjcm86YCFNQURWX0NPTExBUFNFYC5cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTU4MS1cXG4tLVxcbmFyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtNzgtXFxuYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDo3OTojZGVmaW5lIE1BRFZfQ09MTEFQU0VcXHQyNVxcdFxcdC8qIFN5bmNocm9ub3VzIGh1Z2VwYWdlIGNvbGxhcHNlICovXFxuYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC04MC1cXG4tLVxcbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0xMDUtXFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjEwNjojZGVmaW5lIE1BRFZfQ09MTEFQU0VcXHQyNVxcdFxcdC8qIFN5bmNocm9ub3VzIGh1Z2VwYWdlIGNvbGxhcHNlICovXFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTEwNy1cXG4tLVxcbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTcyLVxcbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjczOiNkZWZpbmUgTUFEVl9DT0xMQVBTRVxcdDI1XFx0XFx0LyogU3luY2hyb25vdXMgaHVnZXBhZ2UgY29sbGFwc2UgKi9cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC03NC1cXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjLmM9Mzk0PWFzbWxpbmthZ2Ugbm90cmFjZSBsb25nIHBhcmlzY19tYWR2aXNlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sIGludCBiZWhhdmlvcilcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjLmMtNDA0LVxcdGNhc2UgNzI6IGJlaGF2aW9yID0gTUFEVl9LRUVQT05GT1JLO1xcdGJyZWFrO1xcbmFyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjLmM6NDA1OlxcdGNhc2UgNzM6IGJlaGF2aW9yID0gTUFEVl9DT0xMQVBTRTtcXHRicmVhaztcXG5hcmNoL3BhcmlzYy9rZXJuZWwvc3lzX3BhcmlzYy5jLTQwNi1cXHR9XFxuLS1cXG5hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0xMTMtXFxuYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmg6MTE0OiNkZWZpbmUgTUFEVl9DT0xMQVBTRVxcdDI1XFx0XFx0LyogU3luY2hyb25vdXMgaHVnZXBhZ2UgY29sbGFwc2UgKi9cXG5hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0xMTUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9OTM9c3RydWN0IGRhbW9uX3RhcmdldCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTEzLSAqIEBEQU1PU19OT0hVR0VQQUdFOlxcdENhbGwgYGBtYWR2aXNlKClgYCBmb3IgdGhlIHJlZ2lvbiB3aXRoIE1BRFZfTk9IVUdFUEFHRS5cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTE0OiAqIEBEQU1PU19DT0xMQVBTRTpcXHRDYWxsIGBgbWFkdmlzZSgpYGAgZm9yIHRoZSByZWdpb24gd2l0aCBNQURWX0NPTExBUFNFLlxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMTUtICogQERBTU9TX0xSVV9QUklPOlxcdFByaW9yaXRpemUgdGhlIHJlZ2lvbiBvbiBpdHMgTFJVIGxpc3RzLlxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9OTc9ZW51bSB0dmFfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xMDAtXFx0VFZBX0tIVUdFUEFHRUQsXFx0XFx0LyogS2h1Z2VwYWdlZCBjb2xsYXBzZS4gKi9cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoxMDE6XFx0VFZBX0ZPUkNFRF9DT0xMQVBTRSxcXHQvKiBGb3JjZWQgY29sbGFwc2UgKGUuZy4gTUFEVl9DT0xMQVBTRSkuICovXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTAyLX07XFxuLS1cXG5pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaC03OS1cXG5pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaDo4MDojZGVmaW5lIE1BRFZfQ09MTEFQU0VcXHQyNVxcdFxcdC8qIFN5bmNocm9ub3VzIGh1Z2VwYWdlIGNvbGxhcHNlICovXFxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtODEtXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaD0xMzQ9c3RydWN0IHByY3RsX21tX21hcCB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaC0xODctICogRG9uJ3QgZGlzYWJsZSBUSFBzIHdoZW4gZXhwbGljaXRseSBhZHZpc2VkIChlLmcuLCBNQURWX0hVR0VQQUdFIC9cXG5pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaDoxODg6ICogVk1fSFVHRVBBR0UsIE1BRFZfQ09MTEFQU0UpLlxcbmluY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oLTE4OS0gKi9cXG4tLVxcbm1tL0tjb25maWc9ODg1PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05MDAtXFx0ICAndHJhbnNwYXJlbnRfaHVnZXBhZ2Vfc2htZW09JyBvcHRpb24gb3IgYXQgcnVudGltZSB2aWEgc3lzZnNcXG5tbS9LY29uZmlnOjkwMTpcXHQgIGtub2IuIE5vdGUgdGhhdCBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpIGNhbiBzdGlsbCBjYXVzZVxcbm1tL0tjb25maWctOTAyLVxcdCAgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyB0byBiZSBvYnRhaW5lZCBldmVuIGlmIHRoaXMgbW9kZSBpc1xcbi0tXFxubW0vS2NvbmZpZz05MzA9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTk0NS1cXHQgICd0cmFuc3BhcmVudF9odWdlcGFnZV90bXBmcz0nIG9wdGlvbi4gTm90ZSB0aGF0XFxubW0vS2NvbmZpZzo5NDY6XFx0ICBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpIGNhbiBzdGlsbCBjYXVzZSB0cmFuc3BhcmVudCBodWdlIHBhZ2VzXFxubW0vS2NvbmZpZy05NDctXFx0ICB0byBiZSBvYnRhaW5lZCBldmVuIGlmIHRoaXMgbW9kZSBpcyBzcGVjaWZpZWQuXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTg3OT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl92YV9hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy05MDEtXFx0Y2FzZSBEQU1PU19DT0xMQVBTRTpcXG5tbS9kYW1vbi92YWRkci5jOjkwMjpcXHRcXHRtYWR2X2FjdGlvbiA9IE1BRFZfQ09MTEFQU0U7XFxubW0vZGFtb24vdmFkZHIuYy05MDMtXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MzY3PXN0YXRpYyB1bnNpZ25lZCBpbnQgY29sbGFwc2VfbWF4X3B0ZXNfbm9uZShzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzczLVxcdFxcdHJldHVybiAwO1xcbm1tL2todWdlcGFnZWQuYzozNzQ6XFx0LyogZm9yIE1BRFZfQ09MTEFQU0UsIGFsbG93IGFueSBlbXB0eS9zaGFyZWQgemVyb3BhZ2UgUFRFcyAqL1xcbm1tL2todWdlcGFnZWQuYy0zNzUtXFx0aWYgKCFjYy1cXHUwMDNlaXNfa2h1Z2VwYWdlZClcXG4tLVxcbm1tL2todWdlcGFnZWQuYz00MDY9c3RhdGljIHVuc2lnbmVkIGludCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTQwOS1cXHQvKlxcbm1tL2todWdlcGFnZWQuYzo0MTA6XFx0ICogRm9yIE1BRFZfQ09MTEFQU0UsIGRvIG5vdCByZXN0cmljdCB0aGUgbnVtYmVyIG9mIFBURXMgdGhhdCBtYXAgc2hhcmVkXFxubW0va2h1Z2VwYWdlZC5jLTQxMS1cXHQgKiBhbm9ueW1vdXMgcGFnZXMuXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NDM0PXN0YXRpYyB1bnNpZ25lZCBpbnQgY29sbGFwc2VfbWF4X3B0ZXNfc3dhcChzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNDM3LVxcdC8qXFxubW0va2h1Z2VwYWdlZC5jOjQzODpcXHQgKiBGb3IgTUFEVl9DT0xMQVBTRSwgZG8gbm90IHJlc3RyaWN0IHRoZSBudW1iZXIgUFRFcyBlbnRyaWVzIG9yXFxubW0va2h1Z2VwYWdlZC5jLTQzOS1cXHQgKiBwYWdlY2FjaGUgZW50cmllcyB0aGF0IGFyZSBub24tcHJlc2VudC5cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMjU0PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMjY3LVxcdC8qXFxubW0va2h1Z2VwYWdlZC5jOjIyNjg6XFx0ICogTUFEVl9DT0xMQVBTRSBpZ25vcmVzIHNobWVtIGh1Z2UgY29uZmlnLCBzbyBkbyBub3QgY2hlY2sgc2htZW1cXG5tbS9raHVnZXBhZ2VkLmMtMjI2OS1cXHQgKlxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI2MzMtXFx0ICogUmVtb3ZlIHB0ZSBwYWdlIHRhYmxlcywgc28gd2UgY2FuIHJlLWZhdWx0IHRoZSBwYWdlIGFzIGh1Z2UuXFxubW0va2h1Z2VwYWdlZC5jOjI2MzQ6XFx0ICogSWYgTUFEVl9DT0xMQVBTRSwgYWRqdXN0IHJlc3VsdCB0byBjYWxsIHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpLlxcbm1tL2todWdlcGFnZWQuYy0yNjM1LVxcdCAqL1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTI3OTc9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjgyMi1cXHQvKlxcbm1tL2todWdlcGFnZWQuYzoyODIzOlxcdCAqIEZvciBNQURWX0NPTExBUFNFLCB3aGVuIGVuY291bnRlcmluZyBkaXJ0eSBwYWdlcywgdHJ5IHRvIHdyaXRlYmFjayxcXG5tbS9raHVnZXBhZ2VkLmMtMjgyNC1cXHQgKiB0aGVuIHJldHJ5IHRoZSBjb2xsYXBzZSBvbmUgdGltZS5cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0zMTYzPXN0YXRpYyBpbnQgbWFkdmlzZV9jb2xsYXBzZV9lcnJubyhlbnVtIHNjYW5fcmVzdWx0IHIpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzE2NS1cXHQvKlxcbm1tL2todWdlcGFnZWQuYzozMTY2OlxcdCAqIE1BRFZfQ09MTEFQU0UgYnJlYWtzIGZyb20gZXhpc3RpbmcgbWFkdmlzZSgyKSBjb252ZW50aW9ucyB0byBwcm92aWRlXFxubW0va2h1Z2VwYWdlZC5jLTMxNjctXFx0ICogYWN0aW9uYWJsZSBmZWVkYmFjayB0byBjYWxsZXIsIHNvIHRoZXkgbWF5IHRha2UgYW4gYXBwcm9wcmlhdGVcXG4tLVxcbm1tL21hZHZpc2UuYz0xMzM4PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTM2MS1cXHRcXHRyZXR1cm4gbWFkdmlzZV9kb250bmVlZF9mcmVlKG1hZHZfYmVoYXZpb3IpO1xcbm1tL21hZHZpc2UuYzoxMzYyOlxcdGNhc2UgTUFEVl9DT0xMQVBTRTpcXG5tbS9tYWR2aXNlLmMtMTM2My1cXHRcXHRyZXR1cm4gbWFkdmlzZV9jb2xsYXBzZSh2bWEsIHJhbmdlLVxcdTAwM2VzdGFydCwgcmFuZ2UtXFx1MDAzZWVuZCxcXG4tLVxcbm1tL21hZHZpc2UuYz0xNTE4PW1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE1NDEtXFx0Y2FzZSBNQURWX05PSFVHRVBBR0U6XFxubW0vbWFkdmlzZS5jOjE1NDI6XFx0Y2FzZSBNQURWX0NPTExBUFNFOlxcbm1tL21hZHZpc2UuYy0xNTQzLSNlbmRpZlxcbi0tXFxubW0vbWFkdmlzZS5jPTE1NjI9c3RhdGljIGJvb2wgcHJvY2Vzc19tYWR2aXNlX3JlbW90ZV92YWxpZChpbnQgYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTU2Ny1cXHRjYXNlIE1BRFZfV0lMTE5FRUQ6XFxubW0vbWFkdmlzZS5jOjE1Njg6XFx0Y2FzZSBNQURWX0NPTExBUFNFOlxcbm1tL21hZHZpc2UuYy0xNTY5LVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vbWFkdmlzZS5jPTE3NDI9c3RhdGljIGVudW0gbWFkdmlzZV9sb2NrX21vZGUgZ2V0X2xvY2tfbW9kZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNzUzLVxcdGNhc2UgTUFEVl9QT1BVTEFURV9XUklURTpcXG5tbS9tYWR2aXNlLmM6MTc1NDpcXHRjYXNlIE1BRFZfQ09MTEFQU0U6XFxubW0vbWFkdmlzZS5jLTE3NTUtXFx0XFx0cmV0dXJuIE1BRFZJU0VfTU1BUF9SRUFEX0xPQ0s7XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTg4Nz1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcXG4tLVxcbm1tL21hZHZpc2UuYy0xOTU1LSAqXFx0XFx0Y29hbGVzY2VkIGludG8gVEhQIGFuZCBuZXcgcGFnZXMgd2lsbCBub3QgYmUgYWxsb2NhdGVkIGFzIFRIUC5cXG5tbS9tYWR2aXNlLmM6MTk1NjogKiAgTUFEVl9DT0xMQVBTRSAtIHN5bmNocm9ub3VzbHkgY29hbGVzY2UgcGFnZXMgaW50byBuZXcgVEhQLlxcbm1tL21hZHZpc2UuYy0xOTU3LSAqICBNQURWX0RPTlREVU1QIC0gdGhlIGFwcGxpY2F0aW9uIHdhbnRzIHRvIHByZXZlbnQgcGFnZXMgaW4gdGhlIGdpdmVuIHJhbmdlXFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaC03OS1cXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaDo4MDojZGVmaW5lIE1BRFZfQ09MTEFQU0VcXHQyNVxcdFxcdC8qIFN5bmNocm9ub3VzIGh1Z2VwYWdlIGNvbGxhcHNlICovXFxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtODEtXFxuLS1cXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaD0xMzQ9c3RydWN0IHByY3RsX21tX21hcCB7XFxuLS1cXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaC0xODctICogRG9uJ3QgZGlzYWJsZSBUSFBzIHdoZW4gZXhwbGljaXRseSBhZHZpc2VkIChlLmcuLCBNQURWX0hVR0VQQUdFIC9cXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaDoxODg6ICogVk1fSFVHRVBBR0UsIE1BRFZfQ09MTEFQU0UpLlxcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oLTE4OS0gKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM9MTc0PXN0YXRpYyB2b2lkIHRlc3RfY29sbGFwc2UoaW50IGZkLCB1NjQgZmxhZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTIxOC1cXHQgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjIxOTpcXHRURVNUX0FTU0VSVF9FUShtYWR2aXNlKG1lbSwgcG1kX3NpemUsIE1BRFZfQ09MTEFQU0UpLCAtMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0yMjAtXFx0VEVTVF9BU1NFUlRfRVEoZXJybm8sIEVJTlZBTCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYz0xMjc2PXN0YXRpYyB2b2lkIGRvX3Rlc3RfYW5vbl90aHBfY29sbGFwc2UoY2hhciAqbWVtLCBzaXplX3Qgc2l6ZSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jLTEzMDgtXFx0XFx0LyogQ29sbGFwc2UgYmVmb3JlIGFjdHVhbGx5IENPVy1zaGFyaW5nIHRoZSBwYWdlLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jOjEzMDk6XFx0XFx0cmV0ID0gbWFkdmlzZShtZW0sIHNpemUsIE1BRFZfQ09MTEFQU0UpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jLTEzMTAtXFx0XFx0aWYgKHJldCkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jOjEzMTE6XFx0XFx0XFx0a3NmdF9wZXJyb3IoXFxcIk1BRFZfQ09MTEFQU0UgZmFpbGVkXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMtMTMxMi1cXHRcXHRcXHRsb2dfdGVzdF9yZXN1bHQoS1NGVF9TS0lQKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jLTEzODYtXFx0XFx0LyogQ29sbGFwc2UgYmVmb3JlIGFueW9uZSBtb2RpZmllZCB0aGUgQ09XLXNoYXJlZCBwYWdlLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jOjEzODc6XFx0XFx0cmV0ID0gbWFkdmlzZShtZW0sIHNpemUsIE1BRFZfQ09MTEFQU0UpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jLTEzODgtXFx0XFx0aWYgKHJldCkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jOjEzODk6XFx0XFx0XFx0a3NmdF9wZXJyb3IoXFxcIk1BRFZfQ09MTEFQU0UgZmFpbGVkXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMtMTM5MC1cXHRcXHRcXHRsb2dfdGVzdF9yZXN1bHQoS1NGVF9TS0lQKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYz0yMTkxPVRFU1RfRihndWFyZF9yZWdpb25zLCBjb2xsYXBzZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0yMjMzLVxcdCAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYzoyMjM0OlxcdEVYUEVDVF9ORShtYWR2aXNlKHB0ciwgc2l6ZSwgTUFEVl9DT0xMQVBTRSksIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYy0yMjM1LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MjA4MD1URVNUX0YoaG1tLCBtaWdyYXRlX2Fub25faHVnZV9mYXVsdClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTIxMTAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MjExMTpcXHRyZXQgPSBtYWR2aXNlKG1hcCwgc2l6ZSwgTUFEVl9DT0xMQVBTRSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMjExMi1cXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz0yMzE9c3RhdGljIHZvaWQgZmlsbF9tZW1vcnkoaW50ICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yMzktLypcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MjQwOiAqIE1BRFZfQ09MTEFQU0UgaXMgYSBiZXN0LWVmZm9ydCByZXF1ZXN0IGFuZCBtYXkgZmFpbCBpZiBhbiBpbnRlcm5hbFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNDEtICogcmVzb3VyY2UgaXMgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUsIGluIHdoaWNoIGNhc2UgaXQgd2lsbCBzZXQgZXJybm8gdG9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz0yNDU9c3RhdGljIGludCBtYWR2aXNlX2NvbGxhcHNlX3JldHJ5KHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNTAtcmV0cnk6XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjI1MTpcXHRyZXQgPSBtYWR2aXNlKHAsIHNpemUsIE1BRFZfQ09MTEFQU0UpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNTItXFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFQUdBSU4gXFx1MDAyNlxcdTAwMjYgcmV0cnkpIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz0yNjM9c3RhdGljIHZvaWQgKmFsbG9jX2hwYWdlKHN0cnVjdCBtZW1fb3BzICpvcHMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjcwLVxcdCAqIFZNQSBzaG91bGQgYmUgbmVpdGhlciBWTV9IVUdFUEFHRSBub3IgVk1fTk9IVUdFUEFHRS5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MjcxOlxcdCAqIFRoZSBsYXR0ZXIgaXMgaW5lbGlnaWJsZSBmb3IgY29sbGFwc2UgYnkgTUFEVl9DT0xMQVBTRVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoyNzI6XFx0ICogd2hpbGUgdGhlIGZvcm1lciBtaWdodCBjYXVzZSBNQURWX0NPTExBUFNFIHRvIHJhY2Ugd2l0aFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNzMtXFx0ICoga2h1Z2VwYWdlZCBvbiBsb3ctbG9hZCBzeXN0ZW0gKGxpa2UgYSB0ZXN0IG1hY2hpbmUpLCB3aGljaFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoyNzQ6XFx0ICogd291bGQgY2F1c2UgTUFEVl9DT0xMQVBTRSB0byBmYWlsIHdpdGggRUFHQUlOLlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNzUtXFx0ICovXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjc3LVxcdGlmIChtYWR2aXNlX2NvbGxhcHNlX3JldHJ5KHAsIGhwYWdlX3BtZF9zaXplKSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6Mjc4OlxcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwibWFkdmlzZShNQURWX0NPTExBUFNFKVxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNzktXFx0aWYgKCFvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMSkpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjI4MDpcXHRcXHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXFxcIm1hZHZpc2UoTUFEVl9DT0xMQVBTRSlcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjgxLVxcdGlmIChtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz01MDk9c3RhdGljIHZvaWQgX19tYWR2aXNlX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01MTctXFx0LypcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6NTE4OlxcdCAqIHJlYWRcXHUwMDI2d3JpdGUgZmlsZSBjb2xsYXBzZSBzdWNjZWVkcyBmb3IgTUFEVl9DT0xMQVBTRSBiZWNhdXNlIGRpcnR5XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTUxOS1cXHQgKiBmb2xpb3MgYXJlIHdyaXR0ZW4gYmFjayBhZnRlciBjb2xsYXBzZSBmYWlscyBmb3IgZGlydHkgZm9saW9zIGFuZFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTUyMy1cXHQvKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzo1MjQ6XFx0ICogUHJldmVudCBraHVnZXBhZ2VkIGludGVyZmVyZW5jZSBhbmQgdGVzdHMgdGhhdCBNQURWX0NPTExBUFNFXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTUyNS1cXHQgKiBpZ25vcmVzIC9zeXMva2VybmVsL21tL3RyYW5zcGFyZW50X2h1Z2VwYWdlL2VuYWJsZWRcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYz0xMDc1PXN0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3dyaXR0ZW5fdGVzdChjb25zdCBjaGFyICpuYW1lLCBjaGFyICptZW0sIGxvbmcgc2l6ZSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMDg2LVxcdGlmICh1c2VfdGhwIFxcdTAwMjZcXHUwMDI2XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjEwODc6XFx0ICAgIChtYWR2aXNlKG1lbSwgc2l6ZSwgTUFEVl9DT0xMQVBTRSkgfHxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTA4OC1cXHQgICAgICFjaGVja19odWdlX2Fub24obWVtLCBzaXplIC8gaHBhZ2Vfc2l6ZSwgaHBhZ2Vfc2l6ZSkpKSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jPTI0PWVudW0gdGhwX2NvbGxhcHNlX3R5cGUge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYy0yNy1cXHRUSFBfQ09MTEFQU0VfTUFEVl9IVUdFUEFHRSxcXHQvKiBNQURWX0hVR0VQQUdFIGJlZm9yZSBhY2Nlc3MgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jOjI4OlxcdFRIUF9DT0xMQVBTRV9NQURWX0NPTExBUFNFLFxcdC8qIE1BRFZfQ09MTEFQU0UgYWZ0ZXIgYWNjZXNzICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYy0yOS19O1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYy0zMi0gKiBGdW5jdGlvbiB0byBtbWFwIGEgYnVmZmVyLCBmYXVsdCBpdCBpbiwgbWFkdmlzZSBpdCBhcHByb3ByaWF0ZWx5IChiZWZvcmVcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jOjMzOiAqIHBhZ2UgZmF1bHQgZm9yIE1BRFZfSFVHRSwgYW5kIGFmdGVyIGZvciBNQURWX0NPTExBUFNFKSwgYW5kIGNoZWNrIGlmIHRoZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMtMzQtICogbW1hcCByZWdpb24gaXMgaHVnZS5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmM9NDA9c3RhdGljIGludCB0ZXN0X21tYXBfdGhwKGVudW0gdGhwX2NvbGxhcHNlX3R5cGUgbWFkdmlzZV9idWYsIHNpemVfdCBwbWRzaXplKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYy02My1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jOjY0OlxcdGlmIChtYWR2aXNlX2J1ZiA9PSBUSFBfQ09MTEFQU0VfTUFEVl9DT0xMQVBTRSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jOjY1OlxcdFxcdG1hZHZpc2UobWVtLCBwbWRzaXplLCBNQURWX0NPTExBUFNFKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jLTY2LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYz03NT1zdGF0aWMgdm9pZCBwcmN0bF90aHBfZGlzYWJsZV9jb21wbGV0ZWx5X3Rlc3Qoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqY29uc3QgX21ldGFkYXRhLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYy04Ny1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jOjg4OlxcdEFTU0VSVF9FUSh0ZXN0X21tYXBfdGhwKFRIUF9DT0xMQVBTRV9NQURWX0NPTExBUFNFLCBwbWRzaXplKSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYy04OS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMtMTAxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmM6MTAyOlxcdEFTU0VSVF9FUSh0ZXN0X21tYXBfdGhwKFRIUF9DT0xMQVBTRV9NQURWX0NPTExBUFNFLCBwbWRzaXplKSwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYy0xMDMtfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYz0xODI9c3RhdGljIHZvaWQgcHJjdGxfdGhwX2Rpc2FibGVfZXhjZXB0X21hZHZpc2VfdGVzdChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpjb25zdCBfbWV0YWRhdGEsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jLTE5NS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jOjE5NjpcXHRBU1NFUlRfRVEodGVzdF9tbWFwX3RocChUSFBfQ09MTEFQU0VfTUFEVl9DT0xMQVBTRSwgcG1kc2l6ZSksIDEpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMtMTk3LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYy0yMDktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYzoyMTA6XFx0QVNTRVJUX0VRKHRlc3RfbW1hcF90aHAoVEhQX0NPTExBUFNFX01BRFZfQ09MTEFQU0UsIHBtZHNpemUpLCAxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jLTIxMS19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuYz02MD1URVNUX0YocHJvY2Vzc19tYWR2aXNlLCBiYXNpYylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb2Nlc3NfbWFkdi5jLTEyMy0vKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb2Nlc3NfbWFkdi5jOjEyNDogKiBUaGlzIHRlc3QgZGV0ZXJtaW5pc3RpY2FsbHkgdmFsaWRhdGVzIHByb2Nlc3NfbWFkdmlzZSgpIHdpdGggTUFEVl9DT0xMQVBTRVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb2Nlc3NfbWFkdi5jLTEyNS0gKiBvbiBhIHJlbW90ZSBwcm9jZXNzLCBvdGhlciBhZHZpY2VzIGFyZSBkaWZmaWN1bHQgdG8gdmVyaWZ5IHJlbGlhYmx5Llxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvY2Vzc19tYWR2LmMtMTI4LSAqIGZvY3VzIG9uIHByb2Nlc3NfbWFkdiByZW1vdGUgcmVzdWx0LCBvbmx5IGNoZWNrIGFkZHJlc3NlcyBhbmQgbGVuZ3Rocy5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuYzoxMjk6ICogVGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBNQURWX0NPTExBUFNFIGNhbiBiZSBmb3VuZCBpbiB0aGUgcmVsZXZhbnQgdGVzdCBleGFtcGxlcyBpbiBraHVnZXBhZ2VkLlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb2Nlc3NfbWFkdi5jLTEzMC0gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuYz0xMzE9VEVTVF9GKHByb2Nlc3NfbWFkdmlzZSwgcmVtb3RlX2NvbGxhcHNlKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvY2Vzc19tYWR2LmMtMTk1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb2Nlc3NfbWFkdi5jOjE5NjpcXHRyZXQgPSBzeXNfcHJvY2Vzc19tYWR2aXNlKHNlbGYtXFx1MDAzZXJlbW90ZV9waWRmZCwgXFx1MDAyNnZlYywgMSwgTUFEVl9DT0xMQVBTRSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm9jZXNzX21hZHYuYy0xOTctXFx0XFx0XFx0XFx0ICAwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jPTUzNj1zdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbGxhcHNlLCBib29sIHRlc3Rfd3ApXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYy01NDQtXFx0LypcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYzo1NDU6XFx0ICogTk9URTogTUFEVl9DT0xMQVBTRSBpcyBub3QgeWV0IGNvbXBhdGlibGUgd2l0aCBXUCwgc28gdGVzdGluZ1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jLTU0Ni1cXHQgKiBib3RoIGRvIG5vdCBtYWtlIG11Y2ggc2Vuc2UuXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYy01NTAtXFx0aWYgKHVmZmRfcmVnaXN0ZXIoZ29wdHMtXFx1MDAzZXVmZmQsIGdvcHRzLVxcdTAwM2VhcmVhX2RzdF9hbGlhcywgZ29wdHMtXFx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXFx1MDAzZXBhZ2Vfc2l6ZSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYzo1NTE6XFx0XFx0XFx0ICAvKiBOT1RFISBNQURWX0NPTExBUFNFIG1heSBub3Qgd29yayB3aXRoIHVmZmQtd3AgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYy01NTItXFx0XFx0XFx0ICBmYWxzZSwgdGVzdF93cCwgdHJ1ZSkpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYy01ODEtXFx0XFx0aWYgKG1hZHZpc2UoZ29wdHMtXFx1MDAzZWFyZWFfZHN0X2FsaWFzLCBnb3B0cy1cXHUwMDNlbnJfcGFnZXMgKiBnb3B0cy1cXHUwMDNlcGFnZV9zaXplLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jOjU4MjpcXHRcXHRcXHQgICAgTUFEVl9DT0xMQVBTRSkpIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYy01ODMtXFx0XFx0XFx0LyogSXQncyBmaW5lIHRvIGZhaWwgZm9yIHRoaXMgb25lLi4uICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmM6NTg0OlxcdFxcdFxcdHVmZmRfdGVzdF9za2lwKFxcXCJNQURWX0NPTExBUFNFIGZhaWxlZFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jLTU4NS1cXHRcXHRcXHRyZXR1cm47XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYz0yMzIyPXVmZmRfdGVzdF9jYXNlX3QgdWZmZF90ZXN0c1tdID0ge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmMtMjQyNC1cXHRcXHQudWZmZF9mbiA9IHVmZmRfbWlub3JfY29sbGFwc2VfdGVzdCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYzoyNDI1OlxcdFxcdC8qIE1BRFZfQ09MTEFQU0Ugb25seSB3b3JrcyB3aXRoIHNobWVtICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmMtMjQyNi1cXHRcXHQubWVtX3RhcmdldHMgPSBNRU1fU0hNRU0sXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmM6MjQyNzpcXHRcXHQvKiBXZSBjYW4ndCB0ZXN0IE1BRFZfQ09MTEFQU0UsIHNvIHRyeSBvdXIgbHVjayAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jLTI0MjgtXFx0XFx0LnVmZmRfZmVhdHVyZV9yZXF1aXJlZCA9IFVGRkRfRkVBVFVSRV9NSU5PUl9TSE1FTSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzM6MTYuOTYyMTE3MzIzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3ODUxNDMzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBtYWR2aXNlX2NvbGxhcHNlYCBpbiBgbW0va2h1Z2VwYWdlZC5jYCoqXG5cbk9rYXksIHNvIEkgd2FudCB0byBnZXQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgbWFkdmlzZV9jb2xsYXBzZWAgYWN0dWFsbHkgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBrZXJuZWwncyBodWdlIHBhZ2UgbWFuYWdlbWVudC4gVGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgaXMgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSdtIGdvaW5nIHRvIGhlYWQgc3RyYWlnaHQgdG8gYG1tL2todWdlcGFnZWQuY2AgYW5kIHplcm8gaW4gb24gdGhlIGBtYWR2aXNlX2NvbGxhcHNlYCBmdW5jdGlvbi4gTXkgbWFpbiBmb2N1cyBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgbG9naWMg4oCTIGhvdyBpdCBhY3R1YWxseSBjb2xsYXBzZXMgb3IgdW4tY29sbGFwc2VzIG1lbW9yeSBtYXBwaW5ncyBiYXNlZCBvbiB0aGUgYE1BRFZfQ09MTEFQU0VgIGFkdmljZSwgYW5kIGFsc28gdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgc3Vycm91bmRpbmcgc3ltYm9scyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGl0IHJlbGllcyBvbi4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgbGVhZCBtZSB0byB0aGUgdW5kZXJseWluZyBhbGdvcml0aG1zLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHBhZ2UgdGFibGUgaGFuZGxpbmcgYW5kIG90aGVyIHJlbGF0ZWQgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50cy4gSXQncyB0aW1lIHRvIGdldCBoYW5kcy1vbiBhbmQgdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA4NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjMzOjIwLjc0NzI2Mjg4NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0Nzg4MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZV9jb2xsYXBzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2h1Z2VwYWdlZC5jPTMxNTg9Ym9vbCBjdXJyZW50X2lzX2todWdlcGFnZWQodm9pZClcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0zMTYyLVxcbm1tL2todWdlcGFnZWQuYzozMTYzOnN0YXRpYyBpbnQgbWFkdmlzZV9jb2xsYXBzZV9lcnJubyhlbnVtIHNjYW5fcmVzdWx0IHIpXFxubW0va2h1Z2VwYWdlZC5jLTMxNjQte1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTMxOTQtXFxubW0va2h1Z2VwYWdlZC5jOjMxOTU6aW50IG1hZHZpc2VfY29sbGFwc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0va2h1Z2VwYWdlZC5jLTMxOTYtXFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCAqbG9ja19kcm9wcGVkKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTMyODItXFx0cmV0dXJuIHRocHMgPT0gKChoZW5kIC0gaHN0YXJ0KSBcXHUwMDNlXFx1MDAzZSBIUEFHRV9QTURfU0hJRlQpID8gMFxcbm1tL2todWdlcGFnZWQuYzozMjgzOlxcdFxcdFxcdDogbWFkdmlzZV9jb2xsYXBzZV9lcnJubyhsYXN0X2ZhaWwpO1xcbm1tL2todWdlcGFnZWQuYy0zMjg0LX1cXG4tLVxcbm1tL21hZHZpc2UuYz0xMzM4PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTM2Mi1cXHRjYXNlIE1BRFZfQ09MTEFQU0U6XFxubW0vbWFkdmlzZS5jOjEzNjM6XFx0XFx0cmV0dXJuIG1hZHZpc2VfY29sbGFwc2Uodm1hLCByYW5nZS1cXHUwMDNlc3RhcnQsIHJhbmdlLVxcdTAwM2VlbmQsXFxubW0vbWFkdmlzZS5jLTEzNjQtXFx0XFx0XFx0XFx1MDAyNm1hZHZfYmVoYXZpb3ItXFx1MDAzZWxvY2tfZHJvcHBlZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjMzOjIwLjgwMjc0OTY1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NTM2OTMxMTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEaXZpbmcgaW50byBgbWFkdmlzZV9jb2xsYXBzZWAgYW5kIEl0cyBUSFAgSW1wbGljYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSB0aGlua2luZyBhYm91dCBgbWFkdmlzZV9jb2xsYXBzZWAgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0va2h1Z2VwYWdlZC5jYC4gTXkgcHJpbWFyeSBpbnRlcmVzdCBoZXJlLCBhcyBhbHdheXMsIGlzIHVuZGVyc3RhbmRpbmcgdGhlIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykgaW50ZXJhY3Rpb24sIGFuZCBob3cgdGhpcyBmdW5jdGlvbiBwbGF5cyBhIHBhcnQgaW4gdGhlIGJpZyBwaWN0dXJlLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIHRoYXQgbGVhZHMgaW50byBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYC4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIOKAkyBvciBwb3RlbnRpYWwgaGVhZGFjaGVzIOKAkyBoYXBwZW4sIGFuZCB1bmRlcnN0YW5kaW5nICpob3cqIGBtYWR2aXNlX2NvbGxhcHNlYCB0cmlnZ2VycyB0aGF0IGZ1bmN0aW9uIGlzIGNydWNpYWwuIEkgd2FudCB0byBzZWUgaWYgaXQncyBhIGRpcmVjdCBjYWxsLCBvciBpZiB0aGVyZSBhcmUgaW50ZXJtZWRpYXJpZXMuIFdoYXQgYXJlIHRoZSBjb25kaXRpb25zIHRoYXQgaGF2ZSB0byBiZSBtZXQgZm9yIHRoaXMgY29sbGFwc2UgYXR0ZW1wdCB0byBldmVuIGJlIGNvbnNpZGVyZWQ/IEkgYmV0IGl0IGRlYWxzIHdpdGggYE1BRFZfQ09MTEFQU0VgIGFuZCBzaGFyZWQgbWVtb3J5IHJlZ2lvbnMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgYWxsIHRoZSBpbXBsaWNhdGlvbnMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBrZXJuZWwgZGVhbHMgd2l0aCBwYWdlcyBpbiB0aGUgbWlkZGxlIG9mIGEgVEhQLCBhbmQgaG93IHRoZSBjb2xsYXBzZSB3b3JrcyBpbiB0ZXJtcyBvZiBwYWdlIHRhYmxlIGVudHJpZXMuIElzIGl0IGEgZ3JhY2VmdWwgZGVncmFkYXRpb24sIG9yIGlzIGl0IGEgbW9yZSBkaXNydXB0aXZlIG9wZXJhdGlvbj8gSSB3YW50IHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBwaXRmYWxscywgc3luY2hyb25pemF0aW9uIGlzc3Vlcywgb3Igc3VidGxlIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2YuIExldCdzIHNlZSBob3cgZWZmaWNpZW50bHkgaXQgaGFuZGxlcyB0aGUgdGFzaywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgYXJlYXMgZm9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gZG93biB0aGUgbGluZS4gVGhhdCdzIHRoZSBjb3JlIGZvY3VzIHJpZ2h0IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3NTAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozMzoyOC4zMzk2ODQxNzlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2todWdlcGFnZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTk1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTk1OlxcdGludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbjMxOTY6XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCAqbG9ja19kcm9wcGVkKVxcbjMxOTc6XFx0e1xcbjMxOTg6XFx0XFx0c3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjO1xcbjMxOTk6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXFx1MDAzZXZtX21tO1xcbjMyMDA6XFx0XFx0dW5zaWduZWQgbG9uZyBoc3RhcnQsIGhlbmQsIGFkZHI7XFxuMzIwMTpcXHRcXHRlbnVtIHNjYW5fcmVzdWx0IGxhc3RfZmFpbCA9IFNDQU5fRkFJTDtcXG4zMjAyOlxcdFxcdGludCB0aHBzID0gMDtcXG4zMjAzOlxcdFxcdGJvb2wgbW1hcF91bmxvY2tlZCA9IGZhbHNlO1xcbjMyMDQ6XFx0XFxuMzIwNTpcXHRcXHRCVUdfT04odm1hLVxcdTAwM2V2bV9zdGFydCBcXHUwMDNlIHN0YXJ0KTtcXG4zMjA2OlxcdFxcdEJVR19PTih2bWEtXFx1MDAzZXZtX2VuZCBcXHUwMDNjIGVuZCk7XFxuMzIwNzpcXHRcXG4zMjA4OlxcdFxcdGlmICghY29sbGFwc2VfcG9zc2libGUodm1hLCB2bWEtXFx1MDAzZXZtX2ZsYWdzLCBUVkFfRk9SQ0VEX0NPTExBUFNFKSlcXG4zMjA5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMyMTA6XFx0XFxuMzIxMTpcXHRcXHRoc3RhcnQgPSBBTElHTihzdGFydCwgSFBBR0VfUE1EX1NJWkUpO1xcbjMyMTI6XFx0XFx0aGVuZCA9IEFMSUdOX0RPV04oZW5kLCBIUEFHRV9QTURfU0laRSk7XFxuMzIxMzpcXHRcXG4zMjE0OlxcdFxcdGlmIChoc3RhcnQgXFx1MDAzZT0gaGVuZClcXG4zMjE1OlxcdFxcdFxcdHJldHVybiAwO1xcbjMyMTY6XFx0XFxuMzIxNzpcXHRcXHRjYyA9IGttYWxsb2Nfb2JqKCpjYyk7XFxuMzIxODpcXHRcXHRpZiAoIWNjKVxcbjMyMTk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMzIyMDpcXHRcXHRjYy1cXHUwMDNlaXNfa2h1Z2VwYWdlZCA9IGZhbHNlO1xcbjMyMjE6XFx0XFx0Y2MtXFx1MDAzZXByb2dyZXNzID0gMDtcXG4zMjIyOlxcdFxcbjMyMjM6XFx0XFx0bW1ncmFiKG1tKTtcXG4zMjI0OlxcdFxcdGxydV9hZGRfZHJhaW5fYWxsKCk7XFxuMzIyNTpcXHRcXG4zMjI2OlxcdFxcdGZvciAoYWRkciA9IGhzdGFydDsgYWRkciBcXHUwMDNjIGhlbmQ7IGFkZHIgKz0gSFBBR0VfUE1EX1NJWkUpIHtcXG4zMjI3OlxcdFxcdFxcdGVudW0gc2Nhbl9yZXN1bHQgcmVzdWx0ID0gU0NBTl9GQUlMO1xcbjMyMjg6XFx0XFxuMzIyOTpcXHRcXHRcXHRpZiAobW1hcF91bmxvY2tlZCkge1xcbjMyMzA6XFx0XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuMzIzMTpcXHRcXHRcXHRcXHRtbWFwX3JlYWRfbG9jayhtbSk7XFxuMzIzMjpcXHRcXHRcXHRcXHRtbWFwX3VubG9ja2VkID0gZmFsc2U7XFxuMzIzMzpcXHRcXHRcXHRcXHQqbG9ja19kcm9wcGVkID0gdHJ1ZTtcXG4zMjM0OlxcdFxcdFxcdFxcdHJlc3VsdCA9IGh1Z2VwYWdlX3ZtYV9yZXZhbGlkYXRlKG1tLCBhZGRyLCBmYWxzZSwgXFx1MDAyNnZtYSxcXG4zMjM1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBjYywgSFBBR0VfUE1EX09SREVSKTtcXG4zMjM2OlxcdFxcdFxcdFxcdGlmIChyZXN1bHQgIT0gU0NBTl9TVUNDRUVEKSB7XFxuMzIzNzpcXHRcXHRcXHRcXHRcXHRsYXN0X2ZhaWwgPSByZXN1bHQ7XFxuMzIzODpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9ub2xvY2s7XFxuMzIzOTpcXHRcXHRcXHRcXHR9XFxuMzI0MDpcXHRcXG4zMjQxOlxcdFxcdFxcdFxcdGhlbmQgPSBtaW4oaGVuZCwgdm1hLVxcdTAwM2V2bV9lbmQgXFx1MDAyNiBIUEFHRV9QTURfTUFTSyk7XFxuMzI0MjpcXHRcXHRcXHR9XFxuMzI0MzpcXHRcXG4zMjQ0OlxcdFxcdFxcdHJlc3VsdCA9IGNvbGxhcHNlX3NpbmdsZV9wbWQoYWRkciwgdm1hLCBcXHUwMDI2bW1hcF91bmxvY2tlZCwgY2MpO1xcbjMyNDU6XFx0XFxuMzI0NjpcXHRcXHRcXHRzd2l0Y2ggKHJlc3VsdCkge1xcbjMyNDc6XFx0XFx0XFx0Y2FzZSBTQ0FOX1NVQ0NFRUQ6XFxuMzI0ODpcXHRcXHRcXHRjYXNlIFNDQU5fUE1EX01BUFBFRDpcXG4zMjQ5OlxcdFxcdFxcdFxcdCsrdGhwcztcXG4zMjUwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjMyNTE6XFx0XFx0XFx0LyogV2hpdGVsaXN0ZWQgc2V0IG9mIHJlc3VsdHMgd2hlcmUgY29udGludWluZyBPSyAqL1xcbjMyNTI6XFx0XFx0XFx0Y2FzZSBTQ0FOX05PX1BURV9UQUJMRTpcXG4zMjUzOlxcdFxcdFxcdGNhc2UgU0NBTl9QVEVfTk9OX1BSRVNFTlQ6XFxuMzI1NDpcXHRcXHRcXHRjYXNlIFNDQU5fUFRFX1VGRkQ6XFxuMzI1NTpcXHRcXHRcXHRjYXNlIFNDQU5fTEFDS19SRUZFUkVOQ0VEX1BBR0U6XFxuMzI1NjpcXHRcXHRcXHRjYXNlIFNDQU5fUEFHRV9OVUxMOlxcbjMyNTc6XFx0XFx0XFx0Y2FzZSBTQ0FOX1BBR0VfQ09VTlQ6XFxuMzI1ODpcXHRcXHRcXHRjYXNlIFNDQU5fUEFHRV9MT0NLOlxcbjMyNTk6XFx0XFx0XFx0Y2FzZSBTQ0FOX1BBR0VfQ09NUE9VTkQ6XFxuMzI2MDpcXHRcXHRcXHRjYXNlIFNDQU5fUEFHRV9MUlU6XFxuMzI2MTpcXHRcXHRcXHRjYXNlIFNDQU5fREVMX1BBR0VfTFJVOlxcbjMyNjI6XFx0XFx0XFx0XFx0bGFzdF9mYWlsID0gcmVzdWx0O1xcbjMyNjM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzI2NDpcXHRcXHRcXHRkZWZhdWx0OlxcbjMyNjU6XFx0XFx0XFx0XFx0bGFzdF9mYWlsID0gcmVzdWx0O1xcbjMyNjY6XFx0XFx0XFx0XFx0LyogT3RoZXIgZXJyb3IsIGV4aXQgKi9cXG4zMjY3OlxcdFxcdFxcdFxcdGdvdG8gb3V0X21heWJlbG9jaztcXG4zMjY4OlxcdFxcdFxcdH1cXG4zMjY5OlxcdFxcdH1cXG4zMjcwOlxcdFxcbjMyNzE6XFx0b3V0X21heWJlbG9jazpcXG4zMjcyOlxcdFxcdC8qIENhbGxlciBleHBlY3RzIHVzIHRvIGhvbGQgbW1hcF9sb2NrIG9uIHJldHVybiAqL1xcbjMyNzM6XFx0XFx0aWYgKG1tYXBfdW5sb2NrZWQpIHtcXG4zMjc0OlxcdFxcdFxcdCpsb2NrX2Ryb3BwZWQgPSB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozMzoyOC4zMzk4NTk0NzlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDY5Mzk0NjM3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEtjb25maWcgRGVwZW5kZW5jaWVzIGZvciBLaHVnZXBhZ2VkIGFuZCBVc2VyZmF1bHRmZCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUga2VybmVsIGNvZGUgYW5kIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdGhhdCBjb250cm9sIHRoZSBpbmNsdXNpb24gb2YgYG1tL2todWdlcGFnZWQuY2AgYW5kLCBpbiBwYXJ0aWN1bGFyLCB1c2VyZmF1bHRmZCBmdW5jdGlvbmFsaXR5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIEtjb25maWcgc3ltYm9scyB0aGF0IHVsdGltYXRlbHkgcmVzdWx0IGluIHRoYXQgY29kZSBiZWluZyBjb21waWxlZC4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBkaXJlY3RseSBhdCB0aGUgYnVpbGQgcHJvY2Vzcy4gVGhlIHNpbXBsZXN0IGFwcHJvYWNoIHNlZW1zIHRvIGJlIHRvIGNoZWNrIGBtbS9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkIGF0IGJ1aWxkIHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzMwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozMzozMy4wMzM4MDg2N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4NTgwNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2h1Z2VwYWdlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4NzIgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm1tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xcbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXFxubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICs9IHBhZ2VfY291bnRlci5vXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTIzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbV90eXBlcy5oXFx1MDAzZVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjQ6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2todWdlcGFnZWQuaFxcdTAwM2VcXG5tbS9odWdlX21lbW9yeS5jLTI1LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcmVlemVyLmhcXHUwMDNlXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTU2LSAqIGd1YXJhbnRlZWQgdG8gYmVuZWZpdCBmcm9tIGl0LiBXaGVuIHRyYW5zcGFyZW50IGh1Z2VwYWdlIHN1cHBvcnQgaXNcXG5tbS9odWdlX21lbW9yeS5jOjU3OiAqIGVuYWJsZWQsIGl0IGlzIGZvciBhbGwgbWFwcGluZ3MsIGFuZCBraHVnZXBhZ2VkIHNjYW5zIGFsbCBtYXBwaW5ncy5cXG5tbS9odWdlX21lbW9yeS5jOjU4OiAqIERlZnJhZyBpcyBpbnZva2VkIGJ5IGtodWdlcGFnZWQgaHVnZXBhZ2UgYWxsb2NhdGlvbnMgYW5kIGJ5IHBhZ2UgZmF1bHRzXFxubW0vaHVnZV9tZW1vcnkuYy01OS0gKiBmb3IgYWxsIGh1Z2VwYWdlIGFsbG9jYXRpb25zLlxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xMjE9dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTQ4LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTQ5OlxcdC8qIGtodWdlcGFnZWQgZG9lc24ndCBjb2xsYXBzZSBEQVggdm1hLCBidXQgcGFnZSBmYXVsdCBpcyBmaW5lLiAqL1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTUwLVxcdGlmICh2bWFfaXNfZGF4KHZtYSkpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE1My1cXHQvKlxcbm1tL2h1Z2VfbWVtb3J5LmM6MTU0OlxcdCAqIGtodWdlcGFnZWQgc3BlY2lhbCBWTUEgYW5kIGh1Z2V0bGIgVk1BLlxcbm1tL2h1Z2VfbWVtb3J5LmMtMTU1LVxcdCAqIE11c3QgYmUgY2hlY2tlZCBhZnRlciBkYXggc2luY2Ugc29tZSBkYXggbWFwcGluZ3MgbWF5IGhhdmVcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDQ1PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ1NS1cXHRpZiAoc2V0X2dsb2JhbF9lbmFibGVkX21vZGUobW9kZSkpIHtcXG5tbS9odWdlX21lbW9yeS5jOjQ1NjpcXHRcXHRpbnQgZXJyID0gc3RhcnRfc3RvcF9raHVnZXBhZ2VkKCk7XFxubW0vaHVnZV9tZW1vcnkuYy00NTctXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ2My1cXHRcXHQgKiBjaGFuZ2UsIGFzIHRoZSBwcmV2aW91cyBjb2RlIGFsd2F5cyBjYWxsZWRcXG5tbS9odWdlX21lbW9yeS5jOjQ2NDpcXHRcXHQgKiBzdGFydF9zdG9wX2todWdlcGFnZWQoKSB3aGljaCBkb2VzIHRoaXMgaW50ZXJuYWxseS5cXG5tbS9odWdlX21lbW9yeS5jLTQ2NS1cXHRcXHQgKi9cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NjgwPXN0YXRpYyBzc2l6ZV90IGFub25fZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNjkxLVxcdGlmIChzZXRfYW5vbl9lbmFibGVkX21vZGUob3JkZXIsIG1vZGUpKSB7XFxubW0vaHVnZV9tZW1vcnkuYzo2OTI6XFx0XFx0aW50IGVyciA9IHN0YXJ0X3N0b3Bfa2h1Z2VwYWdlZCgpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNjkzLVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy02OTktXFx0XFx0ICogY2hhbmdlLCBhcyB0aGUgcHJldmlvdXMgY29kZSBhbHdheXMgY2FsbGVkXFxubW0vaHVnZV9tZW1vcnkuYzo3MDA6XFx0XFx0ICogc3RhcnRfc3RvcF9raHVnZXBhZ2VkKCkgd2hpY2ggZG9lcyB0aGlzIGludGVybmFsbHkuXFxubW0vaHVnZV9tZW1vcnkuYy03MDEtXFx0XFx0ICovXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTkzMz1zdGF0aWMgaW50IF9faW5pdCBodWdlcGFnZV9pbml0X3N5c2ZzKHN0cnVjdCBrb2JqZWN0ICoqaHVnZXBhZ2Vfa29iailcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtOTU5LVxcbm1tL2h1Z2VfbWVtb3J5LmM6OTYwOlxcdGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgqaHVnZXBhZ2Vfa29iaiwgXFx1MDAyNmtodWdlcGFnZWRfYXR0cl9ncm91cCk7XFxubW0vaHVnZV9tZW1vcnkuYy05NjEtXFx0aWYgKGVycikge1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz05OTE9c3RhdGljIHZvaWQgX19pbml0IGh1Z2VwYWdlX2V4aXRfc3lzZnMoc3RydWN0IGtvYmplY3QgKmh1Z2VwYWdlX2tvYmopXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTk5OS1cXG5tbS9odWdlX21lbW9yeS5jOjEwMDA6XFx0c3lzZnNfcmVtb3ZlX2dyb3VwKGh1Z2VwYWdlX2tvYmosIFxcdTAwMjZraHVnZXBhZ2VkX2F0dHJfZ3JvdXApO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTAwMS1cXHRzeXNmc19yZW1vdmVfZ3JvdXAoaHVnZXBhZ2Vfa29iaiwgXFx1MDAyNmh1Z2VwYWdlX2F0dHJfZ3JvdXApO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xMDUxPXN0YXRpYyBpbnQgX19pbml0IGh1Z2VwYWdlX2luaXQodm9pZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA2OS1cXG5tbS9odWdlX21lbW9yeS5jOjEwNzA6XFx0ZXJyID0ga2h1Z2VwYWdlZF9pbml0KCk7XFxubW0vaHVnZV9tZW1vcnkuYy0xMDcxLVxcdGlmIChlcnIpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTEwODctXFxubW0vaHVnZV9tZW1vcnkuYzoxMDg4OlxcdGVyciA9IHN0YXJ0X3N0b3Bfa2h1Z2VwYWdlZCgpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTA4OS1cXHRpZiAoZXJyKVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTA5MDpcXHRcXHRnb3RvIGVycl9raHVnZXBhZ2VkO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTA5MS1cXG5tbS9odWdlX21lbW9yeS5jLTEwOTItXFx0cmV0dXJuIDA7XFxubW0vaHVnZV9tZW1vcnkuYzoxMDkzOmVycl9raHVnZXBhZ2VkOlxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA5NC1cXHR0aHBfc2hyaW5rZXJfZXhpdCgpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTA5NS1lcnJfc2hyaW5rZXI6XFxubW0vaHVnZV9tZW1vcnkuYzoxMDk2OlxcdGtodWdlcGFnZWRfZGVzdHJveSgpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTA5Ny1lcnJfc2xhYjpcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTUyMD12bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xNTMwLVxcdFxcdHJldHVybiByZXQ7XFxubW0vaHVnZV9tZW1vcnkuYzoxNTMxOlxcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgdm1hLVxcdTAwM2V2bV9mbGFncyk7XFxubW0vaHVnZV9tZW1vcnkuYy0xNTMyLVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NTQ3PXN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU1MS1cXG5tbS9odWdlX21lbW9yeS5jOjQ1NTI6XFx0aWYgKGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSA9PSBIUEFHRV9QTURfTlIgLSAxKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU1My1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ1NTktXFx0XFx0aWYgKHBhZ2VzX2lkZW50aWNhbChmb2xpb19wYWdlKGZvbGlvLCBpKSwgWkVST19QQUdFKDApKSkge1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDU2MDpcXHRcXHRcXHRpZiAoKytudW1femVyb19wYWdlcyBcXHUwMDNlIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSlcXG5tbS9odWdlX21lbW9yeS5jLTQ1NjEtXFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ1NjYtXFx0XFx0XFx0ICovXFxubW0vaHVnZV9tZW1vcnkuYzo0NTY3OlxcdFxcdFxcdGlmICgrK251bV9maWxsZWRfcGFnZXMgXFx1MDAzZT0gSFBBR0VfUE1EX05SIC0ga2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU2OC1cXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9pbnRlcm5hbC5oLTEwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbm1tL2ludGVybmFsLmg6MTE6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2todWdlcGFnZWQuaFxcdTAwM2VcXG5tbS9pbnRlcm5hbC5oLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbi0tXFxubW0vaW50ZXJuYWwuaD03MDk9cG1kX3QgKm1tX2ZpbmRfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpO1xcbi0tXFxubW0vaW50ZXJuYWwuaC03MTEtLypcXG5tbS9pbnRlcm5hbC5oOjcxMjogKiBpbiBtbS9raHVnZXBhZ2VkLmNcXG5tbS9pbnRlcm5hbC5oLTcxMy0gKi9cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMS0jaW5jbHVkZSBcXHUwMDNjbGludXgva3RocmVhZC5oXFx1MDAzZVxcbm1tL2todWdlcGFnZWQuYzoxMjojaW5jbHVkZSBcXHUwMDNjbGludXgva2h1Z2VwYWdlZC5oXFx1MDAzZVxcbm1tL2todWdlcGFnZWQuYy0xMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvZnJlZXplci5oXFx1MDAzZVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTMzPWVudW0gc2Nhbl9yZXN1bHQge1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTcwLVxcbm1tL2todWdlcGFnZWQuYzo3MTpzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpraHVnZXBhZ2VkX3RocmVhZCBfX3JlYWRfbW9zdGx5O1xcbm1tL2todWdlcGFnZWQuYzo3MjpzdGF0aWMgREVGSU5FX01VVEVYKGtodWdlcGFnZWRfbXV0ZXgpO1xcbm1tL2todWdlcGFnZWQuYy03My1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy03Ny0gKi9cXG5tbS9raHVnZXBhZ2VkLmM6Nzg6c3RhdGljIHVuc2lnbmVkIGludCBraHVnZXBhZ2VkX3BhZ2VzX3RvX3NjYW4gX19yZWFkX21vc3RseTtcXG5tbS9raHVnZXBhZ2VkLmM6Nzk6c3RhdGljIHVuc2lnbmVkIGludCBraHVnZXBhZ2VkX3BhZ2VzX2NvbGxhcHNlZDtcXG5tbS9raHVnZXBhZ2VkLmM6ODA6c3RhdGljIHVuc2lnbmVkIGludCBraHVnZXBhZ2VkX2Z1bGxfc2NhbnM7XFxubW0va2h1Z2VwYWdlZC5jOjgxOnN0YXRpYyB1bnNpZ25lZCBpbnQga2h1Z2VwYWdlZF9zY2FuX3NsZWVwX21pbGxpc2VjcyBfX3JlYWRfbW9zdGx5ID0gMTAwMDA7XFxubW0va2h1Z2VwYWdlZC5jLTgyLS8qIGR1cmluZyBmcmFnbWVudGF0aW9uIHBvbGwgdGhlIGh1Z2VwYWdlIGFsbG9jYXRvciBvbmNlIGV2ZXJ5IG1pbnV0ZSAqL1xcbm1tL2todWdlcGFnZWQuYzo4MzpzdGF0aWMgdW5zaWduZWQgaW50IGtodWdlcGFnZWRfYWxsb2Nfc2xlZXBfbWlsbGlzZWNzIF9fcmVhZF9tb3N0bHkgPSA2MDAwMDtcXG5tbS9raHVnZXBhZ2VkLmM6ODQ6c3RhdGljIHVuc2lnbmVkIGxvbmcga2h1Z2VwYWdlZF9zbGVlcF9leHBpcmU7XFxubW0va2h1Z2VwYWdlZC5jOjg1OnN0YXRpYyBERUZJTkVfU1BJTkxPQ0soa2h1Z2VwYWdlZF9tbV9sb2NrKTtcXG5tbS9raHVnZXBhZ2VkLmM6ODY6c3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGtodWdlcGFnZWRfd2FpdCk7XFxubW0va2h1Z2VwYWdlZC5jLTg3LS8qXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtOTEtICpcXG5tbS9raHVnZXBhZ2VkLmM6OTI6ICogTm90ZSB0aGF0IHRoZXNlIGFyZSBvbmx5IHJlc3BlY3RlZCBpZiBjb2xsYXBzZSB3YXMgaW5pdGlhdGVkIGJ5IGtodWdlcGFnZWQuXFxubW0va2h1Z2VwYWdlZC5jLTkzLSAqL1xcbm1tL2todWdlcGFnZWQuYy05NC0jZGVmaW5lIEtIVUdFUEFHRURfTUFYX1BURVNfTElNSVQgKEhQQUdFX1BNRF9OUiAtIDEpXFxubW0va2h1Z2VwYWdlZC5jOjk1OnVuc2lnbmVkIGludCBraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgX19yZWFkX21vc3RseTtcXG5tbS9raHVnZXBhZ2VkLmM6OTY6c3RhdGljIHVuc2lnbmVkIGludCBraHVnZXBhZ2VkX21heF9wdGVzX3N3YXAgX19yZWFkX21vc3RseTtcXG5tbS9raHVnZXBhZ2VkLmM6OTc6c3RhdGljIHVuc2lnbmVkIGludCBraHVnZXBhZ2VkX21heF9wdGVzX3NoYXJlZCBfX3JlYWRfbW9zdGx5O1xcbm1tL2todWdlcGFnZWQuYy05OC1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xMDY9c3RydWN0IGNvbGxhcHNlX2NvbnRyb2wge1xcbm1tL2todWdlcGFnZWQuYzoxMDc6XFx0Ym9vbCBpc19raHVnZXBhZ2VkO1xcbm1tL2todWdlcGFnZWQuYy0xMDgtXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTExLVxcbm1tL2todWdlcGFnZWQuYzoxMTI6XFx0LyogTnVtIHBhZ2VzIHNjYW5uZWQgKHNlZSBraHVnZXBhZ2VkX3BhZ2VzX3RvX3NjYW4pICovXFxubW0va2h1Z2VwYWdlZC5jLTExMy1cXHR1bnNpZ25lZCBpbnQgcHJvZ3Jlc3M7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTIyLS8qKlxcbm1tL2todWdlcGFnZWQuYzoxMjM6ICogc3RydWN0IGtodWdlcGFnZWRfc2NhbiAtIGN1cnNvciBmb3Igc2Nhbm5pbmdcXG5tbS9raHVnZXBhZ2VkLmMtMTI0LSAqIEBtbV9oZWFkOiB0aGUgaGVhZCBvZiB0aGUgbW0gbGlzdCB0byBzY2FuXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTI3LSAqXFxubW0va2h1Z2VwYWdlZC5jOjEyODogKiBUaGVyZSBpcyBvbmx5IHRoZSBvbmUga2h1Z2VwYWdlZF9zY2FuIGluc3RhbmNlIG9mIHRoaXMgY3Vyc29yIHN0cnVjdHVyZS5cXG5tbS9raHVnZXBhZ2VkLmMtMTI5LSAqL1xcbm1tL2todWdlcGFnZWQuYzoxMzA6c3RydWN0IGtodWdlcGFnZWRfc2NhbiB7XFxubW0va2h1Z2VwYWdlZC5jLTEzMS1cXHRzdHJ1Y3QgbGlzdF9oZWFkIG1tX2hlYWQ7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTM1LVxcbm1tL2todWdlcGFnZWQuYzoxMzY6c3RhdGljIHN0cnVjdCBraHVnZXBhZ2VkX3NjYW4ga2h1Z2VwYWdlZF9zY2FuID0ge1xcbm1tL2todWdlcGFnZWQuYzoxMzc6XFx0Lm1tX2hlYWQgPSBMSVNUX0hFQURfSU5JVChraHVnZXBhZ2VkX3NjYW4ubW1faGVhZCksXFxubW0va2h1Z2VwYWdlZC5jLTEzOC19O1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTE0MT1zdGF0aWMgc3NpemVfdCBzY2FuX3NsZWVwX21pbGxpc2Vjc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE0NC17XFxubW0va2h1Z2VwYWdlZC5jOjE0NTpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwga2h1Z2VwYWdlZF9zY2FuX3NsZWVwX21pbGxpc2Vjcyk7XFxubW0va2h1Z2VwYWdlZC5jLTE0Ni19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTQ4PXN0YXRpYyBzc2l6ZV90IF9fc2xlZXBfbWlsbGlzZWNzX3N0b3JlKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE1OC1cXHQqbWlsbGlzZWNzID0gbXNlY3M7XFxubW0va2h1Z2VwYWdlZC5jOjE1OTpcXHRraHVnZXBhZ2VkX3NsZWVwX2V4cGlyZSA9IDA7XFxubW0va2h1Z2VwYWdlZC5jOjE2MDpcXHR3YWtlX3VwX2ludGVycnVwdGlibGUoXFx1MDAyNmtodWdlcGFnZWRfd2FpdCk7XFxubW0va2h1Z2VwYWdlZC5jLTE2MS1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xNjU9c3RhdGljIHNzaXplX3Qgc2Nhbl9zbGVlcF9taWxsaXNlY3Nfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTY4LXtcXG5tbS9raHVnZXBhZ2VkLmM6MTY5OlxcdHJldHVybiBfX3NsZWVwX21pbGxpc2Vjc19zdG9yZShidWYsIGNvdW50LCBcXHUwMDI2a2h1Z2VwYWdlZF9zY2FuX3NsZWVwX21pbGxpc2Vjcyk7XFxubW0va2h1Z2VwYWdlZC5jLTE3MC19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTc0PXN0YXRpYyBzc2l6ZV90IGFsbG9jX3NsZWVwX21pbGxpc2Vjc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE3Ny17XFxubW0va2h1Z2VwYWdlZC5jOjE3ODpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwga2h1Z2VwYWdlZF9hbGxvY19zbGVlcF9taWxsaXNlY3MpO1xcbm1tL2todWdlcGFnZWQuYy0xNzktfVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTE4MT1zdGF0aWMgc3NpemVfdCBhbGxvY19zbGVlcF9taWxsaXNlY3Nfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTg0LXtcXG5tbS9raHVnZXBhZ2VkLmM6MTg1OlxcdHJldHVybiBfX3NsZWVwX21pbGxpc2Vjc19zdG9yZShidWYsIGNvdW50LCBcXHUwMDI2a2h1Z2VwYWdlZF9hbGxvY19zbGVlcF9taWxsaXNlY3MpO1xcbm1tL2todWdlcGFnZWQuYy0xODYtfVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTE5MD1zdGF0aWMgc3NpemVfdCBwYWdlc190b19zY2FuX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTkzLXtcXG5tbS9raHVnZXBhZ2VkLmM6MTk0OlxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiV1XFxcXG5cXFwiLCBraHVnZXBhZ2VkX3BhZ2VzX3RvX3NjYW4pO1xcbm1tL2todWdlcGFnZWQuYy0xOTUtfVxcbm1tL2todWdlcGFnZWQuYz0xOTY9c3RhdGljIHNzaXplX3QgcGFnZXNfdG9fc2Nhbl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMDYtXFxubW0va2h1Z2VwYWdlZC5jOjIwNzpcXHRraHVnZXBhZ2VkX3BhZ2VzX3RvX3NjYW4gPSBwYWdlcztcXG5tbS9raHVnZXBhZ2VkLmMtMjA4LVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTIxND1zdGF0aWMgc3NpemVfdCBwYWdlc19jb2xsYXBzZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMTcte1xcbm1tL2todWdlcGFnZWQuYzoyMTg6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXVcXFxcblxcXCIsIGtodWdlcGFnZWRfcGFnZXNfY29sbGFwc2VkKTtcXG5tbS9raHVnZXBhZ2VkLmMtMjE5LX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMjM9c3RhdGljIHNzaXplX3QgZnVsbF9zY2Fuc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIyNi17XFxubW0va2h1Z2VwYWdlZC5jOjIyNzpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwga2h1Z2VwYWdlZF9mdWxsX3NjYW5zKTtcXG5tbS9raHVnZXBhZ2VkLmMtMjI4LX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMzg9c3RhdGljIHNzaXplX3QgZGVmcmFnX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI0NC19XFxubW0va2h1Z2VwYWdlZC5jOjI0NTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGtodWdlcGFnZWRfZGVmcmFnX2F0dHIgPVxcbm1tL2todWdlcGFnZWQuYy0yNDYtXFx0X19BVFRSX1JXKGRlZnJhZyk7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjQ4LS8qXFxubW0va2h1Z2VwYWdlZC5jOjI0OTogKiBtYXhfcHRlc19ub25lIGNvbnRyb2xzIGlmIGtodWdlcGFnZWQgc2hvdWxkIGNvbGxhcHNlIGh1Z2VwYWdlcyBvdmVyXFxubW0va2h1Z2VwYWdlZC5jLTI1MC0gKiBhbnkgdW5tYXBwZWQgcHRlcyBpbiB0dXJuIHBvdGVudGlhbGx5IGluY3JlYXNpbmcgdGhlIG1lbW9yeVxcbm1tL2todWdlcGFnZWQuYzoyNTE6ICogZm9vdHByaW50IG9mIHRoZSB2bWFzLiBXaGVuIG1heF9wdGVzX25vbmUgaXMgMCBraHVnZXBhZ2VkIHdpbGwgbm90XFxubW0va2h1Z2VwYWdlZC5jLTI1Mi0gKiByZWR1Y2UgdGhlIGF2YWlsYWJsZSBmcmVlIG1lbW9yeSBpbiB0aGUgc3lzdGVtIGFzIGl0XFxubW0va2h1Z2VwYWdlZC5jLTI1My0gKiBydW5zLiBJbmNyZWFzaW5nIG1heF9wdGVzX25vbmUgd2lsbCBpbnN0ZWFkIHBvdGVudGlhbGx5IHJlZHVjZSB0aGVcXG5tbS9raHVnZXBhZ2VkLmM6MjU0OiAqIGZyZWUgbWVtb3J5IGluIHRoZSBzeXN0ZW0gZHVyaW5nIHRoZSBraHVnZXBhZ2VkIHNjYW4uXFxubW0va2h1Z2VwYWdlZC5jLTI1NS0gKi9cXG5tbS9raHVnZXBhZ2VkLmM9MjU2PXN0YXRpYyBzc2l6ZV90IG1heF9wdGVzX25vbmVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNTkte1xcbm1tL2todWdlcGFnZWQuYzoyNjA6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXVcXFxcblxcXCIsIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSk7XFxubW0va2h1Z2VwYWdlZC5jLTI2MS19XFxubW0va2h1Z2VwYWdlZC5jPTI2Mj1zdGF0aWMgc3NpemVfdCBtYXhfcHRlc19ub25lX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI3Mi1cXG5tbS9raHVnZXBhZ2VkLmM6MjczOlxcdGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSA9IG1heF9wdGVzX25vbmU7XFxubW0va2h1Z2VwYWdlZC5jLTI3NC1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNzYtfVxcbm1tL2todWdlcGFnZWQuYzoyNzc6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmVfYXR0ciA9XFxubW0va2h1Z2VwYWdlZC5jLTI3OC1cXHRfX0FUVFJfUlcobWF4X3B0ZXNfbm9uZSk7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MjgwPXN0YXRpYyBzc2l6ZV90IG1heF9wdGVzX3N3YXBfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yODMte1xcbm1tL2todWdlcGFnZWQuYzoyODQ6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXVcXFxcblxcXCIsIGtodWdlcGFnZWRfbWF4X3B0ZXNfc3dhcCk7XFxubW0va2h1Z2VwYWdlZC5jLTI4NS19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9Mjg3PXN0YXRpYyBzc2l6ZV90IG1heF9wdGVzX3N3YXBfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjk3LVxcbm1tL2todWdlcGFnZWQuYzoyOTg6XFx0a2h1Z2VwYWdlZF9tYXhfcHRlc19zd2FwID0gbWF4X3B0ZXNfc3dhcDtcXG5tbS9raHVnZXBhZ2VkLmMtMjk5LVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTMwMi1cXG5tbS9raHVnZXBhZ2VkLmM6MzAzOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUga2h1Z2VwYWdlZF9tYXhfcHRlc19zd2FwX2F0dHIgPVxcbm1tL2todWdlcGFnZWQuYy0zMDQtXFx0X19BVFRSX1JXKG1heF9wdGVzX3N3YXApO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTMwNj1zdGF0aWMgc3NpemVfdCBtYXhfcHRlc19zaGFyZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0zMDkte1xcbm1tL2todWdlcGFnZWQuYzozMTA6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXVcXFxcblxcXCIsIGtodWdlcGFnZWRfbWF4X3B0ZXNfc2hhcmVkKTtcXG5tbS9raHVnZXBhZ2VkLmMtMzExLX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0zMTM9c3RhdGljIHNzaXplX3QgbWF4X3B0ZXNfc2hhcmVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTMyMy1cXG5tbS9raHVnZXBhZ2VkLmM6MzI0OlxcdGtodWdlcGFnZWRfbWF4X3B0ZXNfc2hhcmVkID0gbWF4X3B0ZXNfc2hhcmVkO1xcbm1tL2todWdlcGFnZWQuYy0zMjUtXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzI4LVxcbm1tL2todWdlcGFnZWQuYzozMjk6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBraHVnZXBhZ2VkX21heF9wdGVzX3NoYXJlZF9hdHRyID1cXG5tbS9raHVnZXBhZ2VkLmMtMzMwLVxcdF9fQVRUUl9SVyhtYXhfcHRlc19zaGFyZWQpO1xcbm1tL2todWdlcGFnZWQuYy0zMzEtXFxubW0va2h1Z2VwYWdlZC5jOjMzMjpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqa2h1Z2VwYWdlZF9hdHRyW10gPSB7XFxubW0va2h1Z2VwYWdlZC5jOjMzMzpcXHRcXHUwMDI2a2h1Z2VwYWdlZF9kZWZyYWdfYXR0ci5hdHRyLFxcbm1tL2todWdlcGFnZWQuYzozMzQ6XFx0XFx1MDAyNmtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZV9hdHRyLmF0dHIsXFxubW0va2h1Z2VwYWdlZC5jOjMzNTpcXHRcXHUwMDI2a2h1Z2VwYWdlZF9tYXhfcHRlc19zd2FwX2F0dHIuYXR0cixcXG5tbS9raHVnZXBhZ2VkLmM6MzM2OlxcdFxcdTAwMjZraHVnZXBhZ2VkX21heF9wdGVzX3NoYXJlZF9hdHRyLmF0dHIsXFxubW0va2h1Z2VwYWdlZC5jLTMzNy1cXHRcXHUwMDI2cGFnZXNfdG9fc2Nhbl9hdHRyLmF0dHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzQ0LVxcbm1tL2todWdlcGFnZWQuYzozNDU6c3RydWN0IGF0dHJpYnV0ZV9ncm91cCBraHVnZXBhZ2VkX2F0dHJfZ3JvdXAgPSB7XFxubW0va2h1Z2VwYWdlZC5jOjM0NjpcXHQuYXR0cnMgPSBraHVnZXBhZ2VkX2F0dHIsXFxubW0va2h1Z2VwYWdlZC5jOjM0NzpcXHQubmFtZSA9IFxcXCJraHVnZXBhZ2VkXFxcIixcXG5tbS9raHVnZXBhZ2VkLmMtMzQ4LX07XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MzY3PXN0YXRpYyB1bnNpZ25lZCBpbnQgY29sbGFwc2VfbWF4X3B0ZXNfbm9uZShzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzY5LXtcXG5tbS9raHVnZXBhZ2VkLmM6MzcwOlxcdGNvbnN0IHVuc2lnbmVkIGludCBtYXhfcHRlc19ub25lID0ga2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lO1xcbm1tL2todWdlcGFnZWQuYy0zNzEtXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzc0LVxcdC8qIGZvciBNQURWX0NPTExBUFNFLCBhbGxvdyBhbnkgZW1wdHkvc2hhcmVkIHplcm9wYWdlIFBURXMgKi9cXG5tbS9raHVnZXBhZ2VkLmM6Mzc1OlxcdGlmICghY2MtXFx1MDAzZWlzX2todWdlcGFnZWQpXFxubW0va2h1Z2VwYWdlZC5jLTM3Ni1cXHRcXHRyZXR1cm4gSFBBR0VfUE1EX05SO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTQwNj1zdGF0aWMgdW5zaWduZWQgaW50IGNvbGxhcHNlX21heF9wdGVzX3NoYXJlZChzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNDEyLVxcdCAqL1xcbm1tL2todWdlcGFnZWQuYzo0MTM6XFx0aWYgKCFjYy1cXHUwMDNlaXNfa2h1Z2VwYWdlZClcXG5tbS9raHVnZXBhZ2VkLmMtNDE0LVxcdFxcdHJldHVybiBIUEFHRV9QTURfTlI7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNDIxLVxcdC8qIGZvciBQTUQgY29sbGFwc2UsIHJlc3BlY3QgdGhlIHVzZXIgZGVmaW5lZCBtYXhpbXVtICovXFxubW0va2h1Z2VwYWdlZC5jOjQyMjpcXHRyZXR1cm4ga2h1Z2VwYWdlZF9tYXhfcHRlc19zaGFyZWQ7XFxubW0va2h1Z2VwYWdlZC5jLTQyMy19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NDM0PXN0YXRpYyB1bnNpZ25lZCBpbnQgY29sbGFwc2VfbWF4X3B0ZXNfc3dhcChzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNDQwLVxcdCAqL1xcbm1tL2todWdlcGFnZWQuYzo0NDE6XFx0aWYgKCFjYy1cXHUwMDNlaXNfa2h1Z2VwYWdlZClcXG5tbS9raHVnZXBhZ2VkLmMtNDQyLVxcdFxcdHJldHVybiBIUEFHRV9QTURfTlI7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNDQ2LVxcdC8qIGZvciBQTUQgY29sbGFwc2UsIHJlc3BlY3QgdGhlIHVzZXIgZGVmaW5lZCBtYXhpbXVtICovXFxubW0va2h1Z2VwYWdlZC5jOjQ0NzpcXHRyZXR1cm4ga2h1Z2VwYWdlZF9tYXhfcHRlc19zd2FwO1xcbm1tL2todWdlcGFnZWQuYy00NDgtfVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTQ1MD1pbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy00NTctXFx0XFx0LypcXG5tbS9raHVnZXBhZ2VkLmM6NDU4OlxcdFxcdCAqIElmIHRoZSB2bWEgYmVjb21lIGdvb2QgZm9yIGtodWdlcGFnZWQgdG8gc2NhbixcXG5tbS9raHVnZXBhZ2VkLmMtNDU5LVxcdFxcdCAqIHJlZ2lzdGVyIGl0IGhlcmUgd2l0aG91dCB3YWl0aW5nIGEgcGFnZSBmYXVsdCB0aGF0XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNDYxLVxcdFxcdCAqL1xcbm1tL2todWdlcGFnZWQuYzo0NjI6XFx0XFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCAqdm1fZmxhZ3MpO1xcbm1tL2todWdlcGFnZWQuYy00NjMtXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNDY3LVxcdFxcdC8qXFxubW0va2h1Z2VwYWdlZC5jOjQ2ODpcXHRcXHQgKiBTZXR0aW5nIFZNX05PSFVHRVBBR0Ugd2lsbCBwcmV2ZW50IGtodWdlcGFnZWQgZnJvbSBzY2FubmluZ1xcbm1tL2todWdlcGFnZWQuYzo0Njk6XFx0XFx0ICogdGhpcyB2bWEgZXZlbiBpZiB3ZSBsZWF2ZSB0aGUgbW0gcmVnaXN0ZXJlZCBpbiBraHVnZXBhZ2VkIGlmXFxubW0va2h1Z2VwYWdlZC5jLTQ3MC1cXHRcXHQgKiBpdCBnb3QgcmVnaXN0ZXJlZCBiZWZvcmUgVk1fTk9IVUdFUEFHRSB3YXMgc2V0Llxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTQ3Ny1cXG5tbS9raHVnZXBhZ2VkLmM6NDc4OmludCBfX2luaXQga2h1Z2VwYWdlZF9pbml0KHZvaWQpXFxubW0va2h1Z2VwYWdlZC5jLTQ3OS17XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNDgzLVxcbm1tL2todWdlcGFnZWQuYzo0ODQ6XFx0a2h1Z2VwYWdlZF9wYWdlc190b19zY2FuID0gSFBBR0VfUE1EX05SICogODtcXG5tbS9raHVnZXBhZ2VkLmM6NDg1OlxcdGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSA9IEtIVUdFUEFHRURfTUFYX1BURVNfTElNSVQ7XFxubW0va2h1Z2VwYWdlZC5jOjQ4NjpcXHRraHVnZXBhZ2VkX21heF9wdGVzX3N3YXAgPSBIUEFHRV9QTURfTlIgLyA4O1xcbm1tL2todWdlcGFnZWQuYzo0ODc6XFx0a2h1Z2VwYWdlZF9tYXhfcHRlc19zaGFyZWQgPSBIUEFHRV9QTURfTlIgLyAyO1xcbm1tL2todWdlcGFnZWQuYy00ODgtXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNDkxLVxcbm1tL2todWdlcGFnZWQuYzo0OTI6dm9pZCBfX2luaXQga2h1Z2VwYWdlZF9kZXN0cm95KHZvaWQpXFxubW0va2h1Z2VwYWdlZC5jLTQ5My17XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NTIwPXN0YXRpYyBib29sIGh1Z2VwYWdlX2VuYWJsZWQodm9pZClcXG4tLVxcbm1tL2todWdlcGFnZWQuYy01MzctXFxubW0va2h1Z2VwYWdlZC5jOjUzODp2b2lkIF9fa2h1Z2VwYWdlZF9lbnRlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS9raHVnZXBhZ2VkLmMtNTM5LXtcXG4tLVxcbm1tL2todWdlcGFnZWQuYy01NDItXFxubW0va2h1Z2VwYWdlZC5jOjU0MzpcXHQvKiBfX2todWdlcGFnZWRfZXhpdCgpIG11c3Qgbm90IHJ1biBmcm9tIHVuZGVyIHVzICovXFxubW0va2h1Z2VwYWdlZC5jLTU0NC1cXHRWTV9CVUdfT05fTU0oY29sbGFwc2VfdGVzdF9leGl0KG1tKSwgbW0pO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTU1NC1cXG5tbS9raHVnZXBhZ2VkLmM6NTU1OlxcdHNwaW5fbG9jayhcXHUwMDI2a2h1Z2VwYWdlZF9tbV9sb2NrKTtcXG5tbS9raHVnZXBhZ2VkLmMtNTU2LVxcdG1tX3Nsb3RfaW5zZXJ0KG1tX3Nsb3RzX2hhc2gsIG1tLCBzbG90KTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYy01NjAtXFx0ICovXFxubW0va2h1Z2VwYWdlZC5jOjU2MTpcXHR3YWtldXAgPSBsaXN0X2VtcHR5KFxcdTAwMjZraHVnZXBhZ2VkX3NjYW4ubW1faGVhZCk7XFxubW0va2h1Z2VwYWdlZC5jOjU2MjpcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZzbG90LVxcdTAwM2VtbV9ub2RlLCBcXHUwMDI2a2h1Z2VwYWdlZF9zY2FuLm1tX2hlYWQpO1xcbm1tL2todWdlcGFnZWQuYzo1NjM6XFx0c3Bpbl91bmxvY2soXFx1MDAyNmtodWdlcGFnZWRfbW1fbG9jayk7XFxubW0va2h1Z2VwYWdlZC5jLTU2NC1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy01NjYtXFx0aWYgKHdha2V1cClcXG5tbS9raHVnZXBhZ2VkLmM6NTY3OlxcdFxcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcXHUwMDI2a2h1Z2VwYWdlZF93YWl0KTtcXG5tbS9raHVnZXBhZ2VkLmMtNTY4LX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz01NzQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTU3OC1cXG5tbS9raHVnZXBhZ2VkLmM6NTc5OlxcdC8qIElmIGtodWdlcGFnZWQgaXMgc2Nhbm5pbmcgYW4gYW5vbnltb3VzIHZtYSwgYWxsb3cgbVRIUCBjb2xsYXBzZSAqL1xcbm1tL2todWdlcGFnZWQuYy01ODAtXFx0aWYgKCh0dmFfZmxhZ3MgPT0gVFZBX0tIVUdFUEFHRUQpIFxcdTAwMjZcXHUwMDI2IHZtYV9pc19hbm9ueW1vdXModm1hKSlcXG4tLVxcbm1tL2todWdlcGFnZWQuYz01ODg9c3RhdGljIGJvb2wgY29sbGFwc2VfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTkzLVxcbm1tL2todWdlcGFnZWQuYzo1OTQ6dm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9raHVnZXBhZ2VkLmMtNTk1LVxcdFxcdFxcdCAgdm1fZmxhZ3NfdCB2bV9mbGFncylcXG4tLVxcbm1tL2todWdlcGFnZWQuYy01OTgtXFx0ICAgIFxcdTAwMjZcXHUwMDI2IGNvbGxhcHNlX3Bvc3NpYmxlKHZtYSwgdm1fZmxhZ3MsIFRWQV9LSFVHRVBBR0VEKSlcXG5tbS9raHVnZXBhZ2VkLmM6NTk5OlxcdFxcdF9fa2h1Z2VwYWdlZF9lbnRlcih2bWEtXFx1MDAzZXZtX21tKTtcXG5tbS9raHVnZXBhZ2VkLmMtNjAwLX1cXG5tbS9raHVnZXBhZ2VkLmMtNjAxLVxcbm1tL2todWdlcGFnZWQuYzo2MDI6dm9pZCBfX2todWdlcGFnZWRfZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS9raHVnZXBhZ2VkLmMtNjAzLXtcXG4tLVxcbm1tL2todWdlcGFnZWQuYy02MDYtXFxubW0va2h1Z2VwYWdlZC5jOjYwNzpcXHRzcGluX2xvY2soXFx1MDAyNmtodWdlcGFnZWRfbW1fbG9jayk7XFxubW0va2h1Z2VwYWdlZC5jLTYwOC1cXHRzbG90ID0gbW1fc2xvdF9sb29rdXAobW1fc2xvdHNfaGFzaCwgbW0pO1xcbm1tL2todWdlcGFnZWQuYzo2MDk6XFx0aWYgKHNsb3QgXFx1MDAyNlxcdTAwMjYga2h1Z2VwYWdlZF9zY2FuLm1tX3Nsb3QgIT0gc2xvdCkge1xcbm1tL2todWdlcGFnZWQuYy02MTAtXFx0XFx0bW1fc2xvdF9yZW1vdmUoc2xvdCk7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNjEyLVxcdH1cXG5tbS9raHVnZXBhZ2VkLmM6NjEzOlxcdHNwaW5fdW5sb2NrKFxcdTAwMjZraHVnZXBhZ2VkX21tX2xvY2spO1xcbm1tL2todWdlcGFnZWQuYy02MTQtXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNjIzLVxcdFxcdCAqIHVuZGVyIG1tYXAgc2VtIHJlYWQgbW9kZSkuIFN0b3AgaGVyZSAoYWZ0ZXIgd2UgcmV0dXJuIGFsbFxcbm1tL2todWdlcGFnZWQuYzo2MjQ6XFx0XFx0ICogcGFnZXRhYmxlcyB3aWxsIGJlIGRlc3Ryb3llZCkgdW50aWwga2h1Z2VwYWdlZCBoYXMgZmluaXNoZWRcXG5tbS9raHVnZXBhZ2VkLmMtNjI1LVxcdFxcdCAqIHdvcmtpbmcgb24gdGhlIHBhZ2V0YWJsZXMgdW5kZXIgdGhlIG1tYXBfbG9jay5cXG4tLVxcbm1tL2todWdlcGFnZWQuYz02Njg9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgX19jb2xsYXBzZV9odWdlX3BhZ2VfaXNvbGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy03MTUtXFx0XFx0ICovXFxubW0va2h1Z2VwYWdlZC5jOjcxNjpcXHRcXHRpZiAoY2MtXFx1MDAzZWlzX2todWdlcGFnZWQgXFx1MDAyNlxcdTAwMjYgISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fRFJPUFBBQkxFKSBcXHUwMDI2XFx1MDAyNlxcbm1tL2todWdlcGFnZWQuYy03MTctXFx0XFx0ICAgIGZvbGlvX3Rlc3RfbGF6eWZyZWUoZm9saW8pIFxcdTAwMjZcXHUwMDI2ICFwdGVfZGlydHkocHRldmFsKSkge1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTgwNi1cXHRcXHQvKlxcbm1tL2todWdlcGFnZWQuYzo4MDc6XFx0XFx0ICogSWYgY29sbGFwc2Ugd2FzIGluaXRpYXRlZCBieSBraHVnZXBhZ2VkLCBjaGVjayB0aGF0IHRoZXJlIGlzXFxubW0va2h1Z2VwYWdlZC5jLTgwOC1cXHRcXHQgKiBlbm91Z2ggeW91bmcgcHRlIHRvIGp1c3RpZnkgY29sbGFwc2luZyB0aGUgcGFnZVxcbm1tL2todWdlcGFnZWQuYy04MDktXFx0XFx0ICovXFxubW0va2h1Z2VwYWdlZC5jOjgxMDpcXHRcXHRpZiAoY2MtXFx1MDAzZWlzX2todWdlcGFnZWQgXFx1MDAyNlxcdTAwMjZcXG5tbS9raHVnZXBhZ2VkLmMtODExLVxcdFxcdCAgICAocHRlX3lvdW5nKHB0ZXZhbCkgfHwgZm9saW9fdGVzdF95b3VuZyhmb2xpbykgfHxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy04MTYtXFxubW0va2h1Z2VwYWdlZC5jOjgxNzpcXHRpZiAodW5saWtlbHkoY2MtXFx1MDAzZWlzX2todWdlcGFnZWQgXFx1MDAyNlxcdTAwMjYgIXJlZmVyZW5jZWQpKSB7XFxubW0va2h1Z2VwYWdlZC5jLTgxOC1cXHRcXHRyZXN1bHQgPSBTQ0FOX0xBQ0tfUkVGRVJFTkNFRF9QQUdFO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTkzND1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBfX2NvbGxhcHNlX2h1Z2VfcGFnZV9jb3B5KHB0ZV90ICpwdGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtOTcyLVxcbm1tL2todWdlcGFnZWQuYzo5NzM6c3RhdGljIHZvaWQga2h1Z2VwYWdlZF9hbGxvY19zbGVlcCh2b2lkKVxcbm1tL2todWdlcGFnZWQuYy05NzQte1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTk3Ni1cXG5tbS9raHVnZXBhZ2VkLmM6OTc3OlxcdGFkZF93YWl0X3F1ZXVlKFxcdTAwMjZraHVnZXBhZ2VkX3dhaXQsIFxcdTAwMjZ3YWl0KTtcXG5tbS9raHVnZXBhZ2VkLmMtOTc4LVxcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFfFRBU0tfRlJFRVpBQkxFKTtcXG5tbS9raHVnZXBhZ2VkLmM6OTc5OlxcdHNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcyhraHVnZXBhZ2VkX2FsbG9jX3NsZWVwX21pbGxpc2VjcykpO1xcbm1tL2todWdlcGFnZWQuYzo5ODA6XFx0cmVtb3ZlX3dhaXRfcXVldWUoXFx1MDAyNmtodWdlcGFnZWRfd2FpdCwgXFx1MDAyNndhaXQpO1xcbm1tL2todWdlcGFnZWQuYy05ODEtfVxcbm1tL2todWdlcGFnZWQuYy05ODItXFxubW0va2h1Z2VwYWdlZC5jOjk4MzpzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wga2h1Z2VwYWdlZF9jb2xsYXBzZV9jb250cm9sID0ge1xcbm1tL2todWdlcGFnZWQuYzo5ODQ6XFx0LmlzX2todWdlcGFnZWQgPSB0cnVlLFxcbm1tL2todWdlcGFnZWQuYy05ODUtfTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz05ODc9c3RhdGljIGJvb2wgY29sbGFwc2Vfc2Nhbl9hYm9ydChpbnQgbmlkLCBzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTAxMC1cXG5tbS9raHVnZXBhZ2VkLmM6MTAxMTojZGVmaW5lIGtodWdlcGFnZWRfZGVmcmFnKClcXHRcXHRcXHRcXHRcXHRcXFxcXFxubW0va2h1Z2VwYWdlZC5jLTEwMTItXFx0KHRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzIFxcdTAwMjZcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTAxNC1cXG5tbS9raHVnZXBhZ2VkLmM6MTAxNTovKiBEZWZyYWcgZm9yIGtodWdlcGFnZWQgd2lsbCBlbnRlciBkaXJlY3QgcmVjbGFpbS9jb21wYWN0aW9uIGlmIG5lY2Vzc2FyeSAqL1xcbm1tL2todWdlcGFnZWQuYzoxMDE2OnN0YXRpYyBpbmxpbmUgZ2ZwX3QgYWxsb2NfaHVnZXBhZ2Vfa2h1Z2VwYWdlZF9nZnBtYXNrKHZvaWQpXFxubW0va2h1Z2VwYWdlZC5jLTEwMTcte1xcbm1tL2todWdlcGFnZWQuYzoxMDE4OlxcdHJldHVybiBraHVnZXBhZ2VkX2RlZnJhZygpID8gR0ZQX1RSQU5TSFVHRSA6IEdGUF9UUkFOU0hVR0VfTElHSFQ7XFxubW0va2h1Z2VwYWdlZC5jLTEwMTktfVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTEwNTM9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgaHVnZXBhZ2Vfdm1hX3JldmFsaWRhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMDU3LVxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbm1tL2todWdlcGFnZWQuYzoxMDU4OlxcdGVudW0gdHZhX3R5cGUgdHlwZSA9IGNjLVxcdTAwM2Vpc19raHVnZXBhZ2VkID8gVFZBX0tIVUdFUEFHRUQgOlxcbm1tL2todWdlcGFnZWQuYy0xMDU5LVxcdFxcdFxcdFxcdCBUVkFfRk9SQ0VEX0NPTExBUFNFO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEwODAtXFx0ICogQW5vbiBWTUEgZXhwZWN0ZWQsIHRoZSBhZGRyZXNzIG1heSBiZSB1bm1hcHBlZCB0aGVuXFxubW0va2h1Z2VwYWdlZC5jOjEwODE6XFx0ICogcmVtYXBwZWQgdG8gZmlsZSBhZnRlciBraHVnZXBhZ2VkIHJlYXF1aXJlZCB0aGUgbW1hcF9sb2NrLlxcbm1tL2todWdlcGFnZWQuYy0xMDgyLVxcdCAqXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTA5MT1zdGF0aWMgaW5saW5lIGVudW0gc2Nhbl9yZXN1bHQgY2hlY2tfcG1kX3N0YXRlKHBtZF90ICpwbWQpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTA5OC1cXHQvKlxcbm1tL2todWdlcGFnZWQuYzoxMDk5OlxcdCAqIFRoZSBmb2xpbyBtYXkgYmUgdW5kZXIgbWlncmF0aW9uIHdoZW4ga2h1Z2VwYWdlZCBpcyB0cnlpbmcgdG9cXG5tbS9raHVnZXBhZ2VkLmMtMTEwMC1cXHQgKiBjb2xsYXBzZSBpdC4gTWlncmF0aW9uIHN1Y2Nlc3Mgb3IgZmFpbHVyZSB3aWxsIGV2ZW50dWFsbHkgZW5kXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTEyND1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjaGVja19wbWRfc3RpbGxfdmFsaWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTEzOC0gKiBCcmluZyBtaXNzaW5nIHBhZ2VzIGluIGZyb20gc3dhcCwgdG8gY29tcGxldGUgVEhQIGNvbGxhcHNlLlxcbm1tL2todWdlcGFnZWQuYzoxMTM5OiAqIE9ubHkgZG9uZSBpZiBraHVnZXBhZ2VkX3NjYW5fcG1kIGJlbGlldmVzIGl0IGlzIHdvcnRod2hpbGUuXFxubW0va2h1Z2VwYWdlZC5jLTExNDAtICpcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xMjM5PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGFsbG9jX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEyNDEte1xcbm1tL2todWdlcGFnZWQuYzoxMjQyOlxcdGdmcF90IGdmcCA9IChjYy1cXHUwMDNlaXNfa2h1Z2VwYWdlZCA/IGFsbG9jX2h1Z2VwYWdlX2todWdlcGFnZWRfZ2ZwbWFzaygpIDpcXG5tbS9raHVnZXBhZ2VkLmMtMTI0My1cXHRcXHQgICAgIEdGUF9UUkFOU0hVR0UpO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTE1OTI9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2Nhbl9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTU5OC1cXHR1bnNpZ25lZCBpbnQgbWF4X3B0ZXNfbm9uZSA9IGNvbGxhcHNlX21heF9wdGVzX25vbmUoY2MsIHZtYSwgSFBBR0VfUE1EX09SREVSKTtcXG5tbS9raHVnZXBhZ2VkLmM6MTU5OTpcXHRlbnVtIHR2YV90eXBlIHR2YV9mbGFncyA9IGNjLVxcdTAwM2Vpc19raHVnZXBhZ2VkID8gVFZBX0tIVUdFUEFHRUQgOiBUVkFfRk9SQ0VEX0NPTExBUFNFO1xcbm1tL2todWdlcGFnZWQuYy0xNjAwLVxcdHBtZF90ICpwbWQ7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTcwMC1cXHRcXHQgKi9cXG5tbS9raHVnZXBhZ2VkLmM6MTcwMTpcXHRcXHRpZiAoY2MtXFx1MDAzZWlzX2todWdlcGFnZWQgXFx1MDAyNlxcdTAwMjYgISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fRFJPUFBBQkxFKSBcXHUwMDI2XFx1MDAyNlxcbm1tL2todWdlcGFnZWQuYy0xNzAyLVxcdFxcdCAgICBmb2xpb190ZXN0X2xhenlmcmVlKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhcHRlX2RpcnR5KHB0ZXZhbCkpIHtcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xNzY0LVxcdFxcdC8qXFxubW0va2h1Z2VwYWdlZC5jOjE3NjU6XFx0XFx0ICogSWYgY29sbGFwc2Ugd2FzIGluaXRpYXRlZCBieSBraHVnZXBhZ2VkLCBjaGVjayB0aGF0IHRoZXJlIGlzXFxubW0va2h1Z2VwYWdlZC5jLTE3NjYtXFx0XFx0ICogZW5vdWdoIHlvdW5nIHB0ZSB0byBqdXN0aWZ5IGNvbGxhcHNpbmcgdGhlIHBhZ2VcXG5tbS9raHVnZXBhZ2VkLmMtMTc2Ny1cXHRcXHQgKi9cXG5tbS9raHVnZXBhZ2VkLmM6MTc2ODpcXHRcXHRpZiAoY2MtXFx1MDAzZWlzX2todWdlcGFnZWQgXFx1MDAyNlxcdTAwMjZcXG5tbS9raHVnZXBhZ2VkLmMtMTc2OS1cXHRcXHQgICAgKHB0ZV95b3VuZyhwdGV2YWwpIHx8IGZvbGlvX3Rlc3RfeW91bmcoZm9saW8pIHx8XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTc3My1cXHR9XFxubW0va2h1Z2VwYWdlZC5jOjE3NzQ6XFx0aWYgKGNjLVxcdTAwM2Vpc19raHVnZXBhZ2VkIFxcdTAwMjZcXHUwMDI2XFxubW0va2h1Z2VwYWdlZC5jLTE3NzUtXFx0XFx0ICAgKCFyZWZlcmVuY2VkIHx8XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTc5MS1vdXQ6XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjMzOjMzLjA4NDY3Mjk0N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Nzc1NTIxNjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLlxuXG4qKkludmVzdGlnYXRpbmcgVFJBTlNQQVJFTlRfSFVHRVBBR0UgYW5kIFVTRVJGQVVMVEZEIGluIEtjb25maWcqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHR3byBmZWF0dXJlcywgVFJBTlNQQVJFTlRfSFVHRVBBR0UgYW5kIFVTRVJGQVVMVEZELCBhcmUgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlcyDigJMgc3BlY2lmaWNhbGx5LCBJJ2xsIHN0YXJ0IHdpdGggYG1tL0tjb25maWdgIGFuZCBzZWUgd2hhdCB0aGUgZGVmaW5pdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhcmUgZm9yIFRSQU5TUEFSRU5UX0hVR0VQQUdFLiBUaGVuLCBJJ2xsIG5lZWQgdG8gbG9jYXRlIHRoZSBgS2NvbmZpZ2AgZm9yIFVTRVJGQVVMVEZELCB3aGljaCBpcyBsaWtlbHkgaW4gb3IgbmVhciB0aGUgcmVsZXZhbnQgY29kZSwgYGZzL3VzZXJmYXVsdGZkLmNgIG9yIGEgc2ltaWxhciBmaWxlc3lzdGVtLXNwZWNpZmljIGRpcmVjdG9yeS4gSSdtIGFmdGVyIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGFueSByZWxhdGVkIGRlcGVuZGVuY2llcyB0byBnZXQgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBhcmUgY29udHJvbGxlZCBhdCBjb21waWxlIHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MTY2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzM6MzkuODYwMTk2NzAzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTQ3NjM0MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTgzNT1jb25maWcgTU1fSURcXG4tLVxcbm1tL0tjb25maWctODM3LVxcbm1tL0tjb25maWc6ODM4Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTgzOS1cXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbi0tXFxubW0vS2NvbmZpZz04NTY9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg2MS1cXG5tbS9LY29uZmlnOjg2MjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04NjMtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NjgtXFxubW0vS2NvbmZpZzo4Njk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9LY29uZmlnLTg3MC1cXHRcXHRib29sIFxcXCJtYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NzctXFxubW0vS2NvbmZpZzo4Nzg6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXFxubW0vS2NvbmZpZy04NzktXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg4NT1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODk0LVxcbm1tL0tjb25maWc6ODk1OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXFxubW0vS2NvbmZpZy04OTYtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkwNC1cXG5tbS9LY29uZmlnOjkwNTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTkwNi1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkxMi1cXG5tbS9LY29uZmlnOjkxMzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTE0LVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MjAtXFxubW0vS2NvbmZpZzo5MjE6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05MjItXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz05MzA9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTkzOS1cXG5tbS9LY29uZmlnOjk0MDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxcbm1tL0tjb25maWctOTQxLVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NDgtXFxubW0vS2NvbmZpZzo5NDk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05NTAtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NTYtXFxubW0vS2NvbmZpZzo5NTc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTk1OC1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTY0LVxcbm1tL0tjb25maWc6OTY1OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTY2LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzM6NDAuMTc0OTY1Njk4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3Mjg2NzY1NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgVXNlcmZhdWx0ZmQgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGB1c2VyZmF1bHRmZGAgZmVhdHVyZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIHNob3VsZCBwcm9iYWJseSByZWZyZXNoIG15IG1lbW9yeSBvZiBob3cgdGhpcyBpcyBjb25maWd1cmVkLiBMZXQncyBzdGFydCBieSBoaXR0aW5nIHRoZSBzb3VyY2UgY29kZSBkaXJlY3RseSDigJMgc3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBhdCBgZnMvdXNlcmZhdWx0ZmQuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gVGhlbiwgdG8gZmlndXJlIG91dCBob3cgaXQncyBlbmFibGVkIG9yIGRpc2FibGVkIGF0IGJ1aWxkIHRpbWUsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlLiBJJ20gZ3Vlc3NpbmcgdGhhdCB0aGVyZSdzIGEgY29ycmVzcG9uZGluZyBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGZsZXhpYmxlIHRoaXMgZmVhdHVyZSBpcyBhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gY2hvaWNlcy4gSSdtIGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgb3Igb3ZlcmFsbCBzeXN0ZW0gYmVoYXZpb3IuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgdG8gd2hhdCBpcyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MTM3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzM6NDQuOTAzNjQ1Mjg1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDE0Njk4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJVU0VSRkFVTFRGRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy90YXNrX21tdS5jPTExNjY9c3RhdGljIHZvaWQgc2hvd19zbWFwX3ZtYV9mbGFncyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTEyMzYtI2VuZGlmIC8qIENPTkZJR19BUkNIX0hBU19QS0VZUyAqL1xcbmZzL3Byb2MvdGFza19tbXUuYzoxMjM3OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXFxuZnMvcHJvYy90YXNrX21tdS5jLTEyMzgtXFx0XFx0W2lsb2cyKFZNX1VGRkRfTUlOT1IpXVxcdD0gXFxcInVpXFxcIixcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTIzOTojZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUiAqL1xcbmZzL3Byb2MvdGFza19tbXUuYzoxMjQwOiNpZmRlZiBDT05GSUdfVVNFUkZBVUxURkRfUldQXFxuZnMvcHJvYy90YXNrX21tdS5jLTEyNDEtXFx0XFx0W2lsb2cyKFZNX1VGRkRfUldQKV1cXHQ9IFxcXCJ1clxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjMzOjQ0Ljk3Mzc5NjI3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0MjE0NTAwNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipUcmFjaW5nIHRoZSBVU0VSRkFVTFRGRCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBVU0VSRkFVTFRGRGAgd2l0aGluIHRoZSBrZXJuZWwncyBLY29uZmlnIHN5c3RlbS4gVGhpcyBpcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgaXQgcmVxdWlyZXMgYSBzeXN0ZW1hdGljIGFwcHJvYWNoLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGxldmVyYWdlIHRoZSBLY29uZmlnIGluZnJhc3RydWN0dXJlIGl0c2VsZiwga25vd2luZyBob3cgY3J1Y2lhbCBpdCBpcyB0byBrZXJuZWwgYnVpbGQgY29uZmlndXJhdGlvbnMuIEknbGwgbmVlZCB0byB1c2UgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgYEtjb25maWdgIGxhbmd1YWdlIGFuZCBzZWFyY2ggdG9vbHMgdG8gcGlucG9pbnQgZXZlcnkgaW5zdGFuY2Ugb2YgdGhhdCBzeW1ib2wuIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3IgYGZpbmRgIGNvbW1hbmQsIG1heWJlIHVzaW5nIGEgcmVjdXJzaXZlIHNlYXJjaCBhY3Jvc3MgdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgbG9va2luZyBmb3IgdGhlIHN0cmluZyBcIlVTRVJGQVVMVEZEXCIuXG5cbkhvd2V2ZXIsIEkga25vdyB0aGF0IGp1c3Qgc2VhcmNoaW5nIGZvciB0aGUgc3RyaW5nIFwiVVNFUkZBVUxURkRcIiBtaWdodCBiZSB0b28gYnJvYWQ7IHRoYXQgY291bGQgcGljayB1cCBhbnkgdXNhZ2Ugb2YgdGhhdCBuYW1lLCBub3QgbmVjZXNzYXJpbHkgdGhlICpkZWZpbml0aW9uKiBvZiB0aGUgY29uZmlnIG9wdGlvbi4gSSBuZWVkIHRvIGJlIG1vcmUgcHJlY2lzZS4gSSdsbCBmb2N1cyBvbiBLY29uZmlnIGZpbGVzICguY29uZmlnIG9yIEtjb25maWcgZmlsZXMpIGRpcmVjdGx5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBmb2N1cyBzdGF5cyBvbiB0aGUgYWN0dWFsIGRlZmluaXRpb24uIFRoZSBtb3N0IGVmZmVjdGl2ZSBhcHByb2FjaCwgSSB0aGluaywgd2lsbCBpbnZvbHZlIHNlYXJjaGluZyBmb3IgdGhlIGBjb25maWdgIGtleXdvcmQgZm9sbG93ZWQgYnkgYFVTRVJGQVVMVEZEYCwgc28gSSBjYW4gcXVpY2tseSBpZGVudGlmeSB0aGUgZGVmaW5pdGlvbiBpdHNlbGYuXG5cbk9uY2UgSSBoYXZlIHRob3NlIGhpdHMsIEknbGwgbmVlZCB0byBxdWlja2x5IGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgaW4gZWFjaCBmaWxlLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIGFzc29jaWF0ZWQgd2l0aCBgVVNFUkZBVUxURkRgLiBXaGF0IG90aGVyIG9wdGlvbnMgZG9lcyBpdCBkZXBlbmQgb24/IEFyZSB0aGVyZSBhbnkgc2VsZWN0IHN0YXRlbWVudHMgaW52b2x2ZWQ/IFdoYXQncyB0aGUgaGVscCB0ZXh0IGFzc29jaWF0ZWQgd2l0aCBpdD8gVGhlIGJyb2FkZXIgY29udGV4dCB3aWxsIHJldmVhbCB0aGUgcmF0aW9uYWxlIGJlaGluZCBpdHMgYXZhaWxhYmlsaXR5IGFuZCBhbnkgcHJlY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0LiBJJ2xsIGxpa2VseSBuZWVkIHRvIHRyYWNlIHRoZSBwYXRocyB0aHJvdWdoIGFueSBgaWZgIHN0YXRlbWVudHMgb3IgZGVwZW5kZW5jaWVzIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgcXVpY2sgYXVkaXQgd2lsbCBnaXZlIG1lIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSBpbiB0aGUga2VybmVsLiBGaW5hbGx5LCBJJ2xsIG9yZ2FuaXplIG15IGZpbmRpbmdzIHRvIHByb3ZpZGUgYSBjb21wbGV0ZSBvdmVydmlldyBvZiB0aGUgb3B0aW9ucyByZWxhdGVkIHRvIGBVU0VSRkFVTFRGRGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjE1LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzM6NTAuMzk1MjQ4ODlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzI3ODI2OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTRVJGQVVMVEZEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM3Nz1jb25maWcgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXFxuLS1cXG5tbS9LY29uZmlnLTEzODEtXFxubW0vS2NvbmZpZzoxMzgyOmNvbmZpZyBVU0VSRkFVTFRGRF9SV1BcXG5tbS9LY29uZmlnLTEzODMtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxubW0vS2NvbmZpZy0xMzkwLVxcbm1tL0tjb25maWc6MTM5MTptZW51Y29uZmlnIFVTRVJGQVVMVEZEXFxubW0vS2NvbmZpZy0xMzkyLVxcdGJvb2wgXFxcIkVuYWJsZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozMzo1MS45NjgwMzY2N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzgwMTk2NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBhcmVhIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHRoZSByZWxldmFudCBzZXR0aW5ncyBhcmUgbGlrZWx5IGNsdXN0ZXJlZCBzb21ld2hlcmUgYXJvdW5kIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGJldHdlZW4gbGluZXMgMTM3MCBhbmQgMTQwMC4gVGhpcyByYW5nZSBmZWVscyBsaWtlIGEgcGxhdXNpYmxlIHNwb3QgZm9yIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zIEknbSBpbnRlcmVzdGVkIGluIHRvIHJlc2lkZS4gTGV0J3Mgc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IHdlIGNhbiB1bmNvdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDE4NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjMzOjUzLjc0ODIzNjIyNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzcwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzcwOlxcdFxcdCAgZGlmZmVyZW5jZSBpbiB0aGVpciBuYW1lLlxcbjEzNzE6XFx0XFxuMTM3MjpcXHRjb25maWcgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQXFxuMTM3MzpcXHRcXHRib29sXFxuMTM3NDpcXHRcXHRoZWxwXFxuMTM3NTpcXHRcXHQgIEFyY2ggaGFzIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gc3VwcG9ydFxcbjEzNzY6XFx0XFxuMTM3NzpcXHRjb25maWcgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXFxuMTM3ODpcXHRcXHRib29sXFxuMTM3OTpcXHRcXHRoZWxwXFxuMTM4MDpcXHRcXHQgIEFyY2ggaGFzIHVzZXJmYXVsdGZkIG1pbm9yIGZhdWx0IHN1cHBvcnRcXG4xMzgxOlxcdFxcbjEzODI6XFx0Y29uZmlnIFVTRVJGQVVMVEZEX1JXUFxcbjEzODM6XFx0XFx0ZGVmX2Jvb2wgeVxcbjEzODQ6XFx0XFx0ZGVwZW5kcyBvbiA2NEJJVCBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBU19QVEVfUFJPVE5PTkUgXFx1MDAyNlxcdTAwMjYgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQXFxuMTM4NTpcXHRcXHRoZWxwXFxuMTM4NjpcXHRcXHQgIFVzZXJmYXVsdGZkIHJlYWQtd3JpdGUgcHJvdGVjdGlvbiAoVUZGRElPX1JXUFJPVEVDVCkgZGVsaXZlcnMgYVxcbjEzODc6XFx0XFx0ICB1c2VyZmF1bHRmZCBub3RpZmljYXRpb24gb24gZXZlcnkgYWNjZXNzIC0tIHJlYWQgb3Igd3JpdGUgLS0gdG8gYVxcbjEzODg6XFx0XFx0ICBwcm90ZWN0ZWQgcmFuZ2UsIGxldHRpbmcgdXNlcnNwYWNlIG9ic2VydmUgdGhlIHdvcmtpbmcgc2V0IG9mIGFcXG4xMzg5OlxcdFxcdCAgcHJvY2Vzcy5cXG4xMzkwOlxcdFxcbjEzOTE6XFx0bWVudWNvbmZpZyBVU0VSRkFVTFRGRFxcbjEzOTI6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHVzZXJmYXVsdGZkKCkgc3lzdGVtIGNhbGxcXFwiXFxuMTM5MzpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbjEzOTQ6XFx0XFx0aGVscFxcbjEzOTU6XFx0XFx0ICBFbmFibGUgdGhlIHVzZXJmYXVsdGZkKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gaW50ZXJjZXB0IGFuZFxcbjEzOTY6XFx0XFx0ICBoYW5kbGUgcGFnZSBmYXVsdHMgaW4gdXNlcmxhbmQuXFxuMTM5NzpcXHRcXG4xMzk4OlxcdGlmIFVTRVJGQVVMVEZEXFxuMTM5OTpcXHRjb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuMTQwMDpcXHRcXHRib29sIFxcXCJVc2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnQgZm9yIHNobWVtL2h1Z2V0bGJmc1xcXCJcXG4xNDAxOlxcdFxcdGRlZmF1bHQgeVxcbjE0MDI6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfV1BcXG4xNDAzOlxcdFxcbjE0MDQ6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozMzo1My43NDgzNDI0MTZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkwNjEzMzcyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBgdXNlcmZhdWx0ZmRfbWlub3JgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHVzZXJmYXVsdGZkX21pbm9yYCB2YXJpYWJsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGtub3cgKndoZXJlKiB0aGlzIGlzIGRlZmluZWQuIE15IGluc3RpbmN0IGlzIHRvIGdyZXAgZm9yIGl0IOKAkyB0aGF0J3MgdGhlIGZhc3Rlc3Qgd2F5IHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIGl0cyB1c2FnZSBhbmQgbG9jYXRpb24gd2l0aGluIHRoZSBjb2RlYmFzZS4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgbGVhZCBtZSB0byB0aGUgcmVsZXZhbnQgc3RydWN0dXJlIG9yIGZ1bmN0aW9uIGRlZmluaXRpb24uIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA4MzgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjMzOjU2LjY1NDQ3ODM1OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNzI4MzY4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyZmF1bHRmZF9taW5vclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0yMTI9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX3dwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjE2LVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjIxNzpzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfbWlub3Ioc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjE4LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTM2MT1zdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0zNjUtXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MzY2OnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9taW5vcihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0zNjcte1xcbi0tXFxubW0vaHVnZXRsYi5jPTU3NTI9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl9ub19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vaHVnZXRsYi5jLTU4NzktXFx0XFx0LyogQ2hlY2sgZm9yIHBhZ2UgaW4gdXNlcmZhdWx0IHJhbmdlLiAqL1xcbm1tL2h1Z2V0bGIuYzo1ODgwOlxcdFxcdGlmICh1c2VyZmF1bHRmZF9taW5vcih2bWEpKSB7XFxubW0vaHVnZXRsYi5jLTU4ODEtXFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xODU2PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE5MDUtXFx0ICovXFxubW0va2h1Z2VwYWdlZC5jOjE5MDY6XFx0aWYgKHVzZXJmYXVsdGZkX21pbm9yKHZtYSkpXFxubW0va2h1Z2VwYWdlZC5jLTE5MDctXFx0XFx0cmV0dXJuIFNDQU5fUFRFX1VGRkQ7XFxuLS1cXG5tbS9zaG1lbS5jPTI0MTc9c3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuLS1cXG5tbS9zaG1lbS5jLTI0NDEtXFx0Zm9saW8gPSBmaWxlbWFwX2dldF9lbnRyeShpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCBpbmRleCk7XFxubW0vc2htZW0uYzoyNDQyOlxcdGlmIChmb2xpbyBcXHUwMDI2XFx1MDAyNiB2bWEgXFx1MDAyNlxcdTAwMjYgdXNlcmZhdWx0ZmRfbWlub3Iodm1hKSkge1xcbm1tL3NobWVtLmMtMjQ0My1cXHRcXHRpZiAoIXhhX2lzX3ZhbHVlKGZvbGlvKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzM6NTguMTcxNzY2OTgzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MDYyOTk0MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBVc2VyZmF1bHRmZCBLZXJuZWwgSGVhZGVyKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBpbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaGAgaGVhZGVyIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIHplcm9pbmcgaW4gb24gdGhlIGNvZGUgYXJvdW5kIGxpbmUgMjE3LiBJJ20gaG9waW5nIHRvIHVuZGVyc3RhbmQgYSBwYXJ0aWN1bGFyIHBpZWNlIG9mIGZ1bmN0aW9uYWxpdHkgb3IgZGF0YSBzdHJ1Y3R1cmUgcmVsYXRlZCB0byB1c2VyZmF1bHRmZCB0aGF0J3MgZGVmaW5lZCBvciB1c2VkIGFyb3VuZCB0aGF0IGFyZWEuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBleHBlY3RpbmcgdG8gcXVpY2tseSBncmFzcCB0aGUgY29udGV4dCwgYW5kIGFueSBzdWJ0bGV0aWVzIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBzaG91bGQganVtcCBvdXQgYXQgbWUgYXMgSSByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBNeSBnb2FsIGlzIHRvIGV4dHJhY3QgYSBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE1ODksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozNDowMS41NzgwNjkwMTZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxMDpcXHR9XFxuIDIxMTpcXHRcXG4gMjEyOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gMjEzOlxcdHtcXG4gMjE0OlxcdFxcdHJldHVybiB2bWFfdGVzdF9hbnlfbWFzayh2bWEsIFZNQV9VRkZEX1dQKTtcXG4gMjE1OlxcdH1cXG4gMjE2OlxcdFxcbiAyMTc6XFx0c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX21pbm9yKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiAyMTg6XFx0e1xcbiAyMTk6XFx0XFx0cmV0dXJuIHZtYV90ZXN0X2FueV9tYXNrKHZtYSwgVk1BX1VGRkRfTUlOT1IpO1xcbiAyMjA6XFx0fVxcbiAyMjE6XFx0XFxuIDIyMjpcXHRzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfcndwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiAyMjM6XFx0e1xcbiAyMjQ6XFx0XFx0LypcXG4gMjI1OlxcdFxcdCAqIENhbGxlcnMgZ2F0ZSBQQUdFX05PTkUgdXNhZ2Ugb24gdGhpczsgUEFHRV9OT05FIGlzIGEgQlVJTERfQlVHKClcXG4gMjI2OlxcdFxcdCAqIHdpdGhvdXQgQ09ORklHX0FSQ0hfSEFTX1BURV9QUk9UTk9ORSwgc28gZm9sZCB0byBmYWxzZS5cXG4gMjI3OlxcdFxcdCAqL1xcbiAyMjg6XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19QVEVfUFJPVE5PTkUpKVxcbiAyMjk6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozNDowMS41NzgxNzcwNzZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQwNjMyNDczNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHVzZXJmYXVsdGZkIGFuZCBUcmFuc3BhcmVudCBIdWdlcGFnZXMgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdHdlYWtzIGhvdyBUcmFuc3BhcmVudCBIdWdlcGFnZXMgKFRIUCkgaW50ZXJhY3RzIHdpdGggdXNlcmZhdWx0ZmQsIHNwZWNpZmljYWxseSB0aGUgbWlub3IgZmF1bHQgaGFuZGxpbmcuIFRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLCB3aGVyZSB0aGV5J3ZlIGFkZGVkIGEgY2hlY2s6IGlmIGEgVk1BIGlzIHJlZ2lzdGVyZWQgZm9yIHVzZXJmYXVsdGZkIG1pbm9yIGhhbmRsaW5nLCBkb24ndCBjb2xsYXBzZSBpdCBpbnRvIGEgVEhQLiBUaGlzIG1ha2VzIHNlbnNlOyB1c2VyZmF1bHRmZCBtaW5vciBWTUFzIGFyZSBleHBsaWNpdGx5IG1hbmFnZWQgYnkgdXNlcnNwYWNlLCBzbyBjb2xsYXBzaW5nIHRoZW0gd291bGQgYnJlYWsgdGhhdC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIklzIHRoaXMgd29ydGggZnV6emluZz9cIiBBYnNvbHV0ZWx5ISBUaGlzIGlzIHNtYWNrIGRhYiBpbiB0aGUgbWlkZGxlIG9mIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIGBraHVnZXBhZ2VkYCwgYHVzZXJmYXVsdGZkYCwgYW5kIFRIUHMg4oCTIGFsbCBvZiB3aGljaCBhcmUgY3JpdGljYWwgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhpcyBjb2RlIGlzIHRvdWNoZWQgYnkgc2V2ZXJhbCBzeXN0ZW0gY2FsbHMgdGhhdCBhcmUgbGlrZWx5IGV4cG9zZWQgdG8gZnV6emluZy4gSSBjYW4gc2VlIHRoaXMgYmVpbmcgdHJpZ2dlcmVkIHRocm91Z2ggYHVzZXJmYXVsdGZkYCwgYG1hZHZpc2VgIHdpdGggYE1BRFZfQ09MTEFQU0VgLCBgbW1hcGAgY2FsbHMsIHNobWVtLCB0bXBmcywgZmlsZS1iYWNrZWQgbWVtb3J5IGludGVyYWN0aW9ucywgYW5kIGV2ZW4gaG93IHRoZSBga2h1Z2VwYWdlZGAga3RocmVhZCBpdHNlbGYgd29ya3MuIEl0J3MgYSBnb2xkbWluZS5cblxuVG8gY29uZmlybSByZWFjaGFiaWxpdHksIEkgbmVlZCB0byBrbm93IGhvdyB1c2Vyc3BhY2UgY2FuIGFjdHVhbGx5IGNyZWF0ZSBhIHVzZXJmYXVsdGZkIG1pbm9yIHJlZ2lzdGVyZWQgVk1BLiBJdCBsb29rcyBsaWtlIGBzaG1lbWAsIGBodWdldGxiZnNgLCBvciBhIHJlZ3VsYXIgZmlsZSBjb3VsZCBkbyBpdC4gVGhlbiwgY2FsbGluZyBgbWFkdmlzZShNQURWX0NPTExBUFNFKWAgb3IganVzdCBsZXR0aW5nIGBraHVnZXBhZ2VkYCBzY2FuIGl0LCBvciBldmVuIHVzaW5nIGB1cHJvYmVzYCBvciBgY29sbGFwc2VfZmlsZWAgc2hvdWxkIGJlIGVub3VnaCB0byB0cmlnZ2VyIHRoaXMuXG5cbkknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgVVNFUkZBVUxURkRgIGFyZSBlbmFibGVkIHRvIGV2ZW4gdGVzdCB0aGlzLlxuXG5Ob3csIGZvciBmb2N1cyBzeW1ib2xz4oCmIEkgbmVlZCB0byBpZGVudGlmeSB3aGljaCBmdW5jdGlvbnMgYXJlIHRoZSBlbnRyeXBvaW50cy4gTGV0J3Mgc2VlLi4uIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGxvb2tzIGltcG9ydGFudCwgYnV0IGl0J3Mgc3RhdGljLCBzbyB0aGF0J3Mgbm90IGlkZWFsLiBIb3dldmVyLCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGlzICpub3QqIHN0YXRpYywgc28gdGhhdCdzIGEgZ29vZCBvbmUgdG8gbG9vayBhdCEgU2FtZSBmb3IgYG1hZHZpc2VfY29sbGFwc2VgLCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgLCBhbmQgYGh1Z2VwYWdlX21hZHZpc2VgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoZWlyIGRlY2xhcmF0aW9ucyBhbmQgZGVmaW5pdGlvbnMgdG8gYmUgc3VyZSB0aGV5IGFyZSBub24tc3RhdGljIGFuZCBleHBvc2VkIHRvIHRoZSB3aWRlciBrZXJuZWwgYW5kIGhlbmNlLCB0byB1c2Vyc3BhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMTM1LCJPdXRwdXRUb2tlbnMiOjYzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzQ6MDYuOTg0NTAzNjkyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY2OTg0MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZHxlbnVtfGJvb2x8dW5zaWduZWR8bG9uZykgKG1hZHZpc2VfY29sbGFwc2V8Y29sbGFwc2VfcHRlX21hcHBlZF90aHB8aHVnZXBhZ2VfbWFkdmlzZXxraHVnZXBhZ2VkKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2h1Z2VwYWdlZC5jPTQzND1zdGF0aWMgdW5zaWduZWQgaW50IGNvbGxhcHNlX21heF9wdGVzX3N3YXAoc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTQ0OS1cXG5tbS9raHVnZXBhZ2VkLmM6NDUwOmludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2todWdlcGFnZWQuYy00NTEtXFx0XFx0ICAgICB2bV9mbGFnc190ICp2bV9mbGFncywgaW50IGFkdmljZSlcXG4tLVxcbm1tL2todWdlcGFnZWQuYz01ODg9c3RhdGljIGJvb2wgY29sbGFwc2VfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTkzLVxcbm1tL2todWdlcGFnZWQuYzo1OTQ6dm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9raHVnZXBhZ2VkLmMtNTk1LVxcdFxcdFxcdCAgdm1fZmxhZ3NfdCB2bV9mbGFncylcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xODU2PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIxMDAtICovXFxubW0va2h1Z2VwYWdlZC5jOjIxMDE6dm9pZCBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2todWdlcGFnZWQuYy0yMTAyLVxcdFxcdGJvb2wgaW5zdGFsbF9wbWQpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MzEyND1pbnQgc3RhcnRfc3RvcF9raHVnZXBhZ2VkKHZvaWQpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzE1MC1cXG5tbS9raHVnZXBhZ2VkLmM6MzE1MTp2b2lkIGtodWdlcGFnZWRfbWluX2ZyZWVfa2J5dGVzX3VwZGF0ZSh2b2lkKVxcbm1tL2todWdlcGFnZWQuYy0zMTUyLXtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0zMTYzPXN0YXRpYyBpbnQgbWFkdmlzZV9jb2xsYXBzZV9lcnJubyhlbnVtIHNjYW5fcmVzdWx0IHIpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzE5NC1cXG5tbS9raHVnZXBhZ2VkLmM6MzE5NTppbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9raHVnZXBhZ2VkLmMtMzE5Ni1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sICpsb2NrX2Ryb3BwZWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjM0OjA3LjA5MTIxMjY3NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDI3NDA0NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gUmVsZXZhbnQgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBjb25zaWRlcmluZyBhbGwgdGhlIHJlbGV2YW50IHN5bWJvbHMgaW4gdGhpcyBhcmVhLiBMZXQgbWUgcXVpY2tseSBzY2FuIGZvciBhbnl0aGluZyBlbHNlIHRoYXQgbWlnaHQgYmUgaW1wb3J0YW50IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIG1haW4gc3ViamVjdC4gUmlnaHQsIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgYG1hZHZpc2VfY29sbGFwc2VgLCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLCBhbmQgYGh1Z2VwYWdlX21hZHZpc2VgLiBUaG9zZSBmZWVsIGxpa2UgdGhleSdyZSByZWxhdGVkLCBzbyBJIG5lZWQgdG8ga2VlcCB0aGVtIGluIG1pbmQgYXMgSSBkaWcgZGVlcGVyLlxuXG5OZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSBlc3NlbnRpYWwsIHN0YXJ0aW5nIHdpdGggYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkga25vdyB0aGF0IGRyaXZlcyB0aGUgaW5jbHVzaW9uIG9mIGBodWdlX21lbW9yeS5vYCBhbmQgYGtodWdlcGFnZWQub2AgaW4gYG1tL01ha2VmaWxlYCwgYnV0IEkgc2hvdWxkIGNoZWNrIHRoZSBtYWtlIGZpbGUgdG8gY29uZmlybS5cblxuVGhlbiwgdGhlcmXigJlzIGBDT05GSUdfVVNFUkZBVUxURkRgLiBJIHNob3VsZCBsb29rIGludG8gdGhhdCBpbiB0aGUgYG1tL0tjb25maWdgIGZpbGUuIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIGBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JgLCBwYXJ0aWN1bGFybHkgc2luY2UgeDg2IGFuZCBvdGhlciBhcmNoaXRlY3R1cmVzIHNlbGVjdCBpdC4gSSBzaG91bGQgZ28gYW5kIGNoZWNrIHRoYXQgYXMgd2VsbCB0byByb3VuZCBvdXQgdGhlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MDE2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjM0OjA5LjUxODYxOTU0NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NDIwMjU0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMjU0LVxcdHNlbGVjdCBUSFJFQURfSU5GT19JTl9UQVNLXFxuYXJjaC9hcm02NC9LY29uZmlnOjI1NTpcXHRzZWxlY3QgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SIGlmIFVTRVJGQVVMVEZEXFxuYXJjaC9hcm02NC9LY29uZmlnLTI1Ni1cXHRzZWxlY3QgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQIGlmIFVTRVJGQVVMVEZEXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnPTI9Y29uZmlnIExPT05HQVJDSFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy0xMzAtXFx0c2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBpZiA2NEJJVFxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6MTMxOlxcdHNlbGVjdCBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1IgaWYgNjRCSVQgXFx1MDAyNlxcdTAwMjYgVVNFUkZBVUxURkRcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTEzMi1cXHRzZWxlY3QgSEFWRV9BU01fTU9EVkVSU0lPTlNcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1ZcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xNTMtXFx0c2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgaWYgNjRCSVQgXFx1MDAyNlxcdTAwMjYgTU1VXFxuYXJjaC9yaXNjdi9LY29uZmlnOjE1NDpcXHRzZWxlY3QgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SIGlmIDY0QklUIFxcdTAwMjZcXHUwMDI2IFVTRVJGQVVMVEZEXFxuYXJjaC9yaXNjdi9LY29uZmlnLTE1NS1cXHRzZWxlY3QgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQIGlmIDY0QklUIFxcdTAwMjZcXHUwMDI2IE1NVSBcXHUwMDI2XFx1MDAyNiBVU0VSRkFVTFRGRCBcXHUwMDI2XFx1MDAyNiBSSVNDVl9JU0FfU1ZSU1c2MFQ1OUJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yMTMtXFx0c2VsZWN0IEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9XUCAgICAgICAgIGlmIFg4Nl82NCBcXHUwMDI2XFx1MDAyNiBVU0VSRkFVTFRGRFxcbmFyY2gveDg2L0tjb25maWc6MjE0OlxcdHNlbGVjdCBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcXHRpZiBYODZfNjQgXFx1MDAyNlxcdTAwMjYgVVNFUkZBVUxURkRcXG5hcmNoL3g4Ni9LY29uZmlnLTIxNS1cXHRzZWxlY3QgSEFWRV9BUkNIX1ZNQVBfU1RBQ0tcXHRcXHRpZiBYODZfNjRcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0xMTY2PXN0YXRpYyB2b2lkIHNob3dfc21hcF92bWFfZmxhZ3Moc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0xMjM2LSNlbmRpZiAvKiBDT05GSUdfQVJDSF9IQVNfUEtFWVMgKi9cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTIzNzojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUlxcbmZzL3Byb2MvdGFza19tbXUuYy0xMjM4LVxcdFxcdFtpbG9nMihWTV9VRkZEX01JTk9SKV1cXHQ9IFxcXCJ1aVxcXCIsXFxuZnMvcHJvYy90YXNrX21tdS5jOjEyMzk6I2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1IgKi9cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTI0MC0jaWZkZWYgQ09ORklHX1VTRVJGQVVMVEZEX1JXUFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTI5ND1lbnVtIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC01MDEtI2VuZGlmXFxuaW5jbHVkZS9saW51eC9tbS5oOjUwMjojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUlxcbmluY2x1ZGUvbGludXgvbW0uaC01MDMtI2RlZmluZSBWTV9VRkZEX01JTk9SXFx0SU5JVF9WTV9GTEFHKFVGRkRfTUlOT1IpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtNTIwLSNkZWZpbmUgVk1BX1VGRkRfV1BcXHRcXHRta192bWFfZmxhZ3MoVk1BX1VGRkRfV1BfQklUKVxcbmluY2x1ZGUvbGludXgvbW0uaDo1MjE6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcXG5pbmNsdWRlL2xpbnV4L21tLmgtNTIyLSNkZWZpbmUgVk1BX1VGRkRfTUlOT1JcXHRcXHRta192bWFfZmxhZ3MoVk1BX1VGRkRfTUlOT1JfQklUKVxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oPTE2MD1JRl9IQVZFX1BHX0FSQ0hfMyhhcmNoXzMpXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmgtMTgyLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaDoxODM6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmgtMTg0LSMgZGVmaW5lIElGX0hBVkVfVUZGRF9NSU5PUihmbGFnLCBuYW1lKSB7ZmxhZywgbmFtZX0sXFxuLS1cXG5tbS9LY29uZmlnPTEzNzI9Y29uZmlnIEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9XUFxcbi0tXFxubW0vS2NvbmZpZy0xMzc2LVxcbm1tL0tjb25maWc6MTM3Nzpjb25maWcgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXFxubW0vS2NvbmZpZy0xMzc4LVxcdGJvb2xcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9MzcxNj1zdGF0aWMgaW50IHVzZXJmYXVsdGZkX3JlZ2lzdGVyKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMzc2OC1cXHRpZiAodWZmZGlvX3JlZ2lzdGVyLm1vZGUgXFx1MDAyNiBVRkZESU9fUkVHSVNURVJfTU9ERV9NSU5PUikge1xcbm1tL3VzZXJmYXVsdGZkLmM6Mzc2OTojaWZuZGVmIENPTkZJR19IQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcXG5tbS91c2VyZmF1bHRmZC5jLTM3NzAtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTQzMTY9c3RhdGljIF9fdTY0IHVmZmRfYXBpX2F2YWlsYWJsZV9mZWF0dXJlcyh2b2lkKVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy00MzE5LVxcbm1tL3VzZXJmYXVsdGZkLmM6NDMyMDpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUikpXFxubW0vdXNlcmZhdWx0ZmQuYy00MzIxLVxcdFxcdGYgXFx1MDAyNj0gfihVRkZEX0ZFQVRVUkVfTUlOT1JfSFVHRVRMQkZTIHwgVUZGRF9GRUFUVVJFX01JTk9SX1NITUVNKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmg9MTAwPWVudW0ge1xcbi0tXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC0yOTktI2VuZGlmXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaDozMDA6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTMwMS0jZGVmaW5lIFZNX1VGRkRfTUlOT1JcXHRJTklUX1ZNX0ZMQUcoVUZGRF9NSU5PUilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6MzQ6MTEuMDAyODI3MjdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIwNDA2MjkyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb25maWd1cmF0aW9uIGZvciBVc2VyZmF1bHRmZC1NaW5vciBTdXBwb3J0KipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SYCBpcyBhdXRvbWF0aWNhbGx5IGhhbmRsZWQgaWYgYFVTRVJGQVVMVEZEYCBpcyBlbmFibGVkIG9uIHRoZSBzdGFuZGFyZCBhcmNoaXRlY3R1cmVzIGxpa2UgeDg2XzY0IGFuZCBhcm02NCDigJMgdGhhdCdzIGdvb2QsIG9uZSBsZXNzIHRoaW5nIHRvIHdvcnJ5IGFib3V0LiBUaGVyZWZvcmUsIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYFVTRVJGQVVMVEZEYC4gVGhlc2UgYXJlIHRoZSBrZXkgZW5hYmxlcnMuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IHRoYXQgZXZlcnl0aGluZyBhbGlnbnMgd2l0aCBteSByZXF1aXJlbWVudHMuIFllcywgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIHRydWUsIHNvIHRoYXQncyB0aGUgZ3JlZW4gbGlnaHQuIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJyYXkgY29uZmlybXMgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYFVTRVJGQVVMVEZEYCBhcyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBBbmQgdGhlIGBGb2N1c1N5bWJvbHNgIGFycmF5IGhpZ2hsaWdodHMgdGhlIGNydWNpYWwgZnVuY3Rpb25zOiBgbWFkdmlzZV9jb2xsYXBzZWAgYW5kIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAuIFRoZSByZWFzb25pbmcgY2xhcmlmaWVzIHRoZSBzcGVjaWZpYyBpc3N1ZSBhZGRyZXNzZWQg4oCTIGEgY2hlY2sgaW50cm9kdWNlZCB0byBwcmV2ZW50IGNvbGxhcHNpbmcgUFRFLW1hcHBlZCBUSFBzIGZvciBWTUFzIHRoYXQgYXJlIHVzaW5nIHVzZXJmYXVsdGZkLW1pbm9yLiBJdCBtYWtlcyBzZW5zZTsgdGhlIHBhdGNoIGlzIGFib3V0IHByb3RlY3RpbmcgdGhvc2UgbWFwcGluZ3MsIGFuZCB0aG9zZSB0d28gZnVuY3Rpb25zIGFyZSBrZXkgZm9yIHRoaXMgdnVsbmVyYWJpbGl0eS5cblxuTm93LCBhbGwgc2VlbXMgd2VsbCwgYW5kIEkgY2FuIG1vdmUgb24gdG8gdGhlIG5leHQgc3RlcCB3aGljaCBpcyB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIEkgY2FuIG5vdyBtb3ZlIHRvIHRoZSBuZXh0IHN0YWdlIG9mIHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1ODcyLCJPdXRwdXRUb2tlbnMiOjEzNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozNDoxNC4yMDY4OTMzOVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMzg1MDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiVVNFUkZBVUxURkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWR2aXNlX2NvbGxhcHNlXCIsXG4gICAgXCJjb2xsYXBzZV9wdGVfbWFwcGVkX3RocFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBpbiB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKSB0byBwcmV2ZW50IGNvbGxhcHNpbmcgUFRFLW1hcHBlZCBUSFAgcGFnZXMgd2l0aGluIFZNQXMgcmVnaXN0ZXJlZCB3aXRoIHVzZXJmYXVsdGZkIG1pbm9yIGZhdWx0IGhhbmRsaW5nICh1c2VyZmF1bHRmZF9taW5vcikuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2xsYXBzZSBsb2dpYyByZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9DT0xMQVBTRSkgb3Iga2h1Z2VwYWdlZCBiYWNrZ3JvdW5kIHNjYW5uaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJVU0VSRkFVTFRGRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hZHZpc2VfY29sbGFwc2VcIixcbiAgICBcImNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIFRIUCBwYWdlcyB3aXRoaW4gVk1BcyByZWdpc3RlcmVkIHdpdGggdXNlcmZhdWx0ZmQgbWlub3IgZmF1bHQgaGFuZGxpbmcgKHVzZXJmYXVsdGZkX21pbm9yKS4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbGxhcHNlIGxvZ2ljIHJlYWNoYWJsZSB2aWEgbWFkdmlzZShNQURWX0NPTExBUFNFKSBvciBraHVnZXBhZ2VkIGJhY2tncm91bmQgc2Nhbm5pbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjM0OjE0LjI5MDI5MTg1NFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4Mzg4MzU2NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozNDoxNC4yOTA5MjI0NTRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMjgzODIwMTA4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBlYXJseSByZXR1cm4gY2hlY2sgKGB1c2VyZmF1bHRmZF9taW5vcih2bWEpYCkgaW4gYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpYCB0byBwcmV2ZW50IGNvbGxhcHNpbmcgUFRFLW1hcHBlZCBUSFBzIGZvciBWTUFzIHJlZ2lzdGVyZWQgd2l0aCB1c2VyZmF1bHRmZCBtaW5vciBtb2RlLlxcblxcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZSBvbmx5IGNoZWNrcyBleGlzdGluZyBWTUEgZmxhZ3MgKGB2bWEtXFx1MDAzZXZtX2ZsYWdzYCkgYW5kIHJldHVybnMgYW4gZXJyb3IgZW51bSB2YWx1ZSAoYFNDQU5fUFRFX1VGRkRgKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgbW9kaWZ5IHN0cnVjdCBsYXlvdXRzL3BhZGRpbmcsIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLCBvciBhbHRlciBidWZmZXIgYm91bmRzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxcbi0gS0FTQU4vZ2VuZXJhbCBkZXRlY3RvciBhcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgLyBraHVnZXBhZ2VkIGxvZ2ljLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW4gVk1BIGxpZmVjeWNsZSAvIHBhZ2UgdGFibGUgbWFuYWdlbWVudCB3b3VsZCBmYWxsIHVuZGVyIHN0YW5kYXJkIG1lbW9yeSBtYW5hZ2VtZW50IHNlbWFudGljcywgcGFnZSBmYXVsdHMsIG9yIHBvaW50ZXIgdmFsaWRpdHksIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdHMuXFxuXFxuSGVuY2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUzY2JiM2EzYjkzOGY0MTY0MzQ4ZDM1OTM4NTRlYmMyNzYyYzhhYWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyOCAyMjozMjo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2todWdlcGFnZWQuYyBiL21tL2todWdlcGFnZWQuY1xuaW5kZXggYjIzN2Y2ZTc2NjJhNS4uMjIzNTYyMjljMWU0MiAxMDA2NDRcbi0tLSBhL21tL2todWdlcGFnZWQuY1xuKysrIGIvbW0va2h1Z2VwYWdlZC5jXG5AQCAtMTg5OSw2ICsxODk5LDEzIEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduXG4gXHRpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSkpXG4gXHRcdHJldHVybiBTQ0FOX1BURV9VRkZEO1xuIFxuK1x0LypcbitcdCAqIFVzZXJmYXVsdGZkLW1pbm9yLXJlZ2lzdGVyZWQgVk1BcyBzaG91bGQgbm90IGJlIGNvbGxhcHNlZCwgYXNcbitcdCAqIHVzZXJzcGFjZSBpcyBleHBlY3RpbmcgdG8gZXhwbGljaXRseSBpbnN0YWxsIFBURXMuXG4rXHQgKi9cbitcdGlmICh1c2VyZmF1bHRmZF9taW5vcih2bWEpKVxuK1x0XHRyZXR1cm4gU0NBTl9QVEVfVUZGRDtcbitcbiBcdGZvbGlvID0gZmlsZW1hcF9sb2NrX2ZvbGlvKHZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZWZfbWFwcGluZyxcbiBcdFx0XHQgICAgICAgbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBoYWRkcikpO1xuIFx0aWYgKElTX0VSUihmb2xpbykpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozNDoxNC4yOTA5MjU2ODRaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjQ3MTk4OTU3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLaHVnZXBhZ2VkIFBhdGNoOiBVc2VyZmF1bHRmZCBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBmb3IgYGtodWdlcGFnZWQuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJBaCwgdGhpcyBpcyBkZWFsaW5nIHdpdGggVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB1c2VyZmF1bHRmZC5cIiBJIGltbWVkaWF0ZWx5IGhvbmUgaW4gb24gdGhlIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGZ1bmN0aW9uLCB3aGljaCBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiBhdHRlbXB0aW5nIHRvIGNvbGxhcHNlIHBhZ2UgdGFibGUgZW50cmllcyBpbnRvIGEgVEhQIHJlc2lkZXMuXG5cbk5vdywgSSBzZWUgdGhlIGFkZGVkIGNvbmRpdGlvbmFsIGNoZWNrOiBgaWYgKHVzZXJmYXVsdGZkX21pbm9yKHZtYSkpIHJldHVybiBTQ0FOX1BURV9VRkZEO2AuIFRoaXMgaXMgY3JpdGljYWwuIFRoZSBleGlzdGluZyBjaGVjayBhbHJlYWR5IGNvbnNpZGVycyBgdXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSlgLiBUaGUgbmV3IGFkZGl0aW9uIGNsYXJpZmllcyB0aGF0IGlmIGEgVk1BIGhhcyBiZWVuIHJlZ2lzdGVyZWQgYXMgYSBtaW5vciB1c2VyZmF1bHRmZCwgdGhhdCBtZWFucyB1c2Vyc3BhY2UgZXhwbGljaXRseSBleHBlY3RzIHRvIGNvbnRyb2wgdGhlIFBURSBpbnN0YWxsYXRpb24uIFdlICpzaG91bGQgbm90KiBjb2xsYXBzZSB0aG9zZS4gVGhhdCdzIHRoZSBrZXkgdGFrZWF3YXkgaGVyZS4gVGhpcyBlbmhhbmNlbWVudCBzZWVtcyB0byBwcmV2ZW50IGtodWdlcGFnZWQgZnJvbSBpbnRlcmZlcmluZyB3aXRoIHVzZXJzcGFjZSdzIGV4cGxpY2l0IFBURSBtYW5hZ2VtZW50IGZvciBtaW5vciB1c2VyZmF1bHRmZCBWTUFzLiBUaGUgaW1wbGljYXRpb24gaXMgYXZvaWRpbmcgdW5pbnRlbnRpb25hbCBUSFAgY29sbGFwc2UgaW4gbWlub3IgdXNlcmZhdWx0ZmQgVk1BcyB3aGljaCBjb3VsZCBjYXVzZSB1bmV4cGVjdGVkIGJlaGF2aW91ciBpbiB1c2Vyc3BhY2UsIHN1Y2ggYXMgYnJva2VuIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3VyIGluIHRoZSBmYXVsdC1oYW5kbGluZyBsb2dpYy4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgc2VtYW50aWNzIG9mIGB1c2VyZmF1bHRmZF9taW5vcmAgYW5kIGB1c2VyZmF1bHRmZF9wcm90ZWN0ZWRgIHRvIGZ1bGx5IGdyYXNwIHRoZSBudWFuY2VzLCBidXQgdGhpcyBwYXRjaCBhcHBlYXJzIHRvIGJlIGEgZ29vZCwgdGFyZ2V0ZWQgc29sdXRpb24gdG8gZW5zdXJlIGNvcnJlY3QgaW50ZXJhY3Rpb24uIEknbGwgbmVlZCB0byByZXZpZXcgdGhlIHJlbGF0ZWQgY29kZSBwYXRocyBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiB0byBmdWxseSBldmFsdWF0ZSB0aGUgcG90ZW50aWFsIGltcGFjdCBhbmQgYW55IGNvcm5lciBjYXNlcywgYnV0IHRoZSBpbnRlbnQgc2VlbXMgc291bmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozNDoyMC43NjI5MTg4NjhaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyMjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2todWdlcGFnZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODg1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODg1OlxcdFxcdC8qXFxuMTg4NjpcXHRcXHQgKiBJZiB3ZSBhcmUgaGVyZSwgd2UndmUgc3VjY2VlZGVkIGluIHJlcGxhY2luZyBhbGwgdGhlIG5hdGl2ZSBwYWdlc1xcbjE4ODc6XFx0XFx0ICogaW4gdGhlIHBhZ2UgY2FjaGUgd2l0aCBhIHNpbmdsZSBodWdlcGFnZS4gSWYgYSBtbSB3ZXJlIHRvIGZhdWx0LWluXFxuMTg4ODpcXHRcXHQgKiB0aGlzIG1lbW9yeSAobWFwcGVkIGJ5IGEgc3VpdGFibHkgYWxpZ25lZCBWTUEpLCB3ZSdkIGdldCB0aGUgaHVnZXBhZ2VcXG4xODg5OlxcdFxcdCAqIGFuZCBtYXAgaXQgYnkgYSBQTUQsIHJlZ2FyZGxlc3Mgb2Ygc3lzZnMgVEhQIHNldHRpbmdzLiBBcyBzdWNoLCBsZXQnc1xcbjE4OTA6XFx0XFx0ICogYW5hbG9nb3VzbHkgZWxpZGUgc3lzZnMgVEhQIHNldHRpbmdzIGhlcmUgYW5kIGZvcmNlIGNvbGxhcHNlLlxcbjE4OTE6XFx0XFx0ICovXFxuMTg5MjpcXHRcXHRpZiAoIXRocF92bWFfYWxsb3dhYmxlX29yZGVyKHZtYSwgdm1hLVxcdTAwM2V2bV9mbGFncywgVFZBX0ZPUkNFRF9DT0xMQVBTRSwgUE1EX09SREVSKSlcXG4xODkzOlxcdFxcdFxcdHJldHVybiBTQ0FOX1ZNQV9DSEVDSztcXG4xODk0OlxcdFxcbjE4OTU6XFx0XFx0LypcXG4xODk2OlxcdFxcdCAqIEtlZXAgcG1kIHBndGFibGUgd2hpbGUgdGhlIHVmZmQgYml0IGlzIGluIHVzZTsgc2VlIGNvbW1lbnQgaW5cXG4xODk3OlxcdFxcdCAqIHJldHJhY3RfcGFnZV90YWJsZXMoKS5cXG4xODk4OlxcdFxcdCAqL1xcbjE4OTk6XFx0XFx0aWYgKHVzZXJmYXVsdGZkX3Byb3RlY3RlZCh2bWEpKVxcbjE5MDA6XFx0XFx0XFx0cmV0dXJuIFNDQU5fUFRFX1VGRkQ7XFxuMTkwMTpcXHRcXG4xOTAyOlxcdFxcdC8qXFxuMTkwMzpcXHRcXHQgKiBVc2VyZmF1bHRmZC1taW5vci1yZWdpc3RlcmVkIFZNQXMgc2hvdWxkIG5vdCBiZSBjb2xsYXBzZWQsIGFzXFxuMTkwNDpcXHRcXHQgKiB1c2Vyc3BhY2UgaXMgZXhwZWN0aW5nIHRvIGV4cGxpY2l0bHkgaW5zdGFsbCBQVEVzLlxcbjE5MDU6XFx0XFx0ICovXFxuMTkwNjpcXHRcXHRpZiAodXNlcmZhdWx0ZmRfbWlub3Iodm1hKSlcXG4xOTA3OlxcdFxcdFxcdHJldHVybiBTQ0FOX1BURV9VRkZEO1xcbjE5MDg6XFx0XFxuMTkwOTpcXHRcXHRmb2xpbyA9IGZpbGVtYXBfbG9ja19mb2xpbyh2bWEtXFx1MDAzZXZtX2ZpbGUtXFx1MDAzZWZfbWFwcGluZyxcXG4xOTEwOlxcdFxcdFxcdFxcdCAgICAgICBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGhhZGRyKSk7XFxuMTkxMTpcXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG4xOTEyOlxcdFxcdFxcdHJldHVybiBTQ0FOX1BBR0VfTlVMTDtcXG4xOTEzOlxcdFxcbjE5MTQ6XFx0XFx0aWYgKCFpc19wbWRfb3JkZXIoZm9saW9fb3JkZXIoZm9saW8pKSkge1xcbjE5MTU6XFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QQUdFX0NPTVBPVU5EO1xcbjE5MTY6XFx0XFx0XFx0Z290byBkcm9wX2ZvbGlvO1xcbjE5MTc6XFx0XFx0fVxcbjE5MTg6XFx0XFxuMTkxOTpcXHRcXHRyZXN1bHQgPSBmaW5kX3BtZF9vcl90aHBfb3Jfbm9uZShtbSwgaGFkZHIsIFxcdTAwMjZwbWQpO1xcbjE5MjA6XFx0XFx0c3dpdGNoIChyZXN1bHQpIHtcXG4xOTIxOlxcdFxcdGNhc2UgU0NBTl9TVUNDRUVEOlxcbjE5MjI6XFx0XFx0XFx0YnJlYWs7XFxuMTkyMzpcXHRcXHRjYXNlIFNDQU5fTk9fUFRFX1RBQkxFOlxcbjE5MjQ6XFx0XFx0XFx0LypcXG4xOTI1OlxcdFxcdFxcdCAqIEFsbCBwdGUgZW50cmllcyBoYXZlIGJlZW4gcmVtb3ZlZCBhbmQgcG1kIGNsZWFyZWQuXFxuMTkyNjpcXHRcXHRcXHQgKiBTa2lwIGFsbCB0aGUgcHRlIGNoZWNrcyBhbmQganVzdCB1cGRhdGUgdGhlIHBtZCBtYXBwaW5nLlxcbjE5Mjc6XFx0XFx0XFx0ICovXFxuMTkyODpcXHRcXHRcXHRnb3RvIG1heWJlX2luc3RhbGxfcG1kO1xcbjE5Mjk6XFx0XFx0ZGVmYXVsdDpcXG4xOTMwOlxcdFxcdFxcdGdvdG8gZHJvcF9mb2xpbztcXG4xOTMxOlxcdFxcdH1cXG4xOTMyOlxcdFxcbjE5MzM6XFx0XFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xcbjE5MzQ6XFx0XFx0c3RhcnRfcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCBoYWRkciwgXFx1MDAyNnB0bCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjM0OjIwLjc2MzE0Mjc3OFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzY1OTU1NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2g6IEEgRGVlcCBEaXZlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IG9mIHRoaXMgcGF0Y2guIEl0J3MgaW5qZWN0aW5nIGEgY2hlY2ssIGBpZiAodXNlcmZhdWx0ZmRfbWlub3Iodm1hKSkgcmV0dXJuIFNDQU5fUFRFX1VGRkQ7YCwgcmlnaHQgaW50byBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKClgLiBFc3NlbnRpYWxseSwgaXQncyBhIGd1YXJkOyBhIHNhZmV0eSBuZXQuIFRoZSBgdXNlcmZhdWx0ZmRfbWlub3Iodm1hKWAgY2hlY2sgYm9pbHMgZG93biB0byBpbnNwZWN0aW5nIGB2bWEtXHUwMDNldm1fZmxhZ3NgIGFuZCBzZWVpbmcgaWYgdGhlIGBWTV9VRkZEX01JTk9SYCBmbGFnIGlzIHNldC4gSWYgaXQgKmlzKiwgdGhlIGNvbGxhcHNlIG9mIFBURS1tYXBwZWQgVEhQcyB3aXRoaW4ga2h1Z2VwYWdlZCBpcyBzaG9ydC1jaXJjdWl0ZWQuIFRoZSBnb2FsIGlzIGNsZWFyOiBwcmV2ZW50IGtodWdlcGFnZWQgZnJvbSBjb2xsYXBzaW5nIFZNQXMgdGhhdCBhcmUgbWFuYWdlZCBieSB1c2VyZmF1bHRmZCBpbiBcIm1pbm9yIG1vZGUuXCIgVGhpcyBhdm9pZHMgYW55IHVzZXIgc3BhY2UgY29uZnVzaW9uLCBhcyB1c2VyIHNwYWNlIGV4cGVjdHMgdG8gaGFuZGxlIGl0cyBtaW5vciBmYXVsdHMgZXhwbGljaXRseS5cblxuTm93IGNvbWVzIHRoZSBjcnVjaWFsIHBhcnQ6IHRoZSBzYWZldHkgYXNzZXNzbWVudC4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBEb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXM/IExlYWtzPyBQYWRkaW5nIHByb2JsZW1zPyBSZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeT8gVGhlIGFuc3dlciwgYXMgSSBzZWUgaXQsIGlzIGEgcmVzb3VuZGluZyBcIm5vLlwiIFRoaXMgcGF0Y2ggaXMgcmVtYXJrYWJseSBjbGVhbi4gSXQncyBhIHNpbXBsZSwgdGFyZ2V0ZWQgZ3VhcmQuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGludm9sdmVkLiBUaGVyZSdzIG5vIGNvcHlpbmcgb2YgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2Ug4oCTIGEgY3JpdGljYWwgcG9pbnQuIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBpbmZsdWVuY2luZyBicmFuY2hpbmcgbG9naWMuIEl0J3Mgc29sZWx5IGZvY3VzZWQgb24gcHJldmVudGluZyB0aGUgY29sbGFwc2Ugb2YgUFRFcyB0byBQTURzIGZvciB0aG9zZSBzcGVjaWZpYyB1c2VyZmF1bHRmZC1taW5vciBWTUFzLlxuXG5MZXQncyBkbyBhIHJpZ29yb3VzIEtNU0FOIGNoZWNrIGZvciBnb29kIG1lYXN1cmUuIEknbSBnb2luZyB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYSBpbiBteSBoZWFkOlxuXG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBtaWdodCBiZSB1bmluaXRpYWxpemVkPyBOb3BlLCB0aGlzIGlzbid0IHNlbmRpbmcgYW55dGhpbmcuXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUsIGB2bWFgIGlzIGEgdmFsaWQgYHZtX2FyZWFfc3RydWN0YCBwb2ludGVyLCBhbmQgYHZtX2ZsYWdzYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC5cbjMuICBBbGxvY2F0aW9uIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI/IE5vcGUsIG5vIG5ldyBhbGxvY2F0aW9ucy5cbjQuICBCb3VuZHMgY2hlY2tzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIHJlYWRzPyBOb3BlLCB0aGlzIHBhdGNoIGRvZXNuJ3QgdG91Y2ggYW55IG9mIHRoYXQuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGNsZWFybHkgYGZhbHNlYC4gVGhpcyBpcyBhIGNsZWFuLCB3ZWxsLXNjb3BlZCBjaGFuZ2UuIEl0J3MgYWJvdXQgcHJvdGVjdGluZyBhIHNwZWNpZmljLCB3ZWxsLWRlZmluZWQgdXNlciBzcGFjZSBleHBlY3RhdGlvbiB3aXRoaW4gdGhlIHVzZXJmYXVsdGZkIGZyYW1ld29yay4gVGhlIGFic2VuY2Ugb2YgY29tcGxleCBtZW1vcnkgbWFuaXB1bGF0aW9uIG1ha2VzIGl0IGEgdmVyeSBsb3ctcmlzayBwYXRjaCBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZS4gVGhpcyBpcyBhIGdvb2Qgc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYzOSwiT3V0cHV0VG9rZW5zIjoyMjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjozNDoyNy4xMjkxMDI1MzhaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYW4gZWFybHkgcmV0dXJuIGNoZWNrIChgdXNlcmZhdWx0ZmRfbWlub3Iodm1hKWApIGluIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKWAgdG8gcHJldmVudCBjb2xsYXBzaW5nIFBURS1tYXBwZWQgVEhQcyBmb3IgVk1BcyByZWdpc3RlcmVkIHdpdGggdXNlcmZhdWx0ZmQgbWlub3IgbW9kZS5cXG5cXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBjaGFuZ2Ugb25seSBjaGVja3MgZXhpc3RpbmcgVk1BIGZsYWdzIChgdm1hLVxcdTAwM2V2bV9mbGFnc2ApIGFuZCByZXR1cm5zIGFuIGVycm9yIGVudW0gdmFsdWUgKGBTQ0FOX1BURV9VRkZEYCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIG1vZGlmeSBzdHJ1Y3QgbGF5b3V0cy9wYWRkaW5nLCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy5cXG4tIEtBU0FOL2dlbmVyYWwgZGV0ZWN0b3IgYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IC8ga2h1Z2VwYWdlZCBsb2dpYy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBidWdzIGluIFZNQSBsaWZlY3ljbGUgLyBwYWdlIHRhYmxlIG1hbmFnZW1lbnQgd291bGQgZmFsbCB1bmRlciBzdGFuZGFyZCBtZW1vcnkgbWFuYWdlbWVudCBzZW1hbnRpY3MsIHBhZ2UgZmF1bHRzLCBvciBwb2ludGVyIHZhbGlkaXR5LCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RzLlxcblxcbkhlbmNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIGVhcmx5IHJldHVybiBjaGVjayAoYHVzZXJmYXVsdGZkX21pbm9yKHZtYSlgKSBpbiBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKClgIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIFRIUHMgZm9yIFZNQXMgcmVnaXN0ZXJlZCB3aXRoIHVzZXJmYXVsdGZkIG1pbm9yIG1vZGUuXFxuXFxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlIG9ubHkgY2hlY2tzIGV4aXN0aW5nIFZNQSBmbGFncyAoYHZtYS1cXHUwMDNldm1fZmxhZ3NgKSBhbmQgcmV0dXJucyBhbiBlcnJvciBlbnVtIHZhbHVlIChgU0NBTl9QVEVfVUZGRGApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBtb2RpZnkgc3RydWN0IGxheW91dHMvcGFkZGluZywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBib3VuZHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXFxuLSBLQVNBTi9nZW5lcmFsIGRldGVjdG9yIGFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCAvIGtodWdlcGFnZWQgbG9naWMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbiBWTUEgbGlmZWN5Y2xlIC8gcGFnZSB0YWJsZSBtYW5hZ2VtZW50IHdvdWxkIGZhbGwgdW5kZXIgc3RhbmRhcmQgbWVtb3J5IG1hbmFnZW1lbnQgc2VtYW50aWNzLCBwYWdlIGZhdWx0cywgb3IgcG9pbnRlciB2YWxpZGl0eSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0cy5cXG5cXG5IZW5jZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2lgms[1] Phase: Succeeded StartedAt: 2026-08-28 22:34:38 +0000 UTC FinishedAt: 2026-08-28 22:34:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lgms[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-28 22:34:38 +0000 UTC FinishedAt: 2026-08-28 22:34:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lgms[2] Phase: Succeeded StartedAt: 2026-08-28 22:34:38 +0000 UTC FinishedAt: 2026-08-29 02:15:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-28 22:34:38 +0000 UTC FinishedAt: 2026-08-29 02:15:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-28 22:34:38 +0000 UTC FinishedAt: 2026-08-28 22:34:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-28 22:34:38 +0000 UTC FinishedAt: 2026-08-28 22:34:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow2lgms/series-workflow2lgms-convert-artifact-715003818/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-28 22:34:48 +0000 UTC FinishedAt: 2026-08-28 22:51:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-28 22:34:48 +0000 UTC FinishedAt: 2026-08-28 22:51:04 +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:*f8068e60-182b-4085-a372-0db8c55cda9c,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-workflow2lgms/series-workflow2lgms-convert-artifact-715003818/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": "e79d1c14-2f1b-44c9-a188-b24afe2a3a00", "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-workflow2lgms/series-workflow2lgms-build-action-2397278488/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-28 22:34:48 +0000 UTC FinishedAt: 2026-08-28 22:50:54 +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:*f8068e60-182b-4085-a372-0db8c55cda9c,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-workflow2lgms/series-workflow2lgms-convert-artifact-715003818/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": "e79d1c14-2f1b-44c9-a188-b24afe2a3a00", "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-workflow2lgms/series-workflow2lgms-build-action-2397278488/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-28 22:51:04 +0000 UTC FinishedAt: 2026-08-28 22:51:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-28 22:51:04 +0000 UTC FinishedAt: 2026-08-28 22:51:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-28 22:51:04 +0000 UTC FinishedAt: 2026-08-28 22:51:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-28 22:51:04 +0000 UTC FinishedAt: 2026-08-28 22:51:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow2lgms/series-workflow2lgms-convert-artifact-849529029/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-28 22:51:14 +0000 UTC FinishedAt: 2026-08-28 22:53:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-28 22:51:14 +0000 UTC FinishedAt: 2026-08-28 22:52:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e79d1c14-2f1b-44c9-a188-b24afe2a3a00,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-workflow2lgms/series-workflow2lgms-build-action-2397278488/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-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-28 22:53:09 +0000 UTC FinishedAt: 2026-08-28 22:53:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-28 22:53:09 +0000 UTC FinishedAt: 2026-08-28 22:53:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-28 22:53:09 +0000 UTC FinishedAt: 2026-08-28 23:09:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-28 22:53:09 +0000 UTC FinishedAt: 2026-08-28 23:09:40 +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:*f8068e60-182b-4085-a372-0db8c55cda9c,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-workflow2lgms/series-workflow2lgms-convert-artifact-849529029/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": "e1f94f73-29a5-4f06-93d4-ceb782d95fc3", "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-workflow2lgms/series-workflow2lgms-build-action-2691575057/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-28 22:53:09 +0000 UTC FinishedAt: 2026-08-28 23:09:30 +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:*f8068e60-182b-4085-a372-0db8c55cda9c,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-workflow2lgms/series-workflow2lgms-convert-artifact-849529029/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": "e1f94f73-29a5-4f06-93d4-ceb782d95fc3", "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-workflow2lgms/series-workflow2lgms-build-action-2691575057/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-28 23:09:40 +0000 UTC FinishedAt: 2026-08-28 23:09:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-28 23:09:40 +0000 UTC FinishedAt: 2026-08-28 23:09:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-28 23:09:40 +0000 UTC FinishedAt: 2026-08-28 23:11:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-28 23:09:40 +0000 UTC FinishedAt: 2026-08-28 23:11:45 +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:*e1f94f73-29a5-4f06-93d4-ceb782d95fc3,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-workflow2lgms/series-workflow2lgms-build-action-2691575057/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-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-28 23:11:54 +0000 UTC FinishedAt: 2026-08-29 02:15:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-28 23:11:54 +0000 UTC FinishedAt: 2026-08-29 02:15:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*e79d1c14-2f1b-44c9-a188-b24afe2a3a00,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e1f94f73-29a5-4f06-93d4-ceb782d95fc3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2lgms/series-workflow2lgms-build-action-2397278488/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2lgms/series-workflow2lgms-build-action-2691575057/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-28 23:11:54 +0000 UTC FinishedAt: 2026-08-28 23:12:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-28 23:11:54 +0000 UTC FinishedAt: 2026-08-28 23:11:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2lgms/series-workflow2lgms-convert-artifact-442074186/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-28 23:11:54 +0000 UTC FinishedAt: 2026-08-28 23:11:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-28 23:11:54 +0000 UTC FinishedAt: 2026-08-28 23:11:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-28 23:11:54 +0000 UTC FinishedAt: 2026-08-28 23:11:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-28 23:12:04 +0000 UTC FinishedAt: 2026-08-29 02:15:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lgms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_collapse","collapse_pte_mapped_thp"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"26260251022fbc2f248a3d747a9b2b961b18d2d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"d29aa814-4d08-47da-ba8d-41efb6ffcfcf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-28 23:12:04 +0000 UTC FinishedAt: 2026-08-29 02:15:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e79d1c14-2f1b-44c9-a188-b24afe2a3a00,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e1f94f73-29a5-4f06-93d4-ceb782d95fc3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2lgms/series-workflow2lgms-build-action-2397278488/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2lgms/series-workflow2lgms-build-action-2691575057/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2lgms/series-workflow2lgms-convert-artifact-442074186/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}