Name: series-workflowlmwq5 Phase: Succeeded StartedAt: 2026-08-17 17:10:32 +0000 UTC FinishedAt: 2026-08-17 21:19:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmwq5[0] Phase: Succeeded StartedAt: 2026-08-17 17:10:32 +0000 UTC FinishedAt: 2026-08-17 17:37:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmwq5[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 17:10:32 +0000 UTC FinishedAt: 2026-08-17 17:37:33 +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": "84213403e316cd75061785ba152941c6d5b7e97d", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "84213403e316cd75061785ba152941c6d5b7e97d", "config_name": "upstream-apparmor-kasan.config", "series_id": "5c4938d2-7dd4-4742-928f-5de8bfc9fbd7" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "bio_alloc_clone", "bio_init_clone", "bio_split", "blk_rq_append_bio", "bio_split_io_at", "bio_seg_gap", "blk_mq_submit_bio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE3OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmlvX2FsbG9jX2Nsb25lJiMzNDssCiAgICAmIzM0O2Jpb19pbml0X2Nsb25lJiMzNDssCiAgICAmIzM0O2Jpb19zcGxpdCYjMzQ7LAogICAgJiMzNDtibGtfcnFfYXBwZW5kX2JpbyYjMzQ7LAogICAgJiMzNDtiaW9fc3BsaXRfaW9fYXQmIzM0OywKICAgICYjMzQ7YmlvX3NlZ19nYXAmIzM0OywKICAgICYjMzQ7YmxrX21xX3N1Ym1pdF9iaW8mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19iaW9fY2xvbmVgIGFuZCBgYmlvX3NwbGl0YCB0byBwcm9wZXJseSBwcm9wYWdhdGUgYW5kIHJlc2V0IHRoZSBgYmlfYnZlY19nYXBfYml0YCBmaWVsZCBvZiBgc3RydWN0IGJpb2AuIFRoaXMgZmllbGQgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgbG93ZXN0IHNldCBiaXQgaW4gYW55IGFkZHJlc3Mgb2Zmc2V0IGJldHdlZW4gYWxsIGBiaV9pb192ZWNzYCBmb3IgRE1BIG9wdGltaXphdGlvbi4gV2hlbiBhIGJpbyBpcyBhbGxvY2F0ZWQgb3IgcmVzZXQsIGBiaV9idmVjX2dhcF9iaXRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCAodmlhIGBiaW9faW5pdGAgb3IgYG1lbXNldGAgaW4gYGJpb19yZXNldGApLiBUaGVyZWZvcmUsIHRoZSBpc3N1ZSBiZWluZyBmaXhlZCBpcyBhIGxvZ2ljYWwgYnVnIHdoZXJlIHRoZSBnYXAgYml0IGlzIGVpdGhlciBsb3N0IGR1cmluZyBjbG9uaW5nIG9yIGluY29ycmVjdGx5IHJldGFpbmVkIGR1cmluZyBzcGxpdHRpbmcsIHJhdGhlciB0aGFuIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQuIEJlY2F1c2UgdGhlIGZpZWxkIGlzIGFsd2F5cyBpbml0aWFsaXplZCwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4gQW55IHJlc3VsdGluZyBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyBkdWUgdG8gaW5jb3JyZWN0IERNQSBtYXBwaW5ncyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIG1pc3NpbmcgaW5pdGlhbGl6YXRpb24gYW5kIGNvcHlpbmcgb2YgYGJpX2J2ZWNfZ2FwX2JpdGAgaW4gYGJpb19zcGxpdGAgYW5kIGBfX2Jpb19jbG9uZWAuIFRoaXMgZmllbGQgaXMgdXNlZCB0byB0cmFjayBnYXAgYml0cyBmb3IgYmlvIHZlY3RvcnMgYW5kIGlzIGNvbnN1bWVkIGJ5IGNvcmUgYmxvY2sgbGF5ZXIgZnVuY3Rpb25zIGxpa2UgYGJsa19ycV9hcHBlbmRfYmlvYCBhbmQgYGJpb19zcGxpdF9pb19hdGAuIEZ1enppbmcgdGhlc2UgZnVuY3Rpb25zIGlzIGltcG9ydGFudCB0byBlbnN1cmUgY29ycmVjdCBoYW5kbGluZyBvZiBiaW8gdmVjdG9yIGdhcHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTc6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0NjU5NzAwMDNhNjc5ZDgwZmZkYmZjNTUyYmIxZDFjNmZmNDkzNjY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTc6MzU6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmlvLmMgYi9ibG9jay9iaW8uY1xuaW5kZXggODk4YjJmNWVmOGM4MS4uMzNhYTQzOWMxYmFlMiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9iaW8uY1xuQEAgLTg1OSw2ICYjNDM7ODU5LDcgQEAgc3RhdGljIGludCBfX2Jpb19jbG9uZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW8gKmJpb19zcmMsIGdmcF90IGdmcClcbiBcdGJpby1cdTAwM2ViaV9pb3ByaW8gPSBiaW9fc3JjLVx1MDAzZWJpX2lvcHJpbztcbiBcdGJpby1cdTAwM2ViaV93cml0ZV9oaW50ID0gYmlvX3NyYy1cdTAwM2ViaV93cml0ZV9oaW50O1xuIFx0YmlvLVx1MDAzZWJpX3dyaXRlX3N0cmVhbSA9IGJpb19zcmMtXHUwMDNlYmlfd3JpdGVfc3RyZWFtO1xuJiM0MztcdGJpby1cdTAwM2ViaV9idmVjX2dhcF9iaXQgPSBiaW9fc3JjLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdDtcbiBcdGJpby1cdTAwM2ViaV9pdGVyID0gYmlvX3NyYy1cdTAwM2ViaV9pdGVyO1xuIFx0YmlvLVx1MDAzZWJpX2lvX3ZlYyA9IGJpb19zcmMtXHUwMDNlYmlfaW9fdmVjO1xuIFxuQEAgLTE5NzEsNiAmIzQzOzE5NzIsNyBAQCBzdHJ1Y3QgYmlvICpiaW9fc3BsaXQoc3RydWN0IGJpbyAqYmlvLCBpbnQgc2VjdG9ycyxcbiBcdFx0YmlvX2ludGVncml0eV90cmltKHNwbGl0KTtcbiBcbiBcdGJpb19hZHZhbmNlKGJpbywgc3BsaXQtXHUwMDNlYmlfaXRlci5iaV9zaXplKTtcbiYjNDM7XHRiaW8tXHUwMDNlYmlfYnZlY19nYXBfYml0ID0gMDtcbiBcbiBcdGlmIChiaW9fZmxhZ2dlZChiaW8sIEJJT19UUkFDRV9DT01QTEVUSU9OKSlcbiBcdFx0YmlvX3NldF9mbGFnKHNwbGl0LCBCSU9fVFJBQ0VfQ09NUExFVElPTik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTc6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmlvX2FsbG9jX2Nsb25lJiMzNDssCiAgICAmIzM0O2Jpb19pbml0X2Nsb25lJiMzNDssCiAgICAmIzM0O2Jpb19zcGxpdCYjMzQ7LAogICAgJiMzNDtibGtfcnFfYXBwZW5kX2JpbyYjMzQ7LAogICAgJiMzNDtiaW9fc3BsaXRfaW9fYXQmIzM0OywKICAgICYjMzQ7YmlvX3NlZ19nYXAmIzM0OywKICAgICYjMzQ7YmxrX21xX3N1Ym1pdF9iaW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbWlzc2luZyBpbml0aWFsaXphdGlvbiBhbmQgY29weWluZyBvZiBgYmlfYnZlY19nYXBfYml0YCBpbiBgYmlvX3NwbGl0YCBhbmQgYF9fYmlvX2Nsb25lYC4gVGhpcyBmaWVsZCBpcyB1c2VkIHRvIHRyYWNrIGdhcCBiaXRzIGZvciBiaW8gdmVjdG9ycyBhbmQgaXMgY29uc3VtZWQgYnkgY29yZSBibG9jayBsYXllciBmdW5jdGlvbnMgbGlrZSBgYmxrX3JxX2FwcGVuZF9iaW9gIGFuZCBgYmlvX3NwbGl0X2lvX2F0YC4gRnV6emluZyB0aGVzZSBmdW5jdGlvbnMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBjb3JyZWN0IGhhbmRsaW5nIG9mIGJpbyB2ZWN0b3IgZ2Fwcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ2NTk3MDAwM2E2NzlkODBmZmRiZmM1NTJiYjFkMWM2ZmY0OTM2NjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAxNzozNToxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jpby5jIGIvYmxvY2svYmlvLmMKaW5kZXggODk4YjJmNWVmOGM4MS4uMzNhYTQzOWMxYmFlMiAxMDA2NDQKLS0tIGEvYmxvY2svYmlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmlvLmMKQEAgLTg1OSw2ICYjNDM7ODU5LDcgQEAgc3RhdGljIGludCBfX2Jpb19jbG9uZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW8gKmJpb19zcmMsIGdmcF90IGdmcCkKIAliaW8tJmd0O2JpX2lvcHJpbyA9IGJpb19zcmMtJmd0O2JpX2lvcHJpbzsKIAliaW8tJmd0O2JpX3dyaXRlX2hpbnQgPSBiaW9fc3JjLSZndDtiaV93cml0ZV9oaW50OwogCWJpby0mZ3Q7Ymlfd3JpdGVfc3RyZWFtID0gYmlvX3NyYy0mZ3Q7Ymlfd3JpdGVfc3RyZWFtOwomIzQzOwliaW8tJmd0O2JpX2J2ZWNfZ2FwX2JpdCA9IGJpb19zcmMtJmd0O2JpX2J2ZWNfZ2FwX2JpdDsKIAliaW8tJmd0O2JpX2l0ZXIgPSBiaW9fc3JjLSZndDtiaV9pdGVyOwogCWJpby0mZ3Q7YmlfaW9fdmVjID0gYmlvX3NyYy0mZ3Q7YmlfaW9fdmVjOwogCkBAIC0xOTcxLDYgJiM0MzsxOTcyLDcgQEAgc3RydWN0IGJpbyAqYmlvX3NwbGl0KHN0cnVjdCBiaW8gKmJpbywgaW50IHNlY3RvcnMsCiAJCWJpb19pbnRlZ3JpdHlfdHJpbShzcGxpdCk7CiAKIAliaW9fYWR2YW5jZShiaW8sIHNwbGl0LSZndDtiaV9pdGVyLmJpX3NpemUpOwomIzQzOwliaW8tJmd0O2JpX2J2ZWNfZ2FwX2JpdCA9IDA7CiAKIAlpZiAoYmlvX2ZsYWdnZWQoYmlvLCBCSU9fVFJBQ0VfQ09NUExFVElPTikpCiAJCWJpb19zZXRfZmxhZyhzcGxpdCwgQklPX1RSQUNFX0NPTVBMRVRJT04pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTM5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQklPIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGJsb2NrL2Jpby5jYCwgaW50ZXJlc3RpbmcuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIGBiaW8tJmd0O2JpX2J2ZWNfZ2FwX2JpdCA9IGJpb19zcmMtJmd0O2JpX2J2ZWNfZ2FwX2JpdDtgIHdpdGhpbiB0aGUgYF9fYmlvX2Nsb25lYCBmdW5jdGlvbiBhbmQgcmVzZXR0aW5nIGl0IHRvIGAwYCBpbiBgYmlvX3NwbGl0YC4gSW1tZWRpYXRlbHksIG15IGJyYWluIHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucy4gSSBrbm93IHRob3NlIGFyZSB0d28gdmVyeSBmdW5kYW1lbnRhbCBibG9jayBsYXllciBmdW5jdGlvbnMuIGBfX2Jpb19jbG9uZWAgaXMsIHdlbGwsIGNsb25pbmcgYSBiaW8uIE1ha2VzIHNlbnNlIHRvIHBhc3MgdGhhdCBnYXAgaW5mb3JtYXRpb24gb3Zlciwgb3RoZXJ3aXNlIHdoYXQmIzM5O3MgdGhlIHVzZSBpbiBjb3B5aW5nIHRoZSBzdHJ1Y3R1cmUuIEFuZCBgYmlvX3NwbGl0YD8gVGhhdCYjMzk7cyB3aGVuIHdlJiMzOTtyZSBicmVha2luZyBhIGJpbyBkb3duIGludG8gc21hbGxlciBwaWVjZXMuIFNvIHRoZSBnYXAgYml0IG5lZWRzIHJlc2V0dGluZyB0aGVyZS4KClJpZ2h0LCBzbyB0byB0cnVseSB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBiaV9idmVjX2dhcF9iaXRgLiBMZXQmIzM5O3MgZ3JlcCBmb3IgdGhhdCBhbmQgc2VlIHdoZXJlIGl0JiMzOTtzIHVzZWQsIGhvdyBpdCYjMzk7cyBkZWZpbmVkLCB3aGF0IHRoZSBjb21tZW50cyBzYXkuIFRoYXQgd2lsbCB0ZWxsIHRoZSBmdWxsIHN0b3J5IGhlcmUuIEkgaGF2ZSBhIGh1bmNoLCBiYXNlZCBvbiB0aGUgY29udGV4dCwgYnV0IGxldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBodW5jaCBpcyBhY2N1cmF0ZSBiZWZvcmUgSSBzdGFydCBtYWtpbmcgYW55IGFzc3VtcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JpX2J2ZWNfZ2FwX2JpdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iaW8uYz0yMTc9dm9pZCBiaW9faW5pdChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBiaW9fdmVjICp0YWJsZSxcbi0tXG5ibG9jay9iaW8uYy0yMjctXHRiaW8tXHUwMDNlYmlfc3RhdHVzID0gMDtcbmJsb2NrL2Jpby5jOjIyODpcdGJpby1cdTAwM2ViaV9idmVjX2dhcF9iaXQgPSAwO1xuYmxvY2svYmlvLmMtMjI5LVx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gMDtcbi0tXG5ibG9jay9iaW8uYz04NTY9c3RhdGljIGludCBfX2Jpb19jbG9uZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW8gKmJpb19zcmMsIGdmcF90IGdmcClcbi0tXG5ibG9jay9iaW8uYy04NjEtXHRiaW8tXHUwMDNlYmlfd3JpdGVfc3RyZWFtID0gYmlvX3NyYy1cdTAwM2ViaV93cml0ZV9zdHJlYW07XG5ibG9jay9iaW8uYzo4NjI6XHRiaW8tXHUwMDNlYmlfYnZlY19nYXBfYml0ID0gYmlvX3NyYy1cdTAwM2ViaV9idmVjX2dhcF9iaXQ7XG5ibG9jay9iaW8uYy04NjMtXHRiaW8tXHUwMDNlYmlfaXRlciA9IGJpb19zcmMtXHUwMDNlYmlfaXRlcjtcbi0tXG5ibG9jay9iaW8uYz0xOTQ3PXN0cnVjdCBiaW8gKmJpb19zcGxpdChzdHJ1Y3QgYmlvICpiaW8sIGludCBzZWN0b3JzLFxuLS1cbmJsb2NrL2Jpby5jLTE5NzQtXHRiaW9fYWR2YW5jZShiaW8sIHNwbGl0LVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XG5ibG9jay9iaW8uYzoxOTc1Olx0YmlvLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCA9IDA7XG5ibG9jay9iaW8uYy0xOTc2LVxuLS1cbmJsb2NrL2Jsay1tYXAuYz00MjY9aW50IGJsa19ycV9hcHBlbmRfYmlvKHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IGJpbyAqYmlvKVxuLS1cbmJsb2NrL2Jsay1tYXAuYy00NTYtXHRycS1cdTAwM2VfX2RhdGFfbGVuID0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZTtcbmJsb2NrL2Jsay1tYXAuYzo0NTc6XHRycS1cdTAwM2VwaHlzX2dhcF9iaXQgPSBiaW8tXHUwMDNlYmlfYnZlY19nYXBfYml0O1xuYmxvY2svYmxrLW1hcC5jLTQ1OC1cdHJldHVybiAwO1xuLS1cbmJsb2NrL2Jsay1tZXJnZS5jPTMzNT1pbnQgYmlvX3NwbGl0X2lvX2F0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxuLS1cbmJsb2NrL2Jsay1tZXJnZS5jLTM3OS1cdCpzZWdzID0gbnNlZ3M7XG5ibG9jay9ibGstbWVyZ2UuYzozODA6XHRiaW8tXHUwMDNlYmlfYnZlY19nYXBfYml0ID0gZmZzKGdhcHMpO1xuYmxvY2svYmxrLW1lcmdlLmMtMzgxLVx0cmV0dXJuIDA7XG4tLVxuYmxvY2svYmxrLW1lcmdlLmMtNDE1LVx0YmlvX2NsZWFyX3BvbGxlZChiaW8pO1xuYmxvY2svYmxrLW1lcmdlLmM6NDE2Olx0YmlvLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCA9IGZmcyhnYXBzKTtcbmJsb2NrL2Jsay1tZXJnZS5jLTQxNy1cdHJldHVybiBieXRlcyBcdTAwM2VcdTAwM2UgU0VDVE9SX1NISUZUO1xuLS1cbmJsb2NrL2Jsay1tZXJnZS5jPTc1Mj11OCBiaW9fc2VnX2dhcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqcHJldiwgc3RydWN0IGJpbyAqbmV4dCxcbi0tXG5ibG9jay9ibGstbWVyZ2UuYy03NTktXG5ibG9jay9ibGstbWVyZ2UuYzo3NjA6XHRnYXBzX2JpdCA9IG1pbl9ub3RfemVybyhnYXBzX2JpdCwgcHJldi1cdTAwM2ViaV9idmVjX2dhcF9iaXQpO1xuYmxvY2svYmxrLW1lcmdlLmM6NzYxOlx0Z2Fwc19iaXQgPSBtaW5fbm90X3plcm8oZ2Fwc19iaXQsIG5leHQtXHUwMDNlYmlfYnZlY19nYXBfYml0KTtcbmJsb2NrL2Jsay1tZXJnZS5jLTc2Mi1cbi0tXG5ibG9jay9ibGstbXEuYz0yNjU0PXN0YXRpYyB2b2lkIGJsa19tcV9iaW9fdG9fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBiaW8gKmJpbyxcbi0tXG5ibG9jay9ibGstbXEuYy0yNjY0LVx0cnEtXHUwMDNlX19kYXRhX2xlbiA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemU7XG5ibG9jay9ibGstbXEuYzoyNjY1Olx0cnEtXHUwMDNlcGh5c19nYXBfYml0ID0gYmlvLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdDtcbmJsb2NrL2Jsay1tcS5jLTI2NjYtXG4tLVxuaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaD0yMTA9c3RydWN0IGJpbyB7XG4tLVxuaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaC0yMzAtXHQgKi9cbmluY2x1ZGUvbGludXgvYmxrX3R5cGVzLmg6MjMxOlx0dThcdFx0XHRiaV9idmVjX2dhcF9iaXQ7XG5pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oLTIzMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTc4CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJ1ZyBGaXggZm9yIFBvdGVudGlhbCBGdXp6aW5nKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGFuIGlzc3VlIHdoZXJlIGBiaV9idmVjX2dhcF9iaXRgIGlzbiYjMzk7dCBoYW5kbGVkIGNvcnJlY3RseSBkdXJpbmcgYmlvIGNsb25pbmcgYW5kIHNwbGl0dGluZy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIGBfX2Jpb19jbG9uZWAgaXNuJiMzOTt0IGNvcHlpbmcgdGhlIGJpdCwgYW5kIGBiaW9fc3BsaXRgIGlzbiYjMzk7dCByZXNldHRpbmcgaXQuIFRoaXMgc2NyZWFtcyBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXQgdG8gbWUuIEEgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUgaGVyZSBjb3VsZCBiZSBwcmV0dHkgbmFzdHkuCgpNeSBpbml0aWFsIHRob3VnaHRzIGFyZSwgd2hlcmUgZG9lcyB0aGlzIGZ1bmN0aW9uYWxpdHkgc2l0IGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzPyBXZWxsLCB0aGUgY29yZSBmdW5jdGlvbnMgYXJlIGBfX2Jpb19jbG9uZWAgYW5kIGBiaW9fc3BsaXRgLiBTaW5jZSBgX19iaW9fY2xvbmVgIGlzIHN0YXRpYywgSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiBpdHMgY2FsbGVycy4gVGhhdCBuYXJyb3dzIHRoZSBmaWVsZCBhIGJpdC4gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBjb2RlLCBgYmlvX2Nsb25lX2Zhc3RgIGFuZCBgYmlvX2FsbG9jX2Nsb25lYCBhcmUga2V5IGNhbGxlcnMgb2YgYF9fYmlvX2Nsb25lYC4gTm93IGl0IGlzIHRpbWUgdG8gY2hlY2sgYWxsIGNhbGxlcnMgb2YgYF9fYmlvX2Nsb25lYC4gVGhlc2UgYXJlIHRoZSBhcmVhcyB0aGF0IG5lZWQgZm9jdXNlZCBmdXp6aW5nIGF0dGVudGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2Jpb19jbG9uZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iaW8uYz04NTQ9RVhQT1JUX1NZTUJPTChiaW9fcHV0KTtcbmJsb2NrL2Jpby5jLTg1NS1cbmJsb2NrL2Jpby5jOjg1NjpzdGF0aWMgaW50IF9fYmlvX2Nsb25lKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJpbyAqYmlvX3NyYywgZ2ZwX3QgZ2ZwKVxuYmxvY2svYmlvLmMtODU3LXtcbi0tXG5ibG9jay9iaW8uYz04OTQ9c3RydWN0IGJpbyAqYmlvX2FsbG9jX2Nsb25lKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBiaW8gKmJpb19zcmMsXG4tLVxuYmxvY2svYmlvLmMtOTAyLVxuYmxvY2svYmlvLmM6OTAzOlx0aWYgKF9fYmlvX2Nsb25lKGJpbywgYmlvX3NyYywgZ2ZwKSBcdTAwM2MgMCkge1xuYmxvY2svYmlvLmMtOTA0LVx0XHRiaW9fcHV0KGJpbyk7XG4tLVxuYmxvY2svYmlvLmM9OTIxPWludCBiaW9faW5pdF9jbG9uZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmlvICpiaW8sXG4tLVxuYmxvY2svYmlvLmMtOTI2LVx0YmlvX2luaXQoYmlvLCBiZGV2LCBOVUxMLCAwLCBiaW9fc3JjLVx1MDAzZWJpX29wZik7XG5ibG9jay9iaW8uYzo5Mjc6XHRyZXQgPSBfX2Jpb19jbG9uZShiaW8sIGJpb19zcmMsIGdmcCk7XG5ibG9jay9iaW8uYy05MjgtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMjEKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHN5bWJvbHM6CgoqKkRlZXAgRGl2ZSBpbnRvIEJsb2NrIEkvTyBDbG9uZXMgYW5kIFNwbGl0cyoqCgpSaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlc2UgZnVuY3Rpb25zOiBgYmlvX2FsbG9jX2Nsb25lYCwgYGJpb19pbml0X2Nsb25lYCwgYW5kIGBiaW9fc3BsaXRgLiBUaGV5IHNlZW0gbGlrZSBwcmltZSB0YXJnZXRzIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgQmxvY2sgSS9PIGxheWVyIGhhbmRsZXMgY2xvbmluZyBhbmQgc3BsaXR0aW5nIG9mIEkvTyByZXF1ZXN0cy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGJpb19zcGxpdGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIGludGVyYWN0aW9ucyBhcmUgZ29pbmcgdG8gYmUuIEl0JiMzOTtsbCByZXZlYWwgaG93IGFuZCB3aHkgd2UmIzM5O3JlIGJyZWFraW5nIHVwIHRoZXNlIEkvTyBvcGVyYXRpb25zLCB3aGljaCBpcyBjcml0aWNhbCBmb3Igb3B0aW1pemF0aW9uIGFuZCB1bmRlcnN0YW5kaW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcy4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgY2FsbCBjaGFpbnMgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiaW9fc3BsaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDUxNSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9ibG9jay9iaW92ZWNzLnJzdD00OT1hZHZhbnRhZ2VzOlxuLS1cbkRvY3VtZW50YXRpb24vYmxvY2svYmlvdmVjcy5yc3QtNzQtXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb3ZlY3MucnN0Ojc1OiAqIFNwbGl0dGluZyBiaW9zIGlzIG5vdyBtdWNoIHNpbXBsZXIuIFRoZSBvbGQgYmlvX3NwbGl0KCkgZGlkbiYjMzk7dCBldmVuIHdvcmsgb25cbkRvY3VtZW50YXRpb24vYmxvY2svYmlvdmVjcy5yc3QtNzYtICAgYmlvcyB3aXRoIG1vcmUgdGhhbiBhIHNpbmdsZSBidmVjISBOb3csIHdlIGNhbiBlZmZpY2llbnRseSBzcGxpdCBhcmJpdHJhcnlcbi0tXG5ibG9jay9iaW8uYz0xOTMxPUVYUE9SVF9TWU1CT0woYmlvX2VuZGlvKTtcbi0tXG5ibG9jay9iaW8uYy0xOTMzLS8qKlxuYmxvY2svYmlvLmM6MTkzNDogKiBiaW9fc3BsaXQgLSBzcGxpdCBhIGJpb1xuYmxvY2svYmlvLmMtMTkzNS0gKiBAYmlvOlx0YmlvIHRvIHNwbGl0XG4tLVxuYmxvY2svYmlvLmMtMTk0Ni0gKi9cbmJsb2NrL2Jpby5jOjE5NDc6c3RydWN0IGJpbyAqYmlvX3NwbGl0KHN0cnVjdCBiaW8gKmJpbywgaW50IHNlY3RvcnMsXG5ibG9jay9iaW8uYy0xOTQ4LVx0XHQgICAgICBnZnBfdCBnZnAsIHN0cnVjdCBiaW9fc2V0ICpicylcbi0tXG5ibG9jay9iaW8uYy0xOTgxLX1cbmJsb2NrL2Jpby5jOjE5ODI6RVhQT1JUX1NZTUJPTChiaW9fc3BsaXQpO1xuYmxvY2svYmlvLmMtMTk4My1cbi0tXG5ibG9jay9ibGstbWFwLmM9NDI2PWludCBibGtfcnFfYXBwZW5kX2JpbyhzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBiaW8gKmJpbylcbi0tXG5ibG9jay9ibGstbWFwLmMtNDMzLVx0LyogY2hlY2sgdGhhdCB0aGUgZGF0YSBsYXlvdXQgbWF0Y2hlcyB0aGUgaGFyZHdhcmUgcmVzdHJpY3Rpb25zICovXG5ibG9jay9ibGstbWFwLmM6NDM0Olx0cmV0ID0gYmlvX3NwbGl0X2lvX2F0KGJpbywgbGltLCBcdTAwMjZucl9zZWdzLCBtYXhfYnl0ZXMsIDApO1xuYmxvY2svYmxrLW1hcC5jLTQzNS1cdGlmIChyZXQpIHtcbi0tXG5ibG9jay9ibGstbWVyZ2UuYz0xMTk9c3RydWN0IGJpbyAqYmlvX3N1Ym1pdF9zcGxpdF9iaW9zZXQoc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgc3BsaXRfc2VjdG9ycyxcbi0tXG5ibG9jay9ibGstbWVyZ2UuYy0xMjEte1xuYmxvY2svYmxrLW1lcmdlLmM6MTIyOlx0c3RydWN0IGJpbyAqc3BsaXQgPSBiaW9fc3BsaXQoYmlvLCBzcGxpdF9zZWN0b3JzLCBHRlBfTk9JTywgYnMpO1xuYmxvY2svYmxrLW1lcmdlLmMtMTIzLVxuLS1cbmJsb2NrL2Jsay1tZXJnZS5jPTE0Mj1zdGF0aWMgc3RydWN0IGJpbyAqYmlvX3N1Ym1pdF9zcGxpdChzdHJ1Y3QgYmlvICpiaW8sIGludCBzcGxpdF9zZWN0b3JzKVxuLS1cbmJsb2NrL2Jsay1tZXJnZS5jLTE1MC1cdFx0YmlvID0gYmlvX3N1Ym1pdF9zcGxpdF9iaW9zZXQoYmlvLCBzcGxpdF9zZWN0b3JzLFxuYmxvY2svYmxrLW1lcmdlLmM6MTUxOlx0XHRcdFx0XHUwMDI2YmlvLVx1MDAzZWJpX2JkZXYtXHUwMDNlYmRfZGlzay1cdTAwM2ViaW9fc3BsaXQpO1xuYmxvY2svYmxrLW1lcmdlLmMtMTUyLVx0XHRpZiAoYmlvKVxuLS1cbmJsb2NrL2Jsay1tZXJnZS5jLTE1OC1cbmJsb2NrL2Jsay1tZXJnZS5jOjE1OTpzdGF0aWMgc3RydWN0IGJpbyAqX19iaW9fc3BsaXRfZGlzY2FyZChzdHJ1Y3QgYmlvICpiaW8sXG5ibG9jay9ibGstbWVyZ2UuYy0xNjAtXHRcdGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgdW5zaWduZWQgKm5zZWdzLFxuLS1cbmJsb2NrL2Jsay1tZXJnZS5jLTE5NC1cbmJsb2NrL2Jsay1tZXJnZS5jOjE5NTpzdHJ1Y3QgYmlvICpiaW9fc3BsaXRfZGlzY2FyZChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSxcbmJsb2NrL2Jsay1tZXJnZS5jLTE5Ni1cdFx0dW5zaWduZWQgKm5zZWdzKVxuLS1cbmJsb2NrL2Jsay1tZXJnZS5jLTIwNC1cbmJsb2NrL2Jsay1tZXJnZS5jOjIwNTpcdHJldHVybiBfX2Jpb19zcGxpdF9kaXNjYXJkKGJpbywgbGltLCBuc2VncywgbWF4X3NlY3RvcnMpO1xuYmxvY2svYmxrLW1lcmdlLmMtMjA2LX1cbi0tXG5ibG9jay9ibGstbWVyZ2UuYz0yODI9c3RhdGljIGJvb2wgYnZlY19zcGxpdF9zZWdzKGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSxcbi0tXG5ibG9jay9ibGstbWVyZ2UuYy0zMDctXG5ibG9jay9ibGstbWVyZ2UuYzozMDg6c3RhdGljIHVuc2lnbmVkIGludCBiaW9fc3BsaXRfYWxpZ25tZW50KHN0cnVjdCBiaW8gKmJpbyxcbmJsb2NrL2Jsay1tZXJnZS5jLTMwOS1cdFx0Y29uc3Qgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuLS1cbmJsb2NrL2Jsay1tZXJnZS5jPTMxNj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBidmVjX3NlZ19nYXAoc3RydWN0IGJpb192ZWMgKmJ2cHJ2LFxuLS1cbmJsb2NrL2Jsay1tZXJnZS5jLTMyMi0vKipcbmJsb2NrL2Jsay1tZXJnZS5jOjMyMzogKiBiaW9fc3BsaXRfaW9fYXQgLSBjaGVjayBpZiBhbmQgd2hlcmUgdG8gc3BsaXQgYSBiaW9cbmJsb2NrL2Jsay1tZXJnZS5jLTMyNC0gKiBAYmlvOiAgW2luXSBiaW8gdG8gYmUgc3BsaXRcbi0tXG5ibG9jay9ibGstbWVyZ2UuYy0zMzQtICovXG5ibG9jay9ibGstbWVyZ2UuYzozMzU6aW50IGJpb19zcGxpdF9pb19hdChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSxcbmJsb2NrL2Jsay1tZXJnZS5jLTMzNi1cdFx0dW5zaWduZWQgKnNlZ3MsIHVuc2lnbmVkIG1heF9ieXRlcywgdW5zaWduZWQgbGVuX2FsaWduX21hc2spXG4tLVxuYmxvY2svYmxrLW1lcmdlLmMtNDA1LVx0ICovXG5ibG9jay9ibGstbWVyZ2UuYzo0MDY6XHRieXRlcyA9IEFMSUdOX0RPV04oYnl0ZXMsIGJpb19zcGxpdF9hbGlnbm1lbnQoYmlvLCBsaW0pKTtcbmJsb2NrL2Jsay1tZXJnZS5jLTQwNy1cdGlmICghYnl0ZXMpXG4tLVxuYmxvY2svYmxrLW1lcmdlLmMtNDE4LX1cbmJsb2NrL2Jsay1tZXJnZS5jOjQxOTpFWFBPUlRfU1lNQk9MX0dQTChiaW9fc3BsaXRfaW9fYXQpO1xuYmxvY2svYmxrLW1lcmdlLmMtNDIwLVxuYmxvY2svYmxrLW1lcmdlLmM6NDIxOnN0cnVjdCBiaW8gKmJpb19zcGxpdF9ydyhzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSxcbmJsb2NrL2Jsay1tZXJnZS5jLTQyMi1cdFx0dW5zaWduZWQgKm5yX3NlZ3MpXG4tLVxuYmxvY2svYmxrLW1lcmdlLmMtNDI0LVx0cmV0dXJuIGJpb19zdWJtaXRfc3BsaXQoYmlvLFxuYmxvY2svYmxrLW1lcmdlLmM6NDI1Olx0XHRiaW9fc3BsaXRfcndfYXQoYmlvLCBsaW0sIG5yX3NlZ3MsXG5ibG9jay9ibGstbWVyZ2UuYy00MjYtXHRcdFx0Z2V0X21heF9pb19zaXplKGJpbywgbGltKSBcdTAwM2NcdTAwM2MgU0VDVE9SX1NISUZUKSk7XG4tLVxuYmxvY2svYmxrLW1lcmdlLmMtNDMxLSAqXG5ibG9jay9ibGstbWVyZ2UuYzo0MzI6ICogQnV0IHdlIHdhbnQgdGhlIG5yX3NlZ3MgY2FsY3VsYXRpb24gcHJvdmlkZWQgYnkgYmlvX3NwbGl0X3J3X2F0LCBhbmQgaGF2aW5nXG5ibG9jay9ibGstbWVyZ2UuYy00MzMtICogYSBnb29kIHNhbml0eSBjaGVjayB0aGF0IHRoZSBzdWJtaXR0ZXIgYnVpbHQgdGhlIGJpbyBjb3JyZWN0bHkgaXMgbmljZSB0b1xuLS1cbmJsb2NrL2Jsay1tZXJnZS5jLTQzNS0gKi9cbmJsb2NrL2Jsay1tZXJnZS5jOjQzNjpzdHJ1Y3QgYmlvICpiaW9fc3BsaXRfem9uZV9hcHBlbmQoc3RydWN0IGJpbyAqYmlvLFxuYmxvY2svYmxrLW1lcmdlLmMtNDM3LVx0XHRjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIHVuc2lnbmVkICpucl9zZWdzKVxuLS1cbmJsb2NrL2Jsay1tZXJnZS5jLTQ0MC1cbmJsb2NrL2Jsay1tZXJnZS5jOjQ0MTpcdHNwbGl0X3NlY3RvcnMgPSBiaW9fc3BsaXRfcndfYXQoYmlvLCBsaW0sIG5yX3NlZ3MsXG5ibG9jay9ibGstbWVyZ2UuYy00NDItXHRcdFx0bGltLVx1MDAzZW1heF96b25lX2FwcGVuZF9zZWN0b3JzIFx1MDAzY1x1MDAzYyBTRUNUT1JfU0hJRlQpO1xuLS1cbmJsb2NrL2Jsay1tZXJnZS5jLTQ0Ny1cbmJsb2NrL2Jsay1tZXJnZS5jOjQ0ODpzdHJ1Y3QgYmlvICpiaW9fc3BsaXRfd3JpdGVfemVyb2VzKHN0cnVjdCBiaW8gKmJpbyxcbmJsb2NrL2Jsay1tZXJnZS5jLTQ0OS1cdFx0Y29uc3Qgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLCB1bnNpZ25lZCAqbnNlZ3MpXG4tLVxuYmxvY2svYmxrLW1lcmdlLmMtNDY4LS8qKlxuYmxvY2svYmxrLW1lcmdlLmM6NDY5OiAqIGJpb19zcGxpdF90b19saW1pdHMgLSBzcGxpdCBhIGJpbyB0byBmaXQgdGhlIHF1ZXVlIGxpbWl0c1xuYmxvY2svYmxrLW1lcmdlLmMtNDcwLSAqIEBiaW86ICAgICBiaW8gdG8gYmUgc3BsaXRcbi0tXG5ibG9jay9ibGstbWVyZ2UuYy00NzUtICpcbmJsb2NrL2Jsay1tZXJnZS5jOjQ3NjogKiBUaGUgc3BsaXQgYmlvIGlzIGFsbG9jYXRlZCBmcm9tIEBxLVx1MDAzZWJpb19zcGxpdCwgd2hpY2ggaXMgcHJvdmlkZWQgYnkgdGhlXG5ibG9jay9ibGstbWVyZ2UuYy00NzctICogYmxvY2sgbGF5ZXIuXG5ibG9jay9ibGstbWVyZ2UuYy00NzgtICovXG5ibG9jay9ibGstbWVyZ2UuYzo0Nzk6c3RydWN0IGJpbyAqYmlvX3NwbGl0X3RvX2xpbWl0cyhzdHJ1Y3QgYmlvICpiaW8pXG5ibG9jay9ibGstbWVyZ2UuYy00ODAte1xuLS1cbmJsb2NrL2Jsay1tZXJnZS5jLTQ4Mi1cbmJsb2NrL2Jsay1tZXJnZS5jOjQ4MzpcdHJldHVybiBfX2Jpb19zcGxpdF90b19saW1pdHMoYmlvLCBiZGV2X2xpbWl0cyhiaW8tXHUwMDNlYmlfYmRldiksIFx1MDAyNm5yX3NlZ3MpO1xuYmxvY2svYmxrLW1lcmdlLmMtNDg0LX1cbmJsb2NrL2Jsay1tZXJnZS5jOjQ4NTpFWFBPUlRfU1lNQk9MKGJpb19zcGxpdF90b19saW1pdHMpO1xuYmxvY2svYmxrLW1lcmdlLmMtNDg2LVxuLS1cbmJsb2NrL2Jsay1tcS5jPTMwOTM9dm9pZCBibGtfbXFfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svYmxrLW1xLmMtMzE0NS1cbmJsb2NrL2Jsay1tcS5jOjMxNDY6XHRiaW8gPSBfX2Jpb19zcGxpdF90b19saW1pdHMoYmlvLCBcdTAwMjZxLVx1MDAzZWxpbWl0cywgXHUwMDI2bnJfc2Vncyk7XG5ibG9jay9ibGstbXEuYy0zMTQ3LVx0aWYgKCFiaW8pXG4tLVxuYmxvY2svYmxrLmg9Mzc3PXNzaXplX3QgcGFydF90aW1lb3V0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKixcbi0tXG5ibG9jay9ibGsuaC0zNzktXG5ibG9jay9ibGsuaDozODA6c3RydWN0IGJpbyAqYmlvX3NwbGl0X2Rpc2NhcmQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXG5ibG9jay9ibGsuaC0zODEtXHRcdHVuc2lnbmVkICpuc2Vncyk7XG5ibG9jay9ibGsuaDozODI6c3RydWN0IGJpbyAqYmlvX3NwbGl0X3dyaXRlX3plcm9lcyhzdHJ1Y3QgYmlvICpiaW8sXG5ibG9jay9ibGsuaC0zODMtXHRcdGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgdW5zaWduZWQgKm5zZWdzKTtcbmJsb2NrL2Jsay5oOjM4NDpzdHJ1Y3QgYmlvICpiaW9fc3BsaXRfcncoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXG5ibG9jay9ibGsuaC0zODUtXHRcdHVuc2lnbmVkICpucl9zZWdzKTtcbmJsb2NrL2Jsay5oOjM4NjpzdHJ1Y3QgYmlvICpiaW9fc3BsaXRfem9uZV9hcHBlbmQoc3RydWN0IGJpbyAqYmlvLFxuYmxvY2svYmxrLmgtMzg3LVx0XHRjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIHVuc2lnbmVkICpucl9zZWdzKTtcbi0tXG5ibG9jay9ibGsuaD0zOTc9c3RhdGljIGlubGluZSBib29sIGJpb19tYXlfbmVlZF9zcGxpdChzdHJ1Y3QgYmlvICpiaW8sXG4tLVxuYmxvY2svYmxrLmgtNDE2LS8qKlxuYmxvY2svYmxrLmg6NDE3OiAqIF9fYmlvX3NwbGl0X3RvX2xpbWl0cyAtIHNwbGl0IGEgYmlvIHRvIGZpdCB0aGUgcXVldWUgbGltaXRzXG5ibG9jay9ibGsuaC00MTgtICogQGJpbzogICAgIGJpbyB0byBiZSBzcGxpdFxuLS1cbmJsb2NrL2Jsay5oLTQyNS0gKlxuYmxvY2svYmxrLmg6NDI2OiAqIFRoZSBzcGxpdCBiaW8gaXMgYWxsb2NhdGVkIGZyb20gQHEtXHUwMDNlYmlvX3NwbGl0LCB3aGljaCBpcyBwcm92aWRlZCBieSB0aGVcbmJsb2NrL2Jsay5oLTQyNy0gKiBibG9jayBsYXllci5cbmJsb2NrL2Jsay5oLTQyOC0gKi9cbmJsb2NrL2Jsay5oOjQyOTpzdGF0aWMgaW5saW5lIHN0cnVjdCBiaW8gKl9fYmlvX3NwbGl0X3RvX2xpbWl0cyhzdHJ1Y3QgYmlvICpiaW8sXG5ibG9jay9ibGsuaC00MzAtXHRcdGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgdW5zaWduZWQgaW50ICpucl9zZWdzKVxuLS1cbmJsb2NrL2Jsay5oLTQzNS1cdFx0aWYgKGJpb19tYXlfbmVlZF9zcGxpdChiaW8sIGxpbSkpXG5ibG9jay9ibGsuaDo0MzY6XHRcdFx0cmV0dXJuIGJpb19zcGxpdF9ydyhiaW8sIGxpbSwgbnJfc2Vncyk7XG5ibG9jay9ibGsuaC00MzctXHRcdCpucl9zZWdzID0gMTtcbi0tXG5ibG9jay9ibGsuaC00MzktXHRjYXNlIFJFUV9PUF9aT05FX0FQUEVORDpcbmJsb2NrL2Jsay5oOjQ0MDpcdFx0cmV0dXJuIGJpb19zcGxpdF96b25lX2FwcGVuZChiaW8sIGxpbSwgbnJfc2Vncyk7XG5ibG9jay9ibGsuaC00NDEtXHRjYXNlIFJFUV9PUF9ESVNDQVJEOlxuYmxvY2svYmxrLmgtNDQyLVx0Y2FzZSBSRVFfT1BfU0VDVVJFX0VSQVNFOlxuYmxvY2svYmxrLmg6NDQzOlx0XHRyZXR1cm4gYmlvX3NwbGl0X2Rpc2NhcmQoYmlvLCBsaW0sIG5yX3NlZ3MpO1xuYmxvY2svYmxrLmgtNDQ0LVx0Y2FzZSBSRVFfT1BfV1JJVEVfWkVST0VTOlxuYmxvY2svYmxrLmg6NDQ1Olx0XHRyZXR1cm4gYmlvX3NwbGl0X3dyaXRlX3plcm9lcyhiaW8sIGxpbSwgbnJfc2Vncyk7XG5ibG9jay9ibGsuaC00NDYtXHRkZWZhdWx0OlxuLS1cbmJsb2NrL2dlbmhkLmM9MTI3Mz1zdGF0aWMgdm9pZCBkaXNrX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmJsb2NrL2dlbmhkLmMtMTI5OS1cbmJsb2NrL2dlbmhkLmM6MTMwMDpcdGJpb3NldF9leGl0KFx1MDAyNmRpc2stXHUwMDNlYmlvX3NwbGl0KTtcbmJsb2NrL2dlbmhkLmMtMTMwMS1cbi0tXG5ibG9jay9nZW5oZC5jPTE0NDc9c3RydWN0IGdlbmRpc2sgKl9fYWxsb2NfZGlza19ub2RlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgbm9kZV9pZCxcbi0tXG5ibG9jay9nZW5oZC5jLTE0NTUtXG5ibG9jay9nZW5oZC5jOjE0NTY6XHRpZiAoYmlvc2V0X2luaXQoXHUwMDI2ZGlzay1cdTAwM2ViaW9fc3BsaXQsIEJJT19QT09MX1NJWkUsIDAsIDApKVxuYmxvY2svZ2VuaGQuYy0xNDU3LVx0XHRnb3RvIG91dF9mcmVlX2Rpc2s7XG4tLVxuYmxvY2svZ2VuaGQuYy0xNTA2LW91dF9mcmVlX2Jpb3NldDpcbmJsb2NrL2dlbmhkLmM6MTUwNzpcdGJpb3NldF9leGl0KFx1MDAyNmRpc2stXHUwMDNlYmlvX3NwbGl0KTtcbmJsb2NrL2dlbmhkLmMtMTUwOC1vdXRfZnJlZV9kaXNrOlxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlcS5jPTE2MTI9dm9pZCBkcmJkX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlcS5jLTE2MTUtXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZXEuYzoxNjE2Olx0YmlvID0gYmlvX3NwbGl0X3RvX2xpbWl0cyhiaW8pO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVxLmMtMTYxNy1cdGlmICghYmlvKVxuLS1cbmRyaXZlcnMvbWQvYmNhY2hlL2JjYWNoZS5oPTI1MD1zdHJ1Y3QgYmNhY2hlX2RldmljZSB7XG4tLVxuZHJpdmVycy9tZC9iY2FjaGUvYmNhY2hlLmgtMjczLVxuZHJpdmVycy9tZC9iY2FjaGUvYmNhY2hlLmg6Mjc0Olx0c3RydWN0IGJpb19zZXRcdFx0YmlvX3NwbGl0O1xuZHJpdmVycy9tZC9iY2FjaGUvYmNhY2hlLmgtMjc1LVxuLS1cbmRyaXZlcnMvbWQvYmNhY2hlL2JjYWNoZS5oPTUxNj1zdHJ1Y3QgY2FjaGVfc2V0IHtcbi0tXG5kcml2ZXJzL21kL2JjYWNoZS9iY2FjaGUuaC01NDMtXHRtZW1wb29sX3RcdFx0YmlvX21ldGE7XG5kcml2ZXJzL21kL2JjYWNoZS9iY2FjaGUuaDo1NDQ6XHRzdHJ1Y3QgYmlvX3NldFx0XHRiaW9fc3BsaXQ7XG5kcml2ZXJzL21kL2JjYWNoZS9iY2FjaGUuaC01NDUtXG4tLVxuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jPTE4Nz1zdGF0aWMgQ0xPU1VSRV9DQUxMQkFDSyhiY2hfZGF0YV9pbnNlcnRfc3RhcnQpXG4tLVxuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jLTIwNi1cdFx0c3RydWN0IGJrZXkgKms7XG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmM6MjA3Olx0XHRzdHJ1Y3QgYmlvX3NldCAqc3BsaXQgPSBcdTAwMjZvcC1cdTAwM2VjLVx1MDAzZWJpb19zcGxpdDtcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYy0yMDgtXG4tLVxuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jPTUyNz1zdGF0aWMgaW50IGNhY2hlX2xvb2t1cF9mbihzdHJ1Y3QgYnRyZWVfb3AgKm9wLCBzdHJ1Y3QgYnRyZWUgKmIsIHN0cnVjdCBia2V5ICprKVxuLS1cbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYy01NjUtXHRcdFx0XHQgICAgICBLRVlfT0ZGU0VUKGspIC0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yKSxcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYzo1NjY6XHRcdFx0ICAgR0ZQX05PSU8sIFx1MDAyNnMtXHUwMDNlZC1cdTAwM2ViaW9fc3BsaXQpO1xuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jLTU2Ny1cbi0tXG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmM9ODkyPXN0YXRpYyBpbnQgY2FjaGVkX2Rldl9jYWNoZV9taXNzKHN0cnVjdCBidHJlZSAqYiwgc3RydWN0IHNlYXJjaCAqcyxcbi0tXG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmMtOTAyLVx0aWYgKHMtXHUwMDNlY2FjaGVfbWlzcyB8fCBzLVx1MDAzZWlvcC5ieXBhc3MpIHtcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYzo5MDM6XHRcdG1pc3MgPSBiaW9fbmV4dF9zcGxpdChiaW8sIHNlY3RvcnMsIEdGUF9OT0lPLCBcdTAwMjZzLVx1MDAzZWQtXHUwMDNlYmlvX3NwbGl0KTtcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYy05MDQtXHRcdHJldCA9IG1pc3MgPT0gYmlvID8gTUFQX0RPTkUgOiBNQVBfQ09OVElOVUU7XG4tLVxuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jLTkyMy1cdG1pc3MgPSBiaW9fbmV4dF9zcGxpdChiaW8sIHMtXHUwMDNlaW5zZXJ0X2Jpb19zZWN0b3JzLCBHRlBfTk9JTyxcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYzo5MjQ6XHRcdFx0ICAgICAgXHUwMDI2cy1cdTAwM2VkLVx1MDAzZWJpb19zcGxpdCk7XG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmMtOTI1LVxuLS1cbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYy05MzAtXHRcdFx0RElWX1JPVU5EX1VQKHMtXHUwMDNlaW5zZXJ0X2Jpb19zZWN0b3JzLCBQQUdFX1NFQ1RPUlMpLFxuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jOjkzMTpcdFx0XHQwLCBHRlBfTk9XQUlULCBcdTAwMjZkYy1cdTAwM2VkaXNrLmJpb19zcGxpdCk7XG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmMtOTMyLVx0aWYgKCFjYWNoZV9iaW8pXG4tLVxuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jPTk4MT1zdGF0aWMgdm9pZCBjYWNoZWRfZGV2X3dyaXRlKHN0cnVjdCBjYWNoZWRfZGV2ICpkYywgc3RydWN0IHNlYXJjaCAqcylcbi0tXG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmMtMTA0MS1cdFx0XHRcdFx0XHQgUkVRX09QX1dSSVRFIHwgUkVRX1BSRUZMVVNILFxuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jOjEwNDI6XHRcdFx0XHRcdFx0IEdGUF9OT0lPLCBcdTAwMjZkYy1cdTAwM2VkaXNrLmJpb19zcGxpdCk7XG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmMtMTA0My1cdFx0XHRpZiAoIWZsdXNoKSB7XG4tLVxuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jLTEwNTMtXHRcdHMtXHUwMDNlaW9wLmJpbyA9IGJpb19hbGxvY19jbG9uZShiaW8tXHUwMDNlYmlfYmRldiwgYmlvLCBHRlBfTk9JTyxcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYzoxMDU0Olx0XHRcdFx0XHQgICAgIFx1MDAyNmRjLVx1MDAzZWRpc2suYmlvX3NwbGl0KTtcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYy0xMDU1LVx0XHQvKiBJL08gcmVxdWVzdCBzZW50IHRvIGJhY2tpbmcgZGV2aWNlICovXG4tLVxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYz04Njk9c3RhdGljIHZvaWQgYmNhY2hlX2RldmljZV9mcmVlKHN0cnVjdCBiY2FjaGVfZGV2aWNlICpkKVxuLS1cbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmMtODg4LVxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYzo4ODk6XHRiaW9zZXRfZXhpdChcdTAwMjZkLVx1MDAzZWJpb19zcGxpdCk7XG5kcml2ZXJzL21kL2JjYWNoZS9zdXBlci5jLTg5MC1cdGJpb3NldF9leGl0KFx1MDAyNmQtXHUwMDNlYmlvX2RldGFjaGVkKTtcbi0tXG5kcml2ZXJzL21kL2JjYWNoZS9zdXBlci5jPTg5Nz1zdGF0aWMgaW50IGJjYWNoZV9kZXZpY2VfaW5pdChzdHJ1Y3QgYmNhY2hlX2RldmljZSAqZCwgdW5zaWduZWQgaW50IGJsb2NrX3NpemUsXG4tLVxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYy05NDgtXG5kcml2ZXJzL21kL2JjYWNoZS9zdXBlci5jOjk0OTpcdGlmIChiaW9zZXRfaW5pdChcdTAwMjZkLVx1MDAzZWJpb19zcGxpdCwgNCwgb2Zmc2V0b2Yoc3RydWN0IGJiaW8sIGJpbyksXG5kcml2ZXJzL21kL2JjYWNoZS9zdXBlci5jLTk1MC1cdFx0XHRCSU9TRVRfTkVFRF9CVkVDU3xCSU9TRVRfTkVFRF9SRVNDVUVSKSlcbi0tXG5kcml2ZXJzL21kL2JjYWNoZS9zdXBlci5jLTk4Ny1vdXRfYmlvc2V0X3NwbGl0X2V4aXQ6XG5kcml2ZXJzL21kL2JjYWNoZS9zdXBlci5jOjk4ODpcdGJpb3NldF9leGl0KFx1MDAyNmQtXHUwMDNlYmlvX3NwbGl0KTtcbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmMtOTg5LW91dF9pZGFfcmVtb3ZlOlxuLS1cbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmM9MTY4MT1zdGF0aWMgQ0xPU1VSRV9DQUxMQkFDSyhjYWNoZV9zZXRfZnJlZSlcbi0tXG5kcml2ZXJzL21kL2JjYWNoZS9zdXBlci5jLTE3MDUtXHRcdGRlc3Ryb3lfd29ya3F1ZXVlKGMtXHUwMDNlbW92aW5nX2djX3dxKTtcbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmM6MTcwNjpcdGJpb3NldF9leGl0KFx1MDAyNmMtXHUwMDNlYmlvX3NwbGl0KTtcbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmMtMTcwNy1cdG1lbXBvb2xfZXhpdChcdTAwMjZjLVx1MDAzZWZpbGxfaXRlcik7XG4tLVxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYz0xODcwPXN0cnVjdCBjYWNoZV9zZXQgKmJjaF9jYWNoZV9zZXRfYWxsb2Moc3RydWN0IGNhY2hlX3NiICpzYilcbi0tXG5kcml2ZXJzL21kL2JjYWNoZS9zdXBlci5jLTE5NDgtXG5kcml2ZXJzL21kL2JjYWNoZS9zdXBlci5jOjE5NDk6XHRpZiAoYmlvc2V0X2luaXQoXHUwMDI2Yy1cdTAwM2ViaW9fc3BsaXQsIDQsIG9mZnNldG9mKHN0cnVjdCBiYmlvLCBiaW8pLFxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYy0xOTUwLVx0XHRcdEJJT1NFVF9ORUVEX1JFU0NVRVIpKVxuLS1cbmRyaXZlcnMvbWQvZG0uYz0xMDAxPXN0YXRpYyB2b2lkIGRtX3dxX3JlcXVldWVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9tZC9kbS5jLTEwMTYtXG5kcml2ZXJzL21kL2RtLmM6MTAxNzpcdFx0ZG1faW9fcmV3aW5kKGlvLCBcdTAwMjZtZC1cdTAwM2VkaXNrLVx1MDAzZWJpb19zcGxpdCk7XG5kcml2ZXJzL21kL2RtLmMtMTAxOC1cbi0tXG5kcml2ZXJzL21kL2RtLmM9MTE2MT1zdGF0aWMgc2VjdG9yX3QgX19tYXhfaW9fbGVuKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzZWN0b3JfdCBzZWN0b3IsXG4tLVxuZHJpdmVycy9tZC9kbS5jLTExNzEtXHQgKiAgIGV4cGxhaW5zIHdoeSBzdGFja2VkIGNodW5rX3NlY3RvcnMgYmFzZWQgc3BsaXR0aW5nIHZpYVxuZHJpdmVycy9tZC9kbS5jOjExNzI6XHQgKiAgIGJpb19zcGxpdF90b19saW1pdHMoKSBpc24mIzM5O3QgcG9zc2libGUgaGVyZS5cbmRyaXZlcnMvbWQvZG0uYy0xMTczLVx0ICovXG4tLVxuZHJpdmVycy9tZC9kbS5jPTE5NTY9c3RhdGljIHZvaWQgZG1fc3BsaXRfYW5kX3Byb2Nlc3NfYmlvKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCxcbi0tXG5kcml2ZXJzL21kL2RtLmMtMTk3Mi1cdFx0LypcbmRyaXZlcnMvbWQvZG0uYzoxOTczOlx0XHQgKiBVc2UgYmlvX3NwbGl0X3RvX2xpbWl0cygpIGZvciBhYm5vcm1hbCBJTyAoZS5nLiBkaXNjYXJkLCBldGMpXG5kcml2ZXJzL21kL2RtLmMtMTk3NC1cdFx0ICogb3RoZXJ3aXNlIGFzc29jaWF0ZWQgcXVldWVfbGltaXRzIHdvbiYjMzk7dCBiZSBpbXBvc2VkLlxuLS1cbmRyaXZlcnMvbWQvZG0uYy0xOTc4LVx0XHQgKi9cbmRyaXZlcnMvbWQvZG0uYzoxOTc5Olx0XHRiaW8gPSBiaW9fc3BsaXRfdG9fbGltaXRzKGJpbyk7XG5kcml2ZXJzL21kL2RtLmMtMTk4MC1cdFx0aWYgKCFiaW8pXG4tLVxuZHJpdmVycy9tZC9tZC5jPTQyOT1zdGF0aWMgdm9pZCBtZF9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5kcml2ZXJzL21kL21kLmMtNDQzLVxuZHJpdmVycy9tZC9tZC5jOjQ0NDpcdGJpbyA9IGJpb19zcGxpdF90b19saW1pdHMoYmlvKTtcbmRyaXZlcnMvbWQvbWQuYy00NDUtXHRpZiAoIWJpbylcbi0tXG5kcml2ZXJzL21kL21kLmM9OTM5Mz1FWFBPUlRfU1lNQk9MX0dQTChtZF9zdWJtaXRfZGlzY2FyZF9iaW8pO1xuZHJpdmVycy9tZC9tZC5jLTkzOTQtXG5kcml2ZXJzL21kL21kLmM6OTM5NTpzdHJ1Y3QgYmlvICptZGRldl9iaW9fc3BsaXRfYXRfcmVzaGFwZV9vZmZzZXQoc3RydWN0IG1kZGV2ICptZGRldixcbmRyaXZlcnMvbWQvbWQuYy05Mzk2LVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgYmlvICpiaW8sXG4tLVxuZHJpdmVycy9tZC9tZC5jLTk0MzEtfVxuZHJpdmVycy9tZC9tZC5jOjk0MzI6RVhQT1JUX1NZTUJPTF9HUEwobWRkZXZfYmlvX3NwbGl0X2F0X3Jlc2hhcGVfb2Zmc2V0KTtcbmRyaXZlcnMvbWQvbWQuYy05NDMzLVxuLS1cbmRyaXZlcnMvbWQvbWQuaD05MjU9dm9pZCBtZF9zdWJtaXRfZGlzY2FyZF9iaW8oc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYsXG5kcml2ZXJzL21kL21kLmgtOTI2LVx0XHRcdHN0cnVjdCBiaW8gKmJpbywgc2VjdG9yX3Qgc3RhcnQsIHNlY3Rvcl90IHNpemUpO1xuZHJpdmVycy9tZC9tZC5oOjkyNzpzdHJ1Y3QgYmlvICptZGRldl9iaW9fc3BsaXRfYXRfcmVzaGFwZV9vZmZzZXQoc3RydWN0IG1kZGV2ICptZGRldixcbmRyaXZlcnMvbWQvbWQuaC05MjgtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBiaW8gKmJpbyxcbi0tXG5kcml2ZXJzL21kL3JhaWQxLmM9MTMyMD1zdGF0aWMgdm9pZCByYWlkMV9yZWFkX3JlcXVlc3Qoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IGJpbyAqYmlvLFxuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYy0xMzkwLVx0XHRiaW8gPSBiaW9fc3VibWl0X3NwbGl0X2Jpb3NldChiaW8sIG1heF9zZWN0b3JzLFxuZHJpdmVycy9tZC9yYWlkMS5jOjEzOTE6XHRcdFx0XHRcdCAgICAgIFx1MDAyNmNvbmYtXHUwMDNlYmlvX3NwbGl0KTtcbmRyaXZlcnMvbWQvcmFpZDEuYy0xMzkyLVx0XHRpZiAoIWJpbykge1xuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYz0xNDc5PXN0YXRpYyBib29sIHJhaWQxX3dyaXRlX3JlcXVlc3Qoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IGJpbyAqYmlvLFxuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYy0xNTg3LVx0XHRiaW8gPSBiaW9fc3VibWl0X3NwbGl0X2Jpb3NldChiaW8sIG1heF9zZWN0b3JzLFxuZHJpdmVycy9tZC9yYWlkMS5jOjE1ODg6XHRcdFx0XHRcdCAgICAgIFx1MDAyNmNvbmYtXHUwMDNlYmlvX3NwbGl0KTtcbmRyaXZlcnMvbWQvcmFpZDEuYy0xNTg5LVx0XHRpZiAoIWJpbylcbi0tXG5kcml2ZXJzL21kL3JhaWQxLmM9MzA0NT1zdGF0aWMgc3RydWN0IHIxY29uZiAqc2V0dXBfY29uZihzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYy0zMDg4LVxuZHJpdmVycy9tZC9yYWlkMS5jOjMwODk6XHRlcnIgPSBiaW9zZXRfaW5pdChcdTAwMjZjb25mLVx1MDAzZWJpb19zcGxpdCwgQklPX1BPT0xfU0laRSwgMCwgMCk7XG5kcml2ZXJzL21kL3JhaWQxLmMtMzA5MC1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9tZC9yYWlkMS5jLTMxNjAtXHRcdGtmcmVlKGNvbmYtXHUwMDNlYmFycmllcik7XG5kcml2ZXJzL21kL3JhaWQxLmM6MzE2MTpcdFx0Ymlvc2V0X2V4aXQoXHUwMDI2Y29uZi1cdTAwM2ViaW9fc3BsaXQpO1xuZHJpdmVycy9tZC9yYWlkMS5jLTMxNjItXHRcdGtmcmVlKGNvbmYpO1xuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYz0zMjY3PXN0YXRpYyB2b2lkIHJhaWQxX2ZyZWUoc3RydWN0IG1kZGV2ICptZGRldiwgdm9pZCAqcHJpdilcbi0tXG5kcml2ZXJzL21kL3JhaWQxLmMtMzI3Ny1cdGtmcmVlKGNvbmYtXHUwMDNlYmFycmllcik7XG5kcml2ZXJzL21kL3JhaWQxLmM6MzI3ODpcdGJpb3NldF9leGl0KFx1MDAyNmNvbmYtXHUwMDNlYmlvX3NwbGl0KTtcbmRyaXZlcnMvbWQvcmFpZDEuYy0zMjc5LVx0a2ZyZWUoY29uZik7XG4tLVxuZHJpdmVycy9tZC9yYWlkMS5oPTUyPXN0cnVjdCByMWNvbmYge1xuLS1cbmRyaXZlcnMvbWQvcmFpZDEuaC05OC1cbmRyaXZlcnMvbWQvcmFpZDEuaDo5OTpcdHN0cnVjdCBiaW9fc2V0XHRcdGJpb19zcGxpdDtcbmRyaXZlcnMvbWQvcmFpZDEuaC0xMDAtXG4tLVxuZHJpdmVycy9tZC9yYWlkMS5oPTE2Mz1lbnVtIHIxYmlvX3N0YXRlIHtcbi0tXG5kcml2ZXJzL21kL3JhaWQxLmgtMTc2LSAqXG5kcml2ZXJzL21kL3JhaWQxLmg6MTc3OiAqIEFuZCBmb3IgYmlvX3NwbGl0IGVycm9ycywgcmVjb3JkIHRoYXQgYmlfZW5kX2lvIHdhcyBjYWxsZWRcbmRyaXZlcnMvbWQvcmFpZDEuaC0xNzgtICogd2l0aCB0aGlzIGZsYWcuLi5cbi0tXG5kcml2ZXJzL21kL3JhaWQxMC5jPTExNDQ9c3RhdGljIHZvaWQgcmFpZDEwX3JlYWRfcmVxdWVzdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgYmlvICpiaW8sXG4tLVxuZHJpdmVycy9tZC9yYWlkMTAuYy0xMjA5LVx0XHRiaW8gPSBiaW9fc3VibWl0X3NwbGl0X2Jpb3NldChiaW8sIG1heF9zZWN0b3JzLFxuZHJpdmVycy9tZC9yYWlkMTAuYzoxMjEwOlx0XHRcdFx0XHQgICAgICBcdTAwMjZjb25mLVx1MDAzZWJpb19zcGxpdCk7XG5kcml2ZXJzL21kL3JhaWQxMC5jLTEyMTEtXHRcdHdhaXRfYmFycmllcihjb25mKTtcbi0tXG5kcml2ZXJzL21kL3JhaWQxMC5jPTEzNDM9c3RhdGljIGJvb2wgcmFpZDEwX3dyaXRlX3JlcXVlc3Qoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IGJpbyAqYmlvLFxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmMtMTQ2MC1cdFx0YmlvID0gYmlvX3N1Ym1pdF9zcGxpdF9iaW9zZXQoYmlvLCByMTBfYmlvLVx1MDAzZXNlY3RvcnMsXG5kcml2ZXJzL21kL3JhaWQxMC5jOjE0NjE6XHRcdFx0XHRcdCAgICAgIFx1MDAyNmNvbmYtXHUwMDNlYmlvX3NwbGl0KTtcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMTQ2Mi1cdFx0aWYgKCFiaW8pIHtcbi0tXG5kcml2ZXJzL21kL3JhaWQxMC5jPTE1ODI9c3RhdGljIGludCByYWlkMTBfaGFuZGxlX2Rpc2NhcmQoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IGJpbyAqYmlvKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmMtMTY0Mi1cdFx0c3BsaXRfc2l6ZSA9IHN0cmlwZV9zaXplIC0gcmVtYWluZGVyO1xuZHJpdmVycy9tZC9yYWlkMTAuYzoxNjQzOlx0XHRzcGxpdCA9IGJpb19zcGxpdChiaW8sIHNwbGl0X3NpemUsIEdGUF9OT0lPLCBcdTAwMjZjb25mLVx1MDAzZWJpb19zcGxpdCk7XG5kcml2ZXJzL21kL3JhaWQxMC5jLTE2NDQtXHRcdGlmIChJU19FUlIoc3BsaXQpKSB7XG4tLVxuZHJpdmVycy9tZC9yYWlkMTAuYy0xNjYxLVx0XHRzcGxpdF9zaXplID0gYmlvX3NlY3RvcnMoYmlvKSAtIHJlbWFpbmRlcjtcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MTY2MjpcdFx0c3BsaXQgPSBiaW9fc3BsaXQoYmlvLCBzcGxpdF9zaXplLCBHRlBfTk9JTywgXHUwMDI2Y29uZi1cdTAwM2ViaW9fc3BsaXQpO1xuZHJpdmVycy9tZC9yYWlkMTAuYy0xNjYzLVx0XHRpZiAoSVNfRVJSKHNwbGl0KSkge1xuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmM9MTg0Nz1zdGF0aWMgYm9vbCByYWlkMTBfbWFrZV9yZXF1ZXN0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKmJpbylcbi0tXG5kcml2ZXJzL21kL3JhaWQxMC5jLTE4NzctXG5kcml2ZXJzL21kL3JhaWQxMC5jOjE4Nzg6XHRiaW8gPSBtZGRldl9iaW9fc3BsaXRfYXRfcmVzaGFwZV9vZmZzZXQobWRkZXYsIGJpbywgXHUwMDI2c2VjdG9ycyxcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MTg3OTpcdFx0XHRcdFx0XHRcdTAwMjZjb25mLVx1MDAzZWJpb19zcGxpdCk7XG5kcml2ZXJzL21kL3JhaWQxMC5jLTE4ODAtXHRpZiAoIWJpbykge1xuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmM9MzgxND1zdGF0aWMgdm9pZCByYWlkMTBfZnJlZV9jb25mKHN0cnVjdCByMTBjb25mICpjb25mKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmMtMzgyMy1cdHNhZmVfcHV0X3BhZ2UoY29uZi1cdTAwM2V0bXBwYWdlKTtcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MzgyNDpcdGJpb3NldF9leGl0KFx1MDAyNmNvbmYtXHUwMDNlYmlvX3NwbGl0KTtcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMzgyNS1cdGtmcmVlKGNvbmYpO1xuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmM9MzgyOD1zdGF0aWMgc3RydWN0IHIxMGNvbmYgKnNldHVwX2NvbmYoc3RydWN0IG1kZGV2ICptZGRldilcbi0tXG5kcml2ZXJzL21kL3JhaWQxMC5jLTM4NjktXG5kcml2ZXJzL21kL3JhaWQxMC5jOjM4NzA6XHRlcnIgPSBiaW9zZXRfaW5pdChcdTAwMjZjb25mLVx1MDAzZWJpb19zcGxpdCwgQklPX1BPT0xfU0laRSwgMCwgMCk7XG5kcml2ZXJzL21kL3JhaWQxMC5jLTM4NzEtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmg9MjM9c3RydWN0IHIxMGNvbmYge1xuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmgtOTItXHRzdHJ1Y3QgcGFnZVx0XHQqdG1wcGFnZTtcbmRyaXZlcnMvbWQvcmFpZDEwLmg6OTM6XHRzdHJ1Y3QgYmlvX3NldFx0XHRiaW9fc3BsaXQ7XG5kcml2ZXJzL21kL3JhaWQxMC5oLTk0LVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmg9MTU0PWVudW0gcjEwYmlvX3N0YXRlIHtcbi0tXG5kcml2ZXJzL21kL3JhaWQxMC5oLTE2Mi1cdFIxMEJJT19SZWFkRXJyb3IsXG5kcml2ZXJzL21kL3JhaWQxMC5oOjE2MzovKiBGb3IgYmlvX3NwbGl0IGVycm9ycywgcmVjb3JkIHRoYXQgYmlfZW5kX2lvIHdhcyBjYWxsZWQuICovXG5kcml2ZXJzL21kL3JhaWQxMC5oLTE2NC1cdFIxMEJJT19SZXR1cm5lZCxcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmM9NTU4Nz1zdGF0aWMgc3RydWN0IGJpbyAqY2h1bmtfYWxpZ25lZF9yZWFkKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKnJhaWRfYmlvKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDUuYy01NTk2LVx0XHRyYWlkX2JpbyA9IGJpb19zdWJtaXRfc3BsaXRfYmlvc2V0KHJhaWRfYmlvLCBzZWN0b3JzLFxuZHJpdmVycy9tZC9yYWlkNS5jOjU1OTc6XHRcdFx0XHRcdFx0ICAgXHUwMDI2Y29uZi1cdTAwM2ViaW9fc3BsaXQpO1xuZHJpdmVycy9tZC9yYWlkNS5jLTU1OTgtXHRcdGlmICghcmFpZF9iaW8pXG4tLVxuZHJpdmVycy9tZC9yYWlkNS5jPTYyMTg9c3RhdGljIGJvb2wgcmFpZDVfbWFrZV9yZXF1ZXN0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKiBiaSlcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmMtNjI2Mi1cdGZyb250X2JpbyA9IGJpO1xuZHJpdmVycy9tZC9yYWlkNS5jOjYyNjM6XHRiaSA9IG1kZGV2X2Jpb19zcGxpdF9hdF9yZXNoYXBlX29mZnNldChtZGRldiwgYmksIE5VTEwsXG5kcml2ZXJzL21kL3JhaWQ1LmM6NjI2NDpcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmNvbmYtXHUwMDNlYmlvX3NwbGl0KTtcbmRyaXZlcnMvbWQvcmFpZDUuYy02MjY1LVx0aWYgKCFiaSkge1xuLS1cbmRyaXZlcnMvbWQvcmFpZDUuYz03NTQ1PXN0YXRpYyB2b2lkIGZyZWVfY29uZihzdHJ1Y3QgcjVjb25mICpjb25mKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDUuYy03NTU4LVx0a2ZyZWUoY29uZi1cdTAwM2VkaXNrcyk7XG5kcml2ZXJzL21kL3JhaWQ1LmM6NzU1OTpcdGJpb3NldF9leGl0KFx1MDAyNmNvbmYtXHUwMDNlYmlvX3NwbGl0KTtcbmRyaXZlcnMvbWQvcmFpZDUuYy03NTYwLVx0a2ZyZWUoY29uZi1cdTAwM2VzdHJpcGVfaGFzaHRibCk7XG4tLVxuZHJpdmVycy9tZC9yYWlkNS5jPTc2MzM9c3RhdGljIHN0cnVjdCByNWNvbmYgKnNldHVwX2NvbmYoc3RydWN0IG1kZGV2ICptZGRldilcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmMtNzc0Mi1cbmRyaXZlcnMvbWQvcmFpZDUuYzo3NzQzOlx0cmV0ID0gYmlvc2V0X2luaXQoXHUwMDI2Y29uZi1cdTAwM2ViaW9fc3BsaXQsIEJJT19QT09MX1NJWkUsIDAsIDApO1xuZHJpdmVycy9tZC9yYWlkNS5jLTc3NDQtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbWQvcmFpZDUuaD01NzA9c3RydWN0IHI1Y29uZiB7XG4tLVxuZHJpdmVycy9tZC9yYWlkNS5oLTY3MS1cdHN0cnVjdCBkaXNrX2luZm9cdCpkaXNrcztcbmRyaXZlcnMvbWQvcmFpZDUuaDo2NzI6XHRzdHJ1Y3QgYmlvX3NldFx0XHRiaW9fc3BsaXQ7XG5kcml2ZXJzL21kL3JhaWQ1LmgtNjczLVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jPTUzMz1zdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtNTQxLVx0ICogVGhlIG5hbWVzcGFjZSBtaWdodCBiZSBnb2luZyBhd2F5IGFuZCB0aGUgYmlvIG1pZ2h0IGJlIG1vdmVkIHRvIGFcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jOjU0MjpcdCAqIGRpZmZlcmVudCBxdWV1ZSB2aWEgYmxrX3N0ZWFsX2Jpb3MoKSwgc28gd2UgbmVlZCB0byB1c2UgdGhlIGJpb19zcGxpdFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtNTQzLVx0ICogcG9vbCBmcm9tIHRoZSBvcmlnaW5hbCBxdWV1ZSB0byBhbGxvY2F0ZSB0aGUgYnZlY3MgZnJvbS5cbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTU0NC1cdCAqL1xuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM6NTQ1Olx0YmlvID0gYmlvX3NwbGl0X3RvX2xpbWl0cyhiaW8pO1xuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtNTQ2LVx0aWYgKCFiaW8pXG4tLVxuZnMvYnRyZnMvYmlvLmM9ODA9c3RhdGljIHN0cnVjdCBidHJmc19iaW8gKmJ0cmZzX3NwbGl0X2JpbyhzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbyxcbi0tXG5mcy9idHJmcy9iaW8uYy04Ni1cbmZzL2J0cmZzL2Jpby5jOjg3Olx0YmlvID0gYmlvX3NwbGl0KFx1MDAyNm9yaWdfYmJpby1cdTAwM2ViaW8sIG1hcF9sZW5ndGggXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVCwgR0ZQX05PRlMsXG5mcy9idHJmcy9iaW8uYy04OC1cdFx0XHRcdTAwMjZidHJmc19jbG9uZV9iaW9zZXQpO1xuLS1cbmZzL2J0cmZzL2Jpby5jPTczND1zdGF0aWMgdTY0IGJ0cmZzX2FwcGVuZF9tYXBfbGVuZ3RoKHN0cnVjdCBidHJmc19iaW8gKmJiaW8sIHU2NCBtYXBfbGVuZ3RoKVxuLS1cbmZzL2J0cmZzL2Jpby5jLTc0MC1cdG1hcF9sZW5ndGggPSBtaW4obWFwX2xlbmd0aCwgZnNfaW5mby1cdTAwM2VtYXhfem9uZV9hcHBlbmRfc2l6ZSk7XG5mcy9idHJmcy9iaW8uYzo3NDE6XHRzZWN0b3Jfb2Zmc2V0ID0gYmlvX3NwbGl0X3J3X2F0KFx1MDAyNmJiaW8tXHUwMDNlYmlvLCBcdTAwMjZmc19pbmZvLVx1MDAzZWxpbWl0cyxcbmZzL2J0cmZzL2Jpby5jLTc0Mi1cdFx0XHRcdFx0XHUwMDI2bnJfc2VncywgbWFwX2xlbmd0aCk7XG4tLVxuZnMvYnRyZnMvYmlvLmMtNzQ0LVx0XHQvKlxuZnMvYnRyZnMvYmlvLmM6NzQ1Olx0XHQgKiBiaW9fc3BsaXRfcndfYXQoKSBjb3VsZCBzcGxpdCBhdCBhIHNpemUgc21hbGxlciB0aGFuIG91clxuZnMvYnRyZnMvYmlvLmMtNzQ2LVx0XHQgKiBzZWN0b3JzaXplIGFuZCB0aHVzIGNhdXNlIHVuYWxpZ25lZCBJL09zLiAgRml4IHRoYXQgYnlcbi0tXG5mcy9pb21hcC9pb2VuZC5jPTQ2Mj1zdHJ1Y3QgaW9tYXBfaW9lbmQgKmlvbWFwX3NwbGl0X2lvZW5kKHN0cnVjdCBpb21hcF9pb2VuZCAqaW9lbmQsXG4tLVxuZnMvaW9tYXAvaW9lbmQuYy00NzYtXG5mcy9pb21hcC9pb2VuZC5jOjQ3NzpcdFx0c2VjdG9yX29mZnNldCA9IGJpb19zcGxpdF9yd19hdChiaW8sIGxpbSwgXHUwMDI2bnJfc2VncywgbWF4X2xlbik7XG5mcy9pb21hcC9pb2VuZC5jLTQ3OC1cdFx0aWYgKHVubGlrZWx5KHNlY3Rvcl9vZmZzZXQgXHUwMDNjIDApKVxuLS1cbmZzL2lvbWFwL2lvZW5kLmMtNDkxLVxuZnMvaW9tYXAvaW9lbmQuYzo0OTI6XHRzcGxpdCA9IGJpb19zcGxpdChiaW8sIHNlY3Rvcl9vZmZzZXQsIEdGUF9OT0ZTLCBcdTAwMjZpb21hcF9pb2VuZF9iaW9zZXQpO1xuZnMvaW9tYXAvaW9lbmQuYy00OTMtXHRpZiAoSVNfRVJSKHNwbGl0KSlcbi0tXG5mcy94ZnMveGZzX2J1Zi5jPTEyNjU9eGZzX2J1Zl9zdWJtaXRfYmlvKFxuLS1cbmZzL3hmcy94ZnNfYnVmLmMtMTI5MS1cbmZzL3hmcy94ZnNfYnVmLmM6MTI5MjpcdFx0c3BsaXQgPSBiaW9fc3BsaXQoYmlvLCBicC1cdTAwM2ViX21hcHNbbWFwXS5ibV9sZW4sIEdGUF9OT0ZTLFxuZnMveGZzL3hmc19idWYuYy0xMjkzLVx0XHRcdFx0XHUwMDI2ZnNfYmlvX3NldCk7XG4tLVxuZnMveGZzL3hmc19sb2cuYz0xNTQyPXhsb2dfd3JpdGVfaWNsb2coXG4tLVxuZnMveGZzL3hmc19sb2cuYy0xNjE5LVxuZnMveGZzL3hmc19sb2cuYzoxNjIwOlx0XHRzcGxpdCA9IGJpb19zcGxpdChcdTAwMjZpY2xvZy1cdTAwM2VpY19iaW8sIGxvZy1cdTAwM2VsX2xvZ0JCc2l6ZSAtIGJubyxcbmZzL3hmcy94ZnNfbG9nLmMtMTYyMS1cdFx0XHRcdCAgR0ZQX05PSU8sIFx1MDAyNmZzX2Jpb19zZXQpO1xuLS1cbmZzL3hmcy94ZnNfem9uZV9nYy5jPTc4OD14ZnNfem9uZV9nY19zcGxpdF93cml0ZShcbi0tXG5mcy94ZnMveGZzX3pvbmVfZ2MuYy04MDItXG5mcy94ZnMveGZzX3pvbmVfZ2MuYzo4MDM6XHRzcGxpdF9zZWN0b3JzID0gYmlvX3NwbGl0X3J3X2F0KFx1MDAyNmNodW5rLVx1MDAzZWJpbywgbGltLCBcdTAwMjZuc2VncyxcbmZzL3hmcy94ZnNfem9uZV9nYy5jLTgwNC1cdFx0XHRsaW0tXHUwMDNlbWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMgXHUwMDNjXHUwMDNjIFNFQ1RPUl9TSElGVCk7XG4tLVxuZnMveGZzL3hmc196b25lX2djLmMtODEyLVxuZnMveGZzL3hmc196b25lX2djLmM6ODEzOlx0c3BsaXQgPSBiaW9fc3BsaXQoXHUwMDI2Y2h1bmstXHUwMDNlYmlvLCBzcGxpdF9zZWN0b3JzLCBHRlBfTk9GUywgXHUwMDI2ZGF0YS1cdTAwM2ViaW9fc2V0KTtcbmZzL3hmcy94ZnNfem9uZV9nYy5jLTgxNC1cdHNwbGl0X2NodW5rID0gY29udGFpbmVyX29mKHNwbGl0LCBzdHJ1Y3QgeGZzX2djX2JpbywgYmlvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2Jpby5oPTMxNj12b2lkIGJpb190cmltKHN0cnVjdCBiaW8gKmJpbywgc2VjdG9yX3Qgb2Zmc2V0LCBzZWN0b3JfdCBzaXplKTtcbmluY2x1ZGUvbGludXgvYmlvLmg6MzE3OmV4dGVybiBzdHJ1Y3QgYmlvICpiaW9fc3BsaXQoc3RydWN0IGJpbyAqYmlvLCBpbnQgc2VjdG9ycyxcbmluY2x1ZGUvbGludXgvYmlvLmgtMzE4LVx0XHRcdCAgICAgZ2ZwX3QgZ2ZwLCBzdHJ1Y3QgYmlvX3NldCAqYnMpO1xuaW5jbHVkZS9saW51eC9iaW8uaDozMTk6aW50IGJpb19zcGxpdF9pb19hdChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSxcbmluY2x1ZGUvbGludXgvYmlvLmgtMzIwLVx0XHR1bnNpZ25lZCAqc2VncywgdW5zaWduZWQgbWF4X2J5dGVzLCB1bnNpZ25lZCBsZW5fYWxpZ24pO1xuLS1cbmluY2x1ZGUvbGludXgvYmlvLmg9MzM0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGJpbyAqYmlvX25leHRfc3BsaXQoc3RydWN0IGJpbyAqYmlvLCBpbnQgc2VjdG9ycyxcbi0tXG5pbmNsdWRlL2xpbnV4L2Jpby5oLTMzOS1cbmluY2x1ZGUvbGludXgvYmlvLmg6MzQwOlx0cmV0dXJuIGJpb19zcGxpdChiaW8sIHNlY3RvcnMsIGdmcCwgYnMpO1xuaW5jbHVkZS9saW51eC9iaW8uaC0zNDEtfVxuLS1cbmluY2x1ZGUvbGludXgvYmxrX3R5cGVzLmg9MjEwPXN0cnVjdCBiaW8ge1xuLS1cbmluY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgtMjI0LVx0ICogYmV0d2VlbiBhbGwgYmlfaW9fdmVjcy4gVGhpcyBmaWVsZCBpcyBpbml0aWFsaXplZCBvbmx5IGFmdGVyIHRoZSBiaW9cbmluY2x1ZGUvbGludXgvYmxrX3R5cGVzLmg6MjI1Olx0ICogaXMgc3BsaXQgdG8gdGhlIGhhcmR3YXJlIGxpbWl0cyAoc2VlIGJpb19zcGxpdF9pb19hdCgpKS4gVGhlIHZhbHVlXG5pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oLTIyNi1cdCAqIG1heSBiZSB1c2VkIHRvIGNvbnNpZGVyIERNQSBvcHRpbWl6YXRpb24gd2hlbiBwZXJmb3JtaW5nIHRoYXRcbi0tXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTE0Nj1zdHJ1Y3QgZ2VuZGlzayB7XG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xNjYtXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjE2NzpcdHN0cnVjdCBiaW9fc2V0IGJpb19zcGxpdDtcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDM2CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMzIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIEJsb2NrIExheWVyOiBBIEZvY3VzZWQgQXBwcm9hY2gqKgoKT2theSwgc28gYGJpb19zcGxpdGAgaXMgYSBjb21tb25seSB1c2VkIGZ1bmN0aW9uIGluIHRoZSBibG9jayBsYXllciwgYW5kIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGFuIGlzc3VlIHdpdGggYGJpX2J2ZWNfZ2FwX2JpdGAgd2l0aGluIGBfX2Jpb19jbG9uZWAgYW5kLCBpbXBvcnRhbnRseSwgYGJpb19zcGxpdGAgaXRzZWxmLiBUaGlzIGBiaV9idmVjX2dhcF9iaXRgIHNlZW1zIHRvIGJlIGludm9sdmVkIGluIHRyYWNraW5nIGdhcCBiaXRzIGZvciBiaW8gdmVjdG9ycywgYW5kIGl0JiMzOTtzIHVzZWQgYWNyb3NzIHNldmVyYWwga2V5IGZ1bmN0aW9uczogYGJsa19ycV9hcHBlbmRfYmlvYCwgYGJpb19zcGxpdF9pb19hdGAsIGBiaW9fc2VnX2dhcGAsIGFuZCBgYmxrX21xX2Jpb190b19yZXF1ZXN0YC4gR2l2ZW4gaXRzIHdpZGVzcHJlYWQgdXNlIGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBmaXgsIHRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuCgpNeSBpbml0aWFsIGZvY3VzIHNob3VsZCBiZSBvbiBmdXp6aW5nIHRoZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBiaW8gc3BsaXR0aW5nIGFuZCBjbG9uaW5nOiBgYmlvX2FsbG9jX2Nsb25lYCwgYGJpb19pbml0X2Nsb25lYCwgYGJpb19zcGxpdGAsIGBiaW9fc3BsaXRfdG9fbGltaXRzYCwgYW5kIGBibGtfbXFfc3VibWl0X2Jpb2AuIFdhaXQsIGBfX2Jpb19jbG9uZWAgaXMgZGVjbGFyZWQgYHN0YXRpY2AsIHdoaWNoIGlzIGhlbHBmdWwsIGJ1dCBgYmlvX3NwbGl0YCBpcyBleHBvcnRlZCwgc28gSSAqbmVlZCogdG8gaW5jbHVkZSB0aGF0IG9uZS4gTGV0JiMzOTtzIGluY29ycG9yYXRlIHRob3NlIGludG8gdGhlIGluaXRpYWwgZnV6emluZyBwbGFuLgoKSSBzaG91bGQgYWxzbyBjaGVjayBpZiBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZC4gQnV0IHRoZSBibG9jayBsYXllciBpcyBhbHdheXMgZW5hYmxlZCwgc28gdGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4gTm8gbmVlZCBmb3Igc3BlY2lhbCBjb25maWcgb3B0aW9ucyBoZXJlLgoKQWxyaWdodCwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgY2FsbCBzaXRlcyBvZiBgYmlvX3NwbGl0YCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgY3JpdGljYWwuIEhtbSwgaXQmIzM5O3MgY2FsbGVkIGJ5OiBgYmlvX3NwbGl0X3RvX2xpbWl0c2AsIGBibGtfbXFfc3VibWl0X2Jpb2AsIGBiaW9fc3BsaXRfcndgLCBgYmlvX3NwbGl0X3pvbmVfYXBwZW5kYCwgYGJpb19zcGxpdF9kaXNjYXJkYCwgYW5kIGBiaW9fc3BsaXRfd3JpdGVfemVyb2VzYC4gT2theSwgSSB0aGluayB0aGlzIHNvbGlkaWZpZXMgbXkgbGlzdC4gSeKAmWxsIGFkZCBgYmlvX3NwbGl0X3RvX2xpbWl0c2AgdG8gdGhlIGxpc3QuIEkgdGhpbmsgSSYjMzk7bSBnb29kIG9uIHRoYXQgZnJvbnQuCgpKdXN0IHRvIGJlIHNhZmUsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZS1leGFtaW5lIGBfX2Jpb19jbG9uZWAsIGp1c3QgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3Qgb3Zlcmxvb2tlZCBhbnkgY3J1Y2lhbCBjb25uZWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTc6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19iaW9fY2xvbmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmlvLmM9ODU0PUVYUE9SVF9TWU1CT0woYmlvX3B1dCk7XG5ibG9jay9iaW8uYy04NTUtXG5ibG9jay9iaW8uYzo4NTY6c3RhdGljIGludCBfX2Jpb19jbG9uZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW8gKmJpb19zcmMsIGdmcF90IGdmcClcbmJsb2NrL2Jpby5jLTg1Ny17XG4tLVxuYmxvY2svYmlvLmM9ODk0PXN0cnVjdCBiaW8gKmJpb19hbGxvY19jbG9uZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmlvICpiaW9fc3JjLFxuLS1cbmJsb2NrL2Jpby5jLTkwMi1cbmJsb2NrL2Jpby5jOjkwMzpcdGlmIChfX2Jpb19jbG9uZShiaW8sIGJpb19zcmMsIGdmcCkgXHUwMDNjIDApIHtcbmJsb2NrL2Jpby5jLTkwNC1cdFx0YmlvX3B1dChiaW8pO1xuLS1cbmJsb2NrL2Jpby5jPTkyMT1pbnQgYmlvX2luaXRfY2xvbmUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGJpbyAqYmlvLFxuLS1cbmJsb2NrL2Jpby5jLTkyNi1cdGJpb19pbml0KGJpbywgYmRldiwgTlVMTCwgMCwgYmlvX3NyYy1cdTAwM2ViaV9vcGYpO1xuYmxvY2svYmlvLmM6OTI3Olx0cmV0ID0gX19iaW9fY2xvbmUoYmlvLCBiaW9fc3JjLCBnZnApO1xuYmxvY2svYmlvLmMtOTI4LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMzYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQmxvY2sgTGF5ZXIgQ2xvbmluZyBhbmQgU3BsaXR0aW5nIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IHNlZW1zIGBfX2Jpb19jbG9uZWAgaXMgb25seSBjYWxsZWQgYnkgYGJpb19hbGxvY19jbG9uZWAgYW5kIGBiaW9faW5pdF9jbG9uZWAuIFRoYXQmIzM5O3MgdXNlZnVsIGluZm9ybWF0aW9uLiBTaW5jZSB0aGVzZSBmdW5jdGlvbnMsIGFsb25nIHdpdGggYGJpb19zcGxpdGAsIGFyZSBmdW5kYW1lbnRhbCB0byB0aGUgYmxvY2sgbGF5ZXIsIGFuZCBsaWtlbHkgdG8gYmUgcmVhY2hhYmxlIGR1cmluZyBub3JtYWwgb3BlcmF0aW9uLCBJIHNob3VsZCBkZWZpbml0ZWx5IGFkZCB0aGVtIHRvIG15IGBGb2N1c1N5bWJvbHNgIGxpc3QuIFRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBmdXp6aW5nIHRoZSBibG9jayBsYXllci4gU2luY2UgdGhlIGJsb2NrIGxheWVyIGlzIGVzc2VudGlhbGx5IGEgc3RhbmRhcmQgY29tcG9uZW50LCB0aGVyZSBhcmUgbm8gc3BlY2lhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSBuZWVkIHRvIHdvcnJ5IGFib3V0LiBJdCYjMzk7cyBhbHdheXMgZW5hYmxlZC4gTm93LCBsZXQgbWUgcXVpY2tseSBjaGVjayBpZiB0aGlzIGBiaV9idmVjX2dhcF9iaXRgIHZhcmlhYmxlIGlzIHVzZWQgaW4gYW55IHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBvciBzcGVjaWZpYyBjb2RlIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiaV9idmVjX2dhcF9iaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmlvLmM9MjE3PXZvaWQgYmlvX2luaXQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmlvX3ZlYyAqdGFibGUsXG4tLVxuYmxvY2svYmlvLmMtMjI3LVx0YmlvLVx1MDAzZWJpX3N0YXR1cyA9IDA7XG5ibG9jay9iaW8uYzoyMjg6XHRiaW8tXHUwMDNlYmlfYnZlY19nYXBfYml0ID0gMDtcbmJsb2NrL2Jpby5jLTIyOS1cdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IDA7XG4tLVxuYmxvY2svYmlvLmM9ODU2PXN0YXRpYyBpbnQgX19iaW9fY2xvbmUoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmlvICpiaW9fc3JjLCBnZnBfdCBnZnApXG4tLVxuYmxvY2svYmlvLmMtODYxLVx0YmlvLVx1MDAzZWJpX3dyaXRlX3N0cmVhbSA9IGJpb19zcmMtXHUwMDNlYmlfd3JpdGVfc3RyZWFtO1xuYmxvY2svYmlvLmM6ODYyOlx0YmlvLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCA9IGJpb19zcmMtXHUwMDNlYmlfYnZlY19nYXBfYml0O1xuYmxvY2svYmlvLmMtODYzLVx0YmlvLVx1MDAzZWJpX2l0ZXIgPSBiaW9fc3JjLVx1MDAzZWJpX2l0ZXI7XG4tLVxuYmxvY2svYmlvLmM9MTk0Nz1zdHJ1Y3QgYmlvICpiaW9fc3BsaXQoc3RydWN0IGJpbyAqYmlvLCBpbnQgc2VjdG9ycyxcbi0tXG5ibG9jay9iaW8uYy0xOTc0LVx0YmlvX2FkdmFuY2UoYmlvLCBzcGxpdC1cdTAwM2ViaV9pdGVyLmJpX3NpemUpO1xuYmxvY2svYmlvLmM6MTk3NTpcdGJpby1cdTAwM2ViaV9idmVjX2dhcF9iaXQgPSAwO1xuYmxvY2svYmlvLmMtMTk3Ni1cbi0tXG5ibG9jay9ibGstbWFwLmM9NDI2PWludCBibGtfcnFfYXBwZW5kX2JpbyhzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBiaW8gKmJpbylcbi0tXG5ibG9jay9ibGstbWFwLmMtNDU2LVx0cnEtXHUwMDNlX19kYXRhX2xlbiA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemU7XG5ibG9jay9ibGstbWFwLmM6NDU3Olx0cnEtXHUwMDNlcGh5c19nYXBfYml0ID0gYmlvLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdDtcbmJsb2NrL2Jsay1tYXAuYy00NTgtXHRyZXR1cm4gMDtcbi0tXG5ibG9jay9ibGstbWVyZ2UuYz0zMzU9aW50IGJpb19zcGxpdF9pb19hdChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSxcbi0tXG5ibG9jay9ibGstbWVyZ2UuYy0zNzktXHQqc2VncyA9IG5zZWdzO1xuYmxvY2svYmxrLW1lcmdlLmM6MzgwOlx0YmlvLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCA9IGZmcyhnYXBzKTtcbmJsb2NrL2Jsay1tZXJnZS5jLTM4MS1cdHJldHVybiAwO1xuLS1cbmJsb2NrL2Jsay1tZXJnZS5jLTQxNS1cdGJpb19jbGVhcl9wb2xsZWQoYmlvKTtcbmJsb2NrL2Jsay1tZXJnZS5jOjQxNjpcdGJpby1cdTAwM2ViaV9idmVjX2dhcF9iaXQgPSBmZnMoZ2Fwcyk7XG5ibG9jay9ibGstbWVyZ2UuYy00MTctXHRyZXR1cm4gYnl0ZXMgXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVDtcbi0tXG5ibG9jay9ibGstbWVyZ2UuYz03NTI9dTggYmlvX3NlZ19nYXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKnByZXYsIHN0cnVjdCBiaW8gKm5leHQsXG4tLVxuYmxvY2svYmxrLW1lcmdlLmMtNzU5LVxuYmxvY2svYmxrLW1lcmdlLmM6NzYwOlx0Z2Fwc19iaXQgPSBtaW5fbm90X3plcm8oZ2Fwc19iaXQsIHByZXYtXHUwMDNlYmlfYnZlY19nYXBfYml0KTtcbmJsb2NrL2Jsay1tZXJnZS5jOjc2MTpcdGdhcHNfYml0ID0gbWluX25vdF96ZXJvKGdhcHNfYml0LCBuZXh0LVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCk7XG5ibG9jay9ibGstbWVyZ2UuYy03NjItXG4tLVxuYmxvY2svYmxrLW1xLmM9MjY1ND1zdGF0aWMgdm9pZCBibGtfbXFfYmlvX3RvX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgYmlvICpiaW8sXG4tLVxuYmxvY2svYmxrLW1xLmMtMjY2NC1cdHJxLVx1MDAzZV9fZGF0YV9sZW4gPSBiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplO1xuYmxvY2svYmxrLW1xLmM6MjY2NTpcdHJxLVx1MDAzZXBoeXNfZ2FwX2JpdCA9IGJpby1cdTAwM2ViaV9idmVjX2dhcF9iaXQ7XG5ibG9jay9ibGstbXEuYy0yNjY2LVxuLS1cbmluY2x1ZGUvbGludXgvYmxrX3R5cGVzLmg9MjEwPXN0cnVjdCBiaW8ge1xuLS1cbmluY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgtMjMwLVx0ICovXG5pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oOjIzMTpcdHU4XHRcdFx0YmlfYnZlY19nYXBfYml0O1xuaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaC0yMzItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE3OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDQ1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIEZvY3VzIFN5bWJvbHMgYW5kIENhbGxlciBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmaWVsZCBhbmQgd2hlcmUgaXQmIzM5O3MgdXNlZC4gSXQmIzM5O3Mgb2J2aW91c2x5IHNpZ25pZmljYW50LCBwb3BwaW5nIHVwIGluIGBibGtfcnFfYXBwZW5kX2Jpb2AsIGBiaW9fc3BsaXRfaW9fYXRgLCBgYmlvX3NlZ19nYXBgLCBhbmQgYGJsa19tcV9iaW9fdG9fcmVxdWVzdGAuICBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIHRoZXNlIGNvbnN1bWVycyBhcmUgYWxzbyBpbmNsdWRlZCBpbiB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdCwgYXMgdGhleSBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIHRoaXMgdGhpbmcgSSYjMzk7bSBleGFtaW5pbmcuIFRoZXkgYXJlIG9idmlvdXNseSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgY29udGV4dC4KCkhtbSwgd2FpdCBhIHNlY29uZC4uLiBgYmxrX21xX2Jpb190b19yZXF1ZXN0YC4uLiBpc24mIzM5O3QgdGhhdCBhIHN0YXRpYyBmdW5jdGlvbj8gIFRoYXQgY2hhbmdlcyB0aGluZ3MuIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHN0YXRpYyBmdW5jdGlvbnMsIGFzIGNhbGxlciBjb250ZXh0IGlzIG9mdGVuIGltcG9ydGFudCB0byBpdHMgdXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBmaWVsZCBhbmQgaXRzIHVzZSBoZXJlLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBxdWlja2x5IGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYGJsa19tcV9iaW9fdG9fcmVxdWVzdGAgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIExldCYjMzk7cyBzZWUgd2hvJiMzOTtzIGNhbGxpbmcgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE3OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa19tcV9iaW9fdG9fcmVxdWVzdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstbXEuYz0yNTkyPXN0YXRpYyB2b2lkIGJsa19tcV9pbnNlcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIGJsa19pbnNlcnRfdCBmbGFncylcbi0tXG5ibG9jay9ibGstbXEuYy0yNjUzLVxuYmxvY2svYmxrLW1xLmM6MjY1NDpzdGF0aWMgdm9pZCBibGtfbXFfYmlvX3RvX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgYmlvICpiaW8sXG5ibG9jay9ibGstbXEuYy0yNjU1LVx0XHR1bnNpZ25lZCBpbnQgbnJfc2Vncylcbi0tXG5ibG9jay9ibGstbXEuYz0zMDkzPXZvaWQgYmxrX21xX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxuLS1cbmJsb2NrL2Jsay1tcS5jLTMxODEtXG5ibG9jay9ibGstbXEuYzozMTgyOlx0YmxrX21xX2Jpb190b19yZXF1ZXN0KHJxLCBiaW8sIG5yX3NlZ3MpO1xuYmxvY2svYmxrLW1xLmMtMzE4My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwMzgKCQkJCQkJCW91dHB1dDogMTc2CgkJCQkJCQl0aG91Z2h0czogMTg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRhcmdldCBGdW5jdGlvbnMqKgoKT2theSwgc28gYGJsa19tcV9zdWJtaXRfYmlvYCBpcyB0aGUgY3VscHJpdCwgdGhlIG9uZSBraWNraW5nIHRoaW5ncyBvZmYuIE15IGF0dGVudGlvbiwgdGhlcmVmb3JlLCBuZWVkcyB0byB6ZXJvIGluIG9uIHRoZXNlIGtleSBmdW5jdGlvbnM6IGBiaW9fYWxsb2NfY2xvbmVgLCBgYmlvX2luaXRfY2xvbmVgLCBgYmlvX3NwbGl0YCwgYGJsa19ycV9hcHBlbmRfYmlvYCwgYGJpb19zcGxpdF9pb19hdGAsIGBiaW9fc2VnX2dhcGAsIGFuZCwgb2YgY291cnNlLCB0aGUgaW5pdGlhbCBlbnRyeSBwb2ludCBgYmxrX21xX3N1Ym1pdF9iaW9gLgoKVGhlIGNvcmUgaXNzdWUgaGVyZSByZXZvbHZlcyBhcm91bmQgYGJpb19zcGxpdGAsIGFuZCBtb3JlIHNwZWNpZmljYWxseSB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGNvcHlpbmcgb2YgYGJpX2J2ZWNfZ2FwX2JpdGAuIFRoaXMgaXMgYSBjcml0aWNhbCBmaWVsZCwgb2J2aW91c2x5IHRyYWNraW5nIGdhcCBiaXRzIHdpdGhpbiBiaW8gdmVjdG9ycy4gQW5kIGl04oCZcyB1c2VkIGJ5IHRoZSBsaWtlcyBvZiBgYmxrX3JxX2FwcGVuZF9iaW9gIGFuZCBgYmlvX3NwbGl0X2lvX2F0YCB3aGljaCBhcmUgY29yZSBibG9jayBsYXllciBmdW5jdGlvbnMuIElmIHRoZXNlIGdhcCBiaXRzIGFyZW4mIzM5O3QgaGFuZGxlZCBjb3JyZWN0bHksIHRoZSB3aG9sZSB0aGluZyBmYWxscyBhcGFydC4KCkdpdmVuIHRoYXQgdGhpcyBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIG1pc3NpbmcgaW5pdGlhbGl6YXRpb24gYW5kIGNvcHlpbmcsIGZ1enppbmcgdGhlc2UgZnVuY3Rpb25zIGlzIGFic29sdXRlbHkgd2FycmFudGVkLiBJJiMzOTttIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gdHJ1ZS4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCB3ZSYjMzk7dmUgcGx1Z2dlZCB0aGlzIGdhcCBhbmQgdGhhdCB0aGUgYmxvY2sgbGF5ZXIgY29udGludWVzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseSB1bmRlciB2YXJpb3VzIGlucHV0IGNvbmRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE3OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiaW9fYWxsb2NfY2xvbmUmIzM0OywKICAgICYjMzQ7YmlvX2luaXRfY2xvbmUmIzM0OywKICAgICYjMzQ7YmlvX3NwbGl0JiMzNDssCiAgICAmIzM0O2Jsa19ycV9hcHBlbmRfYmlvJiMzNDssCiAgICAmIzM0O2Jpb19zcGxpdF9pb19hdCYjMzQ7LAogICAgJiMzNDtiaW9fc2VnX2dhcCYjMzQ7LAogICAgJiMzNDtibGtfbXFfc3VibWl0X2JpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBtaXNzaW5nIGluaXRpYWxpemF0aW9uIGFuZCBjb3B5aW5nIG9mIGBiaV9idmVjX2dhcF9iaXRgIGluIGBiaW9fc3BsaXRgIGFuZCBgX19iaW9fY2xvbmVgLiBUaGlzIGZpZWxkIGlzIHVzZWQgdG8gdHJhY2sgZ2FwIGJpdHMgZm9yIGJpbyB2ZWN0b3JzIGFuZCBpcyBjb25zdW1lZCBieSBjb3JlIGJsb2NrIGxheWVyIGZ1bmN0aW9ucyBsaWtlIGBibGtfcnFfYXBwZW5kX2Jpb2AgYW5kIGBiaW9fc3BsaXRfaW9fYXRgLiBGdXp6aW5nIHRoZXNlIGZ1bmN0aW9ucyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIGNvcnJlY3QgaGFuZGxpbmcgb2YgYmlvIHZlY3RvciBnYXBzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jpb19hbGxvY19jbG9uZSYjMzQ7LAogICAgJiMzNDtiaW9faW5pdF9jbG9uZSYjMzQ7LAogICAgJiMzNDtiaW9fc3BsaXQmIzM0OywKICAgICYjMzQ7YmxrX3JxX2FwcGVuZF9iaW8mIzM0OywKICAgICYjMzQ7YmlvX3NwbGl0X2lvX2F0JiMzNDssCiAgICAmIzM0O2Jpb19zZWdfZ2FwJiMzNDssCiAgICAmIzM0O2Jsa19tcV9zdWJtaXRfYmlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIG1pc3NpbmcgaW5pdGlhbGl6YXRpb24gYW5kIGNvcHlpbmcgb2YgYGJpX2J2ZWNfZ2FwX2JpdGAgaW4gYGJpb19zcGxpdGAgYW5kIGBfX2Jpb19jbG9uZWAuIFRoaXMgZmllbGQgaXMgdXNlZCB0byB0cmFjayBnYXAgYml0cyBmb3IgYmlvIHZlY3RvcnMgYW5kIGlzIGNvbnN1bWVkIGJ5IGNvcmUgYmxvY2sgbGF5ZXIgZnVuY3Rpb25zIGxpa2UgYGJsa19ycV9hcHBlbmRfYmlvYCBhbmQgYGJpb19zcGxpdF9pb19hdGAuIEZ1enppbmcgdGhlc2UgZnVuY3Rpb25zIGlzIGltcG9ydGFudCB0byBlbnN1cmUgY29ycmVjdCBoYW5kbGluZyBvZiBiaW8gdmVjdG9yIGdhcHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE3OjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTc6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fYmlvX2Nsb25lYCBhbmQgYGJpb19zcGxpdGAgdG8gcHJvcGVybHkgcHJvcGFnYXRlIGFuZCByZXNldCB0aGUgYGJpX2J2ZWNfZ2FwX2JpdGAgZmllbGQgb2YgYHN0cnVjdCBiaW9gLiBUaGlzIGZpZWxkIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGxvd2VzdCBzZXQgYml0IGluIGFueSBhZGRyZXNzIG9mZnNldCBiZXR3ZWVuIGFsbCBgYmlfaW9fdmVjc2AgZm9yIERNQSBvcHRpbWl6YXRpb24uIFdoZW4gYSBiaW8gaXMgYWxsb2NhdGVkIG9yIHJlc2V0LCBgYmlfYnZlY19nYXBfYml0YCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAgKHZpYSBgYmlvX2luaXRgIG9yIGBtZW1zZXRgIGluIGBiaW9fcmVzZXRgKS4gVGhlcmVmb3JlLCB0aGUgaXNzdWUgYmVpbmcgZml4ZWQgaXMgYSBsb2dpY2FsIGJ1ZyB3aGVyZSB0aGUgZ2FwIGJpdCBpcyBlaXRoZXIgbG9zdCBkdXJpbmcgY2xvbmluZyBvciBpbmNvcnJlY3RseSByZXRhaW5lZCBkdXJpbmcgc3BsaXR0aW5nLCByYXRoZXIgdGhhbiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLiBCZWNhdXNlIHRoZSBmaWVsZCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuIEFueSByZXN1bHRpbmcgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgZHVlIHRvIGluY29ycmVjdCBETUEgbWFwcGluZ3Mgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NjU5NzAwMDNhNjc5ZDgwZmZkYmZjNTUyYmIxZDFjNmZmNDkzNjY3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMTc6MzU6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9ibG9jay9iaW8uYyBiL2Jsb2NrL2Jpby5jCmluZGV4IDg5OGIyZjVlZjhjODEuLjMzYWE0MzljMWJhZTIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jpby5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jpby5jCkBAIC04NTksNiAmIzQzOzg1OSw3IEBAIHN0YXRpYyBpbnQgX19iaW9fY2xvbmUoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmlvICpiaW9fc3JjLCBnZnBfdCBnZnApCiAJYmlvLSZndDtiaV9pb3ByaW8gPSBiaW9fc3JjLSZndDtiaV9pb3ByaW87CiAJYmlvLSZndDtiaV93cml0ZV9oaW50ID0gYmlvX3NyYy0mZ3Q7Ymlfd3JpdGVfaGludDsKIAliaW8tJmd0O2JpX3dyaXRlX3N0cmVhbSA9IGJpb19zcmMtJmd0O2JpX3dyaXRlX3N0cmVhbTsKJiM0MzsJYmlvLSZndDtiaV9idmVjX2dhcF9iaXQgPSBiaW9fc3JjLSZndDtiaV9idmVjX2dhcF9iaXQ7CiAJYmlvLSZndDtiaV9pdGVyID0gYmlvX3NyYy0mZ3Q7YmlfaXRlcjsKIAliaW8tJmd0O2JpX2lvX3ZlYyA9IGJpb19zcmMtJmd0O2JpX2lvX3ZlYzsKIApAQCAtMTk3MSw2ICYjNDM7MTk3Miw3IEBAIHN0cnVjdCBiaW8gKmJpb19zcGxpdChzdHJ1Y3QgYmlvICpiaW8sIGludCBzZWN0b3JzLAogCQliaW9faW50ZWdyaXR5X3RyaW0oc3BsaXQpOwogCiAJYmlvX2FkdmFuY2UoYmlvLCBzcGxpdC0mZ3Q7YmlfaXRlci5iaV9zaXplKTsKJiM0MzsJYmlvLSZndDtiaV9idmVjX2dhcF9iaXQgPSAwOwogCiAJaWYgKGJpb19mbGFnZ2VkKGJpbywgQklPX1RSQUNFX0NPTVBMRVRJT04pKQogCQliaW9fc2V0X2ZsYWcoc3BsaXQsIEJJT19UUkFDRV9DT01QTEVUSU9OKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE3OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCaW8gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYmxvY2svYmlvLmNgLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGBiaV9idmVjX2dhcF9iaXRgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHF1aWNrbHkgYXNzZXNzIHdoZXRoZXIgdGhpcyB3YXMgYSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIGdpdmVuIHRoZSBjb250ZXh0LiBUaGUgY29kZSBzbmlwIHNob3dzIHRoYXQgYF9fYmlvX2Nsb25lYCBjb3BpZXMgYGJpb19zcmMtJmd0O2JpX2J2ZWNfZ2FwX2JpdGAgdG8gdGhlIG5ldyBgYmlvYCwgd2hpbGUgYGJpb19zcGxpdGAgc2V0cyBpdCB0byB6ZXJvLgoKSW5pdGlhbGx5LCBJIGRpc21pc3NlZCB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcG9zc2liaWxpdHkgYmVjYXVzZSBpdCYjMzk7cyBqdXN0IGEgZmllbGQgY29weSBmcm9tIG9uZSBgc3RydWN0IGJpb2AgdG8gYW5vdGhlciBhbmQgdGhlbiBhIHplcm9pbmcgYWN0aW9uLiBIb3dldmVyLCB0aGUgbW9yZSBJIHRoaW5rIGFib3V0IGl0LCBpZiBgX19iaW9fY2xvbmVgICpkaWRuJiMzOTt0KiBkbyB0aGlzIGNvcHksIHRoZW4gKnRoYXQqIHdvdWxkIGJlIGEgYmlnZ2VyIGlzc3VlLiBgYmlfYnZlY19nYXBfYml0YCBtaWdodCBoYXZlIGVuZGVkIHVwIHVuaW5pdGlhbGl6ZWQgb3IgY29udGFpbmluZyBzdGFsZSBkYXRhLiBLTVNBTiAqc2hvdWxkKiBjYXRjaCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdGhvdWdoLCByaWdodD8gQnV0IHdhaXQsIGBfX2Jpb19jbG9uZWAgaW5pdGlhbGl6ZXMgYGJpb2AgZnJvbSBgYmlvX3NyY2AuLi4gaXQmIzM5O3MgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgY29weS4KCk5vdyBJJiMzOTttIGxvb2tpbmcgY2xvc2VyIGF0IGBfX2Jpb19jbG9uZWAgYW5kIGBiaW9fc3BsaXRgIHNwZWNpZmljYWxseS4gVGhlIGBiaW9fc3BsaXRgIHNldHRpbmcgdG8gemVybyBpcyBjcnVjaWFsLiBUaGlzICpsb29rcyogbGlrZSBhIGJ1ZyBmaXgg4oCTIHBlcmhhcHMgdGhlIG9yaWdpbmFsIGNsb25pbmcgb3Igc3BsaXR0aW5nIGxvZ2ljIHdhcyBmYWlsaW5nIHRvIHByb3Blcmx5IGNvcHkgb3IgcmVzZXQgdGhpcyBmaWVsZC4gVGhpcyBjb3VsZCByZXN1bHQgaW4gaW5jb3JyZWN0IGJlaGF2aW9yIGRvd24gaW4gdGhlIGJsb2NrIGxheWVyLCBwZXJoYXBzIGxlYWRpbmcgdG8gZ2FwcyBpbiBhIGBidmVjYC4KCk9rYXksIGJhY2sgdG8gdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZ2xlLiBJZiBgYmlvYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGJpb19hbGxvY19iaW9zZXRgLCBpdCBtaWdodCBiZSB6ZXJvZWQgb3V0IG9yIHBhcnRpYWxseSB6ZXJvZWQsIHdoaWNoIGJyaW5ncyBpdCBpbnRvIGFuIGluaXRpYWxpc2VkIHN0YXRlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBiaW9fYWxsb2NfYmlvc2V0YCBhbmQgdGhlIGBzdHJ1Y3QgYmlvYCBpdHNlbGYgdG8gYmUgY29tcGxldGVseSBzdXJlLiBUaGlzIGlzIGFib3V0IGFzIGNsZWFuIG9mIGEgcmVhZCBvZiBiaW8gZmllbGQsIGluIGNsb25lLCB0aGVuIGluIHNwbGl0LCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgc3BsaXQgb3BlcmF0aW9uIG5lZWRlZCBzb21lIGV4dHJhIGF0dGVudGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmlvX2FsbG9jX2Jpb3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL2Jpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jpby5jPTI2MD1FWFBPUlRfU1lNQk9MKGJpb19pbml0KTtcbi0tXG5ibG9jay9iaW8uYy0yNjktICogICBBZnRlciBjYWxsaW5nIGJpb19yZXNldCgpLCBAYmlvIHdpbGwgYmUgaW4gdGhlIHNhbWUgc3RhdGUgYXMgYSBmcmVzaGx5XG5ibG9jay9iaW8uYzoyNzA6ICogICBhbGxvY2F0ZWQgYmlvIHJldHVybmVkIGJpbyBiaW9fYWxsb2NfYmlvc2V0KCkgLSB0aGUgb25seSBmaWVsZHMgdGhhdCBhcmVcbmJsb2NrL2Jpby5jOjI3MTogKiAgIHByZXNlcnZlZCBhcmUgdGhlIG9uZXMgdGhhdCBhcmUgaW5pdGlhbGl6ZWQgYnkgYmlvX2FsbG9jX2Jpb3NldCgpLiBTZWVcbmJsb2NrL2Jpby5jLTI3Mi0gKiAgIGNvbW1lbnQgaW4gc3RydWN0IGJpby5cbi0tXG5ibG9jay9iaW8uYz00NzY9c3RhdGljIHN0cnVjdCBiaW8gKmJpb19hbGxvY19wZXJjcHVfY2FjaGUoc3RydWN0IGJpb19zZXQgKmJzKVxuLS1cbmJsb2NrL2Jpby5jLTUwMS0vKipcbmJsb2NrL2Jpby5jOjUwMjogKiBiaW9fYWxsb2NfYmlvc2V0IC0gYWxsb2NhdGUgYSBiaW8gZm9yIEkvT1xuYmxvY2svYmlvLmMtNTAzLSAqIEBiZGV2Olx0YmxvY2sgZGV2aWNlIHRvIGFsbG9jYXRlIHRoZSBiaW8gZm9yIChjYW4gYmUgJU5VTEwpXG4tLVxuYmxvY2svYmlvLmMtNTM0LSAqL1xuYmxvY2svYmlvLmM6NTM1OnN0cnVjdCBiaW8gKmJpb19hbGxvY19iaW9zZXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgc2hvcnQgbnJfdmVjcyxcbmJsb2NrL2Jpby5jLTUzNi1cdFx0XHQgICAgIGJsa19vcGZfdCBvcGYsIGdmcF90IGdmcCwgc3RydWN0IGJpb19zZXQgKmJzKVxuLS1cbmJsb2NrL2Jpby5jLTYxNi19XG5ibG9jay9iaW8uYzo2MTc6RVhQT1JUX1NZTUJPTChiaW9fYWxsb2NfYmlvc2V0KTtcbmJsb2NrL2Jpby5jLTYxOC1cbi0tXG5ibG9jay9iaW8uYy02MjgtICpcbmJsb2NrL2Jpby5jOjYyOTogKiBOb3RlIHRoYXQgdW5saWtlIGJpb19hbGxvYygpIG9yIGJpb19hbGxvY19iaW9zZXQoKSBhbGxvY2F0aW9ucyBmcm9tIHRoaXNcbmJsb2NrL2Jpby5jLTYzMC0gKiBmdW5jdGlvbiBhcmUgbm90IGJhY2tlZCBieSBhIG1lbXBvb2wgY2FuIGZhaWwuICBEbyBub3QgdXNlIHRoaXMgZnVuY3Rpb25cbi0tXG5ibG9jay9iaW8uYz04OTQ9c3RydWN0IGJpbyAqYmlvX2FsbG9jX2Nsb25lKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBiaW8gKmJpb19zcmMsXG4tLVxuYmxvY2svYmlvLmMtODk4LVxuYmxvY2svYmlvLmM6ODk5Olx0YmlvID0gYmlvX2FsbG9jX2Jpb3NldChiZGV2LCAwLCBiaW9fc3JjLVx1MDAzZWJpX29wZiwgZ2ZwLCBicyk7XG5ibG9jay9iaW8uYy05MDAtXHRpZiAoIWJpbylcbi0tXG5ibG9jay9iaW8uYz0yMDQ2PUVYUE9SVF9TWU1CT0woYmlvc2V0X2V4aXQpO1xuLS1cbmJsb2NrL2Jpby5jLTIwNTYtICogRGVzY3JpcHRpb246XG5ibG9jay9iaW8uYzoyMDU3OiAqICAgIFNldCB1cCBhIGJpb19zZXQgdG8gYmUgdXNlZCB3aXRoIEBiaW9fYWxsb2NfYmlvc2V0LiBBbGxvd3MgdGhlIGNhbGxlclxuYmxvY2svYmlvLmMtMjA1OC0gKiAgICB0byBhc2sgZm9yIGEgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIGFsbG9jYXRlZCBpbiBmcm9udCBvZiB0aGUgYmlvLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTg1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIEJsb2NrIEkvTyBTdHJ1Y3R1cmVzKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBzdHJ1Y3QgYmlvYCBzdHJ1Y3R1cmUuIExldCYjMzk7cyBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIGBpbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjYW5vbmljYWwgZGVmaW5pdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGJhc2ljIGJsb2NrIEkvTyBvcGVyYXRpb25zIGF0IGEgZm91bmRhdGlvbmFsIGxldmVsLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBkZXNjcmliZXMgYSBibG9jayBJL08gcmVxdWVzdC4gSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGluZm9ybWF0aW9uIGl0IGVuY2Fwc3VsYXRlcyDigJMgdGhlIGRldmljZSwgdGhlIHNlY3RvciBhZGRyZXNzZXMsIHRoZSBkYXRhIGJ1ZmZlcnMsIHRoZSBJL08gZmxhZ3MsIGFuZCBldmVyeXRoaW5nIGVsc2UgaW52b2x2ZWQgaW4gYSB0eXBpY2FsIEkvTyBvcGVyYXRpb24uIExldCYjMzk7cyBzZWUgaG93IHRoZSBrZXJuZWwgb3JjaGVzdHJhdGVzIHRoaXMgY3J1Y2lhbCBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBibG9jayBsYXllciBhbmQgdGhlIHVuZGVybHlpbmcgc3RvcmFnZSBkZXZpY2VzLiBUaW1lIHRvIGRpZyBpbiBhbmQgcmVtaW5kIG15c2VsZiBvZiB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGJpbyBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmg9MjAzPXR5cGVkZWYgdW5zaWduZWQgaW50IGJsa19xY190O1xuLS1cbmluY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgtMjA5LSAqL1xuaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaDoyMTA6c3RydWN0IGJpbyB7XG5pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oLTIxMS1cdHN0cnVjdCBiaW9cdFx0KmJpX25leHQ7XHQvKiByZXF1ZXN0IHF1ZXVlIGxpbmsgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkzNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHRzLCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBhbmFseXppbmcgYHN0cnVjdCBiaW9gOgoKKipEaXZpbmcgaW50byBgc3RydWN0IGJpb2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGl0LiBUaW1lIHRvIGRpc3NlY3QgYHN0cnVjdCBiaW9gLiBJIGFscmVhZHkga25vdyB0aGUgaGlnaC1sZXZlbDsgdGhpcyBpcyB0aGUgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmUgaW4gdGhlIExpbnV4IGtlcm5lbCBmb3IgYmxvY2sgSS9PIG9wZXJhdGlvbnMuIEJ1dCBub3cgSSB3YW50IHRvIGRyaWxsIGRvd24sIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIGZpZWxkcywgdGhlIGltcGxpY2F0aW9ucyBvZiBlYWNoIG1lbWJlciwgYW5kIGhvdyB0aGV5IGNvbnRyaWJ1dGUgdG8gZWZmaWNpZW50IGFuZCByZWxpYWJsZSBkYXRhIHRyYW5zZmVyLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHRoaW5nIGlzICpkZXNpZ25lZCrigJR3aGF0IHRyYWRlLW9mZnMgd2VyZSBtYWRlPyBXaGF0IG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIGFyZSBhdCBwbGF5PwoKRmlyc3QsIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGVzc2VudGlhbCBmaWVsZHMuIFRoZSBwb2ludGVycyB0byB0aGUgZGF0YSBidWZmZXJzIChwcm9iYWJseSBgYmlfaW9fdmVjYCBvciBzaW1pbGFyKSwgdGhlIGRldmljZSBpbmZvcm1hdGlvbiAod2hlcmUgdGhlIGRhdGEgaXMgaGVhZGVkKSwgYW5kIHRoZSBmbGFncyB0aGF0IGRpY3RhdGUgdGhlIG9wZXJhdGlvbmFsIGNoYXJhY3RlcmlzdGljc+KAlHJlYWQvd3JpdGUsIHN5bmNocm9ub3VzL2FzeW5jaHJvbm91cywgZXRjLiBJJiMzOTttIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gaG93IHRoZXkgaGFuZGxlIHNjYXR0ZXItZ2F0aGVyIEkvTy4gQXJlIHRoZXkgdXNpbmcgYSBsaW5rZWQgbGlzdCBvZiBgYmlvX3ZlY2Agc3RydWN0cz8gSXMgdGhlcmUgYW55IGNhY2hpbmcgb3IgcHJlZmV0Y2hpbmcgYnVpbHQgaW4/IFRoZSBsYXlvdXQgaXMgaW1wb3J0YW50IHRvIG1pbmltaXplIGNhY2hlLWxpbmUgYm91bmNpbmcuCgpOZXh0LCBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIGBiaW9gIGlzICp1c2VkKi4gSSYjMzk7bGwgdHJ5IHRvIGZvbGxvdyBpdHMgbGlmZWN5Y2xlLiBIb3cgaXMgaXQgaW5pdGlhbGl6ZWQ/IEFsbG9jYXRlZD8gUXVldWVkPyBTdWJtaXR0ZWQgdG8gdGhlIGJsb2NrIGRldmljZSBkcml2ZXI/IENvbXBsZXRlZD8gV2hhdCBhYm91dCBlcnJvciBoYW5kbGluZz8gSXMgdGhlcmUgcHJvcGVyIHNlcXVlbmNpbmcgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IGluIHRoZSBmYWNlIG9mIGhhcmR3YXJlIGZhaWx1cmVzIGFuZCByZXRyaWVzPyBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSBzaWducyBvZiBsb2NrIGNvbnRlbnRpb24gb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBBcmUgdGhlcmUgYW55IHBlci1DUFUgZGF0YSBzdHJ1Y3R1cmVzIHRvIHJlZHVjZSBsb2NraW5nIG92ZXJoZWFkPyBJJiMzOTttIGhvcGluZyB0byBzZWUgd2VsbC1kZWZpbmVkIHN0YXRlcyBhbmQgdHJhbnNpdGlvbnMgdGhhdCBtYWtlIGl0IHJvYnVzdC4KCkkmIzM5O20ga2VlcGluZyBhbiBleWUgb3V0IGZvciBhbnkgc3BlY2lmaWMgb3B0aW1pemF0aW9ucyBmb3IgbW9kZXJuIHN0b3JhZ2UgZGV2aWNlcywgbGlrZSBOVk1lIG9yIFNTRHMuIERvZXMgdGhlIHN0cnVjdHVyZSBpbmNvcnBvcmF0ZSBhbnkgZmVhdHVyZXMgdGhhdCBhbGxvdyBmb3IgZWZmaWNpZW50IGNvbW1hbmQgcXVldWluZywgVFJJTSBzdXBwb3J0LCBvciBhbnkgb3RoZXIgZmVhdHVyZXMgc3BlY2lmaWMgdG8gYWR2YW5jZWQgc3RvcmFnZSBwcm90b2NvbHM/IEFyZSB0aGVyZSBhbnkgaGludHMgb2Ygc3VwcG9ydCBmb3IgRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgYW5kIHplcm8tY29weSBvcGVyYXRpb25zPwoKRmluYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIG9mICpmdXR1cmUtcHJvb2ZpbmcqLiBBcmUgdGhlcmUgcmVzZXJ2ZWQgZmllbGRzIG9yIGV4dGVuc2lvbiBwb2ludHMgdGhhdCBpbmRpY2F0ZSBmb3J3YXJkIGNvbXBhdGliaWxpdHk/IEhhdmUgdGhleSB0aG91Z2h0IGFib3V0IHN1cHBvcnRpbmcgbmV3IGhhcmR3YXJlIG9yIHN0b3JhZ2UgdGVjaG5vbG9naWVzPyBBcmUgdGhlcmUgYW55IGhpbnRzIG9mIGFic3RyYWN0aW9uIGxheWVycyB0aGF0IGNvdWxkIG1ha2UgaXQgZWFzaWVyIHRvIGFkZCBuZXcgZmVhdHVyZXMgbGF0ZXI/IEkgd2FudCB0byBzZWUgYSBkZXNpZ24gdGhhdCBpcyBjbGVhbiwgZXh0ZW5zaWJsZSwgYW5kIGRvZXNuJiMzOTt0IGdldCBpbiB0aGUgd2F5IG9mIHBlcmZvcm1hbmNlLiBPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTA6XHRzdHJ1Y3QgYmlvIHtcbiAyMTE6XHRcdHN0cnVjdCBiaW9cdFx0KmJpX25leHQ7XHQvKiByZXF1ZXN0IHF1ZXVlIGxpbmsgKi9cbiAyMTI6XHRcdHN0cnVjdCBibG9ja19kZXZpY2VcdCpiaV9iZGV2O1xuIDIxMzpcdFx0YmxrX29wZl90XHRcdGJpX29wZjtcdFx0LyogYm90dG9tIGJpdHMgUkVRX09QLCB0b3AgYml0c1xuIDIxNDpcdFx0XHRcdFx0XHRcdCAqIHJlcV9mbGFncy5cbiAyMTU6XHRcdFx0XHRcdFx0XHQgKi9cbiAyMTY6XHRcdHVuc2lnbmVkIHNob3J0XHRcdGJpX2ZsYWdzO1x0LyogQklPXyogYmVsb3cgKi9cbiAyMTc6XHRcdHVuc2lnbmVkIHNob3J0XHRcdGJpX2lvcHJpbztcbiAyMTg6XHRcdGVudW0gcndfaGludFx0XHRiaV93cml0ZV9oaW50O1xuIDIxOTpcdFx0dThcdFx0XHRiaV93cml0ZV9zdHJlYW07XG4gMjIwOlx0XHRibGtfc3RhdHVzX3RcdFx0Ymlfc3RhdHVzO1xuIDIyMTpcdFxuIDIyMjpcdFx0LypcbiAyMjM6XHRcdCAqIFRoZSBidmVjIGdhcCBiaXQgaW5kaWNhdGVzIHRoZSBsb3dlc3Qgc2V0IGJpdCBpbiBhbnkgYWRkcmVzcyBvZmZzZXRcbiAyMjQ6XHRcdCAqIGJldHdlZW4gYWxsIGJpX2lvX3ZlY3MuIFRoaXMgZmllbGQgaXMgaW5pdGlhbGl6ZWQgb25seSBhZnRlciB0aGUgYmlvXG4gMjI1Olx0XHQgKiBpcyBzcGxpdCB0byB0aGUgaGFyZHdhcmUgbGltaXRzIChzZWUgYmlvX3NwbGl0X2lvX2F0KCkpLiBUaGUgdmFsdWVcbiAyMjY6XHRcdCAqIG1heSBiZSB1c2VkIHRvIGNvbnNpZGVyIERNQSBvcHRpbWl6YXRpb24gd2hlbiBwZXJmb3JtaW5nIHRoYXRcbiAyMjc6XHRcdCAqIG1hcHBpbmcuIFRoZSB2YWx1ZSBpcyBjb21wYXJlZCB0byBhIHBvd2VyIG9mIHR3byBtYXNrIHdoZXJlIHRoZVxuIDIyODpcdFx0ICogcmVzdWx0IGRlcGVuZHMgb24gYW55IGJpdCBzZXQgd2l0aGluIHRoZSBtYXNrLCBzbyBzYXZpbmcgdGhlIGxvd2VzdFxuIDIyOTpcdFx0ICogYml0IGlzIHN1ZmZpY2llbnQgdG8ga25vdyBpZiBhbnkgc2VnbWVudCBnYXAgY29sbGlkZXMgd2l0aCB0aGUgbWFzay5cbiAyMzA6XHRcdCAqL1xuIDIzMTpcdFx0dThcdFx0XHRiaV9idmVjX2dhcF9iaXQ7XG4gMjMyOlx0XG4gMjMzOlx0XHRhdG9taWNfdFx0XHRfX2JpX3JlbWFpbmluZztcbiAyMzQ6XHRcbiAyMzU6XHRcdC8qIFRoZSBhY3R1YWwgdmVjIGxpc3QsIHByZXNlcnZlZCBieSBiaW9fcmVzZXQoKSAqL1xuIDIzNjpcdFx0c3RydWN0IGJpb192ZWNcdFx0KmJpX2lvX3ZlYztcbiAyMzc6XHRcdHN0cnVjdCBidmVjX2l0ZXJcdGJpX2l0ZXI7XG4gMjM4Olx0XG4gMjM5Olx0XHR1bmlvbiB7XG4gMjQwOlx0XHRcdC8qIGZvciBwb2xsZWQgYmlvczogKi9cbiAyNDE6XHRcdFx0YmxrX3FjX3RcdFx0YmlfY29va2llO1xuIDI0MjpcdFx0XHQvKiBmb3IgcGx1Z2dlZCB6b25lZCB3cml0ZXMgb25seTogKi9cbiAyNDM6XHRcdFx0dW5zaWduZWQgaW50XHRcdF9fYmlfbnJfc2VnbWVudHM7XG4gMjQ0Olx0XHR9O1xuIDI0NTpcdFx0YmlvX2VuZF9pb190XHRcdCpiaV9lbmRfaW87XG4gMjQ2Olx0XHR2b2lkXHRcdFx0KmJpX3ByaXZhdGU7XG4gMjQ3Olx0I2lmZGVmIENPTkZJR19CTEtfQ0dST1VQXG4gMjQ4Olx0XHQvKlxuIDI0OTpcdFx0ICogUmVwcmVzZW50cyB0aGUgYXNzb2NpYXRpb24gb2YgdGhlIGNzcyBhbmQgcmVxdWVzdF9xdWV1ZSBmb3IgdGhlIGJpby5cbiAyNTA6XHRcdCAqIElmIGEgYmlvIGdvZXMgZGlyZWN0IHRvIGRldmljZSwgaXQgd2lsbCBub3QgaGF2ZSBhIGJsa2cgYXMgaXQgd2lsbFxuIDI1MTpcdFx0ICogbm90IGhhdmUgYSByZXF1ZXN0X3F1ZXVlIGFzc29jaWF0ZWQgd2l0aCBpdC4gIFRoZSByZWZlcmVuY2UgaXMgcHV0XG4gMjUyOlx0XHQgKiBvbiByZWxlYXNlIG9mIHRoZSBiaW8uXG4gMjUzOlx0XHQgKi9cbiAyNTQ6XHRcdHN0cnVjdCBibGtjZ19ncVx0XHQqYmlfYmxrZztcbiAyNTU6XHRcdC8qIFRpbWUgdGhhdCB0aGlzIGJpbyB3YXMgaXNzdWVkLiAqL1xuIDI1NjpcdFx0dTY0XHRcdFx0aXNzdWVfdGltZV9ucztcbiAyNTc6XHQjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUXG4gMjU4Olx0XHR1NjRcdFx0XHRiaV9pb2Nvc3RfY29zdDtcbiAyNTk6XHQjZW5kaWZcbiAyNjA6XHQjZW5kaWZcbiAyNjE6XHRcbiAyNjI6XHQjaWZkZWYgQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTlxuIDI2MzpcdFx0c3RydWN0IGJpb19jcnlwdF9jdHhcdCpiaV9jcnlwdF9jb250ZXh0O1xuIDI2NDpcdCNlbmRpZlxuIDI2NTpcdFxuIDI2NjpcdCNpZiBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lOVEVHUklUWSlcbiAyNjc6XHRcdHN0cnVjdCBiaW9faW50ZWdyaXR5X3BheWxvYWQgKmJpX2ludGVncml0eTsgLyogZGF0YSBpbnRlZ3JpdHkgKi9cbiAyNjg6XHQjZW5kaWZcbiAyNjk6XHRcbiAyNzA6XHRcdHVuc2lnbmVkIHNob3J0XHRcdGJpX3ZjbnQ7XHQvKiBob3cgbWFueSBiaW9fdmVjJiMzOTtzICovXG4gMjcxOlx0XG4gMjcyOlx0XHQvKlxuIDI3MzpcdFx0ICogRXZlcnl0aGluZyBzdGFydGluZyB3aXRoIGJpX21heF92ZWNzIHdpbGwgYmUgcHJlc2VydmVkIGJ5IGJpb19yZXNldCgpXG4gMjc0Olx0XHQgKi9cbiAyNzU6XHRcbiAyNzY6XHRcdC8qXG4gMjc3Olx0XHQgKiBOdW1iZXIgb2YgZWxlbWVudHMgaW4gYGJpX2lvX3ZlY2AgdGhhdCB3ZXJlIGFsbG9jYXRlZCBmb3IgdGhpcyBiaW8uXG4gMjc4Olx0XHQgKiBPbmx5IHVzZWQgYnkgdGhlIGJpbyBzdWJtaXR0ZXIgdG8gbWFrZSBgYmlvX2FkZF9wYWdlYCBmYWlsIG9uY2UgZnVsbFxuIDI3OTpcdFx0ICogYW5kIHRvIGZyZWUgdGhlIGBiaV9pb192ZWNgIGFsbG9jYXRpb24uIE11c3Qgbm90IGJlIHVzZWQgaW4gZHJpdmVyc1xuIDI4MDpcdFx0ICogYW5kIGRvZXMgbm90IGhvbGQgYSB1c2VmdWwgdmFsdWUgZm9yIGNsb25lZCBiaW9zLlxuIDI4MTpcdFx0ICovXG4gMjgyOlx0XHR1bnNpZ25lZCBzaG9ydFx0XHRiaV9tYXhfdmVjcztcbiAyODM6XHRcbiAyODQ6XHRcdGF0b21pY190XHRcdF9fYmlfY250O1x0LyogcGluIGNvdW50ICovXG4gMjg1Olx0XG4gMjg2Olx0XHRzdHJ1Y3QgYmlvX3NldFx0XHQqYmlfcG9vbDtcbiAyODc6XHR9O1xuIDI4ODpcdFxuIDI4OTpcdCNkZWZpbmUgQklPX1JFU0VUX0JZVEVTXHRcdG9mZnNldG9mKHN0cnVjdCBiaW8sIGJpX21heF92ZWNzKVxuIDI5MDpcdCNkZWZpbmUgQklPX01BWF9TSVpFXHRcdFVJTlRfTUFYIC8qIG1heCB2YWx1ZSBvZiBiaV9pdGVyLmJpX3NpemUgKi9cbiAyOTE6XHQjZGVmaW5lIEJJT19NQVhfU0VDVE9SU1x0XHQoQklPX01BWF9TSVpFIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQpXG4gMjkyOlx0XG4gMjkzOlx0c3RhdGljIGlubGluZSBzdHJ1Y3QgYmlvX3ZlYyAqYmlvX2lubGluZV92ZWNzKHN0cnVjdCBiaW8gKmJpbylcbiAyOTQ6XHR7XG4gMjk1Olx0XHRyZXR1cm4gKHN0cnVjdCBiaW9fdmVjICopKGJpbyAmIzQzOyAxKTtcbiAyOTY6XHR9XG4gMjk3Olx0XG4gMjk4Olx0LypcbiAyOTk6XHQgKiBiaW8gZmxhZ3NcbiAzMDA6XHQgKi9cbiAzMDE6XHRlbnVtIHtcbiAzMDI6XHRcdEJJT19QQUdFX1BJTk5FRCxcdC8qIFVucGluIHBhZ2VzIGluIGJpb19yZWxlYXNlX3BhZ2VzKCkgKi9cbiAzMDM6XHRcdEJJT19DTE9ORUQsXHRcdC8qIGRvZXNuJiMzOTt0IG93biBkYXRhICovXG4gMzA0Olx0XHRCSU9fUVVJRVQsXHRcdC8qIE1ha2UgQklPIFF1aWV0ICovXG4gMzA1Olx0XHRCSU9fQ0hBSU4sXHRcdC8qIGNoYWluZWQgYmlvLCAtXHUwMDNlYmlfcmVtYWluaW5nIGluIGVmZmVjdCAqL1xuIDMwNjpcdFx0QklPX1JFRkZFRCxcdFx0LyogYmlvIGhhcyBlbGV2YXRlZCAtXHUwMDNlYmlfY250ICovXG4gMzA3Olx0XHRCSU9fQlBTX1RIUk9UVExFRCxcdC8qIFRoaXMgYmlvIGhhcyBhbHJlYWR5IGJlZW4gc3ViamVjdGVkIHRvXG4gMzA4Olx0XHRcdFx0XHQgKiB0aHJvdHRsaW5nIHJ1bGVzLiBEb24mIzM5O3QgZG8gaXQgYWdhaW4uICovXG4gMzA5Olx0XHRCSU9fVFJBQ0VfQ09NUExFVElPTixcdC8qIGJpb19lbmRpbygpIHNob3VsZCB0cmFjZSB0aGUgZmluYWwgY29tcGxldGlvblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTEwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYmlvIFN0cnVjdHVyZSBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyBhZGRpbmcgYGJpby0mZ3Q7YmlfYnZlY19nYXBfYml0YCB0byB0aGUgYF9fYmlvX2Nsb25lYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIG5ldyBvbmUuICBJdCYjMzk7cyBhbHNvIGJlaW5nIHJlc2V0IHRvIDAgaW4gYGJpb19zcGxpdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gIElzIHRoaXMgYSBiaXRmaWVsZCBmbGFnIGJlaW5nIGFkZGVkLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGV4aXN0aW5nIGBiaW9gIHN0cnVjdHVyZSBhbmQgaG93IHRoaXMgbmV3IG1lbWJlciBtb2RpZmllcyB0aGF0IGludGVyYWN0aW9uLiBJdCBzZWVtcyBsaWtlIHRoZSBpbnRlbnRpb24gaXMgdG8gY2FycnkgdGhhdCBiaXQgYWNyb3NzIGNsb25lcywgYnV0IHJlc2V0IGl0IG9uIGEgc3BsaXQuCgpOb3csIHdhaXQgYSBtaW51dGUuLi4gSSBuZWVkIHRvIGNvbnNpZGVyIGhvdyBgYmlvX2FsbG9jX2Jpb3NldGAgYW5kIGBiaW9faW5pdGAgYXJlIGludm9sdmVkIGhlcmUuIERvbiYjMzk7dCB0aG9zZSBmdW5jdGlvbnMgcmVzZXQgYSBnb29kIGNodW5rIG9mIHRoZSBgYmlvYCBzdHJ1Y3R1cmU/IEkgYmVsaWV2ZSB0aGV5IGNhbGwgYGJpb19pbml0YCwgYW5kIEkgcmVjYWxsIGBiaW9faW5pdGAgY2xlYXJpbmcgdGhlIGBiaW9gIHN0cnVjdHVyZSB1cCB0byBgQklPX1JFU0VUX0JZVEVTYC4gSSBuZWVkIHRvIGNvbmZpcm0gZXhhY3RseSB3aGF0IGdldHMgY2xlYXJlZCBieSBgYmlvX2luaXRgLCBhbmQgd2hldGhlciB0aGlzIG5ldyBmaWVsZCBpcyB3aXRoaW4gdGhhdCByZXNldCByYW5nZS4gSXQmIzM5O3MgY3JpdGljYWwgdG8gZW5zdXJlIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzIG9yIGNvbmZsaWN0cyB3aXRoIG90aGVyIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLiBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byBgYmlvX2luaXRgJiMzOTtzIGNvZGUgcmlnaHQgYXdheS4gIFRoZSBpbXBsaWNhdGlvbnMgb2YgKndoZXJlKiB0aGlzIG5ldyBiaXQgcmVzaWRlcyBpbiB0aGUgYmlvIGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gYmVoYXZpb3IgYXJlIGNyaXRpY2FsIHRvIHByb3Blcmx5IHVuZGVyc3RhbmRpbmcgaXRzIGFkZGl0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGJpb19pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svYmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmlvLmM9MTk1PXN0YXRpYyB2b2lkIGJpb19mcmVlKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5ibG9jay9iaW8uYy0yMTYtICovXG5ibG9jay9iaW8uYzoyMTc6dm9pZCBiaW9faW5pdChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBiaW9fdmVjICp0YWJsZSxcbmJsb2NrL2Jpby5jLTIxOC1cdCAgICAgIHVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCBibGtfb3BmX3Qgb3BmKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTAwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFRhc2sqKgoKQWxyaWdodCwgdGhlIGRpcmVjdGl2ZSBpcyB0byBzdW1tYXJpemUgYW5kIGludGVycHJldCB0aGUgdGhvdWdodCBwcm9jZXNzLCBlc3NlbnRpYWxseSBzdGVwcGluZyBpbnRvIHRoZSBzaG9lcyBvZiB0aGUgaW5kaXZpZHVhbCBhbmQgZGVzY3JpYmluZyB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbnRlcm5hbGx5LiBUaGUgZmlyc3QsIGFuZCBtb3N0IGltcG9ydGFudCwgcGllY2Ugb2YgaW5mb3JtYXRpb24gaXMgdGhlIGRvY3VtZW50LCBjYWxsZWQgYGJpb19pbml0YC4gT2theSwgSSBrbm93IHdoYXQgdGhhdCBtZWFucy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSByZWFkaW5nIHRoZSBjb2RlLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL2Jpby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTc6XHR2b2lkIGJpb19pbml0KHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGJpb192ZWMgKnRhYmxlLFxuIDIxODpcdFx0ICAgICAgdW5zaWduZWQgc2hvcnQgbWF4X3ZlY3MsIGJsa19vcGZfdCBvcGYpXG4gMjE5Olx0e1xuIDIyMDpcdFx0YmlvLVx1MDAzZWJpX25leHQgPSBOVUxMO1xuIDIyMTpcdFx0YmlvLVx1MDAzZWJpX2JkZXYgPSBiZGV2O1xuIDIyMjpcdFx0YmlvLVx1MDAzZWJpX29wZiA9IG9wZjtcbiAyMjM6XHRcdGJpby1cdTAwM2ViaV9mbGFncyA9IDA7XG4gMjI0Olx0XHRiaW8tXHUwMDNlYmlfaW9wcmlvID0gMDtcbiAyMjU6XHRcdGJpby1cdTAwM2ViaV93cml0ZV9oaW50ID0gMDtcbiAyMjY6XHRcdGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gPSAwO1xuIDIyNzpcdFx0YmlvLVx1MDAzZWJpX3N0YXR1cyA9IDA7XG4gMjI4Olx0XHRiaW8tXHUwMDNlYmlfYnZlY19nYXBfYml0ID0gMDtcbiAyMjk6XHRcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IDA7XG4gMjMwOlx0XHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplID0gMDtcbiAyMzE6XHRcdGJpby1cdTAwM2ViaV9pdGVyLmJpX2lkeCA9IDA7XG4gMjMyOlx0XHRiaW8tXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQgPSAwO1xuIDIzMzpcdFx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IE5VTEw7XG4gMjM0Olx0XHRiaW8tXHUwMDNlYmlfcHJpdmF0ZSA9IE5VTEw7XG4gMjM1Olx0I2lmZGVmIENPTkZJR19CTEtfQ0dST1VQXG4gMjM2Olx0XHRiaW8tXHUwMDNlYmlfYmxrZyA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MjcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBiaV9idmVjX2dhcF9iaXRgIElzc3VlKioKCk9rYXksIHNvIGBiaW9faW5pdGAgKmV4cGxpY2l0bHkqIHNldHMgYGJpby0mZ3Q7YmlfYnZlY19nYXBfYml0YCB0byB6ZXJvLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgdGhlIGluaXRpYWxpemF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgdGhpcyAqd2FzbiYjMzk7dCogaGFwcGVuaW5nLCB0aGF0IGBiaV9idmVjX2dhcF9iaXRgIHdhcyBnZXR0aW5nIGxlZnQgdW5pbml0aWFsaXplZCBzb21ld2hlcmUuIEJ1dCB0aGF0JiMzOTtzIHdyb25nLiBJdCYjMzk7cyAqYWx3YXlzKiBpbml0aWFsaXplZCB0byB6ZXJvIGR1cmluZyBhbGxvY2F0aW9uLgoKVGhlIHJlYWwgcHJvYmxlbSBsaWVzIGluIHRoZSAqY2xvbmluZyogYW5kICpzcGxpdHRpbmcqIG9wZXJhdGlvbnMuIEl0IGxvb2tzIGxpa2UgYF9fYmlvX2Nsb25lYCB3YXNuJiMzOTt0IGNvcHlpbmcgdGhlIGBiaV9idmVjX2dhcF9iaXRgIGZyb20gdGhlIHNvdXJjZSBiaW8gdG8gdGhlIGNsb25lZCBiaW8uIEFuZCBgYmlvX3NwbGl0YCB3YXNuJiMzOTt0IHJlc2V0dGluZyBpdCB0byB6ZXJvIGZvciB0aGUgcmVtYWluaW5nIHBhcnQuIFRoYXQmIzM5O3MgYSBsb2dpY2FsIGZsYXcuIFRoZSBtZW1vcnkgKmlzKiBpbml0aWFsaXplZCwgYnV0IGl0IGNvdWxkIGVuZCB1cCB3aXRoIGEgKnN0YWxlKiB2YWx1ZSwgYSB2YWx1ZSB0aGF0IGRvZXNuJiMzOTt0IHJlZmxlY3QgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGJpbyBhZnRlciB0aGUgY2xvbmluZyBvciBzcGxpdHRpbmcuIFRoaXMgY291bGQgYWJzb2x1dGVseSBsZWFkIHRvIGluY29ycmVjdCBETUEgbWFwcGluZyBvciBvdGhlciBjb3JydXB0aW9uLCBidXQgaXQgaXMgbm90IGEgZGlyZWN0IG1lbW9yeSBpbml0aWFsaXphdGlvbiBpc3N1ZS4KCldhaXQuLi4gSSBuZWVkIHRvIGNoZWNrIG15IGFzc3VtcHRpb24uIENhbiBgX19iaW9fY2xvbmVgICphY3R1YWxseSogYmUgY2FsbGVkIG9uIGFuIHVuaW5pdGlhbGl6ZWQgYmlvPyBObywgdGhhdCBjYW4mIzM5O3QgYmUuIGBfX2Jpb19jbG9uZWAgaXMgY2FsbGVkIGZyb20gYGJpb19hbGxvY19jbG9uZWAsIHdoaWNoIHVzZXMgYGJpb19hbGxvY19iaW9zZXRgIHdoaWNoIHRoZW4gKmNhbGxzKiBgYmlvX2luaXRgLiBUaGVyZWZvcmUsIHRoZSAqbmV3KiBiaW8gd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIGBiaV9idmVjX2dhcF9iaXQgPSAwYC4gU28sIGBfX2Jpb19jbG9uZWAgY29waWVzIGZpZWxkcyBmcm9tIHRoZSBzb3VyY2UgYmlvIGFuZCwgaWYgaXQgKmRpZG4mIzM5O3QqIGNvcHkgYGJpX2J2ZWNfZ2FwX2JpdGAsIGl0IHdvdWxkIHNpbXBseSByZW1haW4gemVybyEKCk9rYXksIHNvIGl0JiMzOTtzIGEgKmxvZ2ljYWwgYnVnKiwgcHVyZSBhbmQgc2ltcGxlLiBFaXRoZXIgdGhlIGNsb25lIGRvZXNuJiMzOTt0IGluaGVyaXQgdGhlIGNvcnJlY3QgZ2FwIGJpdCwgb3IgdGhlIHNwbGl0IGJpbyBkb2VzbiYjMzk7dCByZXNldCBpdC4gVGhpcyBkb2VzbiYjMzk7dCBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHRob3VnaC4gVGhlIG1lbW9yeSAqaXMqIGZ1bGx5IGluaXRpYWxpemVkLiBOb3csIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYGJpb19yZXNldGAgdG8gZW5zdXJlIG15IHVuZGVyc3RhbmRpbmcgaXMgY29tcGxldGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgYmlvX3Jlc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svYmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmlvLmM9MjYwPUVYUE9SVF9TWU1CT0woYmlvX2luaXQpO1xuLS1cbmJsb2NrL2Jpby5jLTI3My0gKi9cbmJsb2NrL2Jpby5jOjI3NDp2b2lkIGJpb19yZXNldChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19vcGZfdCBvcGYpXG5ibG9jay9iaW8uYy0yNzUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzY5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBCaW9fcmVzZXQgRmlsZSoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiAmIzM0O2Jpb19yZXNldCYjMzQ7Li4uIHRoYXQgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgYSBzeXN0ZW0gcmVzZXQgb3IgaW5pdGlhbGl6YXRpb24gcmVsYXRlZCB0byBiaW9sb2dpY2FsIGRhdGEgb3IgYSBiaW9sb2dpY2FsIHByb2Nlc3MuIFRoZSBuYW1pbmcgY29udmVudGlvbiBsaWtlbHkgaW5kaWNhdGVzIGEgc3BlY2lmaWMgbW9kdWxlIG9yIGNvbXBvbmVudC4gSSYjMzk7bSBhc3N1bWluZyB0aGlzIGlzbiYjMzk7dCBzb21lIGdlbmVyaWMgc2NyaXB0OyB0aGUgY29udGV4dCBpcyBsaWtlbHkgbW9yZSBzcGVjaWFsaXplZC4gSSBpbW1lZGlhdGVseSBzdGFydCBtZW50YWxseSBjYXRhbG9naW5nIHdoYXQgdGhpcyBjb3VsZCBhcHBseSB0bzogcGVyaGFwcyBhIGRhdGEgcGlwZWxpbmUgcmVzZXR0aW5nIGEgYmlvbG9naWNhbCBkYXRhYmFzZT8gTWF5YmUgaXQmIzM5O3MgYSBzY3JpcHQgdGhhdCBjbGVhbnMgYSBiaW9pbmZvcm1hdGljcyBlbnZpcm9ubWVudCBhZnRlciBhIHBhcnRpY3VsYXIgcnVuPyBJdCBjb3VsZCBldmVuIGJlIGEgcmVzZXQgcHJvY2VkdXJlIHRpZWQgdG8gdGhlIG9wZXJhdGlvbiBvZiBhIHBpZWNlIG9mIGV4cGVyaW1lbnRhbCBhcHBhcmF0dXMuIE15IGZvY3VzIG5vdyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdHMgb2Ygd2hhdGV2ZXIgaXMgY29udGFpbmVkIHdpdGhpbiB0aGF0IGBiaW9fcmVzZXRgIGZpbGUuIFRpbWUgdG8gZGlnIGluIGFuZCBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9iaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjc0Olx0dm9pZCBiaW9fcmVzZXQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfb3BmX3Qgb3BmKVxuIDI3NTpcdHtcbiAyNzY6XHRcdHN0cnVjdCBiaW9fdmVjICAgICAgICAgICpidiA9IGJpby1cdTAwM2ViaV9pb192ZWM7XG4gMjc3Olx0XG4gMjc4Olx0XHRiaW9fdW5pbml0KGJpbyk7XG4gMjc5Olx0XHRtZW1zZXQoYmlvLCAwLCBCSU9fUkVTRVRfQllURVMpO1xuIDI4MDpcdFx0YXRvbWljX3NldChcdTAwMjZiaW8tXHUwMDNlX19iaV9yZW1haW5pbmcsIDEpO1xuIDI4MTpcdFx0YmlvLVx1MDAzZWJpX2lvX3ZlYyA9IGJ2O1xuIDI4MjpcdFx0YmlvLVx1MDAzZWJpX2JkZXYgPSBiZGV2O1xuIDI4MzpcdFx0aWYgKGJpby1cdTAwM2ViaV9iZGV2KVxuIDI4NDpcdFx0XHRiaW9fYXNzb2NpYXRlX2Jsa2coYmlvKTtcbiAyODU6XHRcdGJpby1cdTAwM2ViaV9vcGYgPSBvcGY7XG4gMjg2Olx0fVxuIDI4NzpcdEVYUE9SVF9TWU1CT0woYmlvX3Jlc2V0KTtcbiAyODg6XHRcbiAyODk6XHQvKipcbiAyOTA6XHQgKiBiaW9fcmV1c2UgLSByZXVzZSBhIGJpbyB3aXRoIHRoZSBwYXlsb2FkIGxlZnQgaW50YWN0XG4gMjkxOlx0ICogQGJpbzpcdGJpbyB0byByZXVzZVxuIDI5MjpcdCAqIEBvcGY6XHRvcGVyYXRpb24gYW5kIGZsYWdzIGZvciB0aGUgbmV4dCBJL09cbiAyOTM6XHQgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTIwCgkJCQkJCQlvdXRwdXQ6IDIwMwoJCQkJCQkJdGhvdWdodHM6IDQyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYGJpX2J2ZWNfZ2FwX2JpdGAgRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgcmV2b2x2ZXMgYXJvdW5kIGBiaV9idmVjX2dhcF9iaXRgIHdpdGhpbiB0aGUgYHN0cnVjdCBiaW9gLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIHN5c3RlbSB1c2VzIGBiaW9fcmVzZXRgIHRvIGluaXRpYWxpemUgdGhpcyBzdHJ1Y3QsIHVzaW5nIGBtZW1zZXRgIHRvIHplcm8gb3V0IGEgcG9ydGlvbiBvZiB0aGUgc3RydWN0dXJlIHVwIHRvIGBCSU9fUkVTRVRfQllURVNgLCB3aGljaCBpcyBkZWZpbmVkIGFzIGBvZmZzZXRvZihzdHJ1Y3QgYmlvLCBiaV9tYXhfdmVjcylgLiBCZWNhdXNlIGBiaV9idmVjX2dhcF9iaXRgIHByZWNlZGVzIGBiaV9tYXhfdmVjc2AgaW4gdGhlIHN0cnVjdHVyZSwgdGhpcyBlZmZlY3RpdmVseSB6ZXJvcyBpdCBvdXQgZHVyaW5nIHJlc2V0LiBUaGlzIG1lYW5zIHRoYXQsIGF0IGxlYXN0IGZyb20gYW4gaW5pdGlhbGl6YXRpb24gcGVyc3BlY3RpdmUsIHdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBgYmlfYnZlY19nYXBfYml0YCBzaG91bGQgKmFsd2F5cyogYmUgaW5pdGlhbGl6ZWQsIGF0IGxlYXN0IGluaXRpYWxseS4KClRoZSBwYXRjaCBpdHNlbGYgYWRkcmVzc2VzIGEgKmxvZ2ljYWwqIGZsYXcsIHNwZWNpZmljYWxseSBpbiBob3cgYGJpX2J2ZWNfZ2FwX2JpdGAgaXMgaGFuZGxlZCBkdXJpbmcgYmlvIGNsb25pbmcgKHVzaW5nIGBfX2Jpb19jbG9uZWApIGFuZCBzcGxpdHRpbmcgKHVzaW5nIGBiaW9fc3BsaXRgKS4gSXQmIzM5O3MgYWJvdXQgZW5zdXJpbmcgdGhpcyBiaXQsIHdoaWNoIHNpZ25pZmllcyB0aGUgc21hbGxlc3Qgc2V0IGJpdCBpbiB0aGUgb2Zmc2V0IGJldHdlZW4gYGJpX2lvX3ZlY3NgIGZvciBETUEgb3B0aW1pemF0aW9uLCBpcyBjb3JyZWN0bHkgcHJvcGFnYXRlZCBvciBjbGVhcmVkIGluIHRoZXNlIG9wZXJhdGlvbnMuIElmIGl0JiMzOTtzIG5vdCBoYW5kbGVkIGNvcnJlY3RseSwgd2UgY291bGQgZW5kIHVwIHdpdGggaW5jb3JyZWN0IERNQSBtYXBwaW5ncyBvciBmdW5reSBiZWhhdmlvciB3aXRoaW4gdGhlIGJsb2NrIGxheWVyLgoKTm93LCBjb25jZXJuaW5nIHRoZSBgTmVlZHNLTVNBTmAgdGFnLCBteSBjb25jbHVzaW9uIGlzIGl0JiMzOTtzIGluY29ycmVjdCBoZXJlLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0ICp1bmluaXRpYWxpemVkKiBtZW1vcnkgcmVhZHMuIFRoZSBjb2RlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgYGJpX2J2ZWNfZ2FwX2JpdGAgdG8gemVyby4gQW55IG1lbW9yeSBjb3JydXB0aW9uIGFyaXNpbmcgZnJvbSB0aGUgaW5jb3JyZWN0IGhhbmRsaW5nIG9mIHRoaXMgYml0IHdvdWxkIGxpa2VseSBtYW5pZmVzdCBhcyBiYWQgRE1BLCBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcywgb3Igc29tZXRoaW5nIHNpbWlsYXIuIFRoaXMgd291bGQsIEkgYmVsaWV2ZSwgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIG90aGVyIG1vcmUgZ2VuZXJhbCBtZW1vcnkgc2FmZXR5IHRvb2xzLCBub3QgS01TQU4uIFRoZSBsb2dpYyBlcnJvciBtaWdodCBsZWFkIHRvIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uLCBidXQgaXQgaXMgbm90IGJlY2F1c2UgdGhlIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLCBidXQgYmVjYXVzZSBvZiBpbmNvcnJlY3QgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX2Jpb19jbG9uZWAgYW5kIGBiaW9fc3BsaXRgIHRvIHByb3Blcmx5IHByb3BhZ2F0ZSBhbmQgcmVzZXQgdGhlIGBiaV9idmVjX2dhcF9iaXRgIGZpZWxkIG9mIGBzdHJ1Y3QgYmlvYC4gVGhpcyBmaWVsZCBpcyB1c2VkIHRvIGluZGljYXRlIHRoZSBsb3dlc3Qgc2V0IGJpdCBpbiBhbnkgYWRkcmVzcyBvZmZzZXQgYmV0d2VlbiBhbGwgYGJpX2lvX3ZlY3NgIGZvciBETUEgb3B0aW1pemF0aW9uLiBXaGVuIGEgYmlvIGlzIGFsbG9jYXRlZCBvciByZXNldCwgYGJpX2J2ZWNfZ2FwX2JpdGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwICh2aWEgYGJpb19pbml0YCBvciBgbWVtc2V0YCBpbiBgYmlvX3Jlc2V0YCkuIFRoZXJlZm9yZSwgdGhlIGlzc3VlIGJlaW5nIGZpeGVkIGlzIGEgbG9naWNhbCBidWcgd2hlcmUgdGhlIGdhcCBiaXQgaXMgZWl0aGVyIGxvc3QgZHVyaW5nIGNsb25pbmcgb3IgaW5jb3JyZWN0bHkgcmV0YWluZWQgZHVyaW5nIHNwbGl0dGluZywgcmF0aGVyIHRoYW4gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC4gQmVjYXVzZSB0aGUgZmllbGQgaXMgYWx3YXlzIGluaXRpYWxpemVkLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiBBbnkgcmVzdWx0aW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGR1ZSB0byBpbmNvcnJlY3QgRE1BIG1hcHBpbmdzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX2Jpb19jbG9uZWAgYW5kIGBiaW9fc3BsaXRgIHRvIHByb3Blcmx5IHByb3BhZ2F0ZSBhbmQgcmVzZXQgdGhlIGBiaV9idmVjX2dhcF9iaXRgIGZpZWxkIG9mIGBzdHJ1Y3QgYmlvYC4gVGhpcyBmaWVsZCBpcyB1c2VkIHRvIGluZGljYXRlIHRoZSBsb3dlc3Qgc2V0IGJpdCBpbiBhbnkgYWRkcmVzcyBvZmZzZXQgYmV0d2VlbiBhbGwgYGJpX2lvX3ZlY3NgIGZvciBETUEgb3B0aW1pemF0aW9uLiBXaGVuIGEgYmlvIGlzIGFsbG9jYXRlZCBvciByZXNldCwgYGJpX2J2ZWNfZ2FwX2JpdGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwICh2aWEgYGJpb19pbml0YCBvciBgbWVtc2V0YCBpbiBgYmlvX3Jlc2V0YCkuIFRoZXJlZm9yZSwgdGhlIGlzc3VlIGJlaW5nIGZpeGVkIGlzIGEgbG9naWNhbCBidWcgd2hlcmUgdGhlIGdhcCBiaXQgaXMgZWl0aGVyIGxvc3QgZHVyaW5nIGNsb25pbmcgb3IgaW5jb3JyZWN0bHkgcmV0YWluZWQgZHVyaW5nIHNwbGl0dGluZywgcmF0aGVyIHRoYW4gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC4gQmVjYXVzZSB0aGUgZmllbGQgaXMgYWx3YXlzIGluaXRpYWxpemVkLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiBBbnkgcmVzdWx0aW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGR1ZSB0byBpbmNvcnJlY3QgRE1BIG1hcHBpbmdzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6MzU6MTkuOTYxOTI1OTMxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxOTE4OTgxMTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJpb19hbGxvY19jbG9uZVwiLFxuICAgIFwiYmlvX2luaXRfY2xvbmVcIixcbiAgICBcImJpb19zcGxpdFwiLFxuICAgIFwiYmxrX3JxX2FwcGVuZF9iaW9cIixcbiAgICBcImJpb19zcGxpdF9pb19hdFwiLFxuICAgIFwiYmlvX3NlZ19nYXBcIixcbiAgICBcImJsa19tcV9zdWJtaXRfYmlvXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19iaW9fY2xvbmVgIGFuZCBgYmlvX3NwbGl0YCB0byBwcm9wZXJseSBwcm9wYWdhdGUgYW5kIHJlc2V0IHRoZSBgYmlfYnZlY19nYXBfYml0YCBmaWVsZCBvZiBgc3RydWN0IGJpb2AuIFRoaXMgZmllbGQgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgbG93ZXN0IHNldCBiaXQgaW4gYW55IGFkZHJlc3Mgb2Zmc2V0IGJldHdlZW4gYWxsIGBiaV9pb192ZWNzYCBmb3IgRE1BIG9wdGltaXphdGlvbi4gV2hlbiBhIGJpbyBpcyBhbGxvY2F0ZWQgb3IgcmVzZXQsIGBiaV9idmVjX2dhcF9iaXRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCAodmlhIGBiaW9faW5pdGAgb3IgYG1lbXNldGAgaW4gYGJpb19yZXNldGApLiBUaGVyZWZvcmUsIHRoZSBpc3N1ZSBiZWluZyBmaXhlZCBpcyBhIGxvZ2ljYWwgYnVnIHdoZXJlIHRoZSBnYXAgYml0IGlzIGVpdGhlciBsb3N0IGR1cmluZyBjbG9uaW5nIG9yIGluY29ycmVjdGx5IHJldGFpbmVkIGR1cmluZyBzcGxpdHRpbmcsIHJhdGhlciB0aGFuIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQuIEJlY2F1c2UgdGhlIGZpZWxkIGlzIGFsd2F5cyBpbml0aWFsaXplZCwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4gQW55IHJlc3VsdGluZyBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyBkdWUgdG8gaW5jb3JyZWN0IERNQSBtYXBwaW5ncyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbWlzc2luZyBpbml0aWFsaXphdGlvbiBhbmQgY29weWluZyBvZiBgYmlfYnZlY19nYXBfYml0YCBpbiBgYmlvX3NwbGl0YCBhbmQgYF9fYmlvX2Nsb25lYC4gVGhpcyBmaWVsZCBpcyB1c2VkIHRvIHRyYWNrIGdhcCBiaXRzIGZvciBiaW8gdmVjdG9ycyBhbmQgaXMgY29uc3VtZWQgYnkgY29yZSBibG9jayBsYXllciBmdW5jdGlvbnMgbGlrZSBgYmxrX3JxX2FwcGVuZF9iaW9gIGFuZCBgYmlvX3NwbGl0X2lvX2F0YC4gRnV6emluZyB0aGVzZSBmdW5jdGlvbnMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBjb3JyZWN0IGhhbmRsaW5nIG9mIGJpbyB2ZWN0b3IgZ2Fwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6MzU6MTkuOTYxOTMxMTUxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY1NjAyNTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDY1OTcwMDAzYTY3OWQ4MGZmZGJmYzU1MmJiMWQxYzZmZjQ5MzY2N1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxNzozNToxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9ibG9jay9iaW8uYyBiL2Jsb2NrL2Jpby5jXFxuaW5kZXggODk4YjJmNWVmOGM4MS4uMzNhYTQzOWMxYmFlMiAxMDA2NDRcXG4tLS0gYS9ibG9jay9iaW8uY1xcbisrKyBiL2Jsb2NrL2Jpby5jXFxuQEAgLTg1OSw2ICs4NTksNyBAQCBzdGF0aWMgaW50IF9fYmlvX2Nsb25lKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJpbyAqYmlvX3NyYywgZ2ZwX3QgZ2ZwKVxcbiBcXHRiaW8tXFx1MDAzZWJpX2lvcHJpbyA9IGJpb19zcmMtXFx1MDAzZWJpX2lvcHJpbztcXG4gXFx0YmlvLVxcdTAwM2ViaV93cml0ZV9oaW50ID0gYmlvX3NyYy1cXHUwMDNlYmlfd3JpdGVfaGludDtcXG4gXFx0YmlvLVxcdTAwM2ViaV93cml0ZV9zdHJlYW0gPSBiaW9fc3JjLVxcdTAwM2ViaV93cml0ZV9zdHJlYW07XFxuK1xcdGJpby1cXHUwMDNlYmlfYnZlY19nYXBfYml0ID0gYmlvX3NyYy1cXHUwMDNlYmlfYnZlY19nYXBfYml0O1xcbiBcXHRiaW8tXFx1MDAzZWJpX2l0ZXIgPSBiaW9fc3JjLVxcdTAwM2ViaV9pdGVyO1xcbiBcXHRiaW8tXFx1MDAzZWJpX2lvX3ZlYyA9IGJpb19zcmMtXFx1MDAzZWJpX2lvX3ZlYztcXG4gXFxuQEAgLTE5NzEsNiArMTk3Miw3IEBAIHN0cnVjdCBiaW8gKmJpb19zcGxpdChzdHJ1Y3QgYmlvICpiaW8sIGludCBzZWN0b3JzLFxcbiBcXHRcXHRiaW9faW50ZWdyaXR5X3RyaW0oc3BsaXQpO1xcbiBcXG4gXFx0YmlvX2FkdmFuY2UoYmlvLCBzcGxpdC1cXHUwMDNlYmlfaXRlci5iaV9zaXplKTtcXG4rXFx0YmlvLVxcdTAwM2ViaV9idmVjX2dhcF9iaXQgPSAwO1xcbiBcXG4gXFx0aWYgKGJpb19mbGFnZ2VkKGJpbywgQklPX1RSQUNFX0NPTVBMRVRJT04pKVxcbiBcXHRcXHRiaW9fc2V0X2ZsYWcoc3BsaXQsIEJJT19UUkFDRV9DT01QTEVUSU9OKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6MzU6MjEuMzI4MTk3MzMyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTU5NjkwMTEyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmlvX2FsbG9jX2Nsb25lXCIsXG4gICAgXCJiaW9faW5pdF9jbG9uZVwiLFxuICAgIFwiYmlvX3NwbGl0XCIsXG4gICAgXCJibGtfcnFfYXBwZW5kX2Jpb1wiLFxuICAgIFwiYmlvX3NwbGl0X2lvX2F0XCIsXG4gICAgXCJiaW9fc2VnX2dhcFwiLFxuICAgIFwiYmxrX21xX3N1Ym1pdF9iaW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBtaXNzaW5nIGluaXRpYWxpemF0aW9uIGFuZCBjb3B5aW5nIG9mIGBiaV9idmVjX2dhcF9iaXRgIGluIGBiaW9fc3BsaXRgIGFuZCBgX19iaW9fY2xvbmVgLiBUaGlzIGZpZWxkIGlzIHVzZWQgdG8gdHJhY2sgZ2FwIGJpdHMgZm9yIGJpbyB2ZWN0b3JzIGFuZCBpcyBjb25zdW1lZCBieSBjb3JlIGJsb2NrIGxheWVyIGZ1bmN0aW9ucyBsaWtlIGBibGtfcnFfYXBwZW5kX2Jpb2AgYW5kIGBiaW9fc3BsaXRfaW9fYXRgLiBGdXp6aW5nIHRoZXNlIGZ1bmN0aW9ucyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIGNvcnJlY3QgaGFuZGxpbmcgb2YgYmlvIHZlY3RvciBnYXBzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NjU5NzAwMDNhNjc5ZDgwZmZkYmZjNTUyYmIxZDFjNmZmNDkzNjY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTc6MzU6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9iaW8uYyBiL2Jsb2NrL2Jpby5jXG5pbmRleCA4OThiMmY1ZWY4YzgxLi4zM2FhNDM5YzFiYWUyIDEwMDY0NFxuLS0tIGEvYmxvY2svYmlvLmNcbisrKyBiL2Jsb2NrL2Jpby5jXG5AQCAtODU5LDYgKzg1OSw3IEBAIHN0YXRpYyBpbnQgX19iaW9fY2xvbmUoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmlvICpiaW9fc3JjLCBnZnBfdCBnZnApXG4gXHRiaW8tXHUwMDNlYmlfaW9wcmlvID0gYmlvX3NyYy1cdTAwM2ViaV9pb3ByaW87XG4gXHRiaW8tXHUwMDNlYmlfd3JpdGVfaGludCA9IGJpb19zcmMtXHUwMDNlYmlfd3JpdGVfaGludDtcbiBcdGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gPSBiaW9fc3JjLVx1MDAzZWJpX3dyaXRlX3N0cmVhbTtcbitcdGJpby1cdTAwM2ViaV9idmVjX2dhcF9iaXQgPSBiaW9fc3JjLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdDtcbiBcdGJpby1cdTAwM2ViaV9pdGVyID0gYmlvX3NyYy1cdTAwM2ViaV9pdGVyO1xuIFx0YmlvLVx1MDAzZWJpX2lvX3ZlYyA9IGJpb19zcmMtXHUwMDNlYmlfaW9fdmVjO1xuIFxuQEAgLTE5NzEsNiArMTk3Miw3IEBAIHN0cnVjdCBiaW8gKmJpb19zcGxpdChzdHJ1Y3QgYmlvICpiaW8sIGludCBzZWN0b3JzLFxuIFx0XHRiaW9faW50ZWdyaXR5X3RyaW0oc3BsaXQpO1xuIFxuIFx0YmlvX2FkdmFuY2UoYmlvLCBzcGxpdC1cdTAwM2ViaV9pdGVyLmJpX3NpemUpO1xuK1x0YmlvLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCA9IDA7XG4gXG4gXHRpZiAoYmlvX2ZsYWdnZWQoYmlvLCBCSU9fVFJBQ0VfQ09NUExFVElPTikpXG4gXHRcdGJpb19zZXRfZmxhZyhzcGxpdCwgQklPX1RSQUNFX0NPTVBMRVRJT04pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6MzU6MjEuMzI4MTk5OTEyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE3Njc4MzUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJJTyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGJsb2NrL2Jpby5jYCwgaW50ZXJlc3RpbmcuIFNwZWNpZmljYWxseSwgaXQncyBhZGRpbmcgYGJpby1cdTAwM2ViaV9idmVjX2dhcF9iaXQgPSBiaW9fc3JjLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdDtgIHdpdGhpbiB0aGUgYF9fYmlvX2Nsb25lYCBmdW5jdGlvbiBhbmQgcmVzZXR0aW5nIGl0IHRvIGAwYCBpbiBgYmlvX3NwbGl0YC4gSW1tZWRpYXRlbHksIG15IGJyYWluIHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucy4gSSBrbm93IHRob3NlIGFyZSB0d28gdmVyeSBmdW5kYW1lbnRhbCBibG9jayBsYXllciBmdW5jdGlvbnMuIGBfX2Jpb19jbG9uZWAgaXMsIHdlbGwsIGNsb25pbmcgYSBiaW8uIE1ha2VzIHNlbnNlIHRvIHBhc3MgdGhhdCBnYXAgaW5mb3JtYXRpb24gb3Zlciwgb3RoZXJ3aXNlIHdoYXQncyB0aGUgdXNlIGluIGNvcHlpbmcgdGhlIHN0cnVjdHVyZS4gQW5kIGBiaW9fc3BsaXRgPyBUaGF0J3Mgd2hlbiB3ZSdyZSBicmVha2luZyBhIGJpbyBkb3duIGludG8gc21hbGxlciBwaWVjZXMuIFNvIHRoZSBnYXAgYml0IG5lZWRzIHJlc2V0dGluZyB0aGVyZS5cblxuUmlnaHQsIHNvIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIGNoYW5nZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYGJpX2J2ZWNfZ2FwX2JpdGAuIExldCdzIGdyZXAgZm9yIHRoYXQgYW5kIHNlZSB3aGVyZSBpdCdzIHVzZWQsIGhvdyBpdCdzIGRlZmluZWQsIHdoYXQgdGhlIGNvbW1lbnRzIHNheS4gVGhhdCB3aWxsIHRlbGwgdGhlIGZ1bGwgc3RvcnkgaGVyZS4gSSBoYXZlIGEgaHVuY2gsIGJhc2VkIG9uIHRoZSBjb250ZXh0LCBidXQgbGV0J3MgbWFrZSBzdXJlIHRoYXQgaHVuY2ggaXMgYWNjdXJhdGUgYmVmb3JlIEkgc3RhcnQgbWFraW5nIGFueSBhc3N1bXB0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzOSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE3OjM1OjI2LjUwNDk4NjgzMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkzMjgyMTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJpX2J2ZWNfZ2FwX2JpdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iaW8uYz0yMTc9dm9pZCBiaW9faW5pdChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBiaW9fdmVjICp0YWJsZSxcXG4tLVxcbmJsb2NrL2Jpby5jLTIyNy1cXHRiaW8tXFx1MDAzZWJpX3N0YXR1cyA9IDA7XFxuYmxvY2svYmlvLmM6MjI4OlxcdGJpby1cXHUwMDNlYmlfYnZlY19nYXBfYml0ID0gMDtcXG5ibG9jay9iaW8uYy0yMjktXFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IDA7XFxuLS1cXG5ibG9jay9iaW8uYz04NTY9c3RhdGljIGludCBfX2Jpb19jbG9uZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW8gKmJpb19zcmMsIGdmcF90IGdmcClcXG4tLVxcbmJsb2NrL2Jpby5jLTg2MS1cXHRiaW8tXFx1MDAzZWJpX3dyaXRlX3N0cmVhbSA9IGJpb19zcmMtXFx1MDAzZWJpX3dyaXRlX3N0cmVhbTtcXG5ibG9jay9iaW8uYzo4NjI6XFx0YmlvLVxcdTAwM2ViaV9idmVjX2dhcF9iaXQgPSBiaW9fc3JjLVxcdTAwM2ViaV9idmVjX2dhcF9iaXQ7XFxuYmxvY2svYmlvLmMtODYzLVxcdGJpby1cXHUwMDNlYmlfaXRlciA9IGJpb19zcmMtXFx1MDAzZWJpX2l0ZXI7XFxuLS1cXG5ibG9jay9iaW8uYz0xOTQ3PXN0cnVjdCBiaW8gKmJpb19zcGxpdChzdHJ1Y3QgYmlvICpiaW8sIGludCBzZWN0b3JzLFxcbi0tXFxuYmxvY2svYmlvLmMtMTk3NC1cXHRiaW9fYWR2YW5jZShiaW8sIHNwbGl0LVxcdTAwM2ViaV9pdGVyLmJpX3NpemUpO1xcbmJsb2NrL2Jpby5jOjE5NzU6XFx0YmlvLVxcdTAwM2ViaV9idmVjX2dhcF9iaXQgPSAwO1xcbmJsb2NrL2Jpby5jLTE5NzYtXFxuLS1cXG5ibG9jay9ibGstbWFwLmM9NDI2PWludCBibGtfcnFfYXBwZW5kX2JpbyhzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2Jsay1tYXAuYy00NTYtXFx0cnEtXFx1MDAzZV9fZGF0YV9sZW4gPSBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZTtcXG5ibG9jay9ibGstbWFwLmM6NDU3OlxcdHJxLVxcdTAwM2VwaHlzX2dhcF9iaXQgPSBiaW8tXFx1MDAzZWJpX2J2ZWNfZ2FwX2JpdDtcXG5ibG9jay9ibGstbWFwLmMtNDU4LVxcdHJldHVybiAwO1xcbi0tXFxuYmxvY2svYmxrLW1lcmdlLmM9MzM1PWludCBiaW9fc3BsaXRfaW9fYXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXFxuLS1cXG5ibG9jay9ibGstbWVyZ2UuYy0zNzktXFx0KnNlZ3MgPSBuc2VncztcXG5ibG9jay9ibGstbWVyZ2UuYzozODA6XFx0YmlvLVxcdTAwM2ViaV9idmVjX2dhcF9iaXQgPSBmZnMoZ2Fwcyk7XFxuYmxvY2svYmxrLW1lcmdlLmMtMzgxLVxcdHJldHVybiAwO1xcbi0tXFxuYmxvY2svYmxrLW1lcmdlLmMtNDE1LVxcdGJpb19jbGVhcl9wb2xsZWQoYmlvKTtcXG5ibG9jay9ibGstbWVyZ2UuYzo0MTY6XFx0YmlvLVxcdTAwM2ViaV9idmVjX2dhcF9iaXQgPSBmZnMoZ2Fwcyk7XFxuYmxvY2svYmxrLW1lcmdlLmMtNDE3LVxcdHJldHVybiBieXRlcyBcXHUwMDNlXFx1MDAzZSBTRUNUT1JfU0hJRlQ7XFxuLS1cXG5ibG9jay9ibGstbWVyZ2UuYz03NTI9dTggYmlvX3NlZ19nYXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKnByZXYsIHN0cnVjdCBiaW8gKm5leHQsXFxuLS1cXG5ibG9jay9ibGstbWVyZ2UuYy03NTktXFxuYmxvY2svYmxrLW1lcmdlLmM6NzYwOlxcdGdhcHNfYml0ID0gbWluX25vdF96ZXJvKGdhcHNfYml0LCBwcmV2LVxcdTAwM2ViaV9idmVjX2dhcF9iaXQpO1xcbmJsb2NrL2Jsay1tZXJnZS5jOjc2MTpcXHRnYXBzX2JpdCA9IG1pbl9ub3RfemVybyhnYXBzX2JpdCwgbmV4dC1cXHUwMDNlYmlfYnZlY19nYXBfYml0KTtcXG5ibG9jay9ibGstbWVyZ2UuYy03NjItXFxuLS1cXG5ibG9jay9ibGstbXEuYz0yNjU0PXN0YXRpYyB2b2lkIGJsa19tcV9iaW9fdG9fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBiaW8gKmJpbyxcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTI2NjQtXFx0cnEtXFx1MDAzZV9fZGF0YV9sZW4gPSBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZTtcXG5ibG9jay9ibGstbXEuYzoyNjY1OlxcdHJxLVxcdTAwM2VwaHlzX2dhcF9iaXQgPSBiaW8tXFx1MDAzZWJpX2J2ZWNfZ2FwX2JpdDtcXG5ibG9jay9ibGstbXEuYy0yNjY2LVxcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaD0yMTA9c3RydWN0IGJpbyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oLTIzMC1cXHQgKi9cXG5pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oOjIzMTpcXHR1OFxcdFxcdFxcdGJpX2J2ZWNfZ2FwX2JpdDtcXG5pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oLTIzMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6MzU6MjguMDk4Mjc2MDA0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5ODYxMjY1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCdWcgRml4IGZvciBQb3RlbnRpYWwgRnV6emluZyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGFuIGlzc3VlIHdoZXJlIGBiaV9idmVjX2dhcF9iaXRgIGlzbid0IGhhbmRsZWQgY29ycmVjdGx5IGR1cmluZyBiaW8gY2xvbmluZyBhbmQgc3BsaXR0aW5nLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgYF9fYmlvX2Nsb25lYCBpc24ndCBjb3B5aW5nIHRoZSBiaXQsIGFuZCBgYmlvX3NwbGl0YCBpc24ndCByZXNldHRpbmcgaXQuIFRoaXMgc2NyZWFtcyBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXQgdG8gbWUuIEEgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUgaGVyZSBjb3VsZCBiZSBwcmV0dHkgbmFzdHkuXG5cbk15IGluaXRpYWwgdGhvdWdodHMgYXJlLCB3aGVyZSBkb2VzIHRoaXMgZnVuY3Rpb25hbGl0eSBzaXQgaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3M/IFdlbGwsIHRoZSBjb3JlIGZ1bmN0aW9ucyBhcmUgYF9fYmlvX2Nsb25lYCBhbmQgYGJpb19zcGxpdGAuIFNpbmNlIGBfX2Jpb19jbG9uZWAgaXMgc3RhdGljLCBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gaXRzIGNhbGxlcnMuIFRoYXQgbmFycm93cyB0aGUgZmllbGQgYSBiaXQuIExldCdzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBjb2RlLCBgYmlvX2Nsb25lX2Zhc3RgIGFuZCBgYmlvX2FsbG9jX2Nsb25lYCBhcmUga2V5IGNhbGxlcnMgb2YgYF9fYmlvX2Nsb25lYC4gTm93IGl0IGlzIHRpbWUgdG8gY2hlY2sgYWxsIGNhbGxlcnMgb2YgYF9fYmlvX2Nsb25lYC4gVGhlc2UgYXJlIHRoZSBhcmVhcyB0aGF0IG5lZWQgZm9jdXNlZCBmdXp6aW5nIGF0dGVudGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU3OCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNzozNTozMS43OTY4OTA4N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE2ODI1NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYmlvX2Nsb25lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jpby5jPTg1ND1FWFBPUlRfU1lNQk9MKGJpb19wdXQpO1xcbmJsb2NrL2Jpby5jLTg1NS1cXG5ibG9jay9iaW8uYzo4NTY6c3RhdGljIGludCBfX2Jpb19jbG9uZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW8gKmJpb19zcmMsIGdmcF90IGdmcClcXG5ibG9jay9iaW8uYy04NTcte1xcbi0tXFxuYmxvY2svYmlvLmM9ODk0PXN0cnVjdCBiaW8gKmJpb19hbGxvY19jbG9uZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmlvICpiaW9fc3JjLFxcbi0tXFxuYmxvY2svYmlvLmMtOTAyLVxcbmJsb2NrL2Jpby5jOjkwMzpcXHRpZiAoX19iaW9fY2xvbmUoYmlvLCBiaW9fc3JjLCBnZnApIFxcdTAwM2MgMCkge1xcbmJsb2NrL2Jpby5jLTkwNC1cXHRcXHRiaW9fcHV0KGJpbyk7XFxuLS1cXG5ibG9jay9iaW8uYz05MjE9aW50IGJpb19pbml0X2Nsb25lKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBiaW8gKmJpbyxcXG4tLVxcbmJsb2NrL2Jpby5jLTkyNi1cXHRiaW9faW5pdChiaW8sIGJkZXYsIE5VTEwsIDAsIGJpb19zcmMtXFx1MDAzZWJpX29wZik7XFxuYmxvY2svYmlvLmM6OTI3OlxcdHJldCA9IF9fYmlvX2Nsb25lKGJpbywgYmlvX3NyYywgZ2ZwKTtcXG5ibG9jay9iaW8uYy05MjgtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6MzU6MzMuNDEzNzIxMDY1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzMzQ1Njg0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2Ugc3ltYm9sczpcblxuKipEZWVwIERpdmUgaW50byBCbG9jayBJL08gQ2xvbmVzIGFuZCBTcGxpdHMqKlxuXG5SaWdodCwgbGV0J3MgemVybyBpbiBvbiB0aGVzZSBmdW5jdGlvbnM6IGBiaW9fYWxsb2NfY2xvbmVgLCBgYmlvX2luaXRfY2xvbmVgLCBhbmQgYGJpb19zcGxpdGAuIFRoZXkgc2VlbSBsaWtlIHByaW1lIHRhcmdldHMgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBCbG9jayBJL08gbGF5ZXIgaGFuZGxlcyBjbG9uaW5nIGFuZCBzcGxpdHRpbmcgb2YgSS9PIHJlcXVlc3RzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgYmlvX3NwbGl0YC4gVGhhdCdzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgYXJlIGdvaW5nIHRvIGJlLiBJdCdsbCByZXZlYWwgaG93IGFuZCB3aHkgd2UncmUgYnJlYWtpbmcgdXAgdGhlc2UgSS9PIG9wZXJhdGlvbnMsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBvcHRpbWl6YXRpb24gYW5kIHVuZGVyc3RhbmRpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgY2hhaW5zIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIyMSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE3OjM1OjM2LjU0NzE4MDE1N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDgyNjk0NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJpb19zcGxpdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDUxNSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9ibG9jay9iaW92ZWNzLnJzdD00OT1hZHZhbnRhZ2VzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9ibG9jay9iaW92ZWNzLnJzdC03NC1cXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb3ZlY3MucnN0Ojc1OiAqIFNwbGl0dGluZyBiaW9zIGlzIG5vdyBtdWNoIHNpbXBsZXIuIFRoZSBvbGQgYmlvX3NwbGl0KCkgZGlkbid0IGV2ZW4gd29yayBvblxcbkRvY3VtZW50YXRpb24vYmxvY2svYmlvdmVjcy5yc3QtNzYtICAgYmlvcyB3aXRoIG1vcmUgdGhhbiBhIHNpbmdsZSBidmVjISBOb3csIHdlIGNhbiBlZmZpY2llbnRseSBzcGxpdCBhcmJpdHJhcnlcXG4tLVxcbmJsb2NrL2Jpby5jPTE5MzE9RVhQT1JUX1NZTUJPTChiaW9fZW5kaW8pO1xcbi0tXFxuYmxvY2svYmlvLmMtMTkzMy0vKipcXG5ibG9jay9iaW8uYzoxOTM0OiAqIGJpb19zcGxpdCAtIHNwbGl0IGEgYmlvXFxuYmxvY2svYmlvLmMtMTkzNS0gKiBAYmlvOlxcdGJpbyB0byBzcGxpdFxcbi0tXFxuYmxvY2svYmlvLmMtMTk0Ni0gKi9cXG5ibG9jay9iaW8uYzoxOTQ3OnN0cnVjdCBiaW8gKmJpb19zcGxpdChzdHJ1Y3QgYmlvICpiaW8sIGludCBzZWN0b3JzLFxcbmJsb2NrL2Jpby5jLTE5NDgtXFx0XFx0ICAgICAgZ2ZwX3QgZ2ZwLCBzdHJ1Y3QgYmlvX3NldCAqYnMpXFxuLS1cXG5ibG9jay9iaW8uYy0xOTgxLX1cXG5ibG9jay9iaW8uYzoxOTgyOkVYUE9SVF9TWU1CT0woYmlvX3NwbGl0KTtcXG5ibG9jay9iaW8uYy0xOTgzLVxcbi0tXFxuYmxvY2svYmxrLW1hcC5jPTQyNj1pbnQgYmxrX3JxX2FwcGVuZF9iaW8oc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5ibG9jay9ibGstbWFwLmMtNDMzLVxcdC8qIGNoZWNrIHRoYXQgdGhlIGRhdGEgbGF5b3V0IG1hdGNoZXMgdGhlIGhhcmR3YXJlIHJlc3RyaWN0aW9ucyAqL1xcbmJsb2NrL2Jsay1tYXAuYzo0MzQ6XFx0cmV0ID0gYmlvX3NwbGl0X2lvX2F0KGJpbywgbGltLCBcXHUwMDI2bnJfc2VncywgbWF4X2J5dGVzLCAwKTtcXG5ibG9jay9ibGstbWFwLmMtNDM1LVxcdGlmIChyZXQpIHtcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jPTExOT1zdHJ1Y3QgYmlvICpiaW9fc3VibWl0X3NwbGl0X2Jpb3NldChzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGludCBzcGxpdF9zZWN0b3JzLFxcbi0tXFxuYmxvY2svYmxrLW1lcmdlLmMtMTIxLXtcXG5ibG9jay9ibGstbWVyZ2UuYzoxMjI6XFx0c3RydWN0IGJpbyAqc3BsaXQgPSBiaW9fc3BsaXQoYmlvLCBzcGxpdF9zZWN0b3JzLCBHRlBfTk9JTywgYnMpO1xcbmJsb2NrL2Jsay1tZXJnZS5jLTEyMy1cXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jPTE0Mj1zdGF0aWMgc3RydWN0IGJpbyAqYmlvX3N1Ym1pdF9zcGxpdChzdHJ1Y3QgYmlvICpiaW8sIGludCBzcGxpdF9zZWN0b3JzKVxcbi0tXFxuYmxvY2svYmxrLW1lcmdlLmMtMTUwLVxcdFxcdGJpbyA9IGJpb19zdWJtaXRfc3BsaXRfYmlvc2V0KGJpbywgc3BsaXRfc2VjdG9ycyxcXG5ibG9jay9ibGstbWVyZ2UuYzoxNTE6XFx0XFx0XFx0XFx0XFx1MDAyNmJpby1cXHUwMDNlYmlfYmRldi1cXHUwMDNlYmRfZGlzay1cXHUwMDNlYmlvX3NwbGl0KTtcXG5ibG9jay9ibGstbWVyZ2UuYy0xNTItXFx0XFx0aWYgKGJpbylcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jLTE1OC1cXG5ibG9jay9ibGstbWVyZ2UuYzoxNTk6c3RhdGljIHN0cnVjdCBiaW8gKl9fYmlvX3NwbGl0X2Rpc2NhcmQoc3RydWN0IGJpbyAqYmlvLFxcbmJsb2NrL2Jsay1tZXJnZS5jLTE2MC1cXHRcXHRjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIHVuc2lnbmVkICpuc2VncyxcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jLTE5NC1cXG5ibG9jay9ibGstbWVyZ2UuYzoxOTU6c3RydWN0IGJpbyAqYmlvX3NwbGl0X2Rpc2NhcmQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXFxuYmxvY2svYmxrLW1lcmdlLmMtMTk2LVxcdFxcdHVuc2lnbmVkICpuc2VncylcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jLTIwNC1cXG5ibG9jay9ibGstbWVyZ2UuYzoyMDU6XFx0cmV0dXJuIF9fYmlvX3NwbGl0X2Rpc2NhcmQoYmlvLCBsaW0sIG5zZWdzLCBtYXhfc2VjdG9ycyk7XFxuYmxvY2svYmxrLW1lcmdlLmMtMjA2LX1cXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jPTI4Mj1zdGF0aWMgYm9vbCBidmVjX3NwbGl0X3NlZ3MoY29uc3Qgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxcbi0tXFxuYmxvY2svYmxrLW1lcmdlLmMtMzA3LVxcbmJsb2NrL2Jsay1tZXJnZS5jOjMwODpzdGF0aWMgdW5zaWduZWQgaW50IGJpb19zcGxpdF9hbGlnbm1lbnQoc3RydWN0IGJpbyAqYmlvLFxcbmJsb2NrL2Jsay1tZXJnZS5jLTMwOS1cXHRcXHRjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXFxuLS1cXG5ibG9jay9ibGstbWVyZ2UuYz0zMTY9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYnZlY19zZWdfZ2FwKHN0cnVjdCBiaW9fdmVjICpidnBydixcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jLTMyMi0vKipcXG5ibG9jay9ibGstbWVyZ2UuYzozMjM6ICogYmlvX3NwbGl0X2lvX2F0IC0gY2hlY2sgaWYgYW5kIHdoZXJlIHRvIHNwbGl0IGEgYmlvXFxuYmxvY2svYmxrLW1lcmdlLmMtMzI0LSAqIEBiaW86ICBbaW5dIGJpbyB0byBiZSBzcGxpdFxcbi0tXFxuYmxvY2svYmxrLW1lcmdlLmMtMzM0LSAqL1xcbmJsb2NrL2Jsay1tZXJnZS5jOjMzNTppbnQgYmlvX3NwbGl0X2lvX2F0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxcbmJsb2NrL2Jsay1tZXJnZS5jLTMzNi1cXHRcXHR1bnNpZ25lZCAqc2VncywgdW5zaWduZWQgbWF4X2J5dGVzLCB1bnNpZ25lZCBsZW5fYWxpZ25fbWFzaylcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jLTQwNS1cXHQgKi9cXG5ibG9jay9ibGstbWVyZ2UuYzo0MDY6XFx0Ynl0ZXMgPSBBTElHTl9ET1dOKGJ5dGVzLCBiaW9fc3BsaXRfYWxpZ25tZW50KGJpbywgbGltKSk7XFxuYmxvY2svYmxrLW1lcmdlLmMtNDA3LVxcdGlmICghYnl0ZXMpXFxuLS1cXG5ibG9jay9ibGstbWVyZ2UuYy00MTgtfVxcbmJsb2NrL2Jsay1tZXJnZS5jOjQxOTpFWFBPUlRfU1lNQk9MX0dQTChiaW9fc3BsaXRfaW9fYXQpO1xcbmJsb2NrL2Jsay1tZXJnZS5jLTQyMC1cXG5ibG9jay9ibGstbWVyZ2UuYzo0MjE6c3RydWN0IGJpbyAqYmlvX3NwbGl0X3J3KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxcbmJsb2NrL2Jsay1tZXJnZS5jLTQyMi1cXHRcXHR1bnNpZ25lZCAqbnJfc2VncylcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jLTQyNC1cXHRyZXR1cm4gYmlvX3N1Ym1pdF9zcGxpdChiaW8sXFxuYmxvY2svYmxrLW1lcmdlLmM6NDI1OlxcdFxcdGJpb19zcGxpdF9yd19hdChiaW8sIGxpbSwgbnJfc2VncyxcXG5ibG9jay9ibGstbWVyZ2UuYy00MjYtXFx0XFx0XFx0Z2V0X21heF9pb19zaXplKGJpbywgbGltKSBcXHUwMDNjXFx1MDAzYyBTRUNUT1JfU0hJRlQpKTtcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jLTQzMS0gKlxcbmJsb2NrL2Jsay1tZXJnZS5jOjQzMjogKiBCdXQgd2Ugd2FudCB0aGUgbnJfc2VncyBjYWxjdWxhdGlvbiBwcm92aWRlZCBieSBiaW9fc3BsaXRfcndfYXQsIGFuZCBoYXZpbmdcXG5ibG9jay9ibGstbWVyZ2UuYy00MzMtICogYSBnb29kIHNhbml0eSBjaGVjayB0aGF0IHRoZSBzdWJtaXR0ZXIgYnVpbHQgdGhlIGJpbyBjb3JyZWN0bHkgaXMgbmljZSB0b1xcbi0tXFxuYmxvY2svYmxrLW1lcmdlLmMtNDM1LSAqL1xcbmJsb2NrL2Jsay1tZXJnZS5jOjQzNjpzdHJ1Y3QgYmlvICpiaW9fc3BsaXRfem9uZV9hcHBlbmQoc3RydWN0IGJpbyAqYmlvLFxcbmJsb2NrL2Jsay1tZXJnZS5jLTQzNy1cXHRcXHRjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIHVuc2lnbmVkICpucl9zZWdzKVxcbi0tXFxuYmxvY2svYmxrLW1lcmdlLmMtNDQwLVxcbmJsb2NrL2Jsay1tZXJnZS5jOjQ0MTpcXHRzcGxpdF9zZWN0b3JzID0gYmlvX3NwbGl0X3J3X2F0KGJpbywgbGltLCBucl9zZWdzLFxcbmJsb2NrL2Jsay1tZXJnZS5jLTQ0Mi1cXHRcXHRcXHRsaW0tXFx1MDAzZW1heF96b25lX2FwcGVuZF9zZWN0b3JzIFxcdTAwM2NcXHUwMDNjIFNFQ1RPUl9TSElGVCk7XFxuLS1cXG5ibG9jay9ibGstbWVyZ2UuYy00NDctXFxuYmxvY2svYmxrLW1lcmdlLmM6NDQ4OnN0cnVjdCBiaW8gKmJpb19zcGxpdF93cml0ZV96ZXJvZXMoc3RydWN0IGJpbyAqYmlvLFxcbmJsb2NrL2Jsay1tZXJnZS5jLTQ0OS1cXHRcXHRjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIHVuc2lnbmVkICpuc2VncylcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jLTQ2OC0vKipcXG5ibG9jay9ibGstbWVyZ2UuYzo0Njk6ICogYmlvX3NwbGl0X3RvX2xpbWl0cyAtIHNwbGl0IGEgYmlvIHRvIGZpdCB0aGUgcXVldWUgbGltaXRzXFxuYmxvY2svYmxrLW1lcmdlLmMtNDcwLSAqIEBiaW86ICAgICBiaW8gdG8gYmUgc3BsaXRcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jLTQ3NS0gKlxcbmJsb2NrL2Jsay1tZXJnZS5jOjQ3NjogKiBUaGUgc3BsaXQgYmlvIGlzIGFsbG9jYXRlZCBmcm9tIEBxLVxcdTAwM2ViaW9fc3BsaXQsIHdoaWNoIGlzIHByb3ZpZGVkIGJ5IHRoZVxcbmJsb2NrL2Jsay1tZXJnZS5jLTQ3Ny0gKiBibG9jayBsYXllci5cXG5ibG9jay9ibGstbWVyZ2UuYy00NzgtICovXFxuYmxvY2svYmxrLW1lcmdlLmM6NDc5OnN0cnVjdCBiaW8gKmJpb19zcGxpdF90b19saW1pdHMoc3RydWN0IGJpbyAqYmlvKVxcbmJsb2NrL2Jsay1tZXJnZS5jLTQ4MC17XFxuLS1cXG5ibG9jay9ibGstbWVyZ2UuYy00ODItXFxuYmxvY2svYmxrLW1lcmdlLmM6NDgzOlxcdHJldHVybiBfX2Jpb19zcGxpdF90b19saW1pdHMoYmlvLCBiZGV2X2xpbWl0cyhiaW8tXFx1MDAzZWJpX2JkZXYpLCBcXHUwMDI2bnJfc2Vncyk7XFxuYmxvY2svYmxrLW1lcmdlLmMtNDg0LX1cXG5ibG9jay9ibGstbWVyZ2UuYzo0ODU6RVhQT1JUX1NZTUJPTChiaW9fc3BsaXRfdG9fbGltaXRzKTtcXG5ibG9jay9ibGstbWVyZ2UuYy00ODYtXFxuLS1cXG5ibG9jay9ibGstbXEuYz0zMDkzPXZvaWQgYmxrX21xX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxcbi0tXFxuYmxvY2svYmxrLW1xLmMtMzE0NS1cXG5ibG9jay9ibGstbXEuYzozMTQ2OlxcdGJpbyA9IF9fYmlvX3NwbGl0X3RvX2xpbWl0cyhiaW8sIFxcdTAwMjZxLVxcdTAwM2VsaW1pdHMsIFxcdTAwMjZucl9zZWdzKTtcXG5ibG9jay9ibGstbXEuYy0zMTQ3LVxcdGlmICghYmlvKVxcbi0tXFxuYmxvY2svYmxrLmg9Mzc3PXNzaXplX3QgcGFydF90aW1lb3V0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKixcXG4tLVxcbmJsb2NrL2Jsay5oLTM3OS1cXG5ibG9jay9ibGsuaDozODA6c3RydWN0IGJpbyAqYmlvX3NwbGl0X2Rpc2NhcmQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXFxuYmxvY2svYmxrLmgtMzgxLVxcdFxcdHVuc2lnbmVkICpuc2Vncyk7XFxuYmxvY2svYmxrLmg6MzgyOnN0cnVjdCBiaW8gKmJpb19zcGxpdF93cml0ZV96ZXJvZXMoc3RydWN0IGJpbyAqYmlvLFxcbmJsb2NrL2Jsay5oLTM4My1cXHRcXHRjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIHVuc2lnbmVkICpuc2Vncyk7XFxuYmxvY2svYmxrLmg6Mzg0OnN0cnVjdCBiaW8gKmJpb19zcGxpdF9ydyhzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSxcXG5ibG9jay9ibGsuaC0zODUtXFx0XFx0dW5zaWduZWQgKm5yX3NlZ3MpO1xcbmJsb2NrL2Jsay5oOjM4NjpzdHJ1Y3QgYmlvICpiaW9fc3BsaXRfem9uZV9hcHBlbmQoc3RydWN0IGJpbyAqYmlvLFxcbmJsb2NrL2Jsay5oLTM4Ny1cXHRcXHRjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIHVuc2lnbmVkICpucl9zZWdzKTtcXG4tLVxcbmJsb2NrL2Jsay5oPTM5Nz1zdGF0aWMgaW5saW5lIGJvb2wgYmlvX21heV9uZWVkX3NwbGl0KHN0cnVjdCBiaW8gKmJpbyxcXG4tLVxcbmJsb2NrL2Jsay5oLTQxNi0vKipcXG5ibG9jay9ibGsuaDo0MTc6ICogX19iaW9fc3BsaXRfdG9fbGltaXRzIC0gc3BsaXQgYSBiaW8gdG8gZml0IHRoZSBxdWV1ZSBsaW1pdHNcXG5ibG9jay9ibGsuaC00MTgtICogQGJpbzogICAgIGJpbyB0byBiZSBzcGxpdFxcbi0tXFxuYmxvY2svYmxrLmgtNDI1LSAqXFxuYmxvY2svYmxrLmg6NDI2OiAqIFRoZSBzcGxpdCBiaW8gaXMgYWxsb2NhdGVkIGZyb20gQHEtXFx1MDAzZWJpb19zcGxpdCwgd2hpY2ggaXMgcHJvdmlkZWQgYnkgdGhlXFxuYmxvY2svYmxrLmgtNDI3LSAqIGJsb2NrIGxheWVyLlxcbmJsb2NrL2Jsay5oLTQyOC0gKi9cXG5ibG9jay9ibGsuaDo0Mjk6c3RhdGljIGlubGluZSBzdHJ1Y3QgYmlvICpfX2Jpb19zcGxpdF90b19saW1pdHMoc3RydWN0IGJpbyAqYmlvLFxcbmJsb2NrL2Jsay5oLTQzMC1cXHRcXHRjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIHVuc2lnbmVkIGludCAqbnJfc2VncylcXG4tLVxcbmJsb2NrL2Jsay5oLTQzNS1cXHRcXHRpZiAoYmlvX21heV9uZWVkX3NwbGl0KGJpbywgbGltKSlcXG5ibG9jay9ibGsuaDo0MzY6XFx0XFx0XFx0cmV0dXJuIGJpb19zcGxpdF9ydyhiaW8sIGxpbSwgbnJfc2Vncyk7XFxuYmxvY2svYmxrLmgtNDM3LVxcdFxcdCpucl9zZWdzID0gMTtcXG4tLVxcbmJsb2NrL2Jsay5oLTQzOS1cXHRjYXNlIFJFUV9PUF9aT05FX0FQUEVORDpcXG5ibG9jay9ibGsuaDo0NDA6XFx0XFx0cmV0dXJuIGJpb19zcGxpdF96b25lX2FwcGVuZChiaW8sIGxpbSwgbnJfc2Vncyk7XFxuYmxvY2svYmxrLmgtNDQxLVxcdGNhc2UgUkVRX09QX0RJU0NBUkQ6XFxuYmxvY2svYmxrLmgtNDQyLVxcdGNhc2UgUkVRX09QX1NFQ1VSRV9FUkFTRTpcXG5ibG9jay9ibGsuaDo0NDM6XFx0XFx0cmV0dXJuIGJpb19zcGxpdF9kaXNjYXJkKGJpbywgbGltLCBucl9zZWdzKTtcXG5ibG9jay9ibGsuaC00NDQtXFx0Y2FzZSBSRVFfT1BfV1JJVEVfWkVST0VTOlxcbmJsb2NrL2Jsay5oOjQ0NTpcXHRcXHRyZXR1cm4gYmlvX3NwbGl0X3dyaXRlX3plcm9lcyhiaW8sIGxpbSwgbnJfc2Vncyk7XFxuYmxvY2svYmxrLmgtNDQ2LVxcdGRlZmF1bHQ6XFxuLS1cXG5ibG9jay9nZW5oZC5jPTEyNzM9c3RhdGljIHZvaWQgZGlza19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmJsb2NrL2dlbmhkLmMtMTI5OS1cXG5ibG9jay9nZW5oZC5jOjEzMDA6XFx0Ymlvc2V0X2V4aXQoXFx1MDAyNmRpc2stXFx1MDAzZWJpb19zcGxpdCk7XFxuYmxvY2svZ2VuaGQuYy0xMzAxLVxcbi0tXFxuYmxvY2svZ2VuaGQuYz0xNDQ3PXN0cnVjdCBnZW5kaXNrICpfX2FsbG9jX2Rpc2tfbm9kZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IG5vZGVfaWQsXFxuLS1cXG5ibG9jay9nZW5oZC5jLTE0NTUtXFxuYmxvY2svZ2VuaGQuYzoxNDU2OlxcdGlmIChiaW9zZXRfaW5pdChcXHUwMDI2ZGlzay1cXHUwMDNlYmlvX3NwbGl0LCBCSU9fUE9PTF9TSVpFLCAwLCAwKSlcXG5ibG9jay9nZW5oZC5jLTE0NTctXFx0XFx0Z290byBvdXRfZnJlZV9kaXNrO1xcbi0tXFxuYmxvY2svZ2VuaGQuYy0xNTA2LW91dF9mcmVlX2Jpb3NldDpcXG5ibG9jay9nZW5oZC5jOjE1MDc6XFx0Ymlvc2V0X2V4aXQoXFx1MDAyNmRpc2stXFx1MDAzZWJpb19zcGxpdCk7XFxuYmxvY2svZ2VuaGQuYy0xNTA4LW91dF9mcmVlX2Rpc2s6XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZXEuYz0xNjEyPXZvaWQgZHJiZF9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlcS5jLTE2MTUtXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVxLmM6MTYxNjpcXHRiaW8gPSBiaW9fc3BsaXRfdG9fbGltaXRzKGJpbyk7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVxLmMtMTYxNy1cXHRpZiAoIWJpbylcXG4tLVxcbmRyaXZlcnMvbWQvYmNhY2hlL2JjYWNoZS5oPTI1MD1zdHJ1Y3QgYmNhY2hlX2RldmljZSB7XFxuLS1cXG5kcml2ZXJzL21kL2JjYWNoZS9iY2FjaGUuaC0yNzMtXFxuZHJpdmVycy9tZC9iY2FjaGUvYmNhY2hlLmg6Mjc0OlxcdHN0cnVjdCBiaW9fc2V0XFx0XFx0YmlvX3NwbGl0O1xcbmRyaXZlcnMvbWQvYmNhY2hlL2JjYWNoZS5oLTI3NS1cXG4tLVxcbmRyaXZlcnMvbWQvYmNhY2hlL2JjYWNoZS5oPTUxNj1zdHJ1Y3QgY2FjaGVfc2V0IHtcXG4tLVxcbmRyaXZlcnMvbWQvYmNhY2hlL2JjYWNoZS5oLTU0My1cXHRtZW1wb29sX3RcXHRcXHRiaW9fbWV0YTtcXG5kcml2ZXJzL21kL2JjYWNoZS9iY2FjaGUuaDo1NDQ6XFx0c3RydWN0IGJpb19zZXRcXHRcXHRiaW9fc3BsaXQ7XFxuZHJpdmVycy9tZC9iY2FjaGUvYmNhY2hlLmgtNTQ1LVxcbi0tXFxuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jPTE4Nz1zdGF0aWMgQ0xPU1VSRV9DQUxMQkFDSyhiY2hfZGF0YV9pbnNlcnRfc3RhcnQpXFxuLS1cXG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmMtMjA2LVxcdFxcdHN0cnVjdCBia2V5ICprO1xcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYzoyMDc6XFx0XFx0c3RydWN0IGJpb19zZXQgKnNwbGl0ID0gXFx1MDAyNm9wLVxcdTAwM2VjLVxcdTAwM2ViaW9fc3BsaXQ7XFxuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jLTIwOC1cXG4tLVxcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYz01Mjc9c3RhdGljIGludCBjYWNoZV9sb29rdXBfZm4oc3RydWN0IGJ0cmVlX29wICpvcCwgc3RydWN0IGJ0cmVlICpiLCBzdHJ1Y3QgYmtleSAqaylcXG4tLVxcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYy01NjUtXFx0XFx0XFx0XFx0ICAgICAgS0VZX09GRlNFVChrKSAtIGJpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IpLFxcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYzo1NjY6XFx0XFx0XFx0ICAgR0ZQX05PSU8sIFxcdTAwMjZzLVxcdTAwM2VkLVxcdTAwM2ViaW9fc3BsaXQpO1xcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYy01NjctXFxuLS1cXG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmM9ODkyPXN0YXRpYyBpbnQgY2FjaGVkX2Rldl9jYWNoZV9taXNzKHN0cnVjdCBidHJlZSAqYiwgc3RydWN0IHNlYXJjaCAqcyxcXG4tLVxcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYy05MDItXFx0aWYgKHMtXFx1MDAzZWNhY2hlX21pc3MgfHwgcy1cXHUwMDNlaW9wLmJ5cGFzcykge1xcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYzo5MDM6XFx0XFx0bWlzcyA9IGJpb19uZXh0X3NwbGl0KGJpbywgc2VjdG9ycywgR0ZQX05PSU8sIFxcdTAwMjZzLVxcdTAwM2VkLVxcdTAwM2ViaW9fc3BsaXQpO1xcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYy05MDQtXFx0XFx0cmV0ID0gbWlzcyA9PSBiaW8gPyBNQVBfRE9ORSA6IE1BUF9DT05USU5VRTtcXG4tLVxcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYy05MjMtXFx0bWlzcyA9IGJpb19uZXh0X3NwbGl0KGJpbywgcy1cXHUwMDNlaW5zZXJ0X2Jpb19zZWN0b3JzLCBHRlBfTk9JTyxcXG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmM6OTI0OlxcdFxcdFxcdCAgICAgIFxcdTAwMjZzLVxcdTAwM2VkLVxcdTAwM2ViaW9fc3BsaXQpO1xcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYy05MjUtXFxuLS1cXG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmMtOTMwLVxcdFxcdFxcdERJVl9ST1VORF9VUChzLVxcdTAwM2VpbnNlcnRfYmlvX3NlY3RvcnMsIFBBR0VfU0VDVE9SUyksXFxuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jOjkzMTpcXHRcXHRcXHQwLCBHRlBfTk9XQUlULCBcXHUwMDI2ZGMtXFx1MDAzZWRpc2suYmlvX3NwbGl0KTtcXG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmMtOTMyLVxcdGlmICghY2FjaGVfYmlvKVxcbi0tXFxuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jPTk4MT1zdGF0aWMgdm9pZCBjYWNoZWRfZGV2X3dyaXRlKHN0cnVjdCBjYWNoZWRfZGV2ICpkYywgc3RydWN0IHNlYXJjaCAqcylcXG4tLVxcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYy0xMDQxLVxcdFxcdFxcdFxcdFxcdFxcdCBSRVFfT1BfV1JJVEUgfCBSRVFfUFJFRkxVU0gsXFxuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jOjEwNDI6XFx0XFx0XFx0XFx0XFx0XFx0IEdGUF9OT0lPLCBcXHUwMDI2ZGMtXFx1MDAzZWRpc2suYmlvX3NwbGl0KTtcXG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmMtMTA0My1cXHRcXHRcXHRpZiAoIWZsdXNoKSB7XFxuLS1cXG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmMtMTA1My1cXHRcXHRzLVxcdTAwM2Vpb3AuYmlvID0gYmlvX2FsbG9jX2Nsb25lKGJpby1cXHUwMDNlYmlfYmRldiwgYmlvLCBHRlBfTk9JTyxcXG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmM6MTA1NDpcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZkYy1cXHUwMDNlZGlzay5iaW9fc3BsaXQpO1xcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYy0xMDU1LVxcdFxcdC8qIEkvTyByZXF1ZXN0IHNlbnQgdG8gYmFja2luZyBkZXZpY2UgKi9cXG4tLVxcbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmM9ODY5PXN0YXRpYyB2b2lkIGJjYWNoZV9kZXZpY2VfZnJlZShzdHJ1Y3QgYmNhY2hlX2RldmljZSAqZClcXG4tLVxcbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmMtODg4LVxcbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmM6ODg5OlxcdGJpb3NldF9leGl0KFxcdTAwMjZkLVxcdTAwM2ViaW9fc3BsaXQpO1xcbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmMtODkwLVxcdGJpb3NldF9leGl0KFxcdTAwMjZkLVxcdTAwM2ViaW9fZGV0YWNoZWQpO1xcbi0tXFxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYz04OTc9c3RhdGljIGludCBiY2FjaGVfZGV2aWNlX2luaXQoc3RydWN0IGJjYWNoZV9kZXZpY2UgKmQsIHVuc2lnbmVkIGludCBibG9ja19zaXplLFxcbi0tXFxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYy05NDgtXFxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYzo5NDk6XFx0aWYgKGJpb3NldF9pbml0KFxcdTAwMjZkLVxcdTAwM2ViaW9fc3BsaXQsIDQsIG9mZnNldG9mKHN0cnVjdCBiYmlvLCBiaW8pLFxcbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmMtOTUwLVxcdFxcdFxcdEJJT1NFVF9ORUVEX0JWRUNTfEJJT1NFVF9ORUVEX1JFU0NVRVIpKVxcbi0tXFxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYy05ODctb3V0X2Jpb3NldF9zcGxpdF9leGl0OlxcbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmM6OTg4OlxcdGJpb3NldF9leGl0KFxcdTAwMjZkLVxcdTAwM2ViaW9fc3BsaXQpO1xcbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmMtOTg5LW91dF9pZGFfcmVtb3ZlOlxcbi0tXFxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYz0xNjgxPXN0YXRpYyBDTE9TVVJFX0NBTExCQUNLKGNhY2hlX3NldF9mcmVlKVxcbi0tXFxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYy0xNzA1LVxcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKGMtXFx1MDAzZW1vdmluZ19nY193cSk7XFxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYzoxNzA2OlxcdGJpb3NldF9leGl0KFxcdTAwMjZjLVxcdTAwM2ViaW9fc3BsaXQpO1xcbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmMtMTcwNy1cXHRtZW1wb29sX2V4aXQoXFx1MDAyNmMtXFx1MDAzZWZpbGxfaXRlcik7XFxuLS1cXG5kcml2ZXJzL21kL2JjYWNoZS9zdXBlci5jPTE4NzA9c3RydWN0IGNhY2hlX3NldCAqYmNoX2NhY2hlX3NldF9hbGxvYyhzdHJ1Y3QgY2FjaGVfc2IgKnNiKVxcbi0tXFxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYy0xOTQ4LVxcbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmM6MTk0OTpcXHRpZiAoYmlvc2V0X2luaXQoXFx1MDAyNmMtXFx1MDAzZWJpb19zcGxpdCwgNCwgb2Zmc2V0b2Yoc3RydWN0IGJiaW8sIGJpbyksXFxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYy0xOTUwLVxcdFxcdFxcdEJJT1NFVF9ORUVEX1JFU0NVRVIpKVxcbi0tXFxuZHJpdmVycy9tZC9kbS5jPTEwMDE9c3RhdGljIHZvaWQgZG1fd3FfcmVxdWV1ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbWQvZG0uYy0xMDE2LVxcbmRyaXZlcnMvbWQvZG0uYzoxMDE3OlxcdFxcdGRtX2lvX3Jld2luZChpbywgXFx1MDAyNm1kLVxcdTAwM2VkaXNrLVxcdTAwM2ViaW9fc3BsaXQpO1xcbmRyaXZlcnMvbWQvZG0uYy0xMDE4LVxcbi0tXFxuZHJpdmVycy9tZC9kbS5jPTExNjE9c3RhdGljIHNlY3Rvcl90IF9fbWF4X2lvX2xlbihzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgc2VjdG9yX3Qgc2VjdG9yLFxcbi0tXFxuZHJpdmVycy9tZC9kbS5jLTExNzEtXFx0ICogICBleHBsYWlucyB3aHkgc3RhY2tlZCBjaHVua19zZWN0b3JzIGJhc2VkIHNwbGl0dGluZyB2aWFcXG5kcml2ZXJzL21kL2RtLmM6MTE3MjpcXHQgKiAgIGJpb19zcGxpdF90b19saW1pdHMoKSBpc24ndCBwb3NzaWJsZSBoZXJlLlxcbmRyaXZlcnMvbWQvZG0uYy0xMTczLVxcdCAqL1xcbi0tXFxuZHJpdmVycy9tZC9kbS5jPTE5NTY9c3RhdGljIHZvaWQgZG1fc3BsaXRfYW5kX3Byb2Nlc3NfYmlvKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCxcXG4tLVxcbmRyaXZlcnMvbWQvZG0uYy0xOTcyLVxcdFxcdC8qXFxuZHJpdmVycy9tZC9kbS5jOjE5NzM6XFx0XFx0ICogVXNlIGJpb19zcGxpdF90b19saW1pdHMoKSBmb3IgYWJub3JtYWwgSU8gKGUuZy4gZGlzY2FyZCwgZXRjKVxcbmRyaXZlcnMvbWQvZG0uYy0xOTc0LVxcdFxcdCAqIG90aGVyd2lzZSBhc3NvY2lhdGVkIHF1ZXVlX2xpbWl0cyB3b24ndCBiZSBpbXBvc2VkLlxcbi0tXFxuZHJpdmVycy9tZC9kbS5jLTE5NzgtXFx0XFx0ICovXFxuZHJpdmVycy9tZC9kbS5jOjE5Nzk6XFx0XFx0YmlvID0gYmlvX3NwbGl0X3RvX2xpbWl0cyhiaW8pO1xcbmRyaXZlcnMvbWQvZG0uYy0xOTgwLVxcdFxcdGlmICghYmlvKVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTQyOT1zdGF0aWMgdm9pZCBtZF9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy00NDMtXFxuZHJpdmVycy9tZC9tZC5jOjQ0NDpcXHRiaW8gPSBiaW9fc3BsaXRfdG9fbGltaXRzKGJpbyk7XFxuZHJpdmVycy9tZC9tZC5jLTQ0NS1cXHRpZiAoIWJpbylcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz05MzkzPUVYUE9SVF9TWU1CT0xfR1BMKG1kX3N1Ym1pdF9kaXNjYXJkX2Jpbyk7XFxuZHJpdmVycy9tZC9tZC5jLTkzOTQtXFxuZHJpdmVycy9tZC9tZC5jOjkzOTU6c3RydWN0IGJpbyAqbWRkZXZfYmlvX3NwbGl0X2F0X3Jlc2hhcGVfb2Zmc2V0KHN0cnVjdCBtZGRldiAqbWRkZXYsXFxuZHJpdmVycy9tZC9tZC5jLTkzOTYtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJpbyAqYmlvLFxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTk0MzEtfVxcbmRyaXZlcnMvbWQvbWQuYzo5NDMyOkVYUE9SVF9TWU1CT0xfR1BMKG1kZGV2X2Jpb19zcGxpdF9hdF9yZXNoYXBlX29mZnNldCk7XFxuZHJpdmVycy9tZC9tZC5jLTk0MzMtXFxuLS1cXG5kcml2ZXJzL21kL21kLmg9OTI1PXZvaWQgbWRfc3VibWl0X2Rpc2NhcmRfYmlvKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxcbmRyaXZlcnMvbWQvbWQuaC05MjYtXFx0XFx0XFx0c3RydWN0IGJpbyAqYmlvLCBzZWN0b3JfdCBzdGFydCwgc2VjdG9yX3Qgc2l6ZSk7XFxuZHJpdmVycy9tZC9tZC5oOjkyNzpzdHJ1Y3QgYmlvICptZGRldl9iaW9fc3BsaXRfYXRfcmVzaGFwZV9vZmZzZXQoc3RydWN0IG1kZGV2ICptZGRldixcXG5kcml2ZXJzL21kL21kLmgtOTI4LVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBiaW8gKmJpbyxcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYz0xMzIwPXN0YXRpYyB2b2lkIHJhaWQxX3JlYWRfcmVxdWVzdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgYmlvICpiaW8sXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmMtMTM5MC1cXHRcXHRiaW8gPSBiaW9fc3VibWl0X3NwbGl0X2Jpb3NldChiaW8sIG1heF9zZWN0b3JzLFxcbmRyaXZlcnMvbWQvcmFpZDEuYzoxMzkxOlxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZjb25mLVxcdTAwM2ViaW9fc3BsaXQpO1xcbmRyaXZlcnMvbWQvcmFpZDEuYy0xMzkyLVxcdFxcdGlmICghYmlvKSB7XFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmM9MTQ3OT1zdGF0aWMgYm9vbCByYWlkMV93cml0ZV9yZXF1ZXN0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKmJpbyxcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0xNTg3LVxcdFxcdGJpbyA9IGJpb19zdWJtaXRfc3BsaXRfYmlvc2V0KGJpbywgbWF4X3NlY3RvcnMsXFxuZHJpdmVycy9tZC9yYWlkMS5jOjE1ODg6XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNmNvbmYtXFx1MDAzZWJpb19zcGxpdCk7XFxuZHJpdmVycy9tZC9yYWlkMS5jLTE1ODktXFx0XFx0aWYgKCFiaW8pXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmM9MzA0NT1zdGF0aWMgc3RydWN0IHIxY29uZiAqc2V0dXBfY29uZihzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS5jLTMwODgtXFxuZHJpdmVycy9tZC9yYWlkMS5jOjMwODk6XFx0ZXJyID0gYmlvc2V0X2luaXQoXFx1MDAyNmNvbmYtXFx1MDAzZWJpb19zcGxpdCwgQklPX1BPT0xfU0laRSwgMCwgMCk7XFxuZHJpdmVycy9tZC9yYWlkMS5jLTMwOTAtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0zMTYwLVxcdFxcdGtmcmVlKGNvbmYtXFx1MDAzZWJhcnJpZXIpO1xcbmRyaXZlcnMvbWQvcmFpZDEuYzozMTYxOlxcdFxcdGJpb3NldF9leGl0KFxcdTAwMjZjb25mLVxcdTAwM2ViaW9fc3BsaXQpO1xcbmRyaXZlcnMvbWQvcmFpZDEuYy0zMTYyLVxcdFxcdGtmcmVlKGNvbmYpO1xcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS5jPTMyNjc9c3RhdGljIHZvaWQgcmFpZDFfZnJlZShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCB2b2lkICpwcml2KVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS5jLTMyNzctXFx0a2ZyZWUoY29uZi1cXHUwMDNlYmFycmllcik7XFxuZHJpdmVycy9tZC9yYWlkMS5jOjMyNzg6XFx0Ymlvc2V0X2V4aXQoXFx1MDAyNmNvbmYtXFx1MDAzZWJpb19zcGxpdCk7XFxuZHJpdmVycy9tZC9yYWlkMS5jLTMyNzktXFx0a2ZyZWUoY29uZik7XFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmg9NTI9c3RydWN0IHIxY29uZiB7XFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmgtOTgtXFxuZHJpdmVycy9tZC9yYWlkMS5oOjk5OlxcdHN0cnVjdCBiaW9fc2V0XFx0XFx0YmlvX3NwbGl0O1xcbmRyaXZlcnMvbWQvcmFpZDEuaC0xMDAtXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmg9MTYzPWVudW0gcjFiaW9fc3RhdGUge1xcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS5oLTE3Ni0gKlxcbmRyaXZlcnMvbWQvcmFpZDEuaDoxNzc6ICogQW5kIGZvciBiaW9fc3BsaXQgZXJyb3JzLCByZWNvcmQgdGhhdCBiaV9lbmRfaW8gd2FzIGNhbGxlZFxcbmRyaXZlcnMvbWQvcmFpZDEuaC0xNzgtICogd2l0aCB0aGlzIGZsYWcuLi5cXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmM9MTE0ND1zdGF0aWMgdm9pZCByYWlkMTBfcmVhZF9yZXF1ZXN0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKmJpbyxcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMTIwOS1cXHRcXHRiaW8gPSBiaW9fc3VibWl0X3NwbGl0X2Jpb3NldChiaW8sIG1heF9zZWN0b3JzLFxcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MTIxMDpcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2Y29uZi1cXHUwMDNlYmlvX3NwbGl0KTtcXG5kcml2ZXJzL21kL3JhaWQxMC5jLTEyMTEtXFx0XFx0d2FpdF9iYXJyaWVyKGNvbmYpO1xcbi0tXFxuZHJpdmVycy9tZC9yYWlkMTAuYz0xMzQzPXN0YXRpYyBib29sIHJhaWQxMF93cml0ZV9yZXF1ZXN0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKmJpbyxcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMTQ2MC1cXHRcXHRiaW8gPSBiaW9fc3VibWl0X3NwbGl0X2Jpb3NldChiaW8sIHIxMF9iaW8tXFx1MDAzZXNlY3RvcnMsXFxuZHJpdmVycy9tZC9yYWlkMTAuYzoxNDYxOlxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZjb25mLVxcdTAwM2ViaW9fc3BsaXQpO1xcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMTQ2Mi1cXHRcXHRpZiAoIWJpbykge1xcbi0tXFxuZHJpdmVycy9tZC9yYWlkMTAuYz0xNTgyPXN0YXRpYyBpbnQgcmFpZDEwX2hhbmRsZV9kaXNjYXJkKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMTY0Mi1cXHRcXHRzcGxpdF9zaXplID0gc3RyaXBlX3NpemUgLSByZW1haW5kZXI7XFxuZHJpdmVycy9tZC9yYWlkMTAuYzoxNjQzOlxcdFxcdHNwbGl0ID0gYmlvX3NwbGl0KGJpbywgc3BsaXRfc2l6ZSwgR0ZQX05PSU8sIFxcdTAwMjZjb25mLVxcdTAwM2ViaW9fc3BsaXQpO1xcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMTY0NC1cXHRcXHRpZiAoSVNfRVJSKHNwbGl0KSkge1xcbi0tXFxuZHJpdmVycy9tZC9yYWlkMTAuYy0xNjYxLVxcdFxcdHNwbGl0X3NpemUgPSBiaW9fc2VjdG9ycyhiaW8pIC0gcmVtYWluZGVyO1xcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MTY2MjpcXHRcXHRzcGxpdCA9IGJpb19zcGxpdChiaW8sIHNwbGl0X3NpemUsIEdGUF9OT0lPLCBcXHUwMDI2Y29uZi1cXHUwMDNlYmlvX3NwbGl0KTtcXG5kcml2ZXJzL21kL3JhaWQxMC5jLTE2NjMtXFx0XFx0aWYgKElTX0VSUihzcGxpdCkpIHtcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmM9MTg0Nz1zdGF0aWMgYm9vbCByYWlkMTBfbWFrZV9yZXF1ZXN0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMTg3Ny1cXG5kcml2ZXJzL21kL3JhaWQxMC5jOjE4Nzg6XFx0YmlvID0gbWRkZXZfYmlvX3NwbGl0X2F0X3Jlc2hhcGVfb2Zmc2V0KG1kZGV2LCBiaW8sIFxcdTAwMjZzZWN0b3JzLFxcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MTg3OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2Y29uZi1cXHUwMDNlYmlvX3NwbGl0KTtcXG5kcml2ZXJzL21kL3JhaWQxMC5jLTE4ODAtXFx0aWYgKCFiaW8pIHtcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmM9MzgxND1zdGF0aWMgdm9pZCByYWlkMTBfZnJlZV9jb25mKHN0cnVjdCByMTBjb25mICpjb25mKVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMTAuYy0zODIzLVxcdHNhZmVfcHV0X3BhZ2UoY29uZi1cXHUwMDNldG1wcGFnZSk7XFxuZHJpdmVycy9tZC9yYWlkMTAuYzozODI0OlxcdGJpb3NldF9leGl0KFxcdTAwMjZjb25mLVxcdTAwM2ViaW9fc3BsaXQpO1xcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMzgyNS1cXHRrZnJlZShjb25mKTtcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmM9MzgyOD1zdGF0aWMgc3RydWN0IHIxMGNvbmYgKnNldHVwX2NvbmYoc3RydWN0IG1kZGV2ICptZGRldilcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMzg2OS1cXG5kcml2ZXJzL21kL3JhaWQxMC5jOjM4NzA6XFx0ZXJyID0gYmlvc2V0X2luaXQoXFx1MDAyNmNvbmYtXFx1MDAzZWJpb19zcGxpdCwgQklPX1BPT0xfU0laRSwgMCwgMCk7XFxuZHJpdmVycy9tZC9yYWlkMTAuYy0zODcxLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxMC5oPTIzPXN0cnVjdCByMTBjb25mIHtcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmgtOTItXFx0c3RydWN0IHBhZ2VcXHRcXHQqdG1wcGFnZTtcXG5kcml2ZXJzL21kL3JhaWQxMC5oOjkzOlxcdHN0cnVjdCBiaW9fc2V0XFx0XFx0YmlvX3NwbGl0O1xcbmRyaXZlcnMvbWQvcmFpZDEwLmgtOTQtXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxMC5oPTE1ND1lbnVtIHIxMGJpb19zdGF0ZSB7XFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxMC5oLTE2Mi1cXHRSMTBCSU9fUmVhZEVycm9yLFxcbmRyaXZlcnMvbWQvcmFpZDEwLmg6MTYzOi8qIEZvciBiaW9fc3BsaXQgZXJyb3JzLCByZWNvcmQgdGhhdCBiaV9lbmRfaW8gd2FzIGNhbGxlZC4gKi9cXG5kcml2ZXJzL21kL3JhaWQxMC5oLTE2NC1cXHRSMTBCSU9fUmV0dXJuZWQsXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQ1LmM9NTU4Nz1zdGF0aWMgc3RydWN0IGJpbyAqY2h1bmtfYWxpZ25lZF9yZWFkKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKnJhaWRfYmlvKVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkNS5jLTU1OTYtXFx0XFx0cmFpZF9iaW8gPSBiaW9fc3VibWl0X3NwbGl0X2Jpb3NldChyYWlkX2Jpbywgc2VjdG9ycyxcXG5kcml2ZXJzL21kL3JhaWQ1LmM6NTU5NzpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2Y29uZi1cXHUwMDNlYmlvX3NwbGl0KTtcXG5kcml2ZXJzL21kL3JhaWQ1LmMtNTU5OC1cXHRcXHRpZiAoIXJhaWRfYmlvKVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkNS5jPTYyMTg9c3RhdGljIGJvb2wgcmFpZDVfbWFrZV9yZXF1ZXN0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKiBiaSlcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDUuYy02MjYyLVxcdGZyb250X2JpbyA9IGJpO1xcbmRyaXZlcnMvbWQvcmFpZDUuYzo2MjYzOlxcdGJpID0gbWRkZXZfYmlvX3NwbGl0X2F0X3Jlc2hhcGVfb2Zmc2V0KG1kZGV2LCBiaSwgTlVMTCxcXG5kcml2ZXJzL21kL3JhaWQ1LmM6NjI2NDpcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmNvbmYtXFx1MDAzZWJpb19zcGxpdCk7XFxuZHJpdmVycy9tZC9yYWlkNS5jLTYyNjUtXFx0aWYgKCFiaSkge1xcbi0tXFxuZHJpdmVycy9tZC9yYWlkNS5jPTc1NDU9c3RhdGljIHZvaWQgZnJlZV9jb25mKHN0cnVjdCByNWNvbmYgKmNvbmYpXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQ1LmMtNzU1OC1cXHRrZnJlZShjb25mLVxcdTAwM2VkaXNrcyk7XFxuZHJpdmVycy9tZC9yYWlkNS5jOjc1NTk6XFx0Ymlvc2V0X2V4aXQoXFx1MDAyNmNvbmYtXFx1MDAzZWJpb19zcGxpdCk7XFxuZHJpdmVycy9tZC9yYWlkNS5jLTc1NjAtXFx0a2ZyZWUoY29uZi1cXHUwMDNlc3RyaXBlX2hhc2h0YmwpO1xcbi0tXFxuZHJpdmVycy9tZC9yYWlkNS5jPTc2MzM9c3RhdGljIHN0cnVjdCByNWNvbmYgKnNldHVwX2NvbmYoc3RydWN0IG1kZGV2ICptZGRldilcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDUuYy03NzQyLVxcbmRyaXZlcnMvbWQvcmFpZDUuYzo3NzQzOlxcdHJldCA9IGJpb3NldF9pbml0KFxcdTAwMjZjb25mLVxcdTAwM2ViaW9fc3BsaXQsIEJJT19QT09MX1NJWkUsIDAsIDApO1xcbmRyaXZlcnMvbWQvcmFpZDUuYy03NzQ0LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQ1Lmg9NTcwPXN0cnVjdCByNWNvbmYge1xcbi0tXFxuZHJpdmVycy9tZC9yYWlkNS5oLTY3MS1cXHRzdHJ1Y3QgZGlza19pbmZvXFx0KmRpc2tzO1xcbmRyaXZlcnMvbWQvcmFpZDUuaDo2NzI6XFx0c3RydWN0IGJpb19zZXRcXHRcXHRiaW9fc3BsaXQ7XFxuZHJpdmVycy9tZC9yYWlkNS5oLTY3My1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jPTUzMz1zdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy01NDEtXFx0ICogVGhlIG5hbWVzcGFjZSBtaWdodCBiZSBnb2luZyBhd2F5IGFuZCB0aGUgYmlvIG1pZ2h0IGJlIG1vdmVkIHRvIGFcXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYzo1NDI6XFx0ICogZGlmZmVyZW50IHF1ZXVlIHZpYSBibGtfc3RlYWxfYmlvcygpLCBzbyB3ZSBuZWVkIHRvIHVzZSB0aGUgYmlvX3NwbGl0XFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtNTQzLVxcdCAqIHBvb2wgZnJvbSB0aGUgb3JpZ2luYWwgcXVldWUgdG8gYWxsb2NhdGUgdGhlIGJ2ZWNzIGZyb20uXFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtNTQ0LVxcdCAqL1xcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jOjU0NTpcXHRiaW8gPSBiaW9fc3BsaXRfdG9fbGltaXRzKGJpbyk7XFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtNTQ2LVxcdGlmICghYmlvKVxcbi0tXFxuZnMvYnRyZnMvYmlvLmM9ODA9c3RhdGljIHN0cnVjdCBidHJmc19iaW8gKmJ0cmZzX3NwbGl0X2JpbyhzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbyxcXG4tLVxcbmZzL2J0cmZzL2Jpby5jLTg2LVxcbmZzL2J0cmZzL2Jpby5jOjg3OlxcdGJpbyA9IGJpb19zcGxpdChcXHUwMDI2b3JpZ19iYmlvLVxcdTAwM2ViaW8sIG1hcF9sZW5ndGggXFx1MDAzZVxcdTAwM2UgU0VDVE9SX1NISUZULCBHRlBfTk9GUyxcXG5mcy9idHJmcy9iaW8uYy04OC1cXHRcXHRcXHRcXHUwMDI2YnRyZnNfY2xvbmVfYmlvc2V0KTtcXG4tLVxcbmZzL2J0cmZzL2Jpby5jPTczND1zdGF0aWMgdTY0IGJ0cmZzX2FwcGVuZF9tYXBfbGVuZ3RoKHN0cnVjdCBidHJmc19iaW8gKmJiaW8sIHU2NCBtYXBfbGVuZ3RoKVxcbi0tXFxuZnMvYnRyZnMvYmlvLmMtNzQwLVxcdG1hcF9sZW5ndGggPSBtaW4obWFwX2xlbmd0aCwgZnNfaW5mby1cXHUwMDNlbWF4X3pvbmVfYXBwZW5kX3NpemUpO1xcbmZzL2J0cmZzL2Jpby5jOjc0MTpcXHRzZWN0b3Jfb2Zmc2V0ID0gYmlvX3NwbGl0X3J3X2F0KFxcdTAwMjZiYmlvLVxcdTAwM2ViaW8sIFxcdTAwMjZmc19pbmZvLVxcdTAwM2VsaW1pdHMsXFxuZnMvYnRyZnMvYmlvLmMtNzQyLVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZucl9zZWdzLCBtYXBfbGVuZ3RoKTtcXG4tLVxcbmZzL2J0cmZzL2Jpby5jLTc0NC1cXHRcXHQvKlxcbmZzL2J0cmZzL2Jpby5jOjc0NTpcXHRcXHQgKiBiaW9fc3BsaXRfcndfYXQoKSBjb3VsZCBzcGxpdCBhdCBhIHNpemUgc21hbGxlciB0aGFuIG91clxcbmZzL2J0cmZzL2Jpby5jLTc0Ni1cXHRcXHQgKiBzZWN0b3JzaXplIGFuZCB0aHVzIGNhdXNlIHVuYWxpZ25lZCBJL09zLiAgRml4IHRoYXQgYnlcXG4tLVxcbmZzL2lvbWFwL2lvZW5kLmM9NDYyPXN0cnVjdCBpb21hcF9pb2VuZCAqaW9tYXBfc3BsaXRfaW9lbmQoc3RydWN0IGlvbWFwX2lvZW5kICppb2VuZCxcXG4tLVxcbmZzL2lvbWFwL2lvZW5kLmMtNDc2LVxcbmZzL2lvbWFwL2lvZW5kLmM6NDc3OlxcdFxcdHNlY3Rvcl9vZmZzZXQgPSBiaW9fc3BsaXRfcndfYXQoYmlvLCBsaW0sIFxcdTAwMjZucl9zZWdzLCBtYXhfbGVuKTtcXG5mcy9pb21hcC9pb2VuZC5jLTQ3OC1cXHRcXHRpZiAodW5saWtlbHkoc2VjdG9yX29mZnNldCBcXHUwMDNjIDApKVxcbi0tXFxuZnMvaW9tYXAvaW9lbmQuYy00OTEtXFxuZnMvaW9tYXAvaW9lbmQuYzo0OTI6XFx0c3BsaXQgPSBiaW9fc3BsaXQoYmlvLCBzZWN0b3Jfb2Zmc2V0LCBHRlBfTk9GUywgXFx1MDAyNmlvbWFwX2lvZW5kX2Jpb3NldCk7XFxuZnMvaW9tYXAvaW9lbmQuYy00OTMtXFx0aWYgKElTX0VSUihzcGxpdCkpXFxuLS1cXG5mcy94ZnMveGZzX2J1Zi5jPTEyNjU9eGZzX2J1Zl9zdWJtaXRfYmlvKFxcbi0tXFxuZnMveGZzL3hmc19idWYuYy0xMjkxLVxcbmZzL3hmcy94ZnNfYnVmLmM6MTI5MjpcXHRcXHRzcGxpdCA9IGJpb19zcGxpdChiaW8sIGJwLVxcdTAwM2ViX21hcHNbbWFwXS5ibV9sZW4sIEdGUF9OT0ZTLFxcbmZzL3hmcy94ZnNfYnVmLmMtMTI5My1cXHRcXHRcXHRcXHRcXHUwMDI2ZnNfYmlvX3NldCk7XFxuLS1cXG5mcy94ZnMveGZzX2xvZy5jPTE1NDI9eGxvZ193cml0ZV9pY2xvZyhcXG4tLVxcbmZzL3hmcy94ZnNfbG9nLmMtMTYxOS1cXG5mcy94ZnMveGZzX2xvZy5jOjE2MjA6XFx0XFx0c3BsaXQgPSBiaW9fc3BsaXQoXFx1MDAyNmljbG9nLVxcdTAwM2VpY19iaW8sIGxvZy1cXHUwMDNlbF9sb2dCQnNpemUgLSBibm8sXFxuZnMveGZzL3hmc19sb2cuYy0xNjIxLVxcdFxcdFxcdFxcdCAgR0ZQX05PSU8sIFxcdTAwMjZmc19iaW9fc2V0KTtcXG4tLVxcbmZzL3hmcy94ZnNfem9uZV9nYy5jPTc4OD14ZnNfem9uZV9nY19zcGxpdF93cml0ZShcXG4tLVxcbmZzL3hmcy94ZnNfem9uZV9nYy5jLTgwMi1cXG5mcy94ZnMveGZzX3pvbmVfZ2MuYzo4MDM6XFx0c3BsaXRfc2VjdG9ycyA9IGJpb19zcGxpdF9yd19hdChcXHUwMDI2Y2h1bmstXFx1MDAzZWJpbywgbGltLCBcXHUwMDI2bnNlZ3MsXFxuZnMveGZzL3hmc196b25lX2djLmMtODA0LVxcdFxcdFxcdGxpbS1cXHUwMDNlbWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMgXFx1MDAzY1xcdTAwM2MgU0VDVE9SX1NISUZUKTtcXG4tLVxcbmZzL3hmcy94ZnNfem9uZV9nYy5jLTgxMi1cXG5mcy94ZnMveGZzX3pvbmVfZ2MuYzo4MTM6XFx0c3BsaXQgPSBiaW9fc3BsaXQoXFx1MDAyNmNodW5rLVxcdTAwM2ViaW8sIHNwbGl0X3NlY3RvcnMsIEdGUF9OT0ZTLCBcXHUwMDI2ZGF0YS1cXHUwMDNlYmlvX3NldCk7XFxuZnMveGZzL3hmc196b25lX2djLmMtODE0LVxcdHNwbGl0X2NodW5rID0gY29udGFpbmVyX29mKHNwbGl0LCBzdHJ1Y3QgeGZzX2djX2JpbywgYmlvKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYmlvLmg9MzE2PXZvaWQgYmlvX3RyaW0oc3RydWN0IGJpbyAqYmlvLCBzZWN0b3JfdCBvZmZzZXQsIHNlY3Rvcl90IHNpemUpO1xcbmluY2x1ZGUvbGludXgvYmlvLmg6MzE3OmV4dGVybiBzdHJ1Y3QgYmlvICpiaW9fc3BsaXQoc3RydWN0IGJpbyAqYmlvLCBpbnQgc2VjdG9ycyxcXG5pbmNsdWRlL2xpbnV4L2Jpby5oLTMxOC1cXHRcXHRcXHQgICAgIGdmcF90IGdmcCwgc3RydWN0IGJpb19zZXQgKmJzKTtcXG5pbmNsdWRlL2xpbnV4L2Jpby5oOjMxOTppbnQgYmlvX3NwbGl0X2lvX2F0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxcbmluY2x1ZGUvbGludXgvYmlvLmgtMzIwLVxcdFxcdHVuc2lnbmVkICpzZWdzLCB1bnNpZ25lZCBtYXhfYnl0ZXMsIHVuc2lnbmVkIGxlbl9hbGlnbik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jpby5oPTMzND1zdGF0aWMgaW5saW5lIHN0cnVjdCBiaW8gKmJpb19uZXh0X3NwbGl0KHN0cnVjdCBiaW8gKmJpbywgaW50IHNlY3RvcnMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jpby5oLTMzOS1cXG5pbmNsdWRlL2xpbnV4L2Jpby5oOjM0MDpcXHRyZXR1cm4gYmlvX3NwbGl0KGJpbywgc2VjdG9ycywgZ2ZwLCBicyk7XFxuaW5jbHVkZS9saW51eC9iaW8uaC0zNDEtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaD0yMTA9c3RydWN0IGJpbyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oLTIyNC1cXHQgKiBiZXR3ZWVuIGFsbCBiaV9pb192ZWNzLiBUaGlzIGZpZWxkIGlzIGluaXRpYWxpemVkIG9ubHkgYWZ0ZXIgdGhlIGJpb1xcbmluY2x1ZGUvbGludXgvYmxrX3R5cGVzLmg6MjI1OlxcdCAqIGlzIHNwbGl0IHRvIHRoZSBoYXJkd2FyZSBsaW1pdHMgKHNlZSBiaW9fc3BsaXRfaW9fYXQoKSkuIFRoZSB2YWx1ZVxcbmluY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgtMjI2LVxcdCAqIG1heSBiZSB1c2VkIHRvIGNvbnNpZGVyIERNQSBvcHRpbWl6YXRpb24gd2hlbiBwZXJmb3JtaW5nIHRoYXRcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg9MTQ2PXN0cnVjdCBnZW5kaXNrIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTY2LVxcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTY3OlxcdHN0cnVjdCBiaW9fc2V0IGJpb19zcGxpdDtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6MzU6MzguMDI5ODc4ODRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjcxMDMyMzM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBCbG9jayBMYXllcjogQSBGb2N1c2VkIEFwcHJvYWNoKipcblxuT2theSwgc28gYGJpb19zcGxpdGAgaXMgYSBjb21tb25seSB1c2VkIGZ1bmN0aW9uIGluIHRoZSBibG9jayBsYXllciwgYW5kIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGFuIGlzc3VlIHdpdGggYGJpX2J2ZWNfZ2FwX2JpdGAgd2l0aGluIGBfX2Jpb19jbG9uZWAgYW5kLCBpbXBvcnRhbnRseSwgYGJpb19zcGxpdGAgaXRzZWxmLiBUaGlzIGBiaV9idmVjX2dhcF9iaXRgIHNlZW1zIHRvIGJlIGludm9sdmVkIGluIHRyYWNraW5nIGdhcCBiaXRzIGZvciBiaW8gdmVjdG9ycywgYW5kIGl0J3MgdXNlZCBhY3Jvc3Mgc2V2ZXJhbCBrZXkgZnVuY3Rpb25zOiBgYmxrX3JxX2FwcGVuZF9iaW9gLCBgYmlvX3NwbGl0X2lvX2F0YCwgYGJpb19zZWdfZ2FwYCwgYW5kIGBibGtfbXFfYmlvX3RvX3JlcXVlc3RgLiBHaXZlbiBpdHMgd2lkZXNwcmVhZCB1c2UgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGZpeCwgdGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy5cblxuTXkgaW5pdGlhbCBmb2N1cyBzaG91bGQgYmUgb24gZnV6emluZyB0aGUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gYmlvIHNwbGl0dGluZyBhbmQgY2xvbmluZzogYGJpb19hbGxvY19jbG9uZWAsIGBiaW9faW5pdF9jbG9uZWAsIGBiaW9fc3BsaXRgLCBgYmlvX3NwbGl0X3RvX2xpbWl0c2AsIGFuZCBgYmxrX21xX3N1Ym1pdF9iaW9gLiBXYWl0LCBgX19iaW9fY2xvbmVgIGlzIGRlY2xhcmVkIGBzdGF0aWNgLCB3aGljaCBpcyBoZWxwZnVsLCBidXQgYGJpb19zcGxpdGAgaXMgZXhwb3J0ZWQsIHNvIEkgKm5lZWQqIHRvIGluY2x1ZGUgdGhhdCBvbmUuIExldCdzIGluY29ycG9yYXRlIHRob3NlIGludG8gdGhlIGluaXRpYWwgZnV6emluZyBwbGFuLlxuXG5JIHNob3VsZCBhbHNvIGNoZWNrIGlmIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkLiBCdXQgdGhlIGJsb2NrIGxheWVyIGlzIGFsd2F5cyBlbmFibGVkLCBzbyB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLiBObyBuZWVkIGZvciBzcGVjaWFsIGNvbmZpZyBvcHRpb25zIGhlcmUuXG5cbkFscmlnaHQsIGxldCdzIGRvdWJsZS1jaGVjayB0aGUgY2FsbCBzaXRlcyBvZiBgYmlvX3NwbGl0YCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBjcml0aWNhbC4gSG1tLCBpdCdzIGNhbGxlZCBieTogYGJpb19zcGxpdF90b19saW1pdHNgLCBgYmxrX21xX3N1Ym1pdF9iaW9gLCBgYmlvX3NwbGl0X3J3YCwgYGJpb19zcGxpdF96b25lX2FwcGVuZGAsIGBiaW9fc3BsaXRfZGlzY2FyZGAsIGFuZCBgYmlvX3NwbGl0X3dyaXRlX3plcm9lc2AuIE9rYXksIEkgdGhpbmsgdGhpcyBzb2xpZGlmaWVzIG15IGxpc3QuIEnigJlsbCBhZGQgYGJpb19zcGxpdF90b19saW1pdHNgIHRvIHRoZSBsaXN0LiBJIHRoaW5rIEknbSBnb29kIG9uIHRoYXQgZnJvbnQuXG5cbkp1c3QgdG8gYmUgc2FmZSwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmUtZXhhbWluZSBgX19iaW9fY2xvbmVgLCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBhbnkgY3J1Y2lhbCBjb25uZWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwMzYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6MzU6NTAuNzQwMjA1MTgzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE4MDM1MTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYmlvX2Nsb25lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jpby5jPTg1ND1FWFBPUlRfU1lNQk9MKGJpb19wdXQpO1xcbmJsb2NrL2Jpby5jLTg1NS1cXG5ibG9jay9iaW8uYzo4NTY6c3RhdGljIGludCBfX2Jpb19jbG9uZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW8gKmJpb19zcmMsIGdmcF90IGdmcClcXG5ibG9jay9iaW8uYy04NTcte1xcbi0tXFxuYmxvY2svYmlvLmM9ODk0PXN0cnVjdCBiaW8gKmJpb19hbGxvY19jbG9uZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmlvICpiaW9fc3JjLFxcbi0tXFxuYmxvY2svYmlvLmMtOTAyLVxcbmJsb2NrL2Jpby5jOjkwMzpcXHRpZiAoX19iaW9fY2xvbmUoYmlvLCBiaW9fc3JjLCBnZnApIFxcdTAwM2MgMCkge1xcbmJsb2NrL2Jpby5jLTkwNC1cXHRcXHRiaW9fcHV0KGJpbyk7XFxuLS1cXG5ibG9jay9iaW8uYz05MjE9aW50IGJpb19pbml0X2Nsb25lKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBiaW8gKmJpbyxcXG4tLVxcbmJsb2NrL2Jpby5jLTkyNi1cXHRiaW9faW5pdChiaW8sIGJkZXYsIE5VTEwsIDAsIGJpb19zcmMtXFx1MDAzZWJpX29wZik7XFxuYmxvY2svYmlvLmM6OTI3OlxcdHJldCA9IF9fYmlvX2Nsb25lKGJpbywgYmlvX3NyYywgZ2ZwKTtcXG5ibG9jay9iaW8uYy05MjgtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6MzU6NTIuOTU4MjUwMTA3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NjM3NzEyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQmxvY2sgTGF5ZXIgQ2xvbmluZyBhbmQgU3BsaXR0aW5nIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGUgY29kZSwgaXQgc2VlbXMgYF9fYmlvX2Nsb25lYCBpcyBvbmx5IGNhbGxlZCBieSBgYmlvX2FsbG9jX2Nsb25lYCBhbmQgYGJpb19pbml0X2Nsb25lYC4gVGhhdCdzIHVzZWZ1bCBpbmZvcm1hdGlvbi4gU2luY2UgdGhlc2UgZnVuY3Rpb25zLCBhbG9uZyB3aXRoIGBiaW9fc3BsaXRgLCBhcmUgZnVuZGFtZW50YWwgdG8gdGhlIGJsb2NrIGxheWVyLCBhbmQgbGlrZWx5IHRvIGJlIHJlYWNoYWJsZSBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbiwgSSBzaG91bGQgZGVmaW5pdGVseSBhZGQgdGhlbSB0byBteSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZyB0aGUgYmxvY2sgbGF5ZXIuIFNpbmNlIHRoZSBibG9jayBsYXllciBpcyBlc3NlbnRpYWxseSBhIHN0YW5kYXJkIGNvbXBvbmVudCwgdGhlcmUgYXJlIG5vIHNwZWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgbmVlZCB0byB3b3JyeSBhYm91dC4gSXQncyBhbHdheXMgZW5hYmxlZC4gTm93LCBsZXQgbWUgcXVpY2tseSBjaGVjayBpZiB0aGlzIGBiaV9idmVjX2dhcF9iaXRgIHZhcmlhYmxlIGlzIHVzZWQgaW4gYW55IHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBvciBzcGVjaWZpYyBjb2RlIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTEzNiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNzozNTo1OC41MjIwMjM1MDJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODcyODM2MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmlfYnZlY19nYXBfYml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jpby5jPTIxNz12b2lkIGJpb19pbml0KHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGJpb192ZWMgKnRhYmxlLFxcbi0tXFxuYmxvY2svYmlvLmMtMjI3LVxcdGJpby1cXHUwMDNlYmlfc3RhdHVzID0gMDtcXG5ibG9jay9iaW8uYzoyMjg6XFx0YmlvLVxcdTAwM2ViaV9idmVjX2dhcF9iaXQgPSAwO1xcbmJsb2NrL2Jpby5jLTIyOS1cXHRiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gMDtcXG4tLVxcbmJsb2NrL2Jpby5jPTg1Nj1zdGF0aWMgaW50IF9fYmlvX2Nsb25lKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJpbyAqYmlvX3NyYywgZ2ZwX3QgZ2ZwKVxcbi0tXFxuYmxvY2svYmlvLmMtODYxLVxcdGJpby1cXHUwMDNlYmlfd3JpdGVfc3RyZWFtID0gYmlvX3NyYy1cXHUwMDNlYmlfd3JpdGVfc3RyZWFtO1xcbmJsb2NrL2Jpby5jOjg2MjpcXHRiaW8tXFx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCA9IGJpb19zcmMtXFx1MDAzZWJpX2J2ZWNfZ2FwX2JpdDtcXG5ibG9jay9iaW8uYy04NjMtXFx0YmlvLVxcdTAwM2ViaV9pdGVyID0gYmlvX3NyYy1cXHUwMDNlYmlfaXRlcjtcXG4tLVxcbmJsb2NrL2Jpby5jPTE5NDc9c3RydWN0IGJpbyAqYmlvX3NwbGl0KHN0cnVjdCBiaW8gKmJpbywgaW50IHNlY3RvcnMsXFxuLS1cXG5ibG9jay9iaW8uYy0xOTc0LVxcdGJpb19hZHZhbmNlKGJpbywgc3BsaXQtXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XFxuYmxvY2svYmlvLmM6MTk3NTpcXHRiaW8tXFx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCA9IDA7XFxuYmxvY2svYmlvLmMtMTk3Ni1cXG4tLVxcbmJsb2NrL2Jsay1tYXAuYz00MjY9aW50IGJsa19ycV9hcHBlbmRfYmlvKHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IGJpbyAqYmlvKVxcbi0tXFxuYmxvY2svYmxrLW1hcC5jLTQ1Ni1cXHRycS1cXHUwMDNlX19kYXRhX2xlbiA9IGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplO1xcbmJsb2NrL2Jsay1tYXAuYzo0NTc6XFx0cnEtXFx1MDAzZXBoeXNfZ2FwX2JpdCA9IGJpby1cXHUwMDNlYmlfYnZlY19nYXBfYml0O1xcbmJsb2NrL2Jsay1tYXAuYy00NTgtXFx0cmV0dXJuIDA7XFxuLS1cXG5ibG9jay9ibGstbWVyZ2UuYz0zMzU9aW50IGJpb19zcGxpdF9pb19hdChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSxcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jLTM3OS1cXHQqc2VncyA9IG5zZWdzO1xcbmJsb2NrL2Jsay1tZXJnZS5jOjM4MDpcXHRiaW8tXFx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCA9IGZmcyhnYXBzKTtcXG5ibG9jay9ibGstbWVyZ2UuYy0zODEtXFx0cmV0dXJuIDA7XFxuLS1cXG5ibG9jay9ibGstbWVyZ2UuYy00MTUtXFx0YmlvX2NsZWFyX3BvbGxlZChiaW8pO1xcbmJsb2NrL2Jsay1tZXJnZS5jOjQxNjpcXHRiaW8tXFx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCA9IGZmcyhnYXBzKTtcXG5ibG9jay9ibGstbWVyZ2UuYy00MTctXFx0cmV0dXJuIGJ5dGVzIFxcdTAwM2VcXHUwMDNlIFNFQ1RPUl9TSElGVDtcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jPTc1Mj11OCBiaW9fc2VnX2dhcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqcHJldiwgc3RydWN0IGJpbyAqbmV4dCxcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jLTc1OS1cXG5ibG9jay9ibGstbWVyZ2UuYzo3NjA6XFx0Z2Fwc19iaXQgPSBtaW5fbm90X3plcm8oZ2Fwc19iaXQsIHByZXYtXFx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCk7XFxuYmxvY2svYmxrLW1lcmdlLmM6NzYxOlxcdGdhcHNfYml0ID0gbWluX25vdF96ZXJvKGdhcHNfYml0LCBuZXh0LVxcdTAwM2ViaV9idmVjX2dhcF9iaXQpO1xcbmJsb2NrL2Jsay1tZXJnZS5jLTc2Mi1cXG4tLVxcbmJsb2NrL2Jsay1tcS5jPTI2NTQ9c3RhdGljIHZvaWQgYmxrX21xX2Jpb190b19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IGJpbyAqYmlvLFxcbi0tXFxuYmxvY2svYmxrLW1xLmMtMjY2NC1cXHRycS1cXHUwMDNlX19kYXRhX2xlbiA9IGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplO1xcbmJsb2NrL2Jsay1tcS5jOjI2NjU6XFx0cnEtXFx1MDAzZXBoeXNfZ2FwX2JpdCA9IGJpby1cXHUwMDNlYmlfYnZlY19nYXBfYml0O1xcbmJsb2NrL2Jsay1tcS5jLTI2NjYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oPTIxMD1zdHJ1Y3QgYmlvIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgtMjMwLVxcdCAqL1xcbmluY2x1ZGUvbGludXgvYmxrX3R5cGVzLmg6MjMxOlxcdHU4XFx0XFx0XFx0YmlfYnZlY19nYXBfYml0O1xcbmluY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgtMjMyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNzozNjowMC4wMDkzMTI0NDVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc0NDk3MDA1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZpbmluZyBGb2N1cyBTeW1ib2xzIGFuZCBDYWxsZXIgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGZpZWxkIGFuZCB3aGVyZSBpdCdzIHVzZWQuIEl0J3Mgb2J2aW91c2x5IHNpZ25pZmljYW50LCBwb3BwaW5nIHVwIGluIGBibGtfcnFfYXBwZW5kX2Jpb2AsIGBiaW9fc3BsaXRfaW9fYXRgLCBgYmlvX3NlZ19nYXBgLCBhbmQgYGJsa19tcV9iaW9fdG9fcmVxdWVzdGAuICBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIHRoZXNlIGNvbnN1bWVycyBhcmUgYWxzbyBpbmNsdWRlZCBpbiB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdCwgYXMgdGhleSBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIHRoaXMgdGhpbmcgSSdtIGV4YW1pbmluZy4gVGhleSBhcmUgb2J2aW91c2x5IGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBjb250ZXh0LlxuXG5IbW0sIHdhaXQgYSBzZWNvbmQuLi4gYGJsa19tcV9iaW9fdG9fcmVxdWVzdGAuLi4gaXNuJ3QgdGhhdCBhIHN0YXRpYyBmdW5jdGlvbj8gIFRoYXQgY2hhbmdlcyB0aGluZ3MuIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHN0YXRpYyBmdW5jdGlvbnMsIGFzIGNhbGxlciBjb250ZXh0IGlzIG9mdGVuIGltcG9ydGFudCB0byBpdHMgdXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBmaWVsZCBhbmQgaXRzIHVzZSBoZXJlLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBxdWlja2x5IGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYGJsa19tcV9iaW9fdG9fcmVxdWVzdGAgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIExldCdzIHNlZSB3aG8ncyBjYWxsaW5nIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ0NSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNzozNjowNS43NTQyODU4MDhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDU1OTk5ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrX21xX2Jpb190b19yZXF1ZXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1tcS5jPTI1OTI9c3RhdGljIHZvaWQgYmxrX21xX2luc2VydF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSwgYmxrX2luc2VydF90IGZsYWdzKVxcbi0tXFxuYmxvY2svYmxrLW1xLmMtMjY1My1cXG5ibG9jay9ibGstbXEuYzoyNjU0OnN0YXRpYyB2b2lkIGJsa19tcV9iaW9fdG9fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBiaW8gKmJpbyxcXG5ibG9jay9ibGstbXEuYy0yNjU1LVxcdFxcdHVuc2lnbmVkIGludCBucl9zZWdzKVxcbi0tXFxuYmxvY2svYmxrLW1xLmM9MzA5Mz12b2lkIGJsa19tcV9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTMxODEtXFxuYmxvY2svYmxrLW1xLmM6MzE4MjpcXHRibGtfbXFfYmlvX3RvX3JlcXVlc3QocnEsIGJpbywgbnJfc2Vncyk7XFxuYmxvY2svYmxrLW1xLmMtMzE4My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6MzY6MDcuMjU5ODkzNzUzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDM3Mjc2MzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRhcmdldCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBgYmxrX21xX3N1Ym1pdF9iaW9gIGlzIHRoZSBjdWxwcml0LCB0aGUgb25lIGtpY2tpbmcgdGhpbmdzIG9mZi4gTXkgYXR0ZW50aW9uLCB0aGVyZWZvcmUsIG5lZWRzIHRvIHplcm8gaW4gb24gdGhlc2Uga2V5IGZ1bmN0aW9uczogYGJpb19hbGxvY19jbG9uZWAsIGBiaW9faW5pdF9jbG9uZWAsIGBiaW9fc3BsaXRgLCBgYmxrX3JxX2FwcGVuZF9iaW9gLCBgYmlvX3NwbGl0X2lvX2F0YCwgYGJpb19zZWdfZ2FwYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBpbml0aWFsIGVudHJ5IHBvaW50IGBibGtfbXFfc3VibWl0X2Jpb2AuXG5cblRoZSBjb3JlIGlzc3VlIGhlcmUgcmV2b2x2ZXMgYXJvdW5kIGBiaW9fc3BsaXRgLCBhbmQgbW9yZSBzcGVjaWZpY2FsbHkgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBjb3B5aW5nIG9mIGBiaV9idmVjX2dhcF9iaXRgLiBUaGlzIGlzIGEgY3JpdGljYWwgZmllbGQsIG9idmlvdXNseSB0cmFja2luZyBnYXAgYml0cyB3aXRoaW4gYmlvIHZlY3RvcnMuIEFuZCBpdOKAmXMgdXNlZCBieSB0aGUgbGlrZXMgb2YgYGJsa19ycV9hcHBlbmRfYmlvYCBhbmQgYGJpb19zcGxpdF9pb19hdGAgd2hpY2ggYXJlIGNvcmUgYmxvY2sgbGF5ZXIgZnVuY3Rpb25zLiBJZiB0aGVzZSBnYXAgYml0cyBhcmVuJ3QgaGFuZGxlZCBjb3JyZWN0bHksIHRoZSB3aG9sZSB0aGluZyBmYWxscyBhcGFydC5cblxuR2l2ZW4gdGhhdCB0aGlzIHBhdGNoIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgbWlzc2luZyBpbml0aWFsaXphdGlvbiBhbmQgY29weWluZywgZnV6emluZyB0aGVzZSBmdW5jdGlvbnMgaXMgYWJzb2x1dGVseSB3YXJyYW50ZWQuIEknbSBzZXR0aW5nIGBXb3J0aEZ1enppbmdgIHRvIHRydWUuIFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoYXQgd2UndmUgcGx1Z2dlZCB0aGlzIGdhcCBhbmQgdGhhdCB0aGUgYmxvY2sgbGF5ZXIgY29udGludWVzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseSB1bmRlciB2YXJpb3VzIGlucHV0IGNvbmRpdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDM4LCJPdXRwdXRUb2tlbnMiOjE3NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNzozNjoxNy4yOTcxNzI1NDlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJpb19hbGxvY19jbG9uZVwiLFxuICAgIFwiYmlvX2luaXRfY2xvbmVcIixcbiAgICBcImJpb19zcGxpdFwiLFxuICAgIFwiYmxrX3JxX2FwcGVuZF9iaW9cIixcbiAgICBcImJpb19zcGxpdF9pb19hdFwiLFxuICAgIFwiYmlvX3NlZ19nYXBcIixcbiAgICBcImJsa19tcV9zdWJtaXRfYmlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbWlzc2luZyBpbml0aWFsaXphdGlvbiBhbmQgY29weWluZyBvZiBgYmlfYnZlY19nYXBfYml0YCBpbiBgYmlvX3NwbGl0YCBhbmQgYF9fYmlvX2Nsb25lYC4gVGhpcyBmaWVsZCBpcyB1c2VkIHRvIHRyYWNrIGdhcCBiaXRzIGZvciBiaW8gdmVjdG9ycyBhbmQgaXMgY29uc3VtZWQgYnkgY29yZSBibG9jayBsYXllciBmdW5jdGlvbnMgbGlrZSBgYmxrX3JxX2FwcGVuZF9iaW9gIGFuZCBgYmlvX3NwbGl0X2lvX2F0YC4gRnV6emluZyB0aGVzZSBmdW5jdGlvbnMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBjb3JyZWN0IGhhbmRsaW5nIG9mIGJpbyB2ZWN0b3IgZ2Fwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiaW9fYWxsb2NfY2xvbmVcIixcbiAgICBcImJpb19pbml0X2Nsb25lXCIsXG4gICAgXCJiaW9fc3BsaXRcIixcbiAgICBcImJsa19ycV9hcHBlbmRfYmlvXCIsXG4gICAgXCJiaW9fc3BsaXRfaW9fYXRcIixcbiAgICBcImJpb19zZWdfZ2FwXCIsXG4gICAgXCJibGtfbXFfc3VibWl0X2Jpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG1pc3NpbmcgaW5pdGlhbGl6YXRpb24gYW5kIGNvcHlpbmcgb2YgYGJpX2J2ZWNfZ2FwX2JpdGAgaW4gYGJpb19zcGxpdGAgYW5kIGBfX2Jpb19jbG9uZWAuIFRoaXMgZmllbGQgaXMgdXNlZCB0byB0cmFjayBnYXAgYml0cyBmb3IgYmlvIHZlY3RvcnMgYW5kIGlzIGNvbnN1bWVkIGJ5IGNvcmUgYmxvY2sgbGF5ZXIgZnVuY3Rpb25zIGxpa2UgYGJsa19ycV9hcHBlbmRfYmlvYCBhbmQgYGJpb19zcGxpdF9pb19hdGAuIEZ1enppbmcgdGhlc2UgZnVuY3Rpb25zIGlzIGltcG9ydGFudCB0byBlbnN1cmUgY29ycmVjdCBoYW5kbGluZyBvZiBiaW8gdmVjdG9yIGdhcHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE3OjM2OjE3LjI5NzIxMDYyOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ1ODM2Nzk1NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNzozNjoxNy4yOTc2MDY0MDlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjQ1ODMyNzg2NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBfX2Jpb19jbG9uZWAgYW5kIGBiaW9fc3BsaXRgIHRvIHByb3Blcmx5IHByb3BhZ2F0ZSBhbmQgcmVzZXQgdGhlIGBiaV9idmVjX2dhcF9iaXRgIGZpZWxkIG9mIGBzdHJ1Y3QgYmlvYC4gVGhpcyBmaWVsZCBpcyB1c2VkIHRvIGluZGljYXRlIHRoZSBsb3dlc3Qgc2V0IGJpdCBpbiBhbnkgYWRkcmVzcyBvZmZzZXQgYmV0d2VlbiBhbGwgYGJpX2lvX3ZlY3NgIGZvciBETUEgb3B0aW1pemF0aW9uLiBXaGVuIGEgYmlvIGlzIGFsbG9jYXRlZCBvciByZXNldCwgYGJpX2J2ZWNfZ2FwX2JpdGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwICh2aWEgYGJpb19pbml0YCBvciBgbWVtc2V0YCBpbiBgYmlvX3Jlc2V0YCkuIFRoZXJlZm9yZSwgdGhlIGlzc3VlIGJlaW5nIGZpeGVkIGlzIGEgbG9naWNhbCBidWcgd2hlcmUgdGhlIGdhcCBiaXQgaXMgZWl0aGVyIGxvc3QgZHVyaW5nIGNsb25pbmcgb3IgaW5jb3JyZWN0bHkgcmV0YWluZWQgZHVyaW5nIHNwbGl0dGluZywgcmF0aGVyIHRoYW4gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC4gQmVjYXVzZSB0aGUgZmllbGQgaXMgYWx3YXlzIGluaXRpYWxpemVkLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiBBbnkgcmVzdWx0aW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGR1ZSB0byBpbmNvcnJlY3QgRE1BIG1hcHBpbmdzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NjU5NzAwMDNhNjc5ZDgwZmZkYmZjNTUyYmIxZDFjNmZmNDkzNjY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTc6MzU6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9iaW8uYyBiL2Jsb2NrL2Jpby5jXG5pbmRleCA4OThiMmY1ZWY4YzgxLi4zM2FhNDM5YzFiYWUyIDEwMDY0NFxuLS0tIGEvYmxvY2svYmlvLmNcbisrKyBiL2Jsb2NrL2Jpby5jXG5AQCAtODU5LDYgKzg1OSw3IEBAIHN0YXRpYyBpbnQgX19iaW9fY2xvbmUoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmlvICpiaW9fc3JjLCBnZnBfdCBnZnApXG4gXHRiaW8tXHUwMDNlYmlfaW9wcmlvID0gYmlvX3NyYy1cdTAwM2ViaV9pb3ByaW87XG4gXHRiaW8tXHUwMDNlYmlfd3JpdGVfaGludCA9IGJpb19zcmMtXHUwMDNlYmlfd3JpdGVfaGludDtcbiBcdGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gPSBiaW9fc3JjLVx1MDAzZWJpX3dyaXRlX3N0cmVhbTtcbitcdGJpby1cdTAwM2ViaV9idmVjX2dhcF9iaXQgPSBiaW9fc3JjLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdDtcbiBcdGJpby1cdTAwM2ViaV9pdGVyID0gYmlvX3NyYy1cdTAwM2ViaV9pdGVyO1xuIFx0YmlvLVx1MDAzZWJpX2lvX3ZlYyA9IGJpb19zcmMtXHUwMDNlYmlfaW9fdmVjO1xuIFxuQEAgLTE5NzEsNiArMTk3Miw3IEBAIHN0cnVjdCBiaW8gKmJpb19zcGxpdChzdHJ1Y3QgYmlvICpiaW8sIGludCBzZWN0b3JzLFxuIFx0XHRiaW9faW50ZWdyaXR5X3RyaW0oc3BsaXQpO1xuIFxuIFx0YmlvX2FkdmFuY2UoYmlvLCBzcGxpdC1cdTAwM2ViaV9pdGVyLmJpX3NpemUpO1xuK1x0YmlvLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCA9IDA7XG4gXG4gXHRpZiAoYmlvX2ZsYWdnZWQoYmlvLCBCSU9fVFJBQ0VfQ09NUExFVElPTikpXG4gXHRcdGJpb19zZXRfZmxhZyhzcGxpdCwgQklPX1RSQUNFX0NPTVBMRVRJT04pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6MzY6MTcuMjk3NjA2OTg5WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMjA0MTM0OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCaW8gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBibG9jay9iaW8uY2AsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYGJpX2J2ZWNfZ2FwX2JpdGAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gcXVpY2tseSBhc3Nlc3Mgd2hldGhlciB0aGlzIHdhcyBhIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSwgZ2l2ZW4gdGhlIGNvbnRleHQuIFRoZSBjb2RlIHNuaXAgc2hvd3MgdGhhdCBgX19iaW9fY2xvbmVgIGNvcGllcyBgYmlvX3NyYy1cdTAwM2ViaV9idmVjX2dhcF9iaXRgIHRvIHRoZSBuZXcgYGJpb2AsIHdoaWxlIGBiaW9fc3BsaXRgIHNldHMgaXQgdG8gemVyby5cblxuSW5pdGlhbGx5LCBJIGRpc21pc3NlZCB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcG9zc2liaWxpdHkgYmVjYXVzZSBpdCdzIGp1c3QgYSBmaWVsZCBjb3B5IGZyb20gb25lIGBzdHJ1Y3QgYmlvYCB0byBhbm90aGVyIGFuZCB0aGVuIGEgemVyb2luZyBhY3Rpb24uIEhvd2V2ZXIsIHRoZSBtb3JlIEkgdGhpbmsgYWJvdXQgaXQsIGlmIGBfX2Jpb19jbG9uZWAgKmRpZG4ndCogZG8gdGhpcyBjb3B5LCB0aGVuICp0aGF0KiB3b3VsZCBiZSBhIGJpZ2dlciBpc3N1ZS4gYGJpX2J2ZWNfZ2FwX2JpdGAgbWlnaHQgaGF2ZSBlbmRlZCB1cCB1bmluaXRpYWxpemVkIG9yIGNvbnRhaW5pbmcgc3RhbGUgZGF0YS4gS01TQU4gKnNob3VsZCogY2F0Y2ggdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHRob3VnaCwgcmlnaHQ/IEJ1dCB3YWl0LCBgX19iaW9fY2xvbmVgIGluaXRpYWxpemVzIGBiaW9gIGZyb20gYGJpb19zcmNgLi4uIGl0J3MgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgY29weS5cblxuTm93IEknbSBsb29raW5nIGNsb3NlciBhdCBgX19iaW9fY2xvbmVgIGFuZCBgYmlvX3NwbGl0YCBzcGVjaWZpY2FsbHkuIFRoZSBgYmlvX3NwbGl0YCBzZXR0aW5nIHRvIHplcm8gaXMgY3J1Y2lhbC4gVGhpcyAqbG9va3MqIGxpa2UgYSBidWcgZml4IOKAkyBwZXJoYXBzIHRoZSBvcmlnaW5hbCBjbG9uaW5nIG9yIHNwbGl0dGluZyBsb2dpYyB3YXMgZmFpbGluZyB0byBwcm9wZXJseSBjb3B5IG9yIHJlc2V0IHRoaXMgZmllbGQuIFRoaXMgY291bGQgcmVzdWx0IGluIGluY29ycmVjdCBiZWhhdmlvciBkb3duIGluIHRoZSBibG9jayBsYXllciwgcGVyaGFwcyBsZWFkaW5nIHRvIGdhcHMgaW4gYSBgYnZlY2AuXG5cbk9rYXksIGJhY2sgdG8gdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZ2xlLiBJZiBgYmlvYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGJpb19hbGxvY19iaW9zZXRgLCBpdCBtaWdodCBiZSB6ZXJvZWQgb3V0IG9yIHBhcnRpYWxseSB6ZXJvZWQsIHdoaWNoIGJyaW5ncyBpdCBpbnRvIGFuIGluaXRpYWxpc2VkIHN0YXRlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGJpb19hbGxvY19iaW9zZXRgIGFuZCB0aGUgYHN0cnVjdCBiaW9gIGl0c2VsZiB0byBiZSBjb21wbGV0ZWx5IHN1cmUuIFRoaXMgaXMgYWJvdXQgYXMgY2xlYW4gb2YgYSByZWFkIG9mIGJpbyBmaWVsZCwgaW4gY2xvbmUsIHRoZW4gaW4gc3BsaXQsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBzcGxpdCBvcGVyYXRpb24gbmVlZGVkIHNvbWUgZXh0cmEgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTM2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6MzY6MjMuNTE4MDIzMjg4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTAyODQwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiaW9fYWxsb2NfYmlvc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2Jpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jpby5jPTI2MD1FWFBPUlRfU1lNQk9MKGJpb19pbml0KTtcXG4tLVxcbmJsb2NrL2Jpby5jLTI2OS0gKiAgIEFmdGVyIGNhbGxpbmcgYmlvX3Jlc2V0KCksIEBiaW8gd2lsbCBiZSBpbiB0aGUgc2FtZSBzdGF0ZSBhcyBhIGZyZXNobHlcXG5ibG9jay9iaW8uYzoyNzA6ICogICBhbGxvY2F0ZWQgYmlvIHJldHVybmVkIGJpbyBiaW9fYWxsb2NfYmlvc2V0KCkgLSB0aGUgb25seSBmaWVsZHMgdGhhdCBhcmVcXG5ibG9jay9iaW8uYzoyNzE6ICogICBwcmVzZXJ2ZWQgYXJlIHRoZSBvbmVzIHRoYXQgYXJlIGluaXRpYWxpemVkIGJ5IGJpb19hbGxvY19iaW9zZXQoKS4gU2VlXFxuYmxvY2svYmlvLmMtMjcyLSAqICAgY29tbWVudCBpbiBzdHJ1Y3QgYmlvLlxcbi0tXFxuYmxvY2svYmlvLmM9NDc2PXN0YXRpYyBzdHJ1Y3QgYmlvICpiaW9fYWxsb2NfcGVyY3B1X2NhY2hlKHN0cnVjdCBiaW9fc2V0ICpicylcXG4tLVxcbmJsb2NrL2Jpby5jLTUwMS0vKipcXG5ibG9jay9iaW8uYzo1MDI6ICogYmlvX2FsbG9jX2Jpb3NldCAtIGFsbG9jYXRlIGEgYmlvIGZvciBJL09cXG5ibG9jay9iaW8uYy01MDMtICogQGJkZXY6XFx0YmxvY2sgZGV2aWNlIHRvIGFsbG9jYXRlIHRoZSBiaW8gZm9yIChjYW4gYmUgJU5VTEwpXFxuLS1cXG5ibG9jay9iaW8uYy01MzQtICovXFxuYmxvY2svYmlvLmM6NTM1OnN0cnVjdCBiaW8gKmJpb19hbGxvY19iaW9zZXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgc2hvcnQgbnJfdmVjcyxcXG5ibG9jay9iaW8uYy01MzYtXFx0XFx0XFx0ICAgICBibGtfb3BmX3Qgb3BmLCBnZnBfdCBnZnAsIHN0cnVjdCBiaW9fc2V0ICpicylcXG4tLVxcbmJsb2NrL2Jpby5jLTYxNi19XFxuYmxvY2svYmlvLmM6NjE3OkVYUE9SVF9TWU1CT0woYmlvX2FsbG9jX2Jpb3NldCk7XFxuYmxvY2svYmlvLmMtNjE4LVxcbi0tXFxuYmxvY2svYmlvLmMtNjI4LSAqXFxuYmxvY2svYmlvLmM6NjI5OiAqIE5vdGUgdGhhdCB1bmxpa2UgYmlvX2FsbG9jKCkgb3IgYmlvX2FsbG9jX2Jpb3NldCgpIGFsbG9jYXRpb25zIGZyb20gdGhpc1xcbmJsb2NrL2Jpby5jLTYzMC0gKiBmdW5jdGlvbiBhcmUgbm90IGJhY2tlZCBieSBhIG1lbXBvb2wgY2FuIGZhaWwuICBEbyBub3QgdXNlIHRoaXMgZnVuY3Rpb25cXG4tLVxcbmJsb2NrL2Jpby5jPTg5ND1zdHJ1Y3QgYmlvICpiaW9fYWxsb2NfY2xvbmUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGJpbyAqYmlvX3NyYyxcXG4tLVxcbmJsb2NrL2Jpby5jLTg5OC1cXG5ibG9jay9iaW8uYzo4OTk6XFx0YmlvID0gYmlvX2FsbG9jX2Jpb3NldChiZGV2LCAwLCBiaW9fc3JjLVxcdTAwM2ViaV9vcGYsIGdmcCwgYnMpO1xcbmJsb2NrL2Jpby5jLTkwMC1cXHRpZiAoIWJpbylcXG4tLVxcbmJsb2NrL2Jpby5jPTIwNDY9RVhQT1JUX1NZTUJPTChiaW9zZXRfZXhpdCk7XFxuLS1cXG5ibG9jay9iaW8uYy0yMDU2LSAqIERlc2NyaXB0aW9uOlxcbmJsb2NrL2Jpby5jOjIwNTc6ICogICAgU2V0IHVwIGEgYmlvX3NldCB0byBiZSB1c2VkIHdpdGggQGJpb19hbGxvY19iaW9zZXQuIEFsbG93cyB0aGUgY2FsbGVyXFxuYmxvY2svYmlvLmMtMjA1OC0gKiAgICB0byBhc2sgZm9yIGEgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIGFsbG9jYXRlZCBpbiBmcm9udCBvZiB0aGUgYmlvLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNzozNjoyMy41NjMwNTUxMTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0NDQzMTI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gQmxvY2sgSS9PIFN0cnVjdHVyZXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgc3RydWN0IGJpb2Agc3RydWN0dXJlLiBMZXQncyBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIGBpbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNhbm9uaWNhbCBkZWZpbml0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgYmFzaWMgYmxvY2sgSS9PIG9wZXJhdGlvbnMgYXQgYSBmb3VuZGF0aW9uYWwgbGV2ZWwuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlIHRoYXQgZGVzY3JpYmVzIGEgYmxvY2sgSS9PIHJlcXVlc3QuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBpbmZvcm1hdGlvbiBpdCBlbmNhcHN1bGF0ZXMg4oCTIHRoZSBkZXZpY2UsIHRoZSBzZWN0b3IgYWRkcmVzc2VzLCB0aGUgZGF0YSBidWZmZXJzLCB0aGUgSS9PIGZsYWdzLCBhbmQgZXZlcnl0aGluZyBlbHNlIGludm9sdmVkIGluIGEgdHlwaWNhbCBJL08gb3BlcmF0aW9uLiBMZXQncyBzZWUgaG93IHRoZSBrZXJuZWwgb3JjaGVzdHJhdGVzIHRoaXMgY3J1Y2lhbCBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBibG9jayBsYXllciBhbmQgdGhlIHVuZGVybHlpbmcgc3RvcmFnZSBkZXZpY2VzLiBUaW1lIHRvIGRpZyBpbiBhbmQgcmVtaW5kIG15c2VsZiBvZiB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU4NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE3OjM2OjI2LjcwNzQ4OTYyNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2MDEyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGJpbyBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYmxrX3R5cGVzLmg9MjAzPXR5cGVkZWYgdW5zaWduZWQgaW50IGJsa19xY190O1xcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaC0yMDktICovXFxuaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaDoyMTA6c3RydWN0IGJpbyB7XFxuaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaC0yMTEtXFx0c3RydWN0IGJpb1xcdFxcdCpiaV9uZXh0O1xcdC8qIHJlcXVlc3QgcXVldWUgbGluayAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNzozNjoyNi43NTYwOTQ0M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzc5MTUwNjMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBhbmFseXppbmcgYHN0cnVjdCBiaW9gOlxuXG4qKkRpdmluZyBpbnRvIGBzdHJ1Y3QgYmlvYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGl0LiBUaW1lIHRvIGRpc3NlY3QgYHN0cnVjdCBiaW9gLiBJIGFscmVhZHkga25vdyB0aGUgaGlnaC1sZXZlbDsgdGhpcyBpcyB0aGUgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmUgaW4gdGhlIExpbnV4IGtlcm5lbCBmb3IgYmxvY2sgSS9PIG9wZXJhdGlvbnMuIEJ1dCBub3cgSSB3YW50IHRvIGRyaWxsIGRvd24sIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIGZpZWxkcywgdGhlIGltcGxpY2F0aW9ucyBvZiBlYWNoIG1lbWJlciwgYW5kIGhvdyB0aGV5IGNvbnRyaWJ1dGUgdG8gZWZmaWNpZW50IGFuZCByZWxpYWJsZSBkYXRhIHRyYW5zZmVyLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHRoaW5nIGlzICpkZXNpZ25lZCrigJR3aGF0IHRyYWRlLW9mZnMgd2VyZSBtYWRlPyBXaGF0IG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIGFyZSBhdCBwbGF5P1xuXG5GaXJzdCwgSSdtIGxvb2tpbmcgZm9yIHRoZSBlc3NlbnRpYWwgZmllbGRzLiBUaGUgcG9pbnRlcnMgdG8gdGhlIGRhdGEgYnVmZmVycyAocHJvYmFibHkgYGJpX2lvX3ZlY2Agb3Igc2ltaWxhciksIHRoZSBkZXZpY2UgaW5mb3JtYXRpb24gKHdoZXJlIHRoZSBkYXRhIGlzIGhlYWRlZCksIGFuZCB0aGUgZmxhZ3MgdGhhdCBkaWN0YXRlIHRoZSBvcGVyYXRpb25hbCBjaGFyYWN0ZXJpc3RpY3PigJRyZWFkL3dyaXRlLCBzeW5jaHJvbm91cy9hc3luY2hyb25vdXMsIGV0Yy4gSSdtIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gaG93IHRoZXkgaGFuZGxlIHNjYXR0ZXItZ2F0aGVyIEkvTy4gQXJlIHRoZXkgdXNpbmcgYSBsaW5rZWQgbGlzdCBvZiBgYmlvX3ZlY2Agc3RydWN0cz8gSXMgdGhlcmUgYW55IGNhY2hpbmcgb3IgcHJlZmV0Y2hpbmcgYnVpbHQgaW4/IFRoZSBsYXlvdXQgaXMgaW1wb3J0YW50IHRvIG1pbmltaXplIGNhY2hlLWxpbmUgYm91bmNpbmcuXG5cbk5leHQsIEknbSBkaWdnaW5nIGludG8gaG93IHRoZSBgYmlvYCBpcyAqdXNlZCouIEknbGwgdHJ5IHRvIGZvbGxvdyBpdHMgbGlmZWN5Y2xlLiBIb3cgaXMgaXQgaW5pdGlhbGl6ZWQ/IEFsbG9jYXRlZD8gUXVldWVkPyBTdWJtaXR0ZWQgdG8gdGhlIGJsb2NrIGRldmljZSBkcml2ZXI/IENvbXBsZXRlZD8gV2hhdCBhYm91dCBlcnJvciBoYW5kbGluZz8gSXMgdGhlcmUgcHJvcGVyIHNlcXVlbmNpbmcgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IGluIHRoZSBmYWNlIG9mIGhhcmR3YXJlIGZhaWx1cmVzIGFuZCByZXRyaWVzPyBJJ20gbG9va2luZyBmb3IgYW55IHNpZ25zIG9mIGxvY2sgY29udGVudGlvbiBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MuIEFyZSB0aGVyZSBhbnkgcGVyLUNQVSBkYXRhIHN0cnVjdHVyZXMgdG8gcmVkdWNlIGxvY2tpbmcgb3ZlcmhlYWQ/IEknbSBob3BpbmcgdG8gc2VlIHdlbGwtZGVmaW5lZCBzdGF0ZXMgYW5kIHRyYW5zaXRpb25zIHRoYXQgbWFrZSBpdCByb2J1c3QuXG5cbkknbSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIGZvciBtb2Rlcm4gc3RvcmFnZSBkZXZpY2VzLCBsaWtlIE5WTWUgb3IgU1NEcy4gRG9lcyB0aGUgc3RydWN0dXJlIGluY29ycG9yYXRlIGFueSBmZWF0dXJlcyB0aGF0IGFsbG93IGZvciBlZmZpY2llbnQgY29tbWFuZCBxdWV1aW5nLCBUUklNIHN1cHBvcnQsIG9yIGFueSBvdGhlciBmZWF0dXJlcyBzcGVjaWZpYyB0byBhZHZhbmNlZCBzdG9yYWdlIHByb3RvY29scz8gQXJlIHRoZXJlIGFueSBoaW50cyBvZiBzdXBwb3J0IGZvciBEaXJlY3QgTWVtb3J5IEFjY2VzcyAoRE1BKSBhbmQgemVyby1jb3B5IG9wZXJhdGlvbnM/XG5cbkZpbmFsbHksIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIG9mICpmdXR1cmUtcHJvb2ZpbmcqLiBBcmUgdGhlcmUgcmVzZXJ2ZWQgZmllbGRzIG9yIGV4dGVuc2lvbiBwb2ludHMgdGhhdCBpbmRpY2F0ZSBmb3J3YXJkIGNvbXBhdGliaWxpdHk/IEhhdmUgdGhleSB0aG91Z2h0IGFib3V0IHN1cHBvcnRpbmcgbmV3IGhhcmR3YXJlIG9yIHN0b3JhZ2UgdGVjaG5vbG9naWVzPyBBcmUgdGhlcmUgYW55IGhpbnRzIG9mIGFic3RyYWN0aW9uIGxheWVycyB0aGF0IGNvdWxkIG1ha2UgaXQgZWFzaWVyIHRvIGFkZCBuZXcgZmVhdHVyZXMgbGF0ZXI/IEkgd2FudCB0byBzZWUgYSBkZXNpZ24gdGhhdCBpcyBjbGVhbiwgZXh0ZW5zaWJsZSwgYW5kIGRvZXNuJ3QgZ2V0IGluIHRoZSB3YXkgb2YgcGVyZm9ybWFuY2UuIE9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTM0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNzozNjo1NC41NDc2MDQyNDVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjEwOlxcdHN0cnVjdCBiaW8ge1xcbiAyMTE6XFx0XFx0c3RydWN0IGJpb1xcdFxcdCpiaV9uZXh0O1xcdC8qIHJlcXVlc3QgcXVldWUgbGluayAqL1xcbiAyMTI6XFx0XFx0c3RydWN0IGJsb2NrX2RldmljZVxcdCpiaV9iZGV2O1xcbiAyMTM6XFx0XFx0YmxrX29wZl90XFx0XFx0Ymlfb3BmO1xcdFxcdC8qIGJvdHRvbSBiaXRzIFJFUV9PUCwgdG9wIGJpdHNcXG4gMjE0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAqIHJlcV9mbGFncy5cXG4gMjE1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAqL1xcbiAyMTY6XFx0XFx0dW5zaWduZWQgc2hvcnRcXHRcXHRiaV9mbGFncztcXHQvKiBCSU9fKiBiZWxvdyAqL1xcbiAyMTc6XFx0XFx0dW5zaWduZWQgc2hvcnRcXHRcXHRiaV9pb3ByaW87XFxuIDIxODpcXHRcXHRlbnVtIHJ3X2hpbnRcXHRcXHRiaV93cml0ZV9oaW50O1xcbiAyMTk6XFx0XFx0dThcXHRcXHRcXHRiaV93cml0ZV9zdHJlYW07XFxuIDIyMDpcXHRcXHRibGtfc3RhdHVzX3RcXHRcXHRiaV9zdGF0dXM7XFxuIDIyMTpcXHRcXG4gMjIyOlxcdFxcdC8qXFxuIDIyMzpcXHRcXHQgKiBUaGUgYnZlYyBnYXAgYml0IGluZGljYXRlcyB0aGUgbG93ZXN0IHNldCBiaXQgaW4gYW55IGFkZHJlc3Mgb2Zmc2V0XFxuIDIyNDpcXHRcXHQgKiBiZXR3ZWVuIGFsbCBiaV9pb192ZWNzLiBUaGlzIGZpZWxkIGlzIGluaXRpYWxpemVkIG9ubHkgYWZ0ZXIgdGhlIGJpb1xcbiAyMjU6XFx0XFx0ICogaXMgc3BsaXQgdG8gdGhlIGhhcmR3YXJlIGxpbWl0cyAoc2VlIGJpb19zcGxpdF9pb19hdCgpKS4gVGhlIHZhbHVlXFxuIDIyNjpcXHRcXHQgKiBtYXkgYmUgdXNlZCB0byBjb25zaWRlciBETUEgb3B0aW1pemF0aW9uIHdoZW4gcGVyZm9ybWluZyB0aGF0XFxuIDIyNzpcXHRcXHQgKiBtYXBwaW5nLiBUaGUgdmFsdWUgaXMgY29tcGFyZWQgdG8gYSBwb3dlciBvZiB0d28gbWFzayB3aGVyZSB0aGVcXG4gMjI4OlxcdFxcdCAqIHJlc3VsdCBkZXBlbmRzIG9uIGFueSBiaXQgc2V0IHdpdGhpbiB0aGUgbWFzaywgc28gc2F2aW5nIHRoZSBsb3dlc3RcXG4gMjI5OlxcdFxcdCAqIGJpdCBpcyBzdWZmaWNpZW50IHRvIGtub3cgaWYgYW55IHNlZ21lbnQgZ2FwIGNvbGxpZGVzIHdpdGggdGhlIG1hc2suXFxuIDIzMDpcXHRcXHQgKi9cXG4gMjMxOlxcdFxcdHU4XFx0XFx0XFx0YmlfYnZlY19nYXBfYml0O1xcbiAyMzI6XFx0XFxuIDIzMzpcXHRcXHRhdG9taWNfdFxcdFxcdF9fYmlfcmVtYWluaW5nO1xcbiAyMzQ6XFx0XFxuIDIzNTpcXHRcXHQvKiBUaGUgYWN0dWFsIHZlYyBsaXN0LCBwcmVzZXJ2ZWQgYnkgYmlvX3Jlc2V0KCkgKi9cXG4gMjM2OlxcdFxcdHN0cnVjdCBiaW9fdmVjXFx0XFx0KmJpX2lvX3ZlYztcXG4gMjM3OlxcdFxcdHN0cnVjdCBidmVjX2l0ZXJcXHRiaV9pdGVyO1xcbiAyMzg6XFx0XFxuIDIzOTpcXHRcXHR1bmlvbiB7XFxuIDI0MDpcXHRcXHRcXHQvKiBmb3IgcG9sbGVkIGJpb3M6ICovXFxuIDI0MTpcXHRcXHRcXHRibGtfcWNfdFxcdFxcdGJpX2Nvb2tpZTtcXG4gMjQyOlxcdFxcdFxcdC8qIGZvciBwbHVnZ2VkIHpvbmVkIHdyaXRlcyBvbmx5OiAqL1xcbiAyNDM6XFx0XFx0XFx0dW5zaWduZWQgaW50XFx0XFx0X19iaV9ucl9zZWdtZW50cztcXG4gMjQ0OlxcdFxcdH07XFxuIDI0NTpcXHRcXHRiaW9fZW5kX2lvX3RcXHRcXHQqYmlfZW5kX2lvO1xcbiAyNDY6XFx0XFx0dm9pZFxcdFxcdFxcdCpiaV9wcml2YXRlO1xcbiAyNDc6XFx0I2lmZGVmIENPTkZJR19CTEtfQ0dST1VQXFxuIDI0ODpcXHRcXHQvKlxcbiAyNDk6XFx0XFx0ICogUmVwcmVzZW50cyB0aGUgYXNzb2NpYXRpb24gb2YgdGhlIGNzcyBhbmQgcmVxdWVzdF9xdWV1ZSBmb3IgdGhlIGJpby5cXG4gMjUwOlxcdFxcdCAqIElmIGEgYmlvIGdvZXMgZGlyZWN0IHRvIGRldmljZSwgaXQgd2lsbCBub3QgaGF2ZSBhIGJsa2cgYXMgaXQgd2lsbFxcbiAyNTE6XFx0XFx0ICogbm90IGhhdmUgYSByZXF1ZXN0X3F1ZXVlIGFzc29jaWF0ZWQgd2l0aCBpdC4gIFRoZSByZWZlcmVuY2UgaXMgcHV0XFxuIDI1MjpcXHRcXHQgKiBvbiByZWxlYXNlIG9mIHRoZSBiaW8uXFxuIDI1MzpcXHRcXHQgKi9cXG4gMjU0OlxcdFxcdHN0cnVjdCBibGtjZ19ncVxcdFxcdCpiaV9ibGtnO1xcbiAyNTU6XFx0XFx0LyogVGltZSB0aGF0IHRoaXMgYmlvIHdhcyBpc3N1ZWQuICovXFxuIDI1NjpcXHRcXHR1NjRcXHRcXHRcXHRpc3N1ZV90aW1lX25zO1xcbiAyNTc6XFx0I2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVFxcbiAyNTg6XFx0XFx0dTY0XFx0XFx0XFx0YmlfaW9jb3N0X2Nvc3Q7XFxuIDI1OTpcXHQjZW5kaWZcXG4gMjYwOlxcdCNlbmRpZlxcbiAyNjE6XFx0XFxuIDI2MjpcXHQjaWZkZWYgQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTlxcbiAyNjM6XFx0XFx0c3RydWN0IGJpb19jcnlwdF9jdHhcXHQqYmlfY3J5cHRfY29udGV4dDtcXG4gMjY0OlxcdCNlbmRpZlxcbiAyNjU6XFx0XFxuIDI2NjpcXHQjaWYgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkpXFxuIDI2NzpcXHRcXHRzdHJ1Y3QgYmlvX2ludGVncml0eV9wYXlsb2FkICpiaV9pbnRlZ3JpdHk7IC8qIGRhdGEgaW50ZWdyaXR5ICovXFxuIDI2ODpcXHQjZW5kaWZcXG4gMjY5OlxcdFxcbiAyNzA6XFx0XFx0dW5zaWduZWQgc2hvcnRcXHRcXHRiaV92Y250O1xcdC8qIGhvdyBtYW55IGJpb192ZWMncyAqL1xcbiAyNzE6XFx0XFxuIDI3MjpcXHRcXHQvKlxcbiAyNzM6XFx0XFx0ICogRXZlcnl0aGluZyBzdGFydGluZyB3aXRoIGJpX21heF92ZWNzIHdpbGwgYmUgcHJlc2VydmVkIGJ5IGJpb19yZXNldCgpXFxuIDI3NDpcXHRcXHQgKi9cXG4gMjc1OlxcdFxcbiAyNzY6XFx0XFx0LypcXG4gMjc3OlxcdFxcdCAqIE51bWJlciBvZiBlbGVtZW50cyBpbiBgYmlfaW9fdmVjYCB0aGF0IHdlcmUgYWxsb2NhdGVkIGZvciB0aGlzIGJpby5cXG4gMjc4OlxcdFxcdCAqIE9ubHkgdXNlZCBieSB0aGUgYmlvIHN1Ym1pdHRlciB0byBtYWtlIGBiaW9fYWRkX3BhZ2VgIGZhaWwgb25jZSBmdWxsXFxuIDI3OTpcXHRcXHQgKiBhbmQgdG8gZnJlZSB0aGUgYGJpX2lvX3ZlY2AgYWxsb2NhdGlvbi4gTXVzdCBub3QgYmUgdXNlZCBpbiBkcml2ZXJzXFxuIDI4MDpcXHRcXHQgKiBhbmQgZG9lcyBub3QgaG9sZCBhIHVzZWZ1bCB2YWx1ZSBmb3IgY2xvbmVkIGJpb3MuXFxuIDI4MTpcXHRcXHQgKi9cXG4gMjgyOlxcdFxcdHVuc2lnbmVkIHNob3J0XFx0XFx0YmlfbWF4X3ZlY3M7XFxuIDI4MzpcXHRcXG4gMjg0OlxcdFxcdGF0b21pY190XFx0XFx0X19iaV9jbnQ7XFx0LyogcGluIGNvdW50ICovXFxuIDI4NTpcXHRcXG4gMjg2OlxcdFxcdHN0cnVjdCBiaW9fc2V0XFx0XFx0KmJpX3Bvb2w7XFxuIDI4NzpcXHR9O1xcbiAyODg6XFx0XFxuIDI4OTpcXHQjZGVmaW5lIEJJT19SRVNFVF9CWVRFU1xcdFxcdG9mZnNldG9mKHN0cnVjdCBiaW8sIGJpX21heF92ZWNzKVxcbiAyOTA6XFx0I2RlZmluZSBCSU9fTUFYX1NJWkVcXHRcXHRVSU5UX01BWCAvKiBtYXggdmFsdWUgb2YgYmlfaXRlci5iaV9zaXplICovXFxuIDI5MTpcXHQjZGVmaW5lIEJJT19NQVhfU0VDVE9SU1xcdFxcdChCSU9fTUFYX1NJWkUgXFx1MDAzZVxcdTAwM2UgU0VDVE9SX1NISUZUKVxcbiAyOTI6XFx0XFxuIDI5MzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBiaW9fdmVjICpiaW9faW5saW5lX3ZlY3Moc3RydWN0IGJpbyAqYmlvKVxcbiAyOTQ6XFx0e1xcbiAyOTU6XFx0XFx0cmV0dXJuIChzdHJ1Y3QgYmlvX3ZlYyAqKShiaW8gKyAxKTtcXG4gMjk2OlxcdH1cXG4gMjk3OlxcdFxcbiAyOTg6XFx0LypcXG4gMjk5OlxcdCAqIGJpbyBmbGFnc1xcbiAzMDA6XFx0ICovXFxuIDMwMTpcXHRlbnVtIHtcXG4gMzAyOlxcdFxcdEJJT19QQUdFX1BJTk5FRCxcXHQvKiBVbnBpbiBwYWdlcyBpbiBiaW9fcmVsZWFzZV9wYWdlcygpICovXFxuIDMwMzpcXHRcXHRCSU9fQ0xPTkVELFxcdFxcdC8qIGRvZXNuJ3Qgb3duIGRhdGEgKi9cXG4gMzA0OlxcdFxcdEJJT19RVUlFVCxcXHRcXHQvKiBNYWtlIEJJTyBRdWlldCAqL1xcbiAzMDU6XFx0XFx0QklPX0NIQUlOLFxcdFxcdC8qIGNoYWluZWQgYmlvLCAtXFx1MDAzZWJpX3JlbWFpbmluZyBpbiBlZmZlY3QgKi9cXG4gMzA2OlxcdFxcdEJJT19SRUZGRUQsXFx0XFx0LyogYmlvIGhhcyBlbGV2YXRlZCAtXFx1MDAzZWJpX2NudCAqL1xcbiAzMDc6XFx0XFx0QklPX0JQU19USFJPVFRMRUQsXFx0LyogVGhpcyBiaW8gaGFzIGFscmVhZHkgYmVlbiBzdWJqZWN0ZWQgdG9cXG4gMzA4OlxcdFxcdFxcdFxcdFxcdCAqIHRocm90dGxpbmcgcnVsZXMuIERvbid0IGRvIGl0IGFnYWluLiAqL1xcbiAzMDk6XFx0XFx0QklPX1RSQUNFX0NPTVBMRVRJT04sXFx0LyogYmlvX2VuZGlvKCkgc2hvdWxkIHRyYWNlIHRoZSBmaW5hbCBjb21wbGV0aW9uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE3OjM2OjU0LjU0NzcwNTkwNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjEyMTc4NzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYmlvIFN0cnVjdHVyZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgaXQncyBhZGRpbmcgYGJpby1cdTAwM2ViaV9idmVjX2dhcF9iaXRgIHRvIHRoZSBgX19iaW9fY2xvbmVgIGZ1bmN0aW9uLiBUaGF0J3MgYSBuZXcgb25lLiAgSXQncyBhbHNvIGJlaW5nIHJlc2V0IHRvIDAgaW4gYGJpb19zcGxpdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gIElzIHRoaXMgYSBiaXRmaWVsZCBmbGFnIGJlaW5nIGFkZGVkLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGV4aXN0aW5nIGBiaW9gIHN0cnVjdHVyZSBhbmQgaG93IHRoaXMgbmV3IG1lbWJlciBtb2RpZmllcyB0aGF0IGludGVyYWN0aW9uLiBJdCBzZWVtcyBsaWtlIHRoZSBpbnRlbnRpb24gaXMgdG8gY2FycnkgdGhhdCBiaXQgYWNyb3NzIGNsb25lcywgYnV0IHJlc2V0IGl0IG9uIGEgc3BsaXQuXG5cbk5vdywgd2FpdCBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gY29uc2lkZXIgaG93IGBiaW9fYWxsb2NfYmlvc2V0YCBhbmQgYGJpb19pbml0YCBhcmUgaW52b2x2ZWQgaGVyZS4gRG9uJ3QgdGhvc2UgZnVuY3Rpb25zIHJlc2V0IGEgZ29vZCBjaHVuayBvZiB0aGUgYGJpb2Agc3RydWN0dXJlPyBJIGJlbGlldmUgdGhleSBjYWxsIGBiaW9faW5pdGAsIGFuZCBJIHJlY2FsbCBgYmlvX2luaXRgIGNsZWFyaW5nIHRoZSBgYmlvYCBzdHJ1Y3R1cmUgdXAgdG8gYEJJT19SRVNFVF9CWVRFU2AuIEkgbmVlZCB0byBjb25maXJtIGV4YWN0bHkgd2hhdCBnZXRzIGNsZWFyZWQgYnkgYGJpb19pbml0YCwgYW5kIHdoZXRoZXIgdGhpcyBuZXcgZmllbGQgaXMgd2l0aGluIHRoYXQgcmVzZXQgcmFuZ2UuIEl0J3MgY3JpdGljYWwgdG8gZW5zdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMgb3IgY29uZmxpY3RzIHdpdGggb3RoZXIgaW5pdGlhbGl6YXRpb24gcm91dGluZXMuIEkgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIGBiaW9faW5pdGAncyBjb2RlIHJpZ2h0IGF3YXkuICBUaGUgaW1wbGljYXRpb25zIG9mICp3aGVyZSogdGhpcyBuZXcgYml0IHJlc2lkZXMgaW4gdGhlIGJpbyBhbmQgdGhlIGluaXRpYWxpemF0aW9uIGJlaGF2aW9yIGFyZSBjcml0aWNhbCB0byBwcm9wZXJseSB1bmRlcnN0YW5kaW5nIGl0cyBhZGRpdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjExMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE3OjM3OjAwLjc1OTg4NzM2M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2Mzc1MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgYmlvX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svYmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmlvLmM9MTk1PXN0YXRpYyB2b2lkIGJpb19mcmVlKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2Jpby5jLTIxNi0gKi9cXG5ibG9jay9iaW8uYzoyMTc6dm9pZCBiaW9faW5pdChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBiaW9fdmVjICp0YWJsZSxcXG5ibG9jay9iaW8uYy0yMTgtXFx0ICAgICAgdW5zaWduZWQgc2hvcnQgbWF4X3ZlY3MsIGJsa19vcGZfdCBvcGYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE3OjM3OjAwLjg2NjI2Nzg0M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODUwNTk4MTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFRhc2sqKlxuXG5BbHJpZ2h0LCB0aGUgZGlyZWN0aXZlIGlzIHRvIHN1bW1hcml6ZSBhbmQgaW50ZXJwcmV0IHRoZSB0aG91Z2h0IHByb2Nlc3MsIGVzc2VudGlhbGx5IHN0ZXBwaW5nIGludG8gdGhlIHNob2VzIG9mIHRoZSBpbmRpdmlkdWFsIGFuZCBkZXNjcmliaW5nIHdoYXQncyBoYXBwZW5pbmcgaW50ZXJuYWxseS4gVGhlIGZpcnN0LCBhbmQgbW9zdCBpbXBvcnRhbnQsIHBpZWNlIG9mIGluZm9ybWF0aW9uIGlzIHRoZSBkb2N1bWVudCwgY2FsbGVkIGBiaW9faW5pdGAuIE9rYXksIEkga25vdyB3aGF0IHRoYXQgbWVhbnMuIEknbSBnb2luZyB0byBzdGFydCBieSByZWFkaW5nIHRoZSBjb2RlLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MDAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE3OjM3OjAzLjcxNjg2ODM3N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svYmlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjE3OlxcdHZvaWQgYmlvX2luaXQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmlvX3ZlYyAqdGFibGUsXFxuIDIxODpcXHRcXHQgICAgICB1bnNpZ25lZCBzaG9ydCBtYXhfdmVjcywgYmxrX29wZl90IG9wZilcXG4gMjE5OlxcdHtcXG4gMjIwOlxcdFxcdGJpby1cXHUwMDNlYmlfbmV4dCA9IE5VTEw7XFxuIDIyMTpcXHRcXHRiaW8tXFx1MDAzZWJpX2JkZXYgPSBiZGV2O1xcbiAyMjI6XFx0XFx0YmlvLVxcdTAwM2ViaV9vcGYgPSBvcGY7XFxuIDIyMzpcXHRcXHRiaW8tXFx1MDAzZWJpX2ZsYWdzID0gMDtcXG4gMjI0OlxcdFxcdGJpby1cXHUwMDNlYmlfaW9wcmlvID0gMDtcXG4gMjI1OlxcdFxcdGJpby1cXHUwMDNlYmlfd3JpdGVfaGludCA9IDA7XFxuIDIyNjpcXHRcXHRiaW8tXFx1MDAzZWJpX3dyaXRlX3N0cmVhbSA9IDA7XFxuIDIyNzpcXHRcXHRiaW8tXFx1MDAzZWJpX3N0YXR1cyA9IDA7XFxuIDIyODpcXHRcXHRiaW8tXFx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCA9IDA7XFxuIDIyOTpcXHRcXHRiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gMDtcXG4gMjMwOlxcdFxcdGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplID0gMDtcXG4gMjMxOlxcdFxcdGJpby1cXHUwMDNlYmlfaXRlci5iaV9pZHggPSAwO1xcbiAyMzI6XFx0XFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX29mZnNldCA9IDA7XFxuIDIzMzpcXHRcXHRiaW8tXFx1MDAzZWJpX2VuZF9pbyA9IE5VTEw7XFxuIDIzNDpcXHRcXHRiaW8tXFx1MDAzZWJpX3ByaXZhdGUgPSBOVUxMO1xcbiAyMzU6XFx0I2lmZGVmIENPTkZJR19CTEtfQ0dST1VQXFxuIDIzNjpcXHRcXHRiaW8tXFx1MDAzZWJpX2Jsa2cgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNzozNzowMy43MTY5Nzc4NjdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI5MDUxNDc2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGJpX2J2ZWNfZ2FwX2JpdGAgSXNzdWUqKlxuXG5Pa2F5LCBzbyBgYmlvX2luaXRgICpleHBsaWNpdGx5KiBzZXRzIGBiaW8tXHUwMDNlYmlfYnZlY19nYXBfYml0YCB0byB6ZXJvLiBUaGF0J3MgdGhlIGJhc2VsaW5lLCB0aGUgaW5pdGlhbGl6YXRpb24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCB0aGlzICp3YXNuJ3QqIGhhcHBlbmluZywgdGhhdCBgYmlfYnZlY19nYXBfYml0YCB3YXMgZ2V0dGluZyBsZWZ0IHVuaW5pdGlhbGl6ZWQgc29tZXdoZXJlLiBCdXQgdGhhdCdzIHdyb25nLiBJdCdzICphbHdheXMqIGluaXRpYWxpemVkIHRvIHplcm8gZHVyaW5nIGFsbG9jYXRpb24uXG5cblRoZSByZWFsIHByb2JsZW0gbGllcyBpbiB0aGUgKmNsb25pbmcqIGFuZCAqc3BsaXR0aW5nKiBvcGVyYXRpb25zLiBJdCBsb29rcyBsaWtlIGBfX2Jpb19jbG9uZWAgd2Fzbid0IGNvcHlpbmcgdGhlIGBiaV9idmVjX2dhcF9iaXRgIGZyb20gdGhlIHNvdXJjZSBiaW8gdG8gdGhlIGNsb25lZCBiaW8uIEFuZCBgYmlvX3NwbGl0YCB3YXNuJ3QgcmVzZXR0aW5nIGl0IHRvIHplcm8gZm9yIHRoZSByZW1haW5pbmcgcGFydC4gVGhhdCdzIGEgbG9naWNhbCBmbGF3LiBUaGUgbWVtb3J5ICppcyogaW5pdGlhbGl6ZWQsIGJ1dCBpdCBjb3VsZCBlbmQgdXAgd2l0aCBhICpzdGFsZSogdmFsdWUsIGEgdmFsdWUgdGhhdCBkb2Vzbid0IHJlZmxlY3QgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGJpbyBhZnRlciB0aGUgY2xvbmluZyBvciBzcGxpdHRpbmcuIFRoaXMgY291bGQgYWJzb2x1dGVseSBsZWFkIHRvIGluY29ycmVjdCBETUEgbWFwcGluZyBvciBvdGhlciBjb3JydXB0aW9uLCBidXQgaXQgaXMgbm90IGEgZGlyZWN0IG1lbW9yeSBpbml0aWFsaXphdGlvbiBpc3N1ZS5cblxuV2FpdC4uLiBJIG5lZWQgdG8gY2hlY2sgbXkgYXNzdW1wdGlvbi4gQ2FuIGBfX2Jpb19jbG9uZWAgKmFjdHVhbGx5KiBiZSBjYWxsZWQgb24gYW4gdW5pbml0aWFsaXplZCBiaW8/IE5vLCB0aGF0IGNhbid0IGJlLiBgX19iaW9fY2xvbmVgIGlzIGNhbGxlZCBmcm9tIGBiaW9fYWxsb2NfY2xvbmVgLCB3aGljaCB1c2VzIGBiaW9fYWxsb2NfYmlvc2V0YCB3aGljaCB0aGVuICpjYWxscyogYGJpb19pbml0YC4gVGhlcmVmb3JlLCB0aGUgKm5ldyogYmlvIHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aCBgYmlfYnZlY19nYXBfYml0ID0gMGAuIFNvLCBgX19iaW9fY2xvbmVgIGNvcGllcyBmaWVsZHMgZnJvbSB0aGUgc291cmNlIGJpbyBhbmQsIGlmIGl0ICpkaWRuJ3QqIGNvcHkgYGJpX2J2ZWNfZ2FwX2JpdGAsIGl0IHdvdWxkIHNpbXBseSByZW1haW4gemVybyFcblxuT2theSwgc28gaXQncyBhICpsb2dpY2FsIGJ1ZyosIHB1cmUgYW5kIHNpbXBsZS4gRWl0aGVyIHRoZSBjbG9uZSBkb2Vzbid0IGluaGVyaXQgdGhlIGNvcnJlY3QgZ2FwIGJpdCwgb3IgdGhlIHNwbGl0IGJpbyBkb2Vzbid0IHJlc2V0IGl0LiBUaGlzIGRvZXNuJ3QgaW52b2x2ZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB0aG91Z2guIFRoZSBtZW1vcnkgKmlzKiBmdWxseSBpbml0aWFsaXplZC4gTm93LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBiaW9fcmVzZXRgIHRvIGVuc3VyZSBteSB1bmRlcnN0YW5kaW5nIGlzIGNvbXBsZXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDI3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6Mzc6MTAuMDA3NDk0NzQyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzA4MjUzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIGJpb19yZXNldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9iaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iaW8uYz0yNjA9RVhQT1JUX1NZTUJPTChiaW9faW5pdCk7XFxuLS1cXG5ibG9jay9iaW8uYy0yNzMtICovXFxuYmxvY2svYmlvLmM6Mjc0OnZvaWQgYmlvX3Jlc2V0KHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX29wZl90IG9wZilcXG5ibG9jay9iaW8uYy0yNzUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNzozNzoxMC4wNjA1ODE1OThaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzExMDUxNDA0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogQmlvX3Jlc2V0IEZpbGUqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFwiYmlvX3Jlc2V0XCIuLi4gdGhhdCBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIHN5c3RlbSByZXNldCBvciBpbml0aWFsaXphdGlvbiByZWxhdGVkIHRvIGJpb2xvZ2ljYWwgZGF0YSBvciBhIGJpb2xvZ2ljYWwgcHJvY2Vzcy4gVGhlIG5hbWluZyBjb252ZW50aW9uIGxpa2VseSBpbmRpY2F0ZXMgYSBzcGVjaWZpYyBtb2R1bGUgb3IgY29tcG9uZW50LiBJJ20gYXNzdW1pbmcgdGhpcyBpc24ndCBzb21lIGdlbmVyaWMgc2NyaXB0OyB0aGUgY29udGV4dCBpcyBsaWtlbHkgbW9yZSBzcGVjaWFsaXplZC4gSSBpbW1lZGlhdGVseSBzdGFydCBtZW50YWxseSBjYXRhbG9naW5nIHdoYXQgdGhpcyBjb3VsZCBhcHBseSB0bzogcGVyaGFwcyBhIGRhdGEgcGlwZWxpbmUgcmVzZXR0aW5nIGEgYmlvbG9naWNhbCBkYXRhYmFzZT8gTWF5YmUgaXQncyBhIHNjcmlwdCB0aGF0IGNsZWFucyBhIGJpb2luZm9ybWF0aWNzIGVudmlyb25tZW50IGFmdGVyIGEgcGFydGljdWxhciBydW4/IEl0IGNvdWxkIGV2ZW4gYmUgYSByZXNldCBwcm9jZWR1cmUgdGllZCB0byB0aGUgb3BlcmF0aW9uIG9mIGEgcGllY2Ugb2YgZXhwZXJpbWVudGFsIGFwcGFyYXR1cy4gTXkgZm9jdXMgbm93IGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW1wYWN0cyBvZiB3aGF0ZXZlciBpcyBjb250YWluZWQgd2l0aGluIHRoYXQgYGJpb19yZXNldGAgZmlsZS4gVGltZSB0byBkaWcgaW4gYW5kIGdldCB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzY5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNzozNzoxMy4xNzEwOTc5MTdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL2Jpby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3NCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3NDpcXHR2b2lkIGJpb19yZXNldChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19vcGZfdCBvcGYpXFxuIDI3NTpcXHR7XFxuIDI3NjpcXHRcXHRzdHJ1Y3QgYmlvX3ZlYyAgICAgICAgICAqYnYgPSBiaW8tXFx1MDAzZWJpX2lvX3ZlYztcXG4gMjc3OlxcdFxcbiAyNzg6XFx0XFx0YmlvX3VuaW5pdChiaW8pO1xcbiAyNzk6XFx0XFx0bWVtc2V0KGJpbywgMCwgQklPX1JFU0VUX0JZVEVTKTtcXG4gMjgwOlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNmJpby1cXHUwMDNlX19iaV9yZW1haW5pbmcsIDEpO1xcbiAyODE6XFx0XFx0YmlvLVxcdTAwM2ViaV9pb192ZWMgPSBidjtcXG4gMjgyOlxcdFxcdGJpby1cXHUwMDNlYmlfYmRldiA9IGJkZXY7XFxuIDI4MzpcXHRcXHRpZiAoYmlvLVxcdTAwM2ViaV9iZGV2KVxcbiAyODQ6XFx0XFx0XFx0YmlvX2Fzc29jaWF0ZV9ibGtnKGJpbyk7XFxuIDI4NTpcXHRcXHRiaW8tXFx1MDAzZWJpX29wZiA9IG9wZjtcXG4gMjg2OlxcdH1cXG4gMjg3OlxcdEVYUE9SVF9TWU1CT0woYmlvX3Jlc2V0KTtcXG4gMjg4OlxcdFxcbiAyODk6XFx0LyoqXFxuIDI5MDpcXHQgKiBiaW9fcmV1c2UgLSByZXVzZSBhIGJpbyB3aXRoIHRoZSBwYXlsb2FkIGxlZnQgaW50YWN0XFxuIDI5MTpcXHQgKiBAYmlvOlxcdGJpbyB0byByZXVzZVxcbiAyOTI6XFx0ICogQG9wZjpcXHRvcGVyYXRpb24gYW5kIGZsYWdzIGZvciB0aGUgbmV4dCBJL09cXG4gMjkzOlxcdCAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE3OjM3OjEzLjE3MTI3MTY5N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzA5NTUwNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgYmlfYnZlY19nYXBfYml0YCBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgcmV2b2x2ZXMgYXJvdW5kIGBiaV9idmVjX2dhcF9iaXRgIHdpdGhpbiB0aGUgYHN0cnVjdCBiaW9gLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIHN5c3RlbSB1c2VzIGBiaW9fcmVzZXRgIHRvIGluaXRpYWxpemUgdGhpcyBzdHJ1Y3QsIHVzaW5nIGBtZW1zZXRgIHRvIHplcm8gb3V0IGEgcG9ydGlvbiBvZiB0aGUgc3RydWN0dXJlIHVwIHRvIGBCSU9fUkVTRVRfQllURVNgLCB3aGljaCBpcyBkZWZpbmVkIGFzIGBvZmZzZXRvZihzdHJ1Y3QgYmlvLCBiaV9tYXhfdmVjcylgLiBCZWNhdXNlIGBiaV9idmVjX2dhcF9iaXRgIHByZWNlZGVzIGBiaV9tYXhfdmVjc2AgaW4gdGhlIHN0cnVjdHVyZSwgdGhpcyBlZmZlY3RpdmVseSB6ZXJvcyBpdCBvdXQgZHVyaW5nIHJlc2V0LiBUaGlzIG1lYW5zIHRoYXQsIGF0IGxlYXN0IGZyb20gYW4gaW5pdGlhbGl6YXRpb24gcGVyc3BlY3RpdmUsIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIGBiaV9idmVjX2dhcF9iaXRgIHNob3VsZCAqYWx3YXlzKiBiZSBpbml0aWFsaXplZCwgYXQgbGVhc3QgaW5pdGlhbGx5LlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGFkZHJlc3NlcyBhICpsb2dpY2FsKiBmbGF3LCBzcGVjaWZpY2FsbHkgaW4gaG93IGBiaV9idmVjX2dhcF9iaXRgIGlzIGhhbmRsZWQgZHVyaW5nIGJpbyBjbG9uaW5nICh1c2luZyBgX19iaW9fY2xvbmVgKSBhbmQgc3BsaXR0aW5nICh1c2luZyBgYmlvX3NwbGl0YCkuIEl0J3MgYWJvdXQgZW5zdXJpbmcgdGhpcyBiaXQsIHdoaWNoIHNpZ25pZmllcyB0aGUgc21hbGxlc3Qgc2V0IGJpdCBpbiB0aGUgb2Zmc2V0IGJldHdlZW4gYGJpX2lvX3ZlY3NgIGZvciBETUEgb3B0aW1pemF0aW9uLCBpcyBjb3JyZWN0bHkgcHJvcGFnYXRlZCBvciBjbGVhcmVkIGluIHRoZXNlIG9wZXJhdGlvbnMuIElmIGl0J3Mgbm90IGhhbmRsZWQgY29ycmVjdGx5LCB3ZSBjb3VsZCBlbmQgdXAgd2l0aCBpbmNvcnJlY3QgRE1BIG1hcHBpbmdzIG9yIGZ1bmt5IGJlaGF2aW9yIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIuXG5cbk5vdywgY29uY2VybmluZyB0aGUgYE5lZWRzS01TQU5gIHRhZywgbXkgY29uY2x1c2lvbiBpcyBpdCdzIGluY29ycmVjdCBoZXJlLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0ICp1bmluaXRpYWxpemVkKiBtZW1vcnkgcmVhZHMuIFRoZSBjb2RlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgYGJpX2J2ZWNfZ2FwX2JpdGAgdG8gemVyby4gQW55IG1lbW9yeSBjb3JydXB0aW9uIGFyaXNpbmcgZnJvbSB0aGUgaW5jb3JyZWN0IGhhbmRsaW5nIG9mIHRoaXMgYml0IHdvdWxkIGxpa2VseSBtYW5pZmVzdCBhcyBiYWQgRE1BLCBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcywgb3Igc29tZXRoaW5nIHNpbWlsYXIuIFRoaXMgd291bGQsIEkgYmVsaWV2ZSwgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIG90aGVyIG1vcmUgZ2VuZXJhbCBtZW1vcnkgc2FmZXR5IHRvb2xzLCBub3QgS01TQU4uIFRoZSBsb2dpYyBlcnJvciBtaWdodCBsZWFkIHRvIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uLCBidXQgaXQgaXMgbm90IGJlY2F1c2UgdGhlIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLCBidXQgYmVjYXVzZSBvZiBpbmNvcnJlY3QgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MjAsIk91dHB1dFRva2VucyI6MjAzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6Mzc6MjEuODgwODQ2NTQ1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19iaW9fY2xvbmVgIGFuZCBgYmlvX3NwbGl0YCB0byBwcm9wZXJseSBwcm9wYWdhdGUgYW5kIHJlc2V0IHRoZSBgYmlfYnZlY19nYXBfYml0YCBmaWVsZCBvZiBgc3RydWN0IGJpb2AuIFRoaXMgZmllbGQgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgbG93ZXN0IHNldCBiaXQgaW4gYW55IGFkZHJlc3Mgb2Zmc2V0IGJldHdlZW4gYWxsIGBiaV9pb192ZWNzYCBmb3IgRE1BIG9wdGltaXphdGlvbi4gV2hlbiBhIGJpbyBpcyBhbGxvY2F0ZWQgb3IgcmVzZXQsIGBiaV9idmVjX2dhcF9iaXRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCAodmlhIGBiaW9faW5pdGAgb3IgYG1lbXNldGAgaW4gYGJpb19yZXNldGApLiBUaGVyZWZvcmUsIHRoZSBpc3N1ZSBiZWluZyBmaXhlZCBpcyBhIGxvZ2ljYWwgYnVnIHdoZXJlIHRoZSBnYXAgYml0IGlzIGVpdGhlciBsb3N0IGR1cmluZyBjbG9uaW5nIG9yIGluY29ycmVjdGx5IHJldGFpbmVkIGR1cmluZyBzcGxpdHRpbmcsIHJhdGhlciB0aGFuIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQuIEJlY2F1c2UgdGhlIGZpZWxkIGlzIGFsd2F5cyBpbml0aWFsaXplZCwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4gQW55IHJlc3VsdGluZyBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyBkdWUgdG8gaW5jb3JyZWN0IERNQSBtYXBwaW5ncyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fYmlvX2Nsb25lYCBhbmQgYGJpb19zcGxpdGAgdG8gcHJvcGVybHkgcHJvcGFnYXRlIGFuZCByZXNldCB0aGUgYGJpX2J2ZWNfZ2FwX2JpdGAgZmllbGQgb2YgYHN0cnVjdCBiaW9gLiBUaGlzIGZpZWxkIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGxvd2VzdCBzZXQgYml0IGluIGFueSBhZGRyZXNzIG9mZnNldCBiZXR3ZWVuIGFsbCBgYmlfaW9fdmVjc2AgZm9yIERNQSBvcHRpbWl6YXRpb24uIFdoZW4gYSBiaW8gaXMgYWxsb2NhdGVkIG9yIHJlc2V0LCBgYmlfYnZlY19nYXBfYml0YCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAgKHZpYSBgYmlvX2luaXRgIG9yIGBtZW1zZXRgIGluIGBiaW9fcmVzZXRgKS4gVGhlcmVmb3JlLCB0aGUgaXNzdWUgYmVpbmcgZml4ZWQgaXMgYSBsb2dpY2FsIGJ1ZyB3aGVyZSB0aGUgZ2FwIGJpdCBpcyBlaXRoZXIgbG9zdCBkdXJpbmcgY2xvbmluZyBvciBpbmNvcnJlY3RseSByZXRhaW5lZCBkdXJpbmcgc3BsaXR0aW5nLCByYXRoZXIgdGhhbiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLiBCZWNhdXNlIHRoZSBmaWVsZCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuIEFueSByZXN1bHRpbmcgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgZHVlIHRvIGluY29ycmVjdCBETUEgbWFwcGluZ3Mgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmwq5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 17:10:32 +0000 UTC FinishedAt: 2026-08-17 17:37:23 +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": "84213403e316cd75061785ba152941c6d5b7e97d", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "84213403e316cd75061785ba152941c6d5b7e97d", "config_name": "upstream-apparmor-kasan.config", "series_id": "5c4938d2-7dd4-4742-928f-5de8bfc9fbd7" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "bio_alloc_clone", "bio_init_clone", "bio_split", "blk_rq_append_bio", "bio_split_io_at", "bio_seg_gap", "blk_mq_submit_bio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE3OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmlvX2FsbG9jX2Nsb25lJiMzNDssCiAgICAmIzM0O2Jpb19pbml0X2Nsb25lJiMzNDssCiAgICAmIzM0O2Jpb19zcGxpdCYjMzQ7LAogICAgJiMzNDtibGtfcnFfYXBwZW5kX2JpbyYjMzQ7LAogICAgJiMzNDtiaW9fc3BsaXRfaW9fYXQmIzM0OywKICAgICYjMzQ7YmlvX3NlZ19nYXAmIzM0OywKICAgICYjMzQ7YmxrX21xX3N1Ym1pdF9iaW8mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19iaW9fY2xvbmVgIGFuZCBgYmlvX3NwbGl0YCB0byBwcm9wZXJseSBwcm9wYWdhdGUgYW5kIHJlc2V0IHRoZSBgYmlfYnZlY19nYXBfYml0YCBmaWVsZCBvZiBgc3RydWN0IGJpb2AuIFRoaXMgZmllbGQgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgbG93ZXN0IHNldCBiaXQgaW4gYW55IGFkZHJlc3Mgb2Zmc2V0IGJldHdlZW4gYWxsIGBiaV9pb192ZWNzYCBmb3IgRE1BIG9wdGltaXphdGlvbi4gV2hlbiBhIGJpbyBpcyBhbGxvY2F0ZWQgb3IgcmVzZXQsIGBiaV9idmVjX2dhcF9iaXRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCAodmlhIGBiaW9faW5pdGAgb3IgYG1lbXNldGAgaW4gYGJpb19yZXNldGApLiBUaGVyZWZvcmUsIHRoZSBpc3N1ZSBiZWluZyBmaXhlZCBpcyBhIGxvZ2ljYWwgYnVnIHdoZXJlIHRoZSBnYXAgYml0IGlzIGVpdGhlciBsb3N0IGR1cmluZyBjbG9uaW5nIG9yIGluY29ycmVjdGx5IHJldGFpbmVkIGR1cmluZyBzcGxpdHRpbmcsIHJhdGhlciB0aGFuIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQuIEJlY2F1c2UgdGhlIGZpZWxkIGlzIGFsd2F5cyBpbml0aWFsaXplZCwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4gQW55IHJlc3VsdGluZyBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyBkdWUgdG8gaW5jb3JyZWN0IERNQSBtYXBwaW5ncyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIG1pc3NpbmcgaW5pdGlhbGl6YXRpb24gYW5kIGNvcHlpbmcgb2YgYGJpX2J2ZWNfZ2FwX2JpdGAgaW4gYGJpb19zcGxpdGAgYW5kIGBfX2Jpb19jbG9uZWAuIFRoaXMgZmllbGQgaXMgdXNlZCB0byB0cmFjayBnYXAgYml0cyBmb3IgYmlvIHZlY3RvcnMgYW5kIGlzIGNvbnN1bWVkIGJ5IGNvcmUgYmxvY2sgbGF5ZXIgZnVuY3Rpb25zIGxpa2UgYGJsa19ycV9hcHBlbmRfYmlvYCBhbmQgYGJpb19zcGxpdF9pb19hdGAuIEZ1enppbmcgdGhlc2UgZnVuY3Rpb25zIGlzIGltcG9ydGFudCB0byBlbnN1cmUgY29ycmVjdCBoYW5kbGluZyBvZiBiaW8gdmVjdG9yIGdhcHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTc6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0NjU5NzAwMDNhNjc5ZDgwZmZkYmZjNTUyYmIxZDFjNmZmNDkzNjY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTc6MzU6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmlvLmMgYi9ibG9jay9iaW8uY1xuaW5kZXggODk4YjJmNWVmOGM4MS4uMzNhYTQzOWMxYmFlMiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9iaW8uY1xuQEAgLTg1OSw2ICYjNDM7ODU5LDcgQEAgc3RhdGljIGludCBfX2Jpb19jbG9uZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW8gKmJpb19zcmMsIGdmcF90IGdmcClcbiBcdGJpby1cdTAwM2ViaV9pb3ByaW8gPSBiaW9fc3JjLVx1MDAzZWJpX2lvcHJpbztcbiBcdGJpby1cdTAwM2ViaV93cml0ZV9oaW50ID0gYmlvX3NyYy1cdTAwM2ViaV93cml0ZV9oaW50O1xuIFx0YmlvLVx1MDAzZWJpX3dyaXRlX3N0cmVhbSA9IGJpb19zcmMtXHUwMDNlYmlfd3JpdGVfc3RyZWFtO1xuJiM0MztcdGJpby1cdTAwM2ViaV9idmVjX2dhcF9iaXQgPSBiaW9fc3JjLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdDtcbiBcdGJpby1cdTAwM2ViaV9pdGVyID0gYmlvX3NyYy1cdTAwM2ViaV9pdGVyO1xuIFx0YmlvLVx1MDAzZWJpX2lvX3ZlYyA9IGJpb19zcmMtXHUwMDNlYmlfaW9fdmVjO1xuIFxuQEAgLTE5NzEsNiAmIzQzOzE5NzIsNyBAQCBzdHJ1Y3QgYmlvICpiaW9fc3BsaXQoc3RydWN0IGJpbyAqYmlvLCBpbnQgc2VjdG9ycyxcbiBcdFx0YmlvX2ludGVncml0eV90cmltKHNwbGl0KTtcbiBcbiBcdGJpb19hZHZhbmNlKGJpbywgc3BsaXQtXHUwMDNlYmlfaXRlci5iaV9zaXplKTtcbiYjNDM7XHRiaW8tXHUwMDNlYmlfYnZlY19nYXBfYml0ID0gMDtcbiBcbiBcdGlmIChiaW9fZmxhZ2dlZChiaW8sIEJJT19UUkFDRV9DT01QTEVUSU9OKSlcbiBcdFx0YmlvX3NldF9mbGFnKHNwbGl0LCBCSU9fVFJBQ0VfQ09NUExFVElPTik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTc6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmlvX2FsbG9jX2Nsb25lJiMzNDssCiAgICAmIzM0O2Jpb19pbml0X2Nsb25lJiMzNDssCiAgICAmIzM0O2Jpb19zcGxpdCYjMzQ7LAogICAgJiMzNDtibGtfcnFfYXBwZW5kX2JpbyYjMzQ7LAogICAgJiMzNDtiaW9fc3BsaXRfaW9fYXQmIzM0OywKICAgICYjMzQ7YmlvX3NlZ19nYXAmIzM0OywKICAgICYjMzQ7YmxrX21xX3N1Ym1pdF9iaW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbWlzc2luZyBpbml0aWFsaXphdGlvbiBhbmQgY29weWluZyBvZiBgYmlfYnZlY19nYXBfYml0YCBpbiBgYmlvX3NwbGl0YCBhbmQgYF9fYmlvX2Nsb25lYC4gVGhpcyBmaWVsZCBpcyB1c2VkIHRvIHRyYWNrIGdhcCBiaXRzIGZvciBiaW8gdmVjdG9ycyBhbmQgaXMgY29uc3VtZWQgYnkgY29yZSBibG9jayBsYXllciBmdW5jdGlvbnMgbGlrZSBgYmxrX3JxX2FwcGVuZF9iaW9gIGFuZCBgYmlvX3NwbGl0X2lvX2F0YC4gRnV6emluZyB0aGVzZSBmdW5jdGlvbnMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBjb3JyZWN0IGhhbmRsaW5nIG9mIGJpbyB2ZWN0b3IgZ2Fwcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ2NTk3MDAwM2E2NzlkODBmZmRiZmM1NTJiYjFkMWM2ZmY0OTM2NjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAxNzozNToxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jpby5jIGIvYmxvY2svYmlvLmMKaW5kZXggODk4YjJmNWVmOGM4MS4uMzNhYTQzOWMxYmFlMiAxMDA2NDQKLS0tIGEvYmxvY2svYmlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmlvLmMKQEAgLTg1OSw2ICYjNDM7ODU5LDcgQEAgc3RhdGljIGludCBfX2Jpb19jbG9uZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW8gKmJpb19zcmMsIGdmcF90IGdmcCkKIAliaW8tJmd0O2JpX2lvcHJpbyA9IGJpb19zcmMtJmd0O2JpX2lvcHJpbzsKIAliaW8tJmd0O2JpX3dyaXRlX2hpbnQgPSBiaW9fc3JjLSZndDtiaV93cml0ZV9oaW50OwogCWJpby0mZ3Q7Ymlfd3JpdGVfc3RyZWFtID0gYmlvX3NyYy0mZ3Q7Ymlfd3JpdGVfc3RyZWFtOwomIzQzOwliaW8tJmd0O2JpX2J2ZWNfZ2FwX2JpdCA9IGJpb19zcmMtJmd0O2JpX2J2ZWNfZ2FwX2JpdDsKIAliaW8tJmd0O2JpX2l0ZXIgPSBiaW9fc3JjLSZndDtiaV9pdGVyOwogCWJpby0mZ3Q7YmlfaW9fdmVjID0gYmlvX3NyYy0mZ3Q7YmlfaW9fdmVjOwogCkBAIC0xOTcxLDYgJiM0MzsxOTcyLDcgQEAgc3RydWN0IGJpbyAqYmlvX3NwbGl0KHN0cnVjdCBiaW8gKmJpbywgaW50IHNlY3RvcnMsCiAJCWJpb19pbnRlZ3JpdHlfdHJpbShzcGxpdCk7CiAKIAliaW9fYWR2YW5jZShiaW8sIHNwbGl0LSZndDtiaV9pdGVyLmJpX3NpemUpOwomIzQzOwliaW8tJmd0O2JpX2J2ZWNfZ2FwX2JpdCA9IDA7CiAKIAlpZiAoYmlvX2ZsYWdnZWQoYmlvLCBCSU9fVFJBQ0VfQ09NUExFVElPTikpCiAJCWJpb19zZXRfZmxhZyhzcGxpdCwgQklPX1RSQUNFX0NPTVBMRVRJT04pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTM5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQklPIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGJsb2NrL2Jpby5jYCwgaW50ZXJlc3RpbmcuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIGBiaW8tJmd0O2JpX2J2ZWNfZ2FwX2JpdCA9IGJpb19zcmMtJmd0O2JpX2J2ZWNfZ2FwX2JpdDtgIHdpdGhpbiB0aGUgYF9fYmlvX2Nsb25lYCBmdW5jdGlvbiBhbmQgcmVzZXR0aW5nIGl0IHRvIGAwYCBpbiBgYmlvX3NwbGl0YC4gSW1tZWRpYXRlbHksIG15IGJyYWluIHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucy4gSSBrbm93IHRob3NlIGFyZSB0d28gdmVyeSBmdW5kYW1lbnRhbCBibG9jayBsYXllciBmdW5jdGlvbnMuIGBfX2Jpb19jbG9uZWAgaXMsIHdlbGwsIGNsb25pbmcgYSBiaW8uIE1ha2VzIHNlbnNlIHRvIHBhc3MgdGhhdCBnYXAgaW5mb3JtYXRpb24gb3Zlciwgb3RoZXJ3aXNlIHdoYXQmIzM5O3MgdGhlIHVzZSBpbiBjb3B5aW5nIHRoZSBzdHJ1Y3R1cmUuIEFuZCBgYmlvX3NwbGl0YD8gVGhhdCYjMzk7cyB3aGVuIHdlJiMzOTtyZSBicmVha2luZyBhIGJpbyBkb3duIGludG8gc21hbGxlciBwaWVjZXMuIFNvIHRoZSBnYXAgYml0IG5lZWRzIHJlc2V0dGluZyB0aGVyZS4KClJpZ2h0LCBzbyB0byB0cnVseSB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBiaV9idmVjX2dhcF9iaXRgLiBMZXQmIzM5O3MgZ3JlcCBmb3IgdGhhdCBhbmQgc2VlIHdoZXJlIGl0JiMzOTtzIHVzZWQsIGhvdyBpdCYjMzk7cyBkZWZpbmVkLCB3aGF0IHRoZSBjb21tZW50cyBzYXkuIFRoYXQgd2lsbCB0ZWxsIHRoZSBmdWxsIHN0b3J5IGhlcmUuIEkgaGF2ZSBhIGh1bmNoLCBiYXNlZCBvbiB0aGUgY29udGV4dCwgYnV0IGxldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBodW5jaCBpcyBhY2N1cmF0ZSBiZWZvcmUgSSBzdGFydCBtYWtpbmcgYW55IGFzc3VtcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JpX2J2ZWNfZ2FwX2JpdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iaW8uYz0yMTc9dm9pZCBiaW9faW5pdChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBiaW9fdmVjICp0YWJsZSxcbi0tXG5ibG9jay9iaW8uYy0yMjctXHRiaW8tXHUwMDNlYmlfc3RhdHVzID0gMDtcbmJsb2NrL2Jpby5jOjIyODpcdGJpby1cdTAwM2ViaV9idmVjX2dhcF9iaXQgPSAwO1xuYmxvY2svYmlvLmMtMjI5LVx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gMDtcbi0tXG5ibG9jay9iaW8uYz04NTY9c3RhdGljIGludCBfX2Jpb19jbG9uZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW8gKmJpb19zcmMsIGdmcF90IGdmcClcbi0tXG5ibG9jay9iaW8uYy04NjEtXHRiaW8tXHUwMDNlYmlfd3JpdGVfc3RyZWFtID0gYmlvX3NyYy1cdTAwM2ViaV93cml0ZV9zdHJlYW07XG5ibG9jay9iaW8uYzo4NjI6XHRiaW8tXHUwMDNlYmlfYnZlY19nYXBfYml0ID0gYmlvX3NyYy1cdTAwM2ViaV9idmVjX2dhcF9iaXQ7XG5ibG9jay9iaW8uYy04NjMtXHRiaW8tXHUwMDNlYmlfaXRlciA9IGJpb19zcmMtXHUwMDNlYmlfaXRlcjtcbi0tXG5ibG9jay9iaW8uYz0xOTQ3PXN0cnVjdCBiaW8gKmJpb19zcGxpdChzdHJ1Y3QgYmlvICpiaW8sIGludCBzZWN0b3JzLFxuLS1cbmJsb2NrL2Jpby5jLTE5NzQtXHRiaW9fYWR2YW5jZShiaW8sIHNwbGl0LVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XG5ibG9jay9iaW8uYzoxOTc1Olx0YmlvLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCA9IDA7XG5ibG9jay9iaW8uYy0xOTc2LVxuLS1cbmJsb2NrL2Jsay1tYXAuYz00MjY9aW50IGJsa19ycV9hcHBlbmRfYmlvKHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IGJpbyAqYmlvKVxuLS1cbmJsb2NrL2Jsay1tYXAuYy00NTYtXHRycS1cdTAwM2VfX2RhdGFfbGVuID0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZTtcbmJsb2NrL2Jsay1tYXAuYzo0NTc6XHRycS1cdTAwM2VwaHlzX2dhcF9iaXQgPSBiaW8tXHUwMDNlYmlfYnZlY19nYXBfYml0O1xuYmxvY2svYmxrLW1hcC5jLTQ1OC1cdHJldHVybiAwO1xuLS1cbmJsb2NrL2Jsay1tZXJnZS5jPTMzNT1pbnQgYmlvX3NwbGl0X2lvX2F0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxuLS1cbmJsb2NrL2Jsay1tZXJnZS5jLTM3OS1cdCpzZWdzID0gbnNlZ3M7XG5ibG9jay9ibGstbWVyZ2UuYzozODA6XHRiaW8tXHUwMDNlYmlfYnZlY19nYXBfYml0ID0gZmZzKGdhcHMpO1xuYmxvY2svYmxrLW1lcmdlLmMtMzgxLVx0cmV0dXJuIDA7XG4tLVxuYmxvY2svYmxrLW1lcmdlLmMtNDE1LVx0YmlvX2NsZWFyX3BvbGxlZChiaW8pO1xuYmxvY2svYmxrLW1lcmdlLmM6NDE2Olx0YmlvLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCA9IGZmcyhnYXBzKTtcbmJsb2NrL2Jsay1tZXJnZS5jLTQxNy1cdHJldHVybiBieXRlcyBcdTAwM2VcdTAwM2UgU0VDVE9SX1NISUZUO1xuLS1cbmJsb2NrL2Jsay1tZXJnZS5jPTc1Mj11OCBiaW9fc2VnX2dhcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqcHJldiwgc3RydWN0IGJpbyAqbmV4dCxcbi0tXG5ibG9jay9ibGstbWVyZ2UuYy03NTktXG5ibG9jay9ibGstbWVyZ2UuYzo3NjA6XHRnYXBzX2JpdCA9IG1pbl9ub3RfemVybyhnYXBzX2JpdCwgcHJldi1cdTAwM2ViaV9idmVjX2dhcF9iaXQpO1xuYmxvY2svYmxrLW1lcmdlLmM6NzYxOlx0Z2Fwc19iaXQgPSBtaW5fbm90X3plcm8oZ2Fwc19iaXQsIG5leHQtXHUwMDNlYmlfYnZlY19nYXBfYml0KTtcbmJsb2NrL2Jsay1tZXJnZS5jLTc2Mi1cbi0tXG5ibG9jay9ibGstbXEuYz0yNjU0PXN0YXRpYyB2b2lkIGJsa19tcV9iaW9fdG9fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBiaW8gKmJpbyxcbi0tXG5ibG9jay9ibGstbXEuYy0yNjY0LVx0cnEtXHUwMDNlX19kYXRhX2xlbiA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemU7XG5ibG9jay9ibGstbXEuYzoyNjY1Olx0cnEtXHUwMDNlcGh5c19nYXBfYml0ID0gYmlvLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdDtcbmJsb2NrL2Jsay1tcS5jLTI2NjYtXG4tLVxuaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaD0yMTA9c3RydWN0IGJpbyB7XG4tLVxuaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaC0yMzAtXHQgKi9cbmluY2x1ZGUvbGludXgvYmxrX3R5cGVzLmg6MjMxOlx0dThcdFx0XHRiaV9idmVjX2dhcF9iaXQ7XG5pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oLTIzMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTc4CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJ1ZyBGaXggZm9yIFBvdGVudGlhbCBGdXp6aW5nKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGFuIGlzc3VlIHdoZXJlIGBiaV9idmVjX2dhcF9iaXRgIGlzbiYjMzk7dCBoYW5kbGVkIGNvcnJlY3RseSBkdXJpbmcgYmlvIGNsb25pbmcgYW5kIHNwbGl0dGluZy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIGBfX2Jpb19jbG9uZWAgaXNuJiMzOTt0IGNvcHlpbmcgdGhlIGJpdCwgYW5kIGBiaW9fc3BsaXRgIGlzbiYjMzk7dCByZXNldHRpbmcgaXQuIFRoaXMgc2NyZWFtcyBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXQgdG8gbWUuIEEgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUgaGVyZSBjb3VsZCBiZSBwcmV0dHkgbmFzdHkuCgpNeSBpbml0aWFsIHRob3VnaHRzIGFyZSwgd2hlcmUgZG9lcyB0aGlzIGZ1bmN0aW9uYWxpdHkgc2l0IGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzPyBXZWxsLCB0aGUgY29yZSBmdW5jdGlvbnMgYXJlIGBfX2Jpb19jbG9uZWAgYW5kIGBiaW9fc3BsaXRgLiBTaW5jZSBgX19iaW9fY2xvbmVgIGlzIHN0YXRpYywgSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiBpdHMgY2FsbGVycy4gVGhhdCBuYXJyb3dzIHRoZSBmaWVsZCBhIGJpdC4gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBjb2RlLCBgYmlvX2Nsb25lX2Zhc3RgIGFuZCBgYmlvX2FsbG9jX2Nsb25lYCBhcmUga2V5IGNhbGxlcnMgb2YgYF9fYmlvX2Nsb25lYC4gTm93IGl0IGlzIHRpbWUgdG8gY2hlY2sgYWxsIGNhbGxlcnMgb2YgYF9fYmlvX2Nsb25lYC4gVGhlc2UgYXJlIHRoZSBhcmVhcyB0aGF0IG5lZWQgZm9jdXNlZCBmdXp6aW5nIGF0dGVudGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2Jpb19jbG9uZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iaW8uYz04NTQ9RVhQT1JUX1NZTUJPTChiaW9fcHV0KTtcbmJsb2NrL2Jpby5jLTg1NS1cbmJsb2NrL2Jpby5jOjg1NjpzdGF0aWMgaW50IF9fYmlvX2Nsb25lKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJpbyAqYmlvX3NyYywgZ2ZwX3QgZ2ZwKVxuYmxvY2svYmlvLmMtODU3LXtcbi0tXG5ibG9jay9iaW8uYz04OTQ9c3RydWN0IGJpbyAqYmlvX2FsbG9jX2Nsb25lKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBiaW8gKmJpb19zcmMsXG4tLVxuYmxvY2svYmlvLmMtOTAyLVxuYmxvY2svYmlvLmM6OTAzOlx0aWYgKF9fYmlvX2Nsb25lKGJpbywgYmlvX3NyYywgZ2ZwKSBcdTAwM2MgMCkge1xuYmxvY2svYmlvLmMtOTA0LVx0XHRiaW9fcHV0KGJpbyk7XG4tLVxuYmxvY2svYmlvLmM9OTIxPWludCBiaW9faW5pdF9jbG9uZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmlvICpiaW8sXG4tLVxuYmxvY2svYmlvLmMtOTI2LVx0YmlvX2luaXQoYmlvLCBiZGV2LCBOVUxMLCAwLCBiaW9fc3JjLVx1MDAzZWJpX29wZik7XG5ibG9jay9iaW8uYzo5Mjc6XHRyZXQgPSBfX2Jpb19jbG9uZShiaW8sIGJpb19zcmMsIGdmcCk7XG5ibG9jay9iaW8uYy05MjgtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMjEKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHN5bWJvbHM6CgoqKkRlZXAgRGl2ZSBpbnRvIEJsb2NrIEkvTyBDbG9uZXMgYW5kIFNwbGl0cyoqCgpSaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlc2UgZnVuY3Rpb25zOiBgYmlvX2FsbG9jX2Nsb25lYCwgYGJpb19pbml0X2Nsb25lYCwgYW5kIGBiaW9fc3BsaXRgLiBUaGV5IHNlZW0gbGlrZSBwcmltZSB0YXJnZXRzIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgQmxvY2sgSS9PIGxheWVyIGhhbmRsZXMgY2xvbmluZyBhbmQgc3BsaXR0aW5nIG9mIEkvTyByZXF1ZXN0cy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGJpb19zcGxpdGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIGludGVyYWN0aW9ucyBhcmUgZ29pbmcgdG8gYmUuIEl0JiMzOTtsbCByZXZlYWwgaG93IGFuZCB3aHkgd2UmIzM5O3JlIGJyZWFraW5nIHVwIHRoZXNlIEkvTyBvcGVyYXRpb25zLCB3aGljaCBpcyBjcml0aWNhbCBmb3Igb3B0aW1pemF0aW9uIGFuZCB1bmRlcnN0YW5kaW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcy4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgY2FsbCBjaGFpbnMgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiaW9fc3BsaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDUxNSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9ibG9jay9iaW92ZWNzLnJzdD00OT1hZHZhbnRhZ2VzOlxuLS1cbkRvY3VtZW50YXRpb24vYmxvY2svYmlvdmVjcy5yc3QtNzQtXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb3ZlY3MucnN0Ojc1OiAqIFNwbGl0dGluZyBiaW9zIGlzIG5vdyBtdWNoIHNpbXBsZXIuIFRoZSBvbGQgYmlvX3NwbGl0KCkgZGlkbiYjMzk7dCBldmVuIHdvcmsgb25cbkRvY3VtZW50YXRpb24vYmxvY2svYmlvdmVjcy5yc3QtNzYtICAgYmlvcyB3aXRoIG1vcmUgdGhhbiBhIHNpbmdsZSBidmVjISBOb3csIHdlIGNhbiBlZmZpY2llbnRseSBzcGxpdCBhcmJpdHJhcnlcbi0tXG5ibG9jay9iaW8uYz0xOTMxPUVYUE9SVF9TWU1CT0woYmlvX2VuZGlvKTtcbi0tXG5ibG9jay9iaW8uYy0xOTMzLS8qKlxuYmxvY2svYmlvLmM6MTkzNDogKiBiaW9fc3BsaXQgLSBzcGxpdCBhIGJpb1xuYmxvY2svYmlvLmMtMTkzNS0gKiBAYmlvOlx0YmlvIHRvIHNwbGl0XG4tLVxuYmxvY2svYmlvLmMtMTk0Ni0gKi9cbmJsb2NrL2Jpby5jOjE5NDc6c3RydWN0IGJpbyAqYmlvX3NwbGl0KHN0cnVjdCBiaW8gKmJpbywgaW50IHNlY3RvcnMsXG5ibG9jay9iaW8uYy0xOTQ4LVx0XHQgICAgICBnZnBfdCBnZnAsIHN0cnVjdCBiaW9fc2V0ICpicylcbi0tXG5ibG9jay9iaW8uYy0xOTgxLX1cbmJsb2NrL2Jpby5jOjE5ODI6RVhQT1JUX1NZTUJPTChiaW9fc3BsaXQpO1xuYmxvY2svYmlvLmMtMTk4My1cbi0tXG5ibG9jay9ibGstbWFwLmM9NDI2PWludCBibGtfcnFfYXBwZW5kX2JpbyhzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBiaW8gKmJpbylcbi0tXG5ibG9jay9ibGstbWFwLmMtNDMzLVx0LyogY2hlY2sgdGhhdCB0aGUgZGF0YSBsYXlvdXQgbWF0Y2hlcyB0aGUgaGFyZHdhcmUgcmVzdHJpY3Rpb25zICovXG5ibG9jay9ibGstbWFwLmM6NDM0Olx0cmV0ID0gYmlvX3NwbGl0X2lvX2F0KGJpbywgbGltLCBcdTAwMjZucl9zZWdzLCBtYXhfYnl0ZXMsIDApO1xuYmxvY2svYmxrLW1hcC5jLTQzNS1cdGlmIChyZXQpIHtcbi0tXG5ibG9jay9ibGstbWVyZ2UuYz0xMTk9c3RydWN0IGJpbyAqYmlvX3N1Ym1pdF9zcGxpdF9iaW9zZXQoc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgc3BsaXRfc2VjdG9ycyxcbi0tXG5ibG9jay9ibGstbWVyZ2UuYy0xMjEte1xuYmxvY2svYmxrLW1lcmdlLmM6MTIyOlx0c3RydWN0IGJpbyAqc3BsaXQgPSBiaW9fc3BsaXQoYmlvLCBzcGxpdF9zZWN0b3JzLCBHRlBfTk9JTywgYnMpO1xuYmxvY2svYmxrLW1lcmdlLmMtMTIzLVxuLS1cbmJsb2NrL2Jsay1tZXJnZS5jPTE0Mj1zdGF0aWMgc3RydWN0IGJpbyAqYmlvX3N1Ym1pdF9zcGxpdChzdHJ1Y3QgYmlvICpiaW8sIGludCBzcGxpdF9zZWN0b3JzKVxuLS1cbmJsb2NrL2Jsay1tZXJnZS5jLTE1MC1cdFx0YmlvID0gYmlvX3N1Ym1pdF9zcGxpdF9iaW9zZXQoYmlvLCBzcGxpdF9zZWN0b3JzLFxuYmxvY2svYmxrLW1lcmdlLmM6MTUxOlx0XHRcdFx0XHUwMDI2YmlvLVx1MDAzZWJpX2JkZXYtXHUwMDNlYmRfZGlzay1cdTAwM2ViaW9fc3BsaXQpO1xuYmxvY2svYmxrLW1lcmdlLmMtMTUyLVx0XHRpZiAoYmlvKVxuLS1cbmJsb2NrL2Jsay1tZXJnZS5jLTE1OC1cbmJsb2NrL2Jsay1tZXJnZS5jOjE1OTpzdGF0aWMgc3RydWN0IGJpbyAqX19iaW9fc3BsaXRfZGlzY2FyZChzdHJ1Y3QgYmlvICpiaW8sXG5ibG9jay9ibGstbWVyZ2UuYy0xNjAtXHRcdGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgdW5zaWduZWQgKm5zZWdzLFxuLS1cbmJsb2NrL2Jsay1tZXJnZS5jLTE5NC1cbmJsb2NrL2Jsay1tZXJnZS5jOjE5NTpzdHJ1Y3QgYmlvICpiaW9fc3BsaXRfZGlzY2FyZChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSxcbmJsb2NrL2Jsay1tZXJnZS5jLTE5Ni1cdFx0dW5zaWduZWQgKm5zZWdzKVxuLS1cbmJsb2NrL2Jsay1tZXJnZS5jLTIwNC1cbmJsb2NrL2Jsay1tZXJnZS5jOjIwNTpcdHJldHVybiBfX2Jpb19zcGxpdF9kaXNjYXJkKGJpbywgbGltLCBuc2VncywgbWF4X3NlY3RvcnMpO1xuYmxvY2svYmxrLW1lcmdlLmMtMjA2LX1cbi0tXG5ibG9jay9ibGstbWVyZ2UuYz0yODI9c3RhdGljIGJvb2wgYnZlY19zcGxpdF9zZWdzKGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSxcbi0tXG5ibG9jay9ibGstbWVyZ2UuYy0zMDctXG5ibG9jay9ibGstbWVyZ2UuYzozMDg6c3RhdGljIHVuc2lnbmVkIGludCBiaW9fc3BsaXRfYWxpZ25tZW50KHN0cnVjdCBiaW8gKmJpbyxcbmJsb2NrL2Jsay1tZXJnZS5jLTMwOS1cdFx0Y29uc3Qgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuLS1cbmJsb2NrL2Jsay1tZXJnZS5jPTMxNj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBidmVjX3NlZ19nYXAoc3RydWN0IGJpb192ZWMgKmJ2cHJ2LFxuLS1cbmJsb2NrL2Jsay1tZXJnZS5jLTMyMi0vKipcbmJsb2NrL2Jsay1tZXJnZS5jOjMyMzogKiBiaW9fc3BsaXRfaW9fYXQgLSBjaGVjayBpZiBhbmQgd2hlcmUgdG8gc3BsaXQgYSBiaW9cbmJsb2NrL2Jsay1tZXJnZS5jLTMyNC0gKiBAYmlvOiAgW2luXSBiaW8gdG8gYmUgc3BsaXRcbi0tXG5ibG9jay9ibGstbWVyZ2UuYy0zMzQtICovXG5ibG9jay9ibGstbWVyZ2UuYzozMzU6aW50IGJpb19zcGxpdF9pb19hdChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSxcbmJsb2NrL2Jsay1tZXJnZS5jLTMzNi1cdFx0dW5zaWduZWQgKnNlZ3MsIHVuc2lnbmVkIG1heF9ieXRlcywgdW5zaWduZWQgbGVuX2FsaWduX21hc2spXG4tLVxuYmxvY2svYmxrLW1lcmdlLmMtNDA1LVx0ICovXG5ibG9jay9ibGstbWVyZ2UuYzo0MDY6XHRieXRlcyA9IEFMSUdOX0RPV04oYnl0ZXMsIGJpb19zcGxpdF9hbGlnbm1lbnQoYmlvLCBsaW0pKTtcbmJsb2NrL2Jsay1tZXJnZS5jLTQwNy1cdGlmICghYnl0ZXMpXG4tLVxuYmxvY2svYmxrLW1lcmdlLmMtNDE4LX1cbmJsb2NrL2Jsay1tZXJnZS5jOjQxOTpFWFBPUlRfU1lNQk9MX0dQTChiaW9fc3BsaXRfaW9fYXQpO1xuYmxvY2svYmxrLW1lcmdlLmMtNDIwLVxuYmxvY2svYmxrLW1lcmdlLmM6NDIxOnN0cnVjdCBiaW8gKmJpb19zcGxpdF9ydyhzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSxcbmJsb2NrL2Jsay1tZXJnZS5jLTQyMi1cdFx0dW5zaWduZWQgKm5yX3NlZ3MpXG4tLVxuYmxvY2svYmxrLW1lcmdlLmMtNDI0LVx0cmV0dXJuIGJpb19zdWJtaXRfc3BsaXQoYmlvLFxuYmxvY2svYmxrLW1lcmdlLmM6NDI1Olx0XHRiaW9fc3BsaXRfcndfYXQoYmlvLCBsaW0sIG5yX3NlZ3MsXG5ibG9jay9ibGstbWVyZ2UuYy00MjYtXHRcdFx0Z2V0X21heF9pb19zaXplKGJpbywgbGltKSBcdTAwM2NcdTAwM2MgU0VDVE9SX1NISUZUKSk7XG4tLVxuYmxvY2svYmxrLW1lcmdlLmMtNDMxLSAqXG5ibG9jay9ibGstbWVyZ2UuYzo0MzI6ICogQnV0IHdlIHdhbnQgdGhlIG5yX3NlZ3MgY2FsY3VsYXRpb24gcHJvdmlkZWQgYnkgYmlvX3NwbGl0X3J3X2F0LCBhbmQgaGF2aW5nXG5ibG9jay9ibGstbWVyZ2UuYy00MzMtICogYSBnb29kIHNhbml0eSBjaGVjayB0aGF0IHRoZSBzdWJtaXR0ZXIgYnVpbHQgdGhlIGJpbyBjb3JyZWN0bHkgaXMgbmljZSB0b1xuLS1cbmJsb2NrL2Jsay1tZXJnZS5jLTQzNS0gKi9cbmJsb2NrL2Jsay1tZXJnZS5jOjQzNjpzdHJ1Y3QgYmlvICpiaW9fc3BsaXRfem9uZV9hcHBlbmQoc3RydWN0IGJpbyAqYmlvLFxuYmxvY2svYmxrLW1lcmdlLmMtNDM3LVx0XHRjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIHVuc2lnbmVkICpucl9zZWdzKVxuLS1cbmJsb2NrL2Jsay1tZXJnZS5jLTQ0MC1cbmJsb2NrL2Jsay1tZXJnZS5jOjQ0MTpcdHNwbGl0X3NlY3RvcnMgPSBiaW9fc3BsaXRfcndfYXQoYmlvLCBsaW0sIG5yX3NlZ3MsXG5ibG9jay9ibGstbWVyZ2UuYy00NDItXHRcdFx0bGltLVx1MDAzZW1heF96b25lX2FwcGVuZF9zZWN0b3JzIFx1MDAzY1x1MDAzYyBTRUNUT1JfU0hJRlQpO1xuLS1cbmJsb2NrL2Jsay1tZXJnZS5jLTQ0Ny1cbmJsb2NrL2Jsay1tZXJnZS5jOjQ0ODpzdHJ1Y3QgYmlvICpiaW9fc3BsaXRfd3JpdGVfemVyb2VzKHN0cnVjdCBiaW8gKmJpbyxcbmJsb2NrL2Jsay1tZXJnZS5jLTQ0OS1cdFx0Y29uc3Qgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLCB1bnNpZ25lZCAqbnNlZ3MpXG4tLVxuYmxvY2svYmxrLW1lcmdlLmMtNDY4LS8qKlxuYmxvY2svYmxrLW1lcmdlLmM6NDY5OiAqIGJpb19zcGxpdF90b19saW1pdHMgLSBzcGxpdCBhIGJpbyB0byBmaXQgdGhlIHF1ZXVlIGxpbWl0c1xuYmxvY2svYmxrLW1lcmdlLmMtNDcwLSAqIEBiaW86ICAgICBiaW8gdG8gYmUgc3BsaXRcbi0tXG5ibG9jay9ibGstbWVyZ2UuYy00NzUtICpcbmJsb2NrL2Jsay1tZXJnZS5jOjQ3NjogKiBUaGUgc3BsaXQgYmlvIGlzIGFsbG9jYXRlZCBmcm9tIEBxLVx1MDAzZWJpb19zcGxpdCwgd2hpY2ggaXMgcHJvdmlkZWQgYnkgdGhlXG5ibG9jay9ibGstbWVyZ2UuYy00NzctICogYmxvY2sgbGF5ZXIuXG5ibG9jay9ibGstbWVyZ2UuYy00NzgtICovXG5ibG9jay9ibGstbWVyZ2UuYzo0Nzk6c3RydWN0IGJpbyAqYmlvX3NwbGl0X3RvX2xpbWl0cyhzdHJ1Y3QgYmlvICpiaW8pXG5ibG9jay9ibGstbWVyZ2UuYy00ODAte1xuLS1cbmJsb2NrL2Jsay1tZXJnZS5jLTQ4Mi1cbmJsb2NrL2Jsay1tZXJnZS5jOjQ4MzpcdHJldHVybiBfX2Jpb19zcGxpdF90b19saW1pdHMoYmlvLCBiZGV2X2xpbWl0cyhiaW8tXHUwMDNlYmlfYmRldiksIFx1MDAyNm5yX3NlZ3MpO1xuYmxvY2svYmxrLW1lcmdlLmMtNDg0LX1cbmJsb2NrL2Jsay1tZXJnZS5jOjQ4NTpFWFBPUlRfU1lNQk9MKGJpb19zcGxpdF90b19saW1pdHMpO1xuYmxvY2svYmxrLW1lcmdlLmMtNDg2LVxuLS1cbmJsb2NrL2Jsay1tcS5jPTMwOTM9dm9pZCBibGtfbXFfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svYmxrLW1xLmMtMzE0NS1cbmJsb2NrL2Jsay1tcS5jOjMxNDY6XHRiaW8gPSBfX2Jpb19zcGxpdF90b19saW1pdHMoYmlvLCBcdTAwMjZxLVx1MDAzZWxpbWl0cywgXHUwMDI2bnJfc2Vncyk7XG5ibG9jay9ibGstbXEuYy0zMTQ3LVx0aWYgKCFiaW8pXG4tLVxuYmxvY2svYmxrLmg9Mzc3PXNzaXplX3QgcGFydF90aW1lb3V0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKixcbi0tXG5ibG9jay9ibGsuaC0zNzktXG5ibG9jay9ibGsuaDozODA6c3RydWN0IGJpbyAqYmlvX3NwbGl0X2Rpc2NhcmQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXG5ibG9jay9ibGsuaC0zODEtXHRcdHVuc2lnbmVkICpuc2Vncyk7XG5ibG9jay9ibGsuaDozODI6c3RydWN0IGJpbyAqYmlvX3NwbGl0X3dyaXRlX3plcm9lcyhzdHJ1Y3QgYmlvICpiaW8sXG5ibG9jay9ibGsuaC0zODMtXHRcdGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgdW5zaWduZWQgKm5zZWdzKTtcbmJsb2NrL2Jsay5oOjM4NDpzdHJ1Y3QgYmlvICpiaW9fc3BsaXRfcncoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXG5ibG9jay9ibGsuaC0zODUtXHRcdHVuc2lnbmVkICpucl9zZWdzKTtcbmJsb2NrL2Jsay5oOjM4NjpzdHJ1Y3QgYmlvICpiaW9fc3BsaXRfem9uZV9hcHBlbmQoc3RydWN0IGJpbyAqYmlvLFxuYmxvY2svYmxrLmgtMzg3LVx0XHRjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIHVuc2lnbmVkICpucl9zZWdzKTtcbi0tXG5ibG9jay9ibGsuaD0zOTc9c3RhdGljIGlubGluZSBib29sIGJpb19tYXlfbmVlZF9zcGxpdChzdHJ1Y3QgYmlvICpiaW8sXG4tLVxuYmxvY2svYmxrLmgtNDE2LS8qKlxuYmxvY2svYmxrLmg6NDE3OiAqIF9fYmlvX3NwbGl0X3RvX2xpbWl0cyAtIHNwbGl0IGEgYmlvIHRvIGZpdCB0aGUgcXVldWUgbGltaXRzXG5ibG9jay9ibGsuaC00MTgtICogQGJpbzogICAgIGJpbyB0byBiZSBzcGxpdFxuLS1cbmJsb2NrL2Jsay5oLTQyNS0gKlxuYmxvY2svYmxrLmg6NDI2OiAqIFRoZSBzcGxpdCBiaW8gaXMgYWxsb2NhdGVkIGZyb20gQHEtXHUwMDNlYmlvX3NwbGl0LCB3aGljaCBpcyBwcm92aWRlZCBieSB0aGVcbmJsb2NrL2Jsay5oLTQyNy0gKiBibG9jayBsYXllci5cbmJsb2NrL2Jsay5oLTQyOC0gKi9cbmJsb2NrL2Jsay5oOjQyOTpzdGF0aWMgaW5saW5lIHN0cnVjdCBiaW8gKl9fYmlvX3NwbGl0X3RvX2xpbWl0cyhzdHJ1Y3QgYmlvICpiaW8sXG5ibG9jay9ibGsuaC00MzAtXHRcdGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgdW5zaWduZWQgaW50ICpucl9zZWdzKVxuLS1cbmJsb2NrL2Jsay5oLTQzNS1cdFx0aWYgKGJpb19tYXlfbmVlZF9zcGxpdChiaW8sIGxpbSkpXG5ibG9jay9ibGsuaDo0MzY6XHRcdFx0cmV0dXJuIGJpb19zcGxpdF9ydyhiaW8sIGxpbSwgbnJfc2Vncyk7XG5ibG9jay9ibGsuaC00MzctXHRcdCpucl9zZWdzID0gMTtcbi0tXG5ibG9jay9ibGsuaC00MzktXHRjYXNlIFJFUV9PUF9aT05FX0FQUEVORDpcbmJsb2NrL2Jsay5oOjQ0MDpcdFx0cmV0dXJuIGJpb19zcGxpdF96b25lX2FwcGVuZChiaW8sIGxpbSwgbnJfc2Vncyk7XG5ibG9jay9ibGsuaC00NDEtXHRjYXNlIFJFUV9PUF9ESVNDQVJEOlxuYmxvY2svYmxrLmgtNDQyLVx0Y2FzZSBSRVFfT1BfU0VDVVJFX0VSQVNFOlxuYmxvY2svYmxrLmg6NDQzOlx0XHRyZXR1cm4gYmlvX3NwbGl0X2Rpc2NhcmQoYmlvLCBsaW0sIG5yX3NlZ3MpO1xuYmxvY2svYmxrLmgtNDQ0LVx0Y2FzZSBSRVFfT1BfV1JJVEVfWkVST0VTOlxuYmxvY2svYmxrLmg6NDQ1Olx0XHRyZXR1cm4gYmlvX3NwbGl0X3dyaXRlX3plcm9lcyhiaW8sIGxpbSwgbnJfc2Vncyk7XG5ibG9jay9ibGsuaC00NDYtXHRkZWZhdWx0OlxuLS1cbmJsb2NrL2dlbmhkLmM9MTI3Mz1zdGF0aWMgdm9pZCBkaXNrX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmJsb2NrL2dlbmhkLmMtMTI5OS1cbmJsb2NrL2dlbmhkLmM6MTMwMDpcdGJpb3NldF9leGl0KFx1MDAyNmRpc2stXHUwMDNlYmlvX3NwbGl0KTtcbmJsb2NrL2dlbmhkLmMtMTMwMS1cbi0tXG5ibG9jay9nZW5oZC5jPTE0NDc9c3RydWN0IGdlbmRpc2sgKl9fYWxsb2NfZGlza19ub2RlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgbm9kZV9pZCxcbi0tXG5ibG9jay9nZW5oZC5jLTE0NTUtXG5ibG9jay9nZW5oZC5jOjE0NTY6XHRpZiAoYmlvc2V0X2luaXQoXHUwMDI2ZGlzay1cdTAwM2ViaW9fc3BsaXQsIEJJT19QT09MX1NJWkUsIDAsIDApKVxuYmxvY2svZ2VuaGQuYy0xNDU3LVx0XHRnb3RvIG91dF9mcmVlX2Rpc2s7XG4tLVxuYmxvY2svZ2VuaGQuYy0xNTA2LW91dF9mcmVlX2Jpb3NldDpcbmJsb2NrL2dlbmhkLmM6MTUwNzpcdGJpb3NldF9leGl0KFx1MDAyNmRpc2stXHUwMDNlYmlvX3NwbGl0KTtcbmJsb2NrL2dlbmhkLmMtMTUwOC1vdXRfZnJlZV9kaXNrOlxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlcS5jPTE2MTI9dm9pZCBkcmJkX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlcS5jLTE2MTUtXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZXEuYzoxNjE2Olx0YmlvID0gYmlvX3NwbGl0X3RvX2xpbWl0cyhiaW8pO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVxLmMtMTYxNy1cdGlmICghYmlvKVxuLS1cbmRyaXZlcnMvbWQvYmNhY2hlL2JjYWNoZS5oPTI1MD1zdHJ1Y3QgYmNhY2hlX2RldmljZSB7XG4tLVxuZHJpdmVycy9tZC9iY2FjaGUvYmNhY2hlLmgtMjczLVxuZHJpdmVycy9tZC9iY2FjaGUvYmNhY2hlLmg6Mjc0Olx0c3RydWN0IGJpb19zZXRcdFx0YmlvX3NwbGl0O1xuZHJpdmVycy9tZC9iY2FjaGUvYmNhY2hlLmgtMjc1LVxuLS1cbmRyaXZlcnMvbWQvYmNhY2hlL2JjYWNoZS5oPTUxNj1zdHJ1Y3QgY2FjaGVfc2V0IHtcbi0tXG5kcml2ZXJzL21kL2JjYWNoZS9iY2FjaGUuaC01NDMtXHRtZW1wb29sX3RcdFx0YmlvX21ldGE7XG5kcml2ZXJzL21kL2JjYWNoZS9iY2FjaGUuaDo1NDQ6XHRzdHJ1Y3QgYmlvX3NldFx0XHRiaW9fc3BsaXQ7XG5kcml2ZXJzL21kL2JjYWNoZS9iY2FjaGUuaC01NDUtXG4tLVxuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jPTE4Nz1zdGF0aWMgQ0xPU1VSRV9DQUxMQkFDSyhiY2hfZGF0YV9pbnNlcnRfc3RhcnQpXG4tLVxuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jLTIwNi1cdFx0c3RydWN0IGJrZXkgKms7XG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmM6MjA3Olx0XHRzdHJ1Y3QgYmlvX3NldCAqc3BsaXQgPSBcdTAwMjZvcC1cdTAwM2VjLVx1MDAzZWJpb19zcGxpdDtcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYy0yMDgtXG4tLVxuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jPTUyNz1zdGF0aWMgaW50IGNhY2hlX2xvb2t1cF9mbihzdHJ1Y3QgYnRyZWVfb3AgKm9wLCBzdHJ1Y3QgYnRyZWUgKmIsIHN0cnVjdCBia2V5ICprKVxuLS1cbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYy01NjUtXHRcdFx0XHQgICAgICBLRVlfT0ZGU0VUKGspIC0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yKSxcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYzo1NjY6XHRcdFx0ICAgR0ZQX05PSU8sIFx1MDAyNnMtXHUwMDNlZC1cdTAwM2ViaW9fc3BsaXQpO1xuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jLTU2Ny1cbi0tXG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmM9ODkyPXN0YXRpYyBpbnQgY2FjaGVkX2Rldl9jYWNoZV9taXNzKHN0cnVjdCBidHJlZSAqYiwgc3RydWN0IHNlYXJjaCAqcyxcbi0tXG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmMtOTAyLVx0aWYgKHMtXHUwMDNlY2FjaGVfbWlzcyB8fCBzLVx1MDAzZWlvcC5ieXBhc3MpIHtcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYzo5MDM6XHRcdG1pc3MgPSBiaW9fbmV4dF9zcGxpdChiaW8sIHNlY3RvcnMsIEdGUF9OT0lPLCBcdTAwMjZzLVx1MDAzZWQtXHUwMDNlYmlvX3NwbGl0KTtcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYy05MDQtXHRcdHJldCA9IG1pc3MgPT0gYmlvID8gTUFQX0RPTkUgOiBNQVBfQ09OVElOVUU7XG4tLVxuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jLTkyMy1cdG1pc3MgPSBiaW9fbmV4dF9zcGxpdChiaW8sIHMtXHUwMDNlaW5zZXJ0X2Jpb19zZWN0b3JzLCBHRlBfTk9JTyxcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYzo5MjQ6XHRcdFx0ICAgICAgXHUwMDI2cy1cdTAwM2VkLVx1MDAzZWJpb19zcGxpdCk7XG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmMtOTI1LVxuLS1cbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYy05MzAtXHRcdFx0RElWX1JPVU5EX1VQKHMtXHUwMDNlaW5zZXJ0X2Jpb19zZWN0b3JzLCBQQUdFX1NFQ1RPUlMpLFxuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jOjkzMTpcdFx0XHQwLCBHRlBfTk9XQUlULCBcdTAwMjZkYy1cdTAwM2VkaXNrLmJpb19zcGxpdCk7XG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmMtOTMyLVx0aWYgKCFjYWNoZV9iaW8pXG4tLVxuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jPTk4MT1zdGF0aWMgdm9pZCBjYWNoZWRfZGV2X3dyaXRlKHN0cnVjdCBjYWNoZWRfZGV2ICpkYywgc3RydWN0IHNlYXJjaCAqcylcbi0tXG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmMtMTA0MS1cdFx0XHRcdFx0XHQgUkVRX09QX1dSSVRFIHwgUkVRX1BSRUZMVVNILFxuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jOjEwNDI6XHRcdFx0XHRcdFx0IEdGUF9OT0lPLCBcdTAwMjZkYy1cdTAwM2VkaXNrLmJpb19zcGxpdCk7XG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmMtMTA0My1cdFx0XHRpZiAoIWZsdXNoKSB7XG4tLVxuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jLTEwNTMtXHRcdHMtXHUwMDNlaW9wLmJpbyA9IGJpb19hbGxvY19jbG9uZShiaW8tXHUwMDNlYmlfYmRldiwgYmlvLCBHRlBfTk9JTyxcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYzoxMDU0Olx0XHRcdFx0XHQgICAgIFx1MDAyNmRjLVx1MDAzZWRpc2suYmlvX3NwbGl0KTtcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYy0xMDU1LVx0XHQvKiBJL08gcmVxdWVzdCBzZW50IHRvIGJhY2tpbmcgZGV2aWNlICovXG4tLVxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYz04Njk9c3RhdGljIHZvaWQgYmNhY2hlX2RldmljZV9mcmVlKHN0cnVjdCBiY2FjaGVfZGV2aWNlICpkKVxuLS1cbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmMtODg4LVxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYzo4ODk6XHRiaW9zZXRfZXhpdChcdTAwMjZkLVx1MDAzZWJpb19zcGxpdCk7XG5kcml2ZXJzL21kL2JjYWNoZS9zdXBlci5jLTg5MC1cdGJpb3NldF9leGl0KFx1MDAyNmQtXHUwMDNlYmlvX2RldGFjaGVkKTtcbi0tXG5kcml2ZXJzL21kL2JjYWNoZS9zdXBlci5jPTg5Nz1zdGF0aWMgaW50IGJjYWNoZV9kZXZpY2VfaW5pdChzdHJ1Y3QgYmNhY2hlX2RldmljZSAqZCwgdW5zaWduZWQgaW50IGJsb2NrX3NpemUsXG4tLVxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYy05NDgtXG5kcml2ZXJzL21kL2JjYWNoZS9zdXBlci5jOjk0OTpcdGlmIChiaW9zZXRfaW5pdChcdTAwMjZkLVx1MDAzZWJpb19zcGxpdCwgNCwgb2Zmc2V0b2Yoc3RydWN0IGJiaW8sIGJpbyksXG5kcml2ZXJzL21kL2JjYWNoZS9zdXBlci5jLTk1MC1cdFx0XHRCSU9TRVRfTkVFRF9CVkVDU3xCSU9TRVRfTkVFRF9SRVNDVUVSKSlcbi0tXG5kcml2ZXJzL21kL2JjYWNoZS9zdXBlci5jLTk4Ny1vdXRfYmlvc2V0X3NwbGl0X2V4aXQ6XG5kcml2ZXJzL21kL2JjYWNoZS9zdXBlci5jOjk4ODpcdGJpb3NldF9leGl0KFx1MDAyNmQtXHUwMDNlYmlvX3NwbGl0KTtcbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmMtOTg5LW91dF9pZGFfcmVtb3ZlOlxuLS1cbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmM9MTY4MT1zdGF0aWMgQ0xPU1VSRV9DQUxMQkFDSyhjYWNoZV9zZXRfZnJlZSlcbi0tXG5kcml2ZXJzL21kL2JjYWNoZS9zdXBlci5jLTE3MDUtXHRcdGRlc3Ryb3lfd29ya3F1ZXVlKGMtXHUwMDNlbW92aW5nX2djX3dxKTtcbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmM6MTcwNjpcdGJpb3NldF9leGl0KFx1MDAyNmMtXHUwMDNlYmlvX3NwbGl0KTtcbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmMtMTcwNy1cdG1lbXBvb2xfZXhpdChcdTAwMjZjLVx1MDAzZWZpbGxfaXRlcik7XG4tLVxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYz0xODcwPXN0cnVjdCBjYWNoZV9zZXQgKmJjaF9jYWNoZV9zZXRfYWxsb2Moc3RydWN0IGNhY2hlX3NiICpzYilcbi0tXG5kcml2ZXJzL21kL2JjYWNoZS9zdXBlci5jLTE5NDgtXG5kcml2ZXJzL21kL2JjYWNoZS9zdXBlci5jOjE5NDk6XHRpZiAoYmlvc2V0X2luaXQoXHUwMDI2Yy1cdTAwM2ViaW9fc3BsaXQsIDQsIG9mZnNldG9mKHN0cnVjdCBiYmlvLCBiaW8pLFxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYy0xOTUwLVx0XHRcdEJJT1NFVF9ORUVEX1JFU0NVRVIpKVxuLS1cbmRyaXZlcnMvbWQvZG0uYz0xMDAxPXN0YXRpYyB2b2lkIGRtX3dxX3JlcXVldWVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9tZC9kbS5jLTEwMTYtXG5kcml2ZXJzL21kL2RtLmM6MTAxNzpcdFx0ZG1faW9fcmV3aW5kKGlvLCBcdTAwMjZtZC1cdTAwM2VkaXNrLVx1MDAzZWJpb19zcGxpdCk7XG5kcml2ZXJzL21kL2RtLmMtMTAxOC1cbi0tXG5kcml2ZXJzL21kL2RtLmM9MTE2MT1zdGF0aWMgc2VjdG9yX3QgX19tYXhfaW9fbGVuKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzZWN0b3JfdCBzZWN0b3IsXG4tLVxuZHJpdmVycy9tZC9kbS5jLTExNzEtXHQgKiAgIGV4cGxhaW5zIHdoeSBzdGFja2VkIGNodW5rX3NlY3RvcnMgYmFzZWQgc3BsaXR0aW5nIHZpYVxuZHJpdmVycy9tZC9kbS5jOjExNzI6XHQgKiAgIGJpb19zcGxpdF90b19saW1pdHMoKSBpc24mIzM5O3QgcG9zc2libGUgaGVyZS5cbmRyaXZlcnMvbWQvZG0uYy0xMTczLVx0ICovXG4tLVxuZHJpdmVycy9tZC9kbS5jPTE5NTY9c3RhdGljIHZvaWQgZG1fc3BsaXRfYW5kX3Byb2Nlc3NfYmlvKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCxcbi0tXG5kcml2ZXJzL21kL2RtLmMtMTk3Mi1cdFx0LypcbmRyaXZlcnMvbWQvZG0uYzoxOTczOlx0XHQgKiBVc2UgYmlvX3NwbGl0X3RvX2xpbWl0cygpIGZvciBhYm5vcm1hbCBJTyAoZS5nLiBkaXNjYXJkLCBldGMpXG5kcml2ZXJzL21kL2RtLmMtMTk3NC1cdFx0ICogb3RoZXJ3aXNlIGFzc29jaWF0ZWQgcXVldWVfbGltaXRzIHdvbiYjMzk7dCBiZSBpbXBvc2VkLlxuLS1cbmRyaXZlcnMvbWQvZG0uYy0xOTc4LVx0XHQgKi9cbmRyaXZlcnMvbWQvZG0uYzoxOTc5Olx0XHRiaW8gPSBiaW9fc3BsaXRfdG9fbGltaXRzKGJpbyk7XG5kcml2ZXJzL21kL2RtLmMtMTk4MC1cdFx0aWYgKCFiaW8pXG4tLVxuZHJpdmVycy9tZC9tZC5jPTQyOT1zdGF0aWMgdm9pZCBtZF9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5kcml2ZXJzL21kL21kLmMtNDQzLVxuZHJpdmVycy9tZC9tZC5jOjQ0NDpcdGJpbyA9IGJpb19zcGxpdF90b19saW1pdHMoYmlvKTtcbmRyaXZlcnMvbWQvbWQuYy00NDUtXHRpZiAoIWJpbylcbi0tXG5kcml2ZXJzL21kL21kLmM9OTM5Mz1FWFBPUlRfU1lNQk9MX0dQTChtZF9zdWJtaXRfZGlzY2FyZF9iaW8pO1xuZHJpdmVycy9tZC9tZC5jLTkzOTQtXG5kcml2ZXJzL21kL21kLmM6OTM5NTpzdHJ1Y3QgYmlvICptZGRldl9iaW9fc3BsaXRfYXRfcmVzaGFwZV9vZmZzZXQoc3RydWN0IG1kZGV2ICptZGRldixcbmRyaXZlcnMvbWQvbWQuYy05Mzk2LVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgYmlvICpiaW8sXG4tLVxuZHJpdmVycy9tZC9tZC5jLTk0MzEtfVxuZHJpdmVycy9tZC9tZC5jOjk0MzI6RVhQT1JUX1NZTUJPTF9HUEwobWRkZXZfYmlvX3NwbGl0X2F0X3Jlc2hhcGVfb2Zmc2V0KTtcbmRyaXZlcnMvbWQvbWQuYy05NDMzLVxuLS1cbmRyaXZlcnMvbWQvbWQuaD05MjU9dm9pZCBtZF9zdWJtaXRfZGlzY2FyZF9iaW8oc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYsXG5kcml2ZXJzL21kL21kLmgtOTI2LVx0XHRcdHN0cnVjdCBiaW8gKmJpbywgc2VjdG9yX3Qgc3RhcnQsIHNlY3Rvcl90IHNpemUpO1xuZHJpdmVycy9tZC9tZC5oOjkyNzpzdHJ1Y3QgYmlvICptZGRldl9iaW9fc3BsaXRfYXRfcmVzaGFwZV9vZmZzZXQoc3RydWN0IG1kZGV2ICptZGRldixcbmRyaXZlcnMvbWQvbWQuaC05MjgtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBiaW8gKmJpbyxcbi0tXG5kcml2ZXJzL21kL3JhaWQxLmM9MTMyMD1zdGF0aWMgdm9pZCByYWlkMV9yZWFkX3JlcXVlc3Qoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IGJpbyAqYmlvLFxuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYy0xMzkwLVx0XHRiaW8gPSBiaW9fc3VibWl0X3NwbGl0X2Jpb3NldChiaW8sIG1heF9zZWN0b3JzLFxuZHJpdmVycy9tZC9yYWlkMS5jOjEzOTE6XHRcdFx0XHRcdCAgICAgIFx1MDAyNmNvbmYtXHUwMDNlYmlvX3NwbGl0KTtcbmRyaXZlcnMvbWQvcmFpZDEuYy0xMzkyLVx0XHRpZiAoIWJpbykge1xuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYz0xNDc5PXN0YXRpYyBib29sIHJhaWQxX3dyaXRlX3JlcXVlc3Qoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IGJpbyAqYmlvLFxuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYy0xNTg3LVx0XHRiaW8gPSBiaW9fc3VibWl0X3NwbGl0X2Jpb3NldChiaW8sIG1heF9zZWN0b3JzLFxuZHJpdmVycy9tZC9yYWlkMS5jOjE1ODg6XHRcdFx0XHRcdCAgICAgIFx1MDAyNmNvbmYtXHUwMDNlYmlvX3NwbGl0KTtcbmRyaXZlcnMvbWQvcmFpZDEuYy0xNTg5LVx0XHRpZiAoIWJpbylcbi0tXG5kcml2ZXJzL21kL3JhaWQxLmM9MzA0NT1zdGF0aWMgc3RydWN0IHIxY29uZiAqc2V0dXBfY29uZihzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYy0zMDg4LVxuZHJpdmVycy9tZC9yYWlkMS5jOjMwODk6XHRlcnIgPSBiaW9zZXRfaW5pdChcdTAwMjZjb25mLVx1MDAzZWJpb19zcGxpdCwgQklPX1BPT0xfU0laRSwgMCwgMCk7XG5kcml2ZXJzL21kL3JhaWQxLmMtMzA5MC1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9tZC9yYWlkMS5jLTMxNjAtXHRcdGtmcmVlKGNvbmYtXHUwMDNlYmFycmllcik7XG5kcml2ZXJzL21kL3JhaWQxLmM6MzE2MTpcdFx0Ymlvc2V0X2V4aXQoXHUwMDI2Y29uZi1cdTAwM2ViaW9fc3BsaXQpO1xuZHJpdmVycy9tZC9yYWlkMS5jLTMxNjItXHRcdGtmcmVlKGNvbmYpO1xuLS1cbmRyaXZlcnMvbWQvcmFpZDEuYz0zMjY3PXN0YXRpYyB2b2lkIHJhaWQxX2ZyZWUoc3RydWN0IG1kZGV2ICptZGRldiwgdm9pZCAqcHJpdilcbi0tXG5kcml2ZXJzL21kL3JhaWQxLmMtMzI3Ny1cdGtmcmVlKGNvbmYtXHUwMDNlYmFycmllcik7XG5kcml2ZXJzL21kL3JhaWQxLmM6MzI3ODpcdGJpb3NldF9leGl0KFx1MDAyNmNvbmYtXHUwMDNlYmlvX3NwbGl0KTtcbmRyaXZlcnMvbWQvcmFpZDEuYy0zMjc5LVx0a2ZyZWUoY29uZik7XG4tLVxuZHJpdmVycy9tZC9yYWlkMS5oPTUyPXN0cnVjdCByMWNvbmYge1xuLS1cbmRyaXZlcnMvbWQvcmFpZDEuaC05OC1cbmRyaXZlcnMvbWQvcmFpZDEuaDo5OTpcdHN0cnVjdCBiaW9fc2V0XHRcdGJpb19zcGxpdDtcbmRyaXZlcnMvbWQvcmFpZDEuaC0xMDAtXG4tLVxuZHJpdmVycy9tZC9yYWlkMS5oPTE2Mz1lbnVtIHIxYmlvX3N0YXRlIHtcbi0tXG5kcml2ZXJzL21kL3JhaWQxLmgtMTc2LSAqXG5kcml2ZXJzL21kL3JhaWQxLmg6MTc3OiAqIEFuZCBmb3IgYmlvX3NwbGl0IGVycm9ycywgcmVjb3JkIHRoYXQgYmlfZW5kX2lvIHdhcyBjYWxsZWRcbmRyaXZlcnMvbWQvcmFpZDEuaC0xNzgtICogd2l0aCB0aGlzIGZsYWcuLi5cbi0tXG5kcml2ZXJzL21kL3JhaWQxMC5jPTExNDQ9c3RhdGljIHZvaWQgcmFpZDEwX3JlYWRfcmVxdWVzdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgYmlvICpiaW8sXG4tLVxuZHJpdmVycy9tZC9yYWlkMTAuYy0xMjA5LVx0XHRiaW8gPSBiaW9fc3VibWl0X3NwbGl0X2Jpb3NldChiaW8sIG1heF9zZWN0b3JzLFxuZHJpdmVycy9tZC9yYWlkMTAuYzoxMjEwOlx0XHRcdFx0XHQgICAgICBcdTAwMjZjb25mLVx1MDAzZWJpb19zcGxpdCk7XG5kcml2ZXJzL21kL3JhaWQxMC5jLTEyMTEtXHRcdHdhaXRfYmFycmllcihjb25mKTtcbi0tXG5kcml2ZXJzL21kL3JhaWQxMC5jPTEzNDM9c3RhdGljIGJvb2wgcmFpZDEwX3dyaXRlX3JlcXVlc3Qoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IGJpbyAqYmlvLFxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmMtMTQ2MC1cdFx0YmlvID0gYmlvX3N1Ym1pdF9zcGxpdF9iaW9zZXQoYmlvLCByMTBfYmlvLVx1MDAzZXNlY3RvcnMsXG5kcml2ZXJzL21kL3JhaWQxMC5jOjE0NjE6XHRcdFx0XHRcdCAgICAgIFx1MDAyNmNvbmYtXHUwMDNlYmlvX3NwbGl0KTtcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMTQ2Mi1cdFx0aWYgKCFiaW8pIHtcbi0tXG5kcml2ZXJzL21kL3JhaWQxMC5jPTE1ODI9c3RhdGljIGludCByYWlkMTBfaGFuZGxlX2Rpc2NhcmQoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IGJpbyAqYmlvKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmMtMTY0Mi1cdFx0c3BsaXRfc2l6ZSA9IHN0cmlwZV9zaXplIC0gcmVtYWluZGVyO1xuZHJpdmVycy9tZC9yYWlkMTAuYzoxNjQzOlx0XHRzcGxpdCA9IGJpb19zcGxpdChiaW8sIHNwbGl0X3NpemUsIEdGUF9OT0lPLCBcdTAwMjZjb25mLVx1MDAzZWJpb19zcGxpdCk7XG5kcml2ZXJzL21kL3JhaWQxMC5jLTE2NDQtXHRcdGlmIChJU19FUlIoc3BsaXQpKSB7XG4tLVxuZHJpdmVycy9tZC9yYWlkMTAuYy0xNjYxLVx0XHRzcGxpdF9zaXplID0gYmlvX3NlY3RvcnMoYmlvKSAtIHJlbWFpbmRlcjtcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MTY2MjpcdFx0c3BsaXQgPSBiaW9fc3BsaXQoYmlvLCBzcGxpdF9zaXplLCBHRlBfTk9JTywgXHUwMDI2Y29uZi1cdTAwM2ViaW9fc3BsaXQpO1xuZHJpdmVycy9tZC9yYWlkMTAuYy0xNjYzLVx0XHRpZiAoSVNfRVJSKHNwbGl0KSkge1xuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmM9MTg0Nz1zdGF0aWMgYm9vbCByYWlkMTBfbWFrZV9yZXF1ZXN0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKmJpbylcbi0tXG5kcml2ZXJzL21kL3JhaWQxMC5jLTE4NzctXG5kcml2ZXJzL21kL3JhaWQxMC5jOjE4Nzg6XHRiaW8gPSBtZGRldl9iaW9fc3BsaXRfYXRfcmVzaGFwZV9vZmZzZXQobWRkZXYsIGJpbywgXHUwMDI2c2VjdG9ycyxcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MTg3OTpcdFx0XHRcdFx0XHRcdTAwMjZjb25mLVx1MDAzZWJpb19zcGxpdCk7XG5kcml2ZXJzL21kL3JhaWQxMC5jLTE4ODAtXHRpZiAoIWJpbykge1xuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmM9MzgxND1zdGF0aWMgdm9pZCByYWlkMTBfZnJlZV9jb25mKHN0cnVjdCByMTBjb25mICpjb25mKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmMtMzgyMy1cdHNhZmVfcHV0X3BhZ2UoY29uZi1cdTAwM2V0bXBwYWdlKTtcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MzgyNDpcdGJpb3NldF9leGl0KFx1MDAyNmNvbmYtXHUwMDNlYmlvX3NwbGl0KTtcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMzgyNS1cdGtmcmVlKGNvbmYpO1xuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmM9MzgyOD1zdGF0aWMgc3RydWN0IHIxMGNvbmYgKnNldHVwX2NvbmYoc3RydWN0IG1kZGV2ICptZGRldilcbi0tXG5kcml2ZXJzL21kL3JhaWQxMC5jLTM4NjktXG5kcml2ZXJzL21kL3JhaWQxMC5jOjM4NzA6XHRlcnIgPSBiaW9zZXRfaW5pdChcdTAwMjZjb25mLVx1MDAzZWJpb19zcGxpdCwgQklPX1BPT0xfU0laRSwgMCwgMCk7XG5kcml2ZXJzL21kL3JhaWQxMC5jLTM4NzEtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmg9MjM9c3RydWN0IHIxMGNvbmYge1xuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmgtOTItXHRzdHJ1Y3QgcGFnZVx0XHQqdG1wcGFnZTtcbmRyaXZlcnMvbWQvcmFpZDEwLmg6OTM6XHRzdHJ1Y3QgYmlvX3NldFx0XHRiaW9fc3BsaXQ7XG5kcml2ZXJzL21kL3JhaWQxMC5oLTk0LVxuLS1cbmRyaXZlcnMvbWQvcmFpZDEwLmg9MTU0PWVudW0gcjEwYmlvX3N0YXRlIHtcbi0tXG5kcml2ZXJzL21kL3JhaWQxMC5oLTE2Mi1cdFIxMEJJT19SZWFkRXJyb3IsXG5kcml2ZXJzL21kL3JhaWQxMC5oOjE2MzovKiBGb3IgYmlvX3NwbGl0IGVycm9ycywgcmVjb3JkIHRoYXQgYmlfZW5kX2lvIHdhcyBjYWxsZWQuICovXG5kcml2ZXJzL21kL3JhaWQxMC5oLTE2NC1cdFIxMEJJT19SZXR1cm5lZCxcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmM9NTU4Nz1zdGF0aWMgc3RydWN0IGJpbyAqY2h1bmtfYWxpZ25lZF9yZWFkKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKnJhaWRfYmlvKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDUuYy01NTk2LVx0XHRyYWlkX2JpbyA9IGJpb19zdWJtaXRfc3BsaXRfYmlvc2V0KHJhaWRfYmlvLCBzZWN0b3JzLFxuZHJpdmVycy9tZC9yYWlkNS5jOjU1OTc6XHRcdFx0XHRcdFx0ICAgXHUwMDI2Y29uZi1cdTAwM2ViaW9fc3BsaXQpO1xuZHJpdmVycy9tZC9yYWlkNS5jLTU1OTgtXHRcdGlmICghcmFpZF9iaW8pXG4tLVxuZHJpdmVycy9tZC9yYWlkNS5jPTYyMTg9c3RhdGljIGJvb2wgcmFpZDVfbWFrZV9yZXF1ZXN0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKiBiaSlcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmMtNjI2Mi1cdGZyb250X2JpbyA9IGJpO1xuZHJpdmVycy9tZC9yYWlkNS5jOjYyNjM6XHRiaSA9IG1kZGV2X2Jpb19zcGxpdF9hdF9yZXNoYXBlX29mZnNldChtZGRldiwgYmksIE5VTEwsXG5kcml2ZXJzL21kL3JhaWQ1LmM6NjI2NDpcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmNvbmYtXHUwMDNlYmlvX3NwbGl0KTtcbmRyaXZlcnMvbWQvcmFpZDUuYy02MjY1LVx0aWYgKCFiaSkge1xuLS1cbmRyaXZlcnMvbWQvcmFpZDUuYz03NTQ1PXN0YXRpYyB2b2lkIGZyZWVfY29uZihzdHJ1Y3QgcjVjb25mICpjb25mKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDUuYy03NTU4LVx0a2ZyZWUoY29uZi1cdTAwM2VkaXNrcyk7XG5kcml2ZXJzL21kL3JhaWQ1LmM6NzU1OTpcdGJpb3NldF9leGl0KFx1MDAyNmNvbmYtXHUwMDNlYmlvX3NwbGl0KTtcbmRyaXZlcnMvbWQvcmFpZDUuYy03NTYwLVx0a2ZyZWUoY29uZi1cdTAwM2VzdHJpcGVfaGFzaHRibCk7XG4tLVxuZHJpdmVycy9tZC9yYWlkNS5jPTc2MzM9c3RhdGljIHN0cnVjdCByNWNvbmYgKnNldHVwX2NvbmYoc3RydWN0IG1kZGV2ICptZGRldilcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmMtNzc0Mi1cbmRyaXZlcnMvbWQvcmFpZDUuYzo3NzQzOlx0cmV0ID0gYmlvc2V0X2luaXQoXHUwMDI2Y29uZi1cdTAwM2ViaW9fc3BsaXQsIEJJT19QT09MX1NJWkUsIDAsIDApO1xuZHJpdmVycy9tZC9yYWlkNS5jLTc3NDQtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbWQvcmFpZDUuaD01NzA9c3RydWN0IHI1Y29uZiB7XG4tLVxuZHJpdmVycy9tZC9yYWlkNS5oLTY3MS1cdHN0cnVjdCBkaXNrX2luZm9cdCpkaXNrcztcbmRyaXZlcnMvbWQvcmFpZDUuaDo2NzI6XHRzdHJ1Y3QgYmlvX3NldFx0XHRiaW9fc3BsaXQ7XG5kcml2ZXJzL21kL3JhaWQ1LmgtNjczLVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jPTUzMz1zdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtNTQxLVx0ICogVGhlIG5hbWVzcGFjZSBtaWdodCBiZSBnb2luZyBhd2F5IGFuZCB0aGUgYmlvIG1pZ2h0IGJlIG1vdmVkIHRvIGFcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jOjU0MjpcdCAqIGRpZmZlcmVudCBxdWV1ZSB2aWEgYmxrX3N0ZWFsX2Jpb3MoKSwgc28gd2UgbmVlZCB0byB1c2UgdGhlIGJpb19zcGxpdFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtNTQzLVx0ICogcG9vbCBmcm9tIHRoZSBvcmlnaW5hbCBxdWV1ZSB0byBhbGxvY2F0ZSB0aGUgYnZlY3MgZnJvbS5cbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jLTU0NC1cdCAqL1xuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmM6NTQ1Olx0YmlvID0gYmlvX3NwbGl0X3RvX2xpbWl0cyhiaW8pO1xuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtNTQ2LVx0aWYgKCFiaW8pXG4tLVxuZnMvYnRyZnMvYmlvLmM9ODA9c3RhdGljIHN0cnVjdCBidHJmc19iaW8gKmJ0cmZzX3NwbGl0X2JpbyhzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbyxcbi0tXG5mcy9idHJmcy9iaW8uYy04Ni1cbmZzL2J0cmZzL2Jpby5jOjg3Olx0YmlvID0gYmlvX3NwbGl0KFx1MDAyNm9yaWdfYmJpby1cdTAwM2ViaW8sIG1hcF9sZW5ndGggXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVCwgR0ZQX05PRlMsXG5mcy9idHJmcy9iaW8uYy04OC1cdFx0XHRcdTAwMjZidHJmc19jbG9uZV9iaW9zZXQpO1xuLS1cbmZzL2J0cmZzL2Jpby5jPTczND1zdGF0aWMgdTY0IGJ0cmZzX2FwcGVuZF9tYXBfbGVuZ3RoKHN0cnVjdCBidHJmc19iaW8gKmJiaW8sIHU2NCBtYXBfbGVuZ3RoKVxuLS1cbmZzL2J0cmZzL2Jpby5jLTc0MC1cdG1hcF9sZW5ndGggPSBtaW4obWFwX2xlbmd0aCwgZnNfaW5mby1cdTAwM2VtYXhfem9uZV9hcHBlbmRfc2l6ZSk7XG5mcy9idHJmcy9iaW8uYzo3NDE6XHRzZWN0b3Jfb2Zmc2V0ID0gYmlvX3NwbGl0X3J3X2F0KFx1MDAyNmJiaW8tXHUwMDNlYmlvLCBcdTAwMjZmc19pbmZvLVx1MDAzZWxpbWl0cyxcbmZzL2J0cmZzL2Jpby5jLTc0Mi1cdFx0XHRcdFx0XHUwMDI2bnJfc2VncywgbWFwX2xlbmd0aCk7XG4tLVxuZnMvYnRyZnMvYmlvLmMtNzQ0LVx0XHQvKlxuZnMvYnRyZnMvYmlvLmM6NzQ1Olx0XHQgKiBiaW9fc3BsaXRfcndfYXQoKSBjb3VsZCBzcGxpdCBhdCBhIHNpemUgc21hbGxlciB0aGFuIG91clxuZnMvYnRyZnMvYmlvLmMtNzQ2LVx0XHQgKiBzZWN0b3JzaXplIGFuZCB0aHVzIGNhdXNlIHVuYWxpZ25lZCBJL09zLiAgRml4IHRoYXQgYnlcbi0tXG5mcy9pb21hcC9pb2VuZC5jPTQ2Mj1zdHJ1Y3QgaW9tYXBfaW9lbmQgKmlvbWFwX3NwbGl0X2lvZW5kKHN0cnVjdCBpb21hcF9pb2VuZCAqaW9lbmQsXG4tLVxuZnMvaW9tYXAvaW9lbmQuYy00NzYtXG5mcy9pb21hcC9pb2VuZC5jOjQ3NzpcdFx0c2VjdG9yX29mZnNldCA9IGJpb19zcGxpdF9yd19hdChiaW8sIGxpbSwgXHUwMDI2bnJfc2VncywgbWF4X2xlbik7XG5mcy9pb21hcC9pb2VuZC5jLTQ3OC1cdFx0aWYgKHVubGlrZWx5KHNlY3Rvcl9vZmZzZXQgXHUwMDNjIDApKVxuLS1cbmZzL2lvbWFwL2lvZW5kLmMtNDkxLVxuZnMvaW9tYXAvaW9lbmQuYzo0OTI6XHRzcGxpdCA9IGJpb19zcGxpdChiaW8sIHNlY3Rvcl9vZmZzZXQsIEdGUF9OT0ZTLCBcdTAwMjZpb21hcF9pb2VuZF9iaW9zZXQpO1xuZnMvaW9tYXAvaW9lbmQuYy00OTMtXHRpZiAoSVNfRVJSKHNwbGl0KSlcbi0tXG5mcy94ZnMveGZzX2J1Zi5jPTEyNjU9eGZzX2J1Zl9zdWJtaXRfYmlvKFxuLS1cbmZzL3hmcy94ZnNfYnVmLmMtMTI5MS1cbmZzL3hmcy94ZnNfYnVmLmM6MTI5MjpcdFx0c3BsaXQgPSBiaW9fc3BsaXQoYmlvLCBicC1cdTAwM2ViX21hcHNbbWFwXS5ibV9sZW4sIEdGUF9OT0ZTLFxuZnMveGZzL3hmc19idWYuYy0xMjkzLVx0XHRcdFx0XHUwMDI2ZnNfYmlvX3NldCk7XG4tLVxuZnMveGZzL3hmc19sb2cuYz0xNTQyPXhsb2dfd3JpdGVfaWNsb2coXG4tLVxuZnMveGZzL3hmc19sb2cuYy0xNjE5LVxuZnMveGZzL3hmc19sb2cuYzoxNjIwOlx0XHRzcGxpdCA9IGJpb19zcGxpdChcdTAwMjZpY2xvZy1cdTAwM2VpY19iaW8sIGxvZy1cdTAwM2VsX2xvZ0JCc2l6ZSAtIGJubyxcbmZzL3hmcy94ZnNfbG9nLmMtMTYyMS1cdFx0XHRcdCAgR0ZQX05PSU8sIFx1MDAyNmZzX2Jpb19zZXQpO1xuLS1cbmZzL3hmcy94ZnNfem9uZV9nYy5jPTc4OD14ZnNfem9uZV9nY19zcGxpdF93cml0ZShcbi0tXG5mcy94ZnMveGZzX3pvbmVfZ2MuYy04MDItXG5mcy94ZnMveGZzX3pvbmVfZ2MuYzo4MDM6XHRzcGxpdF9zZWN0b3JzID0gYmlvX3NwbGl0X3J3X2F0KFx1MDAyNmNodW5rLVx1MDAzZWJpbywgbGltLCBcdTAwMjZuc2VncyxcbmZzL3hmcy94ZnNfem9uZV9nYy5jLTgwNC1cdFx0XHRsaW0tXHUwMDNlbWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMgXHUwMDNjXHUwMDNjIFNFQ1RPUl9TSElGVCk7XG4tLVxuZnMveGZzL3hmc196b25lX2djLmMtODEyLVxuZnMveGZzL3hmc196b25lX2djLmM6ODEzOlx0c3BsaXQgPSBiaW9fc3BsaXQoXHUwMDI2Y2h1bmstXHUwMDNlYmlvLCBzcGxpdF9zZWN0b3JzLCBHRlBfTk9GUywgXHUwMDI2ZGF0YS1cdTAwM2ViaW9fc2V0KTtcbmZzL3hmcy94ZnNfem9uZV9nYy5jLTgxNC1cdHNwbGl0X2NodW5rID0gY29udGFpbmVyX29mKHNwbGl0LCBzdHJ1Y3QgeGZzX2djX2JpbywgYmlvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2Jpby5oPTMxNj12b2lkIGJpb190cmltKHN0cnVjdCBiaW8gKmJpbywgc2VjdG9yX3Qgb2Zmc2V0LCBzZWN0b3JfdCBzaXplKTtcbmluY2x1ZGUvbGludXgvYmlvLmg6MzE3OmV4dGVybiBzdHJ1Y3QgYmlvICpiaW9fc3BsaXQoc3RydWN0IGJpbyAqYmlvLCBpbnQgc2VjdG9ycyxcbmluY2x1ZGUvbGludXgvYmlvLmgtMzE4LVx0XHRcdCAgICAgZ2ZwX3QgZ2ZwLCBzdHJ1Y3QgYmlvX3NldCAqYnMpO1xuaW5jbHVkZS9saW51eC9iaW8uaDozMTk6aW50IGJpb19zcGxpdF9pb19hdChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSxcbmluY2x1ZGUvbGludXgvYmlvLmgtMzIwLVx0XHR1bnNpZ25lZCAqc2VncywgdW5zaWduZWQgbWF4X2J5dGVzLCB1bnNpZ25lZCBsZW5fYWxpZ24pO1xuLS1cbmluY2x1ZGUvbGludXgvYmlvLmg9MzM0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGJpbyAqYmlvX25leHRfc3BsaXQoc3RydWN0IGJpbyAqYmlvLCBpbnQgc2VjdG9ycyxcbi0tXG5pbmNsdWRlL2xpbnV4L2Jpby5oLTMzOS1cbmluY2x1ZGUvbGludXgvYmlvLmg6MzQwOlx0cmV0dXJuIGJpb19zcGxpdChiaW8sIHNlY3RvcnMsIGdmcCwgYnMpO1xuaW5jbHVkZS9saW51eC9iaW8uaC0zNDEtfVxuLS1cbmluY2x1ZGUvbGludXgvYmxrX3R5cGVzLmg9MjEwPXN0cnVjdCBiaW8ge1xuLS1cbmluY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgtMjI0LVx0ICogYmV0d2VlbiBhbGwgYmlfaW9fdmVjcy4gVGhpcyBmaWVsZCBpcyBpbml0aWFsaXplZCBvbmx5IGFmdGVyIHRoZSBiaW9cbmluY2x1ZGUvbGludXgvYmxrX3R5cGVzLmg6MjI1Olx0ICogaXMgc3BsaXQgdG8gdGhlIGhhcmR3YXJlIGxpbWl0cyAoc2VlIGJpb19zcGxpdF9pb19hdCgpKS4gVGhlIHZhbHVlXG5pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oLTIyNi1cdCAqIG1heSBiZSB1c2VkIHRvIGNvbnNpZGVyIERNQSBvcHRpbWl6YXRpb24gd2hlbiBwZXJmb3JtaW5nIHRoYXRcbi0tXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTE0Nj1zdHJ1Y3QgZ2VuZGlzayB7XG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xNjYtXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjE2NzpcdHN0cnVjdCBiaW9fc2V0IGJpb19zcGxpdDtcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDM2CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMzIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIEJsb2NrIExheWVyOiBBIEZvY3VzZWQgQXBwcm9hY2gqKgoKT2theSwgc28gYGJpb19zcGxpdGAgaXMgYSBjb21tb25seSB1c2VkIGZ1bmN0aW9uIGluIHRoZSBibG9jayBsYXllciwgYW5kIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGFuIGlzc3VlIHdpdGggYGJpX2J2ZWNfZ2FwX2JpdGAgd2l0aGluIGBfX2Jpb19jbG9uZWAgYW5kLCBpbXBvcnRhbnRseSwgYGJpb19zcGxpdGAgaXRzZWxmLiBUaGlzIGBiaV9idmVjX2dhcF9iaXRgIHNlZW1zIHRvIGJlIGludm9sdmVkIGluIHRyYWNraW5nIGdhcCBiaXRzIGZvciBiaW8gdmVjdG9ycywgYW5kIGl0JiMzOTtzIHVzZWQgYWNyb3NzIHNldmVyYWwga2V5IGZ1bmN0aW9uczogYGJsa19ycV9hcHBlbmRfYmlvYCwgYGJpb19zcGxpdF9pb19hdGAsIGBiaW9fc2VnX2dhcGAsIGFuZCBgYmxrX21xX2Jpb190b19yZXF1ZXN0YC4gR2l2ZW4gaXRzIHdpZGVzcHJlYWQgdXNlIGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBmaXgsIHRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuCgpNeSBpbml0aWFsIGZvY3VzIHNob3VsZCBiZSBvbiBmdXp6aW5nIHRoZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBiaW8gc3BsaXR0aW5nIGFuZCBjbG9uaW5nOiBgYmlvX2FsbG9jX2Nsb25lYCwgYGJpb19pbml0X2Nsb25lYCwgYGJpb19zcGxpdGAsIGBiaW9fc3BsaXRfdG9fbGltaXRzYCwgYW5kIGBibGtfbXFfc3VibWl0X2Jpb2AuIFdhaXQsIGBfX2Jpb19jbG9uZWAgaXMgZGVjbGFyZWQgYHN0YXRpY2AsIHdoaWNoIGlzIGhlbHBmdWwsIGJ1dCBgYmlvX3NwbGl0YCBpcyBleHBvcnRlZCwgc28gSSAqbmVlZCogdG8gaW5jbHVkZSB0aGF0IG9uZS4gTGV0JiMzOTtzIGluY29ycG9yYXRlIHRob3NlIGludG8gdGhlIGluaXRpYWwgZnV6emluZyBwbGFuLgoKSSBzaG91bGQgYWxzbyBjaGVjayBpZiBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZC4gQnV0IHRoZSBibG9jayBsYXllciBpcyBhbHdheXMgZW5hYmxlZCwgc28gdGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4gTm8gbmVlZCBmb3Igc3BlY2lhbCBjb25maWcgb3B0aW9ucyBoZXJlLgoKQWxyaWdodCwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgY2FsbCBzaXRlcyBvZiBgYmlvX3NwbGl0YCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgY3JpdGljYWwuIEhtbSwgaXQmIzM5O3MgY2FsbGVkIGJ5OiBgYmlvX3NwbGl0X3RvX2xpbWl0c2AsIGBibGtfbXFfc3VibWl0X2Jpb2AsIGBiaW9fc3BsaXRfcndgLCBgYmlvX3NwbGl0X3pvbmVfYXBwZW5kYCwgYGJpb19zcGxpdF9kaXNjYXJkYCwgYW5kIGBiaW9fc3BsaXRfd3JpdGVfemVyb2VzYC4gT2theSwgSSB0aGluayB0aGlzIHNvbGlkaWZpZXMgbXkgbGlzdC4gSeKAmWxsIGFkZCBgYmlvX3NwbGl0X3RvX2xpbWl0c2AgdG8gdGhlIGxpc3QuIEkgdGhpbmsgSSYjMzk7bSBnb29kIG9uIHRoYXQgZnJvbnQuCgpKdXN0IHRvIGJlIHNhZmUsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZS1leGFtaW5lIGBfX2Jpb19jbG9uZWAsIGp1c3QgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3Qgb3Zlcmxvb2tlZCBhbnkgY3J1Y2lhbCBjb25uZWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTc6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19iaW9fY2xvbmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmlvLmM9ODU0PUVYUE9SVF9TWU1CT0woYmlvX3B1dCk7XG5ibG9jay9iaW8uYy04NTUtXG5ibG9jay9iaW8uYzo4NTY6c3RhdGljIGludCBfX2Jpb19jbG9uZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW8gKmJpb19zcmMsIGdmcF90IGdmcClcbmJsb2NrL2Jpby5jLTg1Ny17XG4tLVxuYmxvY2svYmlvLmM9ODk0PXN0cnVjdCBiaW8gKmJpb19hbGxvY19jbG9uZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmlvICpiaW9fc3JjLFxuLS1cbmJsb2NrL2Jpby5jLTkwMi1cbmJsb2NrL2Jpby5jOjkwMzpcdGlmIChfX2Jpb19jbG9uZShiaW8sIGJpb19zcmMsIGdmcCkgXHUwMDNjIDApIHtcbmJsb2NrL2Jpby5jLTkwNC1cdFx0YmlvX3B1dChiaW8pO1xuLS1cbmJsb2NrL2Jpby5jPTkyMT1pbnQgYmlvX2luaXRfY2xvbmUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGJpbyAqYmlvLFxuLS1cbmJsb2NrL2Jpby5jLTkyNi1cdGJpb19pbml0KGJpbywgYmRldiwgTlVMTCwgMCwgYmlvX3NyYy1cdTAwM2ViaV9vcGYpO1xuYmxvY2svYmlvLmM6OTI3Olx0cmV0ID0gX19iaW9fY2xvbmUoYmlvLCBiaW9fc3JjLCBnZnApO1xuYmxvY2svYmlvLmMtOTI4LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMzYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQmxvY2sgTGF5ZXIgQ2xvbmluZyBhbmQgU3BsaXR0aW5nIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IHNlZW1zIGBfX2Jpb19jbG9uZWAgaXMgb25seSBjYWxsZWQgYnkgYGJpb19hbGxvY19jbG9uZWAgYW5kIGBiaW9faW5pdF9jbG9uZWAuIFRoYXQmIzM5O3MgdXNlZnVsIGluZm9ybWF0aW9uLiBTaW5jZSB0aGVzZSBmdW5jdGlvbnMsIGFsb25nIHdpdGggYGJpb19zcGxpdGAsIGFyZSBmdW5kYW1lbnRhbCB0byB0aGUgYmxvY2sgbGF5ZXIsIGFuZCBsaWtlbHkgdG8gYmUgcmVhY2hhYmxlIGR1cmluZyBub3JtYWwgb3BlcmF0aW9uLCBJIHNob3VsZCBkZWZpbml0ZWx5IGFkZCB0aGVtIHRvIG15IGBGb2N1c1N5bWJvbHNgIGxpc3QuIFRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBmdXp6aW5nIHRoZSBibG9jayBsYXllci4gU2luY2UgdGhlIGJsb2NrIGxheWVyIGlzIGVzc2VudGlhbGx5IGEgc3RhbmRhcmQgY29tcG9uZW50LCB0aGVyZSBhcmUgbm8gc3BlY2lhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSBuZWVkIHRvIHdvcnJ5IGFib3V0LiBJdCYjMzk7cyBhbHdheXMgZW5hYmxlZC4gTm93LCBsZXQgbWUgcXVpY2tseSBjaGVjayBpZiB0aGlzIGBiaV9idmVjX2dhcF9iaXRgIHZhcmlhYmxlIGlzIHVzZWQgaW4gYW55IHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBvciBzcGVjaWZpYyBjb2RlIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiaV9idmVjX2dhcF9iaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmlvLmM9MjE3PXZvaWQgYmlvX2luaXQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmlvX3ZlYyAqdGFibGUsXG4tLVxuYmxvY2svYmlvLmMtMjI3LVx0YmlvLVx1MDAzZWJpX3N0YXR1cyA9IDA7XG5ibG9jay9iaW8uYzoyMjg6XHRiaW8tXHUwMDNlYmlfYnZlY19nYXBfYml0ID0gMDtcbmJsb2NrL2Jpby5jLTIyOS1cdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IDA7XG4tLVxuYmxvY2svYmlvLmM9ODU2PXN0YXRpYyBpbnQgX19iaW9fY2xvbmUoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmlvICpiaW9fc3JjLCBnZnBfdCBnZnApXG4tLVxuYmxvY2svYmlvLmMtODYxLVx0YmlvLVx1MDAzZWJpX3dyaXRlX3N0cmVhbSA9IGJpb19zcmMtXHUwMDNlYmlfd3JpdGVfc3RyZWFtO1xuYmxvY2svYmlvLmM6ODYyOlx0YmlvLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCA9IGJpb19zcmMtXHUwMDNlYmlfYnZlY19nYXBfYml0O1xuYmxvY2svYmlvLmMtODYzLVx0YmlvLVx1MDAzZWJpX2l0ZXIgPSBiaW9fc3JjLVx1MDAzZWJpX2l0ZXI7XG4tLVxuYmxvY2svYmlvLmM9MTk0Nz1zdHJ1Y3QgYmlvICpiaW9fc3BsaXQoc3RydWN0IGJpbyAqYmlvLCBpbnQgc2VjdG9ycyxcbi0tXG5ibG9jay9iaW8uYy0xOTc0LVx0YmlvX2FkdmFuY2UoYmlvLCBzcGxpdC1cdTAwM2ViaV9pdGVyLmJpX3NpemUpO1xuYmxvY2svYmlvLmM6MTk3NTpcdGJpby1cdTAwM2ViaV9idmVjX2dhcF9iaXQgPSAwO1xuYmxvY2svYmlvLmMtMTk3Ni1cbi0tXG5ibG9jay9ibGstbWFwLmM9NDI2PWludCBibGtfcnFfYXBwZW5kX2JpbyhzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBiaW8gKmJpbylcbi0tXG5ibG9jay9ibGstbWFwLmMtNDU2LVx0cnEtXHUwMDNlX19kYXRhX2xlbiA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemU7XG5ibG9jay9ibGstbWFwLmM6NDU3Olx0cnEtXHUwMDNlcGh5c19nYXBfYml0ID0gYmlvLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdDtcbmJsb2NrL2Jsay1tYXAuYy00NTgtXHRyZXR1cm4gMDtcbi0tXG5ibG9jay9ibGstbWVyZ2UuYz0zMzU9aW50IGJpb19zcGxpdF9pb19hdChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSxcbi0tXG5ibG9jay9ibGstbWVyZ2UuYy0zNzktXHQqc2VncyA9IG5zZWdzO1xuYmxvY2svYmxrLW1lcmdlLmM6MzgwOlx0YmlvLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCA9IGZmcyhnYXBzKTtcbmJsb2NrL2Jsay1tZXJnZS5jLTM4MS1cdHJldHVybiAwO1xuLS1cbmJsb2NrL2Jsay1tZXJnZS5jLTQxNS1cdGJpb19jbGVhcl9wb2xsZWQoYmlvKTtcbmJsb2NrL2Jsay1tZXJnZS5jOjQxNjpcdGJpby1cdTAwM2ViaV9idmVjX2dhcF9iaXQgPSBmZnMoZ2Fwcyk7XG5ibG9jay9ibGstbWVyZ2UuYy00MTctXHRyZXR1cm4gYnl0ZXMgXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVDtcbi0tXG5ibG9jay9ibGstbWVyZ2UuYz03NTI9dTggYmlvX3NlZ19nYXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKnByZXYsIHN0cnVjdCBiaW8gKm5leHQsXG4tLVxuYmxvY2svYmxrLW1lcmdlLmMtNzU5LVxuYmxvY2svYmxrLW1lcmdlLmM6NzYwOlx0Z2Fwc19iaXQgPSBtaW5fbm90X3plcm8oZ2Fwc19iaXQsIHByZXYtXHUwMDNlYmlfYnZlY19nYXBfYml0KTtcbmJsb2NrL2Jsay1tZXJnZS5jOjc2MTpcdGdhcHNfYml0ID0gbWluX25vdF96ZXJvKGdhcHNfYml0LCBuZXh0LVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCk7XG5ibG9jay9ibGstbWVyZ2UuYy03NjItXG4tLVxuYmxvY2svYmxrLW1xLmM9MjY1ND1zdGF0aWMgdm9pZCBibGtfbXFfYmlvX3RvX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgYmlvICpiaW8sXG4tLVxuYmxvY2svYmxrLW1xLmMtMjY2NC1cdHJxLVx1MDAzZV9fZGF0YV9sZW4gPSBiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplO1xuYmxvY2svYmxrLW1xLmM6MjY2NTpcdHJxLVx1MDAzZXBoeXNfZ2FwX2JpdCA9IGJpby1cdTAwM2ViaV9idmVjX2dhcF9iaXQ7XG5ibG9jay9ibGstbXEuYy0yNjY2LVxuLS1cbmluY2x1ZGUvbGludXgvYmxrX3R5cGVzLmg9MjEwPXN0cnVjdCBiaW8ge1xuLS1cbmluY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgtMjMwLVx0ICovXG5pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oOjIzMTpcdHU4XHRcdFx0YmlfYnZlY19nYXBfYml0O1xuaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaC0yMzItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE3OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDQ1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIEZvY3VzIFN5bWJvbHMgYW5kIENhbGxlciBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmaWVsZCBhbmQgd2hlcmUgaXQmIzM5O3MgdXNlZC4gSXQmIzM5O3Mgb2J2aW91c2x5IHNpZ25pZmljYW50LCBwb3BwaW5nIHVwIGluIGBibGtfcnFfYXBwZW5kX2Jpb2AsIGBiaW9fc3BsaXRfaW9fYXRgLCBgYmlvX3NlZ19nYXBgLCBhbmQgYGJsa19tcV9iaW9fdG9fcmVxdWVzdGAuICBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIHRoZXNlIGNvbnN1bWVycyBhcmUgYWxzbyBpbmNsdWRlZCBpbiB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdCwgYXMgdGhleSBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIHRoaXMgdGhpbmcgSSYjMzk7bSBleGFtaW5pbmcuIFRoZXkgYXJlIG9idmlvdXNseSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgY29udGV4dC4KCkhtbSwgd2FpdCBhIHNlY29uZC4uLiBgYmxrX21xX2Jpb190b19yZXF1ZXN0YC4uLiBpc24mIzM5O3QgdGhhdCBhIHN0YXRpYyBmdW5jdGlvbj8gIFRoYXQgY2hhbmdlcyB0aGluZ3MuIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHN0YXRpYyBmdW5jdGlvbnMsIGFzIGNhbGxlciBjb250ZXh0IGlzIG9mdGVuIGltcG9ydGFudCB0byBpdHMgdXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBmaWVsZCBhbmQgaXRzIHVzZSBoZXJlLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBxdWlja2x5IGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYGJsa19tcV9iaW9fdG9fcmVxdWVzdGAgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIExldCYjMzk7cyBzZWUgd2hvJiMzOTtzIGNhbGxpbmcgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE3OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa19tcV9iaW9fdG9fcmVxdWVzdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstbXEuYz0yNTkyPXN0YXRpYyB2b2lkIGJsa19tcV9pbnNlcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIGJsa19pbnNlcnRfdCBmbGFncylcbi0tXG5ibG9jay9ibGstbXEuYy0yNjUzLVxuYmxvY2svYmxrLW1xLmM6MjY1NDpzdGF0aWMgdm9pZCBibGtfbXFfYmlvX3RvX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgYmlvICpiaW8sXG5ibG9jay9ibGstbXEuYy0yNjU1LVx0XHR1bnNpZ25lZCBpbnQgbnJfc2Vncylcbi0tXG5ibG9jay9ibGstbXEuYz0zMDkzPXZvaWQgYmxrX21xX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxuLS1cbmJsb2NrL2Jsay1tcS5jLTMxODEtXG5ibG9jay9ibGstbXEuYzozMTgyOlx0YmxrX21xX2Jpb190b19yZXF1ZXN0KHJxLCBiaW8sIG5yX3NlZ3MpO1xuYmxvY2svYmxrLW1xLmMtMzE4My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwMzgKCQkJCQkJCW91dHB1dDogMTc2CgkJCQkJCQl0aG91Z2h0czogMTg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRhcmdldCBGdW5jdGlvbnMqKgoKT2theSwgc28gYGJsa19tcV9zdWJtaXRfYmlvYCBpcyB0aGUgY3VscHJpdCwgdGhlIG9uZSBraWNraW5nIHRoaW5ncyBvZmYuIE15IGF0dGVudGlvbiwgdGhlcmVmb3JlLCBuZWVkcyB0byB6ZXJvIGluIG9uIHRoZXNlIGtleSBmdW5jdGlvbnM6IGBiaW9fYWxsb2NfY2xvbmVgLCBgYmlvX2luaXRfY2xvbmVgLCBgYmlvX3NwbGl0YCwgYGJsa19ycV9hcHBlbmRfYmlvYCwgYGJpb19zcGxpdF9pb19hdGAsIGBiaW9fc2VnX2dhcGAsIGFuZCwgb2YgY291cnNlLCB0aGUgaW5pdGlhbCBlbnRyeSBwb2ludCBgYmxrX21xX3N1Ym1pdF9iaW9gLgoKVGhlIGNvcmUgaXNzdWUgaGVyZSByZXZvbHZlcyBhcm91bmQgYGJpb19zcGxpdGAsIGFuZCBtb3JlIHNwZWNpZmljYWxseSB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGNvcHlpbmcgb2YgYGJpX2J2ZWNfZ2FwX2JpdGAuIFRoaXMgaXMgYSBjcml0aWNhbCBmaWVsZCwgb2J2aW91c2x5IHRyYWNraW5nIGdhcCBiaXRzIHdpdGhpbiBiaW8gdmVjdG9ycy4gQW5kIGl04oCZcyB1c2VkIGJ5IHRoZSBsaWtlcyBvZiBgYmxrX3JxX2FwcGVuZF9iaW9gIGFuZCBgYmlvX3NwbGl0X2lvX2F0YCB3aGljaCBhcmUgY29yZSBibG9jayBsYXllciBmdW5jdGlvbnMuIElmIHRoZXNlIGdhcCBiaXRzIGFyZW4mIzM5O3QgaGFuZGxlZCBjb3JyZWN0bHksIHRoZSB3aG9sZSB0aGluZyBmYWxscyBhcGFydC4KCkdpdmVuIHRoYXQgdGhpcyBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIG1pc3NpbmcgaW5pdGlhbGl6YXRpb24gYW5kIGNvcHlpbmcsIGZ1enppbmcgdGhlc2UgZnVuY3Rpb25zIGlzIGFic29sdXRlbHkgd2FycmFudGVkLiBJJiMzOTttIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gdHJ1ZS4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCB3ZSYjMzk7dmUgcGx1Z2dlZCB0aGlzIGdhcCBhbmQgdGhhdCB0aGUgYmxvY2sgbGF5ZXIgY29udGludWVzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseSB1bmRlciB2YXJpb3VzIGlucHV0IGNvbmRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE3OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiaW9fYWxsb2NfY2xvbmUmIzM0OywKICAgICYjMzQ7YmlvX2luaXRfY2xvbmUmIzM0OywKICAgICYjMzQ7YmlvX3NwbGl0JiMzNDssCiAgICAmIzM0O2Jsa19ycV9hcHBlbmRfYmlvJiMzNDssCiAgICAmIzM0O2Jpb19zcGxpdF9pb19hdCYjMzQ7LAogICAgJiMzNDtiaW9fc2VnX2dhcCYjMzQ7LAogICAgJiMzNDtibGtfbXFfc3VibWl0X2JpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBtaXNzaW5nIGluaXRpYWxpemF0aW9uIGFuZCBjb3B5aW5nIG9mIGBiaV9idmVjX2dhcF9iaXRgIGluIGBiaW9fc3BsaXRgIGFuZCBgX19iaW9fY2xvbmVgLiBUaGlzIGZpZWxkIGlzIHVzZWQgdG8gdHJhY2sgZ2FwIGJpdHMgZm9yIGJpbyB2ZWN0b3JzIGFuZCBpcyBjb25zdW1lZCBieSBjb3JlIGJsb2NrIGxheWVyIGZ1bmN0aW9ucyBsaWtlIGBibGtfcnFfYXBwZW5kX2Jpb2AgYW5kIGBiaW9fc3BsaXRfaW9fYXRgLiBGdXp6aW5nIHRoZXNlIGZ1bmN0aW9ucyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIGNvcnJlY3QgaGFuZGxpbmcgb2YgYmlvIHZlY3RvciBnYXBzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jpb19hbGxvY19jbG9uZSYjMzQ7LAogICAgJiMzNDtiaW9faW5pdF9jbG9uZSYjMzQ7LAogICAgJiMzNDtiaW9fc3BsaXQmIzM0OywKICAgICYjMzQ7YmxrX3JxX2FwcGVuZF9iaW8mIzM0OywKICAgICYjMzQ7YmlvX3NwbGl0X2lvX2F0JiMzNDssCiAgICAmIzM0O2Jpb19zZWdfZ2FwJiMzNDssCiAgICAmIzM0O2Jsa19tcV9zdWJtaXRfYmlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIG1pc3NpbmcgaW5pdGlhbGl6YXRpb24gYW5kIGNvcHlpbmcgb2YgYGJpX2J2ZWNfZ2FwX2JpdGAgaW4gYGJpb19zcGxpdGAgYW5kIGBfX2Jpb19jbG9uZWAuIFRoaXMgZmllbGQgaXMgdXNlZCB0byB0cmFjayBnYXAgYml0cyBmb3IgYmlvIHZlY3RvcnMgYW5kIGlzIGNvbnN1bWVkIGJ5IGNvcmUgYmxvY2sgbGF5ZXIgZnVuY3Rpb25zIGxpa2UgYGJsa19ycV9hcHBlbmRfYmlvYCBhbmQgYGJpb19zcGxpdF9pb19hdGAuIEZ1enppbmcgdGhlc2UgZnVuY3Rpb25zIGlzIGltcG9ydGFudCB0byBlbnN1cmUgY29ycmVjdCBoYW5kbGluZyBvZiBiaW8gdmVjdG9yIGdhcHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE3OjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTc6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fYmlvX2Nsb25lYCBhbmQgYGJpb19zcGxpdGAgdG8gcHJvcGVybHkgcHJvcGFnYXRlIGFuZCByZXNldCB0aGUgYGJpX2J2ZWNfZ2FwX2JpdGAgZmllbGQgb2YgYHN0cnVjdCBiaW9gLiBUaGlzIGZpZWxkIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGxvd2VzdCBzZXQgYml0IGluIGFueSBhZGRyZXNzIG9mZnNldCBiZXR3ZWVuIGFsbCBgYmlfaW9fdmVjc2AgZm9yIERNQSBvcHRpbWl6YXRpb24uIFdoZW4gYSBiaW8gaXMgYWxsb2NhdGVkIG9yIHJlc2V0LCBgYmlfYnZlY19nYXBfYml0YCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAgKHZpYSBgYmlvX2luaXRgIG9yIGBtZW1zZXRgIGluIGBiaW9fcmVzZXRgKS4gVGhlcmVmb3JlLCB0aGUgaXNzdWUgYmVpbmcgZml4ZWQgaXMgYSBsb2dpY2FsIGJ1ZyB3aGVyZSB0aGUgZ2FwIGJpdCBpcyBlaXRoZXIgbG9zdCBkdXJpbmcgY2xvbmluZyBvciBpbmNvcnJlY3RseSByZXRhaW5lZCBkdXJpbmcgc3BsaXR0aW5nLCByYXRoZXIgdGhhbiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLiBCZWNhdXNlIHRoZSBmaWVsZCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuIEFueSByZXN1bHRpbmcgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgZHVlIHRvIGluY29ycmVjdCBETUEgbWFwcGluZ3Mgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NjU5NzAwMDNhNjc5ZDgwZmZkYmZjNTUyYmIxZDFjNmZmNDkzNjY3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMTc6MzU6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9ibG9jay9iaW8uYyBiL2Jsb2NrL2Jpby5jCmluZGV4IDg5OGIyZjVlZjhjODEuLjMzYWE0MzljMWJhZTIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jpby5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jpby5jCkBAIC04NTksNiAmIzQzOzg1OSw3IEBAIHN0YXRpYyBpbnQgX19iaW9fY2xvbmUoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmlvICpiaW9fc3JjLCBnZnBfdCBnZnApCiAJYmlvLSZndDtiaV9pb3ByaW8gPSBiaW9fc3JjLSZndDtiaV9pb3ByaW87CiAJYmlvLSZndDtiaV93cml0ZV9oaW50ID0gYmlvX3NyYy0mZ3Q7Ymlfd3JpdGVfaGludDsKIAliaW8tJmd0O2JpX3dyaXRlX3N0cmVhbSA9IGJpb19zcmMtJmd0O2JpX3dyaXRlX3N0cmVhbTsKJiM0MzsJYmlvLSZndDtiaV9idmVjX2dhcF9iaXQgPSBiaW9fc3JjLSZndDtiaV9idmVjX2dhcF9iaXQ7CiAJYmlvLSZndDtiaV9pdGVyID0gYmlvX3NyYy0mZ3Q7YmlfaXRlcjsKIAliaW8tJmd0O2JpX2lvX3ZlYyA9IGJpb19zcmMtJmd0O2JpX2lvX3ZlYzsKIApAQCAtMTk3MSw2ICYjNDM7MTk3Miw3IEBAIHN0cnVjdCBiaW8gKmJpb19zcGxpdChzdHJ1Y3QgYmlvICpiaW8sIGludCBzZWN0b3JzLAogCQliaW9faW50ZWdyaXR5X3RyaW0oc3BsaXQpOwogCiAJYmlvX2FkdmFuY2UoYmlvLCBzcGxpdC0mZ3Q7YmlfaXRlci5iaV9zaXplKTsKJiM0MzsJYmlvLSZndDtiaV9idmVjX2dhcF9iaXQgPSAwOwogCiAJaWYgKGJpb19mbGFnZ2VkKGJpbywgQklPX1RSQUNFX0NPTVBMRVRJT04pKQogCQliaW9fc2V0X2ZsYWcoc3BsaXQsIEJJT19UUkFDRV9DT01QTEVUSU9OKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE3OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCaW8gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYmxvY2svYmlvLmNgLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGBiaV9idmVjX2dhcF9iaXRgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHF1aWNrbHkgYXNzZXNzIHdoZXRoZXIgdGhpcyB3YXMgYSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIGdpdmVuIHRoZSBjb250ZXh0LiBUaGUgY29kZSBzbmlwIHNob3dzIHRoYXQgYF9fYmlvX2Nsb25lYCBjb3BpZXMgYGJpb19zcmMtJmd0O2JpX2J2ZWNfZ2FwX2JpdGAgdG8gdGhlIG5ldyBgYmlvYCwgd2hpbGUgYGJpb19zcGxpdGAgc2V0cyBpdCB0byB6ZXJvLgoKSW5pdGlhbGx5LCBJIGRpc21pc3NlZCB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcG9zc2liaWxpdHkgYmVjYXVzZSBpdCYjMzk7cyBqdXN0IGEgZmllbGQgY29weSBmcm9tIG9uZSBgc3RydWN0IGJpb2AgdG8gYW5vdGhlciBhbmQgdGhlbiBhIHplcm9pbmcgYWN0aW9uLiBIb3dldmVyLCB0aGUgbW9yZSBJIHRoaW5rIGFib3V0IGl0LCBpZiBgX19iaW9fY2xvbmVgICpkaWRuJiMzOTt0KiBkbyB0aGlzIGNvcHksIHRoZW4gKnRoYXQqIHdvdWxkIGJlIGEgYmlnZ2VyIGlzc3VlLiBgYmlfYnZlY19nYXBfYml0YCBtaWdodCBoYXZlIGVuZGVkIHVwIHVuaW5pdGlhbGl6ZWQgb3IgY29udGFpbmluZyBzdGFsZSBkYXRhLiBLTVNBTiAqc2hvdWxkKiBjYXRjaCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdGhvdWdoLCByaWdodD8gQnV0IHdhaXQsIGBfX2Jpb19jbG9uZWAgaW5pdGlhbGl6ZXMgYGJpb2AgZnJvbSBgYmlvX3NyY2AuLi4gaXQmIzM5O3MgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgY29weS4KCk5vdyBJJiMzOTttIGxvb2tpbmcgY2xvc2VyIGF0IGBfX2Jpb19jbG9uZWAgYW5kIGBiaW9fc3BsaXRgIHNwZWNpZmljYWxseS4gVGhlIGBiaW9fc3BsaXRgIHNldHRpbmcgdG8gemVybyBpcyBjcnVjaWFsLiBUaGlzICpsb29rcyogbGlrZSBhIGJ1ZyBmaXgg4oCTIHBlcmhhcHMgdGhlIG9yaWdpbmFsIGNsb25pbmcgb3Igc3BsaXR0aW5nIGxvZ2ljIHdhcyBmYWlsaW5nIHRvIHByb3Blcmx5IGNvcHkgb3IgcmVzZXQgdGhpcyBmaWVsZC4gVGhpcyBjb3VsZCByZXN1bHQgaW4gaW5jb3JyZWN0IGJlaGF2aW9yIGRvd24gaW4gdGhlIGJsb2NrIGxheWVyLCBwZXJoYXBzIGxlYWRpbmcgdG8gZ2FwcyBpbiBhIGBidmVjYC4KCk9rYXksIGJhY2sgdG8gdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZ2xlLiBJZiBgYmlvYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGJpb19hbGxvY19iaW9zZXRgLCBpdCBtaWdodCBiZSB6ZXJvZWQgb3V0IG9yIHBhcnRpYWxseSB6ZXJvZWQsIHdoaWNoIGJyaW5ncyBpdCBpbnRvIGFuIGluaXRpYWxpc2VkIHN0YXRlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBiaW9fYWxsb2NfYmlvc2V0YCBhbmQgdGhlIGBzdHJ1Y3QgYmlvYCBpdHNlbGYgdG8gYmUgY29tcGxldGVseSBzdXJlLiBUaGlzIGlzIGFib3V0IGFzIGNsZWFuIG9mIGEgcmVhZCBvZiBiaW8gZmllbGQsIGluIGNsb25lLCB0aGVuIGluIHNwbGl0LCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgc3BsaXQgb3BlcmF0aW9uIG5lZWRlZCBzb21lIGV4dHJhIGF0dGVudGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmlvX2FsbG9jX2Jpb3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL2Jpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jpby5jPTI2MD1FWFBPUlRfU1lNQk9MKGJpb19pbml0KTtcbi0tXG5ibG9jay9iaW8uYy0yNjktICogICBBZnRlciBjYWxsaW5nIGJpb19yZXNldCgpLCBAYmlvIHdpbGwgYmUgaW4gdGhlIHNhbWUgc3RhdGUgYXMgYSBmcmVzaGx5XG5ibG9jay9iaW8uYzoyNzA6ICogICBhbGxvY2F0ZWQgYmlvIHJldHVybmVkIGJpbyBiaW9fYWxsb2NfYmlvc2V0KCkgLSB0aGUgb25seSBmaWVsZHMgdGhhdCBhcmVcbmJsb2NrL2Jpby5jOjI3MTogKiAgIHByZXNlcnZlZCBhcmUgdGhlIG9uZXMgdGhhdCBhcmUgaW5pdGlhbGl6ZWQgYnkgYmlvX2FsbG9jX2Jpb3NldCgpLiBTZWVcbmJsb2NrL2Jpby5jLTI3Mi0gKiAgIGNvbW1lbnQgaW4gc3RydWN0IGJpby5cbi0tXG5ibG9jay9iaW8uYz00NzY9c3RhdGljIHN0cnVjdCBiaW8gKmJpb19hbGxvY19wZXJjcHVfY2FjaGUoc3RydWN0IGJpb19zZXQgKmJzKVxuLS1cbmJsb2NrL2Jpby5jLTUwMS0vKipcbmJsb2NrL2Jpby5jOjUwMjogKiBiaW9fYWxsb2NfYmlvc2V0IC0gYWxsb2NhdGUgYSBiaW8gZm9yIEkvT1xuYmxvY2svYmlvLmMtNTAzLSAqIEBiZGV2Olx0YmxvY2sgZGV2aWNlIHRvIGFsbG9jYXRlIHRoZSBiaW8gZm9yIChjYW4gYmUgJU5VTEwpXG4tLVxuYmxvY2svYmlvLmMtNTM0LSAqL1xuYmxvY2svYmlvLmM6NTM1OnN0cnVjdCBiaW8gKmJpb19hbGxvY19iaW9zZXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgc2hvcnQgbnJfdmVjcyxcbmJsb2NrL2Jpby5jLTUzNi1cdFx0XHQgICAgIGJsa19vcGZfdCBvcGYsIGdmcF90IGdmcCwgc3RydWN0IGJpb19zZXQgKmJzKVxuLS1cbmJsb2NrL2Jpby5jLTYxNi19XG5ibG9jay9iaW8uYzo2MTc6RVhQT1JUX1NZTUJPTChiaW9fYWxsb2NfYmlvc2V0KTtcbmJsb2NrL2Jpby5jLTYxOC1cbi0tXG5ibG9jay9iaW8uYy02MjgtICpcbmJsb2NrL2Jpby5jOjYyOTogKiBOb3RlIHRoYXQgdW5saWtlIGJpb19hbGxvYygpIG9yIGJpb19hbGxvY19iaW9zZXQoKSBhbGxvY2F0aW9ucyBmcm9tIHRoaXNcbmJsb2NrL2Jpby5jLTYzMC0gKiBmdW5jdGlvbiBhcmUgbm90IGJhY2tlZCBieSBhIG1lbXBvb2wgY2FuIGZhaWwuICBEbyBub3QgdXNlIHRoaXMgZnVuY3Rpb25cbi0tXG5ibG9jay9iaW8uYz04OTQ9c3RydWN0IGJpbyAqYmlvX2FsbG9jX2Nsb25lKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBiaW8gKmJpb19zcmMsXG4tLVxuYmxvY2svYmlvLmMtODk4LVxuYmxvY2svYmlvLmM6ODk5Olx0YmlvID0gYmlvX2FsbG9jX2Jpb3NldChiZGV2LCAwLCBiaW9fc3JjLVx1MDAzZWJpX29wZiwgZ2ZwLCBicyk7XG5ibG9jay9iaW8uYy05MDAtXHRpZiAoIWJpbylcbi0tXG5ibG9jay9iaW8uYz0yMDQ2PUVYUE9SVF9TWU1CT0woYmlvc2V0X2V4aXQpO1xuLS1cbmJsb2NrL2Jpby5jLTIwNTYtICogRGVzY3JpcHRpb246XG5ibG9jay9iaW8uYzoyMDU3OiAqICAgIFNldCB1cCBhIGJpb19zZXQgdG8gYmUgdXNlZCB3aXRoIEBiaW9fYWxsb2NfYmlvc2V0LiBBbGxvd3MgdGhlIGNhbGxlclxuYmxvY2svYmlvLmMtMjA1OC0gKiAgICB0byBhc2sgZm9yIGEgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIGFsbG9jYXRlZCBpbiBmcm9udCBvZiB0aGUgYmlvLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTg1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIEJsb2NrIEkvTyBTdHJ1Y3R1cmVzKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBzdHJ1Y3QgYmlvYCBzdHJ1Y3R1cmUuIExldCYjMzk7cyBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIGBpbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjYW5vbmljYWwgZGVmaW5pdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGJhc2ljIGJsb2NrIEkvTyBvcGVyYXRpb25zIGF0IGEgZm91bmRhdGlvbmFsIGxldmVsLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBkZXNjcmliZXMgYSBibG9jayBJL08gcmVxdWVzdC4gSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGluZm9ybWF0aW9uIGl0IGVuY2Fwc3VsYXRlcyDigJMgdGhlIGRldmljZSwgdGhlIHNlY3RvciBhZGRyZXNzZXMsIHRoZSBkYXRhIGJ1ZmZlcnMsIHRoZSBJL08gZmxhZ3MsIGFuZCBldmVyeXRoaW5nIGVsc2UgaW52b2x2ZWQgaW4gYSB0eXBpY2FsIEkvTyBvcGVyYXRpb24uIExldCYjMzk7cyBzZWUgaG93IHRoZSBrZXJuZWwgb3JjaGVzdHJhdGVzIHRoaXMgY3J1Y2lhbCBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBibG9jayBsYXllciBhbmQgdGhlIHVuZGVybHlpbmcgc3RvcmFnZSBkZXZpY2VzLiBUaW1lIHRvIGRpZyBpbiBhbmQgcmVtaW5kIG15c2VsZiBvZiB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGJpbyBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmg9MjAzPXR5cGVkZWYgdW5zaWduZWQgaW50IGJsa19xY190O1xuLS1cbmluY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgtMjA5LSAqL1xuaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaDoyMTA6c3RydWN0IGJpbyB7XG5pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oLTIxMS1cdHN0cnVjdCBiaW9cdFx0KmJpX25leHQ7XHQvKiByZXF1ZXN0IHF1ZXVlIGxpbmsgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkzNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHRzLCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBhbmFseXppbmcgYHN0cnVjdCBiaW9gOgoKKipEaXZpbmcgaW50byBgc3RydWN0IGJpb2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGl0LiBUaW1lIHRvIGRpc3NlY3QgYHN0cnVjdCBiaW9gLiBJIGFscmVhZHkga25vdyB0aGUgaGlnaC1sZXZlbDsgdGhpcyBpcyB0aGUgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmUgaW4gdGhlIExpbnV4IGtlcm5lbCBmb3IgYmxvY2sgSS9PIG9wZXJhdGlvbnMuIEJ1dCBub3cgSSB3YW50IHRvIGRyaWxsIGRvd24sIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIGZpZWxkcywgdGhlIGltcGxpY2F0aW9ucyBvZiBlYWNoIG1lbWJlciwgYW5kIGhvdyB0aGV5IGNvbnRyaWJ1dGUgdG8gZWZmaWNpZW50IGFuZCByZWxpYWJsZSBkYXRhIHRyYW5zZmVyLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHRoaW5nIGlzICpkZXNpZ25lZCrigJR3aGF0IHRyYWRlLW9mZnMgd2VyZSBtYWRlPyBXaGF0IG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIGFyZSBhdCBwbGF5PwoKRmlyc3QsIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGVzc2VudGlhbCBmaWVsZHMuIFRoZSBwb2ludGVycyB0byB0aGUgZGF0YSBidWZmZXJzIChwcm9iYWJseSBgYmlfaW9fdmVjYCBvciBzaW1pbGFyKSwgdGhlIGRldmljZSBpbmZvcm1hdGlvbiAod2hlcmUgdGhlIGRhdGEgaXMgaGVhZGVkKSwgYW5kIHRoZSBmbGFncyB0aGF0IGRpY3RhdGUgdGhlIG9wZXJhdGlvbmFsIGNoYXJhY3RlcmlzdGljc+KAlHJlYWQvd3JpdGUsIHN5bmNocm9ub3VzL2FzeW5jaHJvbm91cywgZXRjLiBJJiMzOTttIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gaG93IHRoZXkgaGFuZGxlIHNjYXR0ZXItZ2F0aGVyIEkvTy4gQXJlIHRoZXkgdXNpbmcgYSBsaW5rZWQgbGlzdCBvZiBgYmlvX3ZlY2Agc3RydWN0cz8gSXMgdGhlcmUgYW55IGNhY2hpbmcgb3IgcHJlZmV0Y2hpbmcgYnVpbHQgaW4/IFRoZSBsYXlvdXQgaXMgaW1wb3J0YW50IHRvIG1pbmltaXplIGNhY2hlLWxpbmUgYm91bmNpbmcuCgpOZXh0LCBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIGBiaW9gIGlzICp1c2VkKi4gSSYjMzk7bGwgdHJ5IHRvIGZvbGxvdyBpdHMgbGlmZWN5Y2xlLiBIb3cgaXMgaXQgaW5pdGlhbGl6ZWQ/IEFsbG9jYXRlZD8gUXVldWVkPyBTdWJtaXR0ZWQgdG8gdGhlIGJsb2NrIGRldmljZSBkcml2ZXI/IENvbXBsZXRlZD8gV2hhdCBhYm91dCBlcnJvciBoYW5kbGluZz8gSXMgdGhlcmUgcHJvcGVyIHNlcXVlbmNpbmcgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IGluIHRoZSBmYWNlIG9mIGhhcmR3YXJlIGZhaWx1cmVzIGFuZCByZXRyaWVzPyBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSBzaWducyBvZiBsb2NrIGNvbnRlbnRpb24gb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBBcmUgdGhlcmUgYW55IHBlci1DUFUgZGF0YSBzdHJ1Y3R1cmVzIHRvIHJlZHVjZSBsb2NraW5nIG92ZXJoZWFkPyBJJiMzOTttIGhvcGluZyB0byBzZWUgd2VsbC1kZWZpbmVkIHN0YXRlcyBhbmQgdHJhbnNpdGlvbnMgdGhhdCBtYWtlIGl0IHJvYnVzdC4KCkkmIzM5O20ga2VlcGluZyBhbiBleWUgb3V0IGZvciBhbnkgc3BlY2lmaWMgb3B0aW1pemF0aW9ucyBmb3IgbW9kZXJuIHN0b3JhZ2UgZGV2aWNlcywgbGlrZSBOVk1lIG9yIFNTRHMuIERvZXMgdGhlIHN0cnVjdHVyZSBpbmNvcnBvcmF0ZSBhbnkgZmVhdHVyZXMgdGhhdCBhbGxvdyBmb3IgZWZmaWNpZW50IGNvbW1hbmQgcXVldWluZywgVFJJTSBzdXBwb3J0LCBvciBhbnkgb3RoZXIgZmVhdHVyZXMgc3BlY2lmaWMgdG8gYWR2YW5jZWQgc3RvcmFnZSBwcm90b2NvbHM/IEFyZSB0aGVyZSBhbnkgaGludHMgb2Ygc3VwcG9ydCBmb3IgRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgYW5kIHplcm8tY29weSBvcGVyYXRpb25zPwoKRmluYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIG9mICpmdXR1cmUtcHJvb2ZpbmcqLiBBcmUgdGhlcmUgcmVzZXJ2ZWQgZmllbGRzIG9yIGV4dGVuc2lvbiBwb2ludHMgdGhhdCBpbmRpY2F0ZSBmb3J3YXJkIGNvbXBhdGliaWxpdHk/IEhhdmUgdGhleSB0aG91Z2h0IGFib3V0IHN1cHBvcnRpbmcgbmV3IGhhcmR3YXJlIG9yIHN0b3JhZ2UgdGVjaG5vbG9naWVzPyBBcmUgdGhlcmUgYW55IGhpbnRzIG9mIGFic3RyYWN0aW9uIGxheWVycyB0aGF0IGNvdWxkIG1ha2UgaXQgZWFzaWVyIHRvIGFkZCBuZXcgZmVhdHVyZXMgbGF0ZXI/IEkgd2FudCB0byBzZWUgYSBkZXNpZ24gdGhhdCBpcyBjbGVhbiwgZXh0ZW5zaWJsZSwgYW5kIGRvZXNuJiMzOTt0IGdldCBpbiB0aGUgd2F5IG9mIHBlcmZvcm1hbmNlLiBPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTA6XHRzdHJ1Y3QgYmlvIHtcbiAyMTE6XHRcdHN0cnVjdCBiaW9cdFx0KmJpX25leHQ7XHQvKiByZXF1ZXN0IHF1ZXVlIGxpbmsgKi9cbiAyMTI6XHRcdHN0cnVjdCBibG9ja19kZXZpY2VcdCpiaV9iZGV2O1xuIDIxMzpcdFx0YmxrX29wZl90XHRcdGJpX29wZjtcdFx0LyogYm90dG9tIGJpdHMgUkVRX09QLCB0b3AgYml0c1xuIDIxNDpcdFx0XHRcdFx0XHRcdCAqIHJlcV9mbGFncy5cbiAyMTU6XHRcdFx0XHRcdFx0XHQgKi9cbiAyMTY6XHRcdHVuc2lnbmVkIHNob3J0XHRcdGJpX2ZsYWdzO1x0LyogQklPXyogYmVsb3cgKi9cbiAyMTc6XHRcdHVuc2lnbmVkIHNob3J0XHRcdGJpX2lvcHJpbztcbiAyMTg6XHRcdGVudW0gcndfaGludFx0XHRiaV93cml0ZV9oaW50O1xuIDIxOTpcdFx0dThcdFx0XHRiaV93cml0ZV9zdHJlYW07XG4gMjIwOlx0XHRibGtfc3RhdHVzX3RcdFx0Ymlfc3RhdHVzO1xuIDIyMTpcdFxuIDIyMjpcdFx0LypcbiAyMjM6XHRcdCAqIFRoZSBidmVjIGdhcCBiaXQgaW5kaWNhdGVzIHRoZSBsb3dlc3Qgc2V0IGJpdCBpbiBhbnkgYWRkcmVzcyBvZmZzZXRcbiAyMjQ6XHRcdCAqIGJldHdlZW4gYWxsIGJpX2lvX3ZlY3MuIFRoaXMgZmllbGQgaXMgaW5pdGlhbGl6ZWQgb25seSBhZnRlciB0aGUgYmlvXG4gMjI1Olx0XHQgKiBpcyBzcGxpdCB0byB0aGUgaGFyZHdhcmUgbGltaXRzIChzZWUgYmlvX3NwbGl0X2lvX2F0KCkpLiBUaGUgdmFsdWVcbiAyMjY6XHRcdCAqIG1heSBiZSB1c2VkIHRvIGNvbnNpZGVyIERNQSBvcHRpbWl6YXRpb24gd2hlbiBwZXJmb3JtaW5nIHRoYXRcbiAyMjc6XHRcdCAqIG1hcHBpbmcuIFRoZSB2YWx1ZSBpcyBjb21wYXJlZCB0byBhIHBvd2VyIG9mIHR3byBtYXNrIHdoZXJlIHRoZVxuIDIyODpcdFx0ICogcmVzdWx0IGRlcGVuZHMgb24gYW55IGJpdCBzZXQgd2l0aGluIHRoZSBtYXNrLCBzbyBzYXZpbmcgdGhlIGxvd2VzdFxuIDIyOTpcdFx0ICogYml0IGlzIHN1ZmZpY2llbnQgdG8ga25vdyBpZiBhbnkgc2VnbWVudCBnYXAgY29sbGlkZXMgd2l0aCB0aGUgbWFzay5cbiAyMzA6XHRcdCAqL1xuIDIzMTpcdFx0dThcdFx0XHRiaV9idmVjX2dhcF9iaXQ7XG4gMjMyOlx0XG4gMjMzOlx0XHRhdG9taWNfdFx0XHRfX2JpX3JlbWFpbmluZztcbiAyMzQ6XHRcbiAyMzU6XHRcdC8qIFRoZSBhY3R1YWwgdmVjIGxpc3QsIHByZXNlcnZlZCBieSBiaW9fcmVzZXQoKSAqL1xuIDIzNjpcdFx0c3RydWN0IGJpb192ZWNcdFx0KmJpX2lvX3ZlYztcbiAyMzc6XHRcdHN0cnVjdCBidmVjX2l0ZXJcdGJpX2l0ZXI7XG4gMjM4Olx0XG4gMjM5Olx0XHR1bmlvbiB7XG4gMjQwOlx0XHRcdC8qIGZvciBwb2xsZWQgYmlvczogKi9cbiAyNDE6XHRcdFx0YmxrX3FjX3RcdFx0YmlfY29va2llO1xuIDI0MjpcdFx0XHQvKiBmb3IgcGx1Z2dlZCB6b25lZCB3cml0ZXMgb25seTogKi9cbiAyNDM6XHRcdFx0dW5zaWduZWQgaW50XHRcdF9fYmlfbnJfc2VnbWVudHM7XG4gMjQ0Olx0XHR9O1xuIDI0NTpcdFx0YmlvX2VuZF9pb190XHRcdCpiaV9lbmRfaW87XG4gMjQ2Olx0XHR2b2lkXHRcdFx0KmJpX3ByaXZhdGU7XG4gMjQ3Olx0I2lmZGVmIENPTkZJR19CTEtfQ0dST1VQXG4gMjQ4Olx0XHQvKlxuIDI0OTpcdFx0ICogUmVwcmVzZW50cyB0aGUgYXNzb2NpYXRpb24gb2YgdGhlIGNzcyBhbmQgcmVxdWVzdF9xdWV1ZSBmb3IgdGhlIGJpby5cbiAyNTA6XHRcdCAqIElmIGEgYmlvIGdvZXMgZGlyZWN0IHRvIGRldmljZSwgaXQgd2lsbCBub3QgaGF2ZSBhIGJsa2cgYXMgaXQgd2lsbFxuIDI1MTpcdFx0ICogbm90IGhhdmUgYSByZXF1ZXN0X3F1ZXVlIGFzc29jaWF0ZWQgd2l0aCBpdC4gIFRoZSByZWZlcmVuY2UgaXMgcHV0XG4gMjUyOlx0XHQgKiBvbiByZWxlYXNlIG9mIHRoZSBiaW8uXG4gMjUzOlx0XHQgKi9cbiAyNTQ6XHRcdHN0cnVjdCBibGtjZ19ncVx0XHQqYmlfYmxrZztcbiAyNTU6XHRcdC8qIFRpbWUgdGhhdCB0aGlzIGJpbyB3YXMgaXNzdWVkLiAqL1xuIDI1NjpcdFx0dTY0XHRcdFx0aXNzdWVfdGltZV9ucztcbiAyNTc6XHQjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBfSU9DT1NUXG4gMjU4Olx0XHR1NjRcdFx0XHRiaV9pb2Nvc3RfY29zdDtcbiAyNTk6XHQjZW5kaWZcbiAyNjA6XHQjZW5kaWZcbiAyNjE6XHRcbiAyNjI6XHQjaWZkZWYgQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTlxuIDI2MzpcdFx0c3RydWN0IGJpb19jcnlwdF9jdHhcdCpiaV9jcnlwdF9jb250ZXh0O1xuIDI2NDpcdCNlbmRpZlxuIDI2NTpcdFxuIDI2NjpcdCNpZiBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lOVEVHUklUWSlcbiAyNjc6XHRcdHN0cnVjdCBiaW9faW50ZWdyaXR5X3BheWxvYWQgKmJpX2ludGVncml0eTsgLyogZGF0YSBpbnRlZ3JpdHkgKi9cbiAyNjg6XHQjZW5kaWZcbiAyNjk6XHRcbiAyNzA6XHRcdHVuc2lnbmVkIHNob3J0XHRcdGJpX3ZjbnQ7XHQvKiBob3cgbWFueSBiaW9fdmVjJiMzOTtzICovXG4gMjcxOlx0XG4gMjcyOlx0XHQvKlxuIDI3MzpcdFx0ICogRXZlcnl0aGluZyBzdGFydGluZyB3aXRoIGJpX21heF92ZWNzIHdpbGwgYmUgcHJlc2VydmVkIGJ5IGJpb19yZXNldCgpXG4gMjc0Olx0XHQgKi9cbiAyNzU6XHRcbiAyNzY6XHRcdC8qXG4gMjc3Olx0XHQgKiBOdW1iZXIgb2YgZWxlbWVudHMgaW4gYGJpX2lvX3ZlY2AgdGhhdCB3ZXJlIGFsbG9jYXRlZCBmb3IgdGhpcyBiaW8uXG4gMjc4Olx0XHQgKiBPbmx5IHVzZWQgYnkgdGhlIGJpbyBzdWJtaXR0ZXIgdG8gbWFrZSBgYmlvX2FkZF9wYWdlYCBmYWlsIG9uY2UgZnVsbFxuIDI3OTpcdFx0ICogYW5kIHRvIGZyZWUgdGhlIGBiaV9pb192ZWNgIGFsbG9jYXRpb24uIE11c3Qgbm90IGJlIHVzZWQgaW4gZHJpdmVyc1xuIDI4MDpcdFx0ICogYW5kIGRvZXMgbm90IGhvbGQgYSB1c2VmdWwgdmFsdWUgZm9yIGNsb25lZCBiaW9zLlxuIDI4MTpcdFx0ICovXG4gMjgyOlx0XHR1bnNpZ25lZCBzaG9ydFx0XHRiaV9tYXhfdmVjcztcbiAyODM6XHRcbiAyODQ6XHRcdGF0b21pY190XHRcdF9fYmlfY250O1x0LyogcGluIGNvdW50ICovXG4gMjg1Olx0XG4gMjg2Olx0XHRzdHJ1Y3QgYmlvX3NldFx0XHQqYmlfcG9vbDtcbiAyODc6XHR9O1xuIDI4ODpcdFxuIDI4OTpcdCNkZWZpbmUgQklPX1JFU0VUX0JZVEVTXHRcdG9mZnNldG9mKHN0cnVjdCBiaW8sIGJpX21heF92ZWNzKVxuIDI5MDpcdCNkZWZpbmUgQklPX01BWF9TSVpFXHRcdFVJTlRfTUFYIC8qIG1heCB2YWx1ZSBvZiBiaV9pdGVyLmJpX3NpemUgKi9cbiAyOTE6XHQjZGVmaW5lIEJJT19NQVhfU0VDVE9SU1x0XHQoQklPX01BWF9TSVpFIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQpXG4gMjkyOlx0XG4gMjkzOlx0c3RhdGljIGlubGluZSBzdHJ1Y3QgYmlvX3ZlYyAqYmlvX2lubGluZV92ZWNzKHN0cnVjdCBiaW8gKmJpbylcbiAyOTQ6XHR7XG4gMjk1Olx0XHRyZXR1cm4gKHN0cnVjdCBiaW9fdmVjICopKGJpbyAmIzQzOyAxKTtcbiAyOTY6XHR9XG4gMjk3Olx0XG4gMjk4Olx0LypcbiAyOTk6XHQgKiBiaW8gZmxhZ3NcbiAzMDA6XHQgKi9cbiAzMDE6XHRlbnVtIHtcbiAzMDI6XHRcdEJJT19QQUdFX1BJTk5FRCxcdC8qIFVucGluIHBhZ2VzIGluIGJpb19yZWxlYXNlX3BhZ2VzKCkgKi9cbiAzMDM6XHRcdEJJT19DTE9ORUQsXHRcdC8qIGRvZXNuJiMzOTt0IG93biBkYXRhICovXG4gMzA0Olx0XHRCSU9fUVVJRVQsXHRcdC8qIE1ha2UgQklPIFF1aWV0ICovXG4gMzA1Olx0XHRCSU9fQ0hBSU4sXHRcdC8qIGNoYWluZWQgYmlvLCAtXHUwMDNlYmlfcmVtYWluaW5nIGluIGVmZmVjdCAqL1xuIDMwNjpcdFx0QklPX1JFRkZFRCxcdFx0LyogYmlvIGhhcyBlbGV2YXRlZCAtXHUwMDNlYmlfY250ICovXG4gMzA3Olx0XHRCSU9fQlBTX1RIUk9UVExFRCxcdC8qIFRoaXMgYmlvIGhhcyBhbHJlYWR5IGJlZW4gc3ViamVjdGVkIHRvXG4gMzA4Olx0XHRcdFx0XHQgKiB0aHJvdHRsaW5nIHJ1bGVzLiBEb24mIzM5O3QgZG8gaXQgYWdhaW4uICovXG4gMzA5Olx0XHRCSU9fVFJBQ0VfQ09NUExFVElPTixcdC8qIGJpb19lbmRpbygpIHNob3VsZCB0cmFjZSB0aGUgZmluYWwgY29tcGxldGlvblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTEwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYmlvIFN0cnVjdHVyZSBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyBhZGRpbmcgYGJpby0mZ3Q7YmlfYnZlY19nYXBfYml0YCB0byB0aGUgYF9fYmlvX2Nsb25lYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIG5ldyBvbmUuICBJdCYjMzk7cyBhbHNvIGJlaW5nIHJlc2V0IHRvIDAgaW4gYGJpb19zcGxpdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gIElzIHRoaXMgYSBiaXRmaWVsZCBmbGFnIGJlaW5nIGFkZGVkLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGV4aXN0aW5nIGBiaW9gIHN0cnVjdHVyZSBhbmQgaG93IHRoaXMgbmV3IG1lbWJlciBtb2RpZmllcyB0aGF0IGludGVyYWN0aW9uLiBJdCBzZWVtcyBsaWtlIHRoZSBpbnRlbnRpb24gaXMgdG8gY2FycnkgdGhhdCBiaXQgYWNyb3NzIGNsb25lcywgYnV0IHJlc2V0IGl0IG9uIGEgc3BsaXQuCgpOb3csIHdhaXQgYSBtaW51dGUuLi4gSSBuZWVkIHRvIGNvbnNpZGVyIGhvdyBgYmlvX2FsbG9jX2Jpb3NldGAgYW5kIGBiaW9faW5pdGAgYXJlIGludm9sdmVkIGhlcmUuIERvbiYjMzk7dCB0aG9zZSBmdW5jdGlvbnMgcmVzZXQgYSBnb29kIGNodW5rIG9mIHRoZSBgYmlvYCBzdHJ1Y3R1cmU/IEkgYmVsaWV2ZSB0aGV5IGNhbGwgYGJpb19pbml0YCwgYW5kIEkgcmVjYWxsIGBiaW9faW5pdGAgY2xlYXJpbmcgdGhlIGBiaW9gIHN0cnVjdHVyZSB1cCB0byBgQklPX1JFU0VUX0JZVEVTYC4gSSBuZWVkIHRvIGNvbmZpcm0gZXhhY3RseSB3aGF0IGdldHMgY2xlYXJlZCBieSBgYmlvX2luaXRgLCBhbmQgd2hldGhlciB0aGlzIG5ldyBmaWVsZCBpcyB3aXRoaW4gdGhhdCByZXNldCByYW5nZS4gSXQmIzM5O3MgY3JpdGljYWwgdG8gZW5zdXJlIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzIG9yIGNvbmZsaWN0cyB3aXRoIG90aGVyIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLiBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byBgYmlvX2luaXRgJiMzOTtzIGNvZGUgcmlnaHQgYXdheS4gIFRoZSBpbXBsaWNhdGlvbnMgb2YgKndoZXJlKiB0aGlzIG5ldyBiaXQgcmVzaWRlcyBpbiB0aGUgYmlvIGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gYmVoYXZpb3IgYXJlIGNyaXRpY2FsIHRvIHByb3Blcmx5IHVuZGVyc3RhbmRpbmcgaXRzIGFkZGl0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGJpb19pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svYmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmlvLmM9MTk1PXN0YXRpYyB2b2lkIGJpb19mcmVlKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5ibG9jay9iaW8uYy0yMTYtICovXG5ibG9jay9iaW8uYzoyMTc6dm9pZCBiaW9faW5pdChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBiaW9fdmVjICp0YWJsZSxcbmJsb2NrL2Jpby5jLTIxOC1cdCAgICAgIHVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCBibGtfb3BmX3Qgb3BmKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTAwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFRhc2sqKgoKQWxyaWdodCwgdGhlIGRpcmVjdGl2ZSBpcyB0byBzdW1tYXJpemUgYW5kIGludGVycHJldCB0aGUgdGhvdWdodCBwcm9jZXNzLCBlc3NlbnRpYWxseSBzdGVwcGluZyBpbnRvIHRoZSBzaG9lcyBvZiB0aGUgaW5kaXZpZHVhbCBhbmQgZGVzY3JpYmluZyB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbnRlcm5hbGx5LiBUaGUgZmlyc3QsIGFuZCBtb3N0IGltcG9ydGFudCwgcGllY2Ugb2YgaW5mb3JtYXRpb24gaXMgdGhlIGRvY3VtZW50LCBjYWxsZWQgYGJpb19pbml0YC4gT2theSwgSSBrbm93IHdoYXQgdGhhdCBtZWFucy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSByZWFkaW5nIHRoZSBjb2RlLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL2Jpby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTc6XHR2b2lkIGJpb19pbml0KHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGJpb192ZWMgKnRhYmxlLFxuIDIxODpcdFx0ICAgICAgdW5zaWduZWQgc2hvcnQgbWF4X3ZlY3MsIGJsa19vcGZfdCBvcGYpXG4gMjE5Olx0e1xuIDIyMDpcdFx0YmlvLVx1MDAzZWJpX25leHQgPSBOVUxMO1xuIDIyMTpcdFx0YmlvLVx1MDAzZWJpX2JkZXYgPSBiZGV2O1xuIDIyMjpcdFx0YmlvLVx1MDAzZWJpX29wZiA9IG9wZjtcbiAyMjM6XHRcdGJpby1cdTAwM2ViaV9mbGFncyA9IDA7XG4gMjI0Olx0XHRiaW8tXHUwMDNlYmlfaW9wcmlvID0gMDtcbiAyMjU6XHRcdGJpby1cdTAwM2ViaV93cml0ZV9oaW50ID0gMDtcbiAyMjY6XHRcdGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gPSAwO1xuIDIyNzpcdFx0YmlvLVx1MDAzZWJpX3N0YXR1cyA9IDA7XG4gMjI4Olx0XHRiaW8tXHUwMDNlYmlfYnZlY19nYXBfYml0ID0gMDtcbiAyMjk6XHRcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IDA7XG4gMjMwOlx0XHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplID0gMDtcbiAyMzE6XHRcdGJpby1cdTAwM2ViaV9pdGVyLmJpX2lkeCA9IDA7XG4gMjMyOlx0XHRiaW8tXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQgPSAwO1xuIDIzMzpcdFx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IE5VTEw7XG4gMjM0Olx0XHRiaW8tXHUwMDNlYmlfcHJpdmF0ZSA9IE5VTEw7XG4gMjM1Olx0I2lmZGVmIENPTkZJR19CTEtfQ0dST1VQXG4gMjM2Olx0XHRiaW8tXHUwMDNlYmlfYmxrZyA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MjcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBiaV9idmVjX2dhcF9iaXRgIElzc3VlKioKCk9rYXksIHNvIGBiaW9faW5pdGAgKmV4cGxpY2l0bHkqIHNldHMgYGJpby0mZ3Q7YmlfYnZlY19nYXBfYml0YCB0byB6ZXJvLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgdGhlIGluaXRpYWxpemF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgdGhpcyAqd2FzbiYjMzk7dCogaGFwcGVuaW5nLCB0aGF0IGBiaV9idmVjX2dhcF9iaXRgIHdhcyBnZXR0aW5nIGxlZnQgdW5pbml0aWFsaXplZCBzb21ld2hlcmUuIEJ1dCB0aGF0JiMzOTtzIHdyb25nLiBJdCYjMzk7cyAqYWx3YXlzKiBpbml0aWFsaXplZCB0byB6ZXJvIGR1cmluZyBhbGxvY2F0aW9uLgoKVGhlIHJlYWwgcHJvYmxlbSBsaWVzIGluIHRoZSAqY2xvbmluZyogYW5kICpzcGxpdHRpbmcqIG9wZXJhdGlvbnMuIEl0IGxvb2tzIGxpa2UgYF9fYmlvX2Nsb25lYCB3YXNuJiMzOTt0IGNvcHlpbmcgdGhlIGBiaV9idmVjX2dhcF9iaXRgIGZyb20gdGhlIHNvdXJjZSBiaW8gdG8gdGhlIGNsb25lZCBiaW8uIEFuZCBgYmlvX3NwbGl0YCB3YXNuJiMzOTt0IHJlc2V0dGluZyBpdCB0byB6ZXJvIGZvciB0aGUgcmVtYWluaW5nIHBhcnQuIFRoYXQmIzM5O3MgYSBsb2dpY2FsIGZsYXcuIFRoZSBtZW1vcnkgKmlzKiBpbml0aWFsaXplZCwgYnV0IGl0IGNvdWxkIGVuZCB1cCB3aXRoIGEgKnN0YWxlKiB2YWx1ZSwgYSB2YWx1ZSB0aGF0IGRvZXNuJiMzOTt0IHJlZmxlY3QgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGJpbyBhZnRlciB0aGUgY2xvbmluZyBvciBzcGxpdHRpbmcuIFRoaXMgY291bGQgYWJzb2x1dGVseSBsZWFkIHRvIGluY29ycmVjdCBETUEgbWFwcGluZyBvciBvdGhlciBjb3JydXB0aW9uLCBidXQgaXQgaXMgbm90IGEgZGlyZWN0IG1lbW9yeSBpbml0aWFsaXphdGlvbiBpc3N1ZS4KCldhaXQuLi4gSSBuZWVkIHRvIGNoZWNrIG15IGFzc3VtcHRpb24uIENhbiBgX19iaW9fY2xvbmVgICphY3R1YWxseSogYmUgY2FsbGVkIG9uIGFuIHVuaW5pdGlhbGl6ZWQgYmlvPyBObywgdGhhdCBjYW4mIzM5O3QgYmUuIGBfX2Jpb19jbG9uZWAgaXMgY2FsbGVkIGZyb20gYGJpb19hbGxvY19jbG9uZWAsIHdoaWNoIHVzZXMgYGJpb19hbGxvY19iaW9zZXRgIHdoaWNoIHRoZW4gKmNhbGxzKiBgYmlvX2luaXRgLiBUaGVyZWZvcmUsIHRoZSAqbmV3KiBiaW8gd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIGBiaV9idmVjX2dhcF9iaXQgPSAwYC4gU28sIGBfX2Jpb19jbG9uZWAgY29waWVzIGZpZWxkcyBmcm9tIHRoZSBzb3VyY2UgYmlvIGFuZCwgaWYgaXQgKmRpZG4mIzM5O3QqIGNvcHkgYGJpX2J2ZWNfZ2FwX2JpdGAsIGl0IHdvdWxkIHNpbXBseSByZW1haW4gemVybyEKCk9rYXksIHNvIGl0JiMzOTtzIGEgKmxvZ2ljYWwgYnVnKiwgcHVyZSBhbmQgc2ltcGxlLiBFaXRoZXIgdGhlIGNsb25lIGRvZXNuJiMzOTt0IGluaGVyaXQgdGhlIGNvcnJlY3QgZ2FwIGJpdCwgb3IgdGhlIHNwbGl0IGJpbyBkb2VzbiYjMzk7dCByZXNldCBpdC4gVGhpcyBkb2VzbiYjMzk7dCBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHRob3VnaC4gVGhlIG1lbW9yeSAqaXMqIGZ1bGx5IGluaXRpYWxpemVkLiBOb3csIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYGJpb19yZXNldGAgdG8gZW5zdXJlIG15IHVuZGVyc3RhbmRpbmcgaXMgY29tcGxldGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgYmlvX3Jlc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svYmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmlvLmM9MjYwPUVYUE9SVF9TWU1CT0woYmlvX2luaXQpO1xuLS1cbmJsb2NrL2Jpby5jLTI3My0gKi9cbmJsb2NrL2Jpby5jOjI3NDp2b2lkIGJpb19yZXNldChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19vcGZfdCBvcGYpXG5ibG9jay9iaW8uYy0yNzUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzY5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBCaW9fcmVzZXQgRmlsZSoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiAmIzM0O2Jpb19yZXNldCYjMzQ7Li4uIHRoYXQgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgYSBzeXN0ZW0gcmVzZXQgb3IgaW5pdGlhbGl6YXRpb24gcmVsYXRlZCB0byBiaW9sb2dpY2FsIGRhdGEgb3IgYSBiaW9sb2dpY2FsIHByb2Nlc3MuIFRoZSBuYW1pbmcgY29udmVudGlvbiBsaWtlbHkgaW5kaWNhdGVzIGEgc3BlY2lmaWMgbW9kdWxlIG9yIGNvbXBvbmVudC4gSSYjMzk7bSBhc3N1bWluZyB0aGlzIGlzbiYjMzk7dCBzb21lIGdlbmVyaWMgc2NyaXB0OyB0aGUgY29udGV4dCBpcyBsaWtlbHkgbW9yZSBzcGVjaWFsaXplZC4gSSBpbW1lZGlhdGVseSBzdGFydCBtZW50YWxseSBjYXRhbG9naW5nIHdoYXQgdGhpcyBjb3VsZCBhcHBseSB0bzogcGVyaGFwcyBhIGRhdGEgcGlwZWxpbmUgcmVzZXR0aW5nIGEgYmlvbG9naWNhbCBkYXRhYmFzZT8gTWF5YmUgaXQmIzM5O3MgYSBzY3JpcHQgdGhhdCBjbGVhbnMgYSBiaW9pbmZvcm1hdGljcyBlbnZpcm9ubWVudCBhZnRlciBhIHBhcnRpY3VsYXIgcnVuPyBJdCBjb3VsZCBldmVuIGJlIGEgcmVzZXQgcHJvY2VkdXJlIHRpZWQgdG8gdGhlIG9wZXJhdGlvbiBvZiBhIHBpZWNlIG9mIGV4cGVyaW1lbnRhbCBhcHBhcmF0dXMuIE15IGZvY3VzIG5vdyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdHMgb2Ygd2hhdGV2ZXIgaXMgY29udGFpbmVkIHdpdGhpbiB0aGF0IGBiaW9fcmVzZXRgIGZpbGUuIFRpbWUgdG8gZGlnIGluIGFuZCBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9iaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjc0Olx0dm9pZCBiaW9fcmVzZXQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfb3BmX3Qgb3BmKVxuIDI3NTpcdHtcbiAyNzY6XHRcdHN0cnVjdCBiaW9fdmVjICAgICAgICAgICpidiA9IGJpby1cdTAwM2ViaV9pb192ZWM7XG4gMjc3Olx0XG4gMjc4Olx0XHRiaW9fdW5pbml0KGJpbyk7XG4gMjc5Olx0XHRtZW1zZXQoYmlvLCAwLCBCSU9fUkVTRVRfQllURVMpO1xuIDI4MDpcdFx0YXRvbWljX3NldChcdTAwMjZiaW8tXHUwMDNlX19iaV9yZW1haW5pbmcsIDEpO1xuIDI4MTpcdFx0YmlvLVx1MDAzZWJpX2lvX3ZlYyA9IGJ2O1xuIDI4MjpcdFx0YmlvLVx1MDAzZWJpX2JkZXYgPSBiZGV2O1xuIDI4MzpcdFx0aWYgKGJpby1cdTAwM2ViaV9iZGV2KVxuIDI4NDpcdFx0XHRiaW9fYXNzb2NpYXRlX2Jsa2coYmlvKTtcbiAyODU6XHRcdGJpby1cdTAwM2ViaV9vcGYgPSBvcGY7XG4gMjg2Olx0fVxuIDI4NzpcdEVYUE9SVF9TWU1CT0woYmlvX3Jlc2V0KTtcbiAyODg6XHRcbiAyODk6XHQvKipcbiAyOTA6XHQgKiBiaW9fcmV1c2UgLSByZXVzZSBhIGJpbyB3aXRoIHRoZSBwYXlsb2FkIGxlZnQgaW50YWN0XG4gMjkxOlx0ICogQGJpbzpcdGJpbyB0byByZXVzZVxuIDI5MjpcdCAqIEBvcGY6XHRvcGVyYXRpb24gYW5kIGZsYWdzIGZvciB0aGUgbmV4dCBJL09cbiAyOTM6XHQgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTIwCgkJCQkJCQlvdXRwdXQ6IDIwMwoJCQkJCQkJdGhvdWdodHM6IDQyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYGJpX2J2ZWNfZ2FwX2JpdGAgRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgcmV2b2x2ZXMgYXJvdW5kIGBiaV9idmVjX2dhcF9iaXRgIHdpdGhpbiB0aGUgYHN0cnVjdCBiaW9gLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIHN5c3RlbSB1c2VzIGBiaW9fcmVzZXRgIHRvIGluaXRpYWxpemUgdGhpcyBzdHJ1Y3QsIHVzaW5nIGBtZW1zZXRgIHRvIHplcm8gb3V0IGEgcG9ydGlvbiBvZiB0aGUgc3RydWN0dXJlIHVwIHRvIGBCSU9fUkVTRVRfQllURVNgLCB3aGljaCBpcyBkZWZpbmVkIGFzIGBvZmZzZXRvZihzdHJ1Y3QgYmlvLCBiaV9tYXhfdmVjcylgLiBCZWNhdXNlIGBiaV9idmVjX2dhcF9iaXRgIHByZWNlZGVzIGBiaV9tYXhfdmVjc2AgaW4gdGhlIHN0cnVjdHVyZSwgdGhpcyBlZmZlY3RpdmVseSB6ZXJvcyBpdCBvdXQgZHVyaW5nIHJlc2V0LiBUaGlzIG1lYW5zIHRoYXQsIGF0IGxlYXN0IGZyb20gYW4gaW5pdGlhbGl6YXRpb24gcGVyc3BlY3RpdmUsIHdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBgYmlfYnZlY19nYXBfYml0YCBzaG91bGQgKmFsd2F5cyogYmUgaW5pdGlhbGl6ZWQsIGF0IGxlYXN0IGluaXRpYWxseS4KClRoZSBwYXRjaCBpdHNlbGYgYWRkcmVzc2VzIGEgKmxvZ2ljYWwqIGZsYXcsIHNwZWNpZmljYWxseSBpbiBob3cgYGJpX2J2ZWNfZ2FwX2JpdGAgaXMgaGFuZGxlZCBkdXJpbmcgYmlvIGNsb25pbmcgKHVzaW5nIGBfX2Jpb19jbG9uZWApIGFuZCBzcGxpdHRpbmcgKHVzaW5nIGBiaW9fc3BsaXRgKS4gSXQmIzM5O3MgYWJvdXQgZW5zdXJpbmcgdGhpcyBiaXQsIHdoaWNoIHNpZ25pZmllcyB0aGUgc21hbGxlc3Qgc2V0IGJpdCBpbiB0aGUgb2Zmc2V0IGJldHdlZW4gYGJpX2lvX3ZlY3NgIGZvciBETUEgb3B0aW1pemF0aW9uLCBpcyBjb3JyZWN0bHkgcHJvcGFnYXRlZCBvciBjbGVhcmVkIGluIHRoZXNlIG9wZXJhdGlvbnMuIElmIGl0JiMzOTtzIG5vdCBoYW5kbGVkIGNvcnJlY3RseSwgd2UgY291bGQgZW5kIHVwIHdpdGggaW5jb3JyZWN0IERNQSBtYXBwaW5ncyBvciBmdW5reSBiZWhhdmlvciB3aXRoaW4gdGhlIGJsb2NrIGxheWVyLgoKTm93LCBjb25jZXJuaW5nIHRoZSBgTmVlZHNLTVNBTmAgdGFnLCBteSBjb25jbHVzaW9uIGlzIGl0JiMzOTtzIGluY29ycmVjdCBoZXJlLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0ICp1bmluaXRpYWxpemVkKiBtZW1vcnkgcmVhZHMuIFRoZSBjb2RlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgYGJpX2J2ZWNfZ2FwX2JpdGAgdG8gemVyby4gQW55IG1lbW9yeSBjb3JydXB0aW9uIGFyaXNpbmcgZnJvbSB0aGUgaW5jb3JyZWN0IGhhbmRsaW5nIG9mIHRoaXMgYml0IHdvdWxkIGxpa2VseSBtYW5pZmVzdCBhcyBiYWQgRE1BLCBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcywgb3Igc29tZXRoaW5nIHNpbWlsYXIuIFRoaXMgd291bGQsIEkgYmVsaWV2ZSwgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIG90aGVyIG1vcmUgZ2VuZXJhbCBtZW1vcnkgc2FmZXR5IHRvb2xzLCBub3QgS01TQU4uIFRoZSBsb2dpYyBlcnJvciBtaWdodCBsZWFkIHRvIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uLCBidXQgaXQgaXMgbm90IGJlY2F1c2UgdGhlIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLCBidXQgYmVjYXVzZSBvZiBpbmNvcnJlY3QgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX2Jpb19jbG9uZWAgYW5kIGBiaW9fc3BsaXRgIHRvIHByb3Blcmx5IHByb3BhZ2F0ZSBhbmQgcmVzZXQgdGhlIGBiaV9idmVjX2dhcF9iaXRgIGZpZWxkIG9mIGBzdHJ1Y3QgYmlvYC4gVGhpcyBmaWVsZCBpcyB1c2VkIHRvIGluZGljYXRlIHRoZSBsb3dlc3Qgc2V0IGJpdCBpbiBhbnkgYWRkcmVzcyBvZmZzZXQgYmV0d2VlbiBhbGwgYGJpX2lvX3ZlY3NgIGZvciBETUEgb3B0aW1pemF0aW9uLiBXaGVuIGEgYmlvIGlzIGFsbG9jYXRlZCBvciByZXNldCwgYGJpX2J2ZWNfZ2FwX2JpdGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwICh2aWEgYGJpb19pbml0YCBvciBgbWVtc2V0YCBpbiBgYmlvX3Jlc2V0YCkuIFRoZXJlZm9yZSwgdGhlIGlzc3VlIGJlaW5nIGZpeGVkIGlzIGEgbG9naWNhbCBidWcgd2hlcmUgdGhlIGdhcCBiaXQgaXMgZWl0aGVyIGxvc3QgZHVyaW5nIGNsb25pbmcgb3IgaW5jb3JyZWN0bHkgcmV0YWluZWQgZHVyaW5nIHNwbGl0dGluZywgcmF0aGVyIHRoYW4gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC4gQmVjYXVzZSB0aGUgZmllbGQgaXMgYWx3YXlzIGluaXRpYWxpemVkLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiBBbnkgcmVzdWx0aW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGR1ZSB0byBpbmNvcnJlY3QgRE1BIG1hcHBpbmdzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX2Jpb19jbG9uZWAgYW5kIGBiaW9fc3BsaXRgIHRvIHByb3Blcmx5IHByb3BhZ2F0ZSBhbmQgcmVzZXQgdGhlIGBiaV9idmVjX2dhcF9iaXRgIGZpZWxkIG9mIGBzdHJ1Y3QgYmlvYC4gVGhpcyBmaWVsZCBpcyB1c2VkIHRvIGluZGljYXRlIHRoZSBsb3dlc3Qgc2V0IGJpdCBpbiBhbnkgYWRkcmVzcyBvZmZzZXQgYmV0d2VlbiBhbGwgYGJpX2lvX3ZlY3NgIGZvciBETUEgb3B0aW1pemF0aW9uLiBXaGVuIGEgYmlvIGlzIGFsbG9jYXRlZCBvciByZXNldCwgYGJpX2J2ZWNfZ2FwX2JpdGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwICh2aWEgYGJpb19pbml0YCBvciBgbWVtc2V0YCBpbiBgYmlvX3Jlc2V0YCkuIFRoZXJlZm9yZSwgdGhlIGlzc3VlIGJlaW5nIGZpeGVkIGlzIGEgbG9naWNhbCBidWcgd2hlcmUgdGhlIGdhcCBiaXQgaXMgZWl0aGVyIGxvc3QgZHVyaW5nIGNsb25pbmcgb3IgaW5jb3JyZWN0bHkgcmV0YWluZWQgZHVyaW5nIHNwbGl0dGluZywgcmF0aGVyIHRoYW4gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC4gQmVjYXVzZSB0aGUgZmllbGQgaXMgYWx3YXlzIGluaXRpYWxpemVkLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiBBbnkgcmVzdWx0aW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGR1ZSB0byBpbmNvcnJlY3QgRE1BIG1hcHBpbmdzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6MzU6MTkuOTYxOTI1OTMxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxOTE4OTgxMTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJpb19hbGxvY19jbG9uZVwiLFxuICAgIFwiYmlvX2luaXRfY2xvbmVcIixcbiAgICBcImJpb19zcGxpdFwiLFxuICAgIFwiYmxrX3JxX2FwcGVuZF9iaW9cIixcbiAgICBcImJpb19zcGxpdF9pb19hdFwiLFxuICAgIFwiYmlvX3NlZ19nYXBcIixcbiAgICBcImJsa19tcV9zdWJtaXRfYmlvXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19iaW9fY2xvbmVgIGFuZCBgYmlvX3NwbGl0YCB0byBwcm9wZXJseSBwcm9wYWdhdGUgYW5kIHJlc2V0IHRoZSBgYmlfYnZlY19nYXBfYml0YCBmaWVsZCBvZiBgc3RydWN0IGJpb2AuIFRoaXMgZmllbGQgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgbG93ZXN0IHNldCBiaXQgaW4gYW55IGFkZHJlc3Mgb2Zmc2V0IGJldHdlZW4gYWxsIGBiaV9pb192ZWNzYCBmb3IgRE1BIG9wdGltaXphdGlvbi4gV2hlbiBhIGJpbyBpcyBhbGxvY2F0ZWQgb3IgcmVzZXQsIGBiaV9idmVjX2dhcF9iaXRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCAodmlhIGBiaW9faW5pdGAgb3IgYG1lbXNldGAgaW4gYGJpb19yZXNldGApLiBUaGVyZWZvcmUsIHRoZSBpc3N1ZSBiZWluZyBmaXhlZCBpcyBhIGxvZ2ljYWwgYnVnIHdoZXJlIHRoZSBnYXAgYml0IGlzIGVpdGhlciBsb3N0IGR1cmluZyBjbG9uaW5nIG9yIGluY29ycmVjdGx5IHJldGFpbmVkIGR1cmluZyBzcGxpdHRpbmcsIHJhdGhlciB0aGFuIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQuIEJlY2F1c2UgdGhlIGZpZWxkIGlzIGFsd2F5cyBpbml0aWFsaXplZCwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4gQW55IHJlc3VsdGluZyBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyBkdWUgdG8gaW5jb3JyZWN0IERNQSBtYXBwaW5ncyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbWlzc2luZyBpbml0aWFsaXphdGlvbiBhbmQgY29weWluZyBvZiBgYmlfYnZlY19nYXBfYml0YCBpbiBgYmlvX3NwbGl0YCBhbmQgYF9fYmlvX2Nsb25lYC4gVGhpcyBmaWVsZCBpcyB1c2VkIHRvIHRyYWNrIGdhcCBiaXRzIGZvciBiaW8gdmVjdG9ycyBhbmQgaXMgY29uc3VtZWQgYnkgY29yZSBibG9jayBsYXllciBmdW5jdGlvbnMgbGlrZSBgYmxrX3JxX2FwcGVuZF9iaW9gIGFuZCBgYmlvX3NwbGl0X2lvX2F0YC4gRnV6emluZyB0aGVzZSBmdW5jdGlvbnMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBjb3JyZWN0IGhhbmRsaW5nIG9mIGJpbyB2ZWN0b3IgZ2Fwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6MzU6MTkuOTYxOTMxMTUxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY1NjAyNTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDY1OTcwMDAzYTY3OWQ4MGZmZGJmYzU1MmJiMWQxYzZmZjQ5MzY2N1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxNzozNToxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9ibG9jay9iaW8uYyBiL2Jsb2NrL2Jpby5jXFxuaW5kZXggODk4YjJmNWVmOGM4MS4uMzNhYTQzOWMxYmFlMiAxMDA2NDRcXG4tLS0gYS9ibG9jay9iaW8uY1xcbisrKyBiL2Jsb2NrL2Jpby5jXFxuQEAgLTg1OSw2ICs4NTksNyBAQCBzdGF0aWMgaW50IF9fYmlvX2Nsb25lKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJpbyAqYmlvX3NyYywgZ2ZwX3QgZ2ZwKVxcbiBcXHRiaW8tXFx1MDAzZWJpX2lvcHJpbyA9IGJpb19zcmMtXFx1MDAzZWJpX2lvcHJpbztcXG4gXFx0YmlvLVxcdTAwM2ViaV93cml0ZV9oaW50ID0gYmlvX3NyYy1cXHUwMDNlYmlfd3JpdGVfaGludDtcXG4gXFx0YmlvLVxcdTAwM2ViaV93cml0ZV9zdHJlYW0gPSBiaW9fc3JjLVxcdTAwM2ViaV93cml0ZV9zdHJlYW07XFxuK1xcdGJpby1cXHUwMDNlYmlfYnZlY19nYXBfYml0ID0gYmlvX3NyYy1cXHUwMDNlYmlfYnZlY19nYXBfYml0O1xcbiBcXHRiaW8tXFx1MDAzZWJpX2l0ZXIgPSBiaW9fc3JjLVxcdTAwM2ViaV9pdGVyO1xcbiBcXHRiaW8tXFx1MDAzZWJpX2lvX3ZlYyA9IGJpb19zcmMtXFx1MDAzZWJpX2lvX3ZlYztcXG4gXFxuQEAgLTE5NzEsNiArMTk3Miw3IEBAIHN0cnVjdCBiaW8gKmJpb19zcGxpdChzdHJ1Y3QgYmlvICpiaW8sIGludCBzZWN0b3JzLFxcbiBcXHRcXHRiaW9faW50ZWdyaXR5X3RyaW0oc3BsaXQpO1xcbiBcXG4gXFx0YmlvX2FkdmFuY2UoYmlvLCBzcGxpdC1cXHUwMDNlYmlfaXRlci5iaV9zaXplKTtcXG4rXFx0YmlvLVxcdTAwM2ViaV9idmVjX2dhcF9iaXQgPSAwO1xcbiBcXG4gXFx0aWYgKGJpb19mbGFnZ2VkKGJpbywgQklPX1RSQUNFX0NPTVBMRVRJT04pKVxcbiBcXHRcXHRiaW9fc2V0X2ZsYWcoc3BsaXQsIEJJT19UUkFDRV9DT01QTEVUSU9OKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6MzU6MjEuMzI4MTk3MzMyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTU5NjkwMTEyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmlvX2FsbG9jX2Nsb25lXCIsXG4gICAgXCJiaW9faW5pdF9jbG9uZVwiLFxuICAgIFwiYmlvX3NwbGl0XCIsXG4gICAgXCJibGtfcnFfYXBwZW5kX2Jpb1wiLFxuICAgIFwiYmlvX3NwbGl0X2lvX2F0XCIsXG4gICAgXCJiaW9fc2VnX2dhcFwiLFxuICAgIFwiYmxrX21xX3N1Ym1pdF9iaW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBtaXNzaW5nIGluaXRpYWxpemF0aW9uIGFuZCBjb3B5aW5nIG9mIGBiaV9idmVjX2dhcF9iaXRgIGluIGBiaW9fc3BsaXRgIGFuZCBgX19iaW9fY2xvbmVgLiBUaGlzIGZpZWxkIGlzIHVzZWQgdG8gdHJhY2sgZ2FwIGJpdHMgZm9yIGJpbyB2ZWN0b3JzIGFuZCBpcyBjb25zdW1lZCBieSBjb3JlIGJsb2NrIGxheWVyIGZ1bmN0aW9ucyBsaWtlIGBibGtfcnFfYXBwZW5kX2Jpb2AgYW5kIGBiaW9fc3BsaXRfaW9fYXRgLiBGdXp6aW5nIHRoZXNlIGZ1bmN0aW9ucyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIGNvcnJlY3QgaGFuZGxpbmcgb2YgYmlvIHZlY3RvciBnYXBzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NjU5NzAwMDNhNjc5ZDgwZmZkYmZjNTUyYmIxZDFjNmZmNDkzNjY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTc6MzU6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9iaW8uYyBiL2Jsb2NrL2Jpby5jXG5pbmRleCA4OThiMmY1ZWY4YzgxLi4zM2FhNDM5YzFiYWUyIDEwMDY0NFxuLS0tIGEvYmxvY2svYmlvLmNcbisrKyBiL2Jsb2NrL2Jpby5jXG5AQCAtODU5LDYgKzg1OSw3IEBAIHN0YXRpYyBpbnQgX19iaW9fY2xvbmUoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmlvICpiaW9fc3JjLCBnZnBfdCBnZnApXG4gXHRiaW8tXHUwMDNlYmlfaW9wcmlvID0gYmlvX3NyYy1cdTAwM2ViaV9pb3ByaW87XG4gXHRiaW8tXHUwMDNlYmlfd3JpdGVfaGludCA9IGJpb19zcmMtXHUwMDNlYmlfd3JpdGVfaGludDtcbiBcdGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gPSBiaW9fc3JjLVx1MDAzZWJpX3dyaXRlX3N0cmVhbTtcbitcdGJpby1cdTAwM2ViaV9idmVjX2dhcF9iaXQgPSBiaW9fc3JjLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdDtcbiBcdGJpby1cdTAwM2ViaV9pdGVyID0gYmlvX3NyYy1cdTAwM2ViaV9pdGVyO1xuIFx0YmlvLVx1MDAzZWJpX2lvX3ZlYyA9IGJpb19zcmMtXHUwMDNlYmlfaW9fdmVjO1xuIFxuQEAgLTE5NzEsNiArMTk3Miw3IEBAIHN0cnVjdCBiaW8gKmJpb19zcGxpdChzdHJ1Y3QgYmlvICpiaW8sIGludCBzZWN0b3JzLFxuIFx0XHRiaW9faW50ZWdyaXR5X3RyaW0oc3BsaXQpO1xuIFxuIFx0YmlvX2FkdmFuY2UoYmlvLCBzcGxpdC1cdTAwM2ViaV9pdGVyLmJpX3NpemUpO1xuK1x0YmlvLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCA9IDA7XG4gXG4gXHRpZiAoYmlvX2ZsYWdnZWQoYmlvLCBCSU9fVFJBQ0VfQ09NUExFVElPTikpXG4gXHRcdGJpb19zZXRfZmxhZyhzcGxpdCwgQklPX1RSQUNFX0NPTVBMRVRJT04pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6MzU6MjEuMzI4MTk5OTEyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE3Njc4MzUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJJTyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGJsb2NrL2Jpby5jYCwgaW50ZXJlc3RpbmcuIFNwZWNpZmljYWxseSwgaXQncyBhZGRpbmcgYGJpby1cdTAwM2ViaV9idmVjX2dhcF9iaXQgPSBiaW9fc3JjLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdDtgIHdpdGhpbiB0aGUgYF9fYmlvX2Nsb25lYCBmdW5jdGlvbiBhbmQgcmVzZXR0aW5nIGl0IHRvIGAwYCBpbiBgYmlvX3NwbGl0YC4gSW1tZWRpYXRlbHksIG15IGJyYWluIHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucy4gSSBrbm93IHRob3NlIGFyZSB0d28gdmVyeSBmdW5kYW1lbnRhbCBibG9jayBsYXllciBmdW5jdGlvbnMuIGBfX2Jpb19jbG9uZWAgaXMsIHdlbGwsIGNsb25pbmcgYSBiaW8uIE1ha2VzIHNlbnNlIHRvIHBhc3MgdGhhdCBnYXAgaW5mb3JtYXRpb24gb3Zlciwgb3RoZXJ3aXNlIHdoYXQncyB0aGUgdXNlIGluIGNvcHlpbmcgdGhlIHN0cnVjdHVyZS4gQW5kIGBiaW9fc3BsaXRgPyBUaGF0J3Mgd2hlbiB3ZSdyZSBicmVha2luZyBhIGJpbyBkb3duIGludG8gc21hbGxlciBwaWVjZXMuIFNvIHRoZSBnYXAgYml0IG5lZWRzIHJlc2V0dGluZyB0aGVyZS5cblxuUmlnaHQsIHNvIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIGNoYW5nZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYGJpX2J2ZWNfZ2FwX2JpdGAuIExldCdzIGdyZXAgZm9yIHRoYXQgYW5kIHNlZSB3aGVyZSBpdCdzIHVzZWQsIGhvdyBpdCdzIGRlZmluZWQsIHdoYXQgdGhlIGNvbW1lbnRzIHNheS4gVGhhdCB3aWxsIHRlbGwgdGhlIGZ1bGwgc3RvcnkgaGVyZS4gSSBoYXZlIGEgaHVuY2gsIGJhc2VkIG9uIHRoZSBjb250ZXh0LCBidXQgbGV0J3MgbWFrZSBzdXJlIHRoYXQgaHVuY2ggaXMgYWNjdXJhdGUgYmVmb3JlIEkgc3RhcnQgbWFraW5nIGFueSBhc3N1bXB0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzOSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE3OjM1OjI2LjUwNDk4NjgzMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkzMjgyMTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJpX2J2ZWNfZ2FwX2JpdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iaW8uYz0yMTc9dm9pZCBiaW9faW5pdChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBiaW9fdmVjICp0YWJsZSxcXG4tLVxcbmJsb2NrL2Jpby5jLTIyNy1cXHRiaW8tXFx1MDAzZWJpX3N0YXR1cyA9IDA7XFxuYmxvY2svYmlvLmM6MjI4OlxcdGJpby1cXHUwMDNlYmlfYnZlY19nYXBfYml0ID0gMDtcXG5ibG9jay9iaW8uYy0yMjktXFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IDA7XFxuLS1cXG5ibG9jay9iaW8uYz04NTY9c3RhdGljIGludCBfX2Jpb19jbG9uZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW8gKmJpb19zcmMsIGdmcF90IGdmcClcXG4tLVxcbmJsb2NrL2Jpby5jLTg2MS1cXHRiaW8tXFx1MDAzZWJpX3dyaXRlX3N0cmVhbSA9IGJpb19zcmMtXFx1MDAzZWJpX3dyaXRlX3N0cmVhbTtcXG5ibG9jay9iaW8uYzo4NjI6XFx0YmlvLVxcdTAwM2ViaV9idmVjX2dhcF9iaXQgPSBiaW9fc3JjLVxcdTAwM2ViaV9idmVjX2dhcF9iaXQ7XFxuYmxvY2svYmlvLmMtODYzLVxcdGJpby1cXHUwMDNlYmlfaXRlciA9IGJpb19zcmMtXFx1MDAzZWJpX2l0ZXI7XFxuLS1cXG5ibG9jay9iaW8uYz0xOTQ3PXN0cnVjdCBiaW8gKmJpb19zcGxpdChzdHJ1Y3QgYmlvICpiaW8sIGludCBzZWN0b3JzLFxcbi0tXFxuYmxvY2svYmlvLmMtMTk3NC1cXHRiaW9fYWR2YW5jZShiaW8sIHNwbGl0LVxcdTAwM2ViaV9pdGVyLmJpX3NpemUpO1xcbmJsb2NrL2Jpby5jOjE5NzU6XFx0YmlvLVxcdTAwM2ViaV9idmVjX2dhcF9iaXQgPSAwO1xcbmJsb2NrL2Jpby5jLTE5NzYtXFxuLS1cXG5ibG9jay9ibGstbWFwLmM9NDI2PWludCBibGtfcnFfYXBwZW5kX2JpbyhzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2Jsay1tYXAuYy00NTYtXFx0cnEtXFx1MDAzZV9fZGF0YV9sZW4gPSBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZTtcXG5ibG9jay9ibGstbWFwLmM6NDU3OlxcdHJxLVxcdTAwM2VwaHlzX2dhcF9iaXQgPSBiaW8tXFx1MDAzZWJpX2J2ZWNfZ2FwX2JpdDtcXG5ibG9jay9ibGstbWFwLmMtNDU4LVxcdHJldHVybiAwO1xcbi0tXFxuYmxvY2svYmxrLW1lcmdlLmM9MzM1PWludCBiaW9fc3BsaXRfaW9fYXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXFxuLS1cXG5ibG9jay9ibGstbWVyZ2UuYy0zNzktXFx0KnNlZ3MgPSBuc2VncztcXG5ibG9jay9ibGstbWVyZ2UuYzozODA6XFx0YmlvLVxcdTAwM2ViaV9idmVjX2dhcF9iaXQgPSBmZnMoZ2Fwcyk7XFxuYmxvY2svYmxrLW1lcmdlLmMtMzgxLVxcdHJldHVybiAwO1xcbi0tXFxuYmxvY2svYmxrLW1lcmdlLmMtNDE1LVxcdGJpb19jbGVhcl9wb2xsZWQoYmlvKTtcXG5ibG9jay9ibGstbWVyZ2UuYzo0MTY6XFx0YmlvLVxcdTAwM2ViaV9idmVjX2dhcF9iaXQgPSBmZnMoZ2Fwcyk7XFxuYmxvY2svYmxrLW1lcmdlLmMtNDE3LVxcdHJldHVybiBieXRlcyBcXHUwMDNlXFx1MDAzZSBTRUNUT1JfU0hJRlQ7XFxuLS1cXG5ibG9jay9ibGstbWVyZ2UuYz03NTI9dTggYmlvX3NlZ19nYXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKnByZXYsIHN0cnVjdCBiaW8gKm5leHQsXFxuLS1cXG5ibG9jay9ibGstbWVyZ2UuYy03NTktXFxuYmxvY2svYmxrLW1lcmdlLmM6NzYwOlxcdGdhcHNfYml0ID0gbWluX25vdF96ZXJvKGdhcHNfYml0LCBwcmV2LVxcdTAwM2ViaV9idmVjX2dhcF9iaXQpO1xcbmJsb2NrL2Jsay1tZXJnZS5jOjc2MTpcXHRnYXBzX2JpdCA9IG1pbl9ub3RfemVybyhnYXBzX2JpdCwgbmV4dC1cXHUwMDNlYmlfYnZlY19nYXBfYml0KTtcXG5ibG9jay9ibGstbWVyZ2UuYy03NjItXFxuLS1cXG5ibG9jay9ibGstbXEuYz0yNjU0PXN0YXRpYyB2b2lkIGJsa19tcV9iaW9fdG9fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBiaW8gKmJpbyxcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTI2NjQtXFx0cnEtXFx1MDAzZV9fZGF0YV9sZW4gPSBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZTtcXG5ibG9jay9ibGstbXEuYzoyNjY1OlxcdHJxLVxcdTAwM2VwaHlzX2dhcF9iaXQgPSBiaW8tXFx1MDAzZWJpX2J2ZWNfZ2FwX2JpdDtcXG5ibG9jay9ibGstbXEuYy0yNjY2LVxcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaD0yMTA9c3RydWN0IGJpbyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oLTIzMC1cXHQgKi9cXG5pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oOjIzMTpcXHR1OFxcdFxcdFxcdGJpX2J2ZWNfZ2FwX2JpdDtcXG5pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oLTIzMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6MzU6MjguMDk4Mjc2MDA0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5ODYxMjY1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCdWcgRml4IGZvciBQb3RlbnRpYWwgRnV6emluZyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGFuIGlzc3VlIHdoZXJlIGBiaV9idmVjX2dhcF9iaXRgIGlzbid0IGhhbmRsZWQgY29ycmVjdGx5IGR1cmluZyBiaW8gY2xvbmluZyBhbmQgc3BsaXR0aW5nLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgYF9fYmlvX2Nsb25lYCBpc24ndCBjb3B5aW5nIHRoZSBiaXQsIGFuZCBgYmlvX3NwbGl0YCBpc24ndCByZXNldHRpbmcgaXQuIFRoaXMgc2NyZWFtcyBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXQgdG8gbWUuIEEgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUgaGVyZSBjb3VsZCBiZSBwcmV0dHkgbmFzdHkuXG5cbk15IGluaXRpYWwgdGhvdWdodHMgYXJlLCB3aGVyZSBkb2VzIHRoaXMgZnVuY3Rpb25hbGl0eSBzaXQgaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3M/IFdlbGwsIHRoZSBjb3JlIGZ1bmN0aW9ucyBhcmUgYF9fYmlvX2Nsb25lYCBhbmQgYGJpb19zcGxpdGAuIFNpbmNlIGBfX2Jpb19jbG9uZWAgaXMgc3RhdGljLCBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gaXRzIGNhbGxlcnMuIFRoYXQgbmFycm93cyB0aGUgZmllbGQgYSBiaXQuIExldCdzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBjb2RlLCBgYmlvX2Nsb25lX2Zhc3RgIGFuZCBgYmlvX2FsbG9jX2Nsb25lYCBhcmUga2V5IGNhbGxlcnMgb2YgYF9fYmlvX2Nsb25lYC4gTm93IGl0IGlzIHRpbWUgdG8gY2hlY2sgYWxsIGNhbGxlcnMgb2YgYF9fYmlvX2Nsb25lYC4gVGhlc2UgYXJlIHRoZSBhcmVhcyB0aGF0IG5lZWQgZm9jdXNlZCBmdXp6aW5nIGF0dGVudGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU3OCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNzozNTozMS43OTY4OTA4N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE2ODI1NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYmlvX2Nsb25lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jpby5jPTg1ND1FWFBPUlRfU1lNQk9MKGJpb19wdXQpO1xcbmJsb2NrL2Jpby5jLTg1NS1cXG5ibG9jay9iaW8uYzo4NTY6c3RhdGljIGludCBfX2Jpb19jbG9uZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW8gKmJpb19zcmMsIGdmcF90IGdmcClcXG5ibG9jay9iaW8uYy04NTcte1xcbi0tXFxuYmxvY2svYmlvLmM9ODk0PXN0cnVjdCBiaW8gKmJpb19hbGxvY19jbG9uZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmlvICpiaW9fc3JjLFxcbi0tXFxuYmxvY2svYmlvLmMtOTAyLVxcbmJsb2NrL2Jpby5jOjkwMzpcXHRpZiAoX19iaW9fY2xvbmUoYmlvLCBiaW9fc3JjLCBnZnApIFxcdTAwM2MgMCkge1xcbmJsb2NrL2Jpby5jLTkwNC1cXHRcXHRiaW9fcHV0KGJpbyk7XFxuLS1cXG5ibG9jay9iaW8uYz05MjE9aW50IGJpb19pbml0X2Nsb25lKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBiaW8gKmJpbyxcXG4tLVxcbmJsb2NrL2Jpby5jLTkyNi1cXHRiaW9faW5pdChiaW8sIGJkZXYsIE5VTEwsIDAsIGJpb19zcmMtXFx1MDAzZWJpX29wZik7XFxuYmxvY2svYmlvLmM6OTI3OlxcdHJldCA9IF9fYmlvX2Nsb25lKGJpbywgYmlvX3NyYywgZ2ZwKTtcXG5ibG9jay9iaW8uYy05MjgtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6MzU6MzMuNDEzNzIxMDY1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzMzQ1Njg0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2Ugc3ltYm9sczpcblxuKipEZWVwIERpdmUgaW50byBCbG9jayBJL08gQ2xvbmVzIGFuZCBTcGxpdHMqKlxuXG5SaWdodCwgbGV0J3MgemVybyBpbiBvbiB0aGVzZSBmdW5jdGlvbnM6IGBiaW9fYWxsb2NfY2xvbmVgLCBgYmlvX2luaXRfY2xvbmVgLCBhbmQgYGJpb19zcGxpdGAuIFRoZXkgc2VlbSBsaWtlIHByaW1lIHRhcmdldHMgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBCbG9jayBJL08gbGF5ZXIgaGFuZGxlcyBjbG9uaW5nIGFuZCBzcGxpdHRpbmcgb2YgSS9PIHJlcXVlc3RzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgYmlvX3NwbGl0YC4gVGhhdCdzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgYXJlIGdvaW5nIHRvIGJlLiBJdCdsbCByZXZlYWwgaG93IGFuZCB3aHkgd2UncmUgYnJlYWtpbmcgdXAgdGhlc2UgSS9PIG9wZXJhdGlvbnMsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBvcHRpbWl6YXRpb24gYW5kIHVuZGVyc3RhbmRpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgY2hhaW5zIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIyMSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE3OjM1OjM2LjU0NzE4MDE1N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDgyNjk0NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJpb19zcGxpdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDUxNSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9ibG9jay9iaW92ZWNzLnJzdD00OT1hZHZhbnRhZ2VzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9ibG9jay9iaW92ZWNzLnJzdC03NC1cXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb3ZlY3MucnN0Ojc1OiAqIFNwbGl0dGluZyBiaW9zIGlzIG5vdyBtdWNoIHNpbXBsZXIuIFRoZSBvbGQgYmlvX3NwbGl0KCkgZGlkbid0IGV2ZW4gd29yayBvblxcbkRvY3VtZW50YXRpb24vYmxvY2svYmlvdmVjcy5yc3QtNzYtICAgYmlvcyB3aXRoIG1vcmUgdGhhbiBhIHNpbmdsZSBidmVjISBOb3csIHdlIGNhbiBlZmZpY2llbnRseSBzcGxpdCBhcmJpdHJhcnlcXG4tLVxcbmJsb2NrL2Jpby5jPTE5MzE9RVhQT1JUX1NZTUJPTChiaW9fZW5kaW8pO1xcbi0tXFxuYmxvY2svYmlvLmMtMTkzMy0vKipcXG5ibG9jay9iaW8uYzoxOTM0OiAqIGJpb19zcGxpdCAtIHNwbGl0IGEgYmlvXFxuYmxvY2svYmlvLmMtMTkzNS0gKiBAYmlvOlxcdGJpbyB0byBzcGxpdFxcbi0tXFxuYmxvY2svYmlvLmMtMTk0Ni0gKi9cXG5ibG9jay9iaW8uYzoxOTQ3OnN0cnVjdCBiaW8gKmJpb19zcGxpdChzdHJ1Y3QgYmlvICpiaW8sIGludCBzZWN0b3JzLFxcbmJsb2NrL2Jpby5jLTE5NDgtXFx0XFx0ICAgICAgZ2ZwX3QgZ2ZwLCBzdHJ1Y3QgYmlvX3NldCAqYnMpXFxuLS1cXG5ibG9jay9iaW8uYy0xOTgxLX1cXG5ibG9jay9iaW8uYzoxOTgyOkVYUE9SVF9TWU1CT0woYmlvX3NwbGl0KTtcXG5ibG9jay9iaW8uYy0xOTgzLVxcbi0tXFxuYmxvY2svYmxrLW1hcC5jPTQyNj1pbnQgYmxrX3JxX2FwcGVuZF9iaW8oc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5ibG9jay9ibGstbWFwLmMtNDMzLVxcdC8qIGNoZWNrIHRoYXQgdGhlIGRhdGEgbGF5b3V0IG1hdGNoZXMgdGhlIGhhcmR3YXJlIHJlc3RyaWN0aW9ucyAqL1xcbmJsb2NrL2Jsay1tYXAuYzo0MzQ6XFx0cmV0ID0gYmlvX3NwbGl0X2lvX2F0KGJpbywgbGltLCBcXHUwMDI2bnJfc2VncywgbWF4X2J5dGVzLCAwKTtcXG5ibG9jay9ibGstbWFwLmMtNDM1LVxcdGlmIChyZXQpIHtcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jPTExOT1zdHJ1Y3QgYmlvICpiaW9fc3VibWl0X3NwbGl0X2Jpb3NldChzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGludCBzcGxpdF9zZWN0b3JzLFxcbi0tXFxuYmxvY2svYmxrLW1lcmdlLmMtMTIxLXtcXG5ibG9jay9ibGstbWVyZ2UuYzoxMjI6XFx0c3RydWN0IGJpbyAqc3BsaXQgPSBiaW9fc3BsaXQoYmlvLCBzcGxpdF9zZWN0b3JzLCBHRlBfTk9JTywgYnMpO1xcbmJsb2NrL2Jsay1tZXJnZS5jLTEyMy1cXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jPTE0Mj1zdGF0aWMgc3RydWN0IGJpbyAqYmlvX3N1Ym1pdF9zcGxpdChzdHJ1Y3QgYmlvICpiaW8sIGludCBzcGxpdF9zZWN0b3JzKVxcbi0tXFxuYmxvY2svYmxrLW1lcmdlLmMtMTUwLVxcdFxcdGJpbyA9IGJpb19zdWJtaXRfc3BsaXRfYmlvc2V0KGJpbywgc3BsaXRfc2VjdG9ycyxcXG5ibG9jay9ibGstbWVyZ2UuYzoxNTE6XFx0XFx0XFx0XFx0XFx1MDAyNmJpby1cXHUwMDNlYmlfYmRldi1cXHUwMDNlYmRfZGlzay1cXHUwMDNlYmlvX3NwbGl0KTtcXG5ibG9jay9ibGstbWVyZ2UuYy0xNTItXFx0XFx0aWYgKGJpbylcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jLTE1OC1cXG5ibG9jay9ibGstbWVyZ2UuYzoxNTk6c3RhdGljIHN0cnVjdCBiaW8gKl9fYmlvX3NwbGl0X2Rpc2NhcmQoc3RydWN0IGJpbyAqYmlvLFxcbmJsb2NrL2Jsay1tZXJnZS5jLTE2MC1cXHRcXHRjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIHVuc2lnbmVkICpuc2VncyxcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jLTE5NC1cXG5ibG9jay9ibGstbWVyZ2UuYzoxOTU6c3RydWN0IGJpbyAqYmlvX3NwbGl0X2Rpc2NhcmQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXFxuYmxvY2svYmxrLW1lcmdlLmMtMTk2LVxcdFxcdHVuc2lnbmVkICpuc2VncylcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jLTIwNC1cXG5ibG9jay9ibGstbWVyZ2UuYzoyMDU6XFx0cmV0dXJuIF9fYmlvX3NwbGl0X2Rpc2NhcmQoYmlvLCBsaW0sIG5zZWdzLCBtYXhfc2VjdG9ycyk7XFxuYmxvY2svYmxrLW1lcmdlLmMtMjA2LX1cXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jPTI4Mj1zdGF0aWMgYm9vbCBidmVjX3NwbGl0X3NlZ3MoY29uc3Qgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxcbi0tXFxuYmxvY2svYmxrLW1lcmdlLmMtMzA3LVxcbmJsb2NrL2Jsay1tZXJnZS5jOjMwODpzdGF0aWMgdW5zaWduZWQgaW50IGJpb19zcGxpdF9hbGlnbm1lbnQoc3RydWN0IGJpbyAqYmlvLFxcbmJsb2NrL2Jsay1tZXJnZS5jLTMwOS1cXHRcXHRjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXFxuLS1cXG5ibG9jay9ibGstbWVyZ2UuYz0zMTY9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYnZlY19zZWdfZ2FwKHN0cnVjdCBiaW9fdmVjICpidnBydixcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jLTMyMi0vKipcXG5ibG9jay9ibGstbWVyZ2UuYzozMjM6ICogYmlvX3NwbGl0X2lvX2F0IC0gY2hlY2sgaWYgYW5kIHdoZXJlIHRvIHNwbGl0IGEgYmlvXFxuYmxvY2svYmxrLW1lcmdlLmMtMzI0LSAqIEBiaW86ICBbaW5dIGJpbyB0byBiZSBzcGxpdFxcbi0tXFxuYmxvY2svYmxrLW1lcmdlLmMtMzM0LSAqL1xcbmJsb2NrL2Jsay1tZXJnZS5jOjMzNTppbnQgYmlvX3NwbGl0X2lvX2F0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxcbmJsb2NrL2Jsay1tZXJnZS5jLTMzNi1cXHRcXHR1bnNpZ25lZCAqc2VncywgdW5zaWduZWQgbWF4X2J5dGVzLCB1bnNpZ25lZCBsZW5fYWxpZ25fbWFzaylcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jLTQwNS1cXHQgKi9cXG5ibG9jay9ibGstbWVyZ2UuYzo0MDY6XFx0Ynl0ZXMgPSBBTElHTl9ET1dOKGJ5dGVzLCBiaW9fc3BsaXRfYWxpZ25tZW50KGJpbywgbGltKSk7XFxuYmxvY2svYmxrLW1lcmdlLmMtNDA3LVxcdGlmICghYnl0ZXMpXFxuLS1cXG5ibG9jay9ibGstbWVyZ2UuYy00MTgtfVxcbmJsb2NrL2Jsay1tZXJnZS5jOjQxOTpFWFBPUlRfU1lNQk9MX0dQTChiaW9fc3BsaXRfaW9fYXQpO1xcbmJsb2NrL2Jsay1tZXJnZS5jLTQyMC1cXG5ibG9jay9ibGstbWVyZ2UuYzo0MjE6c3RydWN0IGJpbyAqYmlvX3NwbGl0X3J3KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxcbmJsb2NrL2Jsay1tZXJnZS5jLTQyMi1cXHRcXHR1bnNpZ25lZCAqbnJfc2VncylcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jLTQyNC1cXHRyZXR1cm4gYmlvX3N1Ym1pdF9zcGxpdChiaW8sXFxuYmxvY2svYmxrLW1lcmdlLmM6NDI1OlxcdFxcdGJpb19zcGxpdF9yd19hdChiaW8sIGxpbSwgbnJfc2VncyxcXG5ibG9jay9ibGstbWVyZ2UuYy00MjYtXFx0XFx0XFx0Z2V0X21heF9pb19zaXplKGJpbywgbGltKSBcXHUwMDNjXFx1MDAzYyBTRUNUT1JfU0hJRlQpKTtcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jLTQzMS0gKlxcbmJsb2NrL2Jsay1tZXJnZS5jOjQzMjogKiBCdXQgd2Ugd2FudCB0aGUgbnJfc2VncyBjYWxjdWxhdGlvbiBwcm92aWRlZCBieSBiaW9fc3BsaXRfcndfYXQsIGFuZCBoYXZpbmdcXG5ibG9jay9ibGstbWVyZ2UuYy00MzMtICogYSBnb29kIHNhbml0eSBjaGVjayB0aGF0IHRoZSBzdWJtaXR0ZXIgYnVpbHQgdGhlIGJpbyBjb3JyZWN0bHkgaXMgbmljZSB0b1xcbi0tXFxuYmxvY2svYmxrLW1lcmdlLmMtNDM1LSAqL1xcbmJsb2NrL2Jsay1tZXJnZS5jOjQzNjpzdHJ1Y3QgYmlvICpiaW9fc3BsaXRfem9uZV9hcHBlbmQoc3RydWN0IGJpbyAqYmlvLFxcbmJsb2NrL2Jsay1tZXJnZS5jLTQzNy1cXHRcXHRjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIHVuc2lnbmVkICpucl9zZWdzKVxcbi0tXFxuYmxvY2svYmxrLW1lcmdlLmMtNDQwLVxcbmJsb2NrL2Jsay1tZXJnZS5jOjQ0MTpcXHRzcGxpdF9zZWN0b3JzID0gYmlvX3NwbGl0X3J3X2F0KGJpbywgbGltLCBucl9zZWdzLFxcbmJsb2NrL2Jsay1tZXJnZS5jLTQ0Mi1cXHRcXHRcXHRsaW0tXFx1MDAzZW1heF96b25lX2FwcGVuZF9zZWN0b3JzIFxcdTAwM2NcXHUwMDNjIFNFQ1RPUl9TSElGVCk7XFxuLS1cXG5ibG9jay9ibGstbWVyZ2UuYy00NDctXFxuYmxvY2svYmxrLW1lcmdlLmM6NDQ4OnN0cnVjdCBiaW8gKmJpb19zcGxpdF93cml0ZV96ZXJvZXMoc3RydWN0IGJpbyAqYmlvLFxcbmJsb2NrL2Jsay1tZXJnZS5jLTQ0OS1cXHRcXHRjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIHVuc2lnbmVkICpuc2VncylcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jLTQ2OC0vKipcXG5ibG9jay9ibGstbWVyZ2UuYzo0Njk6ICogYmlvX3NwbGl0X3RvX2xpbWl0cyAtIHNwbGl0IGEgYmlvIHRvIGZpdCB0aGUgcXVldWUgbGltaXRzXFxuYmxvY2svYmxrLW1lcmdlLmMtNDcwLSAqIEBiaW86ICAgICBiaW8gdG8gYmUgc3BsaXRcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jLTQ3NS0gKlxcbmJsb2NrL2Jsay1tZXJnZS5jOjQ3NjogKiBUaGUgc3BsaXQgYmlvIGlzIGFsbG9jYXRlZCBmcm9tIEBxLVxcdTAwM2ViaW9fc3BsaXQsIHdoaWNoIGlzIHByb3ZpZGVkIGJ5IHRoZVxcbmJsb2NrL2Jsay1tZXJnZS5jLTQ3Ny0gKiBibG9jayBsYXllci5cXG5ibG9jay9ibGstbWVyZ2UuYy00NzgtICovXFxuYmxvY2svYmxrLW1lcmdlLmM6NDc5OnN0cnVjdCBiaW8gKmJpb19zcGxpdF90b19saW1pdHMoc3RydWN0IGJpbyAqYmlvKVxcbmJsb2NrL2Jsay1tZXJnZS5jLTQ4MC17XFxuLS1cXG5ibG9jay9ibGstbWVyZ2UuYy00ODItXFxuYmxvY2svYmxrLW1lcmdlLmM6NDgzOlxcdHJldHVybiBfX2Jpb19zcGxpdF90b19saW1pdHMoYmlvLCBiZGV2X2xpbWl0cyhiaW8tXFx1MDAzZWJpX2JkZXYpLCBcXHUwMDI2bnJfc2Vncyk7XFxuYmxvY2svYmxrLW1lcmdlLmMtNDg0LX1cXG5ibG9jay9ibGstbWVyZ2UuYzo0ODU6RVhQT1JUX1NZTUJPTChiaW9fc3BsaXRfdG9fbGltaXRzKTtcXG5ibG9jay9ibGstbWVyZ2UuYy00ODYtXFxuLS1cXG5ibG9jay9ibGstbXEuYz0zMDkzPXZvaWQgYmxrX21xX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxcbi0tXFxuYmxvY2svYmxrLW1xLmMtMzE0NS1cXG5ibG9jay9ibGstbXEuYzozMTQ2OlxcdGJpbyA9IF9fYmlvX3NwbGl0X3RvX2xpbWl0cyhiaW8sIFxcdTAwMjZxLVxcdTAwM2VsaW1pdHMsIFxcdTAwMjZucl9zZWdzKTtcXG5ibG9jay9ibGstbXEuYy0zMTQ3LVxcdGlmICghYmlvKVxcbi0tXFxuYmxvY2svYmxrLmg9Mzc3PXNzaXplX3QgcGFydF90aW1lb3V0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKixcXG4tLVxcbmJsb2NrL2Jsay5oLTM3OS1cXG5ibG9jay9ibGsuaDozODA6c3RydWN0IGJpbyAqYmlvX3NwbGl0X2Rpc2NhcmQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXFxuYmxvY2svYmxrLmgtMzgxLVxcdFxcdHVuc2lnbmVkICpuc2Vncyk7XFxuYmxvY2svYmxrLmg6MzgyOnN0cnVjdCBiaW8gKmJpb19zcGxpdF93cml0ZV96ZXJvZXMoc3RydWN0IGJpbyAqYmlvLFxcbmJsb2NrL2Jsay5oLTM4My1cXHRcXHRjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIHVuc2lnbmVkICpuc2Vncyk7XFxuYmxvY2svYmxrLmg6Mzg0OnN0cnVjdCBiaW8gKmJpb19zcGxpdF9ydyhzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSxcXG5ibG9jay9ibGsuaC0zODUtXFx0XFx0dW5zaWduZWQgKm5yX3NlZ3MpO1xcbmJsb2NrL2Jsay5oOjM4NjpzdHJ1Y3QgYmlvICpiaW9fc3BsaXRfem9uZV9hcHBlbmQoc3RydWN0IGJpbyAqYmlvLFxcbmJsb2NrL2Jsay5oLTM4Ny1cXHRcXHRjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIHVuc2lnbmVkICpucl9zZWdzKTtcXG4tLVxcbmJsb2NrL2Jsay5oPTM5Nz1zdGF0aWMgaW5saW5lIGJvb2wgYmlvX21heV9uZWVkX3NwbGl0KHN0cnVjdCBiaW8gKmJpbyxcXG4tLVxcbmJsb2NrL2Jsay5oLTQxNi0vKipcXG5ibG9jay9ibGsuaDo0MTc6ICogX19iaW9fc3BsaXRfdG9fbGltaXRzIC0gc3BsaXQgYSBiaW8gdG8gZml0IHRoZSBxdWV1ZSBsaW1pdHNcXG5ibG9jay9ibGsuaC00MTgtICogQGJpbzogICAgIGJpbyB0byBiZSBzcGxpdFxcbi0tXFxuYmxvY2svYmxrLmgtNDI1LSAqXFxuYmxvY2svYmxrLmg6NDI2OiAqIFRoZSBzcGxpdCBiaW8gaXMgYWxsb2NhdGVkIGZyb20gQHEtXFx1MDAzZWJpb19zcGxpdCwgd2hpY2ggaXMgcHJvdmlkZWQgYnkgdGhlXFxuYmxvY2svYmxrLmgtNDI3LSAqIGJsb2NrIGxheWVyLlxcbmJsb2NrL2Jsay5oLTQyOC0gKi9cXG5ibG9jay9ibGsuaDo0Mjk6c3RhdGljIGlubGluZSBzdHJ1Y3QgYmlvICpfX2Jpb19zcGxpdF90b19saW1pdHMoc3RydWN0IGJpbyAqYmlvLFxcbmJsb2NrL2Jsay5oLTQzMC1cXHRcXHRjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIHVuc2lnbmVkIGludCAqbnJfc2VncylcXG4tLVxcbmJsb2NrL2Jsay5oLTQzNS1cXHRcXHRpZiAoYmlvX21heV9uZWVkX3NwbGl0KGJpbywgbGltKSlcXG5ibG9jay9ibGsuaDo0MzY6XFx0XFx0XFx0cmV0dXJuIGJpb19zcGxpdF9ydyhiaW8sIGxpbSwgbnJfc2Vncyk7XFxuYmxvY2svYmxrLmgtNDM3LVxcdFxcdCpucl9zZWdzID0gMTtcXG4tLVxcbmJsb2NrL2Jsay5oLTQzOS1cXHRjYXNlIFJFUV9PUF9aT05FX0FQUEVORDpcXG5ibG9jay9ibGsuaDo0NDA6XFx0XFx0cmV0dXJuIGJpb19zcGxpdF96b25lX2FwcGVuZChiaW8sIGxpbSwgbnJfc2Vncyk7XFxuYmxvY2svYmxrLmgtNDQxLVxcdGNhc2UgUkVRX09QX0RJU0NBUkQ6XFxuYmxvY2svYmxrLmgtNDQyLVxcdGNhc2UgUkVRX09QX1NFQ1VSRV9FUkFTRTpcXG5ibG9jay9ibGsuaDo0NDM6XFx0XFx0cmV0dXJuIGJpb19zcGxpdF9kaXNjYXJkKGJpbywgbGltLCBucl9zZWdzKTtcXG5ibG9jay9ibGsuaC00NDQtXFx0Y2FzZSBSRVFfT1BfV1JJVEVfWkVST0VTOlxcbmJsb2NrL2Jsay5oOjQ0NTpcXHRcXHRyZXR1cm4gYmlvX3NwbGl0X3dyaXRlX3plcm9lcyhiaW8sIGxpbSwgbnJfc2Vncyk7XFxuYmxvY2svYmxrLmgtNDQ2LVxcdGRlZmF1bHQ6XFxuLS1cXG5ibG9jay9nZW5oZC5jPTEyNzM9c3RhdGljIHZvaWQgZGlza19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmJsb2NrL2dlbmhkLmMtMTI5OS1cXG5ibG9jay9nZW5oZC5jOjEzMDA6XFx0Ymlvc2V0X2V4aXQoXFx1MDAyNmRpc2stXFx1MDAzZWJpb19zcGxpdCk7XFxuYmxvY2svZ2VuaGQuYy0xMzAxLVxcbi0tXFxuYmxvY2svZ2VuaGQuYz0xNDQ3PXN0cnVjdCBnZW5kaXNrICpfX2FsbG9jX2Rpc2tfbm9kZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IG5vZGVfaWQsXFxuLS1cXG5ibG9jay9nZW5oZC5jLTE0NTUtXFxuYmxvY2svZ2VuaGQuYzoxNDU2OlxcdGlmIChiaW9zZXRfaW5pdChcXHUwMDI2ZGlzay1cXHUwMDNlYmlvX3NwbGl0LCBCSU9fUE9PTF9TSVpFLCAwLCAwKSlcXG5ibG9jay9nZW5oZC5jLTE0NTctXFx0XFx0Z290byBvdXRfZnJlZV9kaXNrO1xcbi0tXFxuYmxvY2svZ2VuaGQuYy0xNTA2LW91dF9mcmVlX2Jpb3NldDpcXG5ibG9jay9nZW5oZC5jOjE1MDc6XFx0Ymlvc2V0X2V4aXQoXFx1MDAyNmRpc2stXFx1MDAzZWJpb19zcGxpdCk7XFxuYmxvY2svZ2VuaGQuYy0xNTA4LW91dF9mcmVlX2Rpc2s6XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZXEuYz0xNjEyPXZvaWQgZHJiZF9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlcS5jLTE2MTUtXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVxLmM6MTYxNjpcXHRiaW8gPSBiaW9fc3BsaXRfdG9fbGltaXRzKGJpbyk7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVxLmMtMTYxNy1cXHRpZiAoIWJpbylcXG4tLVxcbmRyaXZlcnMvbWQvYmNhY2hlL2JjYWNoZS5oPTI1MD1zdHJ1Y3QgYmNhY2hlX2RldmljZSB7XFxuLS1cXG5kcml2ZXJzL21kL2JjYWNoZS9iY2FjaGUuaC0yNzMtXFxuZHJpdmVycy9tZC9iY2FjaGUvYmNhY2hlLmg6Mjc0OlxcdHN0cnVjdCBiaW9fc2V0XFx0XFx0YmlvX3NwbGl0O1xcbmRyaXZlcnMvbWQvYmNhY2hlL2JjYWNoZS5oLTI3NS1cXG4tLVxcbmRyaXZlcnMvbWQvYmNhY2hlL2JjYWNoZS5oPTUxNj1zdHJ1Y3QgY2FjaGVfc2V0IHtcXG4tLVxcbmRyaXZlcnMvbWQvYmNhY2hlL2JjYWNoZS5oLTU0My1cXHRtZW1wb29sX3RcXHRcXHRiaW9fbWV0YTtcXG5kcml2ZXJzL21kL2JjYWNoZS9iY2FjaGUuaDo1NDQ6XFx0c3RydWN0IGJpb19zZXRcXHRcXHRiaW9fc3BsaXQ7XFxuZHJpdmVycy9tZC9iY2FjaGUvYmNhY2hlLmgtNTQ1LVxcbi0tXFxuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jPTE4Nz1zdGF0aWMgQ0xPU1VSRV9DQUxMQkFDSyhiY2hfZGF0YV9pbnNlcnRfc3RhcnQpXFxuLS1cXG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmMtMjA2LVxcdFxcdHN0cnVjdCBia2V5ICprO1xcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYzoyMDc6XFx0XFx0c3RydWN0IGJpb19zZXQgKnNwbGl0ID0gXFx1MDAyNm9wLVxcdTAwM2VjLVxcdTAwM2ViaW9fc3BsaXQ7XFxuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jLTIwOC1cXG4tLVxcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYz01Mjc9c3RhdGljIGludCBjYWNoZV9sb29rdXBfZm4oc3RydWN0IGJ0cmVlX29wICpvcCwgc3RydWN0IGJ0cmVlICpiLCBzdHJ1Y3QgYmtleSAqaylcXG4tLVxcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYy01NjUtXFx0XFx0XFx0XFx0ICAgICAgS0VZX09GRlNFVChrKSAtIGJpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IpLFxcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYzo1NjY6XFx0XFx0XFx0ICAgR0ZQX05PSU8sIFxcdTAwMjZzLVxcdTAwM2VkLVxcdTAwM2ViaW9fc3BsaXQpO1xcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYy01NjctXFxuLS1cXG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmM9ODkyPXN0YXRpYyBpbnQgY2FjaGVkX2Rldl9jYWNoZV9taXNzKHN0cnVjdCBidHJlZSAqYiwgc3RydWN0IHNlYXJjaCAqcyxcXG4tLVxcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYy05MDItXFx0aWYgKHMtXFx1MDAzZWNhY2hlX21pc3MgfHwgcy1cXHUwMDNlaW9wLmJ5cGFzcykge1xcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYzo5MDM6XFx0XFx0bWlzcyA9IGJpb19uZXh0X3NwbGl0KGJpbywgc2VjdG9ycywgR0ZQX05PSU8sIFxcdTAwMjZzLVxcdTAwM2VkLVxcdTAwM2ViaW9fc3BsaXQpO1xcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYy05MDQtXFx0XFx0cmV0ID0gbWlzcyA9PSBiaW8gPyBNQVBfRE9ORSA6IE1BUF9DT05USU5VRTtcXG4tLVxcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYy05MjMtXFx0bWlzcyA9IGJpb19uZXh0X3NwbGl0KGJpbywgcy1cXHUwMDNlaW5zZXJ0X2Jpb19zZWN0b3JzLCBHRlBfTk9JTyxcXG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmM6OTI0OlxcdFxcdFxcdCAgICAgIFxcdTAwMjZzLVxcdTAwM2VkLVxcdTAwM2ViaW9fc3BsaXQpO1xcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYy05MjUtXFxuLS1cXG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmMtOTMwLVxcdFxcdFxcdERJVl9ST1VORF9VUChzLVxcdTAwM2VpbnNlcnRfYmlvX3NlY3RvcnMsIFBBR0VfU0VDVE9SUyksXFxuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jOjkzMTpcXHRcXHRcXHQwLCBHRlBfTk9XQUlULCBcXHUwMDI2ZGMtXFx1MDAzZWRpc2suYmlvX3NwbGl0KTtcXG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmMtOTMyLVxcdGlmICghY2FjaGVfYmlvKVxcbi0tXFxuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jPTk4MT1zdGF0aWMgdm9pZCBjYWNoZWRfZGV2X3dyaXRlKHN0cnVjdCBjYWNoZWRfZGV2ICpkYywgc3RydWN0IHNlYXJjaCAqcylcXG4tLVxcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYy0xMDQxLVxcdFxcdFxcdFxcdFxcdFxcdCBSRVFfT1BfV1JJVEUgfCBSRVFfUFJFRkxVU0gsXFxuZHJpdmVycy9tZC9iY2FjaGUvcmVxdWVzdC5jOjEwNDI6XFx0XFx0XFx0XFx0XFx0XFx0IEdGUF9OT0lPLCBcXHUwMDI2ZGMtXFx1MDAzZWRpc2suYmlvX3NwbGl0KTtcXG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmMtMTA0My1cXHRcXHRcXHRpZiAoIWZsdXNoKSB7XFxuLS1cXG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmMtMTA1My1cXHRcXHRzLVxcdTAwM2Vpb3AuYmlvID0gYmlvX2FsbG9jX2Nsb25lKGJpby1cXHUwMDNlYmlfYmRldiwgYmlvLCBHRlBfTk9JTyxcXG5kcml2ZXJzL21kL2JjYWNoZS9yZXF1ZXN0LmM6MTA1NDpcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZkYy1cXHUwMDNlZGlzay5iaW9fc3BsaXQpO1xcbmRyaXZlcnMvbWQvYmNhY2hlL3JlcXVlc3QuYy0xMDU1LVxcdFxcdC8qIEkvTyByZXF1ZXN0IHNlbnQgdG8gYmFja2luZyBkZXZpY2UgKi9cXG4tLVxcbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmM9ODY5PXN0YXRpYyB2b2lkIGJjYWNoZV9kZXZpY2VfZnJlZShzdHJ1Y3QgYmNhY2hlX2RldmljZSAqZClcXG4tLVxcbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmMtODg4LVxcbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmM6ODg5OlxcdGJpb3NldF9leGl0KFxcdTAwMjZkLVxcdTAwM2ViaW9fc3BsaXQpO1xcbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmMtODkwLVxcdGJpb3NldF9leGl0KFxcdTAwMjZkLVxcdTAwM2ViaW9fZGV0YWNoZWQpO1xcbi0tXFxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYz04OTc9c3RhdGljIGludCBiY2FjaGVfZGV2aWNlX2luaXQoc3RydWN0IGJjYWNoZV9kZXZpY2UgKmQsIHVuc2lnbmVkIGludCBibG9ja19zaXplLFxcbi0tXFxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYy05NDgtXFxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYzo5NDk6XFx0aWYgKGJpb3NldF9pbml0KFxcdTAwMjZkLVxcdTAwM2ViaW9fc3BsaXQsIDQsIG9mZnNldG9mKHN0cnVjdCBiYmlvLCBiaW8pLFxcbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmMtOTUwLVxcdFxcdFxcdEJJT1NFVF9ORUVEX0JWRUNTfEJJT1NFVF9ORUVEX1JFU0NVRVIpKVxcbi0tXFxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYy05ODctb3V0X2Jpb3NldF9zcGxpdF9leGl0OlxcbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmM6OTg4OlxcdGJpb3NldF9leGl0KFxcdTAwMjZkLVxcdTAwM2ViaW9fc3BsaXQpO1xcbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmMtOTg5LW91dF9pZGFfcmVtb3ZlOlxcbi0tXFxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYz0xNjgxPXN0YXRpYyBDTE9TVVJFX0NBTExCQUNLKGNhY2hlX3NldF9mcmVlKVxcbi0tXFxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYy0xNzA1LVxcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKGMtXFx1MDAzZW1vdmluZ19nY193cSk7XFxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYzoxNzA2OlxcdGJpb3NldF9leGl0KFxcdTAwMjZjLVxcdTAwM2ViaW9fc3BsaXQpO1xcbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmMtMTcwNy1cXHRtZW1wb29sX2V4aXQoXFx1MDAyNmMtXFx1MDAzZWZpbGxfaXRlcik7XFxuLS1cXG5kcml2ZXJzL21kL2JjYWNoZS9zdXBlci5jPTE4NzA9c3RydWN0IGNhY2hlX3NldCAqYmNoX2NhY2hlX3NldF9hbGxvYyhzdHJ1Y3QgY2FjaGVfc2IgKnNiKVxcbi0tXFxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYy0xOTQ4LVxcbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmM6MTk0OTpcXHRpZiAoYmlvc2V0X2luaXQoXFx1MDAyNmMtXFx1MDAzZWJpb19zcGxpdCwgNCwgb2Zmc2V0b2Yoc3RydWN0IGJiaW8sIGJpbyksXFxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYy0xOTUwLVxcdFxcdFxcdEJJT1NFVF9ORUVEX1JFU0NVRVIpKVxcbi0tXFxuZHJpdmVycy9tZC9kbS5jPTEwMDE9c3RhdGljIHZvaWQgZG1fd3FfcmVxdWV1ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbWQvZG0uYy0xMDE2LVxcbmRyaXZlcnMvbWQvZG0uYzoxMDE3OlxcdFxcdGRtX2lvX3Jld2luZChpbywgXFx1MDAyNm1kLVxcdTAwM2VkaXNrLVxcdTAwM2ViaW9fc3BsaXQpO1xcbmRyaXZlcnMvbWQvZG0uYy0xMDE4LVxcbi0tXFxuZHJpdmVycy9tZC9kbS5jPTExNjE9c3RhdGljIHNlY3Rvcl90IF9fbWF4X2lvX2xlbihzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgc2VjdG9yX3Qgc2VjdG9yLFxcbi0tXFxuZHJpdmVycy9tZC9kbS5jLTExNzEtXFx0ICogICBleHBsYWlucyB3aHkgc3RhY2tlZCBjaHVua19zZWN0b3JzIGJhc2VkIHNwbGl0dGluZyB2aWFcXG5kcml2ZXJzL21kL2RtLmM6MTE3MjpcXHQgKiAgIGJpb19zcGxpdF90b19saW1pdHMoKSBpc24ndCBwb3NzaWJsZSBoZXJlLlxcbmRyaXZlcnMvbWQvZG0uYy0xMTczLVxcdCAqL1xcbi0tXFxuZHJpdmVycy9tZC9kbS5jPTE5NTY9c3RhdGljIHZvaWQgZG1fc3BsaXRfYW5kX3Byb2Nlc3NfYmlvKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCxcXG4tLVxcbmRyaXZlcnMvbWQvZG0uYy0xOTcyLVxcdFxcdC8qXFxuZHJpdmVycy9tZC9kbS5jOjE5NzM6XFx0XFx0ICogVXNlIGJpb19zcGxpdF90b19saW1pdHMoKSBmb3IgYWJub3JtYWwgSU8gKGUuZy4gZGlzY2FyZCwgZXRjKVxcbmRyaXZlcnMvbWQvZG0uYy0xOTc0LVxcdFxcdCAqIG90aGVyd2lzZSBhc3NvY2lhdGVkIHF1ZXVlX2xpbWl0cyB3b24ndCBiZSBpbXBvc2VkLlxcbi0tXFxuZHJpdmVycy9tZC9kbS5jLTE5NzgtXFx0XFx0ICovXFxuZHJpdmVycy9tZC9kbS5jOjE5Nzk6XFx0XFx0YmlvID0gYmlvX3NwbGl0X3RvX2xpbWl0cyhiaW8pO1xcbmRyaXZlcnMvbWQvZG0uYy0xOTgwLVxcdFxcdGlmICghYmlvKVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTQyOT1zdGF0aWMgdm9pZCBtZF9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy00NDMtXFxuZHJpdmVycy9tZC9tZC5jOjQ0NDpcXHRiaW8gPSBiaW9fc3BsaXRfdG9fbGltaXRzKGJpbyk7XFxuZHJpdmVycy9tZC9tZC5jLTQ0NS1cXHRpZiAoIWJpbylcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz05MzkzPUVYUE9SVF9TWU1CT0xfR1BMKG1kX3N1Ym1pdF9kaXNjYXJkX2Jpbyk7XFxuZHJpdmVycy9tZC9tZC5jLTkzOTQtXFxuZHJpdmVycy9tZC9tZC5jOjkzOTU6c3RydWN0IGJpbyAqbWRkZXZfYmlvX3NwbGl0X2F0X3Jlc2hhcGVfb2Zmc2V0KHN0cnVjdCBtZGRldiAqbWRkZXYsXFxuZHJpdmVycy9tZC9tZC5jLTkzOTYtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJpbyAqYmlvLFxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTk0MzEtfVxcbmRyaXZlcnMvbWQvbWQuYzo5NDMyOkVYUE9SVF9TWU1CT0xfR1BMKG1kZGV2X2Jpb19zcGxpdF9hdF9yZXNoYXBlX29mZnNldCk7XFxuZHJpdmVycy9tZC9tZC5jLTk0MzMtXFxuLS1cXG5kcml2ZXJzL21kL21kLmg9OTI1PXZvaWQgbWRfc3VibWl0X2Rpc2NhcmRfYmlvKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxcbmRyaXZlcnMvbWQvbWQuaC05MjYtXFx0XFx0XFx0c3RydWN0IGJpbyAqYmlvLCBzZWN0b3JfdCBzdGFydCwgc2VjdG9yX3Qgc2l6ZSk7XFxuZHJpdmVycy9tZC9tZC5oOjkyNzpzdHJ1Y3QgYmlvICptZGRldl9iaW9fc3BsaXRfYXRfcmVzaGFwZV9vZmZzZXQoc3RydWN0IG1kZGV2ICptZGRldixcXG5kcml2ZXJzL21kL21kLmgtOTI4LVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBiaW8gKmJpbyxcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYz0xMzIwPXN0YXRpYyB2b2lkIHJhaWQxX3JlYWRfcmVxdWVzdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgYmlvICpiaW8sXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmMtMTM5MC1cXHRcXHRiaW8gPSBiaW9fc3VibWl0X3NwbGl0X2Jpb3NldChiaW8sIG1heF9zZWN0b3JzLFxcbmRyaXZlcnMvbWQvcmFpZDEuYzoxMzkxOlxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZjb25mLVxcdTAwM2ViaW9fc3BsaXQpO1xcbmRyaXZlcnMvbWQvcmFpZDEuYy0xMzkyLVxcdFxcdGlmICghYmlvKSB7XFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmM9MTQ3OT1zdGF0aWMgYm9vbCByYWlkMV93cml0ZV9yZXF1ZXN0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKmJpbyxcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0xNTg3LVxcdFxcdGJpbyA9IGJpb19zdWJtaXRfc3BsaXRfYmlvc2V0KGJpbywgbWF4X3NlY3RvcnMsXFxuZHJpdmVycy9tZC9yYWlkMS5jOjE1ODg6XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNmNvbmYtXFx1MDAzZWJpb19zcGxpdCk7XFxuZHJpdmVycy9tZC9yYWlkMS5jLTE1ODktXFx0XFx0aWYgKCFiaW8pXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmM9MzA0NT1zdGF0aWMgc3RydWN0IHIxY29uZiAqc2V0dXBfY29uZihzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS5jLTMwODgtXFxuZHJpdmVycy9tZC9yYWlkMS5jOjMwODk6XFx0ZXJyID0gYmlvc2V0X2luaXQoXFx1MDAyNmNvbmYtXFx1MDAzZWJpb19zcGxpdCwgQklPX1BPT0xfU0laRSwgMCwgMCk7XFxuZHJpdmVycy9tZC9yYWlkMS5jLTMwOTAtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEuYy0zMTYwLVxcdFxcdGtmcmVlKGNvbmYtXFx1MDAzZWJhcnJpZXIpO1xcbmRyaXZlcnMvbWQvcmFpZDEuYzozMTYxOlxcdFxcdGJpb3NldF9leGl0KFxcdTAwMjZjb25mLVxcdTAwM2ViaW9fc3BsaXQpO1xcbmRyaXZlcnMvbWQvcmFpZDEuYy0zMTYyLVxcdFxcdGtmcmVlKGNvbmYpO1xcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS5jPTMyNjc9c3RhdGljIHZvaWQgcmFpZDFfZnJlZShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCB2b2lkICpwcml2KVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS5jLTMyNzctXFx0a2ZyZWUoY29uZi1cXHUwMDNlYmFycmllcik7XFxuZHJpdmVycy9tZC9yYWlkMS5jOjMyNzg6XFx0Ymlvc2V0X2V4aXQoXFx1MDAyNmNvbmYtXFx1MDAzZWJpb19zcGxpdCk7XFxuZHJpdmVycy9tZC9yYWlkMS5jLTMyNzktXFx0a2ZyZWUoY29uZik7XFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmg9NTI9c3RydWN0IHIxY29uZiB7XFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmgtOTgtXFxuZHJpdmVycy9tZC9yYWlkMS5oOjk5OlxcdHN0cnVjdCBiaW9fc2V0XFx0XFx0YmlvX3NwbGl0O1xcbmRyaXZlcnMvbWQvcmFpZDEuaC0xMDAtXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLmg9MTYzPWVudW0gcjFiaW9fc3RhdGUge1xcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS5oLTE3Ni0gKlxcbmRyaXZlcnMvbWQvcmFpZDEuaDoxNzc6ICogQW5kIGZvciBiaW9fc3BsaXQgZXJyb3JzLCByZWNvcmQgdGhhdCBiaV9lbmRfaW8gd2FzIGNhbGxlZFxcbmRyaXZlcnMvbWQvcmFpZDEuaC0xNzgtICogd2l0aCB0aGlzIGZsYWcuLi5cXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmM9MTE0ND1zdGF0aWMgdm9pZCByYWlkMTBfcmVhZF9yZXF1ZXN0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKmJpbyxcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMTIwOS1cXHRcXHRiaW8gPSBiaW9fc3VibWl0X3NwbGl0X2Jpb3NldChiaW8sIG1heF9zZWN0b3JzLFxcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MTIxMDpcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2Y29uZi1cXHUwMDNlYmlvX3NwbGl0KTtcXG5kcml2ZXJzL21kL3JhaWQxMC5jLTEyMTEtXFx0XFx0d2FpdF9iYXJyaWVyKGNvbmYpO1xcbi0tXFxuZHJpdmVycy9tZC9yYWlkMTAuYz0xMzQzPXN0YXRpYyBib29sIHJhaWQxMF93cml0ZV9yZXF1ZXN0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKmJpbyxcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMTQ2MC1cXHRcXHRiaW8gPSBiaW9fc3VibWl0X3NwbGl0X2Jpb3NldChiaW8sIHIxMF9iaW8tXFx1MDAzZXNlY3RvcnMsXFxuZHJpdmVycy9tZC9yYWlkMTAuYzoxNDYxOlxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZjb25mLVxcdTAwM2ViaW9fc3BsaXQpO1xcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMTQ2Mi1cXHRcXHRpZiAoIWJpbykge1xcbi0tXFxuZHJpdmVycy9tZC9yYWlkMTAuYz0xNTgyPXN0YXRpYyBpbnQgcmFpZDEwX2hhbmRsZV9kaXNjYXJkKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMTY0Mi1cXHRcXHRzcGxpdF9zaXplID0gc3RyaXBlX3NpemUgLSByZW1haW5kZXI7XFxuZHJpdmVycy9tZC9yYWlkMTAuYzoxNjQzOlxcdFxcdHNwbGl0ID0gYmlvX3NwbGl0KGJpbywgc3BsaXRfc2l6ZSwgR0ZQX05PSU8sIFxcdTAwMjZjb25mLVxcdTAwM2ViaW9fc3BsaXQpO1xcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMTY0NC1cXHRcXHRpZiAoSVNfRVJSKHNwbGl0KSkge1xcbi0tXFxuZHJpdmVycy9tZC9yYWlkMTAuYy0xNjYxLVxcdFxcdHNwbGl0X3NpemUgPSBiaW9fc2VjdG9ycyhiaW8pIC0gcmVtYWluZGVyO1xcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MTY2MjpcXHRcXHRzcGxpdCA9IGJpb19zcGxpdChiaW8sIHNwbGl0X3NpemUsIEdGUF9OT0lPLCBcXHUwMDI2Y29uZi1cXHUwMDNlYmlvX3NwbGl0KTtcXG5kcml2ZXJzL21kL3JhaWQxMC5jLTE2NjMtXFx0XFx0aWYgKElTX0VSUihzcGxpdCkpIHtcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmM9MTg0Nz1zdGF0aWMgYm9vbCByYWlkMTBfbWFrZV9yZXF1ZXN0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMTg3Ny1cXG5kcml2ZXJzL21kL3JhaWQxMC5jOjE4Nzg6XFx0YmlvID0gbWRkZXZfYmlvX3NwbGl0X2F0X3Jlc2hhcGVfb2Zmc2V0KG1kZGV2LCBiaW8sIFxcdTAwMjZzZWN0b3JzLFxcbmRyaXZlcnMvbWQvcmFpZDEwLmM6MTg3OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2Y29uZi1cXHUwMDNlYmlvX3NwbGl0KTtcXG5kcml2ZXJzL21kL3JhaWQxMC5jLTE4ODAtXFx0aWYgKCFiaW8pIHtcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmM9MzgxND1zdGF0aWMgdm9pZCByYWlkMTBfZnJlZV9jb25mKHN0cnVjdCByMTBjb25mICpjb25mKVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMTAuYy0zODIzLVxcdHNhZmVfcHV0X3BhZ2UoY29uZi1cXHUwMDNldG1wcGFnZSk7XFxuZHJpdmVycy9tZC9yYWlkMTAuYzozODI0OlxcdGJpb3NldF9leGl0KFxcdTAwMjZjb25mLVxcdTAwM2ViaW9fc3BsaXQpO1xcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMzgyNS1cXHRrZnJlZShjb25mKTtcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmM9MzgyOD1zdGF0aWMgc3RydWN0IHIxMGNvbmYgKnNldHVwX2NvbmYoc3RydWN0IG1kZGV2ICptZGRldilcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmMtMzg2OS1cXG5kcml2ZXJzL21kL3JhaWQxMC5jOjM4NzA6XFx0ZXJyID0gYmlvc2V0X2luaXQoXFx1MDAyNmNvbmYtXFx1MDAzZWJpb19zcGxpdCwgQklPX1BPT0xfU0laRSwgMCwgMCk7XFxuZHJpdmVycy9tZC9yYWlkMTAuYy0zODcxLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxMC5oPTIzPXN0cnVjdCByMTBjb25mIHtcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDEwLmgtOTItXFx0c3RydWN0IHBhZ2VcXHRcXHQqdG1wcGFnZTtcXG5kcml2ZXJzL21kL3JhaWQxMC5oOjkzOlxcdHN0cnVjdCBiaW9fc2V0XFx0XFx0YmlvX3NwbGl0O1xcbmRyaXZlcnMvbWQvcmFpZDEwLmgtOTQtXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxMC5oPTE1ND1lbnVtIHIxMGJpb19zdGF0ZSB7XFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxMC5oLTE2Mi1cXHRSMTBCSU9fUmVhZEVycm9yLFxcbmRyaXZlcnMvbWQvcmFpZDEwLmg6MTYzOi8qIEZvciBiaW9fc3BsaXQgZXJyb3JzLCByZWNvcmQgdGhhdCBiaV9lbmRfaW8gd2FzIGNhbGxlZC4gKi9cXG5kcml2ZXJzL21kL3JhaWQxMC5oLTE2NC1cXHRSMTBCSU9fUmV0dXJuZWQsXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQ1LmM9NTU4Nz1zdGF0aWMgc3RydWN0IGJpbyAqY2h1bmtfYWxpZ25lZF9yZWFkKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKnJhaWRfYmlvKVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkNS5jLTU1OTYtXFx0XFx0cmFpZF9iaW8gPSBiaW9fc3VibWl0X3NwbGl0X2Jpb3NldChyYWlkX2Jpbywgc2VjdG9ycyxcXG5kcml2ZXJzL21kL3JhaWQ1LmM6NTU5NzpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2Y29uZi1cXHUwMDNlYmlvX3NwbGl0KTtcXG5kcml2ZXJzL21kL3JhaWQ1LmMtNTU5OC1cXHRcXHRpZiAoIXJhaWRfYmlvKVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkNS5jPTYyMTg9c3RhdGljIGJvb2wgcmFpZDVfbWFrZV9yZXF1ZXN0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKiBiaSlcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDUuYy02MjYyLVxcdGZyb250X2JpbyA9IGJpO1xcbmRyaXZlcnMvbWQvcmFpZDUuYzo2MjYzOlxcdGJpID0gbWRkZXZfYmlvX3NwbGl0X2F0X3Jlc2hhcGVfb2Zmc2V0KG1kZGV2LCBiaSwgTlVMTCxcXG5kcml2ZXJzL21kL3JhaWQ1LmM6NjI2NDpcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmNvbmYtXFx1MDAzZWJpb19zcGxpdCk7XFxuZHJpdmVycy9tZC9yYWlkNS5jLTYyNjUtXFx0aWYgKCFiaSkge1xcbi0tXFxuZHJpdmVycy9tZC9yYWlkNS5jPTc1NDU9c3RhdGljIHZvaWQgZnJlZV9jb25mKHN0cnVjdCByNWNvbmYgKmNvbmYpXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQ1LmMtNzU1OC1cXHRrZnJlZShjb25mLVxcdTAwM2VkaXNrcyk7XFxuZHJpdmVycy9tZC9yYWlkNS5jOjc1NTk6XFx0Ymlvc2V0X2V4aXQoXFx1MDAyNmNvbmYtXFx1MDAzZWJpb19zcGxpdCk7XFxuZHJpdmVycy9tZC9yYWlkNS5jLTc1NjAtXFx0a2ZyZWUoY29uZi1cXHUwMDNlc3RyaXBlX2hhc2h0YmwpO1xcbi0tXFxuZHJpdmVycy9tZC9yYWlkNS5jPTc2MzM9c3RhdGljIHN0cnVjdCByNWNvbmYgKnNldHVwX2NvbmYoc3RydWN0IG1kZGV2ICptZGRldilcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDUuYy03NzQyLVxcbmRyaXZlcnMvbWQvcmFpZDUuYzo3NzQzOlxcdHJldCA9IGJpb3NldF9pbml0KFxcdTAwMjZjb25mLVxcdTAwM2ViaW9fc3BsaXQsIEJJT19QT09MX1NJWkUsIDAsIDApO1xcbmRyaXZlcnMvbWQvcmFpZDUuYy03NzQ0LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL21kL3JhaWQ1Lmg9NTcwPXN0cnVjdCByNWNvbmYge1xcbi0tXFxuZHJpdmVycy9tZC9yYWlkNS5oLTY3MS1cXHRzdHJ1Y3QgZGlza19pbmZvXFx0KmRpc2tzO1xcbmRyaXZlcnMvbWQvcmFpZDUuaDo2NzI6XFx0c3RydWN0IGJpb19zZXRcXHRcXHRiaW9fc3BsaXQ7XFxuZHJpdmVycy9tZC9yYWlkNS5oLTY3My1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jPTUzMz1zdGF0aWMgdm9pZCBudm1lX25zX2hlYWRfc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYy01NDEtXFx0ICogVGhlIG5hbWVzcGFjZSBtaWdodCBiZSBnb2luZyBhd2F5IGFuZCB0aGUgYmlvIG1pZ2h0IGJlIG1vdmVkIHRvIGFcXG5kcml2ZXJzL252bWUvaG9zdC9tdWx0aXBhdGguYzo1NDI6XFx0ICogZGlmZmVyZW50IHF1ZXVlIHZpYSBibGtfc3RlYWxfYmlvcygpLCBzbyB3ZSBuZWVkIHRvIHVzZSB0aGUgYmlvX3NwbGl0XFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtNTQzLVxcdCAqIHBvb2wgZnJvbSB0aGUgb3JpZ2luYWwgcXVldWUgdG8gYWxsb2NhdGUgdGhlIGJ2ZWNzIGZyb20uXFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtNTQ0LVxcdCAqL1xcbmRyaXZlcnMvbnZtZS9ob3N0L211bHRpcGF0aC5jOjU0NTpcXHRiaW8gPSBiaW9fc3BsaXRfdG9fbGltaXRzKGJpbyk7XFxuZHJpdmVycy9udm1lL2hvc3QvbXVsdGlwYXRoLmMtNTQ2LVxcdGlmICghYmlvKVxcbi0tXFxuZnMvYnRyZnMvYmlvLmM9ODA9c3RhdGljIHN0cnVjdCBidHJmc19iaW8gKmJ0cmZzX3NwbGl0X2JpbyhzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbyxcXG4tLVxcbmZzL2J0cmZzL2Jpby5jLTg2LVxcbmZzL2J0cmZzL2Jpby5jOjg3OlxcdGJpbyA9IGJpb19zcGxpdChcXHUwMDI2b3JpZ19iYmlvLVxcdTAwM2ViaW8sIG1hcF9sZW5ndGggXFx1MDAzZVxcdTAwM2UgU0VDVE9SX1NISUZULCBHRlBfTk9GUyxcXG5mcy9idHJmcy9iaW8uYy04OC1cXHRcXHRcXHRcXHUwMDI2YnRyZnNfY2xvbmVfYmlvc2V0KTtcXG4tLVxcbmZzL2J0cmZzL2Jpby5jPTczND1zdGF0aWMgdTY0IGJ0cmZzX2FwcGVuZF9tYXBfbGVuZ3RoKHN0cnVjdCBidHJmc19iaW8gKmJiaW8sIHU2NCBtYXBfbGVuZ3RoKVxcbi0tXFxuZnMvYnRyZnMvYmlvLmMtNzQwLVxcdG1hcF9sZW5ndGggPSBtaW4obWFwX2xlbmd0aCwgZnNfaW5mby1cXHUwMDNlbWF4X3pvbmVfYXBwZW5kX3NpemUpO1xcbmZzL2J0cmZzL2Jpby5jOjc0MTpcXHRzZWN0b3Jfb2Zmc2V0ID0gYmlvX3NwbGl0X3J3X2F0KFxcdTAwMjZiYmlvLVxcdTAwM2ViaW8sIFxcdTAwMjZmc19pbmZvLVxcdTAwM2VsaW1pdHMsXFxuZnMvYnRyZnMvYmlvLmMtNzQyLVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZucl9zZWdzLCBtYXBfbGVuZ3RoKTtcXG4tLVxcbmZzL2J0cmZzL2Jpby5jLTc0NC1cXHRcXHQvKlxcbmZzL2J0cmZzL2Jpby5jOjc0NTpcXHRcXHQgKiBiaW9fc3BsaXRfcndfYXQoKSBjb3VsZCBzcGxpdCBhdCBhIHNpemUgc21hbGxlciB0aGFuIG91clxcbmZzL2J0cmZzL2Jpby5jLTc0Ni1cXHRcXHQgKiBzZWN0b3JzaXplIGFuZCB0aHVzIGNhdXNlIHVuYWxpZ25lZCBJL09zLiAgRml4IHRoYXQgYnlcXG4tLVxcbmZzL2lvbWFwL2lvZW5kLmM9NDYyPXN0cnVjdCBpb21hcF9pb2VuZCAqaW9tYXBfc3BsaXRfaW9lbmQoc3RydWN0IGlvbWFwX2lvZW5kICppb2VuZCxcXG4tLVxcbmZzL2lvbWFwL2lvZW5kLmMtNDc2LVxcbmZzL2lvbWFwL2lvZW5kLmM6NDc3OlxcdFxcdHNlY3Rvcl9vZmZzZXQgPSBiaW9fc3BsaXRfcndfYXQoYmlvLCBsaW0sIFxcdTAwMjZucl9zZWdzLCBtYXhfbGVuKTtcXG5mcy9pb21hcC9pb2VuZC5jLTQ3OC1cXHRcXHRpZiAodW5saWtlbHkoc2VjdG9yX29mZnNldCBcXHUwMDNjIDApKVxcbi0tXFxuZnMvaW9tYXAvaW9lbmQuYy00OTEtXFxuZnMvaW9tYXAvaW9lbmQuYzo0OTI6XFx0c3BsaXQgPSBiaW9fc3BsaXQoYmlvLCBzZWN0b3Jfb2Zmc2V0LCBHRlBfTk9GUywgXFx1MDAyNmlvbWFwX2lvZW5kX2Jpb3NldCk7XFxuZnMvaW9tYXAvaW9lbmQuYy00OTMtXFx0aWYgKElTX0VSUihzcGxpdCkpXFxuLS1cXG5mcy94ZnMveGZzX2J1Zi5jPTEyNjU9eGZzX2J1Zl9zdWJtaXRfYmlvKFxcbi0tXFxuZnMveGZzL3hmc19idWYuYy0xMjkxLVxcbmZzL3hmcy94ZnNfYnVmLmM6MTI5MjpcXHRcXHRzcGxpdCA9IGJpb19zcGxpdChiaW8sIGJwLVxcdTAwM2ViX21hcHNbbWFwXS5ibV9sZW4sIEdGUF9OT0ZTLFxcbmZzL3hmcy94ZnNfYnVmLmMtMTI5My1cXHRcXHRcXHRcXHRcXHUwMDI2ZnNfYmlvX3NldCk7XFxuLS1cXG5mcy94ZnMveGZzX2xvZy5jPTE1NDI9eGxvZ193cml0ZV9pY2xvZyhcXG4tLVxcbmZzL3hmcy94ZnNfbG9nLmMtMTYxOS1cXG5mcy94ZnMveGZzX2xvZy5jOjE2MjA6XFx0XFx0c3BsaXQgPSBiaW9fc3BsaXQoXFx1MDAyNmljbG9nLVxcdTAwM2VpY19iaW8sIGxvZy1cXHUwMDNlbF9sb2dCQnNpemUgLSBibm8sXFxuZnMveGZzL3hmc19sb2cuYy0xNjIxLVxcdFxcdFxcdFxcdCAgR0ZQX05PSU8sIFxcdTAwMjZmc19iaW9fc2V0KTtcXG4tLVxcbmZzL3hmcy94ZnNfem9uZV9nYy5jPTc4OD14ZnNfem9uZV9nY19zcGxpdF93cml0ZShcXG4tLVxcbmZzL3hmcy94ZnNfem9uZV9nYy5jLTgwMi1cXG5mcy94ZnMveGZzX3pvbmVfZ2MuYzo4MDM6XFx0c3BsaXRfc2VjdG9ycyA9IGJpb19zcGxpdF9yd19hdChcXHUwMDI2Y2h1bmstXFx1MDAzZWJpbywgbGltLCBcXHUwMDI2bnNlZ3MsXFxuZnMveGZzL3hmc196b25lX2djLmMtODA0LVxcdFxcdFxcdGxpbS1cXHUwMDNlbWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMgXFx1MDAzY1xcdTAwM2MgU0VDVE9SX1NISUZUKTtcXG4tLVxcbmZzL3hmcy94ZnNfem9uZV9nYy5jLTgxMi1cXG5mcy94ZnMveGZzX3pvbmVfZ2MuYzo4MTM6XFx0c3BsaXQgPSBiaW9fc3BsaXQoXFx1MDAyNmNodW5rLVxcdTAwM2ViaW8sIHNwbGl0X3NlY3RvcnMsIEdGUF9OT0ZTLCBcXHUwMDI2ZGF0YS1cXHUwMDNlYmlvX3NldCk7XFxuZnMveGZzL3hmc196b25lX2djLmMtODE0LVxcdHNwbGl0X2NodW5rID0gY29udGFpbmVyX29mKHNwbGl0LCBzdHJ1Y3QgeGZzX2djX2JpbywgYmlvKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYmlvLmg9MzE2PXZvaWQgYmlvX3RyaW0oc3RydWN0IGJpbyAqYmlvLCBzZWN0b3JfdCBvZmZzZXQsIHNlY3Rvcl90IHNpemUpO1xcbmluY2x1ZGUvbGludXgvYmlvLmg6MzE3OmV4dGVybiBzdHJ1Y3QgYmlvICpiaW9fc3BsaXQoc3RydWN0IGJpbyAqYmlvLCBpbnQgc2VjdG9ycyxcXG5pbmNsdWRlL2xpbnV4L2Jpby5oLTMxOC1cXHRcXHRcXHQgICAgIGdmcF90IGdmcCwgc3RydWN0IGJpb19zZXQgKmJzKTtcXG5pbmNsdWRlL2xpbnV4L2Jpby5oOjMxOTppbnQgYmlvX3NwbGl0X2lvX2F0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxcbmluY2x1ZGUvbGludXgvYmlvLmgtMzIwLVxcdFxcdHVuc2lnbmVkICpzZWdzLCB1bnNpZ25lZCBtYXhfYnl0ZXMsIHVuc2lnbmVkIGxlbl9hbGlnbik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jpby5oPTMzND1zdGF0aWMgaW5saW5lIHN0cnVjdCBiaW8gKmJpb19uZXh0X3NwbGl0KHN0cnVjdCBiaW8gKmJpbywgaW50IHNlY3RvcnMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jpby5oLTMzOS1cXG5pbmNsdWRlL2xpbnV4L2Jpby5oOjM0MDpcXHRyZXR1cm4gYmlvX3NwbGl0KGJpbywgc2VjdG9ycywgZ2ZwLCBicyk7XFxuaW5jbHVkZS9saW51eC9iaW8uaC0zNDEtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaD0yMTA9c3RydWN0IGJpbyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oLTIyNC1cXHQgKiBiZXR3ZWVuIGFsbCBiaV9pb192ZWNzLiBUaGlzIGZpZWxkIGlzIGluaXRpYWxpemVkIG9ubHkgYWZ0ZXIgdGhlIGJpb1xcbmluY2x1ZGUvbGludXgvYmxrX3R5cGVzLmg6MjI1OlxcdCAqIGlzIHNwbGl0IHRvIHRoZSBoYXJkd2FyZSBsaW1pdHMgKHNlZSBiaW9fc3BsaXRfaW9fYXQoKSkuIFRoZSB2YWx1ZVxcbmluY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgtMjI2LVxcdCAqIG1heSBiZSB1c2VkIHRvIGNvbnNpZGVyIERNQSBvcHRpbWl6YXRpb24gd2hlbiBwZXJmb3JtaW5nIHRoYXRcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg9MTQ2PXN0cnVjdCBnZW5kaXNrIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTY2LVxcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTY3OlxcdHN0cnVjdCBiaW9fc2V0IGJpb19zcGxpdDtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6MzU6MzguMDI5ODc4ODRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjcxMDMyMzM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBCbG9jayBMYXllcjogQSBGb2N1c2VkIEFwcHJvYWNoKipcblxuT2theSwgc28gYGJpb19zcGxpdGAgaXMgYSBjb21tb25seSB1c2VkIGZ1bmN0aW9uIGluIHRoZSBibG9jayBsYXllciwgYW5kIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGFuIGlzc3VlIHdpdGggYGJpX2J2ZWNfZ2FwX2JpdGAgd2l0aGluIGBfX2Jpb19jbG9uZWAgYW5kLCBpbXBvcnRhbnRseSwgYGJpb19zcGxpdGAgaXRzZWxmLiBUaGlzIGBiaV9idmVjX2dhcF9iaXRgIHNlZW1zIHRvIGJlIGludm9sdmVkIGluIHRyYWNraW5nIGdhcCBiaXRzIGZvciBiaW8gdmVjdG9ycywgYW5kIGl0J3MgdXNlZCBhY3Jvc3Mgc2V2ZXJhbCBrZXkgZnVuY3Rpb25zOiBgYmxrX3JxX2FwcGVuZF9iaW9gLCBgYmlvX3NwbGl0X2lvX2F0YCwgYGJpb19zZWdfZ2FwYCwgYW5kIGBibGtfbXFfYmlvX3RvX3JlcXVlc3RgLiBHaXZlbiBpdHMgd2lkZXNwcmVhZCB1c2UgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGZpeCwgdGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy5cblxuTXkgaW5pdGlhbCBmb2N1cyBzaG91bGQgYmUgb24gZnV6emluZyB0aGUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gYmlvIHNwbGl0dGluZyBhbmQgY2xvbmluZzogYGJpb19hbGxvY19jbG9uZWAsIGBiaW9faW5pdF9jbG9uZWAsIGBiaW9fc3BsaXRgLCBgYmlvX3NwbGl0X3RvX2xpbWl0c2AsIGFuZCBgYmxrX21xX3N1Ym1pdF9iaW9gLiBXYWl0LCBgX19iaW9fY2xvbmVgIGlzIGRlY2xhcmVkIGBzdGF0aWNgLCB3aGljaCBpcyBoZWxwZnVsLCBidXQgYGJpb19zcGxpdGAgaXMgZXhwb3J0ZWQsIHNvIEkgKm5lZWQqIHRvIGluY2x1ZGUgdGhhdCBvbmUuIExldCdzIGluY29ycG9yYXRlIHRob3NlIGludG8gdGhlIGluaXRpYWwgZnV6emluZyBwbGFuLlxuXG5JIHNob3VsZCBhbHNvIGNoZWNrIGlmIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkLiBCdXQgdGhlIGJsb2NrIGxheWVyIGlzIGFsd2F5cyBlbmFibGVkLCBzbyB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLiBObyBuZWVkIGZvciBzcGVjaWFsIGNvbmZpZyBvcHRpb25zIGhlcmUuXG5cbkFscmlnaHQsIGxldCdzIGRvdWJsZS1jaGVjayB0aGUgY2FsbCBzaXRlcyBvZiBgYmlvX3NwbGl0YCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBjcml0aWNhbC4gSG1tLCBpdCdzIGNhbGxlZCBieTogYGJpb19zcGxpdF90b19saW1pdHNgLCBgYmxrX21xX3N1Ym1pdF9iaW9gLCBgYmlvX3NwbGl0X3J3YCwgYGJpb19zcGxpdF96b25lX2FwcGVuZGAsIGBiaW9fc3BsaXRfZGlzY2FyZGAsIGFuZCBgYmlvX3NwbGl0X3dyaXRlX3plcm9lc2AuIE9rYXksIEkgdGhpbmsgdGhpcyBzb2xpZGlmaWVzIG15IGxpc3QuIEnigJlsbCBhZGQgYGJpb19zcGxpdF90b19saW1pdHNgIHRvIHRoZSBsaXN0LiBJIHRoaW5rIEknbSBnb29kIG9uIHRoYXQgZnJvbnQuXG5cbkp1c3QgdG8gYmUgc2FmZSwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmUtZXhhbWluZSBgX19iaW9fY2xvbmVgLCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBhbnkgY3J1Y2lhbCBjb25uZWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwMzYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6MzU6NTAuNzQwMjA1MTgzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE4MDM1MTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYmlvX2Nsb25lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jpby5jPTg1ND1FWFBPUlRfU1lNQk9MKGJpb19wdXQpO1xcbmJsb2NrL2Jpby5jLTg1NS1cXG5ibG9jay9iaW8uYzo4NTY6c3RhdGljIGludCBfX2Jpb19jbG9uZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW8gKmJpb19zcmMsIGdmcF90IGdmcClcXG5ibG9jay9iaW8uYy04NTcte1xcbi0tXFxuYmxvY2svYmlvLmM9ODk0PXN0cnVjdCBiaW8gKmJpb19hbGxvY19jbG9uZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmlvICpiaW9fc3JjLFxcbi0tXFxuYmxvY2svYmlvLmMtOTAyLVxcbmJsb2NrL2Jpby5jOjkwMzpcXHRpZiAoX19iaW9fY2xvbmUoYmlvLCBiaW9fc3JjLCBnZnApIFxcdTAwM2MgMCkge1xcbmJsb2NrL2Jpby5jLTkwNC1cXHRcXHRiaW9fcHV0KGJpbyk7XFxuLS1cXG5ibG9jay9iaW8uYz05MjE9aW50IGJpb19pbml0X2Nsb25lKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBiaW8gKmJpbyxcXG4tLVxcbmJsb2NrL2Jpby5jLTkyNi1cXHRiaW9faW5pdChiaW8sIGJkZXYsIE5VTEwsIDAsIGJpb19zcmMtXFx1MDAzZWJpX29wZik7XFxuYmxvY2svYmlvLmM6OTI3OlxcdHJldCA9IF9fYmlvX2Nsb25lKGJpbywgYmlvX3NyYywgZ2ZwKTtcXG5ibG9jay9iaW8uYy05MjgtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6MzU6NTIuOTU4MjUwMTA3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NjM3NzEyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQmxvY2sgTGF5ZXIgQ2xvbmluZyBhbmQgU3BsaXR0aW5nIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGUgY29kZSwgaXQgc2VlbXMgYF9fYmlvX2Nsb25lYCBpcyBvbmx5IGNhbGxlZCBieSBgYmlvX2FsbG9jX2Nsb25lYCBhbmQgYGJpb19pbml0X2Nsb25lYC4gVGhhdCdzIHVzZWZ1bCBpbmZvcm1hdGlvbi4gU2luY2UgdGhlc2UgZnVuY3Rpb25zLCBhbG9uZyB3aXRoIGBiaW9fc3BsaXRgLCBhcmUgZnVuZGFtZW50YWwgdG8gdGhlIGJsb2NrIGxheWVyLCBhbmQgbGlrZWx5IHRvIGJlIHJlYWNoYWJsZSBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbiwgSSBzaG91bGQgZGVmaW5pdGVseSBhZGQgdGhlbSB0byBteSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZyB0aGUgYmxvY2sgbGF5ZXIuIFNpbmNlIHRoZSBibG9jayBsYXllciBpcyBlc3NlbnRpYWxseSBhIHN0YW5kYXJkIGNvbXBvbmVudCwgdGhlcmUgYXJlIG5vIHNwZWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgbmVlZCB0byB3b3JyeSBhYm91dC4gSXQncyBhbHdheXMgZW5hYmxlZC4gTm93LCBsZXQgbWUgcXVpY2tseSBjaGVjayBpZiB0aGlzIGBiaV9idmVjX2dhcF9iaXRgIHZhcmlhYmxlIGlzIHVzZWQgaW4gYW55IHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBvciBzcGVjaWZpYyBjb2RlIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTEzNiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNzozNTo1OC41MjIwMjM1MDJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODcyODM2MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmlfYnZlY19nYXBfYml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jpby5jPTIxNz12b2lkIGJpb19pbml0KHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGJpb192ZWMgKnRhYmxlLFxcbi0tXFxuYmxvY2svYmlvLmMtMjI3LVxcdGJpby1cXHUwMDNlYmlfc3RhdHVzID0gMDtcXG5ibG9jay9iaW8uYzoyMjg6XFx0YmlvLVxcdTAwM2ViaV9idmVjX2dhcF9iaXQgPSAwO1xcbmJsb2NrL2Jpby5jLTIyOS1cXHRiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gMDtcXG4tLVxcbmJsb2NrL2Jpby5jPTg1Nj1zdGF0aWMgaW50IF9fYmlvX2Nsb25lKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJpbyAqYmlvX3NyYywgZ2ZwX3QgZ2ZwKVxcbi0tXFxuYmxvY2svYmlvLmMtODYxLVxcdGJpby1cXHUwMDNlYmlfd3JpdGVfc3RyZWFtID0gYmlvX3NyYy1cXHUwMDNlYmlfd3JpdGVfc3RyZWFtO1xcbmJsb2NrL2Jpby5jOjg2MjpcXHRiaW8tXFx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCA9IGJpb19zcmMtXFx1MDAzZWJpX2J2ZWNfZ2FwX2JpdDtcXG5ibG9jay9iaW8uYy04NjMtXFx0YmlvLVxcdTAwM2ViaV9pdGVyID0gYmlvX3NyYy1cXHUwMDNlYmlfaXRlcjtcXG4tLVxcbmJsb2NrL2Jpby5jPTE5NDc9c3RydWN0IGJpbyAqYmlvX3NwbGl0KHN0cnVjdCBiaW8gKmJpbywgaW50IHNlY3RvcnMsXFxuLS1cXG5ibG9jay9iaW8uYy0xOTc0LVxcdGJpb19hZHZhbmNlKGJpbywgc3BsaXQtXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XFxuYmxvY2svYmlvLmM6MTk3NTpcXHRiaW8tXFx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCA9IDA7XFxuYmxvY2svYmlvLmMtMTk3Ni1cXG4tLVxcbmJsb2NrL2Jsay1tYXAuYz00MjY9aW50IGJsa19ycV9hcHBlbmRfYmlvKHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IGJpbyAqYmlvKVxcbi0tXFxuYmxvY2svYmxrLW1hcC5jLTQ1Ni1cXHRycS1cXHUwMDNlX19kYXRhX2xlbiA9IGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplO1xcbmJsb2NrL2Jsay1tYXAuYzo0NTc6XFx0cnEtXFx1MDAzZXBoeXNfZ2FwX2JpdCA9IGJpby1cXHUwMDNlYmlfYnZlY19nYXBfYml0O1xcbmJsb2NrL2Jsay1tYXAuYy00NTgtXFx0cmV0dXJuIDA7XFxuLS1cXG5ibG9jay9ibGstbWVyZ2UuYz0zMzU9aW50IGJpb19zcGxpdF9pb19hdChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSxcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jLTM3OS1cXHQqc2VncyA9IG5zZWdzO1xcbmJsb2NrL2Jsay1tZXJnZS5jOjM4MDpcXHRiaW8tXFx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCA9IGZmcyhnYXBzKTtcXG5ibG9jay9ibGstbWVyZ2UuYy0zODEtXFx0cmV0dXJuIDA7XFxuLS1cXG5ibG9jay9ibGstbWVyZ2UuYy00MTUtXFx0YmlvX2NsZWFyX3BvbGxlZChiaW8pO1xcbmJsb2NrL2Jsay1tZXJnZS5jOjQxNjpcXHRiaW8tXFx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCA9IGZmcyhnYXBzKTtcXG5ibG9jay9ibGstbWVyZ2UuYy00MTctXFx0cmV0dXJuIGJ5dGVzIFxcdTAwM2VcXHUwMDNlIFNFQ1RPUl9TSElGVDtcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jPTc1Mj11OCBiaW9fc2VnX2dhcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqcHJldiwgc3RydWN0IGJpbyAqbmV4dCxcXG4tLVxcbmJsb2NrL2Jsay1tZXJnZS5jLTc1OS1cXG5ibG9jay9ibGstbWVyZ2UuYzo3NjA6XFx0Z2Fwc19iaXQgPSBtaW5fbm90X3plcm8oZ2Fwc19iaXQsIHByZXYtXFx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCk7XFxuYmxvY2svYmxrLW1lcmdlLmM6NzYxOlxcdGdhcHNfYml0ID0gbWluX25vdF96ZXJvKGdhcHNfYml0LCBuZXh0LVxcdTAwM2ViaV9idmVjX2dhcF9iaXQpO1xcbmJsb2NrL2Jsay1tZXJnZS5jLTc2Mi1cXG4tLVxcbmJsb2NrL2Jsay1tcS5jPTI2NTQ9c3RhdGljIHZvaWQgYmxrX21xX2Jpb190b19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IGJpbyAqYmlvLFxcbi0tXFxuYmxvY2svYmxrLW1xLmMtMjY2NC1cXHRycS1cXHUwMDNlX19kYXRhX2xlbiA9IGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplO1xcbmJsb2NrL2Jsay1tcS5jOjI2NjU6XFx0cnEtXFx1MDAzZXBoeXNfZ2FwX2JpdCA9IGJpby1cXHUwMDNlYmlfYnZlY19nYXBfYml0O1xcbmJsb2NrL2Jsay1tcS5jLTI2NjYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oPTIxMD1zdHJ1Y3QgYmlvIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgtMjMwLVxcdCAqL1xcbmluY2x1ZGUvbGludXgvYmxrX3R5cGVzLmg6MjMxOlxcdHU4XFx0XFx0XFx0YmlfYnZlY19nYXBfYml0O1xcbmluY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgtMjMyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNzozNjowMC4wMDkzMTI0NDVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc0NDk3MDA1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZpbmluZyBGb2N1cyBTeW1ib2xzIGFuZCBDYWxsZXIgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGZpZWxkIGFuZCB3aGVyZSBpdCdzIHVzZWQuIEl0J3Mgb2J2aW91c2x5IHNpZ25pZmljYW50LCBwb3BwaW5nIHVwIGluIGBibGtfcnFfYXBwZW5kX2Jpb2AsIGBiaW9fc3BsaXRfaW9fYXRgLCBgYmlvX3NlZ19nYXBgLCBhbmQgYGJsa19tcV9iaW9fdG9fcmVxdWVzdGAuICBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIHRoZXNlIGNvbnN1bWVycyBhcmUgYWxzbyBpbmNsdWRlZCBpbiB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdCwgYXMgdGhleSBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIHRoaXMgdGhpbmcgSSdtIGV4YW1pbmluZy4gVGhleSBhcmUgb2J2aW91c2x5IGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBjb250ZXh0LlxuXG5IbW0sIHdhaXQgYSBzZWNvbmQuLi4gYGJsa19tcV9iaW9fdG9fcmVxdWVzdGAuLi4gaXNuJ3QgdGhhdCBhIHN0YXRpYyBmdW5jdGlvbj8gIFRoYXQgY2hhbmdlcyB0aGluZ3MuIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHN0YXRpYyBmdW5jdGlvbnMsIGFzIGNhbGxlciBjb250ZXh0IGlzIG9mdGVuIGltcG9ydGFudCB0byBpdHMgdXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBmaWVsZCBhbmQgaXRzIHVzZSBoZXJlLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBxdWlja2x5IGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYGJsa19tcV9iaW9fdG9fcmVxdWVzdGAgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIExldCdzIHNlZSB3aG8ncyBjYWxsaW5nIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ0NSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNzozNjowNS43NTQyODU4MDhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDU1OTk5ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrX21xX2Jpb190b19yZXF1ZXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1tcS5jPTI1OTI9c3RhdGljIHZvaWQgYmxrX21xX2luc2VydF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSwgYmxrX2luc2VydF90IGZsYWdzKVxcbi0tXFxuYmxvY2svYmxrLW1xLmMtMjY1My1cXG5ibG9jay9ibGstbXEuYzoyNjU0OnN0YXRpYyB2b2lkIGJsa19tcV9iaW9fdG9fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBiaW8gKmJpbyxcXG5ibG9jay9ibGstbXEuYy0yNjU1LVxcdFxcdHVuc2lnbmVkIGludCBucl9zZWdzKVxcbi0tXFxuYmxvY2svYmxrLW1xLmM9MzA5Mz12b2lkIGJsa19tcV9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTMxODEtXFxuYmxvY2svYmxrLW1xLmM6MzE4MjpcXHRibGtfbXFfYmlvX3RvX3JlcXVlc3QocnEsIGJpbywgbnJfc2Vncyk7XFxuYmxvY2svYmxrLW1xLmMtMzE4My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6MzY6MDcuMjU5ODkzNzUzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDM3Mjc2MzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRhcmdldCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBgYmxrX21xX3N1Ym1pdF9iaW9gIGlzIHRoZSBjdWxwcml0LCB0aGUgb25lIGtpY2tpbmcgdGhpbmdzIG9mZi4gTXkgYXR0ZW50aW9uLCB0aGVyZWZvcmUsIG5lZWRzIHRvIHplcm8gaW4gb24gdGhlc2Uga2V5IGZ1bmN0aW9uczogYGJpb19hbGxvY19jbG9uZWAsIGBiaW9faW5pdF9jbG9uZWAsIGBiaW9fc3BsaXRgLCBgYmxrX3JxX2FwcGVuZF9iaW9gLCBgYmlvX3NwbGl0X2lvX2F0YCwgYGJpb19zZWdfZ2FwYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBpbml0aWFsIGVudHJ5IHBvaW50IGBibGtfbXFfc3VibWl0X2Jpb2AuXG5cblRoZSBjb3JlIGlzc3VlIGhlcmUgcmV2b2x2ZXMgYXJvdW5kIGBiaW9fc3BsaXRgLCBhbmQgbW9yZSBzcGVjaWZpY2FsbHkgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBjb3B5aW5nIG9mIGBiaV9idmVjX2dhcF9iaXRgLiBUaGlzIGlzIGEgY3JpdGljYWwgZmllbGQsIG9idmlvdXNseSB0cmFja2luZyBnYXAgYml0cyB3aXRoaW4gYmlvIHZlY3RvcnMuIEFuZCBpdOKAmXMgdXNlZCBieSB0aGUgbGlrZXMgb2YgYGJsa19ycV9hcHBlbmRfYmlvYCBhbmQgYGJpb19zcGxpdF9pb19hdGAgd2hpY2ggYXJlIGNvcmUgYmxvY2sgbGF5ZXIgZnVuY3Rpb25zLiBJZiB0aGVzZSBnYXAgYml0cyBhcmVuJ3QgaGFuZGxlZCBjb3JyZWN0bHksIHRoZSB3aG9sZSB0aGluZyBmYWxscyBhcGFydC5cblxuR2l2ZW4gdGhhdCB0aGlzIHBhdGNoIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgbWlzc2luZyBpbml0aWFsaXphdGlvbiBhbmQgY29weWluZywgZnV6emluZyB0aGVzZSBmdW5jdGlvbnMgaXMgYWJzb2x1dGVseSB3YXJyYW50ZWQuIEknbSBzZXR0aW5nIGBXb3J0aEZ1enppbmdgIHRvIHRydWUuIFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoYXQgd2UndmUgcGx1Z2dlZCB0aGlzIGdhcCBhbmQgdGhhdCB0aGUgYmxvY2sgbGF5ZXIgY29udGludWVzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseSB1bmRlciB2YXJpb3VzIGlucHV0IGNvbmRpdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDM4LCJPdXRwdXRUb2tlbnMiOjE3NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNzozNjoxNy4yOTcxNzI1NDlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJpb19hbGxvY19jbG9uZVwiLFxuICAgIFwiYmlvX2luaXRfY2xvbmVcIixcbiAgICBcImJpb19zcGxpdFwiLFxuICAgIFwiYmxrX3JxX2FwcGVuZF9iaW9cIixcbiAgICBcImJpb19zcGxpdF9pb19hdFwiLFxuICAgIFwiYmlvX3NlZ19nYXBcIixcbiAgICBcImJsa19tcV9zdWJtaXRfYmlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbWlzc2luZyBpbml0aWFsaXphdGlvbiBhbmQgY29weWluZyBvZiBgYmlfYnZlY19nYXBfYml0YCBpbiBgYmlvX3NwbGl0YCBhbmQgYF9fYmlvX2Nsb25lYC4gVGhpcyBmaWVsZCBpcyB1c2VkIHRvIHRyYWNrIGdhcCBiaXRzIGZvciBiaW8gdmVjdG9ycyBhbmQgaXMgY29uc3VtZWQgYnkgY29yZSBibG9jayBsYXllciBmdW5jdGlvbnMgbGlrZSBgYmxrX3JxX2FwcGVuZF9iaW9gIGFuZCBgYmlvX3NwbGl0X2lvX2F0YC4gRnV6emluZyB0aGVzZSBmdW5jdGlvbnMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBjb3JyZWN0IGhhbmRsaW5nIG9mIGJpbyB2ZWN0b3IgZ2Fwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiaW9fYWxsb2NfY2xvbmVcIixcbiAgICBcImJpb19pbml0X2Nsb25lXCIsXG4gICAgXCJiaW9fc3BsaXRcIixcbiAgICBcImJsa19ycV9hcHBlbmRfYmlvXCIsXG4gICAgXCJiaW9fc3BsaXRfaW9fYXRcIixcbiAgICBcImJpb19zZWdfZ2FwXCIsXG4gICAgXCJibGtfbXFfc3VibWl0X2Jpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG1pc3NpbmcgaW5pdGlhbGl6YXRpb24gYW5kIGNvcHlpbmcgb2YgYGJpX2J2ZWNfZ2FwX2JpdGAgaW4gYGJpb19zcGxpdGAgYW5kIGBfX2Jpb19jbG9uZWAuIFRoaXMgZmllbGQgaXMgdXNlZCB0byB0cmFjayBnYXAgYml0cyBmb3IgYmlvIHZlY3RvcnMgYW5kIGlzIGNvbnN1bWVkIGJ5IGNvcmUgYmxvY2sgbGF5ZXIgZnVuY3Rpb25zIGxpa2UgYGJsa19ycV9hcHBlbmRfYmlvYCBhbmQgYGJpb19zcGxpdF9pb19hdGAuIEZ1enppbmcgdGhlc2UgZnVuY3Rpb25zIGlzIGltcG9ydGFudCB0byBlbnN1cmUgY29ycmVjdCBoYW5kbGluZyBvZiBiaW8gdmVjdG9yIGdhcHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE3OjM2OjE3LjI5NzIxMDYyOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ1ODM2Nzk1NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNzozNjoxNy4yOTc2MDY0MDlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjQ1ODMyNzg2NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBfX2Jpb19jbG9uZWAgYW5kIGBiaW9fc3BsaXRgIHRvIHByb3Blcmx5IHByb3BhZ2F0ZSBhbmQgcmVzZXQgdGhlIGBiaV9idmVjX2dhcF9iaXRgIGZpZWxkIG9mIGBzdHJ1Y3QgYmlvYC4gVGhpcyBmaWVsZCBpcyB1c2VkIHRvIGluZGljYXRlIHRoZSBsb3dlc3Qgc2V0IGJpdCBpbiBhbnkgYWRkcmVzcyBvZmZzZXQgYmV0d2VlbiBhbGwgYGJpX2lvX3ZlY3NgIGZvciBETUEgb3B0aW1pemF0aW9uLiBXaGVuIGEgYmlvIGlzIGFsbG9jYXRlZCBvciByZXNldCwgYGJpX2J2ZWNfZ2FwX2JpdGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwICh2aWEgYGJpb19pbml0YCBvciBgbWVtc2V0YCBpbiBgYmlvX3Jlc2V0YCkuIFRoZXJlZm9yZSwgdGhlIGlzc3VlIGJlaW5nIGZpeGVkIGlzIGEgbG9naWNhbCBidWcgd2hlcmUgdGhlIGdhcCBiaXQgaXMgZWl0aGVyIGxvc3QgZHVyaW5nIGNsb25pbmcgb3IgaW5jb3JyZWN0bHkgcmV0YWluZWQgZHVyaW5nIHNwbGl0dGluZywgcmF0aGVyIHRoYW4gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC4gQmVjYXVzZSB0aGUgZmllbGQgaXMgYWx3YXlzIGluaXRpYWxpemVkLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiBBbnkgcmVzdWx0aW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGR1ZSB0byBpbmNvcnJlY3QgRE1BIG1hcHBpbmdzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NjU5NzAwMDNhNjc5ZDgwZmZkYmZjNTUyYmIxZDFjNmZmNDkzNjY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTc6MzU6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9iaW8uYyBiL2Jsb2NrL2Jpby5jXG5pbmRleCA4OThiMmY1ZWY4YzgxLi4zM2FhNDM5YzFiYWUyIDEwMDY0NFxuLS0tIGEvYmxvY2svYmlvLmNcbisrKyBiL2Jsb2NrL2Jpby5jXG5AQCAtODU5LDYgKzg1OSw3IEBAIHN0YXRpYyBpbnQgX19iaW9fY2xvbmUoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmlvICpiaW9fc3JjLCBnZnBfdCBnZnApXG4gXHRiaW8tXHUwMDNlYmlfaW9wcmlvID0gYmlvX3NyYy1cdTAwM2ViaV9pb3ByaW87XG4gXHRiaW8tXHUwMDNlYmlfd3JpdGVfaGludCA9IGJpb19zcmMtXHUwMDNlYmlfd3JpdGVfaGludDtcbiBcdGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gPSBiaW9fc3JjLVx1MDAzZWJpX3dyaXRlX3N0cmVhbTtcbitcdGJpby1cdTAwM2ViaV9idmVjX2dhcF9iaXQgPSBiaW9fc3JjLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdDtcbiBcdGJpby1cdTAwM2ViaV9pdGVyID0gYmlvX3NyYy1cdTAwM2ViaV9pdGVyO1xuIFx0YmlvLVx1MDAzZWJpX2lvX3ZlYyA9IGJpb19zcmMtXHUwMDNlYmlfaW9fdmVjO1xuIFxuQEAgLTE5NzEsNiArMTk3Miw3IEBAIHN0cnVjdCBiaW8gKmJpb19zcGxpdChzdHJ1Y3QgYmlvICpiaW8sIGludCBzZWN0b3JzLFxuIFx0XHRiaW9faW50ZWdyaXR5X3RyaW0oc3BsaXQpO1xuIFxuIFx0YmlvX2FkdmFuY2UoYmlvLCBzcGxpdC1cdTAwM2ViaV9pdGVyLmJpX3NpemUpO1xuK1x0YmlvLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCA9IDA7XG4gXG4gXHRpZiAoYmlvX2ZsYWdnZWQoYmlvLCBCSU9fVFJBQ0VfQ09NUExFVElPTikpXG4gXHRcdGJpb19zZXRfZmxhZyhzcGxpdCwgQklPX1RSQUNFX0NPTVBMRVRJT04pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6MzY6MTcuMjk3NjA2OTg5WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMjA0MTM0OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCaW8gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBibG9jay9iaW8uY2AsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYGJpX2J2ZWNfZ2FwX2JpdGAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gcXVpY2tseSBhc3Nlc3Mgd2hldGhlciB0aGlzIHdhcyBhIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSwgZ2l2ZW4gdGhlIGNvbnRleHQuIFRoZSBjb2RlIHNuaXAgc2hvd3MgdGhhdCBgX19iaW9fY2xvbmVgIGNvcGllcyBgYmlvX3NyYy1cdTAwM2ViaV9idmVjX2dhcF9iaXRgIHRvIHRoZSBuZXcgYGJpb2AsIHdoaWxlIGBiaW9fc3BsaXRgIHNldHMgaXQgdG8gemVyby5cblxuSW5pdGlhbGx5LCBJIGRpc21pc3NlZCB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcG9zc2liaWxpdHkgYmVjYXVzZSBpdCdzIGp1c3QgYSBmaWVsZCBjb3B5IGZyb20gb25lIGBzdHJ1Y3QgYmlvYCB0byBhbm90aGVyIGFuZCB0aGVuIGEgemVyb2luZyBhY3Rpb24uIEhvd2V2ZXIsIHRoZSBtb3JlIEkgdGhpbmsgYWJvdXQgaXQsIGlmIGBfX2Jpb19jbG9uZWAgKmRpZG4ndCogZG8gdGhpcyBjb3B5LCB0aGVuICp0aGF0KiB3b3VsZCBiZSBhIGJpZ2dlciBpc3N1ZS4gYGJpX2J2ZWNfZ2FwX2JpdGAgbWlnaHQgaGF2ZSBlbmRlZCB1cCB1bmluaXRpYWxpemVkIG9yIGNvbnRhaW5pbmcgc3RhbGUgZGF0YS4gS01TQU4gKnNob3VsZCogY2F0Y2ggdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHRob3VnaCwgcmlnaHQ/IEJ1dCB3YWl0LCBgX19iaW9fY2xvbmVgIGluaXRpYWxpemVzIGBiaW9gIGZyb20gYGJpb19zcmNgLi4uIGl0J3MgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgY29weS5cblxuTm93IEknbSBsb29raW5nIGNsb3NlciBhdCBgX19iaW9fY2xvbmVgIGFuZCBgYmlvX3NwbGl0YCBzcGVjaWZpY2FsbHkuIFRoZSBgYmlvX3NwbGl0YCBzZXR0aW5nIHRvIHplcm8gaXMgY3J1Y2lhbC4gVGhpcyAqbG9va3MqIGxpa2UgYSBidWcgZml4IOKAkyBwZXJoYXBzIHRoZSBvcmlnaW5hbCBjbG9uaW5nIG9yIHNwbGl0dGluZyBsb2dpYyB3YXMgZmFpbGluZyB0byBwcm9wZXJseSBjb3B5IG9yIHJlc2V0IHRoaXMgZmllbGQuIFRoaXMgY291bGQgcmVzdWx0IGluIGluY29ycmVjdCBiZWhhdmlvciBkb3duIGluIHRoZSBibG9jayBsYXllciwgcGVyaGFwcyBsZWFkaW5nIHRvIGdhcHMgaW4gYSBgYnZlY2AuXG5cbk9rYXksIGJhY2sgdG8gdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZ2xlLiBJZiBgYmlvYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGJpb19hbGxvY19iaW9zZXRgLCBpdCBtaWdodCBiZSB6ZXJvZWQgb3V0IG9yIHBhcnRpYWxseSB6ZXJvZWQsIHdoaWNoIGJyaW5ncyBpdCBpbnRvIGFuIGluaXRpYWxpc2VkIHN0YXRlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGJpb19hbGxvY19iaW9zZXRgIGFuZCB0aGUgYHN0cnVjdCBiaW9gIGl0c2VsZiB0byBiZSBjb21wbGV0ZWx5IHN1cmUuIFRoaXMgaXMgYWJvdXQgYXMgY2xlYW4gb2YgYSByZWFkIG9mIGJpbyBmaWVsZCwgaW4gY2xvbmUsIHRoZW4gaW4gc3BsaXQsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBzcGxpdCBvcGVyYXRpb24gbmVlZGVkIHNvbWUgZXh0cmEgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTM2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6MzY6MjMuNTE4MDIzMjg4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTAyODQwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiaW9fYWxsb2NfYmlvc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2Jpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jpby5jPTI2MD1FWFBPUlRfU1lNQk9MKGJpb19pbml0KTtcXG4tLVxcbmJsb2NrL2Jpby5jLTI2OS0gKiAgIEFmdGVyIGNhbGxpbmcgYmlvX3Jlc2V0KCksIEBiaW8gd2lsbCBiZSBpbiB0aGUgc2FtZSBzdGF0ZSBhcyBhIGZyZXNobHlcXG5ibG9jay9iaW8uYzoyNzA6ICogICBhbGxvY2F0ZWQgYmlvIHJldHVybmVkIGJpbyBiaW9fYWxsb2NfYmlvc2V0KCkgLSB0aGUgb25seSBmaWVsZHMgdGhhdCBhcmVcXG5ibG9jay9iaW8uYzoyNzE6ICogICBwcmVzZXJ2ZWQgYXJlIHRoZSBvbmVzIHRoYXQgYXJlIGluaXRpYWxpemVkIGJ5IGJpb19hbGxvY19iaW9zZXQoKS4gU2VlXFxuYmxvY2svYmlvLmMtMjcyLSAqICAgY29tbWVudCBpbiBzdHJ1Y3QgYmlvLlxcbi0tXFxuYmxvY2svYmlvLmM9NDc2PXN0YXRpYyBzdHJ1Y3QgYmlvICpiaW9fYWxsb2NfcGVyY3B1X2NhY2hlKHN0cnVjdCBiaW9fc2V0ICpicylcXG4tLVxcbmJsb2NrL2Jpby5jLTUwMS0vKipcXG5ibG9jay9iaW8uYzo1MDI6ICogYmlvX2FsbG9jX2Jpb3NldCAtIGFsbG9jYXRlIGEgYmlvIGZvciBJL09cXG5ibG9jay9iaW8uYy01MDMtICogQGJkZXY6XFx0YmxvY2sgZGV2aWNlIHRvIGFsbG9jYXRlIHRoZSBiaW8gZm9yIChjYW4gYmUgJU5VTEwpXFxuLS1cXG5ibG9jay9iaW8uYy01MzQtICovXFxuYmxvY2svYmlvLmM6NTM1OnN0cnVjdCBiaW8gKmJpb19hbGxvY19iaW9zZXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgc2hvcnQgbnJfdmVjcyxcXG5ibG9jay9iaW8uYy01MzYtXFx0XFx0XFx0ICAgICBibGtfb3BmX3Qgb3BmLCBnZnBfdCBnZnAsIHN0cnVjdCBiaW9fc2V0ICpicylcXG4tLVxcbmJsb2NrL2Jpby5jLTYxNi19XFxuYmxvY2svYmlvLmM6NjE3OkVYUE9SVF9TWU1CT0woYmlvX2FsbG9jX2Jpb3NldCk7XFxuYmxvY2svYmlvLmMtNjE4LVxcbi0tXFxuYmxvY2svYmlvLmMtNjI4LSAqXFxuYmxvY2svYmlvLmM6NjI5OiAqIE5vdGUgdGhhdCB1bmxpa2UgYmlvX2FsbG9jKCkgb3IgYmlvX2FsbG9jX2Jpb3NldCgpIGFsbG9jYXRpb25zIGZyb20gdGhpc1xcbmJsb2NrL2Jpby5jLTYzMC0gKiBmdW5jdGlvbiBhcmUgbm90IGJhY2tlZCBieSBhIG1lbXBvb2wgY2FuIGZhaWwuICBEbyBub3QgdXNlIHRoaXMgZnVuY3Rpb25cXG4tLVxcbmJsb2NrL2Jpby5jPTg5ND1zdHJ1Y3QgYmlvICpiaW9fYWxsb2NfY2xvbmUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGJpbyAqYmlvX3NyYyxcXG4tLVxcbmJsb2NrL2Jpby5jLTg5OC1cXG5ibG9jay9iaW8uYzo4OTk6XFx0YmlvID0gYmlvX2FsbG9jX2Jpb3NldChiZGV2LCAwLCBiaW9fc3JjLVxcdTAwM2ViaV9vcGYsIGdmcCwgYnMpO1xcbmJsb2NrL2Jpby5jLTkwMC1cXHRpZiAoIWJpbylcXG4tLVxcbmJsb2NrL2Jpby5jPTIwNDY9RVhQT1JUX1NZTUJPTChiaW9zZXRfZXhpdCk7XFxuLS1cXG5ibG9jay9iaW8uYy0yMDU2LSAqIERlc2NyaXB0aW9uOlxcbmJsb2NrL2Jpby5jOjIwNTc6ICogICAgU2V0IHVwIGEgYmlvX3NldCB0byBiZSB1c2VkIHdpdGggQGJpb19hbGxvY19iaW9zZXQuIEFsbG93cyB0aGUgY2FsbGVyXFxuYmxvY2svYmlvLmMtMjA1OC0gKiAgICB0byBhc2sgZm9yIGEgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIGFsbG9jYXRlZCBpbiBmcm9udCBvZiB0aGUgYmlvLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNzozNjoyMy41NjMwNTUxMTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0NDQzMTI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gQmxvY2sgSS9PIFN0cnVjdHVyZXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgc3RydWN0IGJpb2Agc3RydWN0dXJlLiBMZXQncyBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIGBpbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNhbm9uaWNhbCBkZWZpbml0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgYmFzaWMgYmxvY2sgSS9PIG9wZXJhdGlvbnMgYXQgYSBmb3VuZGF0aW9uYWwgbGV2ZWwuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlIHRoYXQgZGVzY3JpYmVzIGEgYmxvY2sgSS9PIHJlcXVlc3QuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBpbmZvcm1hdGlvbiBpdCBlbmNhcHN1bGF0ZXMg4oCTIHRoZSBkZXZpY2UsIHRoZSBzZWN0b3IgYWRkcmVzc2VzLCB0aGUgZGF0YSBidWZmZXJzLCB0aGUgSS9PIGZsYWdzLCBhbmQgZXZlcnl0aGluZyBlbHNlIGludm9sdmVkIGluIGEgdHlwaWNhbCBJL08gb3BlcmF0aW9uLiBMZXQncyBzZWUgaG93IHRoZSBrZXJuZWwgb3JjaGVzdHJhdGVzIHRoaXMgY3J1Y2lhbCBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBibG9jayBsYXllciBhbmQgdGhlIHVuZGVybHlpbmcgc3RvcmFnZSBkZXZpY2VzLiBUaW1lIHRvIGRpZyBpbiBhbmQgcmVtaW5kIG15c2VsZiBvZiB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU4NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE3OjM2OjI2LjcwNzQ4OTYyNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2MDEyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGJpbyBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYmxrX3R5cGVzLmg9MjAzPXR5cGVkZWYgdW5zaWduZWQgaW50IGJsa19xY190O1xcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaC0yMDktICovXFxuaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaDoyMTA6c3RydWN0IGJpbyB7XFxuaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaC0yMTEtXFx0c3RydWN0IGJpb1xcdFxcdCpiaV9uZXh0O1xcdC8qIHJlcXVlc3QgcXVldWUgbGluayAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNzozNjoyNi43NTYwOTQ0M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzc5MTUwNjMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBhbmFseXppbmcgYHN0cnVjdCBiaW9gOlxuXG4qKkRpdmluZyBpbnRvIGBzdHJ1Y3QgYmlvYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGl0LiBUaW1lIHRvIGRpc3NlY3QgYHN0cnVjdCBiaW9gLiBJIGFscmVhZHkga25vdyB0aGUgaGlnaC1sZXZlbDsgdGhpcyBpcyB0aGUgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmUgaW4gdGhlIExpbnV4IGtlcm5lbCBmb3IgYmxvY2sgSS9PIG9wZXJhdGlvbnMuIEJ1dCBub3cgSSB3YW50IHRvIGRyaWxsIGRvd24sIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIGZpZWxkcywgdGhlIGltcGxpY2F0aW9ucyBvZiBlYWNoIG1lbWJlciwgYW5kIGhvdyB0aGV5IGNvbnRyaWJ1dGUgdG8gZWZmaWNpZW50IGFuZCByZWxpYWJsZSBkYXRhIHRyYW5zZmVyLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHRoaW5nIGlzICpkZXNpZ25lZCrigJR3aGF0IHRyYWRlLW9mZnMgd2VyZSBtYWRlPyBXaGF0IG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIGFyZSBhdCBwbGF5P1xuXG5GaXJzdCwgSSdtIGxvb2tpbmcgZm9yIHRoZSBlc3NlbnRpYWwgZmllbGRzLiBUaGUgcG9pbnRlcnMgdG8gdGhlIGRhdGEgYnVmZmVycyAocHJvYmFibHkgYGJpX2lvX3ZlY2Agb3Igc2ltaWxhciksIHRoZSBkZXZpY2UgaW5mb3JtYXRpb24gKHdoZXJlIHRoZSBkYXRhIGlzIGhlYWRlZCksIGFuZCB0aGUgZmxhZ3MgdGhhdCBkaWN0YXRlIHRoZSBvcGVyYXRpb25hbCBjaGFyYWN0ZXJpc3RpY3PigJRyZWFkL3dyaXRlLCBzeW5jaHJvbm91cy9hc3luY2hyb25vdXMsIGV0Yy4gSSdtIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gaG93IHRoZXkgaGFuZGxlIHNjYXR0ZXItZ2F0aGVyIEkvTy4gQXJlIHRoZXkgdXNpbmcgYSBsaW5rZWQgbGlzdCBvZiBgYmlvX3ZlY2Agc3RydWN0cz8gSXMgdGhlcmUgYW55IGNhY2hpbmcgb3IgcHJlZmV0Y2hpbmcgYnVpbHQgaW4/IFRoZSBsYXlvdXQgaXMgaW1wb3J0YW50IHRvIG1pbmltaXplIGNhY2hlLWxpbmUgYm91bmNpbmcuXG5cbk5leHQsIEknbSBkaWdnaW5nIGludG8gaG93IHRoZSBgYmlvYCBpcyAqdXNlZCouIEknbGwgdHJ5IHRvIGZvbGxvdyBpdHMgbGlmZWN5Y2xlLiBIb3cgaXMgaXQgaW5pdGlhbGl6ZWQ/IEFsbG9jYXRlZD8gUXVldWVkPyBTdWJtaXR0ZWQgdG8gdGhlIGJsb2NrIGRldmljZSBkcml2ZXI/IENvbXBsZXRlZD8gV2hhdCBhYm91dCBlcnJvciBoYW5kbGluZz8gSXMgdGhlcmUgcHJvcGVyIHNlcXVlbmNpbmcgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IGluIHRoZSBmYWNlIG9mIGhhcmR3YXJlIGZhaWx1cmVzIGFuZCByZXRyaWVzPyBJJ20gbG9va2luZyBmb3IgYW55IHNpZ25zIG9mIGxvY2sgY29udGVudGlvbiBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MuIEFyZSB0aGVyZSBhbnkgcGVyLUNQVSBkYXRhIHN0cnVjdHVyZXMgdG8gcmVkdWNlIGxvY2tpbmcgb3ZlcmhlYWQ/IEknbSBob3BpbmcgdG8gc2VlIHdlbGwtZGVmaW5lZCBzdGF0ZXMgYW5kIHRyYW5zaXRpb25zIHRoYXQgbWFrZSBpdCByb2J1c3QuXG5cbkknbSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIGZvciBtb2Rlcm4gc3RvcmFnZSBkZXZpY2VzLCBsaWtlIE5WTWUgb3IgU1NEcy4gRG9lcyB0aGUgc3RydWN0dXJlIGluY29ycG9yYXRlIGFueSBmZWF0dXJlcyB0aGF0IGFsbG93IGZvciBlZmZpY2llbnQgY29tbWFuZCBxdWV1aW5nLCBUUklNIHN1cHBvcnQsIG9yIGFueSBvdGhlciBmZWF0dXJlcyBzcGVjaWZpYyB0byBhZHZhbmNlZCBzdG9yYWdlIHByb3RvY29scz8gQXJlIHRoZXJlIGFueSBoaW50cyBvZiBzdXBwb3J0IGZvciBEaXJlY3QgTWVtb3J5IEFjY2VzcyAoRE1BKSBhbmQgemVyby1jb3B5IG9wZXJhdGlvbnM/XG5cbkZpbmFsbHksIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIG9mICpmdXR1cmUtcHJvb2ZpbmcqLiBBcmUgdGhlcmUgcmVzZXJ2ZWQgZmllbGRzIG9yIGV4dGVuc2lvbiBwb2ludHMgdGhhdCBpbmRpY2F0ZSBmb3J3YXJkIGNvbXBhdGliaWxpdHk/IEhhdmUgdGhleSB0aG91Z2h0IGFib3V0IHN1cHBvcnRpbmcgbmV3IGhhcmR3YXJlIG9yIHN0b3JhZ2UgdGVjaG5vbG9naWVzPyBBcmUgdGhlcmUgYW55IGhpbnRzIG9mIGFic3RyYWN0aW9uIGxheWVycyB0aGF0IGNvdWxkIG1ha2UgaXQgZWFzaWVyIHRvIGFkZCBuZXcgZmVhdHVyZXMgbGF0ZXI/IEkgd2FudCB0byBzZWUgYSBkZXNpZ24gdGhhdCBpcyBjbGVhbiwgZXh0ZW5zaWJsZSwgYW5kIGRvZXNuJ3QgZ2V0IGluIHRoZSB3YXkgb2YgcGVyZm9ybWFuY2UuIE9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTM0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNzozNjo1NC41NDc2MDQyNDVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjEwOlxcdHN0cnVjdCBiaW8ge1xcbiAyMTE6XFx0XFx0c3RydWN0IGJpb1xcdFxcdCpiaV9uZXh0O1xcdC8qIHJlcXVlc3QgcXVldWUgbGluayAqL1xcbiAyMTI6XFx0XFx0c3RydWN0IGJsb2NrX2RldmljZVxcdCpiaV9iZGV2O1xcbiAyMTM6XFx0XFx0YmxrX29wZl90XFx0XFx0Ymlfb3BmO1xcdFxcdC8qIGJvdHRvbSBiaXRzIFJFUV9PUCwgdG9wIGJpdHNcXG4gMjE0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAqIHJlcV9mbGFncy5cXG4gMjE1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAqL1xcbiAyMTY6XFx0XFx0dW5zaWduZWQgc2hvcnRcXHRcXHRiaV9mbGFncztcXHQvKiBCSU9fKiBiZWxvdyAqL1xcbiAyMTc6XFx0XFx0dW5zaWduZWQgc2hvcnRcXHRcXHRiaV9pb3ByaW87XFxuIDIxODpcXHRcXHRlbnVtIHJ3X2hpbnRcXHRcXHRiaV93cml0ZV9oaW50O1xcbiAyMTk6XFx0XFx0dThcXHRcXHRcXHRiaV93cml0ZV9zdHJlYW07XFxuIDIyMDpcXHRcXHRibGtfc3RhdHVzX3RcXHRcXHRiaV9zdGF0dXM7XFxuIDIyMTpcXHRcXG4gMjIyOlxcdFxcdC8qXFxuIDIyMzpcXHRcXHQgKiBUaGUgYnZlYyBnYXAgYml0IGluZGljYXRlcyB0aGUgbG93ZXN0IHNldCBiaXQgaW4gYW55IGFkZHJlc3Mgb2Zmc2V0XFxuIDIyNDpcXHRcXHQgKiBiZXR3ZWVuIGFsbCBiaV9pb192ZWNzLiBUaGlzIGZpZWxkIGlzIGluaXRpYWxpemVkIG9ubHkgYWZ0ZXIgdGhlIGJpb1xcbiAyMjU6XFx0XFx0ICogaXMgc3BsaXQgdG8gdGhlIGhhcmR3YXJlIGxpbWl0cyAoc2VlIGJpb19zcGxpdF9pb19hdCgpKS4gVGhlIHZhbHVlXFxuIDIyNjpcXHRcXHQgKiBtYXkgYmUgdXNlZCB0byBjb25zaWRlciBETUEgb3B0aW1pemF0aW9uIHdoZW4gcGVyZm9ybWluZyB0aGF0XFxuIDIyNzpcXHRcXHQgKiBtYXBwaW5nLiBUaGUgdmFsdWUgaXMgY29tcGFyZWQgdG8gYSBwb3dlciBvZiB0d28gbWFzayB3aGVyZSB0aGVcXG4gMjI4OlxcdFxcdCAqIHJlc3VsdCBkZXBlbmRzIG9uIGFueSBiaXQgc2V0IHdpdGhpbiB0aGUgbWFzaywgc28gc2F2aW5nIHRoZSBsb3dlc3RcXG4gMjI5OlxcdFxcdCAqIGJpdCBpcyBzdWZmaWNpZW50IHRvIGtub3cgaWYgYW55IHNlZ21lbnQgZ2FwIGNvbGxpZGVzIHdpdGggdGhlIG1hc2suXFxuIDIzMDpcXHRcXHQgKi9cXG4gMjMxOlxcdFxcdHU4XFx0XFx0XFx0YmlfYnZlY19nYXBfYml0O1xcbiAyMzI6XFx0XFxuIDIzMzpcXHRcXHRhdG9taWNfdFxcdFxcdF9fYmlfcmVtYWluaW5nO1xcbiAyMzQ6XFx0XFxuIDIzNTpcXHRcXHQvKiBUaGUgYWN0dWFsIHZlYyBsaXN0LCBwcmVzZXJ2ZWQgYnkgYmlvX3Jlc2V0KCkgKi9cXG4gMjM2OlxcdFxcdHN0cnVjdCBiaW9fdmVjXFx0XFx0KmJpX2lvX3ZlYztcXG4gMjM3OlxcdFxcdHN0cnVjdCBidmVjX2l0ZXJcXHRiaV9pdGVyO1xcbiAyMzg6XFx0XFxuIDIzOTpcXHRcXHR1bmlvbiB7XFxuIDI0MDpcXHRcXHRcXHQvKiBmb3IgcG9sbGVkIGJpb3M6ICovXFxuIDI0MTpcXHRcXHRcXHRibGtfcWNfdFxcdFxcdGJpX2Nvb2tpZTtcXG4gMjQyOlxcdFxcdFxcdC8qIGZvciBwbHVnZ2VkIHpvbmVkIHdyaXRlcyBvbmx5OiAqL1xcbiAyNDM6XFx0XFx0XFx0dW5zaWduZWQgaW50XFx0XFx0X19iaV9ucl9zZWdtZW50cztcXG4gMjQ0OlxcdFxcdH07XFxuIDI0NTpcXHRcXHRiaW9fZW5kX2lvX3RcXHRcXHQqYmlfZW5kX2lvO1xcbiAyNDY6XFx0XFx0dm9pZFxcdFxcdFxcdCpiaV9wcml2YXRlO1xcbiAyNDc6XFx0I2lmZGVmIENPTkZJR19CTEtfQ0dST1VQXFxuIDI0ODpcXHRcXHQvKlxcbiAyNDk6XFx0XFx0ICogUmVwcmVzZW50cyB0aGUgYXNzb2NpYXRpb24gb2YgdGhlIGNzcyBhbmQgcmVxdWVzdF9xdWV1ZSBmb3IgdGhlIGJpby5cXG4gMjUwOlxcdFxcdCAqIElmIGEgYmlvIGdvZXMgZGlyZWN0IHRvIGRldmljZSwgaXQgd2lsbCBub3QgaGF2ZSBhIGJsa2cgYXMgaXQgd2lsbFxcbiAyNTE6XFx0XFx0ICogbm90IGhhdmUgYSByZXF1ZXN0X3F1ZXVlIGFzc29jaWF0ZWQgd2l0aCBpdC4gIFRoZSByZWZlcmVuY2UgaXMgcHV0XFxuIDI1MjpcXHRcXHQgKiBvbiByZWxlYXNlIG9mIHRoZSBiaW8uXFxuIDI1MzpcXHRcXHQgKi9cXG4gMjU0OlxcdFxcdHN0cnVjdCBibGtjZ19ncVxcdFxcdCpiaV9ibGtnO1xcbiAyNTU6XFx0XFx0LyogVGltZSB0aGF0IHRoaXMgYmlvIHdhcyBpc3N1ZWQuICovXFxuIDI1NjpcXHRcXHR1NjRcXHRcXHRcXHRpc3N1ZV90aW1lX25zO1xcbiAyNTc6XFx0I2lmZGVmIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVFxcbiAyNTg6XFx0XFx0dTY0XFx0XFx0XFx0YmlfaW9jb3N0X2Nvc3Q7XFxuIDI1OTpcXHQjZW5kaWZcXG4gMjYwOlxcdCNlbmRpZlxcbiAyNjE6XFx0XFxuIDI2MjpcXHQjaWZkZWYgQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTlxcbiAyNjM6XFx0XFx0c3RydWN0IGJpb19jcnlwdF9jdHhcXHQqYmlfY3J5cHRfY29udGV4dDtcXG4gMjY0OlxcdCNlbmRpZlxcbiAyNjU6XFx0XFxuIDI2NjpcXHQjaWYgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkpXFxuIDI2NzpcXHRcXHRzdHJ1Y3QgYmlvX2ludGVncml0eV9wYXlsb2FkICpiaV9pbnRlZ3JpdHk7IC8qIGRhdGEgaW50ZWdyaXR5ICovXFxuIDI2ODpcXHQjZW5kaWZcXG4gMjY5OlxcdFxcbiAyNzA6XFx0XFx0dW5zaWduZWQgc2hvcnRcXHRcXHRiaV92Y250O1xcdC8qIGhvdyBtYW55IGJpb192ZWMncyAqL1xcbiAyNzE6XFx0XFxuIDI3MjpcXHRcXHQvKlxcbiAyNzM6XFx0XFx0ICogRXZlcnl0aGluZyBzdGFydGluZyB3aXRoIGJpX21heF92ZWNzIHdpbGwgYmUgcHJlc2VydmVkIGJ5IGJpb19yZXNldCgpXFxuIDI3NDpcXHRcXHQgKi9cXG4gMjc1OlxcdFxcbiAyNzY6XFx0XFx0LypcXG4gMjc3OlxcdFxcdCAqIE51bWJlciBvZiBlbGVtZW50cyBpbiBgYmlfaW9fdmVjYCB0aGF0IHdlcmUgYWxsb2NhdGVkIGZvciB0aGlzIGJpby5cXG4gMjc4OlxcdFxcdCAqIE9ubHkgdXNlZCBieSB0aGUgYmlvIHN1Ym1pdHRlciB0byBtYWtlIGBiaW9fYWRkX3BhZ2VgIGZhaWwgb25jZSBmdWxsXFxuIDI3OTpcXHRcXHQgKiBhbmQgdG8gZnJlZSB0aGUgYGJpX2lvX3ZlY2AgYWxsb2NhdGlvbi4gTXVzdCBub3QgYmUgdXNlZCBpbiBkcml2ZXJzXFxuIDI4MDpcXHRcXHQgKiBhbmQgZG9lcyBub3QgaG9sZCBhIHVzZWZ1bCB2YWx1ZSBmb3IgY2xvbmVkIGJpb3MuXFxuIDI4MTpcXHRcXHQgKi9cXG4gMjgyOlxcdFxcdHVuc2lnbmVkIHNob3J0XFx0XFx0YmlfbWF4X3ZlY3M7XFxuIDI4MzpcXHRcXG4gMjg0OlxcdFxcdGF0b21pY190XFx0XFx0X19iaV9jbnQ7XFx0LyogcGluIGNvdW50ICovXFxuIDI4NTpcXHRcXG4gMjg2OlxcdFxcdHN0cnVjdCBiaW9fc2V0XFx0XFx0KmJpX3Bvb2w7XFxuIDI4NzpcXHR9O1xcbiAyODg6XFx0XFxuIDI4OTpcXHQjZGVmaW5lIEJJT19SRVNFVF9CWVRFU1xcdFxcdG9mZnNldG9mKHN0cnVjdCBiaW8sIGJpX21heF92ZWNzKVxcbiAyOTA6XFx0I2RlZmluZSBCSU9fTUFYX1NJWkVcXHRcXHRVSU5UX01BWCAvKiBtYXggdmFsdWUgb2YgYmlfaXRlci5iaV9zaXplICovXFxuIDI5MTpcXHQjZGVmaW5lIEJJT19NQVhfU0VDVE9SU1xcdFxcdChCSU9fTUFYX1NJWkUgXFx1MDAzZVxcdTAwM2UgU0VDVE9SX1NISUZUKVxcbiAyOTI6XFx0XFxuIDI5MzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBiaW9fdmVjICpiaW9faW5saW5lX3ZlY3Moc3RydWN0IGJpbyAqYmlvKVxcbiAyOTQ6XFx0e1xcbiAyOTU6XFx0XFx0cmV0dXJuIChzdHJ1Y3QgYmlvX3ZlYyAqKShiaW8gKyAxKTtcXG4gMjk2OlxcdH1cXG4gMjk3OlxcdFxcbiAyOTg6XFx0LypcXG4gMjk5OlxcdCAqIGJpbyBmbGFnc1xcbiAzMDA6XFx0ICovXFxuIDMwMTpcXHRlbnVtIHtcXG4gMzAyOlxcdFxcdEJJT19QQUdFX1BJTk5FRCxcXHQvKiBVbnBpbiBwYWdlcyBpbiBiaW9fcmVsZWFzZV9wYWdlcygpICovXFxuIDMwMzpcXHRcXHRCSU9fQ0xPTkVELFxcdFxcdC8qIGRvZXNuJ3Qgb3duIGRhdGEgKi9cXG4gMzA0OlxcdFxcdEJJT19RVUlFVCxcXHRcXHQvKiBNYWtlIEJJTyBRdWlldCAqL1xcbiAzMDU6XFx0XFx0QklPX0NIQUlOLFxcdFxcdC8qIGNoYWluZWQgYmlvLCAtXFx1MDAzZWJpX3JlbWFpbmluZyBpbiBlZmZlY3QgKi9cXG4gMzA2OlxcdFxcdEJJT19SRUZGRUQsXFx0XFx0LyogYmlvIGhhcyBlbGV2YXRlZCAtXFx1MDAzZWJpX2NudCAqL1xcbiAzMDc6XFx0XFx0QklPX0JQU19USFJPVFRMRUQsXFx0LyogVGhpcyBiaW8gaGFzIGFscmVhZHkgYmVlbiBzdWJqZWN0ZWQgdG9cXG4gMzA4OlxcdFxcdFxcdFxcdFxcdCAqIHRocm90dGxpbmcgcnVsZXMuIERvbid0IGRvIGl0IGFnYWluLiAqL1xcbiAzMDk6XFx0XFx0QklPX1RSQUNFX0NPTVBMRVRJT04sXFx0LyogYmlvX2VuZGlvKCkgc2hvdWxkIHRyYWNlIHRoZSBmaW5hbCBjb21wbGV0aW9uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE3OjM2OjU0LjU0NzcwNTkwNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjEyMTc4NzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYmlvIFN0cnVjdHVyZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgaXQncyBhZGRpbmcgYGJpby1cdTAwM2ViaV9idmVjX2dhcF9iaXRgIHRvIHRoZSBgX19iaW9fY2xvbmVgIGZ1bmN0aW9uLiBUaGF0J3MgYSBuZXcgb25lLiAgSXQncyBhbHNvIGJlaW5nIHJlc2V0IHRvIDAgaW4gYGJpb19zcGxpdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gIElzIHRoaXMgYSBiaXRmaWVsZCBmbGFnIGJlaW5nIGFkZGVkLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGV4aXN0aW5nIGBiaW9gIHN0cnVjdHVyZSBhbmQgaG93IHRoaXMgbmV3IG1lbWJlciBtb2RpZmllcyB0aGF0IGludGVyYWN0aW9uLiBJdCBzZWVtcyBsaWtlIHRoZSBpbnRlbnRpb24gaXMgdG8gY2FycnkgdGhhdCBiaXQgYWNyb3NzIGNsb25lcywgYnV0IHJlc2V0IGl0IG9uIGEgc3BsaXQuXG5cbk5vdywgd2FpdCBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gY29uc2lkZXIgaG93IGBiaW9fYWxsb2NfYmlvc2V0YCBhbmQgYGJpb19pbml0YCBhcmUgaW52b2x2ZWQgaGVyZS4gRG9uJ3QgdGhvc2UgZnVuY3Rpb25zIHJlc2V0IGEgZ29vZCBjaHVuayBvZiB0aGUgYGJpb2Agc3RydWN0dXJlPyBJIGJlbGlldmUgdGhleSBjYWxsIGBiaW9faW5pdGAsIGFuZCBJIHJlY2FsbCBgYmlvX2luaXRgIGNsZWFyaW5nIHRoZSBgYmlvYCBzdHJ1Y3R1cmUgdXAgdG8gYEJJT19SRVNFVF9CWVRFU2AuIEkgbmVlZCB0byBjb25maXJtIGV4YWN0bHkgd2hhdCBnZXRzIGNsZWFyZWQgYnkgYGJpb19pbml0YCwgYW5kIHdoZXRoZXIgdGhpcyBuZXcgZmllbGQgaXMgd2l0aGluIHRoYXQgcmVzZXQgcmFuZ2UuIEl0J3MgY3JpdGljYWwgdG8gZW5zdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMgb3IgY29uZmxpY3RzIHdpdGggb3RoZXIgaW5pdGlhbGl6YXRpb24gcm91dGluZXMuIEkgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIGBiaW9faW5pdGAncyBjb2RlIHJpZ2h0IGF3YXkuICBUaGUgaW1wbGljYXRpb25zIG9mICp3aGVyZSogdGhpcyBuZXcgYml0IHJlc2lkZXMgaW4gdGhlIGJpbyBhbmQgdGhlIGluaXRpYWxpemF0aW9uIGJlaGF2aW9yIGFyZSBjcml0aWNhbCB0byBwcm9wZXJseSB1bmRlcnN0YW5kaW5nIGl0cyBhZGRpdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjExMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE3OjM3OjAwLjc1OTg4NzM2M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2Mzc1MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgYmlvX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svYmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmlvLmM9MTk1PXN0YXRpYyB2b2lkIGJpb19mcmVlKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2Jpby5jLTIxNi0gKi9cXG5ibG9jay9iaW8uYzoyMTc6dm9pZCBiaW9faW5pdChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBiaW9fdmVjICp0YWJsZSxcXG5ibG9jay9iaW8uYy0yMTgtXFx0ICAgICAgdW5zaWduZWQgc2hvcnQgbWF4X3ZlY3MsIGJsa19vcGZfdCBvcGYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE3OjM3OjAwLjg2NjI2Nzg0M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODUwNTk4MTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFRhc2sqKlxuXG5BbHJpZ2h0LCB0aGUgZGlyZWN0aXZlIGlzIHRvIHN1bW1hcml6ZSBhbmQgaW50ZXJwcmV0IHRoZSB0aG91Z2h0IHByb2Nlc3MsIGVzc2VudGlhbGx5IHN0ZXBwaW5nIGludG8gdGhlIHNob2VzIG9mIHRoZSBpbmRpdmlkdWFsIGFuZCBkZXNjcmliaW5nIHdoYXQncyBoYXBwZW5pbmcgaW50ZXJuYWxseS4gVGhlIGZpcnN0LCBhbmQgbW9zdCBpbXBvcnRhbnQsIHBpZWNlIG9mIGluZm9ybWF0aW9uIGlzIHRoZSBkb2N1bWVudCwgY2FsbGVkIGBiaW9faW5pdGAuIE9rYXksIEkga25vdyB3aGF0IHRoYXQgbWVhbnMuIEknbSBnb2luZyB0byBzdGFydCBieSByZWFkaW5nIHRoZSBjb2RlLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MDAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE3OjM3OjAzLjcxNjg2ODM3N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svYmlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjE3OlxcdHZvaWQgYmlvX2luaXQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmlvX3ZlYyAqdGFibGUsXFxuIDIxODpcXHRcXHQgICAgICB1bnNpZ25lZCBzaG9ydCBtYXhfdmVjcywgYmxrX29wZl90IG9wZilcXG4gMjE5OlxcdHtcXG4gMjIwOlxcdFxcdGJpby1cXHUwMDNlYmlfbmV4dCA9IE5VTEw7XFxuIDIyMTpcXHRcXHRiaW8tXFx1MDAzZWJpX2JkZXYgPSBiZGV2O1xcbiAyMjI6XFx0XFx0YmlvLVxcdTAwM2ViaV9vcGYgPSBvcGY7XFxuIDIyMzpcXHRcXHRiaW8tXFx1MDAzZWJpX2ZsYWdzID0gMDtcXG4gMjI0OlxcdFxcdGJpby1cXHUwMDNlYmlfaW9wcmlvID0gMDtcXG4gMjI1OlxcdFxcdGJpby1cXHUwMDNlYmlfd3JpdGVfaGludCA9IDA7XFxuIDIyNjpcXHRcXHRiaW8tXFx1MDAzZWJpX3dyaXRlX3N0cmVhbSA9IDA7XFxuIDIyNzpcXHRcXHRiaW8tXFx1MDAzZWJpX3N0YXR1cyA9IDA7XFxuIDIyODpcXHRcXHRiaW8tXFx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCA9IDA7XFxuIDIyOTpcXHRcXHRiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gMDtcXG4gMjMwOlxcdFxcdGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplID0gMDtcXG4gMjMxOlxcdFxcdGJpby1cXHUwMDNlYmlfaXRlci5iaV9pZHggPSAwO1xcbiAyMzI6XFx0XFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX29mZnNldCA9IDA7XFxuIDIzMzpcXHRcXHRiaW8tXFx1MDAzZWJpX2VuZF9pbyA9IE5VTEw7XFxuIDIzNDpcXHRcXHRiaW8tXFx1MDAzZWJpX3ByaXZhdGUgPSBOVUxMO1xcbiAyMzU6XFx0I2lmZGVmIENPTkZJR19CTEtfQ0dST1VQXFxuIDIzNjpcXHRcXHRiaW8tXFx1MDAzZWJpX2Jsa2cgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNzozNzowMy43MTY5Nzc4NjdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI5MDUxNDc2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGJpX2J2ZWNfZ2FwX2JpdGAgSXNzdWUqKlxuXG5Pa2F5LCBzbyBgYmlvX2luaXRgICpleHBsaWNpdGx5KiBzZXRzIGBiaW8tXHUwMDNlYmlfYnZlY19nYXBfYml0YCB0byB6ZXJvLiBUaGF0J3MgdGhlIGJhc2VsaW5lLCB0aGUgaW5pdGlhbGl6YXRpb24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCB0aGlzICp3YXNuJ3QqIGhhcHBlbmluZywgdGhhdCBgYmlfYnZlY19nYXBfYml0YCB3YXMgZ2V0dGluZyBsZWZ0IHVuaW5pdGlhbGl6ZWQgc29tZXdoZXJlLiBCdXQgdGhhdCdzIHdyb25nLiBJdCdzICphbHdheXMqIGluaXRpYWxpemVkIHRvIHplcm8gZHVyaW5nIGFsbG9jYXRpb24uXG5cblRoZSByZWFsIHByb2JsZW0gbGllcyBpbiB0aGUgKmNsb25pbmcqIGFuZCAqc3BsaXR0aW5nKiBvcGVyYXRpb25zLiBJdCBsb29rcyBsaWtlIGBfX2Jpb19jbG9uZWAgd2Fzbid0IGNvcHlpbmcgdGhlIGBiaV9idmVjX2dhcF9iaXRgIGZyb20gdGhlIHNvdXJjZSBiaW8gdG8gdGhlIGNsb25lZCBiaW8uIEFuZCBgYmlvX3NwbGl0YCB3YXNuJ3QgcmVzZXR0aW5nIGl0IHRvIHplcm8gZm9yIHRoZSByZW1haW5pbmcgcGFydC4gVGhhdCdzIGEgbG9naWNhbCBmbGF3LiBUaGUgbWVtb3J5ICppcyogaW5pdGlhbGl6ZWQsIGJ1dCBpdCBjb3VsZCBlbmQgdXAgd2l0aCBhICpzdGFsZSogdmFsdWUsIGEgdmFsdWUgdGhhdCBkb2Vzbid0IHJlZmxlY3QgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGJpbyBhZnRlciB0aGUgY2xvbmluZyBvciBzcGxpdHRpbmcuIFRoaXMgY291bGQgYWJzb2x1dGVseSBsZWFkIHRvIGluY29ycmVjdCBETUEgbWFwcGluZyBvciBvdGhlciBjb3JydXB0aW9uLCBidXQgaXQgaXMgbm90IGEgZGlyZWN0IG1lbW9yeSBpbml0aWFsaXphdGlvbiBpc3N1ZS5cblxuV2FpdC4uLiBJIG5lZWQgdG8gY2hlY2sgbXkgYXNzdW1wdGlvbi4gQ2FuIGBfX2Jpb19jbG9uZWAgKmFjdHVhbGx5KiBiZSBjYWxsZWQgb24gYW4gdW5pbml0aWFsaXplZCBiaW8/IE5vLCB0aGF0IGNhbid0IGJlLiBgX19iaW9fY2xvbmVgIGlzIGNhbGxlZCBmcm9tIGBiaW9fYWxsb2NfY2xvbmVgLCB3aGljaCB1c2VzIGBiaW9fYWxsb2NfYmlvc2V0YCB3aGljaCB0aGVuICpjYWxscyogYGJpb19pbml0YC4gVGhlcmVmb3JlLCB0aGUgKm5ldyogYmlvIHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aCBgYmlfYnZlY19nYXBfYml0ID0gMGAuIFNvLCBgX19iaW9fY2xvbmVgIGNvcGllcyBmaWVsZHMgZnJvbSB0aGUgc291cmNlIGJpbyBhbmQsIGlmIGl0ICpkaWRuJ3QqIGNvcHkgYGJpX2J2ZWNfZ2FwX2JpdGAsIGl0IHdvdWxkIHNpbXBseSByZW1haW4gemVybyFcblxuT2theSwgc28gaXQncyBhICpsb2dpY2FsIGJ1ZyosIHB1cmUgYW5kIHNpbXBsZS4gRWl0aGVyIHRoZSBjbG9uZSBkb2Vzbid0IGluaGVyaXQgdGhlIGNvcnJlY3QgZ2FwIGJpdCwgb3IgdGhlIHNwbGl0IGJpbyBkb2Vzbid0IHJlc2V0IGl0LiBUaGlzIGRvZXNuJ3QgaW52b2x2ZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB0aG91Z2guIFRoZSBtZW1vcnkgKmlzKiBmdWxseSBpbml0aWFsaXplZC4gTm93LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBiaW9fcmVzZXRgIHRvIGVuc3VyZSBteSB1bmRlcnN0YW5kaW5nIGlzIGNvbXBsZXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDI3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6Mzc6MTAuMDA3NDk0NzQyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzA4MjUzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIGJpb19yZXNldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9iaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iaW8uYz0yNjA9RVhQT1JUX1NZTUJPTChiaW9faW5pdCk7XFxuLS1cXG5ibG9jay9iaW8uYy0yNzMtICovXFxuYmxvY2svYmlvLmM6Mjc0OnZvaWQgYmlvX3Jlc2V0KHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX29wZl90IG9wZilcXG5ibG9jay9iaW8uYy0yNzUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNzozNzoxMC4wNjA1ODE1OThaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzExMDUxNDA0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogQmlvX3Jlc2V0IEZpbGUqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFwiYmlvX3Jlc2V0XCIuLi4gdGhhdCBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIHN5c3RlbSByZXNldCBvciBpbml0aWFsaXphdGlvbiByZWxhdGVkIHRvIGJpb2xvZ2ljYWwgZGF0YSBvciBhIGJpb2xvZ2ljYWwgcHJvY2Vzcy4gVGhlIG5hbWluZyBjb252ZW50aW9uIGxpa2VseSBpbmRpY2F0ZXMgYSBzcGVjaWZpYyBtb2R1bGUgb3IgY29tcG9uZW50LiBJJ20gYXNzdW1pbmcgdGhpcyBpc24ndCBzb21lIGdlbmVyaWMgc2NyaXB0OyB0aGUgY29udGV4dCBpcyBsaWtlbHkgbW9yZSBzcGVjaWFsaXplZC4gSSBpbW1lZGlhdGVseSBzdGFydCBtZW50YWxseSBjYXRhbG9naW5nIHdoYXQgdGhpcyBjb3VsZCBhcHBseSB0bzogcGVyaGFwcyBhIGRhdGEgcGlwZWxpbmUgcmVzZXR0aW5nIGEgYmlvbG9naWNhbCBkYXRhYmFzZT8gTWF5YmUgaXQncyBhIHNjcmlwdCB0aGF0IGNsZWFucyBhIGJpb2luZm9ybWF0aWNzIGVudmlyb25tZW50IGFmdGVyIGEgcGFydGljdWxhciBydW4/IEl0IGNvdWxkIGV2ZW4gYmUgYSByZXNldCBwcm9jZWR1cmUgdGllZCB0byB0aGUgb3BlcmF0aW9uIG9mIGEgcGllY2Ugb2YgZXhwZXJpbWVudGFsIGFwcGFyYXR1cy4gTXkgZm9jdXMgbm93IGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW1wYWN0cyBvZiB3aGF0ZXZlciBpcyBjb250YWluZWQgd2l0aGluIHRoYXQgYGJpb19yZXNldGAgZmlsZS4gVGltZSB0byBkaWcgaW4gYW5kIGdldCB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzY5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNzozNzoxMy4xNzEwOTc5MTdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL2Jpby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3NCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3NDpcXHR2b2lkIGJpb19yZXNldChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19vcGZfdCBvcGYpXFxuIDI3NTpcXHR7XFxuIDI3NjpcXHRcXHRzdHJ1Y3QgYmlvX3ZlYyAgICAgICAgICAqYnYgPSBiaW8tXFx1MDAzZWJpX2lvX3ZlYztcXG4gMjc3OlxcdFxcbiAyNzg6XFx0XFx0YmlvX3VuaW5pdChiaW8pO1xcbiAyNzk6XFx0XFx0bWVtc2V0KGJpbywgMCwgQklPX1JFU0VUX0JZVEVTKTtcXG4gMjgwOlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNmJpby1cXHUwMDNlX19iaV9yZW1haW5pbmcsIDEpO1xcbiAyODE6XFx0XFx0YmlvLVxcdTAwM2ViaV9pb192ZWMgPSBidjtcXG4gMjgyOlxcdFxcdGJpby1cXHUwMDNlYmlfYmRldiA9IGJkZXY7XFxuIDI4MzpcXHRcXHRpZiAoYmlvLVxcdTAwM2ViaV9iZGV2KVxcbiAyODQ6XFx0XFx0XFx0YmlvX2Fzc29jaWF0ZV9ibGtnKGJpbyk7XFxuIDI4NTpcXHRcXHRiaW8tXFx1MDAzZWJpX29wZiA9IG9wZjtcXG4gMjg2OlxcdH1cXG4gMjg3OlxcdEVYUE9SVF9TWU1CT0woYmlvX3Jlc2V0KTtcXG4gMjg4OlxcdFxcbiAyODk6XFx0LyoqXFxuIDI5MDpcXHQgKiBiaW9fcmV1c2UgLSByZXVzZSBhIGJpbyB3aXRoIHRoZSBwYXlsb2FkIGxlZnQgaW50YWN0XFxuIDI5MTpcXHQgKiBAYmlvOlxcdGJpbyB0byByZXVzZVxcbiAyOTI6XFx0ICogQG9wZjpcXHRvcGVyYXRpb24gYW5kIGZsYWdzIGZvciB0aGUgbmV4dCBJL09cXG4gMjkzOlxcdCAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE3OjM3OjEzLjE3MTI3MTY5N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzA5NTUwNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgYmlfYnZlY19nYXBfYml0YCBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgcmV2b2x2ZXMgYXJvdW5kIGBiaV9idmVjX2dhcF9iaXRgIHdpdGhpbiB0aGUgYHN0cnVjdCBiaW9gLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIHN5c3RlbSB1c2VzIGBiaW9fcmVzZXRgIHRvIGluaXRpYWxpemUgdGhpcyBzdHJ1Y3QsIHVzaW5nIGBtZW1zZXRgIHRvIHplcm8gb3V0IGEgcG9ydGlvbiBvZiB0aGUgc3RydWN0dXJlIHVwIHRvIGBCSU9fUkVTRVRfQllURVNgLCB3aGljaCBpcyBkZWZpbmVkIGFzIGBvZmZzZXRvZihzdHJ1Y3QgYmlvLCBiaV9tYXhfdmVjcylgLiBCZWNhdXNlIGBiaV9idmVjX2dhcF9iaXRgIHByZWNlZGVzIGBiaV9tYXhfdmVjc2AgaW4gdGhlIHN0cnVjdHVyZSwgdGhpcyBlZmZlY3RpdmVseSB6ZXJvcyBpdCBvdXQgZHVyaW5nIHJlc2V0LiBUaGlzIG1lYW5zIHRoYXQsIGF0IGxlYXN0IGZyb20gYW4gaW5pdGlhbGl6YXRpb24gcGVyc3BlY3RpdmUsIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIGBiaV9idmVjX2dhcF9iaXRgIHNob3VsZCAqYWx3YXlzKiBiZSBpbml0aWFsaXplZCwgYXQgbGVhc3QgaW5pdGlhbGx5LlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGFkZHJlc3NlcyBhICpsb2dpY2FsKiBmbGF3LCBzcGVjaWZpY2FsbHkgaW4gaG93IGBiaV9idmVjX2dhcF9iaXRgIGlzIGhhbmRsZWQgZHVyaW5nIGJpbyBjbG9uaW5nICh1c2luZyBgX19iaW9fY2xvbmVgKSBhbmQgc3BsaXR0aW5nICh1c2luZyBgYmlvX3NwbGl0YCkuIEl0J3MgYWJvdXQgZW5zdXJpbmcgdGhpcyBiaXQsIHdoaWNoIHNpZ25pZmllcyB0aGUgc21hbGxlc3Qgc2V0IGJpdCBpbiB0aGUgb2Zmc2V0IGJldHdlZW4gYGJpX2lvX3ZlY3NgIGZvciBETUEgb3B0aW1pemF0aW9uLCBpcyBjb3JyZWN0bHkgcHJvcGFnYXRlZCBvciBjbGVhcmVkIGluIHRoZXNlIG9wZXJhdGlvbnMuIElmIGl0J3Mgbm90IGhhbmRsZWQgY29ycmVjdGx5LCB3ZSBjb3VsZCBlbmQgdXAgd2l0aCBpbmNvcnJlY3QgRE1BIG1hcHBpbmdzIG9yIGZ1bmt5IGJlaGF2aW9yIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIuXG5cbk5vdywgY29uY2VybmluZyB0aGUgYE5lZWRzS01TQU5gIHRhZywgbXkgY29uY2x1c2lvbiBpcyBpdCdzIGluY29ycmVjdCBoZXJlLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0ICp1bmluaXRpYWxpemVkKiBtZW1vcnkgcmVhZHMuIFRoZSBjb2RlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgYGJpX2J2ZWNfZ2FwX2JpdGAgdG8gemVyby4gQW55IG1lbW9yeSBjb3JydXB0aW9uIGFyaXNpbmcgZnJvbSB0aGUgaW5jb3JyZWN0IGhhbmRsaW5nIG9mIHRoaXMgYml0IHdvdWxkIGxpa2VseSBtYW5pZmVzdCBhcyBiYWQgRE1BLCBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcywgb3Igc29tZXRoaW5nIHNpbWlsYXIuIFRoaXMgd291bGQsIEkgYmVsaWV2ZSwgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIG90aGVyIG1vcmUgZ2VuZXJhbCBtZW1vcnkgc2FmZXR5IHRvb2xzLCBub3QgS01TQU4uIFRoZSBsb2dpYyBlcnJvciBtaWdodCBsZWFkIHRvIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uLCBidXQgaXQgaXMgbm90IGJlY2F1c2UgdGhlIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLCBidXQgYmVjYXVzZSBvZiBpbmNvcnJlY3QgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MjAsIk91dHB1dFRva2VucyI6MjAzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTc6Mzc6MjEuODgwODQ2NTQ1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19iaW9fY2xvbmVgIGFuZCBgYmlvX3NwbGl0YCB0byBwcm9wZXJseSBwcm9wYWdhdGUgYW5kIHJlc2V0IHRoZSBgYmlfYnZlY19nYXBfYml0YCBmaWVsZCBvZiBgc3RydWN0IGJpb2AuIFRoaXMgZmllbGQgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgbG93ZXN0IHNldCBiaXQgaW4gYW55IGFkZHJlc3Mgb2Zmc2V0IGJldHdlZW4gYWxsIGBiaV9pb192ZWNzYCBmb3IgRE1BIG9wdGltaXphdGlvbi4gV2hlbiBhIGJpbyBpcyBhbGxvY2F0ZWQgb3IgcmVzZXQsIGBiaV9idmVjX2dhcF9iaXRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCAodmlhIGBiaW9faW5pdGAgb3IgYG1lbXNldGAgaW4gYGJpb19yZXNldGApLiBUaGVyZWZvcmUsIHRoZSBpc3N1ZSBiZWluZyBmaXhlZCBpcyBhIGxvZ2ljYWwgYnVnIHdoZXJlIHRoZSBnYXAgYml0IGlzIGVpdGhlciBsb3N0IGR1cmluZyBjbG9uaW5nIG9yIGluY29ycmVjdGx5IHJldGFpbmVkIGR1cmluZyBzcGxpdHRpbmcsIHJhdGhlciB0aGFuIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQuIEJlY2F1c2UgdGhlIGZpZWxkIGlzIGFsd2F5cyBpbml0aWFsaXplZCwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4gQW55IHJlc3VsdGluZyBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyBkdWUgdG8gaW5jb3JyZWN0IERNQSBtYXBwaW5ncyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fYmlvX2Nsb25lYCBhbmQgYGJpb19zcGxpdGAgdG8gcHJvcGVybHkgcHJvcGFnYXRlIGFuZCByZXNldCB0aGUgYGJpX2J2ZWNfZ2FwX2JpdGAgZmllbGQgb2YgYHN0cnVjdCBiaW9gLiBUaGlzIGZpZWxkIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGxvd2VzdCBzZXQgYml0IGluIGFueSBhZGRyZXNzIG9mZnNldCBiZXR3ZWVuIGFsbCBgYmlfaW9fdmVjc2AgZm9yIERNQSBvcHRpbWl6YXRpb24uIFdoZW4gYSBiaW8gaXMgYWxsb2NhdGVkIG9yIHJlc2V0LCBgYmlfYnZlY19nYXBfYml0YCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAgKHZpYSBgYmlvX2luaXRgIG9yIGBtZW1zZXRgIGluIGBiaW9fcmVzZXRgKS4gVGhlcmVmb3JlLCB0aGUgaXNzdWUgYmVpbmcgZml4ZWQgaXMgYSBsb2dpY2FsIGJ1ZyB3aGVyZSB0aGUgZ2FwIGJpdCBpcyBlaXRoZXIgbG9zdCBkdXJpbmcgY2xvbmluZyBvciBpbmNvcnJlY3RseSByZXRhaW5lZCBkdXJpbmcgc3BsaXR0aW5nLCByYXRoZXIgdGhhbiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLiBCZWNhdXNlIHRoZSBmaWVsZCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuIEFueSByZXN1bHRpbmcgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgZHVlIHRvIGluY29ycmVjdCBETUEgbWFwcGluZ3Mgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmwq5[1] Phase: Succeeded StartedAt: 2026-08-17 17:37:33 +0000 UTC FinishedAt: 2026-08-17 17:37:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmwq5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-17 17:37:33 +0000 UTC FinishedAt: 2026-08-17 17:37:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmwq5[2] Phase: Succeeded StartedAt: 2026-08-17 17:37:33 +0000 UTC FinishedAt: 2026-08-17 21:19:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 17:37:33 +0000 UTC FinishedAt: 2026-08-17 21:19:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 17:37:33 +0000 UTC FinishedAt: 2026-08-17 17:37:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 17:37:33 +0000 UTC FinishedAt: 2026-08-17 17:37:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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-workflowlmwq5/series-workflowlmwq5-convert-artifact-4075026982/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 17:37:43 +0000 UTC FinishedAt: 2026-08-17 17:53:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 17:37:43 +0000 UTC FinishedAt: 2026-08-17 17:53:51 +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:*02645ed0-397e-4e1a-9a2c-6360a51ca0b9,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-workflowlmwq5/series-workflowlmwq5-convert-artifact-4075026982/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": "5f39e156-8f44-4edd-b7f8-9cd42b6be957", "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-workflowlmwq5/series-workflowlmwq5-build-action-615127740/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 17:37:43 +0000 UTC FinishedAt: 2026-08-17 17:53:41 +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:*02645ed0-397e-4e1a-9a2c-6360a51ca0b9,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-workflowlmwq5/series-workflowlmwq5-convert-artifact-4075026982/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": "5f39e156-8f44-4edd-b7f8-9cd42b6be957", "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-workflowlmwq5/series-workflowlmwq5-build-action-615127740/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 17:53:51 +0000 UTC FinishedAt: 2026-08-17 17:53:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 17:53:51 +0000 UTC FinishedAt: 2026-08-17 17:53:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 17:53:51 +0000 UTC FinishedAt: 2026-08-17 17:54:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 17:53:51 +0000 UTC FinishedAt: 2026-08-17 17:53:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-workflowlmwq5/series-workflowlmwq5-convert-artifact-1128168825/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 17:54:01 +0000 UTC FinishedAt: 2026-08-17 17:56:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 17:54:01 +0000 UTC FinishedAt: 2026-08-17 17:56:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5f39e156-8f44-4edd-b7f8-9cd42b6be957,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-workflowlmwq5/series-workflowlmwq5-build-action-615127740/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-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 17:56:15 +0000 UTC FinishedAt: 2026-08-17 17:56:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 17:56:15 +0000 UTC FinishedAt: 2026-08-17 17:56:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 17:56:15 +0000 UTC FinishedAt: 2026-08-17 18:12:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 17:56:15 +0000 UTC FinishedAt: 2026-08-17 18:12: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:*02645ed0-397e-4e1a-9a2c-6360a51ca0b9,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-workflowlmwq5/series-workflowlmwq5-convert-artifact-1128168825/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": "580b1df0-ef94-494a-b050-2ac355deab38", "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-workflowlmwq5/series-workflowlmwq5-build-action-110772053/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 17:56:15 +0000 UTC FinishedAt: 2026-08-17 18:12:20 +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:*02645ed0-397e-4e1a-9a2c-6360a51ca0b9,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-workflowlmwq5/series-workflowlmwq5-convert-artifact-1128168825/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": "580b1df0-ef94-494a-b050-2ac355deab38", "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-workflowlmwq5/series-workflowlmwq5-build-action-110772053/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 18:12:30 +0000 UTC FinishedAt: 2026-08-17 18:12:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 18:12:30 +0000 UTC FinishedAt: 2026-08-17 18:12:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 18:12:30 +0000 UTC FinishedAt: 2026-08-17 18:14:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 18:12:30 +0000 UTC FinishedAt: 2026-08-17 18:14:25 +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:*580b1df0-ef94-494a-b050-2ac355deab38,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-workflowlmwq5/series-workflowlmwq5-build-action-110772053/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-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 18:14:35 +0000 UTC FinishedAt: 2026-08-17 21:19:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 18:14:35 +0000 UTC FinishedAt: 2026-08-17 21:19:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*5f39e156-8f44-4edd-b7f8-9cd42b6be957,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*580b1df0-ef94-494a-b050-2ac355deab38,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-workflowlmwq5/series-workflowlmwq5-build-action-615127740/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-workflowlmwq5/series-workflowlmwq5-build-action-110772053/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 18:14:35 +0000 UTC FinishedAt: 2026-08-17 18:14:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 18:14:35 +0000 UTC FinishedAt: 2026-08-17 18:14:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlmwq5/series-workflowlmwq5-convert-artifact-1723870702/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 18:14:35 +0000 UTC FinishedAt: 2026-08-17 18:14:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 18:14:35 +0000 UTC FinishedAt: 2026-08-17 18:14:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 18:14:35 +0000 UTC FinishedAt: 2026-08-17 18:14:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 18:14:45 +0000 UTC FinishedAt: 2026-08-17 21:19:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmwq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_alloc_clone","bio_init_clone","bio_split","blk_rq_append_bio","bio_split_io_at","bio_seg_gap","blk_mq_submit_bio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"84213403e316cd75061785ba152941c6d5b7e97d","config_name":"upstream-apparmor-kasan.config","series_id":"5c4938d2-7dd4-4742-928f-5de8bfc9fbd7","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-17 18:14:45 +0000 UTC FinishedAt: 2026-08-17 21:19:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5f39e156-8f44-4edd-b7f8-9cd42b6be957,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*580b1df0-ef94-494a-b050-2ac355deab38,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-workflowlmwq5/series-workflowlmwq5-build-action-615127740/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-workflowlmwq5/series-workflowlmwq5-build-action-110772053/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-workflowlmwq5/series-workflowlmwq5-convert-artifact-1723870702/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,}