Name: series-workflowvlqbn Phase: Succeeded StartedAt: 2026-09-05 02:39:46 +0000 UTC FinishedAt: 2026-09-05 04:22:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlqbn[0] Phase: Succeeded StartedAt: 2026-09-05 02:39:46 +0000 UTC FinishedAt: 2026-09-05 02:43:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlqbn[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 02:39:46 +0000 UTC FinishedAt: 2026-09-05 02:43:41 +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": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATH9K_HTC", "ATH9K_HTC_DEBUGFS", "ATH9K_COMMON_SPECTRAL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATH9K_HTC", "ATH9K_HTC_DEBUGFS", "ATH9K_COMMON_SPECTRAL" ], "series_id": "2da910d4-c592-40bc-af85-81ad73ef8c2b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ath9k_rx_tasklet", "ath9k_htc_rxep", "ath_cmn_process_fft" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDlLX0hUQyYjMzQ7LAogICAgJiMzNDtBVEg5S19IVENfREVCVUdGUyYjMzQ7LAogICAgJiMzNDtBVEg5S19DT01NT05fU1BFQ1RSQUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthdGg5a19yeF90YXNrbGV0JiMzNDssCiAgICAmIzM0O2F0aDlrX2h0Y19yeGVwJiMzNDssCiAgICAmIzM0O2F0aF9jbW5fcHJvY2Vzc19mZnQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHNwZWN0cmFsIHNjYW4gc2FtcGxlIGxlbmd0aCB2YWxpZGF0aW9uIHZpYSBhdGg5a19odGNfaXNfc3BlY3RyYWxfc2FtcGxlX2xlbigpIGFuZCBmb3J3YXJkcyBDUkMtZXJyb3JlZCBmcmFtZXMgd2l0aCBtYXRjaGluZyBsZW5ndGhzIHRvIGF0aF9jbW5fcHJvY2Vzc19mZnQoKSBpbiBhdGg5a19yeF9wcmVwYXJlKCkuIEFsbCB2YXJpYWJsZXMgYW5kIHN0cnVjdHVyZSBmaWVsZHMgdXNlZCAoZS5nLiwgcnNfZGF0YWxlbiwgcnhfc3RhdHMucnNfcGh5ZXJyLCBjaGFuX3R5cGUsIGZmdF9sZW4pIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMsIHBlcmZvcm0gYW55IGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG9yIGV4cG9zZSBwYWRkaW5nL3VuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgKHN1Y2ggYXMgYnVmZmVyIGJvdW5kcyBvciBwb2ludGVyIGhhbmRsaW5nKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzcGVjdHJhbCBGRlQgc2FtcGxlIGRldGVjdGlvbiBmb3IgQ1JDLWVycm9yZWQgZnJhbWVzIGluIHRoZSBSWCBwcm9jZXNzaW5nIHBhdGggKGF0aDlrX3J4X3ByZXBhcmUpIG9mIHRoZSBhdGg5a19odGMgVVNCIHdpcmVsZXNzIGRyaXZlciwgZGlyZWN0aW5nIHF1YWxpZnlpbmcgZnJhbWVzIGludG8gYXRoX2Ntbl9wcm9jZXNzX2ZmdC4gQmVjYXVzZSBhdGg5a19odGMgaXMgYSBVU0IgV2ktRmkgZHJpdmVyIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24sIHRoaXMgdG91Y2hlcyByZWFjaGFibGUga2VybmVsIGNvZGUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDljODcxMmFkMTQxZWM3NTBmYjFmODVkZmFkM2ZjN2ExYmU2ODhmMjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDAyOjQxOjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguY1xuaW5kZXggYmVkN2VhMjQyNWEwZS4uZjIxY2ZjMDM0MjZiMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jXG5AQCAtOTY5LDYgJiM0Mzs5NjksMzIgQEAgc3RhdGljIHZvaWQgcnhfc3RhdHVzX2h0Y190b19hdGgoc3RydWN0IGF0aF9yeF9zdGF0dXMgKnJ4X3N0YXRzLFxuIFx0Y29udmVydF9odGNfZmxhZyhyeF9zdGF0cywgcnhzdGF0dXMpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogVGhlIGZpcm13YXJlIHJlcG9ydHMgYSBmcmFtZSB0aGF0IGZhaWxlZCBpdHMgQ1JDIGFzIGEgQ1JDIGVycm9yIGV2ZW4gd2hlblxuJiM0MzsgKiB0aGUgUEhZIGVycm9yIGJpdCBpcyBzZXQgYXMgd2VsbCwgc28gdW5kZXIgaW50ZXJmZXJlbmNlIHNwZWN0cmFsIHNhbXBsZXNcbiYjNDM7ICogcmVhY2ggdGhlIGhvc3QgYXMgQ1JDIGVycm9ycy4gQSBzYW1wbGUgaXMgcmVjb2duaXNhYmxlIGJ5IGl0cyBzaXplOiB0aGVcbiYjNDM7ICogRkZUIHJlcG9ydCBsZW5ndGggZm9yIHRoZSBjaGFubmVsIHdpZHRoLCBwbHVzIG9yIG1pbnVzIHRoZSB0d28gYnl0ZXMgdGhlXG4mIzQzOyAqIE1BQyBtYXkgYWRkIG9yIGRyb3AuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCBhdGg5a19odGNfaXNfc3BlY3RyYWxfc2FtcGxlX2xlbihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHUxNiBsZW4pXG4mIzQzO3tcbiYjNDM7XHRlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5fdHlwZTtcbiYjNDM7XHR1MTYgZmZ0X2xlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlc3BlY19wcml2LnNwZWN0cmFsX21vZGUgPT0gU1BFQ1RSQUxfRElTQUJMRUQpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGNoYW5fdHlwZSA9IGNmZzgwMjExX2dldF9jaGFuZGVmX3R5cGUoXHUwMDI2cHJpdi1cdTAwM2Vody1cdTAwM2Vjb25mLmNoYW5kZWYpO1xuJiM0MztcdGlmIChjaGFuX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUyB8fFxuJiM0MztcdCAgICBjaGFuX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTKVxuJiM0MztcdFx0ZmZ0X2xlbiA9IFNQRUNUUkFMX0hUMjBfNDBfVE9UQUxfREFUQV9MRU47XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZmZ0X2xlbiA9IFNQRUNUUkFMX0hUMjBfVE9UQUxfREFUQV9MRU47XG4mIzQzO1xuJiM0MztcdHJldHVybiBsZW4gJiM0MzsgMSBcdTAwM2U9IGZmdF9sZW4gXHUwMDI2XHUwMDI2IGxlbiBcdTAwM2M9IGZmdF9sZW4gJiM0MzsgMjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgYm9vbCBhdGg5a19yeF9wcmVwYXJlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbiBcdFx0XHQgICAgIHN0cnVjdCBhdGg5a19odGNfcnhidWYgKnJ4YnVmLFxuIFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cylcbkBAIC0xMDUyLDYgJiM0MzsxMDc4LDE4IEBAIHN0YXRpYyBib29sIGF0aDlrX3J4X3ByZXBhcmUoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuIFx0XHRnb3RvIHJ4X25leHQ7XG4gXHR9XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBMZXQgdGhlIEZGVCBwYXJzZXIgZGVjaWRlIHdoZXRoZXIgYSBDUkMgZXJyb3Igb2Ygc2FtcGxlIHNpemUgaXMgYVxuJiM0MztcdCAqIHNhbXBsZTsgaXQgdmFsaWRhdGVzIHRoZSBjb250ZW50cyBhbmQgcmV0dXJucyAwIGZvciBhbnl0aGluZyBlbHNlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseShyeF9zdGF0cy5yc19zdGF0dXMgXHUwMDI2IEFUSDlLX1JYRVJSX0NSQykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKHByaXYsIHJzX2RhdGFsZW4pKSB7XG4mIzQzO1x0XHRyeF9zdGF0cy5yc19waHllcnIgPSBBVEg5S19QSFlFUlJfUkFEQVI7XG4mIzQzO1x0XHRpZiAoYXRoX2Ntbl9wcm9jZXNzX2ZmdChcdTAwMjZwcml2LVx1MDAzZXNwZWNfcHJpdiwgaGRyLCBcdTAwMjZyeF9zdGF0cyxcbiYjNDM7XHRcdFx0XHRcdHJ4X3N0YXR1cy1cdTAwM2VtYWN0aW1lKSlcbiYjNDM7XHRcdFx0Z290byByeF9uZXh0O1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoIWF0aDlrX2Ntbl9yeF9hY2NlcHQoY29tbW9uLCBoZHIsIHJ4X3N0YXR1cywgXHUwMDI2cnhfc3RhdHMsXG4gXHRcdFx0XHUwMDI2ZGVjcnlwdF9lcnJvciwgcHJpdi1cdTAwM2VyeGZpbHRlcikpXG4gXHRcdGdvdG8gcnhfbmV4dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBVEg5S19IVEMmIzM0OywKICAgICYjMzQ7QVRIOUtfSFRDX0RFQlVHRlMmIzM0OywKICAgICYjMzQ7QVRIOUtfQ09NTU9OX1NQRUNUUkFMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXRoOWtfcnhfdGFza2xldCYjMzQ7LAogICAgJiMzNDthdGg5a19odGNfcnhlcCYjMzQ7LAogICAgJiMzNDthdGhfY21uX3Byb2Nlc3NfZmZ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3BlY3RyYWwgRkZUIHNhbXBsZSBkZXRlY3Rpb24gZm9yIENSQy1lcnJvcmVkIGZyYW1lcyBpbiB0aGUgUlggcHJvY2Vzc2luZyBwYXRoIChhdGg5a19yeF9wcmVwYXJlKSBvZiB0aGUgYXRoOWtfaHRjIFVTQiB3aXJlbGVzcyBkcml2ZXIsIGRpcmVjdGluZyBxdWFsaWZ5aW5nIGZyYW1lcyBpbnRvIGF0aF9jbW5fcHJvY2Vzc19mZnQuIEJlY2F1c2UgYXRoOWtfaHRjIGlzIGEgVVNCIFdpLUZpIGRyaXZlciByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uLCB0aGlzIHRvdWNoZXMgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5Yzg3MTJhZDE0MWVjNzUwZmIxZjg1ZGZhZDNmYzdhMWJlNjg4ZjI0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAwMjo0MTo0NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYwppbmRleCBiZWQ3ZWEyNDI1YTBlLi5mMjFjZmMwMzQyNmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jCkBAIC05NjksNiAmIzQzOzk2OSwzMiBAQCBzdGF0aWMgdm9pZCByeF9zdGF0dXNfaHRjX3RvX2F0aChzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnhfc3RhdHMsCiAJY29udmVydF9odGNfZmxhZyhyeF9zdGF0cywgcnhzdGF0dXMpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBUaGUgZmlybXdhcmUgcmVwb3J0cyBhIGZyYW1lIHRoYXQgZmFpbGVkIGl0cyBDUkMgYXMgYSBDUkMgZXJyb3IgZXZlbiB3aGVuCiYjNDM7ICogdGhlIFBIWSBlcnJvciBiaXQgaXMgc2V0IGFzIHdlbGwsIHNvIHVuZGVyIGludGVyZmVyZW5jZSBzcGVjdHJhbCBzYW1wbGVzCiYjNDM7ICogcmVhY2ggdGhlIGhvc3QgYXMgQ1JDIGVycm9ycy4gQSBzYW1wbGUgaXMgcmVjb2duaXNhYmxlIGJ5IGl0cyBzaXplOiB0aGUKJiM0MzsgKiBGRlQgcmVwb3J0IGxlbmd0aCBmb3IgdGhlIGNoYW5uZWwgd2lkdGgsIHBsdXMgb3IgbWludXMgdGhlIHR3byBieXRlcyB0aGUKJiM0MzsgKiBNQUMgbWF5IGFkZCBvciBkcm9wLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKJiM0MzsJCQkJCSAgICAgdTE2IGxlbikKJiM0Mzt7CiYjNDM7CWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbl90eXBlOwomIzQzOwl1MTYgZmZ0X2xlbjsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3NwZWNfcHJpdi5zcGVjdHJhbF9tb2RlID09IFNQRUNUUkFMX0RJU0FCTEVEKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwljaGFuX3R5cGUgPSBjZmc4MDIxMV9nZXRfY2hhbmRlZl90eXBlKCZhbXA7cHJpdi0mZ3Q7aHctJmd0O2NvbmYuY2hhbmRlZik7CiYjNDM7CWlmIChjaGFuX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUyB8fAomIzQzOwkgICAgY2hhbl90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwUExVUykKJiM0MzsJCWZmdF9sZW4gPSBTUEVDVFJBTF9IVDIwXzQwX1RPVEFMX0RBVEFfTEVOOwomIzQzOwllbHNlCiYjNDM7CQlmZnRfbGVuID0gU1BFQ1RSQUxfSFQyMF9UT1RBTF9EQVRBX0xFTjsKJiM0MzsKJiM0MzsJcmV0dXJuIGxlbiAmIzQzOyAxICZndDs9IGZmdF9sZW4gJmFtcDsmYW1wOyBsZW4gJmx0Oz0gZmZ0X2xlbiAmIzQzOyAyOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGF0aDlrX3J4X3ByZXBhcmUoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAogCQkJICAgICBzdHJ1Y3QgYXRoOWtfaHRjX3J4YnVmICpyeGJ1ZiwKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKQEAgLTEwNTIsNiAmIzQzOzEwNzgsMTggQEAgc3RhdGljIGJvb2wgYXRoOWtfcnhfcHJlcGFyZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCiAJCWdvdG8gcnhfbmV4dDsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogTGV0IHRoZSBGRlQgcGFyc2VyIGRlY2lkZSB3aGV0aGVyIGEgQ1JDIGVycm9yIG9mIHNhbXBsZSBzaXplIGlzIGEKJiM0MzsJICogc2FtcGxlOyBpdCB2YWxpZGF0ZXMgdGhlIGNvbnRlbnRzIGFuZCByZXR1cm5zIDAgZm9yIGFueXRoaW5nIGVsc2UuCiYjNDM7CSAqLwomIzQzOwlpZiAodW5saWtlbHkocnhfc3RhdHMucnNfc3RhdHVzICZhbXA7IEFUSDlLX1JYRVJSX0NSQykgJmFtcDsmYW1wOwomIzQzOwkgICAgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW4ocHJpdiwgcnNfZGF0YWxlbikpIHsKJiM0MzsJCXJ4X3N0YXRzLnJzX3BoeWVyciA9IEFUSDlLX1BIWUVSUl9SQURBUjsKJiM0MzsJCWlmIChhdGhfY21uX3Byb2Nlc3NfZmZ0KCZhbXA7cHJpdi0mZ3Q7c3BlY19wcml2LCBoZHIsICZhbXA7cnhfc3RhdHMsCiYjNDM7CQkJCQlyeF9zdGF0dXMtJmd0O21hY3RpbWUpKQomIzQzOwkJCWdvdG8gcnhfbmV4dDsKJiM0MzsJfQomIzQzOwogCWlmICghYXRoOWtfY21uX3J4X2FjY2VwdChjb21tb24sIGhkciwgcnhfc3RhdHVzLCAmYW1wO3J4X3N0YXRzLAogCQkJJmFtcDtkZWNyeXB0X2Vycm9yLCBwcml2LSZndDtyeGZpbHRlcikpCiAJCWdvdG8gcnhfbmV4dDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUyNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIGl0JiMzOTtzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bGwgZG8gaXMgcmVhbGx5IGV4YW1pbmUgdGhlIGRpZmYg4oCTIHRoZSBtb2RpZmllZCBmaWxlcyB0ZWxsIGEgc3RvcnkuIEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmNgLiBSaWdodCBhd2F5LCB0aGF0IHJhaXNlcyBhIGZldyBxdWVzdGlvbnMuIElzIHRoaXMgYSBVU0Igd2lyZWxlc3MgZHJpdmVyLCBvciBQQ0ksIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIHF1aWNrIGNoZWNrIHNob3VsZCBjb25maXJtIG15IHN1c3BpY2lvbnMuIEFoLCBpdCYjMzk7cyB0aGUgQXRoZXJvcyBVU0IgODAyLjExbiB3aXJlbGVzcyBkZXZpY2UgZHJpdmVyLCBIVEMgbWVhbmluZyBIb3N0IFRhcmdldCBDb21tdW5pY2F0aW9uIG92ZXIgVVNCLiBOb3csIGNhbiB0aGlzIHRoaW5nIGJlIGVtdWxhdGVkIHRocm91Z2ggc3l6a2FsbGVyJiMzOTtzIFVTQiBjYXBhYmlsaXRpZXM/IFRoaW5raW5nIGFib3V0IHN5emthbGxlciYjMzk7cyBVU0IgZnV6emluZywgaXQgaGFzIGZ1bmN0aW9ucyBsaWtlIGBzeXpfdXNiX2Nvbm5lY3RgIC0gdGhhdCYjMzk7cyBhIGdvb2Qgc2lnbi4gQW5kIGdpdmVuIHRoYXQgdGhpcyBpcyBhIFVTQiBkcml2ZXIgKGBBVEg5S19IVENgKSwgdGhlIGFuc3dlciBpcyB5ZXMsIHRoaXMgaXMgcHJvbWlzaW5nLiBCdXQgSSBzaG91bGQgY29uZmlybSB3aXRoIHRoZSBLY29uZmlnIGFuZCBvdGhlciBmaWxlcyB0byBjb25maXJtIHdoYXQgSSBzdXNwZWN0LiBJJiMzOTtsbCBuZWVkIHRvIHJ1biBzb21ldGhpbmcgbGlrZSBncmVwcGVyIG9yIHF1aWNrbHkgcmVhZCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlIHVuZGVyIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBVEg5S19IVEMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc9MTM9Y29uZmlnIEFUSDlLX0JUQ09FWF9TVVBQT1JUXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNC1cdGJvb2wgXCYjMzQ7QXRoZXJvcyBibHVldG9vdGggY29leGlzdGVuY2Ugc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTU6XHRkZXBlbmRzIG9uIChBVEg5SyB8fCBBVEg5S19IVEMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNi1cdGRlZmF1bHQgeVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnPTE1Nj1jb25maWcgQVRIOUtfUENJX05PX0VFUFJPTVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE3MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjE3Mjpjb25maWcgQVRIOUtfSFRDXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNzMtXHR0cmlzdGF0ZSBcJiMzNDtBdGhlcm9zIEhUQyBiYXNlZCB3aXJlbGVzcyBjYXJkcyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTg2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTg3OmNvbmZpZyBBVEg5S19IVENfREVCVUdGU1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTg4LVx0Ym9vbCBcJiMzNDtBdGhlcm9zIGF0aDlrX2h0YyBkZWJ1Z2dpbmdcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjE4OTpcdGRlcGVuZHMgb24gQVRIOUtfSFRDIFx1MDAyNlx1MDAyNiBERUJVR19GU1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTkwLVx0c2VsZWN0IEFUSDlLX0NPTU1PTl9ERUJVR1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnPTIwNj1jb25maWcgQVRIOUtfQ09NTU9OX1NQRUNUUkFMXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0yMDctXHRib29sIFwmIzM0O0F0aGVyb3MgYXRoOWsvYXRoOWtfaHRjIHNwZWN0cmFsIHNjYW4gc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MjA4Olx0ZGVwZW5kcyBvbiBBVEg5S19ERUJVR0ZTIHx8IEFUSDlLX0hUQ19ERUJVR0ZTXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0yMDktXHRzZWxlY3QgUkVMQVlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGU9Njg9YXRoOWtfaHRjLXkgJiM0Mzs9XHRodGNfaHN0Lm8gXFxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGUtNzYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGU6Nzc6YXRoOWtfaHRjLSQoQ09ORklHX0FUSDlLX0hUQ19ERUJVR0ZTKSAmIzQzOz0gaHRjX2Rydl9kZWJ1Zy5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGUtNzgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGU6Nzk6b2JqLSQoQ09ORklHX0FUSDlLX0hUQykgJiM0Mzs9IGF0aDlrX2h0Yy5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGUtODAtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19lZXByb20uYz0zMzkwPXN0YXRpYyBib29sIGF0aDlrX2h3X2FyOTMwMF9maWxsX2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2VlcHJvbS5jLTM0MDAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2VlcHJvbS5jOjM0MDE6I2lmIGRlZmluZWQoQ09ORklHX0FUSDlLX0RFQlVHRlMpIHx8IGRlZmluZWQoQ09ORklHX0FUSDlLX0hUQ19ERUJVR0ZTKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19lZXByb20uYy0zNDAyLXN0YXRpYyB1MzIgYXI5MDAzX2R1bXBfbW9kYWxfZWVwcm9tKGNoYXIgKmJ1ZiwgdTMyIGxlbiwgdTMyIHNpemUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYz0yMzI9c3RhdGljIGlubGluZSB2b2lkIGF0aDlrX3NrYl9xdWV1ZV9jb21wbGV0ZShzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYy0yMzgtXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUocXVldWUpKSAhPSBOVUxMKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jOjIzOTojaWZkZWYgQ09ORklHX0FUSDlLX0hUQ19ERUJVR0ZTXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jLTI0MC1cdFx0aW50IGxuID0gc2tiLVx1MDAzZWxlbjtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jPTM3Nj1zdGF0aWMgaW50IGhpZl91c2Jfc2VuZF90eChzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYy0zOTktXHQvKiBNZ210L0JlYWNvbiBmcmFtZXMgZG9uJiMzOTt0IHVzZSB0aGUgVFggYnVmZmVyIHBvb2wgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmM6NDAwOlx0aWYgKCh0eF9jdGwtXHUwMDNldHlwZSA9PSBBVEg5S19IVENfTUdNVCkgfHxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmM6NDAxOlx0ICAgICh0eF9jdGwtXHUwMDNldHlwZSA9PSBBVEg5S19IVENfQkVBQ09OKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYy00MDItXHRcdHJldCA9IGhpZl91c2Jfc2VuZF9tZ210KGhpZl9kZXYsIHNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYy00MDYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jOjQwNzpcdGlmICgodHhfY3RsLVx1MDAzZXR5cGUgPT0gQVRIOUtfSFRDX05PUk1BTCkgfHxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmM6NDA4Olx0ICAgICh0eF9jdGwtXHUwMDNldHlwZSA9PSBBVEg5S19IVENfQU1QRFUpKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jLTQwOS1cdFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZoaWZfZGV2LVx1MDAzZXR4LnR4X3NrYl9xdWV1ZSwgc2tiKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jPTQ4Nz1zdGF0aWMgaW5saW5lIGJvb2wgY2hlY2tfaW5kZXgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaWR4KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMtNDkyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYzo0OTM6XHRpZiAoKHR4X2N0bC1cdTAwM2V0eXBlID09IEFUSDlLX0hUQ19BTVBEVSkgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jLTQ5NC1cdCAgICAodHhfY3RsLVx1MDAzZXN0YV9pZHggPT0gaWR4KSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg9NTY9ZW51bSBodGNfb3Btb2RlIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtNjQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6NjU6I2RlZmluZSBBVEg5S19IVENfQU1QRFUgIDFcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDo2NjojZGVmaW5lIEFUSDlLX0hUQ19OT1JNQUwgMlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjY3OiNkZWZpbmUgQVRIOUtfSFRDX0JFQUNPTiAzXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6Njg6I2RlZmluZSBBVEg5S19IVENfTUdNVCAgIDRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC02OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDo3MDojZGVmaW5lIEFUSDlLX0hUQ19UWF9DVFNPTkxZICAgICAgMHgxXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6NzE6I2RlZmluZSBBVEg5S19IVENfVFhfUlRTQ1RTICAgICAgIDB4MlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTcyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oPTczPXN0cnVjdCB0eF9mcmFtZV9oZHIge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC03Ny1cdHU4IHRpZG5vO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjc4Olx0X19iZTMyIGZsYWdzOyAvKiBBVEg5S19IVENfVFhfKiAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTc5LVx0dTgga2V5X3R5cGU7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oPTE5ND1zdHJ1Y3QgYXRoOWtfaHRjX3RhcmdldF9yeF9zdGF0cyB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTE5OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDoyMDA6I2RlZmluZSBBVEg5S19IVENfTUFYX1ZJRiAyXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6MjAxOiNkZWZpbmUgQVRIOUtfSFRDX01BWF9CQ05fVklGIDJcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0yMDItXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oPTI0OT1zdHJ1Y3QgYXRoOWtfdmlmX2l0ZXJfZGF0YSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTI1My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDoyNTQ6I2RlZmluZSBBVEg5S19IVENfTUFYX1NUQSA4XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6MjU1OiNkZWZpbmUgQVRIOUtfSFRDX01BWF9USUQgOFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTI1Ni1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg9MjY0PXN0cnVjdCBhdGg5a19odGNfc3RhIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0yNjUtXHR1OCBpbmRleDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDoyNjY6XHRlbnVtIHRpZF9hZ2dyX3N0YXRlIHRpZF9zdGF0ZVtBVEg5S19IVENfTUFYX1RJRF07XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtMjY3LVx0c3RydWN0IHdvcmtfc3RydWN0IHJjX3VwZGF0ZV93b3JrO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0yNzAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6MjcxOiNkZWZpbmUgQVRIOUtfSFRDX1JYQlVGIDI1NlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTI3Mi0jZGVmaW5lIEhUQ19SWF9GUkFNRV9IRUFERVJfU0laRSA0MFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaD0yODE9c3RydWN0IGF0aDlrX2h0Y19yeCB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTI4Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDoyODc6I2RlZmluZSBBVEg5S19IVENfVFhfQ0xFQU5VUF9JTlRFUlZBTCA1MCAvKiBtcyAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjI4ODojZGVmaW5lIEFUSDlLX0hUQ19UWF9USU1FT1VUX0lOVEVSVkFMIDMwMDAgLyogbXMgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDoyODk6I2RlZmluZSBBVEg5S19IVENfVFhfUkVTRVJWRSAxMFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjI5MDojZGVmaW5lIEFUSDlLX0hUQ19UWF9USU1FT1VUX0NPVU5UIDQwXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6MjkxOiNkZWZpbmUgQVRIOUtfSFRDX1RYX1RIUkVTSE9MRCAoTUFYX1RYX0JVRl9OVU0gLSBBVEg5S19IVENfVFhfUkVTRVJWRSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0yOTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6MjkzOiNkZWZpbmUgQVRIOUtfSFRDX09QX1RYX1FVRVVFU19TVE9QIEJJVCgwKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjI5NDojZGVmaW5lIEFUSDlLX0hUQ19PUF9UWF9EUkFJTiAgICAgICBCSVQoMSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0yOTUtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oPTMxMT1zdHJ1Y3QgYXRoOWtfaHRjX3R4X2N0bCB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6MzEyOlx0dTggdHlwZTsgLyogQVRIOUtfSFRDXyogKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0zMTMtXHR1OCBlcGlkO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaD0zMTk9c3RhdGljIGlubGluZSBzdHJ1Y3QgYXRoOWtfaHRjX3R4X2N0bCAqSFRDX1NLQl9DQihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0zMjctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6MzI4OiNpZmRlZiBDT05GSUdfQVRIOUtfSFRDX0RFQlVHRlNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0zMjktI2RlZmluZSBfX1NUQVRfU0FGRShoaWZfZGV2LCBleHByKVx0ZG8geyAoKGhpZl9kZXYpLVx1MDAzZWh0Y19oYW5kbGUtXHUwMDNlZHJ2X3ByaXYgPyAoZXhwcikgOiAwKTsgfSB3aGlsZSAoMClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg9Mzg4PXN0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19odGNfZXJyX3N0YXRfcngoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0zOTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6MzkzOiNlbmRpZiAvKiBDT05GSUdfQVRIOUtfSFRDX0RFQlVHRlMgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0zOTQtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oPTQwOT1zdHJ1Y3QgaHRjX2JlYWNvbiB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTQxNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDo0MTY6XHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqYnNsb3RbQVRIOUtfSFRDX01BWF9CQ05fVklGXTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC00MTctXHR1MzIgYm1pc3NjbnQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oPTQ1Nj1zdHJ1Y3QgYXRoOWtfaHRjX3ByaXYge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC00NzgtXHR1OCBzdGFfc2xvdDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDo0Nzk6XHR1OCB2aWZfc3RhX3Bvc1tBVEg5S19IVENfTUFYX1ZJRl07XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtNDgwLVx0dTggbnVtX2lic3NfdmlmO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC01MzUtXHRzdHJ1Y3QgZGVsYXllZF93b3JrIGR1dHlfY3ljbGVfd29yaztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDo1MzY6I2lmZGVmIENPTkZJR19BVEg5S19IVENfREVCVUdGU1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTUzNy1cdHN0cnVjdCBhdGg5a19kZWJ1ZyBkZWJ1Zztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg9NjQxPWludCBhdGg5a19odGNfcmVzdW1lKHN0cnVjdCBodGNfdGFyZ2V0ICpodGNfaGFuZGxlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC02NDItI2VuZGlmXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6NjQzOiNpZmRlZiBDT05GSUdfQVRIOUtfSFRDX0RFQlVHRlNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC02NDQtaW50IGF0aDlrX2h0Y19pbml0X2RlYnVnKHN0cnVjdCBhdGhfaHcgKmFoKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg9NjQ4PXN0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19odGNfZGVpbml0X2RlYnVnKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtNjUwLX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDo2NTE6I2VuZGlmIC8qIENPTkZJR19BVEg5S19IVENfREVCVUdGUyAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTY1Mi1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYz0xMTE9c3RhdGljIHZvaWQgYXRoOWtfaHRjX2JlYWNvbl9jb25maWdfYXAoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jLTExNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jOjExNzpcdGF0aDlrX2Ntbl9iZWFjb25fY29uZmlnX2FwKGFoLCBjb25mLCBBVEg5S19IVENfTUFYX0JDTl9WSUYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmMtMTE4LVx0YXRoOWtfaHRjX2JlYWNvbl9pbml0KHByaXYsIGNvbmYsIGZhbHNlKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYz0xOTE9c3RhdGljIHZvaWQgYXRoOWtfaHRjX3NlbmRfYmVhY29uKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYy0yNDItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYzoyNDM6XHR0eF9jdGwtXHUwMDNldHlwZSA9IEFUSDlLX0hUQ19CRUFDT047XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYy0yNDQtXHR0eF9jdGwtXHUwMDNlZXBpZCA9IHByaXYtXHUwMDNlYmVhY29uX2VwO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jPTI2ND1zdGF0aWMgaW50IGF0aDlrX2h0Y19jaG9vc2VfYnNsb3Qoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jLTI3Ni1cdHRzZnR1ID0gVFNGX1RPX1RVKHRzZiBcdTAwM2VcdTAwM2UgMzIsIHRzZik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYzoyNzc6XHRzbG90ID0gKCh0c2Z0dSAlIGludHZhbCkgKiBBVEg5S19IVENfTUFYX0JDTl9WSUYpIC8gaW50dmFsO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmM6Mjc4Olx0c2xvdCA9IEFUSDlLX0hUQ19NQVhfQkNOX1ZJRiAtIHNsb3QgLSAxO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmMtMjc5LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jPTMyNT12b2lkIGF0aDlrX2h0Y19hc3NpZ25fYnNsb3Qoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jLTMzMi1cdHNwaW5fbG9ja19iaChcdTAwMjZwcml2LVx1MDAzZWJlYWNvbl9sb2NrKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jOjMzMzpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDlLX0hUQ19NQVhfQkNOX1ZJRjsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jLTMzNC1cdFx0aWYgKHByaXYtXHUwMDNlYmVhY29uLmJzbG90W2ldID09IE5VTEwpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYz0zNjU9dm9pZCBhdGg5a19odGNfc2V0X3RzZmFkanVzdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmMtMzgwLVx0ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYzozODE6XHR0c2ZhZGp1c3QgPSBjdXJfY29uZi1cdTAwM2ViZWFjb25faW50ZXJ2YWwgKiBhdnAtXHUwMDNlYnNsb3QgLyBBVEg5S19IVENfTUFYX0JDTl9WSUY7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYy0zODItXHRhdnAtXHUwMDNldHNmYWRqdXN0ID0gY3B1X3RvX2xlNjQoVFVfVE9fVVNFQyh0c2ZhZGp1c3QpKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9kZWJ1Zy5jPTM5OD1zdGF0aWMgY29uc3QgY2hhciBhdGg5a19odGNfZ3N0cmluZ3Nfc3RhdHNbXVtFVEhfR1NUUklOR19MRU5dID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmMtNDE4LX07XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9kZWJ1Zy5jOjQxOTojZGVmaW5lIEFUSDlLX0hUQ19TU1RBVFNfTEVOIEFSUkFZX1NJWkUoYXRoOWtfaHRjX2dzdHJpbmdzX3N0YXRzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYy00MjAtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYz00MzA9aW50IGF0aDlrX2h0Y19nZXRfZXRfc3NldF9jb3VudChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9kZWJ1Zy5jLTQzMy1cdGlmIChzc2V0ID09IEVUSF9TU19TVEFUUylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmM6NDM0Olx0XHRyZXR1cm4gQVRIOUtfSFRDX1NTVEFUU19MRU47XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9kZWJ1Zy5jLTQzNS1cdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmM9NDQ4PXZvaWQgYXRoOWtfaHRjX2dldF9ldF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9kZWJ1Zy5jLTQ3My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmM6NDc0Olx0V0FSTl9PTihpICE9IEFUSDlLX0hUQ19TU1RBVFNfTEVOKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmMtNDc1LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmM9NjA2PXN0YXRpYyBpbnQgYXRoOWtfaW5pdF9wcml2KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmMtNjczLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfaW5pdC5jOjY3NDpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDlLX0hUQ19NQVhfQkNOX1ZJRjsgaSYjNDM7JiM0MzspXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmMtNjc1LVx0XHRwcml2LVx1MDAzZWJlYWNvbi5ic2xvdFtpXSA9IE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jPTE4ND12b2lkIGF0aDlrX2h0Y19yZXNldChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTIzMy1cdG1vZF90aW1lcihcdTAwMjZwcml2LVx1MDAzZXR4LmNsZWFudXBfdGltZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM6MjM0Olx0XHQgIGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhBVEg5S19IVENfVFhfQ0xFQU5VUF9JTlRFUlZBTCkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTIzNS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM9MjQwPXN0YXRpYyBpbnQgYXRoOWtfaHRjX3NldF9jaGFubmVsKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtMzExLVx0bW9kX3RpbWVyKFx1MDAyNnByaXYtXHUwMDNldHguY2xlYW51cF90aW1lcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYzozMTI6XHRcdCAgamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKEFUSDlLX0hUQ19UWF9DTEVBTlVQX0lOVEVSVkFMKSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtMzEzLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYz0zNTA9c3RhdGljIGludCBhdGg5a19odGNfYWRkX21vbml0b3JfaW50ZXJmYWNlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtMzU3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jOjM1ODpcdGlmICgocHJpdi1cdTAwM2VudmlmcyBcdTAwM2U9IEFUSDlLX0hUQ19NQVhfVklGKSB8fFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jOjM1OTpcdCAgICAocHJpdi1cdTAwM2Vuc3RhdGlvbnMgXHUwMDNlPSBBVEg5S19IVENfTUFYX1NUQSkpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYy0zNjAtXHRcdHJldCA9IC1FTk9CVUZTO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYy0zNjQtXHRzdGFfaWR4ID0gZmZ6KHByaXYtXHUwMDNlc3RhX3Nsb3QpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jOjM2NTpcdGlmICgoc3RhX2lkeCBcdTAwM2MgMCkgfHwgKHN0YV9pZHggXHUwMDNlIEFUSDlLX0hUQ19NQVhfU1RBKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTM2Ni1cdFx0cmV0ID0gLUVOT0JVRlM7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jPTQ2Nj1zdGF0aWMgaW50IGF0aDlrX2h0Y19hZGRfc3RhdGlvbihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTQ3Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYzo0Nzg6XHRpZiAocHJpdi1cdTAwM2Vuc3RhdGlvbnMgXHUwMDNlPSBBVEg5S19IVENfTUFYX1NUQSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYy00NzktXHRcdHJldHVybiAtRU5PQlVGUztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtNDgxLVx0c3RhX2lkeCA9IGZmeihwcml2LVx1MDAzZXN0YV9zbG90KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYzo0ODI6XHRpZiAoKHN0YV9pZHggXHUwMDNjIDApIHx8IChzdGFfaWR4IFx1MDAzZSBBVEg5S19IVENfTUFYX1NUQSkpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtNDgzLVx0XHRyZXR1cm4gLUVOT0JVRlM7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jPTcwMj1zdGF0aWMgaW50IGF0aDlrX2h0Y190eF9hZ2dyX29wZXIoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYy03MTMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM6NzE0Olx0aWYgKHRpZCBcdTAwM2U9IEFUSDlLX0hUQ19NQVhfVElEKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTcxNS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jPTkwNz1zdGF0aWMgaW50IGF0aDlrX2h0Y19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtOTYwLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnByaXYtXHUwMDNldHgudHhfbG9jayk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM6OTYxOlx0cHJpdi1cdTAwM2V0eC5mbGFncyBcdTAwMjY9IH5BVEg5S19IVENfT1BfVFhfUVVFVUVTX1NUT1A7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtOTYyLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cHJpdi1cdTAwM2V0eC50eF9sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtOTY2LVx0bW9kX3RpbWVyKFx1MDAyNnByaXYtXHUwMDNldHguY2xlYW51cF90aW1lcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYzo5Njc6XHRcdCAgamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKEFUSDlLX0hUQ19UWF9DTEVBTlVQX0lOVEVSVkFMKSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtOTY4LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYz0xNjU4PXN0YXRpYyBpbnQgYXRoOWtfaHRjX2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtMTY4OC1cdGNhc2UgSUVFRTgwMjExX0FNUERVX1RYX09QRVJBVElPTkFMOlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jOjE2ODk6XHRcdGlmICh0aWQgXHUwMDNlPSBBVEg5S19IVENfTUFYX1RJRCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTE2OTAtXHRcdFx0cmV0ID0gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM9MTg3ND1zdHJ1Y3QgaWVlZTgwMjExX29wcyBhdGg5a19odGNfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYy0xOTA2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jOjE5MDc6I2lmZGVmIENPTkZJR19BVEg5S19IVENfREVCVUdGU1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTE5MDgtXHQuZ2V0X2V0X3NzZXRfY291bnQgID0gYXRoOWtfaHRjX2dldF9ldF9zc2V0X2NvdW50LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz0yMz1zdGF0aWMgY29uc3QgaW50IHN1YnR5cGVfdHhxX3RvX2h3cVtdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0yOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzozMDojZGVmaW5lIEFUSDlLX0hUQ19JTklUX1RYUShzdWJ0eXBlKSBkbyB7XHRcdFx0XFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0zMS1cdFx0cWkudHFpX3N1YnR5cGUgPSBzdWJ0eXBlX3R4cV90b19od3Fbc3VidHlwZV07XHRcXFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz01Nj12b2lkIGF0aDlrX2h0Y19jaGVja19zdG9wX3F1ZXVlcyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTU5LVx0cHJpdi1cdTAwM2V0eC5xdWV1ZWRfY250JiM0MzsmIzQzOztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo2MDpcdGlmICgocHJpdi1cdTAwM2V0eC5xdWV1ZWRfY250IFx1MDAzZT0gQVRIOUtfSFRDX1RYX1RIUkVTSE9MRCkgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NjE6XHQgICAgIShwcml2LVx1MDAzZXR4LmZsYWdzIFx1MDAyNiBBVEg5S19IVENfT1BfVFhfUVVFVUVTX1NUT1ApKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NjI6XHRcdHByaXYtXHUwMDNldHguZmxhZ3MgfD0gQVRIOUtfSFRDX09QX1RYX1FVRVVFU19TVE9QO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTYzLVx0XHRpZWVlODAyMTFfc3RvcF9xdWV1ZXMocHJpdi1cdTAwM2Vodyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTY4PXZvaWQgYXRoOWtfaHRjX2NoZWNrX3dha2VfcXVldWVzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNzAtXHRzcGluX2xvY2tfYmgoXHUwMDI2cHJpdi1cdTAwM2V0eC50eF9sb2NrKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo3MTpcdGlmICgocHJpdi1cdTAwM2V0eC5xdWV1ZWRfY250IFx1MDAzYyBBVEg5S19IVENfVFhfVEhSRVNIT0xEKSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo3MjpcdCAgICAocHJpdi1cdTAwM2V0eC5mbGFncyBcdTAwMjYgQVRIOUtfSFRDX09QX1RYX1FVRVVFU19TVE9QKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjczOlx0XHRwcml2LVx1MDAzZXR4LmZsYWdzIFx1MDAyNj0gfkFUSDlLX0hUQ19PUF9UWF9RVUVVRVNfU1RPUDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy03NC1cdFx0aWVlZTgwMjExX3dha2VfcXVldWVzKHByaXYtXHUwMDNlaHcpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz0yMTQ9c3RhdGljIHZvaWQgYXRoOWtfaHRjX3R4X21nbXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0yNDAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MjQxOlx0dHhfY3RsLVx1MDAzZXR5cGUgPSBBVEg5S19IVENfTUdNVDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0yNDItXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTI2MD1zdGF0aWMgdm9pZCBhdGg5a19odGNfdHhfZGF0YShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTI5Mi1cdGlmICh0eF9pbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MjkzOlx0XHR0eF9jdGwtXHUwMDNldHlwZSA9IEFUSDlLX0hUQ19BTVBEVTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzoyOTQ6XHRcdHR4X2hkci5kYXRhX3R5cGUgPSBBVEg5S19IVENfQU1QRFU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMjk1LVx0fSBlbHNlIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzoyOTY6XHRcdHR4X2N0bC1cdTAwM2V0eXBlID0gQVRIOUtfSFRDX05PUk1BTDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzoyOTc6XHRcdHR4X2hkci5kYXRhX3R5cGUgPSBBVEg5S19IVENfTk9STUFMO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTI5OC1cdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMzEyLVx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2UgcHJpdi1cdTAwM2Vody1cdTAwM2V3aXBoeS1cdTAwM2VydHNfdGhyZXNob2xkKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjMxMzpcdFx0XHRmbGFncyB8PSBBVEg5S19IVENfVFhfUlRTQ1RTO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTMxNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0zMTUtXHQvKiBDVFMtdG8tc2VsZiAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjMxNjpcdGlmICghKGZsYWdzIFx1MDAyNiBBVEg5S19IVENfVFhfUlRTQ1RTKSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0zMTctXHQgICAgKHZpZiBcdTAwMjZcdTAwMjYgdmlmLVx1MDAzZWJzc19jb25mLnVzZV9jdHNfcHJvdCkpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MzE4Olx0XHRmbGFncyB8PSBBVEg5S19IVENfVFhfQ1RTT05MWTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0zMTktXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTM5Mj1zdGF0aWMgaW5saW5lIGJvb2wgX19hdGg5a19odGNfY2hlY2tfdHhfYWdncihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTM5Ny1cdHNwaW5fbG9ja19iaChcdTAwMjZwcml2LVx1MDAzZXR4LnR4X2xvY2spO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjM5ODpcdGlmICgodGlkIFx1MDAzYyBBVEg5S19IVENfTUFYX1RJRCkgXHUwMDI2XHUwMDI2IChpc3RhLVx1MDAzZXRpZF9zdGF0ZVt0aWRdID09IEFHR1JfU1RPUCkpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMzk5LVx0XHRyZXQgPSB0cnVlO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz00NDU9c3RhdGljIHZvaWQgYXRoOWtfaHRjX3R4X3Byb2Nlc3Moc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy00NzgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NDc5Olx0aWYgKHR4cy1cdTAwM2V0c19mbGFncyBcdTAwMjYgQVRIOUtfSFRDX1RYU1RBVF9BQ0spIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy00ODAtXHRcdHR4X2luZm8tXHUwMDNlZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy00ODQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NDg1Olx0aWYgKHR4cy1cdTAwM2V0c19mbGFncyBcdTAwMjYgQVRIOUtfSFRDX1RYU1RBVF9GSUxUKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTQ4Ni1cdFx0dHhfaW5mby1cdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9UWF9GSUxURVJFRDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy00ODctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NDg4Olx0aWYgKHR4cy1cdTAwM2V0c19mbGFncyBcdTAwMjYgQVRIOUtfSFRDX1RYU1RBVF9SVENfQ1RTKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTQ4OS1cdFx0cmF0ZS1cdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFM7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTQ5MS1cdHJhdGUtXHUwMDNlY291bnQgPSAxO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjQ5MjpcdHJhdGUtXHUwMDNlaWR4ID0gTVModHhzLVx1MDAzZXRzX3JhdGUsIEFUSDlLX0hUQ19UWFNUQVRfUkFURSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNDkzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjQ5NDpcdGlmICh0eHMtXHUwMDNldHNfZmxhZ3MgXHUwMDI2IEFUSDlLX0hUQ19UWFNUQVRfTUNTKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNDk1LVx0XHRyYXRlLVx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ19NQ1M7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNDk2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjQ5NzpcdFx0aWYgKHR4cy1cdTAwM2V0c19mbGFncyBcdTAwMjYgQVRIOUtfSFRDX1RYU1RBVF9DVzQwKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTQ5OC1cdFx0XHRyYXRlLVx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEg7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NDk5Olx0XHRpZiAodHhzLVx1MDAzZXRzX2ZsYWdzIFx1MDAyNiBBVEg5S19IVENfVFhTVEFUX1NHSSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01MDAtXHRcdFx0cmF0ZS1cdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0k7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTUzOT12b2lkIGF0aDlrX2h0Y190eF9kcmFpbihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTU0My1cdHNwaW5fbG9ja19iaChcdTAwMjZwcml2LVx1MDAzZXR4LnR4X2xvY2spO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjU0NDpcdHByaXYtXHUwMDNldHguZmxhZ3MgfD0gQVRIOUtfSFRDX09QX1RYX0RSQUlOO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTU0NS1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnByaXYtXHUwMDNldHgudHhfbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTU3My1cdHNwaW5fbG9ja19iaChcdTAwMjZwcml2LVx1MDAzZXR4LnR4X2xvY2spO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjU3NDpcdHByaXYtXHUwMDNldHguZmxhZ3MgXHUwMDI2PSB+QVRIOUtfSFRDX09QX1RYX0RSQUlOO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTU3NS1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnByaXYtXHUwMDNldHgudHhfbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTU3OD12b2lkIGF0aDlrX3R4X2ZhaWxlZF90YXNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNTgyLVx0c3Bpbl9sb2NrKFx1MDAyNnByaXYtXHUwMDNldHgudHhfbG9jayk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NTgzOlx0aWYgKHByaXYtXHUwMDNldHguZmxhZ3MgXHUwMDI2IEFUSDlLX0hUQ19PUF9UWF9EUkFJTikge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTU4NC1cdFx0c3Bpbl91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2V0eC50eF9sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM9NjE4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiogYXRoOWtfaHRjX3R4X2dldF9wYWNrZXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy02MjQtXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjYyNTpcdHU4IGVwaWQgPSBNUyh0eHMtXHUwMDNldHNfcmF0ZSwgQVRIOUtfSFRDX1RYU1RBVF9FUElEKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy02MjYtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTcxNj1zdGF0aWMgaW5saW5lIGJvb2wgY2hlY2tfcGFja2V0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNzI0LVx0XHQgICAgICAgdHhfY3RsLVx1MDAzZXRpbWVzdGFtcCAmIzQzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjcyNTpcdFx0ICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoQVRIOUtfSFRDX1RYX1RJTUVPVVRfSU5URVJWQUwpKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTcyNi1cdFx0YXRoX2RiZyhjb21tb24sIFhNSVQsIFwmIzM0O0Ryb3BwaW5nIGEgcGFja2V0IGR1ZSB0byBUWCB0aW1lb3V0XFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM9NzYxPXZvaWQgYXRoOWtfaHRjX3R4X2NsZWFudXBfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTc3Ni1cdFx0XHRcdGV2ZW50LVx1MDAzZXR4cy5jb29raWUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6Nzc3Olx0XHRcdFx0TVMoZXZlbnQtXHUwMDNldHhzLnRzX3JhdGUsIEFUSDlLX0hUQ19UWFNUQVRfRVBJRCkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTc3OC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNzg0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjc4NTpcdFx0aWYgKCYjNDM7JiM0MztldmVudC1cdTAwM2Vjb3VudCBcdTAwM2U9IEFUSDlLX0hUQ19UWF9USU1FT1VUX0NPVU5UKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNzg2LVx0XHRcdGxpc3RfZGVsKFx1MDAyNmV2ZW50LVx1MDAzZWxpc3QpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy04MDUtXHRtb2RfdGltZXIoXHUwMDI2cHJpdi1cdTAwM2V0eC5jbGVhbnVwX3RpbWVyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjgwNjpcdFx0ICBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoQVRIOUtfSFRDX1RYX0NMRUFOVVBfSU5URVJWQUwpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy04MDctfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz04Mjc9Ym9vbCBhdGg5a19odGNfdHhxX3NldHVwKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgaW50IHN1YnR5cGUpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTgzNC1cdG1lbXNldChcdTAwMjZxaSwgMCwgc2l6ZW9mKHFpKSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6ODM1Olx0QVRIOUtfSFRDX0lOSVRfVFhRKHN1YnR5cGUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTgzNi1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM9ODUyPWludCBhdGg5a19odGNfY2FicV9zZXR1cChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTg1Ni1cdG1lbXNldChcdTAwMjZxaSwgMCwgc2l6ZW9mKHFpKSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6ODU3Olx0QVRIOUtfSFRDX0lOSVRfVFhRKDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTg1OC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM9MTIyNT1pbnQgYXRoOWtfcnhfaW5pdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEyMzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MTIzMjpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDlLX0hUQ19SWEJVRjsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xMjMzLVx0XHRzdHJ1Y3QgYXRoOWtfaHRjX3J4YnVmICpyeGJ1ZiA9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5jPTEzOD12b2lkIGF0aDlrX3dtaV9ldmVudF90YXNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmMtMTc4LVx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZwcml2LVx1MDAzZXR4LnR4X2xvY2spO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5jOjE3OTpcdFx0XHRpZiAocHJpdi1cdTAwM2V0eC5mbGFncyBcdTAwMjYgQVRIOUtfSFRDX09QX1RYX0RSQUlOKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmMtMTgwLVx0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cHJpdi1cdTAwM2V0eC50eF9sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmg9Mzk9c3RydWN0IHdtaV9ldmVudF9zd2JhIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmgtNTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmg6NTE6I2RlZmluZSBBVEg5S19IVENfVFhTVEFUX0FDSyAgICAgICAgQklUKDApXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmg6NTI6I2RlZmluZSBBVEg5S19IVENfVFhTVEFUX0ZJTFQgICAgICAgQklUKDEpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmg6NTM6I2RlZmluZSBBVEg5S19IVENfVFhTVEFUX1JUQ19DVFMgICAgQklUKDIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmg6NTQ6I2RlZmluZSBBVEg5S19IVENfVFhTVEFUX01DUyAgICAgICAgQklUKDMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmg6NTU6I2RlZmluZSBBVEg5S19IVENfVFhTVEFUX0NXNDAgICAgICAgQklUKDQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmg6NTY6I2RlZmluZSBBVEg5S19IVENfVFhTVEFUX1NHSSAgICAgICAgQklUKDUpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmgtNTctXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5oLTYzLSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5oOjY0OiNkZWZpbmUgQVRIOUtfSFRDX1RYU1RBVF9SQVRFICAgICAgIDB4MGZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93bWkuaDo2NTojZGVmaW5lIEFUSDlLX0hUQ19UWFNUQVRfUkFURV9TICAgICAwXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmgtNjYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmg6Njc6I2RlZmluZSBBVEg5S19IVENfVFhTVEFUX0VQSUQgICAgICAgMHhmMFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5oOjY4OiNkZWZpbmUgQVRIOUtfSFRDX1RYU1RBVF9FUElEX1MgICAgIDRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93bWkuaC02OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjUyMAoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRGl2aW5nIERlZXAgaW50byB0aGUgQXRoZXJvcyBDb2RlKioKCk9rYXksIHRpbWUgdG8gcmVhbGx5IGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSBBdGhlcm9zIHdpcmVsZXNzIGRyaXZlci4gSSYjMzk7bSBmb2N1c2luZyBvbiBgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW5gLCBgYXRoOWtfcnhfcHJlcGFyZWAsIGFuZCBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAsIGFuZCB0aGUgY29kZSBpbW1lZGlhdGVseSBhcm91bmQgdGhlbSwgYWxsIHdpdGhpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jYC4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGRyaXZlciBoYW5kbGVzIHNwZWN0cmFsIGFuYWx5c2lzIHNhbXBsZSBsZW5ndGgsIGhvdyBpdCBwcmVwYXJlcyBmb3IgcmVjZWl2ZSBvcGVyYXRpb25zLCBhbmQgcHJlY2lzZWx5IGhvdyB0aGUgRkZUIHByb2Nlc3NpbmcgaXMgaGFwcGVuaW5nLiBUaGlzIGxpa2VseSByZWxhdGVzIHRvIHNpZ25hbCBwcm9jZXNzaW5nIGFuZCBkYXRhIGFjcXVpc2l0aW9uLCBhbmQgSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgbG93LWxldmVsIGZ1bmN0aW9ucyBpbnRlZ3JhdGUgd2l0aGluIHRoZSBlbnRpcmUgcmVjZWl2ZSBwYXRoLiBLbm93aW5nIHRoaXMgaXMgY3JpdGljYWwgdG8gcGVyZm9ybWFuY2UgYW5kLCBwb3RlbnRpYWxseSwgcGlucG9pbnRpbmcgYW55IG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLCBlc3BlY2lhbGx5IGFyb3VuZCBkYXRhIGZsb3cgYW5kIGludGVycnVwdCBoYW5kbGluZy4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cgYW5kIGlkZW50aWZ5IHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGhhcmR3YXJlIHJlZ2lzdGVycy4gTXkgZ29hbCBpcyBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlY2VpdmUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk2NTpcdFxuIDk2NjpcdFx0cnhfc3RhdHMtXHUwMDNlcnNfaXNhZ2dyXHQ9IHJ4c3RhdHVzLVx1MDAzZXJzX2lzYWdncjtcbiA5Njc6XHRcdHJ4X3N0YXRzLVx1MDAzZXJzX21vcmVhZ2dyXHQ9IHJ4c3RhdHVzLVx1MDAzZXJzX21vcmVhZ2dyO1xuIDk2ODpcdFx0cnhfc3RhdHMtXHUwMDNlcnNfbnVtX2RlbGltc1x0PSByeHN0YXR1cy1cdTAwM2Vyc19udW1fZGVsaW1zO1xuIDk2OTpcdFx0Y29udmVydF9odGNfZmxhZyhyeF9zdGF0cywgcnhzdGF0dXMpO1xuIDk3MDpcdH1cbiA5NzE6XHRcbiA5NzI6XHQvKlxuIDk3MzpcdCAqIFRoZSBmaXJtd2FyZSByZXBvcnRzIGEgZnJhbWUgdGhhdCBmYWlsZWQgaXRzIENSQyBhcyBhIENSQyBlcnJvciBldmVuIHdoZW5cbiA5NzQ6XHQgKiB0aGUgUEhZIGVycm9yIGJpdCBpcyBzZXQgYXMgd2VsbCwgc28gdW5kZXIgaW50ZXJmZXJlbmNlIHNwZWN0cmFsIHNhbXBsZXNcbiA5NzU6XHQgKiByZWFjaCB0aGUgaG9zdCBhcyBDUkMgZXJyb3JzLiBBIHNhbXBsZSBpcyByZWNvZ25pc2FibGUgYnkgaXRzIHNpemU6IHRoZVxuIDk3NjpcdCAqIEZGVCByZXBvcnQgbGVuZ3RoIGZvciB0aGUgY2hhbm5lbCB3aWR0aCwgcGx1cyBvciBtaW51cyB0aGUgdHdvIGJ5dGVzIHRoZVxuIDk3NzpcdCAqIE1BQyBtYXkgYWRkIG9yIGRyb3AuXG4gOTc4Olx0ICovXG4gOTc5Olx0c3RhdGljIGJvb2wgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW4oc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuIDk4MDpcdFx0XHRcdFx0XHQgICAgIHUxNiBsZW4pXG4gOTgxOlx0e1xuIDk4MjpcdFx0ZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFuX3R5cGU7XG4gOTgzOlx0XHR1MTYgZmZ0X2xlbjtcbiA5ODQ6XHRcbiA5ODU6XHRcdGlmIChwcml2LVx1MDAzZXNwZWNfcHJpdi5zcGVjdHJhbF9tb2RlID09IFNQRUNUUkFMX0RJU0FCTEVEKVxuIDk4NjpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gOTg3Olx0XG4gOTg4Olx0XHRjaGFuX3R5cGUgPSBjZmc4MDIxMV9nZXRfY2hhbmRlZl90eXBlKFx1MDAyNnByaXYtXHUwMDNlaHctXHUwMDNlY29uZi5jaGFuZGVmKTtcbiA5ODk6XHRcdGlmIChjaGFuX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUyB8fFxuIDk5MDpcdFx0ICAgIGNoYW5fdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0MFBMVVMpXG4gOTkxOlx0XHRcdGZmdF9sZW4gPSBTUEVDVFJBTF9IVDIwXzQwX1RPVEFMX0RBVEFfTEVOO1xuIDk5MjpcdFx0ZWxzZVxuIDk5MzpcdFx0XHRmZnRfbGVuID0gU1BFQ1RSQUxfSFQyMF9UT1RBTF9EQVRBX0xFTjtcbiA5OTQ6XHRcbiA5OTU6XHRcdHJldHVybiBsZW4gJiM0MzsgMSBcdTAwM2U9IGZmdF9sZW4gXHUwMDI2XHUwMDI2IGxlbiBcdTAwM2M9IGZmdF9sZW4gJiM0MzsgMjtcbiA5OTY6XHR9XG4gOTk3Olx0XG4gOTk4Olx0c3RhdGljIGJvb2wgYXRoOWtfcnhfcHJlcGFyZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG4gOTk5Olx0XHRcdFx0ICAgICBzdHJ1Y3QgYXRoOWtfaHRjX3J4YnVmICpyeGJ1ZixcbjEwMDA6XHRcdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpXG4xMDAxOlx0XG4xMDAyOlx0e1xuMTAwMzpcdFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjtcbjEwMDQ6XHRcdHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcHJpdi1cdTAwM2VodztcbjEwMDU6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSByeGJ1Zi1cdTAwM2Vza2I7XG4xMDA2Olx0XHRzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHByaXYtXHUwMDNlYWgpO1xuMTAwNzpcdFx0c3RydWN0IGF0aF9odyAqYWggPSBjb21tb24tXHUwMDNlYWg7XG4xMDA4Olx0XHRzdHJ1Y3QgYXRoX2h0Y19yeF9zdGF0dXMgKnJ4c3RhdHVzO1xuMTAwOTpcdFx0c3RydWN0IGF0aF9yeF9zdGF0dXMgcnhfc3RhdHM7XG4xMDEwOlx0XHRib29sIGRlY3J5cHRfZXJyb3IgPSBmYWxzZTtcbjEwMTE6XHRcdHUxNiByc19kYXRhbGVuO1xuMTAxMjpcdFx0Ym9vbCBpc19waHllcnI7XG4xMDEzOlx0XG4xMDE0Olx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgSFRDX1JYX0ZSQU1FX0hFQURFUl9TSVpFKSB7XG4xMDE1Olx0XHRcdGF0aF9lcnIoY29tbW9uLCBcJiMzNDtDb3JydXB0ZWQgUlggZnJhbWUsIGRyb3BwaW5nIChsZW46ICVkKVxcblwmIzM0OyxcbjEwMTY6XHRcdFx0XHRza2ItXHUwMDNlbGVuKTtcbjEwMTc6XHRcdFx0Z290byByeF9uZXh0O1xuMTAxODpcdFx0fVxuMTAxOTpcdFxuMTAyMDpcdFx0cnhzdGF0dXMgPSAoc3RydWN0IGF0aF9odGNfcnhfc3RhdHVzICopc2tiLVx1MDAzZWRhdGE7XG4xMDIxOlx0XG4xMDIyOlx0XHRyc19kYXRhbGVuID0gYmUxNl90b19jcHUocnhzdGF0dXMtXHUwMDNlcnNfZGF0YWxlbik7XG4xMDIzOlx0XHRpZiAodW5saWtlbHkocnNfZGF0YWxlbiAtXG4xMDI0Olx0XHQgICAgKHNrYi1cdTAwM2VsZW4gLSBIVENfUlhfRlJBTUVfSEVBREVSX1NJWkUpICE9IDApKSB7XG4xMDI1Olx0XHRcdGF0aF9lcnIoY29tbW9uLFxuMTAyNjpcdFx0XHRcdFwmIzM0O0NvcnJ1cHRlZCBSWCBkYXRhIGxlbiwgZHJvcHBpbmcgKGRsZW46ICVkLCBza2JsZW46ICVkKVxcblwmIzM0OyxcbjEwMjc6XHRcdFx0XHRyc19kYXRhbGVuLCBza2ItXHUwMDNlbGVuKTtcbjEwMjg6XHRcdFx0Z290byByeF9uZXh0O1xuMTAyOTpcdFx0fVxuMTAzMDpcdFxuMTAzMTpcdFx0aXNfcGh5ZXJyID0gcnhzdGF0dXMtXHUwMDNlcnNfc3RhdHVzIFx1MDAyNiBBVEg5S19SWEVSUl9QSFk7XG4xMDMyOlx0XHQvKlxuMTAzMzpcdFx0ICogRGlzY2FyZCB6ZXJvLWxlbmd0aCBwYWNrZXRzIGFuZCBwYWNrZXRzIHNtYWxsZXIgdGhhbiBhbiBBQ0tcbjEwMzQ6XHRcdCAqIHdoaWNoIGFyZSBub3QgUEhZX0VSUk9SIChzaG9ydCByYWRhciBwdWxzZXMgaGF2ZSBhIGxlbmd0aCBvZiAzKVxuMTAzNTpcdFx0ICovXG4xMDM2Olx0XHRpZiAodW5saWtlbHkoIXJzX2RhdGFsZW4gfHwgKHJzX2RhdGFsZW4gXHUwMDNjIDEwIFx1MDAyNlx1MDAyNiAhaXNfcGh5ZXJyKSkpIHtcbjEwMzc6XHRcdFx0YXRoX2RiZyhjb21tb24sIEFOWSxcbjEwMzg6XHRcdFx0XHRcJiMzNDtTaG9ydCBSWCBkYXRhIGxlbiwgZHJvcHBpbmcgKGRsZW46ICVkKVxcblwmIzM0OyxcbjEwMzk6XHRcdFx0XHRyc19kYXRhbGVuKTtcbjEwNDA6XHRcdFx0Z290byByeF9uZXh0O1xuMTA0MTpcdFx0fVxuMTA0MjpcdFxuMTA0MzpcdFx0aWYgKHJ4c3RhdHVzLVx1MDAzZXJzX2tleWl4IFx1MDAzZT0gQVRIX0tFWU1BWCBcdTAwMjZcdTAwMjZcbjEwNDQ6XHRcdCAgICByeHN0YXR1cy1cdTAwM2Vyc19rZXlpeCAhPSBBVEg5S19SWEtFWUlYX0lOVkFMSUQpIHtcbjEwNDU6XHRcdFx0YXRoX2RiZyhjb21tb24sIEFOWSxcbjEwNDY6XHRcdFx0XHRcJiMzNDtJbnZhbGlkIGtleWl4LCBkcm9wcGluZyAoa2V5aXg6ICVkKVxcblwmIzM0OyxcbjEwNDc6XHRcdFx0XHRyeHN0YXR1cy1cdTAwM2Vyc19rZXlpeCk7XG4xMDQ4Olx0XHRcdGdvdG8gcnhfbmV4dDtcbjEwNDk6XHRcdH1cbjEwNTA6XHRcbjEwNTE6XHRcdC8qIEdldCB0aGUgUlggc3RhdHVzIGluZm9ybWF0aW9uICovXG4xMDUyOlx0XG4xMDUzOlx0XHRtZW1zZXQocnhfc3RhdHVzLCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMpKTtcbjEwNTQ6XHRcbjEwNTU6XHRcdC8qIENvcHkgZXZlcnl0aGluZyBmcm9tIGF0aF9odGNfcnhfc3RhdHVzIChIVENfUlhfRlJBTUVfSEVBREVSKS5cbjEwNTY6XHRcdCAqIEFmdGVyIHRoaXMsIHdlIGNhbiBkcm9wIHRoaXMgcGFydCBvZiBza2IuICovXG4xMDU3Olx0XHRyeF9zdGF0dXNfaHRjX3RvX2F0aChcdTAwMjZyeF9zdGF0cywgcnhzdGF0dXMpO1xuMTA1ODpcdFx0YXRoOWtfaHRjX2Vycl9zdGF0X3J4KHByaXYsIFx1MDAyNnJ4X3N0YXRzKTtcbjEwNTk6XHRcdHJ4X3N0YXR1cy1cdTAwM2VtYWN0aW1lID0gYmU2NF90b19jcHUocnhzdGF0dXMtXHUwMDNlcnNfdHN0YW1wKTtcbjEwNjA6XHRcdHNrYl9wdWxsKHNrYiwgSFRDX1JYX0ZSQU1FX0hFQURFUl9TSVpFKTtcbjEwNjE6XHRcbjEwNjI6XHRcdC8qXG4xMDYzOlx0XHQgKiBldmVyeXRoaW5nIGJ1dCB0aGUgcmF0ZSBpcyBjaGVja2VkIGhlcmUsIHRoZSByYXRlIGNoZWNrIGlzIGRvbmVcbjEwNjQ6XHRcdCAqIHNlcGFyYXRlbHkgdG8gYXZvaWQgZG9pbmcgdHdvIGxvb2t1cHMgZm9yIGEgcmF0ZSBmb3IgZWFjaCBmcmFtZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODY1NgoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGtlcm5lbCBkZXZlbG9wbWVudCBhbmQgc3BlY2lmaWNhbGx5IHdvcmtpbmcgd2l0aCB0aGUgYXRoOWsgd2lyZWxlc3MgZHJpdmVyOgoKKipEaXZpbmcgaW50byBgYXRoOWtfcnhfcHJlcGFyZWAqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRoZSBgYXRoOWtfcnhfcHJlcGFyZWAgZnVuY3Rpb24uIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCBpbiB0aGUgcmVjZWl2ZSBwYXRoIGZvciB0aGlzIGRyaXZlciwgc28gYSBkZXRhaWxlZCB1bmRlcnN0YW5kaW5nIGlzIGVzc2VudGlhbC4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgZGlzc2VjdCBpdHMgbG9naWMsIHN0ZXAgYnkgc3RlcC4gSSYjMzk7bSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBidXQgc3BlY2lmaWNzIG9mIHRoaXMgZnVuY3Rpb24gYXJlIGNydWNpYWwgZm9yIHdoYXRldmVyIGRlYnVnZ2luZyBvciBvcHRpbWl6YXRpb24gdGFzayBJJiMzOTttIGN1cnJlbnRseSBmb2N1c2VkIG9uLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA2NTpcdFx0ICovXG4xMDY2Olx0XHRoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItXHUwMDNlZGF0YTtcbjEwNjc6XHRcbjEwNjg6XHRcdC8qXG4xMDY5Olx0XHQgKiBQcm9jZXNzIFBIWSBlcnJvcnMgYW5kIHJldHVybiBzbyB0aGF0IHRoZSBwYWNrZXRcbjEwNzA6XHRcdCAqIGNhbiBiZSBkcm9wcGVkLlxuMTA3MTpcdFx0ICovXG4xMDcyOlx0XHRpZiAodW5saWtlbHkoaXNfcGh5ZXJyKSkge1xuMTA3MzpcdFx0XHQvKiBUT0RPOiBOb3QgdXNpbmcgREZTIHByb2Nlc3Npbmcgbm93LiAqL1xuMTA3NDpcdFx0XHRpZiAoYXRoX2Ntbl9wcm9jZXNzX2ZmdChcdTAwMjZwcml2LVx1MDAzZXNwZWNfcHJpdiwgaGRyLFxuMTA3NTpcdFx0XHRcdFx0ICAgIFx1MDAyNnJ4X3N0YXRzLCByeF9zdGF0dXMtXHUwMDNlbWFjdGltZSkpIHtcbjEwNzY6XHRcdFx0XHQvKiBUT0RPOiBDb2RlIHRvIGNvbGxlY3Qgc3BlY3RyYWwgc2NhbiBzdGF0aXN0aWNzICovXG4xMDc3Olx0XHRcdH1cbjEwNzg6XHRcdFx0Z290byByeF9uZXh0O1xuMTA3OTpcdFx0fVxuMTA4MDpcdFxuMTA4MTpcdFx0LypcbjEwODI6XHRcdCAqIExldCB0aGUgRkZUIHBhcnNlciBkZWNpZGUgd2hldGhlciBhIENSQyBlcnJvciBvZiBzYW1wbGUgc2l6ZSBpcyBhXG4xMDgzOlx0XHQgKiBzYW1wbGU7IGl0IHZhbGlkYXRlcyB0aGUgY29udGVudHMgYW5kIHJldHVybnMgMCBmb3IgYW55dGhpbmcgZWxzZS5cbjEwODQ6XHRcdCAqL1xuMTA4NTpcdFx0aWYgKHVubGlrZWx5KHJ4X3N0YXRzLnJzX3N0YXR1cyBcdTAwMjYgQVRIOUtfUlhFUlJfQ1JDKSBcdTAwMjZcdTAwMjZcbjEwODY6XHRcdCAgICBhdGg5a19odGNfaXNfc3BlY3RyYWxfc2FtcGxlX2xlbihwcml2LCByc19kYXRhbGVuKSkge1xuMTA4NzpcdFx0XHRyeF9zdGF0cy5yc19waHllcnIgPSBBVEg5S19QSFlFUlJfUkFEQVI7XG4xMDg4Olx0XHRcdGlmIChhdGhfY21uX3Byb2Nlc3NfZmZ0KFx1MDAyNnByaXYtXHUwMDNlc3BlY19wcml2LCBoZHIsIFx1MDAyNnJ4X3N0YXRzLFxuMTA4OTpcdFx0XHRcdFx0XHRyeF9zdGF0dXMtXHUwMDNlbWFjdGltZSkpXG4xMDkwOlx0XHRcdFx0Z290byByeF9uZXh0O1xuMTA5MTpcdFx0fVxuMTA5MjpcdFxuMTA5MzpcdFx0aWYgKCFhdGg5a19jbW5fcnhfYWNjZXB0KGNvbW1vbiwgaGRyLCByeF9zdGF0dXMsIFx1MDAyNnJ4X3N0YXRzLFxuMTA5NDpcdFx0XHRcdFx1MDAyNmRlY3J5cHRfZXJyb3IsIHByaXYtXHUwMDNlcnhmaWx0ZXIpKVxuMTA5NTpcdFx0XHRnb3RvIHJ4X25leHQ7XG4xMDk2Olx0XG4xMDk3Olx0XHRhdGg5a19jbW5fcnhfc2tiX3Bvc3Rwcm9jZXNzKGNvbW1vbiwgc2tiLCBcdTAwMjZyeF9zdGF0cyxcbjEwOTg6XHRcdFx0XHRcdCAgICAgcnhfc3RhdHVzLCBkZWNyeXB0X2Vycm9yKTtcbjEwOTk6XHRcbjExMDA6XHRcdGlmIChhdGg5a19jbW5fcHJvY2Vzc19yYXRlKGNvbW1vbiwgaHcsIFx1MDAyNnJ4X3N0YXRzLCByeF9zdGF0dXMpKVxuMTEwMTpcdFx0XHRnb3RvIHJ4X25leHQ7XG4xMTAyOlx0XG4xMTAzOlx0XHRyeF9zdGF0cy5pc19teWJlYWNvbiA9IGF0aF9pc19teWJlYWNvbihjb21tb24sIGhkcik7XG4xMTA0Olx0XHRhdGg5a19jbW5fcHJvY2Vzc19yc3NpKGNvbW1vbiwgaHcsIFx1MDAyNnJ4X3N0YXRzLCByeF9zdGF0dXMpO1xuMTEwNTpcdFxuMTEwNjpcdFx0cnhfc3RhdHVzLVx1MDAzZWJhbmQgPSBhaC1cdTAwM2VjdXJjaGFuLVx1MDAzZWNoYW4tXHUwMDNlYmFuZDtcbjExMDc6XHRcdHJ4X3N0YXR1cy1cdTAwM2VmcmVxID0gYWgtXHUwMDNlY3VyY2hhbi1cdTAwM2VjaGFuLVx1MDAzZWNlbnRlcl9mcmVxO1xuMTEwODpcdFx0cnhfc3RhdHVzLVx1MDAzZWFudGVubmEgPSByeF9zdGF0cy5yc19hbnRlbm5hO1xuMTEwOTpcdFx0cnhfc3RhdHVzLVx1MDAzZWZsYWcgfD0gUlhfRkxBR19NQUNUSU1FX0VORDtcbjExMTA6XHRcbjExMTE6XHRcdHJldHVybiB0cnVlO1xuMTExMjpcdHJ4X25leHQ6XG4xMTEzOlx0XHRyZXR1cm4gZmFsc2U7XG4xMTE0Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzA5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYGF0aDlrX2h0Y2AgUlggUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgYXRoOWtfaHRjYCBkcml2ZXImIzM5O3MgcmVjZWl2ZSBwYXRoIHJpZ2h0IG5vdy4gU3BlY2lmaWNhbGx5LCBJIGtub3cgdGhhdCBgYXRoOWtfcnhfcHJlcGFyZWAgaXMgYSBrZXkgZnVuY3Rpb24gaW4gdGhhdCBwcm9jZXNzLiBUaGUgcXVlc3Rpb24gaXMsIHdoZXJlIGRvZXMgaXQgZml0IGluIHRoZSBncmFuZCBzY2hlbWU/IFdoZXJlIGlzIGl0IGFjdHVhbGx5ICpjYWxsZWQqIGZyb20gd2l0aGluIHRoYXQgUlggcGF0aD8gVGltZSB0byB0cmFjZSBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBjb2RlYmFzZSBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGxpbmcgY29udGV4dCB0byB0cnVseSBncmFzcCBpdHMgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoOWtfcnhfcHJlcGFyZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM9OTc5PXN0YXRpYyBib29sIGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtOTk3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjk5ODpzdGF0aWMgYm9vbCBhdGg5a19yeF9wcmVwYXJlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy05OTktXHRcdFx0ICAgICBzdHJ1Y3QgYXRoOWtfaHRjX3J4YnVmICpyeGJ1Zixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM9MTExOT12b2lkIGF0aDlrX3J4X3Rhc2tsZXQoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xMTQ0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjExNDU6XHRcdGlmICghYXRoOWtfcnhfcHJlcGFyZShwcml2LCByeGJ1ZiwgXHUwMDI2cnhfc3RhdHVzKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTExNDYtXHRcdFx0ZGV2X2tmcmVlX3NrYl9hbnkocnhidWYtXHUwMDNlc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyODcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIG9uIEZ1enppbmcgdGhlIGF0aDlrX2h0YyBEcml2ZXIgd2l0aCBzeXprYWxsZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGBhdGg5a19yeF90YXNrbGV0YCBpcyBjYWxsaW5nIGBhdGg5a19yeF9wcmVwYXJlYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGF0IHRhc2tsZXQgZmlyZXMgb2ZmIHdoZW4gVVNCIHBhY2tldHMgY29tZSBpbi4gVGhhdCYjMzk7cyBteSBzdGFydGluZyBwb2ludC4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzLCBjYW4gc3l6a2FsbGVyIGV2ZW4gcmVhY2ggYGF0aDlrX2h0Y2A/IERvZXMgc3l6a2FsbGVyIGtub3cgYWJvdXQgVVNCIHdpcmVsZXNzLCBvciBjYW4gaXQgcG9rZSBhcm91bmQgVVNCIGRldmljZXMgYXQgYWxsPwoKQWhhISBTeXprYWxsZXIgdXNlcyBgc3l6X3VzYl9jb25uZWN0YCBmb3IgVVNCIGZ1enppbmcsIHNwZWNpZmljYWxseSB3aXRoIHJhdy1nYWRnZXQsIGR1bW15X2hjZCwgb3IgdXNiaXAuIFRoYXQgY2xpY2tzLiBVU0IgZHJpdmVycyBpbiBMaW51eCwgKmVzcGVjaWFsbHkqIHdpcmVsZXNzIG9uZXMgbGlrZSBgYXRoOWtfaHRjYCwgYHJ0bDgxODdgLCBldGMuLCBhcmUgcHJpbWUgdGFyZ2V0cyBmb3IgVVNCIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIFRoZXkmIzM5O3JlIGJhc2ljYWxseSBicmVhZC1hbmQtYnV0dGVyLgoKTm93LCBob2xkIG9uLiBHb3R0YSBtYWtlIHN1cmUgd2UmIzM5O3JlIG5vdCB3YXN0aW5nIHRpbWUuIFNlY3Rpb24gMSBhbmQgMiBvZiB0aGlzIHByb21wdCBhcmUgY2xlYXIgb24gcmVhY2hhYmlsaXR5LiAmIzM0O1JFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFLiYjMzQ7IElmIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlLCB3ZSYjMzk7cmUgZG9uZS4gTm8gZnV6emluZy4gTHVja2lseSwgdmlydHVhbCBidXNlcyBhcmUgYWNjZXNzaWJsZSEgU3BlY2lmaWNhbGx5LCBVU0IgZ2FkZ2V0cyBhcmUgcmVhY2hhYmxlLCBzbyB0aGUgVVNCIGJ1cyBpdHNlbGYgaXMgYSB2aWFibGUgdGFyZ2V0IQoKQWxyaWdodCwgd2UmIzM5O3JlIGluIHRoZSBjbGVhciB0byBjb250aW51ZSEgTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIGZvciBgYXRoOWtfaHRjYCwgZXNwZWNpYWxseSBhbnl0aGluZyByZWxhdGVkIHRvIHNwZWN0cmFsIHNjYW5uaW5nIG9yIEZGVCBmZWF0dXJlcy4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgdGhhdCBkcml2ZXIgc3BlY2lmaWNhbGx5LCBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBgQVRIOUtfQ09NTU9OX1NQRUNUUkFMYCwgYEFUSDlLX0hUQ19ERUJVR0ZTYCwgYW5kIGFueXRoaW5nIGVsc2UgcmVsZXZhbnQgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnYC4gVGhhdCYjMzk7bGwgdGVsbCBtZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpYWwgYnVpbGQgb3B0aW9ucyBJIG5lZWQgdG8ga25vdyBhYm91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFUSDlLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoyOmNvbmZpZyBBVEg5S19IV1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMy1cdHRyaXN0YXRlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzo0OmNvbmZpZyBBVEg5S19DT01NT05cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTUtXHR0cmlzdGF0ZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctNi1cdHNlbGVjdCBBVEhfQ09NTU9OXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzo3OmNvbmZpZyBBVEg5S19DT01NT05fREVCVUdcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTgtXHRib29sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzo5OmNvbmZpZyBBVEg5S19ERlNfREVCVUdGU1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTAtXHRkZWZfYm9vbCB5XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoxMzpjb25maWcgQVRIOUtfQlRDT0VYX1NVUFBPUlRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE0LVx0Ym9vbCBcJiMzNDtBdGhlcm9zIGJsdWV0b290aCBjb2V4aXN0ZW5jZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoyMTpjb25maWcgQVRIOUtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTIyLVx0dHJpc3RhdGUgXCYjMzQ7QXRoZXJvcyA4MDIuMTFuIHdpcmVsZXNzIGNhcmRzIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0zOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjM5OmNvbmZpZyBBVEg5S19QQ0lcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTQwLVx0Ym9vbCBcJiMzNDtBdGhlcm9zIGF0aDlrIFBDSS9QQ0llIGJ1cyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctNDctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzo0ODpjb25maWcgQVRIOUtfQUhCXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy00OS1cdGJvb2wgXCYjMzQ7QXRoZXJvcyBhdGg5ayBBSEIgYnVzIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy01Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjU4OmNvbmZpZyBBVEg5S19ERUJVR0ZTXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7QXRoZXJvcyBhdGg5ayBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy02OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjY5OmNvbmZpZyBBVEg5S19TVEFUSU9OX1NUQVRJU1RJQ1NcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtEZXRhaWxlZCBzdGF0aW9uIHN0YXRpc3RpY3NcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy03NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjc2OmNvbmZpZyBBVEg5S19UWDk5XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7QXRoZXJvcyBhdGg5ayBUWDk5IHRlc3Rpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTk1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6OTY6Y29uZmlnIEFUSDlLX0RGU19DRVJUSUZJRURcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTk3LVx0Ym9vbCBcJiMzNDtBdGhlcm9zIERGUyBzdXBwb3J0IGZvciBjZXJ0aWZpZWQgcGxhdGZvcm1zXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTE0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTE1OmNvbmZpZyBBVEg5S19EWU5BQ0tcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTExNi1cdGJvb2wgXCYjMzQ7QXRoZXJvcyBhdGg5ayBBQ0sgdGltZW91dCBlc3RpbWF0aW9uIGFsZ29yaXRobVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTEyMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjEyNDpjb25maWcgQVRIOUtfV09XXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xMjUtXHRib29sIFwmIzM0O1dha2Ugb24gV2lyZWxlc3MgTEFOIHN1cHBvcnQgKEVYUEVSSU1FTlRBTClcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xMzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoxMzI6Y29uZmlnIEFUSDlLX1JGS0lMTFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTMzLVx0Ym9vbCBcJiMzNDtBdGhlcm9zIGF0aDlrIHJma2lsbCBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE0MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjE0Mjpjb25maWcgQVRIOUtfQ0hBTk5FTF9DT05URVhUXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNDMtXHRib29sIFwmIzM0O0NoYW5uZWwgQ29udGV4dCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTUwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTUxOmNvbmZpZyBBVEg5S19QQ09FTVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTUyLVx0Ym9vbCBcJiMzNDtBdGhlcm9zIGF0aDlrIHN1cHBvcnQgZm9yIFBDIE9FTSBjYXJkc1wmIzM0OyBpZiBFWFBFUlRcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoxNTY6Y29uZmlnIEFUSDlLX1BDSV9OT19FRVBST01cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE1Ny1cdHRyaXN0YXRlIFwmIzM0O0F0aGVyb3MgYXRoOWsgcGNpIGxvYWRlciBmb3IgRUVQUk9NLWxlc3MgY2hpcHNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoxNzI6Y29uZmlnIEFUSDlLX0hUQ1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTczLVx0dHJpc3RhdGUgXCYjMzQ7QXRoZXJvcyBIVEMgYmFzZWQgd2lyZWxlc3MgY2FyZHMgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE4Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjE4Nzpjb25maWcgQVRIOUtfSFRDX0RFQlVHRlNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7QXRoZXJvcyBhdGg5a19odGMgZGVidWdnaW5nXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTk0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTk1OmNvbmZpZyBBVEg5S19IV1JOR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTk2LVx0Ym9vbCBcJiMzNDtSYW5kb20gbnVtYmVyIGdlbmVyYXRvciBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMjA1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MjA2OmNvbmZpZyBBVEg5S19DT01NT05fU1BFQ1RSQUxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTIwNy1cdGJvb2wgXCYjMzQ7QXRoZXJvcyBhdGg5ay9hdGg5a19odGMgc3BlY3RyYWwgc2NhbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODQ5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUgY2hlY2s6CgoqKkV4YW1pbmluZyB0aGUgQXRoZXJvcyA5ayBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIGBhdGg5a2AgZHJpdmVyIGlzIGNvbmZpZ3VyZWQsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBgQVRIOUtfSFRDYCBhbmQgYEFUSDlLX0NPTU1PTl9TUEVDVFJBTGAgb3B0aW9ucy4gSSYjMzk7bGwgb3BlbiB1cCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWdgLiBNeSBtYWluIGZvY3VzIHdpbGwgYmUgYXJvdW5kIHRob3NlIHR3byBzeW1ib2xzLiBJJiMzOTtsbCBpbW1lZGlhdGVseSBzdGFydCBzY2FubmluZyB0aGUgZmlsZSB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBkZWZhdWx0IHZhbHVlcyAoaWYgYW55KSwgYW5kIHRoZSBoZWxwIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGxvb2tpbmcgZm9yIHdoZXJlIHRoZXkmIzM5O3JlIGRlZmluZWQgd2l0aGluIHRoZSBoaWVyYXJjaHksIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBzdXBwb3J0LCBhbmQgd2hhdCBmZWF0dXJlcyB0aGV5IGVuYWJsZSBvciBkaXNhYmxlLiBJJiMzOTtsbCBwYXkgYXR0ZW50aW9uIHRvIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgb3B0aW9ucyAoZS5nLiwgaWYgYEFUSDlLX0hUQ2AgcmVxdWlyZXMgYW5vdGhlciBzeW1ib2wgdG8gYmUgZW5hYmxlZCwgSSBuZWVkIHRvIG5vdGUgdGhhdCkuIEFsc28sIEkmIzM5O2xsIHJldmlldyBhbnkgY29uZGl0aW9uYWwgbG9naWMsIGxpa2UgYGlmYCBzdGF0ZW1lbnRzLCBhcm91bmQgdGhlc2Ugc3ltYm9scyDigJMgdGhhdCB3aWxsIHRlbGwgbWUgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzIHRoZXkmIzM5O3JlIHNlbGVjdGFibGUuIFVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGVzZSBjb25maWd1cmF0aW9ucyBhZmZlY3QgdGhlIGRyaXZlciYjMzk7cyBiZWhhdmlvciBhbmQgcGVyZm9ybWFuY2UuIFRoaXMgd2lsbCBoZWxwIG1lIGlmIEkgbmVlZCB0byBkaWFnbm9zZSBhbiBpc3N1ZSB3aXRoIHRoaXMgZHJpdmVyIGxhdGVyIG9yIHR1bmUgaXQgZm9yIGEgc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTcwOlx0XHQgIElmIHVuc3VyZSBzYXkgTi5cbiAxNzE6XHRcbiAxNzI6XHRjb25maWcgQVRIOUtfSFRDXG4gMTczOlx0XHR0cmlzdGF0ZSBcJiMzNDtBdGhlcm9zIEhUQyBiYXNlZCB3aXJlbGVzcyBjYXJkcyBzdXBwb3J0XCYjMzQ7XG4gMTc0Olx0XHRkZXBlbmRzIG9uIFVTQiBcdTAwMjZcdTAwMjYgTUFDODAyMTFcbiAxNzU6XHRcdHNlbGVjdCBNQUM4MDIxMV9MRURTIGlmIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU1BQzgwMjExXG4gMTc2Olx0XHRzZWxlY3QgQVRIOUtfSFdcbiAxNzc6XHRcdHNlbGVjdCBBVEg5S19DT01NT05cbiAxNzg6XHRcdGhlbHBcbiAxNzk6XHRcdCAgU3VwcG9ydCBmb3IgQXRoZXJvcyBIVEMgYmFzZWQgY2FyZHMuXG4gMTgwOlx0XHQgIENoaXBzZXRzIHN1cHBvcnRlZDogQVI5MjcxXG4gMTgxOlx0XG4gMTgyOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uOlxuIDE4MzpcdFx0ICBodHRwczovL3dpcmVsZXNzLndpa2kua2VybmVsLm9yZy9lbi91c2Vycy9Ecml2ZXJzL2F0aDlrX2h0Y1xuIDE4NDpcdFxuIDE4NTpcdFx0ICBUaGUgYnVpbHQgbW9kdWxlIHdpbGwgYmUgYXRoOWtfaHRjLlxuIDE4NjpcdFxuIDE4NzpcdGNvbmZpZyBBVEg5S19IVENfREVCVUdGU1xuIDE4ODpcdFx0Ym9vbCBcJiMzNDtBdGhlcm9zIGF0aDlrX2h0YyBkZWJ1Z2dpbmdcJiMzNDtcbiAxODk6XHRcdGRlcGVuZHMgb24gQVRIOUtfSFRDIFx1MDAyNlx1MDAyNiBERUJVR19GU1xuIDE5MDpcdFx0c2VsZWN0IEFUSDlLX0NPTU1PTl9ERUJVR1xuIDE5MTpcdFx0aGVscFxuIDE5MjpcdFx0ICBTYXkgWSwgaWYgeW91IG5lZWQgYWNjZXNzIHRvIGF0aDlrX2h0YyYjMzk7cyBzdGF0aXN0aWNzLlxuIDE5MzpcdFx0ICBBcyB3ZWxsIGFzIGFjY2VzcyB0byB0aGUgRkZUL3NwZWN0cmFsIGRhdGEuXG4gMTk0Olx0XG4gMTk1Olx0Y29uZmlnIEFUSDlLX0hXUk5HXG4gMTk2Olx0XHRib29sIFwmIzM0O1JhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIHN1cHBvcnRcJiMzNDtcbiAxOTc6XHRcdGRlcGVuZHMgb24gQVRIOUsgXHUwMDI2XHUwMDI2IChIV19SQU5ET00gPSB5IHx8IEhXX1JBTkRPTSA9IEFUSDlLKVxuIDE5ODpcdFx0ZGVmYXVsdCBuXG4gMTk5Olx0XHRoZWxwXG4gMjAwOlx0XHQgIFRoaXMgb3B0aW9uIGluY29ycG9yYXRlcyB0aGUgQURDIHJlZ2lzdGVyIG91dHB1dCBhcyBhIHNvdXJjZSBvZlxuIDIwMTpcdFx0ICByYW5kb21uZXNzIGludG8gTGludXggZW50cm9weSBwb29sICgvZGV2L3VyYW5kb20gYW5kIC9kZXYvcmFuZG9tKVxuIDIwMjpcdFxuIDIwMzpcdFx0ICBTYXkgWSwgZmVlZHMgdGhlIGVudHJvcHkgZGlyZWN0bHkgZnJvbSB0aGUgV2lGaSBkcml2ZXIgdG8gdGhlIGlucHV0XG4gMjA0Olx0XHQgIHBvb2wuXG4gMjA1Olx0XG4gMjA2Olx0Y29uZmlnIEFUSDlLX0NPTU1PTl9TUEVDVFJBTFxuIDIwNzpcdFx0Ym9vbCBcJiMzNDtBdGhlcm9zIGF0aDlrL2F0aDlrX2h0YyBzcGVjdHJhbCBzY2FuIHN1cHBvcnRcJiMzNDtcbiAyMDg6XHRcdGRlcGVuZHMgb24gQVRIOUtfREVCVUdGUyB8fCBBVEg5S19IVENfREVCVUdGU1xuIDIwOTpcdFx0c2VsZWN0IFJFTEFZXG4gMjEwOlx0XHRkZWZhdWx0IG5cbiAyMTE6XHRcdGhlbHBcbiAyMTI6XHRcdCAgU2F5IFkgdG8gZW5hYmxlIGFjY2VzcyB0byB0aGUgRkZUL3NwZWN0cmFsIGRhdGEgdmlhIGRlYnVnZnMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODk4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGBhdGg5a19odGNgIENvZGViYXNlKioKCk9rYXksIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgc3BlY19wcml2YCBhbmQgYGF0aF9jbW5fcHJvY2Vzc19mZnRgIHdpdGhpbiB0aGUgYGF0aDlrX2h0Y2AgZHJpdmVyLiBTZWVtcyBsaWtlIHRoZXNlIGFyZSB0d28gY3JpdGljYWwgY29tcG9uZW50cyB0aGF0IGxpa2VseSB3b3JrIHRvZ2V0aGVyIGluIHNvbWUgd2F5IHJlbGF0ZWQgdG8gc3BlY3RyYWwgYW5hbHlzaXMgb3IgcHJvY2Vzc2luZyB3aXRoaW4gdGhlIEF0aGVyb3MgV2ktRmkgY2hpcHNldCYjMzk7cyBIVEMgKEhvc3QgVHJhbnNwb3J0IENvbnRyb2wpIGludGVyZmFjZS4gTXkgZmlyc3Qgc3RlcCBpcyB0byBxdWlja2x5IGxvY2F0ZSB3aGVyZSB0aGVzZSBhcmUgdXNlZC4gTGV0JiMzOTtzIGZpcmUgdXAgYSBncmVwIGNvbW1hbmQgYW5kIHNlZSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgb3IgdmFyaWFibGVzIGFwcGVhciBpbiB0aGUgY29kZWJhc2UuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGJ1aWxkIGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgc3lzdGVtIGZsb3cuIEZyb20gdGhlcmUgSSYjMzk7bGwgYmUgYWJsZSB0byB0cmFjZSB0aGVpciB1c2FnZSwgdW5kZXJzdGFuZCB0aGUgZGF0YSB0aGV5IGFyZSBoYW5kbGluZywgYW5kIHNlZSB0aGUgbG9naWNhbCBjb25uZWN0aW9ucyBiZXR3ZWVuIHRoZXNlIHR3byBwYXJ0cyBvZiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGhfY21uX3Byb2Nlc3NfZmZ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM9NDQ5PWF0aF9jbW5faXNfZmZ0X2J1Zl9mdWxsKHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtNDY4LS8qIHJldHVybnMgMSBpZiB0aGlzIHdhcyBhIHNwZWN0cmFsIGZyYW1lLCBldmVuIGlmIG5vdCBoYW5kbGVkLiAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjQ2OTppbnQgYXRoX2Ntbl9wcm9jZXNzX2ZmdChzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtNDcwLVx0XHQgICAgc3RydWN0IGF0aF9yeF9zdGF0dXMgKnJzLCB1NjQgdHNmKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy02ODMtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjY4NDpFWFBPUlRfU1lNQk9MKGF0aF9jbW5fcHJvY2Vzc19mZnQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTY4NS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg9MTc3PWludCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTc5LVx0XHRcdCAgICAgICBlbnVtIHNwZWN0cmFsX21vZGUgc3BlY3RyYWxfbW9kZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTgwOmludCBhdGhfY21uX3Byb2Nlc3NfZmZ0KHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdiwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODEtXHRcdCAgICBzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnMsIHU2NCB0c2YpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaD0xOTI9c3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXIoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTk2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjE5NzpzdGF0aWMgaW5saW5lIGludCBhdGhfY21uX3Byb2Nlc3NfZmZ0KHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xOTgtXHRcdFx0XHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz05OTg9c3RhdGljIGJvb2wgYXRoOWtfcnhfcHJlcGFyZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEwNzMtXHRcdC8qIFRPRE86IE5vdCB1c2luZyBERlMgcHJvY2Vzc2luZyBub3cuICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MTA3NDpcdFx0aWYgKGF0aF9jbW5fcHJvY2Vzc19mZnQoXHUwMDI2cHJpdi1cdTAwM2VzcGVjX3ByaXYsIGhkcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xMDc1LVx0XHRcdFx0ICAgIFx1MDAyNnJ4X3N0YXRzLCByeF9zdGF0dXMtXHUwMDNlbWFjdGltZSkpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTA4Ny1cdFx0cnhfc3RhdHMucnNfcGh5ZXJyID0gQVRIOUtfUEhZRVJSX1JBREFSO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjEwODg6XHRcdGlmIChhdGhfY21uX3Byb2Nlc3NfZmZ0KFx1MDAyNnByaXYtXHUwMDNlc3BlY19wcml2LCBoZHIsIFx1MDAyNnJ4X3N0YXRzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEwODktXHRcdFx0XHRcdHJ4X3N0YXR1cy1cdTAwM2VtYWN0aW1lKSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jPTgwNj1zdGF0aWMgaW50IGF0aDlrX3J4X3NrYl9wcmVwcm9jZXNzKHN0cnVjdCBhdGhfc29mdGMgKnNjLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmMtODgzLVx0XHR9IGVsc2UgaWYgKHNjLVx1MDAzZXNwZWNfcHJpdi5zcGVjdHJhbF9tb2RlICE9IFNQRUNUUkFMX0RJU0FCTEVEIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYzo4ODQ6XHRcdFx0ICAgYXRoX2Ntbl9wcm9jZXNzX2ZmdChcdTAwMjZzYy1cdTAwM2VzcGVjX3ByaXYsIGhkciwgcnhfc3RhdHMsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jLTg4NS1cdFx0XHRcdFx0ICAgICAgIHJ4X3N0YXR1cy1cdTAwM2VtYWN0aW1lKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTI4MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgY29tbW9uLXNwZWN0cmFsLm9gIGdldHMgYnVpbHQsIHNvIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGVgLiBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEsIHNvIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgdHlwaWNhbCBNYWtlZmlsZSBjb25zdHJ1Y3RzIOKAkyBvYmplY3QgZmlsZSBkZXBlbmRlbmNpZXMsIHNvdXJjZSBmaWxlIGxpc3RzLCBjb21waWxlciBmbGFncywgYW5kIHRoZSBsaWtlLiBJdCBzaG91bGQgYmUgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHByb2Nlc3MsIGJ1dCBJIHdhbnQgdG8gZW5zdXJlIEkgdW5kZXJzdGFuZCBldmVyeSBzdGVwLiBUaGUgYXRoOWsgZHJpdmVyIGlzIGNyaXRpY2FsLCBhbmQga25vd2luZyBob3cgaXRzIGNvbXBvbmVudHMgYXJlIGFzc2VtYmxlZCBpcyB2aXRhbCBmb3IgZGVidWdnaW5nIG9yIGN1c3RvbWl6YXRpb24uIFRoaXMgaXMgYSBzdGFuZGFyZCBwcm9jZWR1cmU7IEkmIzM5O2xsIGlkZW50aWZ5IHRoZSByZWxldmFudCBydWxlcyBvciB2YXJpYWJsZXMgcmVsYXRlZCB0byBgY29tbW9uLXNwZWN0cmFsLm9gIGFuZCB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIGJhY2sgdG8gdGhlaXIgc291cmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb21tb24tc3BlY3RyYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlPTY1PWF0aDlrX2NvbW1vbi0kKENPTkZJR19BVEg5S19DT01NT05fREVCVUcpICYjNDM7PSBjb21tb24tZGVidWcub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlOjY2OmF0aDlrX2NvbW1vbi0kKENPTkZJR19BVEg5S19DT01NT05fU1BFQ1RSQUwpICYjNDM7PSBjb21tb24tc3BlY3RyYWwub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlLTY3LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uaC0yNi0jaW5jbHVkZSBcJiMzNDtjb21tb24tZGVidWcuaFwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5oOjI3OiNpbmNsdWRlIFwmIzM0O2NvbW1vbi1zcGVjdHJhbC5oXCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmgtMjgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NzAwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDUkMgRXJyb3IgSGFuZGxpbmcgaW4gYXRoOWtfaHRjIGZvciBTcGVjdHJhbCBTYW1wbGVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIGZvciB0aGUgYGF0aDlrX2h0Y2AgVVNCIFdpLUZpIGRyaXZlci4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGZvY3VzZWQgb24gaG93IENSQyBlcnJvcnMgYXJlIGhhbmRsZWQgaW4gYGF0aDlrX3J4X3ByZXBhcmVgLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGUgcmVjZWl2ZWQgZGF0YSBsZW5ndGggbWF0Y2hlcyB0aGF0IG9mIGEgc3BlY3RyYWwgc2FtcGxlLgoKTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBjb2RlIGludHJvZHVjZXMgYSBjaGVjaywgYGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuYCwgdG8gZGV0ZXJtaW5lIGlmIGEgcGFydGljdWxhciBwYWNrZXQgbGVuZ3RoIGNvcnJlc3BvbmRzIHRvIGEgc3BlY3RyYWwgc2FtcGxlLiBUaGlzIGZ1bmN0aW9uIGRlcGVuZHMgb24gd2hldGhlciBzcGVjdHJhbCBtb2RlIGlzIGVuYWJsZWQsIGFuZCB0aGUgY2hhbm5lbCB0eXBlIHRvIGRldGVybWluZSB0aGUgZXhwZWN0ZWQgRkZUIGxlbmd0aC4gSSBzZWUgdGhhdCBpdCB1c2VzIGBjZmc4MDIxMV9nZXRfY2hhbmRlZl90eXBlYCB0byBncmFiIGNoYW5uZWwgdHlwZSwgd2hpY2ggaW1wYWN0cyB0aGUgYGZmdF9sZW5gIGNhbGN1bGF0aW9uLiBUaGUgY29tcGFyaXNvbiBgbGVuICYjNDM7IDEgJmd0Oz0gZmZ0X2xlbiAmYW1wOyZhbXA7IGxlbiAmbHQ7PSBmZnRfbGVuICYjNDM7IDJgIGlzIGludGVyZXN0aW5nOyBpdCBhY2NvdW50cyBmb3Igc29tZSBwb3RlbnRpYWwgbGVuZ3RoIHZhcmlhdGlvbnMsIHBlcmhhcHMgcmVsYXRlZCB0byBwYWRkaW5nIG9yIGFsaWdubWVudC4KClRoZSBjcnVjaWFsIGJpdCwgdGhlIGNoZWNrIGB1bmxpa2VseShyeF9zdGF0cy5yc19zdGF0dXMgJmFtcDsgQVRIOUtfUlhFUlJfQ1JDKWAgaXMgd2hhdCBjYXRjaGVzIG15IGV5ZS4gSXQmIzM5O3MgdXNpbmcgYHVubGlrZWx5YCwgc28gdGhlIENSQyBlcnJvciBwYXRoIGlzIGFzc3VtZWQgdG8gYmUgbGVzcyBmcmVxdWVudC4gSWYgYSBDUkMgZXJyb3IgaXMgZmxhZ2dlZCAqYW5kKiB0aGUgbGVuZ3RoIG1hdGNoZXMgYSBzcGVjdHJhbCBzYW1wbGUsIHRoZSBjb2RlIHNldHMgYHJ4X3N0YXRzLnJzX3BoeWVycmAgdG8gYEFUSDlLX1BIWUVSUl9SQURBUmAuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgcmFkYXIgZGV0ZWN0aW9uIHNjZW5hcmlvLCB3aGljaCBpcyBmYXNjaW5hdGluZy4gVGhlbiwgaXQgY2FsbHMgYGF0aF9jbW5fcHJvY2Vzc19mZnRgLiBUaGlzIGlzIHRoZSBpbXBvcnRhbnQgcGFydDsgaXQgbG9va3MgbGlrZSB0aGlzIGlzIHdoZXJlIHRoZSBGRlQgZGF0YSBpcyBhY3R1YWxseSBwcm9jZXNzZWQuCgpJIG5lZWQgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhbGwgdGhlc2UgZnVuY3Rpb25zIGFuZCBkYXRhIGZsb3dzLiBJIHNlZSBib3RoIGBhdGg5a19odGNfaXNfc3BlY3RyYWxfc2FtcGxlX2xlbmAgYW5kIGBhdGg5a19yeF9wcmVwYXJlYCBhcmUgc3RhdGljIGZ1bmN0aW9ucyBpbiBgaHRjX2Rydl90eHJ4LmNgLCB3aGljaCB0ZWxscyBtZSB0aGV5IGFyZSBpbnRlcm5hbCB0byB0aGF0IGNvbXBpbGF0aW9uIHVuaXQuIEkgYWxzbyBuZWVkIHRvIGtub3cgd2hhdCBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgb3IgY2FsbGVycyB0aGVyZSBtaWdodCBiZSwgYW5kLCBpZiBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAgaXMgZXhwb3J0ZWQuCgpBbHJpZ2h0LCB0aGUgY29kZSByZWZlcmVuY2VzIGBhdGg5a19yeF90YXNrbGV0YCwgYW5kIGl0IGNhbGxzIGBhdGg5a19yeF9wcmVwYXJlYC4gR29vZCwgSSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG5vdy4gYGF0aF9jbW5fcHJvY2Vzc19mZnRgIGlzIGNhbGxlZCAqaW5zaWRlKiB0aGlzIGJsb2NrLCBhbmQgdGhhdCYjMzk7cyBhbiBleHBvcnRlZCBmdW5jdGlvbi4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIGhvdyBwYWNrZXRzIGFyZSByZWNlaXZlZCBhbmQgcHJvY2Vzc2VkIGJ5IGBhdGg5a19odGNgLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGhvdyBgYXRoOWtfcnhfdGFza2xldGAgaXMgdHJpZ2dlcmVkIGFuZCB3aGF0IGl0JiMzOTtzIHVsdGltYXRlbHkgZG9pbmcuIEkgYWxzbyBuZWVkIHRvIGtub3cgaG93IHBhY2tldHMgYXJlIHBhc3NlZCBpbnRvIHRoZSBkcml2ZXIuIEkgbmVlZCB0byBiZSBzdXJlIHRoZXJlIGlzbiYjMzk7dCBzb21lIHNpZGUgZWZmZWN0IG9yIG90aGVyIHVuaW50ZW5kZWQgY29uc2VxdWVuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDlrX3J4X3Rhc2tsZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oPTU5OD12b2lkIGF0aDlrX2hvc3RfcnhfaW5pdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjU5OTp2b2lkIGF0aDlrX3J4X3Rhc2tsZXQoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC02MDAtdTMyIGF0aDlrX2h0Y19jYWxjcnhmaWx0ZXIoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmM9NjA2PXN0YXRpYyBpbnQgYXRoOWtfaW5pdF9wcml2KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmMtNjQ3LVx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZWh0Y19wbV9sb2NrKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2luaXQuYzo2NDg6XHR0YXNrbGV0X3NldHVwKFx1MDAyNnByaXYtXHUwMDNlcnhfdGFza2xldCwgYXRoOWtfcnhfdGFza2xldCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmMtNjQ5LVx0dGFza2xldF9zZXR1cChcdTAwMjZwcml2LVx1MDAzZXR4X2ZhaWxlZF90YXNrbGV0LCBhdGg5a190eF9mYWlsZWRfdGFza2xldCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTk5OD1zdGF0aWMgYm9vbCBhdGg5a19yeF9wcmVwYXJlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTExOC0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzoxMTE5OnZvaWQgYXRoOWtfcnhfdGFza2xldChzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTEyMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTA5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgQXRoZXJvcyBXaXJlbGVzcyBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIEkgc2VlIHdlIGhhdmUgYEFUSDlLX0hUQ2AsIHdoaWNoIHNlZW1zIHRvIGJlIGVzc2VudGlhbCBmb3IgQXRoZXJvcyBIVEMtYmFzZWQgd2lyZWxlc3MgY2FyZHMgYW5kIGhpbmdlcyBvbiBib3RoIFVTQiBhbmQgdGhlIE1BQzgwMjExIGZyYW1ld29yay4gVGhlbiB0aGVyZSYjMzk7cyBgQVRIOUtfSFRDX0RFQlVHRlNgLCBhIGRlYnVnLWZvY3VzZWQgb3B0aW9uIGRlcGVuZGVudCBvbiBgQVRIOUtfSFRDYCBhbmQgZGVidWcgZmlsZSBzeXN0ZW0gc3VwcG9ydC4gTm93LCBgQVRIOUtfQ09NTU9OX1NQRUNUUkFMYCBkZXBlbmRzIG9uIGVpdGhlciB0aGUgYEFUSDlLX0RFQlVHRlNgIG9yIGBBVEg5S19IVENfREVCVUdGU2Agb3B0aW9ucywgd2hpY2ggbWFrZXMgc2Vuc2UuCgpCdXQgd2FpdCBhIG1pbnV0ZSwgdGhlIHN0cnVjdHVyZSB0aGF0JiMzOTtzIGdvdCBtZSBjb25mdXNlZCBpcyBgc3BlY19wcml2YCBhbmQgYGF0aF9jbW5fcHJvY2Vzc19mZnRgPyBUaGF0JiMzOTtzIHdoYXQgSSYjMzk7ZCBleHBlY3QgdG8gc2VlIHdpdGggdGhlIGBjb21tb24tc3BlY3RyYWxgIGNvbmZpZyBhY3RpdmUuIFdpdGhvdXQgYEFUSDlLX0NPTU1PTl9TUEVDVFJBTGAgZW5hYmxlZCwgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoZXNlIHNwZWN0cmFsIGFuYWx5c2lzIGNvbXBvbmVudHM/IEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gYGNvbW1vbi1zcGVjdHJhbC5oYCB0byBzZWUgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIsIG9yIHdoZXRoZXIgdGhleSYjMzk7cmUgZXZlbiBzdXBwb3NlZCB0byBiZSBwcmVzZW50IHdpdGhvdXQgdGhlIHNwZWN0cmFsIGFuYWx5c2lzIGZlYXR1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzcGVjdHJhbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MjA6I2luY2x1ZGUgXCYjMzQ7Li4vc3BlY3RyYWxfY29tbW9uLmhcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0yMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoyMjovKiBlbnVtIHNwZWN0cmFsX21vZGU6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMjMtICpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoyNDogKiBAU1BFQ1RSQUxfRElTQUJMRUQ6IHNwZWN0cmFsIG1vZGUgaXMgZGlzYWJsZWRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0yNS0gKiBAU1BFQ1RSQUxfQkFDS0dST1VORDogaGFyZHdhcmUgc2VuZHMgc2FtcGxlcyB3aGVuIGl0IGlzIG5vdCBidXN5IHdpdGhcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0yNi0gKlx0c29tZXRoaW5nIGVsc2UuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6Mjc6ICogQFNQRUNUUkFMX01BTlVBTDogc3BlY3RyYWwgc2NhbiBpcyBlbmFibGVkLCB0cmlnZ2VyaW5nIGZvciBzYW1wbGVzXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMjgtICpcdGlzIHBlcmZvcm1lZCBtYW51YWxseS5cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMzEtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MzI6ZW51bSBzcGVjdHJhbF9tb2RlIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0zMy1cdFNQRUNUUkFMX0RJU0FCTEVEID0gMCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMzktI2RlZmluZSBTUEVDVFJBTF9TQ0FOX0JJVE1BU0tcdFx0MHgxMFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjQwOi8qIFJhZGFyIGluZm8gcGFja2V0IGZvcm1hdCwgdXNlZCBmb3IgREZTIGFuZCBzcGVjdHJhbCBmb3JtYXRzLiAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTQxLXN0cnVjdCBhdGhfcmFkYXJfaW5mbyB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTQ2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjQ3Oi8qIFRoZSBIVDIwIHNwZWN0cmFsIGRhdGEgaGFzIDQgYnl0ZXMgb2YgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhdCBpdCYjMzk7cyBlbmQuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtNDgtICpcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg9OTc9c3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtOTgtXHRzdHJ1Y3QgYXRoX2h3ICphaDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDo5OTpcdC8qIHJlbGF5KGZzKSBjaGFubmVsIGZvciBzcGVjdHJhbCBzY2FuICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTAwLVx0c3RydWN0IHJjaGFuICpyZnNfY2hhbl9zcGVjX3NjYW47XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTAxOlx0ZW51bSBzcGVjdHJhbF9tb2RlIHNwZWN0cmFsX21vZGU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTAyLVx0c3RydWN0IGF0aF9zcGVjX3NjYW4gc3BlY19jb25maWc7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTExMS0vKiBncmFicyB0aGUgbWF4IG1hZ25pdHVkZSBmcm9tIHRoZSBhbGwvdXBwZXIvbG93ZXIgYmlucyAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjExMjpzdGF0aWMgaW5saW5lIHUxNiBzcGVjdHJhbF9tYXhfbWFnbml0dWRlKHU4ICpiaW5zKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTExMy17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTExOS0vKiByZXR1cm4gdGhlIG1heCBtYWduaXR1ZGUgZnJvbSB0aGUgYWxsL3VwcGVyL2xvd2VyIGJpbnMgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxMjA6c3RhdGljIGlubGluZSB1OCBzcGVjdHJhbF9tYXhfaW5kZXgodTggKmJpbnMsIGludCBudW1fYmlucylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xMjEte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNDctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTQ4OnN0YXRpYyBpbmxpbmUgdTggc3BlY3RyYWxfbWF4X2luZGV4X2h0NDAodTggKmJpbnMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTQ5LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTUxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjE1MjpcdGlkeCA9IHNwZWN0cmFsX21heF9pbmRleChiaW5zLCBTUEVDVFJBTF9IVDIwXzQwX05VTV9CSU5TKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNTMtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE1OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxNjA6c3RhdGljIGlubGluZSB1OCBzcGVjdHJhbF9tYXhfaW5kZXhfaHQyMCh1OCAqYmlucylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNjEte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjE2MjpcdHJldHVybiBzcGVjdHJhbF9tYXhfaW5kZXgoYmlucywgU1BFQ1RSQUxfSFQyMF9OVU1fQklOUyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTYzLX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTY1LS8qIHJldHVybiB0aGUgYml0bWFwIHdlaWdodCBmcm9tIHRoZSBhbGwvdXBwZXIvbG93ZXIgYmlucyAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjE2NjpzdGF0aWMgaW5saW5lIHU4IHNwZWN0cmFsX2JpdG1hcF93ZWlnaHQodTggKmJpbnMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTY3LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTcxLSNpZmRlZiBDT05GSUdfQVRIOUtfQ09NTU9OX1NQRUNUUkFMXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTcyOnZvaWQgYXRoOWtfY21uX3NwZWN0cmFsX2luaXRfZGVidWcoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LCBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3BoeSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTczOnZvaWQgYXRoOWtfY21uX3NwZWN0cmFsX2RlaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE3NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxNzU6dm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTc2LVx0XHRcdFx0IHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTc3OmludCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNzgtXHRcdFx0ICAgICAgIHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxNzk6XHRcdFx0ICAgICAgIGVudW0gc3BlY3RyYWxfbW9kZSBzcGVjdHJhbF9tb2RlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODAtaW50IGF0aF9jbW5fcHJvY2Vzc19mZnQoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODItI2Vsc2VcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxODM6c3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2Ntbl9zcGVjdHJhbF9pbml0X2RlYnVnKHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODQtXHRcdFx0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcGh5KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTg4OnN0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfZGVpbml0X2RlYnVnKHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODkte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xOTEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTkyOnN0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTkzLVx0XHRcdFx0XHRcdCAgIHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAxMTIKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBhdGg5ayBDb21tb24gU3BlY3RyYWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBjb25maWd1cmF0aW9uIHN0YW5kcG9pbnQuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19BVEg5S19DT01NT05fU1BFQ1RSQUxgIGlzIHRoZSBrZXkgaGVyZS4gSWYgdGhhdCYjMzk7cyBlbmFibGVkLCB0aGUgZnVsbCBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAgZnVuY3Rpb24gaW4gYGNvbW1vbi1zcGVjdHJhbC5jYCBnZXRzIGFjdGl2YXRlZC4gTWFrZXMgc2Vuc2UsIHRoYXQmIzM5O3Mgd2hhdCBJJiMzOTtkIGV4cGVjdC4gSG93ZXZlciwgaWYgaXQmIzM5O3MgZGlzYWJsZWQsIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAgaXMganVzdCBhIHN0dWIsIGVmZmVjdGl2ZWx5IHNraXBwaW5nIHRoZSBGRlQgZnJhbWUgcHJvY2Vzc2luZy4gTm93LCB0aGUgZGVwZW5kZW5jaWVzIGFyZSB3aGF0JiMzOTtzIGltcG9ydGFudC4gYENPTkZJR19BVEg5S19DT01NT05fU1BFQ1RSQUxgIGRlcGVuZHMgb24gZWl0aGVyIGBBVEg5S19ERUJVR0ZTYCBvciBgQVRIOUtfSFRDX0RFQlVHRlNgLiBEaXZpbmcgZGVlcGVyLCBgQ09ORklHX0FUSDlLX0hUQ19ERUJVR0ZTYCBpbiB0dXJuIGRlcGVuZHMgb24gYEFUSDlLX0hUQ2AgKmFuZCogYERFQlVHX0ZTYC4gQW5kIGBBVEg5S19IVENgIGl0c2VsZiByZWxpZXMgb24gYFVTQmAgYW5kIGBNQUM4MDIxMWAuIFNvLCBpdCYjMzk7cyBhIGNoYWluLCBlYWNoIGNvbmZpZ3VyYXRpb24gaXRlbSBpcyBkZXBlbmRlbnQgb24gdGhlIHByaW9yLgoKSSBzaG91bGQgcHJvYmFibHkgdmVyaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbiBpdHNlbGYgbm93LiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgYWN0dWFsIGNvZGUgZm9yIGBhdGhfY21uX3Byb2Nlc3NfZmZ0YCBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jYCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCYjMzk7cyBiZWluZyBkb25lIHdoZW4gZW5hYmxlZC4gS25vd2luZyB0aGUgZXhhY3QgY29kZSBiZWluZyBleGVjdXRlZCwgYmFzZWQgb24gdGhlc2UgY29uZGl0aW9ucywgd2lsbCBnaXZlIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjU6XHRcdFx0cmV0dXJuIDA7XG4gNDY2Olx0fVxuIDQ2NzpcdFxuIDQ2ODpcdC8qIHJldHVybnMgMSBpZiB0aGlzIHdhcyBhIHNwZWN0cmFsIGZyYW1lLCBldmVuIGlmIG5vdCBoYW5kbGVkLiAqL1xuIDQ2OTpcdGludCBhdGhfY21uX3Byb2Nlc3NfZmZ0KHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdiwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcbiA0NzA6XHRcdFx0ICAgIHN0cnVjdCBhdGhfcnhfc3RhdHVzICpycywgdTY0IHRzZilcbiA0NzE6XHR7XG4gNDcyOlx0XHR1OCBzYW1wbGVfYnVmW1NQRUNUUkFMX1NBTVBMRV9NQVhfTEVOXSA9IHswfTtcbiA0NzM6XHRcdHN0cnVjdCBhdGhfaHcgKmFoID0gc3BlY19wcml2LVx1MDAzZWFoO1xuIDQ3NDpcdFx0c3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzcGVjX3ByaXYtXHUwMDNlYWgpO1xuIDQ3NTpcdFx0c3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBjb21tb24tXHUwMDNlcHJpdjtcbiA0NzY6XHRcdHU4IG51bV9iaW5zLCAqdmRhdGEgPSAodTggKiloZHI7XG4gNDc3Olx0XHRzdHJ1Y3QgYXRoX3JhZGFyX2luZm8gKnJhZGFyX2luZm87XG4gNDc4Olx0XHRpbnQgbGVuID0gcnMtXHUwMDNlcnNfZGF0YWxlbjtcbiA0Nzk6XHRcdGludCBpO1xuIDQ4MDpcdFx0aW50IGdvdF9zbGVuID0gMDtcbiA0ODE6XHRcdHU4ICAqc2FtcGxlX3N0YXJ0O1xuIDQ4MjpcdFx0aW50IHNhbXBsZV9ieXRlcyA9IDA7XG4gNDgzOlx0XHRpbnQgcmV0ID0gMDtcbiA0ODQ6XHRcdHUxNiBmZnRfbGVuLCBzYW1wbGVfbGVuLCBmcmVxID0gYWgtXHUwMDNlY3VyY2hhbi1cdTAwM2VjaGFuLVx1MDAzZWNlbnRlcl9mcmVxO1xuIDQ4NTpcdFx0ZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFuX3R5cGU7XG4gNDg2Olx0XHRhdGhfY21uX2ZmdF9pZHhfdmFsaWRhdG9yICpmZnRfaWR4X3ZhbGlkYXRvcjtcbiA0ODc6XHRcdGF0aF9jbW5fZmZ0X3NhbXBsZV9oYW5kbGVyICpmZnRfaGFuZGxlcjtcbiA0ODg6XHRcbiA0ODk6XHRcdC8qIEFSOTI4MCBhbmQgYmVmb3JlIHJlcG9ydCB2aWEgQVRIOUtfUEhZRVJSX1JBREFSLCBBUjkzeHggYW5kIG5ld2VyXG4gNDkwOlx0XHQgKiB2aWEgQVRIOUtfUEhZRVJSX1NQRUNUUkFMLiBIYXZlbiYjMzk7dCBzZWVuIEFUSDlLX1BIWUVSUl9GQUxTRV9SQURBUl9FWFRcbiA0OTE6XHRcdCAqIHlldCwgYnV0IHRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgcG9zc2libGUgYXMgd2VsbC5cbiA0OTI6XHRcdCAqL1xuIDQ5MzpcdFx0aWYgKHJzLVx1MDAzZXJzX3BoeWVyciAhPSBBVEg5S19QSFlFUlJfUkFEQVIgXHUwMDI2XHUwMDI2XG4gNDk0Olx0XHQgICAgcnMtXHUwMDNlcnNfcGh5ZXJyICE9IEFUSDlLX1BIWUVSUl9GQUxTRV9SQURBUl9FWFQgXHUwMDI2XHUwMDI2XG4gNDk1Olx0XHQgICAgcnMtXHUwMDNlcnNfcGh5ZXJyICE9IEFUSDlLX1BIWUVSUl9TUEVDVFJBTClcbiA0OTY6XHRcdFx0cmV0dXJuIDA7XG4gNDk3Olx0XG4gNDk4Olx0XHQvKiBjaGVjayBpZiBzcGVjdHJhbCBzY2FuIGJpdCBpcyBzZXQuIFRoaXMgZG9lcyBub3QgaGF2ZSB0byBiZSBjaGVja2VkXG4gNDk5Olx0XHQgKiBpZiByZWNlaXZlZCB0aHJvdWdoIGEgU1BFQ1RSQUwgcGh5IGVycm9yLCBidXQgc2hvdWxkbiYjMzk7dCBodXJ0LlxuIDUwMDpcdFx0ICovXG4gNTAxOlx0XHRyYWRhcl9pbmZvID0gKChzdHJ1Y3QgYXRoX3JhZGFyX2luZm8gKilcdTAwMjZ2ZGF0YVtsZW5dKSAtIDE7XG4gNTAyOlx0XHRpZiAoIShyYWRhcl9pbmZvLVx1MDAzZXB1bHNlX2J3X2luZm8gXHUwMDI2IFNQRUNUUkFMX1NDQU5fQklUTUFTSykpXG4gNTAzOlx0XHRcdHJldHVybiAwO1xuIDUwNDpcdFxuIDUwNTpcdFx0aWYgKCFzcGVjX3ByaXYtXHUwMDNlcmZzX2NoYW5fc3BlY19zY2FuKVxuIDUwNjpcdFx0XHRyZXR1cm4gMTtcbiA1MDc6XHRcbiA1MDg6XHRcdC8qIE91dHB1dCBidWZmZXJzIGFyZSBmdWxsLCBubyBuZWVkIHRvIHByb2Nlc3MgYW55dGhpbmdcbiA1MDk6XHRcdCAqIHNpbmNlIHRoZXJlIGlzIG5vIHNwYWNlIHRvIHB1dCB0aGUgcmVzdWx0IGFueXdheVxuIDUxMDpcdFx0ICovXG4gNTExOlx0XHRyZXQgPSBhdGhfY21uX2lzX2ZmdF9idWZfZnVsbChzcGVjX3ByaXYpO1xuIDUxMjpcdFx0aWYgKHJldCA9PSAxKSB7XG4gNTEzOlx0XHRcdGF0aF9kYmcoY29tbW9uLCBTUEVDVFJBTF9TQ0FOLCBcJiMzNDtGRlQgcmVwb3J0IGlnbm9yZWQsIG5vIHNwYWNlIFwmIzM0O1xuIDUxNDpcdFx0XHRcdFx0XHRcdFwmIzM0O2xlZnQgb24gb3V0cHV0IGJ1ZmZlcnNcXG5cJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTYyMAoJCQkJCQkJb3V0cHV0OiA1NQoJCQkJCQkJdGhvdWdodHM6IDc5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aCBGdXp6aW5nOiBBdGhlcm9zIFVTQiBXaXJlbGVzcyBEcml2ZXIgUlggUGF0aCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBpbiBgYXRoOWtfcnhfcHJlcGFyZWAgd2l0aGluIHRoZSBBdGhlcm9zIFVTQiB3aXJlbGVzcyBkcml2ZXIgKGBhdGg5a19odGNgKS4gVGhlIGNoYW5nZSBpbnRyb2R1Y2VzIGEgbmV3IGNvbmRpdGlvbjogaWYgYSByZWNlaXZlZCBwYWNrZXQgaGFzIGEgQ1JDIGVycm9yIChgQVRIOUtfUlhFUlJfQ1JDYCkgYW5kIGl0cyBsZW5ndGggbWF0Y2hlcyBhIHNwZWN0cmFsIHNhbXBsZSBsZW5ndGgsIGl0JiMzOTtzIGZsYWdnZWQgYXMgcG90ZW50aWFsbHkgcmVsYXRlZCB0byByYWRhciBpbnRlcmZlcmVuY2UgKGBBVEg5S19QSFlFUlJfUkFEQVJgKS4gVGhpcyB0cmlnZ2VycyBhIGNhbGwgdG8gYGF0aF9jbW5fcHJvY2Vzc19mZnRgLgoKTXkgZmlyc3QgdGhvdWdodCBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBMZXQmIzM5O3Mgc2VlLiBBY2NvcmRpbmcgdG8gdGhlIGNyaXRlcmlhLCBpdCYjMzk7cyBhIHBvc2l0aXZlIHNpZ25hbCBpZiB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGluIGEgZHJpdmVyIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMsIGxpa2UgVVNCLiBCaW5nbyEgYGF0aDlrX2h0Y2AgaXMgYSBVU0Igd2lyZWxlc3MgZHJpdmVyLCBhY2Nlc3NpYmxlIHRocm91Z2ggVVNCLiBUaGUgYGF0aDlrX3J4X3ByZXBhcmVgIGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlIFJYIHBhdGgsIHNvIGl0JiMzOTtzIGRpcmVjdGx5IGV4ZWN1dGVkIHdoZW4gVVNCIFJYIHBhY2tldHMgYXJyaXZlLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGlzIG5ldyBsb2dpYyBwYXRoIHNwZWNpZmljYWxseSBmb3IgaGFuZGxpbmcgQ1JDIGVycm9ycyBpbiB0aGUgY29udGV4dCBvZiBzcGVjdHJhbCBzYW1wbGVzLCB3aGljaCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gdGhpcyBkcml2ZXIuIFRoZXJlZm9yZSwgYFdvcnRoRnV6emluZz10cnVlYC4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBGb2N1c1N5bWJvbHMgYW5kIEVuYWJsZUNvbmZpZ3MuCgpIZXJlJiMzOTtzIG15IHRoaW5raW5nOgoqICAgYGF0aDlrX3J4X3Rhc2tsZXRgOiBUaGlzIGlzIHRoZSB0YXNrbGV0IHRoYXQgaGFuZGxlcyB0aGUgUlggYnVmZmVycy4gSXQgY2FsbHMgYGF0aDlrX3J4X3ByZXBhcmVgLCBtYWtpbmcgaXQgYSBjcnVjaWFsIGVudHJ5IHBvaW50LgoqICAgYGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuYDogVGhlIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb24gaXMgYWRkZWQgaW4gYGh0Y19kcnZfdHhyeC5jYCB0byBjaGVjayBpZiB0aGUgbGVuZ3RoIG1hdGNoZXMgc2FtcGxlIGxlbmd0aC4gV2UgbmVlZCB0byBmaW5kIG91dCB3aGV0aGVyIHRoaXMgaXMgaW5saW5lZCBvciBub3QuIFdlIHNob3VsZCBwcm9iYWJseSBhbHNvIGluY2x1ZGUgYGF0aDlrX3J4X3Rhc2tsZXRgIHRvIGVuc3VyZSB0aGF0IHRoaXMgaXMgcmVhY2hhYmxlLgoqICAgYGF0aF9jbW5fcHJvY2Vzc19mZnRgOiBUaGlzIGlzIHRoZSBGRlQgcGFyc2luZyBmdW5jdGlvbiB0aGF0JiMzOTtzIG5vdyBjYWxsZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb24uCgpMZXQgbWUgY2hlY2sgaWYgYGF0aDlrX3J4X3ByZXBhcmVgIGlzIHN0YXRpYyAoaXQgaXMpLiBBbHNvLCBgYXRoOWtfcnhfdGFza2xldGAgaXMgbm9uLXN0YXRpYyAoaXQmIzM5O3MgZWl0aGVyIGV4cG9ydGVkIG9yIGluIGEgaGVhZGVyKS4gSSYjMzk7bGwgYWxzbyBoYXZlIHRvIGNoZWNrIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBodGNfZHJ2X3R4cnguY2AsIGxpa2UgYGF0aDlrX2h0Y19yeF9tc2dgLgoKU28sIHRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoaXMgcGF0Y2ggb3BlbnMgdXAgYSBuZXcgY29kZSBwYXRoIHRyaWdnZXJlZCBieSBDUkMgZXJyb3JzLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHRoZSBGRlQgcHJvY2Vzc2luZy4gVGhpcyBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIHRhcmdldCBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVowLTlfXSYjNDM7IC4qXFwoLiomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTIzPXN0YXRpYyBjb25zdCBpbnQgc3VidHlwZV90eHFfdG9faHdxW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTM5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjQwOmludCBnZXRfaHdfcW51bSh1MTYgcXVldWUsIGludCAqaHdxX21hcClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy00MS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTU1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjU2OnZvaWQgYXRoOWtfaHRjX2NoZWNrX3N0b3BfcXVldWVzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01Ny17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTY3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjY4OnZvaWQgYXRoOWtfaHRjX2NoZWNrX3dha2VfcXVldWVzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy02OS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTc4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjc5OmludCBhdGg5a19odGNfdHhfZ2V0X3Nsb3Qoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTgwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtOTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6OTU6dm9pZCBhdGg5a19odGNfdHhfY2xlYXJfc2xvdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIGludCBzbG90KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTk2LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTAxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjEwMjpzdGF0aWMgaW5saW5lIGVudW0gaHRjX2VuZHBvaW50X2lkIGdldF9odGNfZXBpZChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTAzLVx0XHRcdFx0XHRcdHUxNiBxbnVtKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz0xMzE9Z2V0X2h0Y19lcGlkX3F1ZXVlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgdTggZXBpZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTU2LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjE1NzpzdGF0aWMgaW5saW5lIGludCBzdHJpcF9kcnZfaGVhZGVyKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xNTgtXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xODctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MTg4OmludCBhdGhfaHRjX3R4cV91cGRhdGUoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LCBpbnQgcW51bSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xODktXHRcdCAgICAgICBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWluZm8pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTIxMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzoyMTQ6c3RhdGljIHZvaWQgYXRoOWtfaHRjX3R4X21nbXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTIxNS1cdFx0XHQgICAgICBzdHJ1Y3QgYXRoOWtfaHRjX3ZpZiAqYXZwLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0yNTktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MjYwOnN0YXRpYyB2b2lkIGF0aDlrX2h0Y190eF9kYXRhKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0yNjEtXHRcdFx0ICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMzM5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjM0MDppbnQgYXRoOWtfaHRjX3R4X3N0YXJ0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0zNDEtXHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0zOTEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MzkyOnN0YXRpYyBpbmxpbmUgYm9vbCBfX2F0aDlrX2h0Y19jaGVja190eF9hZ2dyKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0zOTMtXHRcdFx0XHRcdCAgICAgc3RydWN0IGF0aDlrX2h0Y19zdGEgKmlzdGEsIHU4IHRpZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNDA0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjQwNTpzdGF0aWMgdm9pZCBhdGg5a19odGNfY2hlY2tfdHhfYWdncihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNDA2LVx0XHRcdFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTQ0NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo0NDU6c3RhdGljIHZvaWQgYXRoOWtfaHRjX3R4X3Byb2Nlc3Moc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTQ0Ni1cdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01MjgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NTI5OnN0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19odGNfdHhfZHJhaW5xKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01MzAtXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTUzOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo1Mzk6dm9pZCBhdGg5a19odGNfdHhfZHJhaW4oc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTU0MC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTU3Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo1Nzg6dm9pZCBhdGg5a190eF9mYWlsZWRfdGFza2xldChzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNTc5LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNTkxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjU5MjpzdGF0aWMgaW5saW5lIGJvb2wgY2hlY2tfY29va2llKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01OTMtXHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy02MTctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NjE4OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiogYXRoOWtfaHRjX3R4X2dldF9wYWNrZXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTYxOS1cdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBfX3dtaV9ldmVudF90eHN0YXR1cyAqdHhzKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy02NDYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NjQ3OnZvaWQgYXRoOWtfaHRjX3R4c3RhdHVzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgdm9pZCAqd21pX2V2ZW50KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTY0OC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTY4OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo2OTA6dm9pZCBhdGg5a19odGNfdHhlcCh2b2lkICpkcnZfcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy02OTEtXHRcdCAgICBlbnVtIGh0Y19lbmRwb2ludF9pZCBlcF9pZCwgYm9vbCB0eG9rKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy03MTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NzE2OnN0YXRpYyBpbmxpbmUgYm9vbCBjaGVja19wYWNrZXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTcxNy17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTczMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo3MzM6c3RhdGljIHZvaWQgYXRoOWtfaHRjX3R4X2NsZWFudXBfcXVldWUoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTczNC1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICplcGlkX3F1ZXVlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy03NjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NzYxOnZvaWQgYXRoOWtfaHRjX3R4X2NsZWFudXBfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNzYyLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtODA4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjgwOTppbnQgYXRoOWtfdHhfaW5pdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtODEwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtODIxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjgyMjp2b2lkIGF0aDlrX3R4X2NsZWFudXAoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTgyMy17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTgyNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo4Mjc6Ym9vbCBhdGg5a19odGNfdHhxX3NldHVwKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgaW50IHN1YnR5cGUpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtODI4LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtODUxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjg1MjppbnQgYXRoOWtfaHRjX2NhYnFfc2V0dXAoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTg1My17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTg2OC0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo4Njk6dTMyIGF0aDlrX2h0Y19jYWxjcnhmaWx0ZXIoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTg3MC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTkxNS0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo5MTY6c3RhdGljIHZvaWQgYXRoOWtfaHRjX29wbW9kZV9pbml0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy05MTcte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy05MjktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6OTMwOnZvaWQgYXRoOWtfaG9zdF9yeF9pbml0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy05MzEte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy05MzctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6OTM4OnN0YXRpYyBpbmxpbmUgdm9pZCBjb252ZXJ0X2h0Y19mbGFnKHN0cnVjdCBhdGhfcnhfc3RhdHVzICpyeF9zdGF0cyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy05MzktXHRcdFx0XHQgICBzdHJ1Y3QgYXRoX2h0Y19yeF9zdGF0dXMgKnJ4c3RhdHVzKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy05NDgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6OTQ5OnN0YXRpYyB2b2lkIHJ4X3N0YXR1c19odGNfdG9fYXRoKHN0cnVjdCBhdGhfcnhfc3RhdHVzICpyeF9zdGF0cyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy05NTAtXHRcdFx0XHQgc3RydWN0IGF0aF9odGNfcnhfc3RhdHVzICpyeHN0YXR1cylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtOTc4LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjk3OTpzdGF0aWMgYm9vbCBhdGg5a19odGNfaXNfc3BlY3RyYWxfc2FtcGxlX2xlbihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtOTgwLVx0XHRcdFx0XHQgICAgIHUxNiBsZW4pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTk5Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo5OTg6c3RhdGljIGJvb2wgYXRoOWtfcnhfcHJlcGFyZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtOTk5LVx0XHRcdCAgICAgc3RydWN0IGF0aDlrX2h0Y19yeGJ1ZiAqcnhidWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTExMTgtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MTExOTp2b2lkIGF0aDlrX3J4X3Rhc2tsZXQoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTExMjAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xMTcyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjExNzM6dm9pZCBhdGg5a19odGNfcnhlcCh2b2lkICpkcnZfcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xMTc0LVx0XHQgICAgZW51bSBodGNfZW5kcG9pbnRfaWQgZXBfaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEyMTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MTIxMzp2b2lkIGF0aDlrX3J4X2NsZWFudXAoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEyMTQte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xMjI0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjEyMjU6aW50IGF0aDlrX3J4X2luaXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEyMjYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzU5MAoJCQkJCQkJb3V0cHV0OiAxNzcKCQkJCQkJCXRob3VnaHRzOiA0ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGF0aDlrX2h0YyBSWCBQYXRoIGZvciBTcGVjdHJhbCBTYW1wbGUgRGV0ZWN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUga2V5IEZvY3VzU3ltYm9scyBqdW1wIG91dDogYGF0aDlrX3J4X3Rhc2tsZXRgLCBgYXRoOWtfaHRjX3J4ZXBgLCBhbmQgYGF0aF9jbW5fcHJvY2Vzc19mZnRgLiBUaGVzZSBhcmUgdGhlIGNyaXRpY2FsIHBvaW50cyB3aGVyZSB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBSWCBwYXRoLiBTcGVjaWZpY2FsbHksIGBhdGg5a19odGNfcnhlcGAgcHVsbHMgU0tCcyBmcm9tIHRoZSBVU0IgSFRDIGVuZHBvaW50LCBxdWV1ZXMgdGhlbSB0byBgcHJpdi0mZ3Q7cngucnhidWZfcXVldWVgLCBhbmQgc2NoZWR1bGVzIHRoZSBgcnhfdGFza2xldGAuIFRoZW4gYGF0aDlrX3J4X3Rhc2tsZXRgIGtpY2tzIGluLCBkZXF1ZXVlcyB0aGUgU0tCLCBhbmQgY2FsbHMgYGF0aDlrX3J4X3ByZXBhcmVgLiBXaXRoaW4gYGF0aDlrX3J4X3ByZXBhcmVgLCB3ZSBmaW5kIHRoZSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QsIHNwZWNpZmljYWxseSBgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW5gIGFuZCBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgZW5hYmxpbmcgYWxsIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBUaGUgYmFzZSByZXF1aXJlbWVudCBzZWVtcyB0byBiZSBgQVRIOUtfSFRDYCwgYW5kIHdlIG5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgZW5hYmxlZC4gYEFUSDlLX0hUQ2AgZGVwZW5kcyBvbiBgVVNCICZhbXA7JmFtcDsgTUFDODAyMTFgLCBzbyB0aG9zZSBhcmUgYWxzbyB2aXRhbC4gRnVydGhlciwgd2Ugc2VlIGBBVEg5S19IVENfREVCVUdGU2AgKGRlcGVuZGVudCBvbiBgQVRIOUtfSFRDICZhbXA7JmFtcDsgREVCVUdfRlNgKSBhbmQgYEFUSDlLX0NPTU1PTl9TUEVDVFJBTGAgKGRlcGVuZGVudCBvbiBgQVRIOUtfREVCVUdGUyB8fCBBVEg5S19IVENfREVCVUdGU2AsIGFuZCBzZWxlY3RpbmcgYFJFTEFZYCkuIFNvIHRvIGVuc3VyZSB0aGUgZW50aXJlIGZlYXR1cmUgaXMgZW5hYmxlZCwgd2UgbmVlZCB0byBlbnN1cmUgdGhlc2UgYXJlIGVuYWJsZWQ6ICYjMzQ7QVRIOUtfSFRDJiMzNDssICYjMzQ7QVRIOUtfSFRDX0RFQlVHRlMmIzM0OywgYW5kICYjMzQ7QVRIOUtfQ09NTU9OX1NQRUNUUkFMJiMzNDsuCgpUaGUgcGF0Y2gmIzM5O3MgcHVycG9zZSBiZWNvbWVzIGNsZWFyLiBJdCYjMzk7cyBhYm91dCBpbnRyb2R1Y2luZyBGRlQgc3BlY3RyYWwgc2FtcGxlIGRldGVjdGlvbiB0byBDUkMtZXJyb3JlZCBmcmFtZXMgd2l0aGluIHRoZSBSWCBwcm9jZXNzaW5nIHBhdGggaW4gdGhlIGF0aDlrX2h0YyBVU0Igd2lyZWxlc3MgZHJpdmVyLiBGcmFtZXMgd2l0aCBDUkMgZXJyb3JzIHRoYXQgYWxpZ24gd2l0aCBzcGVjaWZpYyBzcGVjdHJhbCBGRlQgc2FtcGxlIHNpemVzIGFyZSBwYXNzZWQgdG8gYGF0aF9jbW5fcHJvY2Vzc19mZnRgIGZvciBzcGVjdHJhbCBhbmFseXNpcy4gQmVjYXVzZSB0aGlzIGNvZGUgcGF0aCBjYW4gYmUgcmVhY2hlZCB0aHJvdWdoIFVTQiBkZXZpY2UgZW11bGF0aW9uLCBpdCByZXByZXNlbnRzIGEgcG90ZW50aWFsbHkgbmV3IGF0dGFjayBzdXJmYWNlIGR1ZSB0byByZWFjaGFibGUgbW9kaWZpZWQgZXhlY3V0YWJsZSBkcml2ZXIgY29kZSwgYW5kIHRoZXJlZm9yZSB3YXJyYW50cyBmdXp6aW5nLgoKQWxyaWdodCwgdGhhdCYjMzk7cyB0aGUgYW5hbHlzaXMuIFRpbWUgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDlLX0hUQyYjMzQ7LAogICAgJiMzNDtBVEg5S19IVENfREVCVUdGUyYjMzQ7LAogICAgJiMzNDtBVEg5S19DT01NT05fU1BFQ1RSQUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthdGg5a19yeF90YXNrbGV0JiMzNDssCiAgICAmIzM0O2F0aDlrX2h0Y19yeGVwJiMzNDssCiAgICAmIzM0O2F0aF9jbW5fcHJvY2Vzc19mZnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzcGVjdHJhbCBGRlQgc2FtcGxlIGRldGVjdGlvbiBmb3IgQ1JDLWVycm9yZWQgZnJhbWVzIGluIHRoZSBSWCBwcm9jZXNzaW5nIHBhdGggKGF0aDlrX3J4X3ByZXBhcmUpIG9mIHRoZSBhdGg5a19odGMgVVNCIHdpcmVsZXNzIGRyaXZlciwgZGlyZWN0aW5nIHF1YWxpZnlpbmcgZnJhbWVzIGludG8gYXRoX2Ntbl9wcm9jZXNzX2ZmdC4gQmVjYXVzZSBhdGg5a19odGMgaXMgYSBVU0IgV2ktRmkgZHJpdmVyIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24sIHRoaXMgdG91Y2hlcyByZWFjaGFibGUga2VybmVsIGNvZGUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QVRIOUtfSFRDJiMzNDssCiAgICAmIzM0O0FUSDlLX0hUQ19ERUJVR0ZTJiMzNDssCiAgICAmIzM0O0FUSDlLX0NPTU1PTl9TUEVDVFJBTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2F0aDlrX3J4X3Rhc2tsZXQmIzM0OywKICAgICYjMzQ7YXRoOWtfaHRjX3J4ZXAmIzM0OywKICAgICYjMzQ7YXRoX2Ntbl9wcm9jZXNzX2ZmdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHNwZWN0cmFsIEZGVCBzYW1wbGUgZGV0ZWN0aW9uIGZvciBDUkMtZXJyb3JlZCBmcmFtZXMgaW4gdGhlIFJYIHByb2Nlc3NpbmcgcGF0aCAoYXRoOWtfcnhfcHJlcGFyZSkgb2YgdGhlIGF0aDlrX2h0YyBVU0Igd2lyZWxlc3MgZHJpdmVyLCBkaXJlY3RpbmcgcXVhbGlmeWluZyBmcmFtZXMgaW50byBhdGhfY21uX3Byb2Nlc3NfZmZ0LiBCZWNhdXNlIGF0aDlrX2h0YyBpcyBhIFVTQiBXaS1GaSBkcml2ZXIgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiwgdGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBrZXJuZWwgY29kZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzcGVjdHJhbCBzY2FuIHNhbXBsZSBsZW5ndGggdmFsaWRhdGlvbiB2aWEgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW4oKSBhbmQgZm9yd2FyZHMgQ1JDLWVycm9yZWQgZnJhbWVzIHdpdGggbWF0Y2hpbmcgbGVuZ3RocyB0byBhdGhfY21uX3Byb2Nlc3NfZmZ0KCkgaW4gYXRoOWtfcnhfcHJlcGFyZSgpLiBBbGwgdmFyaWFibGVzIGFuZCBzdHJ1Y3R1cmUgZmllbGRzIHVzZWQgKGUuZy4sIHJzX2RhdGFsZW4sIHJ4X3N0YXRzLnJzX3BoeWVyciwgY2hhbl90eXBlLCBmZnRfbGVuKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBidWZmZXJzLCBwZXJmb3JtIGFueSBjb3B5X3RvX3VzZXIgb3BlcmF0aW9ucywgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBvciBleHBvc2UgcGFkZGluZy91bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIChzdWNoIGFzIGJ1ZmZlciBib3VuZHMgb3IgcG9pbnRlciBoYW5kbGluZykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5Yzg3MTJhZDE0MWVjNzUwZmIxZjg1ZGZhZDNmYzdhMWJlNjg4ZjI0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAwMjo0MTo0NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYwppbmRleCBiZWQ3ZWEyNDI1YTBlLi5mMjFjZmMwMzQyNmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jCkBAIC05NjksNiAmIzQzOzk2OSwzMiBAQCBzdGF0aWMgdm9pZCByeF9zdGF0dXNfaHRjX3RvX2F0aChzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnhfc3RhdHMsCiAJY29udmVydF9odGNfZmxhZyhyeF9zdGF0cywgcnhzdGF0dXMpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBUaGUgZmlybXdhcmUgcmVwb3J0cyBhIGZyYW1lIHRoYXQgZmFpbGVkIGl0cyBDUkMgYXMgYSBDUkMgZXJyb3IgZXZlbiB3aGVuCiYjNDM7ICogdGhlIFBIWSBlcnJvciBiaXQgaXMgc2V0IGFzIHdlbGwsIHNvIHVuZGVyIGludGVyZmVyZW5jZSBzcGVjdHJhbCBzYW1wbGVzCiYjNDM7ICogcmVhY2ggdGhlIGhvc3QgYXMgQ1JDIGVycm9ycy4gQSBzYW1wbGUgaXMgcmVjb2duaXNhYmxlIGJ5IGl0cyBzaXplOiB0aGUKJiM0MzsgKiBGRlQgcmVwb3J0IGxlbmd0aCBmb3IgdGhlIGNoYW5uZWwgd2lkdGgsIHBsdXMgb3IgbWludXMgdGhlIHR3byBieXRlcyB0aGUKJiM0MzsgKiBNQUMgbWF5IGFkZCBvciBkcm9wLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKJiM0MzsJCQkJCSAgICAgdTE2IGxlbikKJiM0Mzt7CiYjNDM7CWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbl90eXBlOwomIzQzOwl1MTYgZmZ0X2xlbjsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3NwZWNfcHJpdi5zcGVjdHJhbF9tb2RlID09IFNQRUNUUkFMX0RJU0FCTEVEKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwljaGFuX3R5cGUgPSBjZmc4MDIxMV9nZXRfY2hhbmRlZl90eXBlKCZhbXA7cHJpdi0mZ3Q7aHctJmd0O2NvbmYuY2hhbmRlZik7CiYjNDM7CWlmIChjaGFuX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUyB8fAomIzQzOwkgICAgY2hhbl90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwUExVUykKJiM0MzsJCWZmdF9sZW4gPSBTUEVDVFJBTF9IVDIwXzQwX1RPVEFMX0RBVEFfTEVOOwomIzQzOwllbHNlCiYjNDM7CQlmZnRfbGVuID0gU1BFQ1RSQUxfSFQyMF9UT1RBTF9EQVRBX0xFTjsKJiM0MzsKJiM0MzsJcmV0dXJuIGxlbiAmIzQzOyAxICZndDs9IGZmdF9sZW4gJmFtcDsmYW1wOyBsZW4gJmx0Oz0gZmZ0X2xlbiAmIzQzOyAyOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGF0aDlrX3J4X3ByZXBhcmUoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAogCQkJICAgICBzdHJ1Y3QgYXRoOWtfaHRjX3J4YnVmICpyeGJ1ZiwKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKQEAgLTEwNTIsNiAmIzQzOzEwNzgsMTggQEAgc3RhdGljIGJvb2wgYXRoOWtfcnhfcHJlcGFyZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCiAJCWdvdG8gcnhfbmV4dDsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogTGV0IHRoZSBGRlQgcGFyc2VyIGRlY2lkZSB3aGV0aGVyIGEgQ1JDIGVycm9yIG9mIHNhbXBsZSBzaXplIGlzIGEKJiM0MzsJICogc2FtcGxlOyBpdCB2YWxpZGF0ZXMgdGhlIGNvbnRlbnRzIGFuZCByZXR1cm5zIDAgZm9yIGFueXRoaW5nIGVsc2UuCiYjNDM7CSAqLwomIzQzOwlpZiAodW5saWtlbHkocnhfc3RhdHMucnNfc3RhdHVzICZhbXA7IEFUSDlLX1JYRVJSX0NSQykgJmFtcDsmYW1wOwomIzQzOwkgICAgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW4ocHJpdiwgcnNfZGF0YWxlbikpIHsKJiM0MzsJCXJ4X3N0YXRzLnJzX3BoeWVyciA9IEFUSDlLX1BIWUVSUl9SQURBUjsKJiM0MzsJCWlmIChhdGhfY21uX3Byb2Nlc3NfZmZ0KCZhbXA7cHJpdi0mZ3Q7c3BlY19wcml2LCBoZHIsICZhbXA7cnhfc3RhdHMsCiYjNDM7CQkJCQlyeF9zdGF0dXMtJmd0O21hY3RpbWUpKQomIzQzOwkJCWdvdG8gcnhfbmV4dDsKJiM0MzsJfQomIzQzOwogCWlmICghYXRoOWtfY21uX3J4X2FjY2VwdChjb21tb24sIGhkciwgcnhfc3RhdHVzLCAmYW1wO3J4X3N0YXRzLAogCQkJJmFtcDtkZWNyeXB0X2Vycm9yLCBwcml2LSZndDtyeGZpbHRlcikpCiAJCWdvdG8gcnhfbmV4dDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MzgKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGF0aDlrIFJYIFBhdGgqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgYXBwcm9hY2ggaXMgdG8gdXNlIGBncmVwcGVyYCBhbmQgYHJlYWQtZmlsZWAgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIHNlY3Rpb25zLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjaGFuZ2UgaW1wYWN0cyB0aGUgZGF0YSBmbG93LCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBgYXRoOWtfcnhfcHJlcGFyZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguY2Agc2luY2UgdGhhdCBzZWVtcyBsaWtlIHRoZSByZWxldmFudCBmaWxlLiBJJiMzOTtsbCByZWFkIGFyb3VuZCBsaW5lcyA5NjkgdG8gMTA4MCBvZiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jYCB0byBzZWUgaG93IHRoZSBjb2RlIGZ1bmN0aW9ucyBhcm91bmQgdGhhdCBwYXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk2MDpcdFxuIDk2MTpcdFx0bWVtY3B5KHJ4X3N0YXRzLVx1MDAzZXJzX3Jzc2lfY3RsLCByeHN0YXR1cy1cdTAwM2Vyc19yc3NpX2N0bCxcbiA5NjI6XHRcdFx0c2l6ZW9mKHJ4X3N0YXRzLVx1MDAzZXJzX3Jzc2lfY3RsKSk7XG4gOTYzOlx0XHRtZW1jcHkocnhfc3RhdHMtXHUwMDNlcnNfcnNzaV9leHQsIHJ4c3RhdHVzLVx1MDAzZXJzX3Jzc2lfZXh0LFxuIDk2NDpcdFx0XHRzaXplb2Yocnhfc3RhdHMtXHUwMDNlcnNfcnNzaV9leHQpKTtcbiA5NjU6XHRcbiA5NjY6XHRcdHJ4X3N0YXRzLVx1MDAzZXJzX2lzYWdnclx0PSByeHN0YXR1cy1cdTAwM2Vyc19pc2FnZ3I7XG4gOTY3Olx0XHRyeF9zdGF0cy1cdTAwM2Vyc19tb3JlYWdnclx0PSByeHN0YXR1cy1cdTAwM2Vyc19tb3JlYWdncjtcbiA5Njg6XHRcdHJ4X3N0YXRzLVx1MDAzZXJzX251bV9kZWxpbXNcdD0gcnhzdGF0dXMtXHUwMDNlcnNfbnVtX2RlbGltcztcbiA5Njk6XHRcdGNvbnZlcnRfaHRjX2ZsYWcocnhfc3RhdHMsIHJ4c3RhdHVzKTtcbiA5NzA6XHR9XG4gOTcxOlx0XG4gOTcyOlx0LypcbiA5NzM6XHQgKiBUaGUgZmlybXdhcmUgcmVwb3J0cyBhIGZyYW1lIHRoYXQgZmFpbGVkIGl0cyBDUkMgYXMgYSBDUkMgZXJyb3IgZXZlbiB3aGVuXG4gOTc0Olx0ICogdGhlIFBIWSBlcnJvciBiaXQgaXMgc2V0IGFzIHdlbGwsIHNvIHVuZGVyIGludGVyZmVyZW5jZSBzcGVjdHJhbCBzYW1wbGVzXG4gOTc1Olx0ICogcmVhY2ggdGhlIGhvc3QgYXMgQ1JDIGVycm9ycy4gQSBzYW1wbGUgaXMgcmVjb2duaXNhYmxlIGJ5IGl0cyBzaXplOiB0aGVcbiA5NzY6XHQgKiBGRlQgcmVwb3J0IGxlbmd0aCBmb3IgdGhlIGNoYW5uZWwgd2lkdGgsIHBsdXMgb3IgbWludXMgdGhlIHR3byBieXRlcyB0aGVcbiA5Nzc6XHQgKiBNQUMgbWF5IGFkZCBvciBkcm9wLlxuIDk3ODpcdCAqL1xuIDk3OTpcdHN0YXRpYyBib29sIGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbiA5ODA6XHRcdFx0XHRcdFx0ICAgICB1MTYgbGVuKVxuIDk4MTpcdHtcbiA5ODI6XHRcdGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbl90eXBlO1xuIDk4MzpcdFx0dTE2IGZmdF9sZW47XG4gOTg0Olx0XG4gOTg1Olx0XHRpZiAocHJpdi1cdTAwM2VzcGVjX3ByaXYuc3BlY3RyYWxfbW9kZSA9PSBTUEVDVFJBTF9ESVNBQkxFRClcbiA5ODY6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDk4NzpcdFxuIDk4ODpcdFx0Y2hhbl90eXBlID0gY2ZnODAyMTFfZ2V0X2NoYW5kZWZfdHlwZShcdTAwMjZwcml2LVx1MDAzZWh3LVx1MDAzZWNvbmYuY2hhbmRlZik7XG4gOTg5Olx0XHRpZiAoY2hhbl90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMgfHxcbiA5OTA6XHRcdCAgICBjaGFuX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTKVxuIDk5MTpcdFx0XHRmZnRfbGVuID0gU1BFQ1RSQUxfSFQyMF80MF9UT1RBTF9EQVRBX0xFTjtcbiA5OTI6XHRcdGVsc2VcbiA5OTM6XHRcdFx0ZmZ0X2xlbiA9IFNQRUNUUkFMX0hUMjBfVE9UQUxfREFUQV9MRU47XG4gOTk0Olx0XG4gOTk1Olx0XHRyZXR1cm4gbGVuICYjNDM7IDEgXHUwMDNlPSBmZnRfbGVuIFx1MDAyNlx1MDAyNiBsZW4gXHUwMDNjPSBmZnRfbGVuICYjNDM7IDI7XG4gOTk2Olx0fVxuIDk5NzpcdFxuIDk5ODpcdHN0YXRpYyBib29sIGF0aDlrX3J4X3ByZXBhcmUoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuIDk5OTpcdFx0XHRcdCAgICAgc3RydWN0IGF0aDlrX2h0Y19yeGJ1ZiAqcnhidWYsXG4xMDAwOlx0XHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKVxuMTAwMTpcdFxuMTAwMjpcdHtcbjEwMDM6XHRcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7XG4xMDA0Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHByaXYtXHUwMDNlaHc7XG4xMDA1Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcnhidWYtXHUwMDNlc2tiO1xuMTAwNjpcdFx0c3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihwcml2LVx1MDAzZWFoKTtcbjEwMDc6XHRcdHN0cnVjdCBhdGhfaHcgKmFoID0gY29tbW9uLVx1MDAzZWFoO1xuMTAwODpcdFx0c3RydWN0IGF0aF9odGNfcnhfc3RhdHVzICpyeHN0YXR1cztcbjEwMDk6XHRcdHN0cnVjdCBhdGhfcnhfc3RhdHVzIHJ4X3N0YXRzO1xuMTAxMDpcdFx0Ym9vbCBkZWNyeXB0X2Vycm9yID0gZmFsc2U7XG4xMDExOlx0XHR1MTYgcnNfZGF0YWxlbjtcbjEwMTI6XHRcdGJvb2wgaXNfcGh5ZXJyO1xuMTAxMzpcdFxuMTAxNDpcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIEhUQ19SWF9GUkFNRV9IRUFERVJfU0laRSkge1xuMTAxNTpcdFx0XHRhdGhfZXJyKGNvbW1vbiwgXCYjMzQ7Q29ycnVwdGVkIFJYIGZyYW1lLCBkcm9wcGluZyAobGVuOiAlZClcXG5cJiMzNDssXG4xMDE2Olx0XHRcdFx0c2tiLVx1MDAzZWxlbik7XG4xMDE3Olx0XHRcdGdvdG8gcnhfbmV4dDtcbjEwMTg6XHRcdH1cbjEwMTk6XHRcbjEwMjA6XHRcdHJ4c3RhdHVzID0gKHN0cnVjdCBhdGhfaHRjX3J4X3N0YXR1cyAqKXNrYi1cdTAwM2VkYXRhO1xuMTAyMTpcdFxuMTAyMjpcdFx0cnNfZGF0YWxlbiA9IGJlMTZfdG9fY3B1KHJ4c3RhdHVzLVx1MDAzZXJzX2RhdGFsZW4pO1xuMTAyMzpcdFx0aWYgKHVubGlrZWx5KHJzX2RhdGFsZW4gLVxuMTAyNDpcdFx0ICAgIChza2ItXHUwMDNlbGVuIC0gSFRDX1JYX0ZSQU1FX0hFQURFUl9TSVpFKSAhPSAwKSkge1xuMTAyNTpcdFx0XHRhdGhfZXJyKGNvbW1vbixcbjEwMjY6XHRcdFx0XHRcJiMzNDtDb3JydXB0ZWQgUlggZGF0YSBsZW4sIGRyb3BwaW5nIChkbGVuOiAlZCwgc2tibGVuOiAlZClcXG5cJiMzNDssXG4xMDI3Olx0XHRcdFx0cnNfZGF0YWxlbiwgc2tiLVx1MDAzZWxlbik7XG4xMDI4Olx0XHRcdGdvdG8gcnhfbmV4dDtcbjEwMjk6XHRcdH1cbjEwMzA6XHRcbjEwMzE6XHRcdGlzX3BoeWVyciA9IHJ4c3RhdHVzLVx1MDAzZXJzX3N0YXR1cyBcdTAwMjYgQVRIOUtfUlhFUlJfUEhZO1xuMTAzMjpcdFx0LypcbjEwMzM6XHRcdCAqIERpc2NhcmQgemVyby1sZW5ndGggcGFja2V0cyBhbmQgcGFja2V0cyBzbWFsbGVyIHRoYW4gYW4gQUNLXG4xMDM0Olx0XHQgKiB3aGljaCBhcmUgbm90IFBIWV9FUlJPUiAoc2hvcnQgcmFkYXIgcHVsc2VzIGhhdmUgYSBsZW5ndGggb2YgMylcbjEwMzU6XHRcdCAqL1xuMTAzNjpcdFx0aWYgKHVubGlrZWx5KCFyc19kYXRhbGVuIHx8IChyc19kYXRhbGVuIFx1MDAzYyAxMCBcdTAwMjZcdTAwMjYgIWlzX3BoeWVycikpKSB7XG4xMDM3Olx0XHRcdGF0aF9kYmcoY29tbW9uLCBBTlksXG4xMDM4Olx0XHRcdFx0XCYjMzQ7U2hvcnQgUlggZGF0YSBsZW4sIGRyb3BwaW5nIChkbGVuOiAlZClcXG5cJiMzNDssXG4xMDM5Olx0XHRcdFx0cnNfZGF0YWxlbik7XG4xMDQwOlx0XHRcdGdvdG8gcnhfbmV4dDtcbjEwNDE6XHRcdH1cbjEwNDI6XHRcbjEwNDM6XHRcdGlmIChyeHN0YXR1cy1cdTAwM2Vyc19rZXlpeCBcdTAwM2U9IEFUSF9LRVlNQVggXHUwMDI2XHUwMDI2XG4xMDQ0Olx0XHQgICAgcnhzdGF0dXMtXHUwMDNlcnNfa2V5aXggIT0gQVRIOUtfUlhLRVlJWF9JTlZBTElEKSB7XG4xMDQ1Olx0XHRcdGF0aF9kYmcoY29tbW9uLCBBTlksXG4xMDQ2Olx0XHRcdFx0XCYjMzQ7SW52YWxpZCBrZXlpeCwgZHJvcHBpbmcgKGtleWl4OiAlZClcXG5cJiMzNDssXG4xMDQ3Olx0XHRcdFx0cnhzdGF0dXMtXHUwMDNlcnNfa2V5aXgpO1xuMTA0ODpcdFx0XHRnb3RvIHJ4X25leHQ7XG4xMDQ5Olx0XHR9XG4xMDUwOlx0XG4xMDUxOlx0XHQvKiBHZXQgdGhlIFJYIHN0YXR1cyBpbmZvcm1hdGlvbiAqL1xuMTA1MjpcdFxuMTA1MzpcdFx0bWVtc2V0KHJ4X3N0YXR1cywgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzKSk7XG4xMDU0Olx0XG4xMDU1Olx0XHQvKiBDb3B5IGV2ZXJ5dGhpbmcgZnJvbSBhdGhfaHRjX3J4X3N0YXR1cyAoSFRDX1JYX0ZSQU1FX0hFQURFUikuXG4xMDU2Olx0XHQgKiBBZnRlciB0aGlzLCB3ZSBjYW4gZHJvcCB0aGlzIHBhcnQgb2Ygc2tiLiAqL1xuMTA1NzpcdFx0cnhfc3RhdHVzX2h0Y190b19hdGgoXHUwMDI2cnhfc3RhdHMsIHJ4c3RhdHVzKTtcbjEwNTg6XHRcdGF0aDlrX2h0Y19lcnJfc3RhdF9yeChwcml2LCBcdTAwMjZyeF9zdGF0cyk7XG4xMDU5Olx0XHRyeF9zdGF0dXMtXHUwMDNlbWFjdGltZSA9IGJlNjRfdG9fY3B1KHJ4c3RhdHVzLVx1MDAzZXJzX3RzdGFtcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MzYKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byBgaHRjX2Rydl90eHJ4LmNgIGZvciBEZWVwZXIgSW5zaWdodCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gbGluZXMgZnJvbSAxMDYwIG9ud2FyZCBpbiBgaHRjX2Rydl90eHJ4LmNgLiBJIG5lZWQgYSBjbG9zZXIgbG9vayBhdCB0aGlzIHNlY3Rpb24sIGFuZCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdvaW5nIGxpbmUgYnkgbGluZS4gSSBzdXNwZWN0IHRoaXMgaXMgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIHRyYW5zbWlzc2lvbiBhbmQgcmVjZXB0aW9uIGhhbmRsaW5nIGxvZ2ljIGlzLiBJJiMzOTttIGhvcGluZyB0byBkaXNjb3ZlciBzb21lIGtleSBlbGVtZW50cyB3aXRoaW4gdGhpcyBmaWxlLCBhcyB3ZWxsIGFzIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtIGxldmVsIGRlc2lnbi4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGRpZyB1cCwgc2hhbGwgd2U/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDYwOlx0XHRza2JfcHVsbChza2IsIEhUQ19SWF9GUkFNRV9IRUFERVJfU0laRSk7XG4xMDYxOlx0XG4xMDYyOlx0XHQvKlxuMTA2MzpcdFx0ICogZXZlcnl0aGluZyBidXQgdGhlIHJhdGUgaXMgY2hlY2tlZCBoZXJlLCB0aGUgcmF0ZSBjaGVjayBpcyBkb25lXG4xMDY0Olx0XHQgKiBzZXBhcmF0ZWx5IHRvIGF2b2lkIGRvaW5nIHR3byBsb29rdXBzIGZvciBhIHJhdGUgZm9yIGVhY2ggZnJhbWUuXG4xMDY1Olx0XHQgKi9cbjEwNjY6XHRcdGhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cdTAwM2VkYXRhO1xuMTA2NzpcdFxuMTA2ODpcdFx0LypcbjEwNjk6XHRcdCAqIFByb2Nlc3MgUEhZIGVycm9ycyBhbmQgcmV0dXJuIHNvIHRoYXQgdGhlIHBhY2tldFxuMTA3MDpcdFx0ICogY2FuIGJlIGRyb3BwZWQuXG4xMDcxOlx0XHQgKi9cbjEwNzI6XHRcdGlmICh1bmxpa2VseShpc19waHllcnIpKSB7XG4xMDczOlx0XHRcdC8qIFRPRE86IE5vdCB1c2luZyBERlMgcHJvY2Vzc2luZyBub3cuICovXG4xMDc0Olx0XHRcdGlmIChhdGhfY21uX3Byb2Nlc3NfZmZ0KFx1MDAyNnByaXYtXHUwMDNlc3BlY19wcml2LCBoZHIsXG4xMDc1Olx0XHRcdFx0XHQgICAgXHUwMDI2cnhfc3RhdHMsIHJ4X3N0YXR1cy1cdTAwM2VtYWN0aW1lKSkge1xuMTA3NjpcdFx0XHRcdC8qIFRPRE86IENvZGUgdG8gY29sbGVjdCBzcGVjdHJhbCBzY2FuIHN0YXRpc3RpY3MgKi9cbjEwNzc6XHRcdFx0fVxuMTA3ODpcdFx0XHRnb3RvIHJ4X25leHQ7XG4xMDc5Olx0XHR9XG4xMDgwOlx0XG4xMDgxOlx0XHQvKlxuMTA4MjpcdFx0ICogTGV0IHRoZSBGRlQgcGFyc2VyIGRlY2lkZSB3aGV0aGVyIGEgQ1JDIGVycm9yIG9mIHNhbXBsZSBzaXplIGlzIGFcbjEwODM6XHRcdCAqIHNhbXBsZTsgaXQgdmFsaWRhdGVzIHRoZSBjb250ZW50cyBhbmQgcmV0dXJucyAwIGZvciBhbnl0aGluZyBlbHNlLlxuMTA4NDpcdFx0ICovXG4xMDg1Olx0XHRpZiAodW5saWtlbHkocnhfc3RhdHMucnNfc3RhdHVzIFx1MDAyNiBBVEg5S19SWEVSUl9DUkMpIFx1MDAyNlx1MDAyNlxuMTA4NjpcdFx0ICAgIGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKHByaXYsIHJzX2RhdGFsZW4pKSB7XG4xMDg3Olx0XHRcdHJ4X3N0YXRzLnJzX3BoeWVyciA9IEFUSDlLX1BIWUVSUl9SQURBUjtcbjEwODg6XHRcdFx0aWYgKGF0aF9jbW5fcHJvY2Vzc19mZnQoXHUwMDI2cHJpdi1cdTAwM2VzcGVjX3ByaXYsIGhkciwgXHUwMDI2cnhfc3RhdHMsXG4xMDg5Olx0XHRcdFx0XHRcdHJ4X3N0YXR1cy1cdTAwM2VtYWN0aW1lKSlcbjEwOTA6XHRcdFx0XHRnb3RvIHJ4X25leHQ7XG4xMDkxOlx0XHR9XG4xMDkyOlx0XG4xMDkzOlx0XHRpZiAoIWF0aDlrX2Ntbl9yeF9hY2NlcHQoY29tbW9uLCBoZHIsIHJ4X3N0YXR1cywgXHUwMDI2cnhfc3RhdHMsXG4xMDk0Olx0XHRcdFx0XHUwMDI2ZGVjcnlwdF9lcnJvciwgcHJpdi1cdTAwM2VyeGZpbHRlcikpXG4xMDk1Olx0XHRcdGdvdG8gcnhfbmV4dDtcbjEwOTY6XHRcbjEwOTc6XHRcdGF0aDlrX2Ntbl9yeF9za2JfcG9zdHByb2Nlc3MoY29tbW9uLCBza2IsIFx1MDAyNnJ4X3N0YXRzLFxuMTA5ODpcdFx0XHRcdFx0ICAgICByeF9zdGF0dXMsIGRlY3J5cHRfZXJyb3IpO1xuMTA5OTpcdFxuMTEwMDpcdFx0aWYgKGF0aDlrX2Ntbl9wcm9jZXNzX3JhdGUoY29tbW9uLCBodywgXHUwMDI2cnhfc3RhdHMsIHJ4X3N0YXR1cykpXG4xMTAxOlx0XHRcdGdvdG8gcnhfbmV4dDtcbjExMDI6XHRcbjExMDM6XHRcdHJ4X3N0YXRzLmlzX215YmVhY29uID0gYXRoX2lzX215YmVhY29uKGNvbW1vbiwgaGRyKTtcbjExMDQ6XHRcdGF0aDlrX2Ntbl9wcm9jZXNzX3Jzc2koY29tbW9uLCBodywgXHUwMDI2cnhfc3RhdHMsIHJ4X3N0YXR1cyk7XG4xMTA1Olx0XG4xMTA2Olx0XHRyeF9zdGF0dXMtXHUwMDNlYmFuZCA9IGFoLVx1MDAzZWN1cmNoYW4tXHUwMDNlY2hhbi1cdTAwM2ViYW5kO1xuMTEwNzpcdFx0cnhfc3RhdHVzLVx1MDAzZWZyZXEgPSBhaC1cdTAwM2VjdXJjaGFuLVx1MDAzZWNoYW4tXHUwMDNlY2VudGVyX2ZyZXE7XG4xMTA4Olx0XHRyeF9zdGF0dXMtXHUwMDNlYW50ZW5uYSA9IHJ4X3N0YXRzLnJzX2FudGVubmE7XG4xMTA5Olx0XHRyeF9zdGF0dXMtXHUwMDNlZmxhZyB8PSBSWF9GTEFHX01BQ1RJTUVfRU5EO1xuMTExMDpcdFxuMTExMTpcdFx0cmV0dXJuIHRydWU7XG4xMTEyOlx0cnhfbmV4dDpcbjExMTM6XHRcdHJldHVybiBmYWxzZTtcbjExMTQ6XHR9XG4xMTE1Olx0XG4xMTE2Olx0LypcbjExMTc6XHQgKiBGSVhNRTogSGFuZGxlIEZMVVNIIGxhdGVyIG9uLlxuMTExODpcdCAqL1xuMTExOTpcdHZvaWQgYXRoOWtfcnhfdGFza2xldChzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNDMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgRkZUIGFuZCBSWCBTdGF0cyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIHRoZSBGYXN0IEZvdXJpZXIgVHJhbnNmb3JtIHByb2Nlc3NpbmcgYW5kIHRoZSByZWNlaXZlciBzdGF0aXN0aWNzIGhlcmUuIEZpcnN0LCBJIHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBhdGhfY21uX3Byb2Nlc3NfZmZ0YCBmdW5jdGlvbi4gV2hhdCBpcyBpdCBkb2luZyBleGFjdGx5PyBBbmQgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgaW4gYHJ4X3N0YXRzYC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBOb3csIGxldCYjMzk7cyBzZWFyY2ggZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAsIHRvIHNlZSBpdCBpbiBhY3Rpb24sIGFuZCBhbHNvIGh1bnQgZG93biBgcnhfc3RhdHVzX2h0Y190b19hdGhgLiBIb3BlZnVsbHksIGRpZ2dpbmcgaW50byB0aG9zZSB3aWxsIGdpdmUgbWUgdGhlIGluc2lnaHRzIEkgbmVlZCB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGhfY21uX3Byb2Nlc3NfZmZ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYz00NDk9YXRoX2Ntbl9pc19mZnRfYnVmX2Z1bGwoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy00NjgtLyogcmV0dXJucyAxIGlmIHRoaXMgd2FzIGEgc3BlY3RyYWwgZnJhbWUsIGV2ZW4gaWYgbm90IGhhbmRsZWQuICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM6NDY5OmludCBhdGhfY21uX3Byb2Nlc3NfZmZ0KHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdiwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy00NzAtXHRcdCAgICBzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnMsIHU2NCB0c2YpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTY4My19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM6Njg0OkVYUE9SVF9TWU1CT0woYXRoX2Ntbl9wcm9jZXNzX2ZmdCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtNjg1LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaD0xNzc9aW50IGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZyhzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNzktXHRcdFx0ICAgICAgIGVudW0gc3BlY3RyYWxfbW9kZSBzcGVjdHJhbF9tb2RlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxODA6aW50IGF0aF9jbW5fcHJvY2Vzc19mZnQoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE4MS1cdFx0ICAgIHN0cnVjdCBhdGhfcnhfc3RhdHVzICpycywgdTY0IHRzZik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oPTE5Mj1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fdHJpZ2dlcihzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xOTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTk3OnN0YXRpYyBpbmxpbmUgaW50IGF0aF9jbW5fcHJvY2Vzc19mZnQoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE5OC1cdFx0XHRcdCAgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTk5OD1zdGF0aWMgYm9vbCBhdGg5a19yeF9wcmVwYXJlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTA3My1cdFx0LyogVE9ETzogTm90IHVzaW5nIERGUyBwcm9jZXNzaW5nIG5vdy4gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzoxMDc0Olx0XHRpZiAoYXRoX2Ntbl9wcm9jZXNzX2ZmdChcdTAwMjZwcml2LVx1MDAzZXNwZWNfcHJpdiwgaGRyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEwNzUtXHRcdFx0XHQgICAgXHUwMDI2cnhfc3RhdHMsIHJ4X3N0YXR1cy1cdTAwM2VtYWN0aW1lKSkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xMDg3LVx0XHRyeF9zdGF0cy5yc19waHllcnIgPSBBVEg5S19QSFlFUlJfUkFEQVI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MTA4ODpcdFx0aWYgKGF0aF9jbW5fcHJvY2Vzc19mZnQoXHUwMDI2cHJpdi1cdTAwM2VzcGVjX3ByaXYsIGhkciwgXHUwMDI2cnhfc3RhdHMsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTA4OS1cdFx0XHRcdFx0cnhfc3RhdHVzLVx1MDAzZW1hY3RpbWUpKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmM9ODA2PXN0YXRpYyBpbnQgYXRoOWtfcnhfc2tiX3ByZXByb2Nlc3Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYy04ODMtXHRcdH0gZWxzZSBpZiAoc2MtXHUwMDNlc3BlY19wcml2LnNwZWN0cmFsX21vZGUgIT0gU1BFQ1RSQUxfRElTQUJMRUQgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jOjg4NDpcdFx0XHQgICBhdGhfY21uX3Byb2Nlc3NfZmZ0KFx1MDAyNnNjLVx1MDAzZXNwZWNfcHJpdiwgaGRyLCByeF9zdGF0cyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmMtODg1LVx0XHRcdFx0XHQgICAgICAgcnhfc3RhdHVzLVx1MDAzZW1hY3RpbWUpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczODYKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSBwcm9tcHQsIGtlZXBpbmcgaW4gbWluZCBteSBmaWVsZCBleHBlcnRpc2U6CgoqKkV4YW1pbmluZyB0aGUgYHJ4X3N0YXR1c19odGNfdG9fYXRoYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBteSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gdGhpcyBgcnhfc3RhdHVzX2h0Y190b19hdGhgIGZ1bmN0aW9uLiBUaGUgZmlsZW5hbWUsIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmNgLCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgYSBjcml0aWNhbCBwaWVjZSBpbiB0aGUgQXRoZXJvcyAobm93IFF1YWxjb21tIEF0aGVyb3MpIHdpcmVsZXNzIGRyaXZlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGF0aDlrYCBmYW1pbHksIGFuZCBkZWFsaW5nIHdpdGggdGhlIEhhcmR3YXJlIFRyYW5zcG9ydCBDb250ZXh0IChIVEMpIGxheWVyIGZvciBoYW5kbGluZyByZWNlaXZlIGFuZCB0cmFuc21pdCBvcGVyYXRpb25zLiBUaGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYsIGByeF9zdGF0dXNfaHRjX3RvX2F0aGAsIHN1Z2dlc3RzIGl0cyByb2xlIGlzIHRyYW5zZm9ybWluZyBvciBpbnRlcnByZXRpbmcgcmVjZWl2ZSBzdGF0dXMgaW5mb3JtYXRpb24gZnJvbSB0aGUgSFRDIGxheWVyIGludG8gYSBmb3JtYXQgdXNhYmxlIGJ5IHRoZSBgYXRoOWtgIGRyaXZlciYjMzk7cyBjb3JlLgoKR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGVzZSBzeXN0ZW1zLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIHdoZXJlIHRoZSBsb3ctbGV2ZWwgSFRDLXNwZWNpZmljIHJlY2VpdmUgc3RhdHVzIHN0cnVjdHVyZXMgYXJlIHBhcnNlZCwgdHJhbnNsYXRlZCwgYW5kIHBvc3NpYmx5IG5vcm1hbGl6ZWQgaW50byB0aGUgbW9yZSBkcml2ZXItaW50ZXJuYWwgYGF0aDlrYCByZXByZXNlbnRhdGlvbnMuIFRoaXMgcHJvYmFibHkgaW52b2x2ZXMgZXh0cmFjdGluZyBkZXRhaWxzIGFib3V0IHRoZSByZWNlaXZlZCBwYWNrZXQsIGxpa2UgdGhlIHNpZ25hbCBzdHJlbmd0aCwgbm9pc2UgbGV2ZWwsIGRhdGEgcmF0ZSwgZnJhbWUgY29udHJvbCBmaWVsZHMsIHBvdGVudGlhbCBlcnJvcnMsIGFuZCBwZXJoYXBzIGV2ZW4gSFRDLXNwZWNpZmljIHRpbWVzdGFtcHMgb3Igb3RoZXIgbWV0YWRhdGEuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgc3BlY2lmaWMgZmllbGRzIGFyZSBtYXBwZWQsIGFuZCBob3cgZXJyb3IgY29uZGl0aW9ucyBhcmUgaGFuZGxlZC4gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIHZpdGFsIHRhc2tzIGxpa2UgUW9TLCByYXRlIGFkYXB0YXRpb24sIGFuZCBwYWNrZXQgZmlsdGVyaW5nIGZvciB0aGUgd2lyZWxlc3MgaW50ZXJmYWNlLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgZXhhY3RseSBob3cgaXQgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NDA6XHR7XG4gOTQxOlx0XHRyeF9zdGF0cy1cdTAwM2VlbmNfZmxhZ3MgPSAwO1xuIDk0MjpcdFx0cnhfc3RhdHMtXHUwMDNlYncgPSBSQVRFX0lORk9fQldfMjA7XG4gOTQzOlx0XHRpZiAocnhzdGF0dXMtXHUwMDNlcnNfZmxhZ3MgXHUwMDI2IEFUSDlLX1JYXzIwNDApXG4gOTQ0Olx0XHRcdHJ4X3N0YXRzLVx1MDAzZWJ3ID0gUkFURV9JTkZPX0JXXzQwO1xuIDk0NTpcdFx0aWYgKHJ4c3RhdHVzLVx1MDAzZXJzX2ZsYWdzIFx1MDAyNiBBVEg5S19SWF9HSSlcbiA5NDY6XHRcdFx0cnhfc3RhdHMtXHUwMDNlZW5jX2ZsYWdzIHw9IFJYX0VOQ19GTEFHX1NIT1JUX0dJO1xuIDk0NzpcdH1cbiA5NDg6XHRcbiA5NDk6XHRzdGF0aWMgdm9pZCByeF9zdGF0dXNfaHRjX3RvX2F0aChzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnhfc3RhdHMsXG4gOTUwOlx0XHRcdFx0XHQgc3RydWN0IGF0aF9odGNfcnhfc3RhdHVzICpyeHN0YXR1cylcbiA5NTE6XHR7XG4gOTUyOlx0XHRyeF9zdGF0cy1cdTAwM2Vyc19kYXRhbGVuXHQ9IGJlMTZfdG9fY3B1KHJ4c3RhdHVzLVx1MDAzZXJzX2RhdGFsZW4pO1xuIDk1MzpcdFx0cnhfc3RhdHMtXHUwMDNlcnNfc3RhdHVzXHQ9IHJ4c3RhdHVzLVx1MDAzZXJzX3N0YXR1cztcbiA5NTQ6XHRcdHJ4X3N0YXRzLVx1MDAzZXJzX3BoeWVyclx0PSByeHN0YXR1cy1cdTAwM2Vyc19waHllcnI7XG4gOTU1Olx0XHRyeF9zdGF0cy1cdTAwM2Vyc19yc3NpXHQ9IHJ4c3RhdHVzLVx1MDAzZXJzX3Jzc2k7XG4gOTU2Olx0XHRyeF9zdGF0cy1cdTAwM2Vyc19rZXlpeFx0PSByeHN0YXR1cy1cdTAwM2Vyc19rZXlpeDtcbiA5NTc6XHRcdHJ4X3N0YXRzLVx1MDAzZXJzX3JhdGVcdD0gcnhzdGF0dXMtXHUwMDNlcnNfcmF0ZTtcbiA5NTg6XHRcdHJ4X3N0YXRzLVx1MDAzZXJzX2FudGVubmFcdD0gcnhzdGF0dXMtXHUwMDNlcnNfYW50ZW5uYTtcbiA5NTk6XHRcdHJ4X3N0YXRzLVx1MDAzZXJzX21vcmVcdD0gcnhzdGF0dXMtXHUwMDNlcnNfbW9yZTtcbiA5NjA6XHRcbiA5NjE6XHRcdG1lbWNweShyeF9zdGF0cy1cdTAwM2Vyc19yc3NpX2N0bCwgcnhzdGF0dXMtXHUwMDNlcnNfcnNzaV9jdGwsXG4gOTYyOlx0XHRcdHNpemVvZihyeF9zdGF0cy1cdTAwM2Vyc19yc3NpX2N0bCkpO1xuIDk2MzpcdFx0bWVtY3B5KHJ4X3N0YXRzLVx1MDAzZXJzX3Jzc2lfZXh0LCByeHN0YXR1cy1cdTAwM2Vyc19yc3NpX2V4dCxcbiA5NjQ6XHRcdFx0c2l6ZW9mKHJ4X3N0YXRzLVx1MDAzZXJzX3Jzc2lfZXh0KSk7XG4gOTY1Olx0XG4gOTY2Olx0XHRyeF9zdGF0cy1cdTAwM2Vyc19pc2FnZ3JcdD0gcnhzdGF0dXMtXHUwMDNlcnNfaXNhZ2dyO1xuIDk2NzpcdFx0cnhfc3RhdHMtXHUwMDNlcnNfbW9yZWFnZ3JcdD0gcnhzdGF0dXMtXHUwMDNlcnNfbW9yZWFnZ3I7XG4gOTY4Olx0XHRyeF9zdGF0cy1cdTAwM2Vyc19udW1fZGVsaW1zXHQ9IHJ4c3RhdHVzLVx1MDAzZXJzX251bV9kZWxpbXM7XG4gOTY5Olx0XHRjb252ZXJ0X2h0Y19mbGFnKHJ4X3N0YXRzLCByeHN0YXR1cyk7XG4gOTcwOlx0fVxuIDk3MTpcdFxuIDk3MjpcdC8qXG4gOTczOlx0ICogVGhlIGZpcm13YXJlIHJlcG9ydHMgYSBmcmFtZSB0aGF0IGZhaWxlZCBpdHMgQ1JDIGFzIGEgQ1JDIGVycm9yIGV2ZW4gd2hlblxuIDk3NDpcdCAqIHRoZSBQSFkgZXJyb3IgYml0IGlzIHNldCBhcyB3ZWxsLCBzbyB1bmRlciBpbnRlcmZlcmVuY2Ugc3BlY3RyYWwgc2FtcGxlc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTMzCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGF0IGNvZGUgc25pcHBldDoKCioqRGl2aW5nIGludG8gdGhlIEF0aGVyb3MgUlggU3RhdHVzIGFuZCBGRlQgUHJvY2Vzc2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIGluIG9uIHRoZSBgYXRoX3J4X3N0YXR1c2Agc3RydWN0IGFuZCBob3cgdGhlIGBhdGhfY21uX3Byb2Nlc3NfZmZ0YCBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCBpdC4gVGhpcyBpcyBpbnRlcmVzdGluZywgYW5kIEkgaW1tZWRpYXRlbHkgd2FudCB0byBqdW1wIGludG8gYGNvbW1vbi1zcGVjdHJhbC5jYCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgaG93IHRoZSBzdGF0dXMgaW5mb3JtYXRpb24gZnJvbSB0aGUgcmVjZWl2ZWQgc2lnbmFsIGdldHMgcGFyc2VkIGFuZCBmZWQgaW50byB0aGUgRkZUIHByb2Nlc3Npbmcgc3RlcHMuIEkmIzM5O20ga2VlbiB0byBzZWUgaG93IHRoZSBjb2RlIGhhbmRsZXMgZGlmZmVyZW50IG1vZHVsYXRpb24gc2NoZW1lcywgcG90ZW50aWFsIGVycm9ycywgYW5kIHBlcmhhcHMgZXZlbiBzb21lIG9mIHRoZSBzcGVjdHJhbCBhbmFseXNpcyB0ZWNobmlxdWVzIHVzZWQgaW4gdGhhdCBmdW5jdGlvbi4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoZSBgYXRoX3J4X3N0YXR1c2Agc3RydWN0IGNvbnRhaW5zIGEgd2VhbHRoIG9mIGxvdy1sZXZlbCBkZXRhaWxzIGFib3V0IHRoZSByZWNlaXZlZCBwYWNrZXQgYW5kIHRoYXQgdGhvc2UgZGV0YWlscyBhcmUgY3J1Y2lhbCBmb3IgZHJpdmluZyB0aGUgRkZUIGVmZmljaWVudGx5IGFuZCBhY2N1cmF0ZWx5LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgb24gaG93IHRoZSBoYXJkd2FyZSBvZmZsb2FkcyBhbnkgRkZUIGNvbXB1dGF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ2NTpcdFx0XHRyZXR1cm4gMDtcbiA0NjY6XHR9XG4gNDY3Olx0XG4gNDY4Olx0LyogcmV0dXJucyAxIGlmIHRoaXMgd2FzIGEgc3BlY3RyYWwgZnJhbWUsIGV2ZW4gaWYgbm90IGhhbmRsZWQuICovXG4gNDY5Olx0aW50IGF0aF9jbW5fcHJvY2Vzc19mZnQoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuIDQ3MDpcdFx0XHQgICAgc3RydWN0IGF0aF9yeF9zdGF0dXMgKnJzLCB1NjQgdHNmKVxuIDQ3MTpcdHtcbiA0NzI6XHRcdHU4IHNhbXBsZV9idWZbU1BFQ1RSQUxfU0FNUExFX01BWF9MRU5dID0gezB9O1xuIDQ3MzpcdFx0c3RydWN0IGF0aF9odyAqYWggPSBzcGVjX3ByaXYtXHUwMDNlYWg7XG4gNDc0Olx0XHRzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHNwZWNfcHJpdi1cdTAwM2VhaCk7XG4gNDc1Olx0XHRzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGNvbW1vbi1cdTAwM2Vwcml2O1xuIDQ3NjpcdFx0dTggbnVtX2JpbnMsICp2ZGF0YSA9ICh1OCAqKWhkcjtcbiA0Nzc6XHRcdHN0cnVjdCBhdGhfcmFkYXJfaW5mbyAqcmFkYXJfaW5mbztcbiA0Nzg6XHRcdGludCBsZW4gPSBycy1cdTAwM2Vyc19kYXRhbGVuO1xuIDQ3OTpcdFx0aW50IGk7XG4gNDgwOlx0XHRpbnQgZ290X3NsZW4gPSAwO1xuIDQ4MTpcdFx0dTggICpzYW1wbGVfc3RhcnQ7XG4gNDgyOlx0XHRpbnQgc2FtcGxlX2J5dGVzID0gMDtcbiA0ODM6XHRcdGludCByZXQgPSAwO1xuIDQ4NDpcdFx0dTE2IGZmdF9sZW4sIHNhbXBsZV9sZW4sIGZyZXEgPSBhaC1cdTAwM2VjdXJjaGFuLVx1MDAzZWNoYW4tXHUwMDNlY2VudGVyX2ZyZXE7XG4gNDg1Olx0XHRlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5fdHlwZTtcbiA0ODY6XHRcdGF0aF9jbW5fZmZ0X2lkeF92YWxpZGF0b3IgKmZmdF9pZHhfdmFsaWRhdG9yO1xuIDQ4NzpcdFx0YXRoX2Ntbl9mZnRfc2FtcGxlX2hhbmRsZXIgKmZmdF9oYW5kbGVyO1xuIDQ4ODpcdFxuIDQ4OTpcdFx0LyogQVI5MjgwIGFuZCBiZWZvcmUgcmVwb3J0IHZpYSBBVEg5S19QSFlFUlJfUkFEQVIsIEFSOTN4eCBhbmQgbmV3ZXJcbiA0OTA6XHRcdCAqIHZpYSBBVEg5S19QSFlFUlJfU1BFQ1RSQUwuIEhhdmVuJiMzOTt0IHNlZW4gQVRIOUtfUEhZRVJSX0ZBTFNFX1JBREFSX0VYVFxuIDQ5MTpcdFx0ICogeWV0LCBidXQgdGhpcyBpcyBzdXBwb3NlZCB0byBiZSBwb3NzaWJsZSBhcyB3ZWxsLlxuIDQ5MjpcdFx0ICovXG4gNDkzOlx0XHRpZiAocnMtXHUwMDNlcnNfcGh5ZXJyICE9IEFUSDlLX1BIWUVSUl9SQURBUiBcdTAwMjZcdTAwMjZcbiA0OTQ6XHRcdCAgICBycy1cdTAwM2Vyc19waHllcnIgIT0gQVRIOUtfUEhZRVJSX0ZBTFNFX1JBREFSX0VYVCBcdTAwMjZcdTAwMjZcbiA0OTU6XHRcdCAgICBycy1cdTAwM2Vyc19waHllcnIgIT0gQVRIOUtfUEhZRVJSX1NQRUNUUkFMKVxuIDQ5NjpcdFx0XHRyZXR1cm4gMDtcbiA0OTc6XHRcbiA0OTg6XHRcdC8qIGNoZWNrIGlmIHNwZWN0cmFsIHNjYW4gYml0IGlzIHNldC4gVGhpcyBkb2VzIG5vdCBoYXZlIHRvIGJlIGNoZWNrZWRcbiA0OTk6XHRcdCAqIGlmIHJlY2VpdmVkIHRocm91Z2ggYSBTUEVDVFJBTCBwaHkgZXJyb3IsIGJ1dCBzaG91bGRuJiMzOTt0IGh1cnQuXG4gNTAwOlx0XHQgKi9cbiA1MDE6XHRcdHJhZGFyX2luZm8gPSAoKHN0cnVjdCBhdGhfcmFkYXJfaW5mbyAqKVx1MDAyNnZkYXRhW2xlbl0pIC0gMTtcbiA1MDI6XHRcdGlmICghKHJhZGFyX2luZm8tXHUwMDNlcHVsc2VfYndfaW5mbyBcdTAwMjYgU1BFQ1RSQUxfU0NBTl9CSVRNQVNLKSlcbiA1MDM6XHRcdFx0cmV0dXJuIDA7XG4gNTA0Olx0XG4gNTA1Olx0XHRpZiAoIXNwZWNfcHJpdi1cdTAwM2VyZnNfY2hhbl9zcGVjX3NjYW4pXG4gNTA2Olx0XHRcdHJldHVybiAxO1xuIDUwNzpcdFxuIDUwODpcdFx0LyogT3V0cHV0IGJ1ZmZlcnMgYXJlIGZ1bGwsIG5vIG5lZWQgdG8gcHJvY2VzcyBhbnl0aGluZ1xuIDUwOTpcdFx0ICogc2luY2UgdGhlcmUgaXMgbm8gc3BhY2UgdG8gcHV0IHRoZSByZXN1bHQgYW55d2F5XG4gNTEwOlx0XHQgKi9cbiA1MTE6XHRcdHJldCA9IGF0aF9jbW5faXNfZmZ0X2J1Zl9mdWxsKHNwZWNfcHJpdik7XG4gNTEyOlx0XHRpZiAocmV0ID09IDEpIHtcbiA1MTM6XHRcdFx0YXRoX2RiZyhjb21tb24sIFNQRUNUUkFMX1NDQU4sIFwmIzM0O0ZGVCByZXBvcnQgaWdub3JlZCwgbm8gc3BhY2UgXCYjMzQ7XG4gNTE0Olx0XHRcdFx0XHRcdFx0XCYjMzQ7bGVmdCBvbiBvdXRwdXQgYnVmZmVyc1xcblwmIzM0Oyk7XG4gNTE1Olx0XHRcdHJldHVybiAxO1xuIDUxNjpcdFx0fVxuIDUxNzpcdFxuIDUxODpcdFx0Y2hhbl90eXBlID0gY2ZnODAyMTFfZ2V0X2NoYW5kZWZfdHlwZShcdTAwMjZjb21tb24tXHUwMDNlaHctXHUwMDNlY29uZi5jaGFuZGVmKTtcbiA1MTk6XHRcdGlmICgoY2hhbl90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMpIHx8XG4gNTIwOlx0XHQgICAgKGNoYW5fdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0MFBMVVMpKSB7XG4gNTIxOlx0XHRcdGZmdF9sZW4gPSBTUEVDVFJBTF9IVDIwXzQwX1RPVEFMX0RBVEFfTEVOO1xuIDUyMjpcdFx0XHRzYW1wbGVfbGVuID0gU1BFQ1RSQUxfSFQyMF80MF9TQU1QTEVfTEVOO1xuIDUyMzpcdFx0XHRudW1fYmlucyA9IFNQRUNUUkFMX0hUMjBfNDBfTlVNX0JJTlM7XG4gNTI0Olx0XHRcdGZmdF9pZHhfdmFsaWRhdG9yID0gXHUwMDI2YXRoX2Ntbl9tYXhfaWR4X3ZlcmlmeV9odDIwXzQwX2ZmdDtcbiA1MjU6XHRcdFx0ZmZ0X2hhbmRsZXIgPSBcdTAwMjZhdGhfY21uX3Byb2Nlc3NfaHQyMF80MF9mZnQ7XG4gNTI2Olx0XHR9IGVsc2Uge1xuIDUyNzpcdFx0XHRmZnRfbGVuID0gU1BFQ1RSQUxfSFQyMF9UT1RBTF9EQVRBX0xFTjtcbiA1Mjg6XHRcdFx0c2FtcGxlX2xlbiA9IFNQRUNUUkFMX0hUMjBfU0FNUExFX0xFTjtcbiA1Mjk6XHRcdFx0bnVtX2JpbnMgPSBTUEVDVFJBTF9IVDIwX05VTV9CSU5TO1xuIDUzMDpcdFx0XHRmZnRfaWR4X3ZhbGlkYXRvciA9IGF0aF9jbW5fbWF4X2lkeF92ZXJpZnlfaHQyMF9mZnQ7XG4gNTMxOlx0XHRcdGZmdF9oYW5kbGVyID0gXHUwMDI2YXRoX2Ntbl9wcm9jZXNzX2h0MjBfZmZ0O1xuIDUzMjpcdFx0fVxuIDUzMzpcdFxuIDUzNDpcdFx0YXRoX2RiZyhjb21tb24sIFNQRUNUUkFMX1NDQU4sIFwmIzM0O0dvdCByYWRhciBkdW1wIGJ3X2luZm86IDB4JVgsXCYjMzQ7XG4gNTM1Olx0XHRcdFx0XHRcdFwmIzM0O2xlbjogJWkgZmZ0X2xlbjogJWlcXG5cJiMzNDssXG4gNTM2Olx0XHRcdFx0XHRcdHJhZGFyX2luZm8tXHUwMDNlcHVsc2VfYndfaW5mbyxcbiA1Mzc6XHRcdFx0XHRcdFx0bGVuLFxuIDUzODpcdFx0XHRcdFx0XHRmZnRfbGVuKTtcbiA1Mzk6XHRcdHNhbXBsZV9zdGFydCA9IHZkYXRhO1xuIDU0MDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuIC0gMjsgaSYjNDM7JiM0MzspIHtcbiA1NDE6XHRcdFx0c2FtcGxlX2J5dGVzJiM0MzsmIzQzOztcbiA1NDI6XHRcbiA1NDM6XHRcdFx0LyogT25seSBhIHNpbmdsZSBzYW1wbGUgcmVjZWl2ZWQsIG5vIG5lZWQgdG8gbG9va1xuIDU0NDpcdFx0XHQgKiBmb3IgdGhlIHNhbXBsZSYjMzk7cyBlbmQsIGRvIHRoZSBjb3JyZWN0aW9uIGJhc2VkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzc0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgYXRoOWtfcnhfcHJlcGFyZWAgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYGF0aDlrX3J4X3ByZXBhcmVgIGZ1bmN0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBkZWNsYXJhdGlvbiBvZiBgcnhfc3RhdHNgOiBgc3RydWN0IGF0aF9yeF9zdGF0dXMgcnhfc3RhdHM7YC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaW5pdGlhbGl6YXRpb24uIElzIHRoaXMgc3RydWN0IGJlaW5nIGZ1bGx5IGluaXRpYWxpemVkPyBJdCYjMzk7cyBhIGNyaXRpY2FsIHN0cnVjdHVyZSwgYW5kIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNhbiBsZWFkIHRvIGFsbCBzb3J0cyBvZiBuYXN0eSBidWdzLCBlc3BlY2lhbGx5IGluIGEgZHJpdmVyLgoKTmV4dCwgSSBzZWUgYHJ4X3N0YXR1c19odGNfdG9fYXRoKCZhbXA7cnhfc3RhdHMsIHJ4c3RhdHVzKTtgLiBUaGlzIGZ1bmN0aW9uIGFwcGVhcnMgdG8gcG9wdWxhdGUgYHJ4X3N0YXRzYCBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgYHJ4c3RhdHVzYC4gIFRoYXQmIzM5O3MgZ29vZCwgYnV0IGl0IGRvZXNuJiMzOTt0IGd1YXJhbnRlZSBpbml0aWFsaXphdGlvbi4gSSBuZWVkIHRvIHZlcmlmeSB3aGF0IGByeHN0YXR1c19odGNfdG9fYXRoKClgIGRvZXMuICBNb3JlIGltcG9ydGFudGx5LCBJIG5lZWQgdG8ga25vdyB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYGF0aF9yeF9zdGF0dXNgIHN0cnVjdC4gSSYjMzk7bGwgaGF2ZSB0byBjaGVjayB0aGUgaGVhZGVyIGZpbGUgdG8gdW5kZXJzdGFuZCBhbGwgaXRzIGZpZWxkcyBhbmQgc2VlIHdoaWNoLCBpZiBhbnksIG1pZ2h0IGJlIGxlZnQgdW5pbml0aWFsaXplZCBieSB0aGlzIGZ1bmN0aW9uLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBpZiBpdCBpbmNsdWRlcyBwYWRkaW5nIG9yIHJlc2VydmVkIG1lbWJlcnMgdGhhdCBjb3VsZCBiZSBwcm9ibGVtYXRpYyBpZiBub3QgZXhwbGljaXRseSB6ZXJvZWQuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGF0aF9yeF9zdGF0dXMgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuaD05OT1zdHJ1Y3QgYXRoX3R4X3N0YXR1cyB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oLTEyNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuaDoxMjg6c3RydWN0IGF0aF9yeF9zdGF0dXMge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oLTEyOS1cdHUzMiByc190c3RhbXA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODY1CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCBpdDoKCioqRGl2aW5nIGludG8gYXRoOWsmIzM5O3MgbWFjLmgqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBzdGFydCBieSBjcmFja2luZyBvcGVuIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmhgIGFuZCB6ZXJvaW5nIGluIG9uIHJvdWdobHkgbGluZSAxMjguIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIE1BQy1sYXllciBkZWZpbml0aW9ucyBpbiB0aGlzIGFyZWEuIFByb2JhYmx5IHJlbGF0ZWQgdG8gZGF0YSBzdHJ1Y3R1cmVzIG9yIGZ1bmN0aW9uIHByb3RvdHlwZXMgdGhhdCBhcmUgZnVuZGFtZW50YWwgdG8gdGhlIEF0aGVyb3MgOWsgd2lyZWxlc3MgZHJpdmVyJiMzOTtzIG9wZXJhdGlvbi4gSSYjMzk7bSB0aGlua2luZyB3ZSYjMzk7bGwgc2VlIHNvbWUga2V5IHN0cnVjdHVyZXMgdGhhdCBoYW5kbGUgZnJhbWUgcHJvY2Vzc2luZywgcGVyaGFwcyByZWxhdGVkIHRvIHJhdGUgY29udHJvbCwgUW9TLCBvciBwb3RlbnRpYWxseSBldmVuIHNvbWUgaW50ZXJydXB0LXJlbGF0ZWQgZGF0YS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBhdGg5ayYjMzk7cyBhcmNoaXRlY3R1cmUsIHNvIHRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHJlYWNxdWFpbnQgbXlzZWxmIHdpdGggdGhlIGRldGFpbHMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTI1Olx0XHR1MzIgZHVyYXRpb247XG4gMTI2Olx0fTtcbiAxMjc6XHRcbiAxMjg6XHRzdHJ1Y3QgYXRoX3J4X3N0YXR1cyB7XG4gMTI5Olx0XHR1MzIgcnNfdHN0YW1wO1xuIDEzMDpcdFx0dTE2IHJzX2RhdGFsZW47XG4gMTMxOlx0XHR1OCByc19zdGF0dXM7XG4gMTMyOlx0XHR1OCByc19waHllcnI7XG4gMTMzOlx0XHRpbnQ4X3QgcnNfcnNzaTtcbiAxMzQ6XHRcdHU4IHJzX2tleWl4O1xuIDEzNTpcdFx0dTggcnNfcmF0ZTtcbiAxMzY6XHRcdHU4IHJzX2FudGVubmE7XG4gMTM3Olx0XHR1OCByc19tb3JlO1xuIDEzODpcdFx0aW50OF90IHJzX3Jzc2lfY3RsWzNdO1xuIDEzOTpcdFx0aW50OF90IHJzX3Jzc2lfZXh0WzNdO1xuIDE0MDpcdFx0dTggcnNfaXNhZ2dyO1xuIDE0MTpcdFx0dTggcnNfZmlyc3RhZ2dyO1xuIDE0MjpcdFx0dTggcnNfbW9yZWFnZ3I7XG4gMTQzOlx0XHR1OCByc19udW1fZGVsaW1zO1xuIDE0NDpcdFx0dTggcnNfZmxhZ3M7XG4gMTQ1Olx0XHRib29sIGlzX215YmVhY29uO1xuIDE0NjpcdFx0dTMyIGV2bTA7XG4gMTQ3Olx0XHR1MzIgZXZtMTtcbiAxNDg6XHRcdHUzMiBldm0yO1xuIDE0OTpcdFx0dTMyIGV2bTM7XG4gMTUwOlx0XHR1MzIgZXZtNDtcbiAxNTE6XHRcdHUxNiBlbmNfZmxhZ3M7XG4gMTUyOlx0XHRlbnVtIHJhdGVfaW5mb19idyBidztcbiAxNTM6XHR9O1xuIDE1NDpcdFxuIDE1NTpcdHN0cnVjdCBhdGhfaHRjX3J4X3N0YXR1cyB7XG4gMTU2Olx0XHRfX2JlNjQgcnNfdHN0YW1wO1xuIDE1NzpcdFx0X19iZTE2IHJzX2RhdGFsZW47XG4gMTU4Olx0XHR1OCByc19zdGF0dXM7XG4gMTU5Olx0XHR1OCByc19waHllcnI7XG4gMTYwOlx0XHRpbnQ4X3QgcnNfcnNzaTtcbiAxNjE6XHRcdGludDhfdCByc19yc3NpX2N0bFszXTtcbiAxNjI6XHRcdGludDhfdCByc19yc3NpX2V4dFszXTtcbiAxNjM6XHRcdHU4IHJzX2tleWl4O1xuIDE2NDpcdFx0dTggcnNfcmF0ZTtcbiAxNjU6XHRcdHU4IHJzX2FudGVubmE7XG4gMTY2Olx0XHR1OCByc19tb3JlO1xuIDE2NzpcdFx0dTggcnNfaXNhZ2dyO1xuIDE2ODpcdFx0dTggcnNfbW9yZWFnZ3I7XG4gMTY5Olx0XHR1OCByc19udW1fZGVsaW1zO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc3OAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDI5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERhdGEgRmxvdyBpbiBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBhdGhfY21uX3Byb2Nlc3NfZmZ0YCBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cuIFJpZ2h0LCB0aGUgY29kZSBpcyB1c2luZyBmaWVsZHMgZnJvbSB0aGUgYHJzYCBzdHJ1Y3QuIEkgY2FuIHNlZSB0aGF0IG9ubHkgYHJzLSZndDtyc19kYXRhbGVuYCBhbmQgYHJzLSZndDtyc19waHllcnJgIGFyZSBkaXJlY3RseSB1c2VkIHdpdGhpbiB0aGUgZnVuY3Rpb24uIGByc19kYXRhbGVuYCBpcyBjbGVhcmx5IGluaXRpYWxpemVkIGJ5IGByeF9zdGF0dXNfaHRjX3RvX2F0aGAsIHRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBgcnNfcGh5ZXJyYCBpcyBzZXQgcmlnaHQgYmVmb3JlIHRoZSBjYWxsLCBlaXRoZXIgd2l0aCBgQVRIOUtfUEhZRVJSX1JBREFSYCBvciBwb3RlbnRpYWxseSB0aHJvdWdoIGByeF9zdGF0dXNfaHRjX3RvX2F0aGAuCgpOb3csIHRoZSBjcnVjaWFsIGJpdDogdGhlIHJldHVybiB2YWx1ZSBvZiBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAuIElmIGl0IHJldHVybnMgdHJ1ZSwgd2UganVtcCB0byBgcnhfbmV4dGAuIEhtLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nIGJlY2F1c2UgYHJ4X25leHRgIHVsdGltYXRlbHkgcmV0dXJucyBgZmFsc2VgLCB3aGljaCBpbmRpY2F0ZXMgdGhlIHBhY2tldCBpcyBkcm9wcGVkLCBzaW5jZSBpdCB3YXMgdHJlYXRlZCBhcyBzcGVjdHJhbCBkYXRhLiBUaGlzIG1ha2VzIHNlbnNlIGZyb20gYSBwZXJmb3JtYW5jZSBwZXJzcGVjdGl2ZSBhbmQgYWxzbyBoZWxwcyB3aXRoIHNpZ25hbCBwcm9jZXNzaW5nLgoKT24gdGhlIG90aGVyIGhhbmQsIGEgcmV0dXJuIHZhbHVlIG9mIGZhbHNlIG1lYW5zIHRoZSBjb2RlIGNvbnRpbnVlcyB0byBgYXRoOWtfY21uX3J4X2FjY2VwdGAuIE9rYXksIGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZyBhZ2Fpbi4gYHJ4X3N0YXRzLnJzX3BoeWVycmAgd2FzIG1vZGlmaWVkIHRvIGBBVEg5S19QSFlFUlJfUkFEQVJgLiBCdXQsIGBhdGg5a19jbW5fcnhfYWNjZXB0YCBpcyBjbGVhcmx5IHRoZSBjcml0aWNhbCBwb2ludC4gSSBzaG91bGQgcHJvYmFibHkgZGl2ZSBpbnRvIGl0LCB0byBmaWd1cmUgb3V0IGhvdyBpdCBoYW5kbGVzIHRoZSBkYXRhLiBUaGlzIHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgY29tcGxldGUgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDlrX2Ntbl9yeF9hY2NlcHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5jPTI5PU1PRFVMRV9MSUNFTlNFKFwmIzM0O0R1YWwgQlNEL0dQTFwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5jLTMxLS8qIEFzc3VtZXMgeW91JiMzOTt2ZSBhbHJlYWR5IGRvbmUgdGhlIGVuZGlhbiB0byBDUFUgY29udmVyc2lvbiAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5jOjMyOmJvb2wgYXRoOWtfY21uX3J4X2FjY2VwdChzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5jLTMzLVx0XHRcdCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uYy0xMTYtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5jOjExNzpFWFBPUlRfU1lNQk9MKGF0aDlrX2Ntbl9yeF9hY2NlcHQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5jLTExOC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmg9NTI9c3RydWN0IGF0aF9iZWFjb25fY29uZmlnIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmgtNjMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmg6NjQ6Ym9vbCBhdGg5a19jbW5fcnhfYWNjZXB0KHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmgtNjUtXHRcdFx0IHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTk5OD1zdGF0aWMgYm9vbCBhdGg5a19yeF9wcmVwYXJlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTA5Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzoxMDkzOlx0aWYgKCFhdGg5a19jbW5fcnhfYWNjZXB0KGNvbW1vbiwgaGRyLCByeF9zdGF0dXMsIFx1MDAyNnJ4X3N0YXRzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEwOTQtXHRcdFx0XHUwMDI2ZGVjcnlwdF9lcnJvciwgcHJpdi1cdTAwM2VyeGZpbHRlcikpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYz04MDY9c3RhdGljIGludCBhdGg5a19yeF9za2JfcHJlcHJvY2VzcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jLTg5NS1cdHNwaW5fbG9ja19iaChcdTAwMjZzYy1cdTAwM2VjaGFuX2xvY2spO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYzo4OTY6XHRpZiAoIWF0aDlrX2Ntbl9yeF9hY2NlcHQoY29tbW9uLCBoZHIsIHJ4X3N0YXR1cywgcnhfc3RhdHMsIGRlY3J5cHRfZXJyb3IsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jLTg5Ny1cdFx0XHRcdCBzYy1cdTAwM2VjdXJfY2hhbi1cdTAwM2VyeGZpbHRlcikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMzgKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQga2VybmVsIGNvZGU6CgoqKkRpdmluZyBpbnRvIGBhdGg5a19jbW5fcnhfYWNjZXB0YCoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyByZWNlaXZlciBhY2NlcHRhbmNlIGZ1bmN0aW9uLCBgYXRoOWtfY21uX3J4X2FjY2VwdGAsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBhdGg5a2Agd2lyZWxlc3MgZHJpdmVyLiBUaGF0IG1lYW5zIEkmIzM5O20gbG9va2luZyBhdCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5jYC4gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgZmlsdGVyaW5nIGluY29taW5nIDgwMi4xMSBmcmFtZXMuIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIG1ha2luZyB0aGUgaW5pdGlhbCBkZXRlcm1pbmF0aW9uIGlmIGEgcmVjZWl2ZWQgZnJhbWUgc2hvdWxkIGV2ZW4gYmUgcGFzc2VkIHVwIHRoZSBzdGFjayBmb3IgZnVydGhlciBwcm9jZXNzaW5nLCBvciBpZiBpdCBzaG91bGQgYmUgZHJvcHBlZCBlYXJseSBvbi4gVGhpcyBjYW4gYmUgYmFzZWQgb24gdGhpbmdzIGxpa2UgZnJhbWUgdHlwZSwgYWRkcmVzcyBmaWx0ZXJpbmcsIHNpZ25hbCBzdHJlbmd0aCwgb3IgYW55IG51bWJlciBvZiBmYWN0b3JzIHJlbGF0ZWQgdG8gdGhlIGhhcmR3YXJlJiMzOTtzIHJlY2VwdGlvbiBjaGFyYWN0ZXJpc3RpY3MgYW5kIGNvbmZpZ3VyZWQgc2V0dGluZ3MuCgpLbm93aW5nIHRoZSBgYXRoOWtgIGRyaXZlciwgSSYjMzk7ZCBwcmVkaWN0IHRoZXJlJiMzOTtzIGxpa2VseSBzb21lIGZhaXJseSBoYXJkd2FyZS1zcGVjaWZpYyBpbnRlcmFjdGlvbiBpbiB0aGlzIGZ1bmN0aW9uLiBUaGlzIG1pZ2h0IGludm9sdmUgZGlyZWN0IHJlZ2lzdGVyIHJlYWRzIHRvIGNoZWNrIHN0YXR1cyBiaXRzLCBsb29raW5nIGF0IGRlc2NyaXB0b3JzIHBhc3NlZCBieSB0aGUgaGFyZHdhcmUsIG9yIGFjY2Vzc2luZyBwZXItcGFja2V0IG1ldGFkYXRhIHBsYWNlZCB0aGVyZSBieSB0aGUgZmlybXdhcmUuIEkmIzM5O20ga2VlbiB0byBzZWUgdGhlIHNwZWNpZmljIGNoZWNrcy4gSXQgd291bGQgYmUgaGVscGZ1bCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSYjMzk7cyBETUEgYW5kIGludGVycnVwdCBoYW5kbGluZy4gSXMgaXQgY2FsbGVkIGZyb20gdGhlIGludGVycnVwdCBoYW5kbGVyPyBPciBkb2VzIGl0IG9wZXJhdGUgc29tZXdoZXJlIGluIGEgUlggcHJvY2Vzc2luZyBwYXRoIHNlcGFyYXRlIGZyb20gaW50ZXJydXB0cz8KCk15IGh1bmNoIGlzIHRoYXQgdGhlcmUgbWlnaHQgYmUgc29tZSBjb25kaXRpb25hbCBsb2dpYyBhcm91bmQgc2VjdXJpdHkgZmVhdHVyZXMsIHRvby4gUGVyaGFwcyB0aGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGNoZWNrcyBvbiB0aGUgZnJhbWUmIzM5O3Mgc2VjdXJpdHkgaGVhZGVycywgb3IgaW50ZXJhY3RzIHdpdGgga2V5IG1hbmFnZW1lbnQgdGFibGVzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYW55IGVuY3J5cHRpb24gb3IgZGVjcnlwdGlvbiB0aGF0IG1pZ2h0IGJlIGludm9sdmVkLiBJJiMzOTtsbCBiZSBmb2N1c2VkIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGNyaXRlcmlhIHVzZWQgdG8gYWNjZXB0IG9yIHJlamVjdCBhIHBhY2tldCwgYW5kIHRoZSBvdmVyYWxsIGltcGFjdCBvbiBzeXN0ZW0gcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzMDpcdFxuICAzMTpcdC8qIEFzc3VtZXMgeW91JiMzOTt2ZSBhbHJlYWR5IGRvbmUgdGhlIGVuZGlhbiB0byBDUFUgY29udmVyc2lvbiAqL1xuICAzMjpcdGJvb2wgYXRoOWtfY21uX3J4X2FjY2VwdChzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLFxuICAzMzpcdFx0XHRcdCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuICAzNDpcdFx0XHRcdCBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhzLFxuICAzNTpcdFx0XHRcdCBzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnhfc3RhdHMsXG4gIDM2Olx0XHRcdFx0IGJvb2wgKmRlY3J5cHRfZXJyb3IsXG4gIDM3Olx0XHRcdFx0IHVuc2lnbmVkIGludCByeGZpbHRlcilcbiAgMzg6XHR7XG4gIDM5Olx0XHRzdHJ1Y3QgYXRoX2h3ICphaCA9IGNvbW1vbi1cdTAwM2VhaDtcbiAgNDA6XHRcdGJvb2wgaXNfbWMsIGlzX3ZhbGlkX3RraXAsIHN0cmlwX21pYywgbWljX2Vycm9yO1xuICA0MTpcdFx0X19sZTE2IGZjO1xuICA0MjpcdFxuICA0MzpcdFx0ZmMgPSBoZHItXHUwMDNlZnJhbWVfY29udHJvbDtcbiAgNDQ6XHRcbiAgNDU6XHRcdGlzX21jID0gISFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItXHUwMDNlYWRkcjEpO1xuICA0NjpcdFx0aXNfdmFsaWRfdGtpcCA9IHJ4X3N0YXRzLVx1MDAzZXJzX2tleWl4ICE9IEFUSDlLX1JYS0VZSVhfSU5WQUxJRCBcdTAwMjZcdTAwMjZcbiAgNDc6XHRcdFx0dGVzdF9iaXQocnhfc3RhdHMtXHUwMDNlcnNfa2V5aXgsIGNvbW1vbi1cdTAwM2V0a2lwX2tleW1hcCk7XG4gIDQ4Olx0XHRzdHJpcF9taWMgPSBpc192YWxpZF90a2lwIFx1MDAyNlx1MDAyNiBpZWVlODAyMTFfaXNfZGF0YShmYykgXHUwMDI2XHUwMDI2XG4gIDQ5Olx0XHRcdGllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGZjKSBcdTAwMjZcdTAwMjZcbiAgNTA6XHRcdFx0IShyeF9zdGF0cy1cdTAwM2Vyc19zdGF0dXMgXHUwMDI2XG4gIDUxOlx0XHRcdChBVEg5S19SWEVSUl9ERUNSWVBUIHwgQVRIOUtfUlhFUlJfQ1JDIHwgQVRIOUtfUlhFUlJfTUlDIHxcbiAgNTI6XHRcdFx0IEFUSDlLX1JYRVJSX0tFWU1JU1MpKTtcbiAgNTM6XHRcbiAgNTQ6XHRcdC8qXG4gIDU1Olx0XHQgKiBLZXkgbWlzcyBldmVudHMgYXJlIG9ubHkgcmVsZXZhbnQgZm9yIHBhaXJ3aXNlIGtleXMgd2hlcmUgdGhlXG4gIDU2Olx0XHQgKiBkZXNjcmlwdG9yIGRvZXMgY29udGFpbiBhIHZhbGlkIGtleSBpbmRleC4gVGhpcyBoYXMgYmVlbiBvYnNlcnZlZFxuICA1NzpcdFx0ICogbW9zdGx5IHdpdGggQ0NNUCBlbmNyeXB0aW9uLlxuICA1ODpcdFx0ICovXG4gIDU5Olx0XHRpZiAocnhfc3RhdHMtXHUwMDNlcnNfa2V5aXggPT0gQVRIOUtfUlhLRVlJWF9JTlZBTElEIHx8XG4gIDYwOlx0XHQgICAgIXRlc3RfYml0KHJ4X3N0YXRzLVx1MDAzZXJzX2tleWl4LCBjb21tb24tXHUwMDNlY2NtcF9rZXltYXApKVxuICA2MTpcdFx0XHRyeF9zdGF0cy1cdTAwM2Vyc19zdGF0dXMgXHUwMDI2PSB+QVRIOUtfUlhFUlJfS0VZTUlTUztcbiAgNjI6XHRcbiAgNjM6XHRcdG1pY19lcnJvciA9IGlzX3ZhbGlkX3RraXAgXHUwMDI2XHUwMDI2ICFpZWVlODAyMTFfaXNfY3RsKGZjKSBcdTAwMjZcdTAwMjZcbiAgNjQ6XHRcdFx0IWllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGZjKSBcdTAwMjZcdTAwMjZcbiAgNjU6XHRcdFx0IShsZTE2X3RvX2NwdShoZHItXHUwMDNlc2VxX2N0cmwpIFx1MDAyNiBJRUVFODAyMTFfU0NUTF9GUkFHKSBcdTAwMjZcdTAwMjZcbiAgNjY6XHRcdFx0KHJ4X3N0YXRzLVx1MDAzZXJzX3N0YXR1cyBcdTAwMjYgQVRIOUtfUlhFUlJfTUlDKTtcbiAgNjc6XHRcbiAgNjg6XHRcdC8qXG4gIDY5Olx0XHQgKiBUaGUgcnhfc3RhdHMtXHUwMDNlcnNfc3RhdHVzIHdpbGwgbm90IGJlIHNldCB1bnRpbCB0aGUgZW5kIG9mIHRoZVxuICA3MDpcdFx0ICogY2hhaW5lZCBkZXNjcmlwdG9ycyBzbyBpdCBjYW4gYmUgaWdub3JlZCBpZiByc19tb3JlIGlzIHNldC4gVGhlXG4gIDcxOlx0XHQgKiByc19tb3JlIHdpbGwgYmUgZmFsc2UgYXQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgY2hhaW5lZFxuICA3MjpcdFx0ICogZGVzY3JpcHRvcnMuXG4gIDczOlx0XHQgKi9cbiAgNzQ6XHRcdGlmIChyeF9zdGF0cy1cdTAwM2Vyc19zdGF0dXMgIT0gMCkge1xuICA3NTpcdFx0XHR1OCBzdGF0dXNfbWFzaztcbiAgNzY6XHRcbiAgNzc6XHRcdFx0aWYgKHJ4X3N0YXRzLVx1MDAzZXJzX3N0YXR1cyBcdTAwMjYgQVRIOUtfUlhFUlJfQ1JDKSB7XG4gIDc4Olx0XHRcdFx0cnhzLVx1MDAzZWZsYWcgfD0gUlhfRkxBR19GQUlMRURfRkNTX0NSQztcbiAgNzk6XHRcdFx0XHRtaWNfZXJyb3IgPSBmYWxzZTtcbiAgODA6XHRcdFx0fVxuICA4MTpcdFxuICA4MjpcdFx0XHRpZiAoKHJ4X3N0YXRzLVx1MDAzZXJzX3N0YXR1cyBcdTAwMjYgQVRIOUtfUlhFUlJfREVDUllQVCkgfHxcbiAgODM6XHRcdFx0ICAgICghaXNfbWMgXHUwMDI2XHUwMDI2IChyeF9zdGF0cy1cdTAwM2Vyc19zdGF0dXMgXHUwMDI2IEFUSDlLX1JYRVJSX0tFWU1JU1MpKSkge1xuICA4NDpcdFx0XHRcdCpkZWNyeXB0X2Vycm9yID0gdHJ1ZTtcbiAgODU6XHRcdFx0XHRtaWNfZXJyb3IgPSBmYWxzZTtcbiAgODY6XHRcdFx0fVxuICA4NzpcdFxuICA4ODpcdFxuICA4OTpcdFx0XHQvKlxuICA5MDpcdFx0XHQgKiBSZWplY3QgZXJyb3IgZnJhbWVzIHdpdGggdGhlIGV4Y2VwdGlvbiBvZlxuICA5MTpcdFx0XHQgKiBkZWNyeXB0aW9uIGFuZCBNSUMgZmFpbHVyZXMuIEZvciBtb25pdG9yIG1vZGUsXG4gIDkyOlx0XHRcdCAqIHdlIGFsc28gaWdub3JlIHRoZSBDUkMgZXJyb3IuXG4gIDkzOlx0XHRcdCAqL1xuICA5NDpcdFx0XHRzdGF0dXNfbWFzayA9IEFUSDlLX1JYRVJSX0RFQ1JZUFQgfCBBVEg5S19SWEVSUl9NSUMgfFxuICA5NTpcdFx0XHRcdCAgICAgIEFUSDlLX1JYRVJSX0tFWU1JU1M7XG4gIDk2Olx0XG4gIDk3Olx0XHRcdGlmIChhaC1cdTAwM2Vpc19tb25pdG9yaW5nIFx1MDAyNlx1MDAyNiAocnhmaWx0ZXIgXHUwMDI2IEZJRl9GQ1NGQUlMKSlcbiAgOTg6XHRcdFx0XHRzdGF0dXNfbWFzayB8PSBBVEg5S19SWEVSUl9DUkM7XG4gIDk5Olx0XG4gMTAwOlx0XHRcdGlmIChyeF9zdGF0cy1cdTAwM2Vyc19zdGF0dXMgXHUwMDI2IH5zdGF0dXNfbWFzaylcbiAxMDE6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMTAyOlx0XHR9XG4gMTAzOlx0XG4gMTA0Olx0XHQvKlxuIDEwNTpcdFx0ICogRm9yIHVuaWNhc3QgZnJhbWVzIHRoZSBNSUMgZXJyb3IgYml0IGNhbiBoYXZlIGZhbHNlIHBvc2l0aXZlcyxcbiAxMDY6XHRcdCAqIHNvIGFsbCBNSUMgZXJyb3IgcmVwb3J0cyBuZWVkIHRvIGJlIHZhbGlkYXRlZCBpbiBzb2Z0d2FyZS5cbiAxMDc6XHRcdCAqIEZhbHNlIG5lZ2F0aXZlcyBhcmUgbm90IGNvbW1vbiwgc28gc2tpcCBzb2Z0d2FyZSB2ZXJpZmljYXRpb25cbiAxMDg6XHRcdCAqIGlmIHRoZSBoYXJkd2FyZSBjb25zaWRlcnMgdGhlIE1JQyB2YWxpZC5cbiAxMDk6XHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkwNwoJCQkJCQkJb3V0cHV0OiAxODgKCQkJCQkJCXRob3VnaHRzOiA5MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4vS0FTQU4gQW5hbHlzaXMgb2YgU3BlY3RyYWwgU2FtcGxlIExlbmd0aCBDaGVjayoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBhbmFseXNpcyBmb2N1c2VzIG9uIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIEtNU0FOLiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW4oKWAsIHdoaWNoIGVzc2VudGlhbGx5IHBlcmZvcm1zIGEgbGVuZ3RoIGNoZWNrIGJhc2VkIG9uIGNoYW5uZWwgdHlwZSB0byBkZXRlcm1pbmUgaWYgYSBzcGVjdHJhbCBzYW1wbGUgc2hvdWxkIGJlIHByb2Nlc3NlZC4gSSYjMzk7dmUgZXhhbWluZWQgdGhlIGNvZGUsIGZvY3VzaW5nIG9uIGhvdyBkYXRhIGZsb3dzIGFuZCBpcyBpbml0aWFsaXplZC4KCkZpcnN0LCB3aXRoaW4gYGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKClgLCBgY2hhbl90eXBlYCBhbmQgYGZmdF9sZW5gIGFyZSBzaW1wbGUgbG9jYWwgc2NhbGFycywgaW5pdGlhbGl6ZWQgdW5jb25kaXRpb25hbGx5LiBUaGVuLCBgYXRoOWtfcnhfcHJlcGFyZSgpYCBpcyB3aGVyZSB0aGUgbGVuZ3RoIGNoZWNrIGlzIHV0aWxpemVkLiBUaGUgbGVuZ3RoIGNoZWNrIHJlbGllcyBvbiBgcnhzdGF0dXMtJmd0O3JzX2RhdGFsZW5gIHdoaWNoIGlzIGFuIGluaXRpYWxpemF0aW9uIHZhbHVlLiBJZiB0aGUgbGVuZ3RoIGNoZWNrIGlzIG1ldCwgYW5kIGEgQ1JDIGVycm9yIGlzIGVuY291bnRlcmVkLCBgcnNfcGh5ZXJyYCBnZXRzIHNldCBhbmQgdGhlIGRhdGEgaXMgcGFzc2VkIHRvIGBhdGhfY21uX3Byb2Nlc3NfZmZ0KClgLCB3aGVyZSB0aGUgc2FtcGxlIGJ1ZmZlciBpcyB6ZXJvZWQgb3V0LiBObyBkYXRhIGlzIGxlYWtlZC4KCkNydWNpYWxseSwgSSYjMzk7bSBjaGVja2luZyBhZ2FpbnN0IHRoZSBLTVNBTiBjcml0ZXJpYSwgYXMgdGhpcyBpcyBhIHBvdGVudGlhbCBhcmVhIGZvciBsZWFrcywgYnV0IGFsc28gZm9yIHN0YW5kYXJkIEtBU0FOIGlzc3Vlcy4gSSYjMzk7dmUgY29uZmlybWVkOgoKMS4gIFRoZXJlIGFyZSBubyBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQuCjIuICBUaGUgY29kZSBkb2VzbiYjMzk7dCByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbmRpdGlvbmFsIGxvZ2ljLgozLiAgTm8gbmV3LCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgYWxsb2NhdGVkIGFuZCBwb3RlbnRpYWxseSBsZWZ0IHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuCjQuICBUaGVyZSBhcmUgbm8gYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLgoKVGhpcyBhbmFseXNpcyBzaG93cyB0aGF0IGFsbCBsb2NhbCB2YXJpYWJsZXMsIGBzdHJ1Y3RgIGZpZWxkcywgYW5kIGJ1ZmZlcnMgdG91Y2hlZCBieSB0aGlzIHBhdGNoIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgdGh1cywgc3RhbmRhcmQgc2FuaXRpemVycyAobGlrZSBLQVNBTikgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIGRldGVjdGluZyBhbnkgaXNzdWVzIHRoYXQgbWF5IGFyaXNlIGZyb20gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGV0Yy4gSSYjMzk7bSBjb21mb3J0YWJsZSBzdGF0aW5nIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IEtNU0FOIGNvbmNlcm5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHNwZWN0cmFsIHNjYW4gc2FtcGxlIGxlbmd0aCB2YWxpZGF0aW9uIHZpYSBhdGg5a19odGNfaXNfc3BlY3RyYWxfc2FtcGxlX2xlbigpIGFuZCBmb3J3YXJkcyBDUkMtZXJyb3JlZCBmcmFtZXMgd2l0aCBtYXRjaGluZyBsZW5ndGhzIHRvIGF0aF9jbW5fcHJvY2Vzc19mZnQoKSBpbiBhdGg5a19yeF9wcmVwYXJlKCkuIEFsbCB2YXJpYWJsZXMgYW5kIHN0cnVjdHVyZSBmaWVsZHMgdXNlZCAoZS5nLiwgcnNfZGF0YWxlbiwgcnhfc3RhdHMucnNfcGh5ZXJyLCBjaGFuX3R5cGUsIGZmdF9sZW4pIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMsIHBlcmZvcm0gYW55IGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG9yIGV4cG9zZSBwYWRkaW5nL3VuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgKHN1Y2ggYXMgYnVmZmVyIGJvdW5kcyBvciBwb2ludGVyIGhhbmRsaW5nKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3BlY3RyYWwgc2NhbiBzYW1wbGUgbGVuZ3RoIHZhbGlkYXRpb24gdmlhIGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKCkgYW5kIGZvcndhcmRzIENSQy1lcnJvcmVkIGZyYW1lcyB3aXRoIG1hdGNoaW5nIGxlbmd0aHMgdG8gYXRoX2Ntbl9wcm9jZXNzX2ZmdCgpIGluIGF0aDlrX3J4X3ByZXBhcmUoKS4gQWxsIHZhcmlhYmxlcyBhbmQgc3RydWN0dXJlIGZpZWxkcyB1c2VkIChlLmcuLCByc19kYXRhbGVuLCByeF9zdGF0cy5yc19waHllcnIsIGNoYW5fdHlwZSwgZmZ0X2xlbikgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgYnVmZmVycywgcGVyZm9ybSBhbnkgY29weV90b191c2VyIG9wZXJhdGlvbnMsIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgb3IgZXhwb3NlIHBhZGRpbmcvdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcyAoc3VjaCBhcyBidWZmZXIgYm91bmRzIG9yIHBvaW50ZXIgaGFuZGxpbmcpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MTo0NS45ODU0NTgwNDJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM3MDcwNjg3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRIOUtfSFRDXCIsXG4gICAgXCJBVEg5S19IVENfREVCVUdGU1wiLFxuICAgIFwiQVRIOUtfQ09NTU9OX1NQRUNUUkFMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXRoOWtfcnhfdGFza2xldFwiLFxuICAgIFwiYXRoOWtfaHRjX3J4ZXBcIixcbiAgICBcImF0aF9jbW5fcHJvY2Vzc19mZnRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3BlY3RyYWwgc2NhbiBzYW1wbGUgbGVuZ3RoIHZhbGlkYXRpb24gdmlhIGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKCkgYW5kIGZvcndhcmRzIENSQy1lcnJvcmVkIGZyYW1lcyB3aXRoIG1hdGNoaW5nIGxlbmd0aHMgdG8gYXRoX2Ntbl9wcm9jZXNzX2ZmdCgpIGluIGF0aDlrX3J4X3ByZXBhcmUoKS4gQWxsIHZhcmlhYmxlcyBhbmQgc3RydWN0dXJlIGZpZWxkcyB1c2VkIChlLmcuLCByc19kYXRhbGVuLCByeF9zdGF0cy5yc19waHllcnIsIGNoYW5fdHlwZSwgZmZ0X2xlbikgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgYnVmZmVycywgcGVyZm9ybSBhbnkgY29weV90b191c2VyIG9wZXJhdGlvbnMsIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgb3IgZXhwb3NlIHBhZGRpbmcvdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcyAoc3VjaCBhcyBidWZmZXIgYm91bmRzIG9yIHBvaW50ZXIgaGFuZGxpbmcpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3BlY3RyYWwgRkZUIHNhbXBsZSBkZXRlY3Rpb24gZm9yIENSQy1lcnJvcmVkIGZyYW1lcyBpbiB0aGUgUlggcHJvY2Vzc2luZyBwYXRoIChhdGg5a19yeF9wcmVwYXJlKSBvZiB0aGUgYXRoOWtfaHRjIFVTQiB3aXJlbGVzcyBkcml2ZXIsIGRpcmVjdGluZyBxdWFsaWZ5aW5nIGZyYW1lcyBpbnRvIGF0aF9jbW5fcHJvY2Vzc19mZnQuIEJlY2F1c2UgYXRoOWtfaHRjIGlzIGEgVVNCIFdpLUZpIGRyaXZlciByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uLCB0aGlzIHRvdWNoZXMgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQxOjQ1Ljk4NTQ2NTI3MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1NTAxNDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWM4NzEyYWQxNDFlYzc1MGZiMWY4NWRmYWQzZmM3YTFiZTY4OGYyNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCA1IDAyOjQxOjQ1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguY1xcbmluZGV4IGJlZDdlYTI0MjVhMGUuLmYyMWNmYzAzNDI2YjIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jXFxuQEAgLTk2OSw2ICs5NjksMzIgQEAgc3RhdGljIHZvaWQgcnhfc3RhdHVzX2h0Y190b19hdGgoc3RydWN0IGF0aF9yeF9zdGF0dXMgKnJ4X3N0YXRzLFxcbiBcXHRjb252ZXJ0X2h0Y19mbGFnKHJ4X3N0YXRzLCByeHN0YXR1cyk7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFRoZSBmaXJtd2FyZSByZXBvcnRzIGEgZnJhbWUgdGhhdCBmYWlsZWQgaXRzIENSQyBhcyBhIENSQyBlcnJvciBldmVuIHdoZW5cXG4rICogdGhlIFBIWSBlcnJvciBiaXQgaXMgc2V0IGFzIHdlbGwsIHNvIHVuZGVyIGludGVyZmVyZW5jZSBzcGVjdHJhbCBzYW1wbGVzXFxuKyAqIHJlYWNoIHRoZSBob3N0IGFzIENSQyBlcnJvcnMuIEEgc2FtcGxlIGlzIHJlY29nbmlzYWJsZSBieSBpdHMgc2l6ZTogdGhlXFxuKyAqIEZGVCByZXBvcnQgbGVuZ3RoIGZvciB0aGUgY2hhbm5lbCB3aWR0aCwgcGx1cyBvciBtaW51cyB0aGUgdHdvIGJ5dGVzIHRoZVxcbisgKiBNQUMgbWF5IGFkZCBvciBkcm9wLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW4oc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHUxNiBsZW4pXFxuK3tcXG4rXFx0ZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFuX3R5cGU7XFxuK1xcdHUxNiBmZnRfbGVuO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXNwZWNfcHJpdi5zcGVjdHJhbF9tb2RlID09IFNQRUNUUkFMX0RJU0FCTEVEKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRjaGFuX3R5cGUgPSBjZmc4MDIxMV9nZXRfY2hhbmRlZl90eXBlKFxcdTAwMjZwcml2LVxcdTAwM2Vody1cXHUwMDNlY29uZi5jaGFuZGVmKTtcXG4rXFx0aWYgKGNoYW5fdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0ME1JTlVTIHx8XFxuK1xcdCAgICBjaGFuX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTKVxcbitcXHRcXHRmZnRfbGVuID0gU1BFQ1RSQUxfSFQyMF80MF9UT1RBTF9EQVRBX0xFTjtcXG4rXFx0ZWxzZVxcbitcXHRcXHRmZnRfbGVuID0gU1BFQ1RSQUxfSFQyMF9UT1RBTF9EQVRBX0xFTjtcXG4rXFxuK1xcdHJldHVybiBsZW4gKyAxIFxcdTAwM2U9IGZmdF9sZW4gXFx1MDAyNlxcdTAwMjYgbGVuIFxcdTAwM2M9IGZmdF9sZW4gKyAyO1xcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCBhdGg5a19yeF9wcmVwYXJlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYXRoOWtfaHRjX3J4YnVmICpyeGJ1ZixcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKVxcbkBAIC0xMDUyLDYgKzEwNzgsMTggQEAgc3RhdGljIGJvb2wgYXRoOWtfcnhfcHJlcGFyZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuIFxcdFxcdGdvdG8gcnhfbmV4dDtcXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogTGV0IHRoZSBGRlQgcGFyc2VyIGRlY2lkZSB3aGV0aGVyIGEgQ1JDIGVycm9yIG9mIHNhbXBsZSBzaXplIGlzIGFcXG4rXFx0ICogc2FtcGxlOyBpdCB2YWxpZGF0ZXMgdGhlIGNvbnRlbnRzIGFuZCByZXR1cm5zIDAgZm9yIGFueXRoaW5nIGVsc2UuXFxuK1xcdCAqL1xcbitcXHRpZiAodW5saWtlbHkocnhfc3RhdHMucnNfc3RhdHVzIFxcdTAwMjYgQVRIOUtfUlhFUlJfQ1JDKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW4ocHJpdiwgcnNfZGF0YWxlbikpIHtcXG4rXFx0XFx0cnhfc3RhdHMucnNfcGh5ZXJyID0gQVRIOUtfUEhZRVJSX1JBREFSO1xcbitcXHRcXHRpZiAoYXRoX2Ntbl9wcm9jZXNzX2ZmdChcXHUwMDI2cHJpdi1cXHUwMDNlc3BlY19wcml2LCBoZHIsIFxcdTAwMjZyeF9zdGF0cyxcXG4rXFx0XFx0XFx0XFx0XFx0cnhfc3RhdHVzLVxcdTAwM2VtYWN0aW1lKSlcXG4rXFx0XFx0XFx0Z290byByeF9uZXh0O1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoIWF0aDlrX2Ntbl9yeF9hY2NlcHQoY29tbW9uLCBoZHIsIHJ4X3N0YXR1cywgXFx1MDAyNnJ4X3N0YXRzLFxcbiBcXHRcXHRcXHRcXHUwMDI2ZGVjcnlwdF9lcnJvciwgcHJpdi1cXHUwMDNlcnhmaWx0ZXIpKVxcbiBcXHRcXHRnb3RvIHJ4X25leHQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQxOjQ2LjQ1MTc0OTUxN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjMyNjY1ODc5MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRIOUtfSFRDXCIsXG4gICAgXCJBVEg5S19IVENfREVCVUdGU1wiLFxuICAgIFwiQVRIOUtfQ09NTU9OX1NQRUNUUkFMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXRoOWtfcnhfdGFza2xldFwiLFxuICAgIFwiYXRoOWtfaHRjX3J4ZXBcIixcbiAgICBcImF0aF9jbW5fcHJvY2Vzc19mZnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHNwZWN0cmFsIEZGVCBzYW1wbGUgZGV0ZWN0aW9uIGZvciBDUkMtZXJyb3JlZCBmcmFtZXMgaW4gdGhlIFJYIHByb2Nlc3NpbmcgcGF0aCAoYXRoOWtfcnhfcHJlcGFyZSkgb2YgdGhlIGF0aDlrX2h0YyBVU0Igd2lyZWxlc3MgZHJpdmVyLCBkaXJlY3RpbmcgcXVhbGlmeWluZyBmcmFtZXMgaW50byBhdGhfY21uX3Byb2Nlc3NfZmZ0LiBCZWNhdXNlIGF0aDlrX2h0YyBpcyBhIFVTQiBXaS1GaSBkcml2ZXIgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiwgdGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBrZXJuZWwgY29kZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDljODcxMmFkMTQxZWM3NTBmYjFmODVkZmFkM2ZjN2ExYmU2ODhmMjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDAyOjQxOjQ1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jXG5pbmRleCBiZWQ3ZWEyNDI1YTBlLi5mMjFjZmMwMzQyNmIyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmNcbkBAIC05NjksNiArOTY5LDMyIEBAIHN0YXRpYyB2b2lkIHJ4X3N0YXR1c19odGNfdG9fYXRoKHN0cnVjdCBhdGhfcnhfc3RhdHVzICpyeF9zdGF0cyxcbiBcdGNvbnZlcnRfaHRjX2ZsYWcocnhfc3RhdHMsIHJ4c3RhdHVzKTtcbiB9XG4gXG4rLypcbisgKiBUaGUgZmlybXdhcmUgcmVwb3J0cyBhIGZyYW1lIHRoYXQgZmFpbGVkIGl0cyBDUkMgYXMgYSBDUkMgZXJyb3IgZXZlbiB3aGVuXG4rICogdGhlIFBIWSBlcnJvciBiaXQgaXMgc2V0IGFzIHdlbGwsIHNvIHVuZGVyIGludGVyZmVyZW5jZSBzcGVjdHJhbCBzYW1wbGVzXG4rICogcmVhY2ggdGhlIGhvc3QgYXMgQ1JDIGVycm9ycy4gQSBzYW1wbGUgaXMgcmVjb2duaXNhYmxlIGJ5IGl0cyBzaXplOiB0aGVcbisgKiBGRlQgcmVwb3J0IGxlbmd0aCBmb3IgdGhlIGNoYW5uZWwgd2lkdGgsIHBsdXMgb3IgbWludXMgdGhlIHR3byBieXRlcyB0aGVcbisgKiBNQUMgbWF5IGFkZCBvciBkcm9wLlxuKyAqL1xuK3N0YXRpYyBib29sIGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbitcdFx0XHRcdFx0ICAgICB1MTYgbGVuKVxuK3tcbitcdGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbl90eXBlO1xuK1x0dTE2IGZmdF9sZW47XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VzcGVjX3ByaXYuc3BlY3RyYWxfbW9kZSA9PSBTUEVDVFJBTF9ESVNBQkxFRClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Y2hhbl90eXBlID0gY2ZnODAyMTFfZ2V0X2NoYW5kZWZfdHlwZShcdTAwMjZwcml2LVx1MDAzZWh3LVx1MDAzZWNvbmYuY2hhbmRlZik7XG4rXHRpZiAoY2hhbl90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMgfHxcbitcdCAgICBjaGFuX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTKVxuK1x0XHRmZnRfbGVuID0gU1BFQ1RSQUxfSFQyMF80MF9UT1RBTF9EQVRBX0xFTjtcbitcdGVsc2VcbitcdFx0ZmZ0X2xlbiA9IFNQRUNUUkFMX0hUMjBfVE9UQUxfREFUQV9MRU47XG4rXG4rXHRyZXR1cm4gbGVuICsgMSBcdTAwM2U9IGZmdF9sZW4gXHUwMDI2XHUwMDI2IGxlbiBcdTAwM2M9IGZmdF9sZW4gKyAyO1xuK31cbitcbiBzdGF0aWMgYm9vbCBhdGg5a19yeF9wcmVwYXJlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbiBcdFx0XHQgICAgIHN0cnVjdCBhdGg5a19odGNfcnhidWYgKnJ4YnVmLFxuIFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cylcbkBAIC0xMDUyLDYgKzEwNzgsMTggQEAgc3RhdGljIGJvb2wgYXRoOWtfcnhfcHJlcGFyZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG4gXHRcdGdvdG8gcnhfbmV4dDtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBMZXQgdGhlIEZGVCBwYXJzZXIgZGVjaWRlIHdoZXRoZXIgYSBDUkMgZXJyb3Igb2Ygc2FtcGxlIHNpemUgaXMgYVxuK1x0ICogc2FtcGxlOyBpdCB2YWxpZGF0ZXMgdGhlIGNvbnRlbnRzIGFuZCByZXR1cm5zIDAgZm9yIGFueXRoaW5nIGVsc2UuXG4rXHQgKi9cbitcdGlmICh1bmxpa2VseShyeF9zdGF0cy5yc19zdGF0dXMgXHUwMDI2IEFUSDlLX1JYRVJSX0NSQykgXHUwMDI2XHUwMDI2XG4rXHQgICAgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW4ocHJpdiwgcnNfZGF0YWxlbikpIHtcbitcdFx0cnhfc3RhdHMucnNfcGh5ZXJyID0gQVRIOUtfUEhZRVJSX1JBREFSO1xuK1x0XHRpZiAoYXRoX2Ntbl9wcm9jZXNzX2ZmdChcdTAwMjZwcml2LVx1MDAzZXNwZWNfcHJpdiwgaGRyLCBcdTAwMjZyeF9zdGF0cyxcbitcdFx0XHRcdFx0cnhfc3RhdHVzLVx1MDAzZW1hY3RpbWUpKVxuK1x0XHRcdGdvdG8gcnhfbmV4dDtcbitcdH1cbitcbiBcdGlmICghYXRoOWtfY21uX3J4X2FjY2VwdChjb21tb24sIGhkciwgcnhfc3RhdHVzLCBcdTAwMjZyeF9zdGF0cyxcbiBcdFx0XHRcdTAwMjZkZWNyeXB0X2Vycm9yLCBwcml2LVx1MDAzZXJ4ZmlsdGVyKSlcbiBcdFx0Z290byByeF9uZXh0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDE6NDYuNDUxNzUyNzg3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjI3Mjk4OTE5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiBUaGUgZmlyc3QgdGhpbmcgSSdsbCBkbyBpcyByZWFsbHkgZXhhbWluZSB0aGUgZGlmZiDigJMgdGhlIG1vZGlmaWVkIGZpbGVzIHRlbGwgYSBzdG9yeS4gSSBzZWUgaXQncyB0b3VjaGluZyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jYC4gUmlnaHQgYXdheSwgdGhhdCByYWlzZXMgYSBmZXcgcXVlc3Rpb25zLiBJcyB0aGlzIGEgVVNCIHdpcmVsZXNzIGRyaXZlciwgb3IgUENJLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBjaGVjayBzaG91bGQgY29uZmlybSBteSBzdXNwaWNpb25zLiBBaCwgaXQncyB0aGUgQXRoZXJvcyBVU0IgODAyLjExbiB3aXJlbGVzcyBkZXZpY2UgZHJpdmVyLCBIVEMgbWVhbmluZyBIb3N0IFRhcmdldCBDb21tdW5pY2F0aW9uIG92ZXIgVVNCLiBOb3csIGNhbiB0aGlzIHRoaW5nIGJlIGVtdWxhdGVkIHRocm91Z2ggc3l6a2FsbGVyJ3MgVVNCIGNhcGFiaWxpdGllcz8gVGhpbmtpbmcgYWJvdXQgc3l6a2FsbGVyJ3MgVVNCIGZ1enppbmcsIGl0IGhhcyBmdW5jdGlvbnMgbGlrZSBgc3l6X3VzYl9jb25uZWN0YCAtIHRoYXQncyBhIGdvb2Qgc2lnbi4gQW5kIGdpdmVuIHRoYXQgdGhpcyBpcyBhIFVTQiBkcml2ZXIgKGBBVEg5S19IVENgKSwgdGhlIGFuc3dlciBpcyB5ZXMsIHRoaXMgaXMgcHJvbWlzaW5nLiBCdXQgSSBzaG91bGQgY29uZmlybSB3aXRoIHRoZSBLY29uZmlnIGFuZCBvdGhlciBmaWxlcyB0byBjb25maXJtIHdoYXQgSSBzdXNwZWN0LiBJJ2xsIG5lZWQgdG8gcnVuIHNvbWV0aGluZyBsaWtlIGdyZXBwZXIgb3IgcXVpY2tseSByZWFkIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUgdW5kZXIgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9gLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTI2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDE6NTIuNzI0NzQ1NTY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNDc2NjUxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBVEg5S19IVENcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnPTEzPWNvbmZpZyBBVEg5S19CVENPRVhfU1VQUE9SVFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE0LVxcdGJvb2wgXFxcIkF0aGVyb3MgYmx1ZXRvb3RoIGNvZXhpc3RlbmNlIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTU6XFx0ZGVwZW5kcyBvbiAoQVRIOUsgfHwgQVRIOUtfSFRDKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE2LVxcdGRlZmF1bHQgeVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc9MTU2PWNvbmZpZyBBVEg5S19QQ0lfTk9fRUVQUk9NXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTcyOmNvbmZpZyBBVEg5S19IVENcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNzMtXFx0dHJpc3RhdGUgXFxcIkF0aGVyb3MgSFRDIGJhc2VkIHdpcmVsZXNzIGNhcmRzIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xODYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTg3OmNvbmZpZyBBVEg5S19IVENfREVCVUdGU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE4OC1cXHRib29sIFxcXCJBdGhlcm9zIGF0aDlrX2h0YyBkZWJ1Z2dpbmdcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTg5OlxcdGRlcGVuZHMgb24gQVRIOUtfSFRDIFxcdTAwMjZcXHUwMDI2IERFQlVHX0ZTXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTkwLVxcdHNlbGVjdCBBVEg5S19DT01NT05fREVCVUdcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnPTIwNj1jb25maWcgQVRIOUtfQ09NTU9OX1NQRUNUUkFMXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMjA3LVxcdGJvb2wgXFxcIkF0aGVyb3MgYXRoOWsvYXRoOWtfaHRjIHNwZWN0cmFsIHNjYW4gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoyMDg6XFx0ZGVwZW5kcyBvbiBBVEg5S19ERUJVR0ZTIHx8IEFUSDlLX0hUQ19ERUJVR0ZTXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMjA5LVxcdHNlbGVjdCBSRUxBWVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlPTY4PWF0aDlrX2h0Yy15ICs9XFx0aHRjX2hzdC5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZS03Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGU6Nzc6YXRoOWtfaHRjLSQoQ09ORklHX0FUSDlLX0hUQ19ERUJVR0ZTKSArPSBodGNfZHJ2X2RlYnVnLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGUtNzgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlOjc5Om9iai0kKENPTkZJR19BVEg5S19IVEMpICs9IGF0aDlrX2h0Yy5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlLTgwLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19lZXByb20uYz0zMzkwPXN0YXRpYyBib29sIGF0aDlrX2h3X2FyOTMwMF9maWxsX2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfZWVwcm9tLmMtMzQwMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2VlcHJvbS5jOjM0MDE6I2lmIGRlZmluZWQoQ09ORklHX0FUSDlLX0RFQlVHRlMpIHx8IGRlZmluZWQoQ09ORklHX0FUSDlLX0hUQ19ERUJVR0ZTKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfZWVwcm9tLmMtMzQwMi1zdGF0aWMgdTMyIGFyOTAwM19kdW1wX21vZGFsX2VlcHJvbShjaGFyICpidWYsIHUzMiBsZW4sIHUzMiBzaXplLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYz0yMzI9c3RhdGljIGlubGluZSB2b2lkIGF0aDlrX3NrYl9xdWV1ZV9jb21wbGV0ZShzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jLTIzOC1cXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUocXVldWUpKSAhPSBOVUxMKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYzoyMzk6I2lmZGVmIENPTkZJR19BVEg5S19IVENfREVCVUdGU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMtMjQwLVxcdFxcdGludCBsbiA9IHNrYi1cXHUwMDNlbGVuO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYz0zNzY9c3RhdGljIGludCBoaWZfdXNiX3NlbmRfdHgoc3RydWN0IGhpZl9kZXZpY2VfdXNiICpoaWZfZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYy0zOTktXFx0LyogTWdtdC9CZWFjb24gZnJhbWVzIGRvbid0IHVzZSB0aGUgVFggYnVmZmVyIHBvb2wgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jOjQwMDpcXHRpZiAoKHR4X2N0bC1cXHUwMDNldHlwZSA9PSBBVEg5S19IVENfTUdNVCkgfHxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jOjQwMTpcXHQgICAgKHR4X2N0bC1cXHUwMDNldHlwZSA9PSBBVEg5S19IVENfQkVBQ09OKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMtNDAyLVxcdFxcdHJldCA9IGhpZl91c2Jfc2VuZF9tZ210KGhpZl9kZXYsIHNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jLTQwNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jOjQwNzpcXHRpZiAoKHR4X2N0bC1cXHUwMDNldHlwZSA9PSBBVEg5S19IVENfTk9STUFMKSB8fFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmM6NDA4OlxcdCAgICAodHhfY3RsLVxcdTAwM2V0eXBlID09IEFUSDlLX0hUQ19BTVBEVSkpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jLTQwOS1cXHRcXHRfX3NrYl9xdWV1ZV90YWlsKFxcdTAwMjZoaWZfZGV2LVxcdTAwM2V0eC50eF9za2JfcXVldWUsIHNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jPTQ4Nz1zdGF0aWMgaW5saW5lIGJvb2wgY2hlY2tfaW5kZXgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaWR4KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYy00OTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYzo0OTM6XFx0aWYgKCh0eF9jdGwtXFx1MDAzZXR5cGUgPT0gQVRIOUtfSFRDX0FNUERVKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMtNDk0LVxcdCAgICAodHhfY3RsLVxcdTAwM2VzdGFfaWR4ID09IGlkeCkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg9NTY9ZW51bSBodGNfb3Btb2RlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC02NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6NjU6I2RlZmluZSBBVEg5S19IVENfQU1QRFUgIDFcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6NjY6I2RlZmluZSBBVEg5S19IVENfTk9STUFMIDJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6Njc6I2RlZmluZSBBVEg5S19IVENfQkVBQ09OIDNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6Njg6I2RlZmluZSBBVEg5S19IVENfTUdNVCAgIDRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtNjktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjcwOiNkZWZpbmUgQVRIOUtfSFRDX1RYX0NUU09OTFkgICAgICAweDFcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6NzE6I2RlZmluZSBBVEg5S19IVENfVFhfUlRTQ1RTICAgICAgIDB4MlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC03Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg9NzM9c3RydWN0IHR4X2ZyYW1lX2hkciB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtNzctXFx0dTggdGlkbm87XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjc4OlxcdF9fYmUzMiBmbGFnczsgLyogQVRIOUtfSFRDX1RYXyogKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtNzktXFx0dTgga2V5X3R5cGU7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg9MTk0PXN0cnVjdCBhdGg5a19odGNfdGFyZ2V0X3J4X3N0YXRzIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0xOTktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjIwMDojZGVmaW5lIEFUSDlLX0hUQ19NQVhfVklGIDJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6MjAxOiNkZWZpbmUgQVRIOUtfSFRDX01BWF9CQ05fVklGIDJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtMjAyLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oPTI0OT1zdHJ1Y3QgYXRoOWtfdmlmX2l0ZXJfZGF0YSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtMjUzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDoyNTQ6I2RlZmluZSBBVEg5S19IVENfTUFYX1NUQSA4XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjI1NTojZGVmaW5lIEFUSDlLX0hUQ19NQVhfVElEIDhcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtMjU2LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oPTI2ND1zdHJ1Y3QgYXRoOWtfaHRjX3N0YSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTI2NS1cXHR1OCBpbmRleDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6MjY2OlxcdGVudW0gdGlkX2FnZ3Jfc3RhdGUgdGlkX3N0YXRlW0FUSDlLX0hUQ19NQVhfVElEXTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtMjY3LVxcdHN0cnVjdCB3b3JrX3N0cnVjdCByY191cGRhdGVfd29yaztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0yNzAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjI3MTojZGVmaW5lIEFUSDlLX0hUQ19SWEJVRiAyNTZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtMjcyLSNkZWZpbmUgSFRDX1JYX0ZSQU1FX0hFQURFUl9TSVpFIDQwXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg9MjgxPXN0cnVjdCBhdGg5a19odGNfcngge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTI4Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6Mjg3OiNkZWZpbmUgQVRIOUtfSFRDX1RYX0NMRUFOVVBfSU5URVJWQUwgNTAgLyogbXMgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6Mjg4OiNkZWZpbmUgQVRIOUtfSFRDX1RYX1RJTUVPVVRfSU5URVJWQUwgMzAwMCAvKiBtcyAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDoyODk6I2RlZmluZSBBVEg5S19IVENfVFhfUkVTRVJWRSAxMFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDoyOTA6I2RlZmluZSBBVEg5S19IVENfVFhfVElNRU9VVF9DT1VOVCA0MFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDoyOTE6I2RlZmluZSBBVEg5S19IVENfVFhfVEhSRVNIT0xEIChNQVhfVFhfQlVGX05VTSAtIEFUSDlLX0hUQ19UWF9SRVNFUlZFKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0yOTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjI5MzojZGVmaW5lIEFUSDlLX0hUQ19PUF9UWF9RVUVVRVNfU1RPUCBCSVQoMClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6Mjk0OiNkZWZpbmUgQVRIOUtfSFRDX09QX1RYX0RSQUlOICAgICAgIEJJVCgxKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0yOTUtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg9MzExPXN0cnVjdCBhdGg5a19odGNfdHhfY3RsIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6MzEyOlxcdHU4IHR5cGU7IC8qIEFUSDlLX0hUQ18qICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTMxMy1cXHR1OCBlcGlkO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oPTMxOT1zdGF0aWMgaW5saW5lIHN0cnVjdCBhdGg5a19odGNfdHhfY3RsICpIVENfU0tCX0NCKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtMzI3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDozMjg6I2lmZGVmIENPTkZJR19BVEg5S19IVENfREVCVUdGU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0zMjktI2RlZmluZSBfX1NUQVRfU0FGRShoaWZfZGV2LCBleHByKVxcdGRvIHsgKChoaWZfZGV2KS1cXHUwMDNlaHRjX2hhbmRsZS1cXHUwMDNlZHJ2X3ByaXYgPyAoZXhwcikgOiAwKTsgfSB3aGlsZSAoMClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaD0zODg9c3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h0Y19lcnJfc3RhdF9yeChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtMzkyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDozOTM6I2VuZGlmIC8qIENPTkZJR19BVEg5S19IVENfREVCVUdGUyAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0zOTQtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg9NDA5PXN0cnVjdCBodGNfYmVhY29uIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC00MTUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjQxNjpcXHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqYnNsb3RbQVRIOUtfSFRDX01BWF9CQ05fVklGXTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtNDE3LVxcdHUzMiBibWlzc2NudDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaD00NTY9c3RydWN0IGF0aDlrX2h0Y19wcml2IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC00NzgtXFx0dTggc3RhX3Nsb3Q7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjQ3OTpcXHR1OCB2aWZfc3RhX3Bvc1tBVEg5S19IVENfTUFYX1ZJRl07XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTQ4MC1cXHR1OCBudW1faWJzc192aWY7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtNTM1LVxcdHN0cnVjdCBkZWxheWVkX3dvcmsgZHV0eV9jeWNsZV93b3JrO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDo1MzY6I2lmZGVmIENPTkZJR19BVEg5S19IVENfREVCVUdGU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC01MzctXFx0c3RydWN0IGF0aDlrX2RlYnVnIGRlYnVnO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oPTY0MT1pbnQgYXRoOWtfaHRjX3Jlc3VtZShzdHJ1Y3QgaHRjX3RhcmdldCAqaHRjX2hhbmRsZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTY0Mi0jZW5kaWZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6NjQzOiNpZmRlZiBDT05GSUdfQVRIOUtfSFRDX0RFQlVHRlNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtNjQ0LWludCBhdGg5a19odGNfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX2h3ICphaCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg9NjQ4PXN0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19odGNfZGVpbml0X2RlYnVnKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC02NTAtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDo2NTE6I2VuZGlmIC8qIENPTkZJR19BVEg5S19IVENfREVCVUdGUyAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC02NTItXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYz0xMTE9c3RhdGljIHZvaWQgYXRoOWtfaHRjX2JlYWNvbl9jb25maWdfYXAoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmMtMTE2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jOjExNzpcXHRhdGg5a19jbW5fYmVhY29uX2NvbmZpZ19hcChhaCwgY29uZiwgQVRIOUtfSFRDX01BWF9CQ05fVklGKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYy0xMTgtXFx0YXRoOWtfaHRjX2JlYWNvbl9pbml0KHByaXYsIGNvbmYsIGZhbHNlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jPTE5MT1zdGF0aWMgdm9pZCBhdGg5a19odGNfc2VuZF9iZWFjb24oc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmMtMjQyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jOjI0MzpcXHR0eF9jdGwtXFx1MDAzZXR5cGUgPSBBVEg5S19IVENfQkVBQ09OO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jLTI0NC1cXHR0eF9jdGwtXFx1MDAzZWVwaWQgPSBwcml2LVxcdTAwM2ViZWFjb25fZXA7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYz0yNjQ9c3RhdGljIGludCBhdGg5a19odGNfY2hvb3NlX2JzbG90KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jLTI3Ni1cXHR0c2Z0dSA9IFRTRl9UT19UVSh0c2YgXFx1MDAzZVxcdTAwM2UgMzIsIHRzZik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmM6Mjc3OlxcdHNsb3QgPSAoKHRzZnR1ICUgaW50dmFsKSAqIEFUSDlLX0hUQ19NQVhfQkNOX1ZJRikgLyBpbnR2YWw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmM6Mjc4OlxcdHNsb3QgPSBBVEg5S19IVENfTUFYX0JDTl9WSUYgLSBzbG90IC0gMTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYy0yNzktXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYz0zMjU9dm9pZCBhdGg5a19odGNfYXNzaWduX2JzbG90KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jLTMzMi1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNnByaXYtXFx1MDAzZWJlYWNvbl9sb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYzozMzM6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFUSDlLX0hUQ19NQVhfQkNOX1ZJRjsgaSsrKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmMtMzM0LVxcdFxcdGlmIChwcml2LVxcdTAwM2ViZWFjb24uYnNsb3RbaV0gPT0gTlVMTCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmM9MzY1PXZvaWQgYXRoOWtfaHRjX3NldF90c2ZhZGp1c3Qoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmMtMzgwLVxcdCAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jOjM4MTpcXHR0c2ZhZGp1c3QgPSBjdXJfY29uZi1cXHUwMDNlYmVhY29uX2ludGVydmFsICogYXZwLVxcdTAwM2Vic2xvdCAvIEFUSDlLX0hUQ19NQVhfQkNOX1ZJRjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYy0zODItXFx0YXZwLVxcdTAwM2V0c2ZhZGp1c3QgPSBjcHVfdG9fbGU2NChUVV9UT19VU0VDKHRzZmFkanVzdCkpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYz0zOTg9c3RhdGljIGNvbnN0IGNoYXIgYXRoOWtfaHRjX2dzdHJpbmdzX3N0YXRzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmMtNDE4LX07XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYzo0MTk6I2RlZmluZSBBVEg5S19IVENfU1NUQVRTX0xFTiBBUlJBWV9TSVpFKGF0aDlrX2h0Y19nc3RyaW5nc19zdGF0cylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9kZWJ1Zy5jLTQyMC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmM9NDMwPWludCBhdGg5a19odGNfZ2V0X2V0X3NzZXRfY291bnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9kZWJ1Zy5jLTQzMy1cXHRpZiAoc3NldCA9PSBFVEhfU1NfU1RBVFMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYzo0MzQ6XFx0XFx0cmV0dXJuIEFUSDlLX0hUQ19TU1RBVFNfTEVOO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmMtNDM1LVxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYz00NDg9dm9pZCBhdGg5a19odGNfZ2V0X2V0X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYy00NzMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYzo0NzQ6XFx0V0FSTl9PTihpICE9IEFUSDlLX0hUQ19TU1RBVFNfTEVOKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9kZWJ1Zy5jLTQ3NS19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmM9NjA2PXN0YXRpYyBpbnQgYXRoOWtfaW5pdF9wcml2KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2luaXQuYy02NzMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfaW5pdC5jOjY3NDpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVRIOUtfSFRDX01BWF9CQ05fVklGOyBpKyspXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfaW5pdC5jLTY3NS1cXHRcXHRwcml2LVxcdTAwM2ViZWFjb24uYnNsb3RbaV0gPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jPTE4ND12b2lkIGF0aDlrX2h0Y19yZXNldChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtMjMzLVxcdG1vZF90aW1lcihcXHUwMDI2cHJpdi1cXHUwMDNldHguY2xlYW51cF90aW1lcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM6MjM0OlxcdFxcdCAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQVRIOUtfSFRDX1RYX0NMRUFOVVBfSU5URVJWQUwpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtMjM1LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jPTI0MD1zdGF0aWMgaW50IGF0aDlrX2h0Y19zZXRfY2hhbm5lbChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtMzExLVxcdG1vZF90aW1lcihcXHUwMDI2cHJpdi1cXHUwMDNldHguY2xlYW51cF90aW1lcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM6MzEyOlxcdFxcdCAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQVRIOUtfSFRDX1RYX0NMRUFOVVBfSU5URVJWQUwpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtMzEzLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jPTM1MD1zdGF0aWMgaW50IGF0aDlrX2h0Y19hZGRfbW9uaXRvcl9pbnRlcmZhY2Uoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTM1Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM6MzU4OlxcdGlmICgocHJpdi1cXHUwMDNlbnZpZnMgXFx1MDAzZT0gQVRIOUtfSFRDX01BWF9WSUYpIHx8XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jOjM1OTpcXHQgICAgKHByaXYtXFx1MDAzZW5zdGF0aW9ucyBcXHUwMDNlPSBBVEg5S19IVENfTUFYX1NUQSkpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtMzYwLVxcdFxcdHJldCA9IC1FTk9CVUZTO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTM2NC1cXHRzdGFfaWR4ID0gZmZ6KHByaXYtXFx1MDAzZXN0YV9zbG90KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM6MzY1OlxcdGlmICgoc3RhX2lkeCBcXHUwMDNjIDApIHx8IChzdGFfaWR4IFxcdTAwM2UgQVRIOUtfSFRDX01BWF9TVEEpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTM2Ni1cXHRcXHRyZXQgPSAtRU5PQlVGUztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYz00NjY9c3RhdGljIGludCBhdGg5a19odGNfYWRkX3N0YXRpb24oc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTQ3Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM6NDc4OlxcdGlmIChwcml2LVxcdTAwM2Vuc3RhdGlvbnMgXFx1MDAzZT0gQVRIOUtfSFRDX01BWF9TVEEpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTQ3OS1cXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtNDgxLVxcdHN0YV9pZHggPSBmZnoocHJpdi1cXHUwMDNlc3RhX3Nsb3QpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYzo0ODI6XFx0aWYgKChzdGFfaWR4IFxcdTAwM2MgMCkgfHwgKHN0YV9pZHggXFx1MDAzZSBBVEg5S19IVENfTUFYX1NUQSkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTQ4My1cXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM9NzAyPXN0YXRpYyBpbnQgYXRoOWtfaHRjX3R4X2FnZ3Jfb3BlcihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtNzEzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYzo3MTQ6XFx0aWYgKHRpZCBcXHUwMDNlPSBBVEg5S19IVENfTUFYX1RJRClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtNzE1LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jPTkwNz1zdGF0aWMgaW50IGF0aDlrX2h0Y19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYy05NjAtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwcml2LVxcdTAwM2V0eC50eF9sb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM6OTYxOlxcdHByaXYtXFx1MDAzZXR4LmZsYWdzIFxcdTAwMjY9IH5BVEg5S19IVENfT1BfVFhfUVVFVUVTX1NUT1A7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTk2Mi1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2cHJpdi1cXHUwMDNldHgudHhfbG9jayk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtOTY2LVxcdG1vZF90aW1lcihcXHUwMDI2cHJpdi1cXHUwMDNldHguY2xlYW51cF90aW1lcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM6OTY3OlxcdFxcdCAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQVRIOUtfSFRDX1RYX0NMRUFOVVBfSU5URVJWQUwpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtOTY4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jPTE2NTg9c3RhdGljIGludCBhdGg5a19odGNfYW1wZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTE2ODgtXFx0Y2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfT1BFUkFUSU9OQUw6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jOjE2ODk6XFx0XFx0aWYgKHRpZCBcXHUwMDNlPSBBVEg5S19IVENfTUFYX1RJRCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYy0xNjkwLVxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM9MTg3ND1zdHJ1Y3QgaWVlZTgwMjExX29wcyBhdGg5a19odGNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTE5MDYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jOjE5MDc6I2lmZGVmIENPTkZJR19BVEg5S19IVENfREVCVUdGU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYy0xOTA4LVxcdC5nZXRfZXRfc3NldF9jb3VudCAgPSBhdGg5a19odGNfZ2V0X2V0X3NzZXRfY291bnQsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM9MjM9c3RhdGljIGNvbnN0IGludCBzdWJ0eXBlX3R4cV90b19od3FbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0yOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MzA6I2RlZmluZSBBVEg5S19IVENfSU5JVF9UWFEoc3VidHlwZSkgZG8ge1xcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMzEtXFx0XFx0cWkudHFpX3N1YnR5cGUgPSBzdWJ0eXBlX3R4cV90b19od3Fbc3VidHlwZV07XFx0XFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTU2PXZvaWQgYXRoOWtfaHRjX2NoZWNrX3N0b3BfcXVldWVzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01OS1cXHRwcml2LVxcdTAwM2V0eC5xdWV1ZWRfY250Kys7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjYwOlxcdGlmICgocHJpdi1cXHUwMDNldHgucXVldWVkX2NudCBcXHUwMDNlPSBBVEg5S19IVENfVFhfVEhSRVNIT0xEKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo2MTpcXHQgICAgIShwcml2LVxcdTAwM2V0eC5mbGFncyBcXHUwMDI2IEFUSDlLX0hUQ19PUF9UWF9RVUVVRVNfU1RPUCkpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NjI6XFx0XFx0cHJpdi1cXHUwMDNldHguZmxhZ3MgfD0gQVRIOUtfSFRDX09QX1RYX1FVRVVFU19TVE9QO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy02My1cXHRcXHRpZWVlODAyMTFfc3RvcF9xdWV1ZXMocHJpdi1cXHUwMDNlaHcpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTY4PXZvaWQgYXRoOWtfaHRjX2NoZWNrX3dha2VfcXVldWVzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy03MC1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNnByaXYtXFx1MDAzZXR4LnR4X2xvY2spO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo3MTpcXHRpZiAoKHByaXYtXFx1MDAzZXR4LnF1ZXVlZF9jbnQgXFx1MDAzYyBBVEg5S19IVENfVFhfVEhSRVNIT0xEKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo3MjpcXHQgICAgKHByaXYtXFx1MDAzZXR4LmZsYWdzIFxcdTAwMjYgQVRIOUtfSFRDX09QX1RYX1FVRVVFU19TVE9QKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo3MzpcXHRcXHRwcml2LVxcdTAwM2V0eC5mbGFncyBcXHUwMDI2PSB+QVRIOUtfSFRDX09QX1RYX1FVRVVFU19TVE9QO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy03NC1cXHRcXHRpZWVlODAyMTFfd2FrZV9xdWV1ZXMocHJpdi1cXHUwMDNlaHcpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTIxND1zdGF0aWMgdm9pZCBhdGg5a19odGNfdHhfbWdtdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMjQwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzoyNDE6XFx0dHhfY3RsLVxcdTAwM2V0eXBlID0gQVRIOUtfSFRDX01HTVQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTI0Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz0yNjA9c3RhdGljIHZvaWQgYXRoOWtfaHRjX3R4X2RhdGEoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTI5Mi1cXHRpZiAodHhfaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjI5MzpcXHRcXHR0eF9jdGwtXFx1MDAzZXR5cGUgPSBBVEg5S19IVENfQU1QRFU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjI5NDpcXHRcXHR0eF9oZHIuZGF0YV90eXBlID0gQVRIOUtfSFRDX0FNUERVO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0yOTUtXFx0fSBlbHNlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6Mjk2OlxcdFxcdHR4X2N0bC1cXHUwMDNldHlwZSA9IEFUSDlLX0hUQ19OT1JNQUw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjI5NzpcXHRcXHR0eF9oZHIuZGF0YV90eXBlID0gQVRIOUtfSFRDX05PUk1BTDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMjk4LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0zMTItXFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2UgcHJpdi1cXHUwMDNlaHctXFx1MDAzZXdpcGh5LVxcdTAwM2VydHNfdGhyZXNob2xkKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzozMTM6XFx0XFx0XFx0ZmxhZ3MgfD0gQVRIOUtfSFRDX1RYX1JUU0NUUztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMzE0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0zMTUtXFx0LyogQ1RTLXRvLXNlbGYgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MzE2OlxcdGlmICghKGZsYWdzIFxcdTAwMjYgQVRIOUtfSFRDX1RYX1JUU0NUUykgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMzE3LVxcdCAgICAodmlmIFxcdTAwMjZcXHUwMDI2IHZpZi1cXHUwMDNlYnNzX2NvbmYudXNlX2N0c19wcm90KSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MzE4OlxcdFxcdGZsYWdzIHw9IEFUSDlLX0hUQ19UWF9DVFNPTkxZO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0zMTktXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM9MzkyPXN0YXRpYyBpbmxpbmUgYm9vbCBfX2F0aDlrX2h0Y19jaGVja190eF9hZ2dyKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0zOTctXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwcml2LVxcdTAwM2V0eC50eF9sb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6Mzk4OlxcdGlmICgodGlkIFxcdTAwM2MgQVRIOUtfSFRDX01BWF9USUQpIFxcdTAwMjZcXHUwMDI2IChpc3RhLVxcdTAwM2V0aWRfc3RhdGVbdGlkXSA9PSBBR0dSX1NUT1ApKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0zOTktXFx0XFx0cmV0ID0gdHJ1ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz00NDU9c3RhdGljIHZvaWQgYXRoOWtfaHRjX3R4X3Byb2Nlc3Moc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTQ3OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NDc5OlxcdGlmICh0eHMtXFx1MDAzZXRzX2ZsYWdzIFxcdTAwMjYgQVRIOUtfSFRDX1RYU1RBVF9BQ0spIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNDgwLVxcdFxcdHR4X2luZm8tXFx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy00ODQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjQ4NTpcXHRpZiAodHhzLVxcdTAwM2V0c19mbGFncyBcXHUwMDI2IEFUSDlLX0hUQ19UWFNUQVRfRklMVClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNDg2LVxcdFxcdHR4X2luZm8tXFx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX1RYX0ZJTFRFUkVEO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy00ODctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjQ4ODpcXHRpZiAodHhzLVxcdTAwM2V0c19mbGFncyBcXHUwMDI2IEFUSDlLX0hUQ19UWFNUQVRfUlRDX0NUUylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNDg5LVxcdFxcdHJhdGUtXFx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy00OTEtXFx0cmF0ZS1cXHUwMDNlY291bnQgPSAxO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo0OTI6XFx0cmF0ZS1cXHUwMDNlaWR4ID0gTVModHhzLVxcdTAwM2V0c19yYXRlLCBBVEg5S19IVENfVFhTVEFUX1JBVEUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy00OTMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjQ5NDpcXHRpZiAodHhzLVxcdTAwM2V0c19mbGFncyBcXHUwMDI2IEFUSDlLX0hUQ19UWFNUQVRfTUNTKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTQ5NS1cXHRcXHRyYXRlLVxcdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfTUNTO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy00OTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjQ5NzpcXHRcXHRpZiAodHhzLVxcdTAwM2V0c19mbGFncyBcXHUwMDI2IEFUSDlLX0hUQ19UWFNUQVRfQ1c0MClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNDk4LVxcdFxcdFxcdHJhdGUtXFx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEg7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjQ5OTpcXHRcXHRpZiAodHhzLVxcdTAwM2V0c19mbGFncyBcXHUwMDI2IEFUSDlLX0hUQ19UWFNUQVRfU0dJKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01MDAtXFx0XFx0XFx0cmF0ZS1cXHUwMDNlZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTUzOT12b2lkIGF0aDlrX2h0Y190eF9kcmFpbihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNTQzLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2cHJpdi1cXHUwMDNldHgudHhfbG9jayk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjU0NDpcXHRwcml2LVxcdTAwM2V0eC5mbGFncyB8PSBBVEg5S19IVENfT1BfVFhfRFJBSU47XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTU0NS1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2cHJpdi1cXHUwMDNldHgudHhfbG9jayk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNTczLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2cHJpdi1cXHUwMDNldHgudHhfbG9jayk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjU3NDpcXHRwcml2LVxcdTAwM2V0eC5mbGFncyBcXHUwMDI2PSB+QVRIOUtfSFRDX09QX1RYX0RSQUlOO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01NzUtXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnByaXYtXFx1MDAzZXR4LnR4X2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTU3OD12b2lkIGF0aDlrX3R4X2ZhaWxlZF90YXNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01ODItXFx0c3Bpbl9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2V0eC50eF9sb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NTgzOlxcdGlmIChwcml2LVxcdTAwM2V0eC5mbGFncyBcXHUwMDI2IEFUSDlLX0hUQ19PUF9UWF9EUkFJTikge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01ODQtXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXR4LnR4X2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTYxOD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYqIGF0aDlrX2h0Y190eF9nZXRfcGFja2V0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy02MjQtXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NjI1OlxcdHU4IGVwaWQgPSBNUyh0eHMtXFx1MDAzZXRzX3JhdGUsIEFUSDlLX0hUQ19UWFNUQVRfRVBJRCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTYyNi1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz03MTY9c3RhdGljIGlubGluZSBib29sIGNoZWNrX3BhY2tldChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNzI0LVxcdFxcdCAgICAgICB0eF9jdGwtXFx1MDAzZXRpbWVzdGFtcCArXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjcyNTpcXHRcXHQgICAgICAgbXNlY3NfdG9famlmZmllcyhBVEg5S19IVENfVFhfVElNRU9VVF9JTlRFUlZBTCkpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTcyNi1cXHRcXHRhdGhfZGJnKGNvbW1vbiwgWE1JVCwgXFxcIkRyb3BwaW5nIGEgcGFja2V0IGR1ZSB0byBUWCB0aW1lb3V0XFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz03NjE9dm9pZCBhdGg5a19odGNfdHhfY2xlYW51cF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy03NzYtXFx0XFx0XFx0XFx0ZXZlbnQtXFx1MDAzZXR4cy5jb29raWUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjc3NzpcXHRcXHRcXHRcXHRNUyhldmVudC1cXHUwMDNldHhzLnRzX3JhdGUsIEFUSDlLX0hUQ19UWFNUQVRfRVBJRCkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy03NzgtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNzg0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo3ODU6XFx0XFx0aWYgKCsrZXZlbnQtXFx1MDAzZWNvdW50IFxcdTAwM2U9IEFUSDlLX0hUQ19UWF9USU1FT1VUX0NPVU5UKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTc4Ni1cXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2ZXZlbnQtXFx1MDAzZWxpc3QpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTgwNS1cXHRtb2RfdGltZXIoXFx1MDAyNnByaXYtXFx1MDAzZXR4LmNsZWFudXBfdGltZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjgwNjpcXHRcXHQgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEFUSDlLX0hUQ19UWF9DTEVBTlVQX0lOVEVSVkFMKSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTgwNy19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM9ODI3PWJvb2wgYXRoOWtfaHRjX3R4cV9zZXR1cChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIGludCBzdWJ0eXBlKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTgzNC1cXHRtZW1zZXQoXFx1MDAyNnFpLCAwLCBzaXplb2YocWkpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6ODM1OlxcdEFUSDlLX0hUQ19JTklUX1RYUShzdWJ0eXBlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtODM2LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTg1Mj1pbnQgYXRoOWtfaHRjX2NhYnFfc2V0dXAoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTg1Ni1cXHRtZW1zZXQoXFx1MDAyNnFpLCAwLCBzaXplb2YocWkpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6ODU3OlxcdEFUSDlLX0hUQ19JTklUX1RYUSgwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtODU4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTEyMjU9aW50IGF0aDlrX3J4X2luaXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEyMzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjEyMzI6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFUSDlLX0hUQ19SWEJVRjsgaSsrKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEyMzMtXFx0XFx0c3RydWN0IGF0aDlrX2h0Y19yeGJ1ZiAqcnhidWYgPVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5jPTEzOD12b2lkIGF0aDlrX3dtaV9ldmVudF90YXNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93bWkuYy0xNzgtXFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwcml2LVxcdTAwM2V0eC50eF9sb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmM6MTc5OlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2V0eC5mbGFncyBcXHUwMDI2IEFUSDlLX0hUQ19PUF9UWF9EUkFJTikge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93bWkuYy0xODAtXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnByaXYtXFx1MDAzZXR4LnR4X2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5oPTM5PXN0cnVjdCB3bWlfZXZlbnRfc3diYSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmgtNTAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5oOjUxOiNkZWZpbmUgQVRIOUtfSFRDX1RYU1RBVF9BQ0sgICAgICAgIEJJVCgwKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93bWkuaDo1MjojZGVmaW5lIEFUSDlLX0hUQ19UWFNUQVRfRklMVCAgICAgICBCSVQoMSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmg6NTM6I2RlZmluZSBBVEg5S19IVENfVFhTVEFUX1JUQ19DVFMgICAgQklUKDIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5oOjU0OiNkZWZpbmUgQVRIOUtfSFRDX1RYU1RBVF9NQ1MgICAgICAgIEJJVCgzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93bWkuaDo1NTojZGVmaW5lIEFUSDlLX0hUQ19UWFNUQVRfQ1c0MCAgICAgICBCSVQoNClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmg6NTY6I2RlZmluZSBBVEg5S19IVENfVFhTVEFUX1NHSSAgICAgICAgQklUKDUpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5oLTU3LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5oLTYzLSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93bWkuaDo2NDojZGVmaW5lIEFUSDlLX0hUQ19UWFNUQVRfUkFURSAgICAgICAweDBmXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5oOjY1OiNkZWZpbmUgQVRIOUtfSFRDX1RYU1RBVF9SQVRFX1MgICAgIDBcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmgtNjYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5oOjY3OiNkZWZpbmUgQVRIOUtfSFRDX1RYU1RBVF9FUElEICAgICAgIDB4ZjBcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmg6Njg6I2RlZmluZSBBVEg5S19IVENfVFhTVEFUX0VQSURfUyAgICAgNFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93bWkuaC02OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDE6NTMuMTU5NTE5MDA2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI3ODc0NzgxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBBdGhlcm9zIENvZGUqKlxuXG5Pa2F5LCB0aW1lIHRvIHJlYWxseSBkaWcgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3BlY2lmaWMgc2VjdGlvbiBvZiB0aGUgQXRoZXJvcyB3aXJlbGVzcyBkcml2ZXIuIEknbSBmb2N1c2luZyBvbiBgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW5gLCBgYXRoOWtfcnhfcHJlcGFyZWAsIGFuZCBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAsIGFuZCB0aGUgY29kZSBpbW1lZGlhdGVseSBhcm91bmQgdGhlbSwgYWxsIHdpdGhpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jYC4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGRyaXZlciBoYW5kbGVzIHNwZWN0cmFsIGFuYWx5c2lzIHNhbXBsZSBsZW5ndGgsIGhvdyBpdCBwcmVwYXJlcyBmb3IgcmVjZWl2ZSBvcGVyYXRpb25zLCBhbmQgcHJlY2lzZWx5IGhvdyB0aGUgRkZUIHByb2Nlc3NpbmcgaXMgaGFwcGVuaW5nLiBUaGlzIGxpa2VseSByZWxhdGVzIHRvIHNpZ25hbCBwcm9jZXNzaW5nIGFuZCBkYXRhIGFjcXVpc2l0aW9uLCBhbmQgSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgbG93LWxldmVsIGZ1bmN0aW9ucyBpbnRlZ3JhdGUgd2l0aGluIHRoZSBlbnRpcmUgcmVjZWl2ZSBwYXRoLiBLbm93aW5nIHRoaXMgaXMgY3JpdGljYWwgdG8gcGVyZm9ybWFuY2UgYW5kLCBwb3RlbnRpYWxseSwgcGlucG9pbnRpbmcgYW55IG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLCBlc3BlY2lhbGx5IGFyb3VuZCBkYXRhIGZsb3cgYW5kIGludGVycnVwdCBoYW5kbGluZy4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cgYW5kIGlkZW50aWZ5IHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGhhcmR3YXJlIHJlZ2lzdGVycy4gTXkgZ29hbCBpcyBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlY2VpdmUgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MjAsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MTo1NS40MzgyNzA2NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTY1LFxuICBcIkxpbmVDb3VudFwiOiAxMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk2NTpcXHRcXG4gOTY2OlxcdFxcdHJ4X3N0YXRzLVxcdTAwM2Vyc19pc2FnZ3JcXHQ9IHJ4c3RhdHVzLVxcdTAwM2Vyc19pc2FnZ3I7XFxuIDk2NzpcXHRcXHRyeF9zdGF0cy1cXHUwMDNlcnNfbW9yZWFnZ3JcXHQ9IHJ4c3RhdHVzLVxcdTAwM2Vyc19tb3JlYWdncjtcXG4gOTY4OlxcdFxcdHJ4X3N0YXRzLVxcdTAwM2Vyc19udW1fZGVsaW1zXFx0PSByeHN0YXR1cy1cXHUwMDNlcnNfbnVtX2RlbGltcztcXG4gOTY5OlxcdFxcdGNvbnZlcnRfaHRjX2ZsYWcocnhfc3RhdHMsIHJ4c3RhdHVzKTtcXG4gOTcwOlxcdH1cXG4gOTcxOlxcdFxcbiA5NzI6XFx0LypcXG4gOTczOlxcdCAqIFRoZSBmaXJtd2FyZSByZXBvcnRzIGEgZnJhbWUgdGhhdCBmYWlsZWQgaXRzIENSQyBhcyBhIENSQyBlcnJvciBldmVuIHdoZW5cXG4gOTc0OlxcdCAqIHRoZSBQSFkgZXJyb3IgYml0IGlzIHNldCBhcyB3ZWxsLCBzbyB1bmRlciBpbnRlcmZlcmVuY2Ugc3BlY3RyYWwgc2FtcGxlc1xcbiA5NzU6XFx0ICogcmVhY2ggdGhlIGhvc3QgYXMgQ1JDIGVycm9ycy4gQSBzYW1wbGUgaXMgcmVjb2duaXNhYmxlIGJ5IGl0cyBzaXplOiB0aGVcXG4gOTc2OlxcdCAqIEZGVCByZXBvcnQgbGVuZ3RoIGZvciB0aGUgY2hhbm5lbCB3aWR0aCwgcGx1cyBvciBtaW51cyB0aGUgdHdvIGJ5dGVzIHRoZVxcbiA5Nzc6XFx0ICogTUFDIG1heSBhZGQgb3IgZHJvcC5cXG4gOTc4OlxcdCAqL1xcbiA5Nzk6XFx0c3RhdGljIGJvb2wgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW4oc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbiA5ODA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB1MTYgbGVuKVxcbiA5ODE6XFx0e1xcbiA5ODI6XFx0XFx0ZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFuX3R5cGU7XFxuIDk4MzpcXHRcXHR1MTYgZmZ0X2xlbjtcXG4gOTg0OlxcdFxcbiA5ODU6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXNwZWNfcHJpdi5zcGVjdHJhbF9tb2RlID09IFNQRUNUUkFMX0RJU0FCTEVEKVxcbiA5ODY6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA5ODc6XFx0XFxuIDk4ODpcXHRcXHRjaGFuX3R5cGUgPSBjZmc4MDIxMV9nZXRfY2hhbmRlZl90eXBlKFxcdTAwMjZwcml2LVxcdTAwM2Vody1cXHUwMDNlY29uZi5jaGFuZGVmKTtcXG4gOTg5OlxcdFxcdGlmIChjaGFuX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUyB8fFxcbiA5OTA6XFx0XFx0ICAgIGNoYW5fdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0MFBMVVMpXFxuIDk5MTpcXHRcXHRcXHRmZnRfbGVuID0gU1BFQ1RSQUxfSFQyMF80MF9UT1RBTF9EQVRBX0xFTjtcXG4gOTkyOlxcdFxcdGVsc2VcXG4gOTkzOlxcdFxcdFxcdGZmdF9sZW4gPSBTUEVDVFJBTF9IVDIwX1RPVEFMX0RBVEFfTEVOO1xcbiA5OTQ6XFx0XFxuIDk5NTpcXHRcXHRyZXR1cm4gbGVuICsgMSBcXHUwMDNlPSBmZnRfbGVuIFxcdTAwMjZcXHUwMDI2IGxlbiBcXHUwMDNjPSBmZnRfbGVuICsgMjtcXG4gOTk2OlxcdH1cXG4gOTk3OlxcdFxcbiA5OTg6XFx0c3RhdGljIGJvb2wgYXRoOWtfcnhfcHJlcGFyZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuIDk5OTpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBhdGg5a19odGNfcnhidWYgKnJ4YnVmLFxcbjEwMDA6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKVxcbjEwMDE6XFx0XFxuMTAwMjpcXHR7XFxuMTAwMzpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyO1xcbjEwMDQ6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwcml2LVxcdTAwM2VodztcXG4xMDA1OlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSByeGJ1Zi1cXHUwMDNlc2tiO1xcbjEwMDY6XFx0XFx0c3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihwcml2LVxcdTAwM2VhaCk7XFxuMTAwNzpcXHRcXHRzdHJ1Y3QgYXRoX2h3ICphaCA9IGNvbW1vbi1cXHUwMDNlYWg7XFxuMTAwODpcXHRcXHRzdHJ1Y3QgYXRoX2h0Y19yeF9zdGF0dXMgKnJ4c3RhdHVzO1xcbjEwMDk6XFx0XFx0c3RydWN0IGF0aF9yeF9zdGF0dXMgcnhfc3RhdHM7XFxuMTAxMDpcXHRcXHRib29sIGRlY3J5cHRfZXJyb3IgPSBmYWxzZTtcXG4xMDExOlxcdFxcdHUxNiByc19kYXRhbGVuO1xcbjEwMTI6XFx0XFx0Ym9vbCBpc19waHllcnI7XFxuMTAxMzpcXHRcXG4xMDE0OlxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIEhUQ19SWF9GUkFNRV9IRUFERVJfU0laRSkge1xcbjEwMTU6XFx0XFx0XFx0YXRoX2Vycihjb21tb24sIFxcXCJDb3JydXB0ZWQgUlggZnJhbWUsIGRyb3BwaW5nIChsZW46ICVkKVxcXFxuXFxcIixcXG4xMDE2OlxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlbGVuKTtcXG4xMDE3OlxcdFxcdFxcdGdvdG8gcnhfbmV4dDtcXG4xMDE4OlxcdFxcdH1cXG4xMDE5OlxcdFxcbjEwMjA6XFx0XFx0cnhzdGF0dXMgPSAoc3RydWN0IGF0aF9odGNfcnhfc3RhdHVzICopc2tiLVxcdTAwM2VkYXRhO1xcbjEwMjE6XFx0XFxuMTAyMjpcXHRcXHRyc19kYXRhbGVuID0gYmUxNl90b19jcHUocnhzdGF0dXMtXFx1MDAzZXJzX2RhdGFsZW4pO1xcbjEwMjM6XFx0XFx0aWYgKHVubGlrZWx5KHJzX2RhdGFsZW4gLVxcbjEwMjQ6XFx0XFx0ICAgIChza2ItXFx1MDAzZWxlbiAtIEhUQ19SWF9GUkFNRV9IRUFERVJfU0laRSkgIT0gMCkpIHtcXG4xMDI1OlxcdFxcdFxcdGF0aF9lcnIoY29tbW9uLFxcbjEwMjY6XFx0XFx0XFx0XFx0XFxcIkNvcnJ1cHRlZCBSWCBkYXRhIGxlbiwgZHJvcHBpbmcgKGRsZW46ICVkLCBza2JsZW46ICVkKVxcXFxuXFxcIixcXG4xMDI3OlxcdFxcdFxcdFxcdHJzX2RhdGFsZW4sIHNrYi1cXHUwMDNlbGVuKTtcXG4xMDI4OlxcdFxcdFxcdGdvdG8gcnhfbmV4dDtcXG4xMDI5OlxcdFxcdH1cXG4xMDMwOlxcdFxcbjEwMzE6XFx0XFx0aXNfcGh5ZXJyID0gcnhzdGF0dXMtXFx1MDAzZXJzX3N0YXR1cyBcXHUwMDI2IEFUSDlLX1JYRVJSX1BIWTtcXG4xMDMyOlxcdFxcdC8qXFxuMTAzMzpcXHRcXHQgKiBEaXNjYXJkIHplcm8tbGVuZ3RoIHBhY2tldHMgYW5kIHBhY2tldHMgc21hbGxlciB0aGFuIGFuIEFDS1xcbjEwMzQ6XFx0XFx0ICogd2hpY2ggYXJlIG5vdCBQSFlfRVJST1IgKHNob3J0IHJhZGFyIHB1bHNlcyBoYXZlIGEgbGVuZ3RoIG9mIDMpXFxuMTAzNTpcXHRcXHQgKi9cXG4xMDM2OlxcdFxcdGlmICh1bmxpa2VseSghcnNfZGF0YWxlbiB8fCAocnNfZGF0YWxlbiBcXHUwMDNjIDEwIFxcdTAwMjZcXHUwMDI2ICFpc19waHllcnIpKSkge1xcbjEwMzc6XFx0XFx0XFx0YXRoX2RiZyhjb21tb24sIEFOWSxcXG4xMDM4OlxcdFxcdFxcdFxcdFxcXCJTaG9ydCBSWCBkYXRhIGxlbiwgZHJvcHBpbmcgKGRsZW46ICVkKVxcXFxuXFxcIixcXG4xMDM5OlxcdFxcdFxcdFxcdHJzX2RhdGFsZW4pO1xcbjEwNDA6XFx0XFx0XFx0Z290byByeF9uZXh0O1xcbjEwNDE6XFx0XFx0fVxcbjEwNDI6XFx0XFxuMTA0MzpcXHRcXHRpZiAocnhzdGF0dXMtXFx1MDAzZXJzX2tleWl4IFxcdTAwM2U9IEFUSF9LRVlNQVggXFx1MDAyNlxcdTAwMjZcXG4xMDQ0OlxcdFxcdCAgICByeHN0YXR1cy1cXHUwMDNlcnNfa2V5aXggIT0gQVRIOUtfUlhLRVlJWF9JTlZBTElEKSB7XFxuMTA0NTpcXHRcXHRcXHRhdGhfZGJnKGNvbW1vbiwgQU5ZLFxcbjEwNDY6XFx0XFx0XFx0XFx0XFxcIkludmFsaWQga2V5aXgsIGRyb3BwaW5nIChrZXlpeDogJWQpXFxcXG5cXFwiLFxcbjEwNDc6XFx0XFx0XFx0XFx0cnhzdGF0dXMtXFx1MDAzZXJzX2tleWl4KTtcXG4xMDQ4OlxcdFxcdFxcdGdvdG8gcnhfbmV4dDtcXG4xMDQ5OlxcdFxcdH1cXG4xMDUwOlxcdFxcbjEwNTE6XFx0XFx0LyogR2V0IHRoZSBSWCBzdGF0dXMgaW5mb3JtYXRpb24gKi9cXG4xMDUyOlxcdFxcbjEwNTM6XFx0XFx0bWVtc2V0KHJ4X3N0YXR1cywgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzKSk7XFxuMTA1NDpcXHRcXG4xMDU1OlxcdFxcdC8qIENvcHkgZXZlcnl0aGluZyBmcm9tIGF0aF9odGNfcnhfc3RhdHVzIChIVENfUlhfRlJBTUVfSEVBREVSKS5cXG4xMDU2OlxcdFxcdCAqIEFmdGVyIHRoaXMsIHdlIGNhbiBkcm9wIHRoaXMgcGFydCBvZiBza2IuICovXFxuMTA1NzpcXHRcXHRyeF9zdGF0dXNfaHRjX3RvX2F0aChcXHUwMDI2cnhfc3RhdHMsIHJ4c3RhdHVzKTtcXG4xMDU4OlxcdFxcdGF0aDlrX2h0Y19lcnJfc3RhdF9yeChwcml2LCBcXHUwMDI2cnhfc3RhdHMpO1xcbjEwNTk6XFx0XFx0cnhfc3RhdHVzLVxcdTAwM2VtYWN0aW1lID0gYmU2NF90b19jcHUocnhzdGF0dXMtXFx1MDAzZXJzX3RzdGFtcCk7XFxuMTA2MDpcXHRcXHRza2JfcHVsbChza2IsIEhUQ19SWF9GUkFNRV9IRUFERVJfU0laRSk7XFxuMTA2MTpcXHRcXG4xMDYyOlxcdFxcdC8qXFxuMTA2MzpcXHRcXHQgKiBldmVyeXRoaW5nIGJ1dCB0aGUgcmF0ZSBpcyBjaGVja2VkIGhlcmUsIHRoZSByYXRlIGNoZWNrIGlzIGRvbmVcXG4xMDY0OlxcdFxcdCAqIHNlcGFyYXRlbHkgdG8gYXZvaWQgZG9pbmcgdHdvIGxvb2t1cHMgZm9yIGEgcmF0ZSBmb3IgZWFjaCBmcmFtZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDE6NTUuNDM4NDE0MzZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzI0NDMxODQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgZGV2ZWxvcG1lbnQgYW5kIHNwZWNpZmljYWxseSB3b3JraW5nIHdpdGggdGhlIGF0aDlrIHdpcmVsZXNzIGRyaXZlcjpcblxuKipEaXZpbmcgaW50byBgYXRoOWtfcnhfcHJlcGFyZWAqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoZSBgYXRoOWtfcnhfcHJlcGFyZWAgZnVuY3Rpb24uIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCBpbiB0aGUgcmVjZWl2ZSBwYXRoIGZvciB0aGlzIGRyaXZlciwgc28gYSBkZXRhaWxlZCB1bmRlcnN0YW5kaW5nIGlzIGVzc2VudGlhbC4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSBkaXNzZWN0IGl0cyBsb2dpYywgc3RlcCBieSBzdGVwLiBJJ20gYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSwgYnV0IHNwZWNpZmljcyBvZiB0aGlzIGZ1bmN0aW9uIGFyZSBjcnVjaWFsIGZvciB3aGF0ZXZlciBkZWJ1Z2dpbmcgb3Igb3B0aW1pemF0aW9uIHRhc2sgSSdtIGN1cnJlbnRseSBmb2N1c2VkIG9uLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NTYsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQxOjU4LjE2Mjg0OTEwMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA2NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA2NTpcXHRcXHQgKi9cXG4xMDY2OlxcdFxcdGhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cXHUwMDNlZGF0YTtcXG4xMDY3OlxcdFxcbjEwNjg6XFx0XFx0LypcXG4xMDY5OlxcdFxcdCAqIFByb2Nlc3MgUEhZIGVycm9ycyBhbmQgcmV0dXJuIHNvIHRoYXQgdGhlIHBhY2tldFxcbjEwNzA6XFx0XFx0ICogY2FuIGJlIGRyb3BwZWQuXFxuMTA3MTpcXHRcXHQgKi9cXG4xMDcyOlxcdFxcdGlmICh1bmxpa2VseShpc19waHllcnIpKSB7XFxuMTA3MzpcXHRcXHRcXHQvKiBUT0RPOiBOb3QgdXNpbmcgREZTIHByb2Nlc3Npbmcgbm93LiAqL1xcbjEwNzQ6XFx0XFx0XFx0aWYgKGF0aF9jbW5fcHJvY2Vzc19mZnQoXFx1MDAyNnByaXYtXFx1MDAzZXNwZWNfcHJpdiwgaGRyLFxcbjEwNzU6XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZyeF9zdGF0cywgcnhfc3RhdHVzLVxcdTAwM2VtYWN0aW1lKSkge1xcbjEwNzY6XFx0XFx0XFx0XFx0LyogVE9ETzogQ29kZSB0byBjb2xsZWN0IHNwZWN0cmFsIHNjYW4gc3RhdGlzdGljcyAqL1xcbjEwNzc6XFx0XFx0XFx0fVxcbjEwNzg6XFx0XFx0XFx0Z290byByeF9uZXh0O1xcbjEwNzk6XFx0XFx0fVxcbjEwODA6XFx0XFxuMTA4MTpcXHRcXHQvKlxcbjEwODI6XFx0XFx0ICogTGV0IHRoZSBGRlQgcGFyc2VyIGRlY2lkZSB3aGV0aGVyIGEgQ1JDIGVycm9yIG9mIHNhbXBsZSBzaXplIGlzIGFcXG4xMDgzOlxcdFxcdCAqIHNhbXBsZTsgaXQgdmFsaWRhdGVzIHRoZSBjb250ZW50cyBhbmQgcmV0dXJucyAwIGZvciBhbnl0aGluZyBlbHNlLlxcbjEwODQ6XFx0XFx0ICovXFxuMTA4NTpcXHRcXHRpZiAodW5saWtlbHkocnhfc3RhdHMucnNfc3RhdHVzIFxcdTAwMjYgQVRIOUtfUlhFUlJfQ1JDKSBcXHUwMDI2XFx1MDAyNlxcbjEwODY6XFx0XFx0ICAgIGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKHByaXYsIHJzX2RhdGFsZW4pKSB7XFxuMTA4NzpcXHRcXHRcXHRyeF9zdGF0cy5yc19waHllcnIgPSBBVEg5S19QSFlFUlJfUkFEQVI7XFxuMTA4ODpcXHRcXHRcXHRpZiAoYXRoX2Ntbl9wcm9jZXNzX2ZmdChcXHUwMDI2cHJpdi1cXHUwMDNlc3BlY19wcml2LCBoZHIsIFxcdTAwMjZyeF9zdGF0cyxcXG4xMDg5OlxcdFxcdFxcdFxcdFxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlbWFjdGltZSkpXFxuMTA5MDpcXHRcXHRcXHRcXHRnb3RvIHJ4X25leHQ7XFxuMTA5MTpcXHRcXHR9XFxuMTA5MjpcXHRcXG4xMDkzOlxcdFxcdGlmICghYXRoOWtfY21uX3J4X2FjY2VwdChjb21tb24sIGhkciwgcnhfc3RhdHVzLCBcXHUwMDI2cnhfc3RhdHMsXFxuMTA5NDpcXHRcXHRcXHRcXHRcXHUwMDI2ZGVjcnlwdF9lcnJvciwgcHJpdi1cXHUwMDNlcnhmaWx0ZXIpKVxcbjEwOTU6XFx0XFx0XFx0Z290byByeF9uZXh0O1xcbjEwOTY6XFx0XFxuMTA5NzpcXHRcXHRhdGg5a19jbW5fcnhfc2tiX3Bvc3Rwcm9jZXNzKGNvbW1vbiwgc2tiLCBcXHUwMDI2cnhfc3RhdHMsXFxuMTA5ODpcXHRcXHRcXHRcXHRcXHQgICAgIHJ4X3N0YXR1cywgZGVjcnlwdF9lcnJvcik7XFxuMTA5OTpcXHRcXG4xMTAwOlxcdFxcdGlmIChhdGg5a19jbW5fcHJvY2Vzc19yYXRlKGNvbW1vbiwgaHcsIFxcdTAwMjZyeF9zdGF0cywgcnhfc3RhdHVzKSlcXG4xMTAxOlxcdFxcdFxcdGdvdG8gcnhfbmV4dDtcXG4xMTAyOlxcdFxcbjExMDM6XFx0XFx0cnhfc3RhdHMuaXNfbXliZWFjb24gPSBhdGhfaXNfbXliZWFjb24oY29tbW9uLCBoZHIpO1xcbjExMDQ6XFx0XFx0YXRoOWtfY21uX3Byb2Nlc3NfcnNzaShjb21tb24sIGh3LCBcXHUwMDI2cnhfc3RhdHMsIHJ4X3N0YXR1cyk7XFxuMTEwNTpcXHRcXG4xMTA2OlxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlYmFuZCA9IGFoLVxcdTAwM2VjdXJjaGFuLVxcdTAwM2VjaGFuLVxcdTAwM2ViYW5kO1xcbjExMDc6XFx0XFx0cnhfc3RhdHVzLVxcdTAwM2VmcmVxID0gYWgtXFx1MDAzZWN1cmNoYW4tXFx1MDAzZWNoYW4tXFx1MDAzZWNlbnRlcl9mcmVxO1xcbjExMDg6XFx0XFx0cnhfc3RhdHVzLVxcdTAwM2VhbnRlbm5hID0gcnhfc3RhdHMucnNfYW50ZW5uYTtcXG4xMTA5OlxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlZmxhZyB8PSBSWF9GTEFHX01BQ1RJTUVfRU5EO1xcbjExMTA6XFx0XFxuMTExMTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMTEyOlxcdHJ4X25leHQ6XFxuMTExMzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTExNDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQxOjU4LjE2Mjk4MDcxM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzOTMwNjMxOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBhdGg5a19odGNgIFJYIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGBhdGg5a19odGNgIGRyaXZlcidzIHJlY2VpdmUgcGF0aCByaWdodCBub3cuIFNwZWNpZmljYWxseSwgSSBrbm93IHRoYXQgYGF0aDlrX3J4X3ByZXBhcmVgIGlzIGEga2V5IGZ1bmN0aW9uIGluIHRoYXQgcHJvY2Vzcy4gVGhlIHF1ZXN0aW9uIGlzLCB3aGVyZSBkb2VzIGl0IGZpdCBpbiB0aGUgZ3JhbmQgc2NoZW1lPyBXaGVyZSBpcyBpdCBhY3R1YWxseSAqY2FsbGVkKiBmcm9tIHdpdGhpbiB0aGF0IFJYIHBhdGg/IFRpbWUgdG8gdHJhY2UgaXRzIHVzYWdlIHdpdGhpbiB0aGUgY29kZWJhc2UgYW5kIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGNvbnRleHQgdG8gdHJ1bHkgZ3Jhc3AgaXRzIGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzA5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MjowMC41NTYwNDg3NThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MzI2NzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDlrX3J4X3ByZXBhcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz05Nzk9c3RhdGljIGJvb2wgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW4oc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTk5Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6OTk4OnN0YXRpYyBib29sIGF0aDlrX3J4X3ByZXBhcmUoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy05OTktXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYXRoOWtfaHRjX3J4YnVmICpyeGJ1ZixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz0xMTE5PXZvaWQgYXRoOWtfcnhfdGFza2xldChzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTE0NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MTE0NTpcXHRcXHRpZiAoIWF0aDlrX3J4X3ByZXBhcmUocHJpdiwgcnhidWYsIFxcdTAwMjZyeF9zdGF0dXMpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTExNDYtXFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkocnhidWYtXFx1MDAzZXNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQyOjAwLjYxMjM4MzMyNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDMwMDY4Njc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBvbiBGdXp6aW5nIHRoZSBhdGg5a19odGMgRHJpdmVyIHdpdGggc3l6a2FsbGVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgYGF0aDlrX3J4X3Rhc2tsZXRgIGlzIGNhbGxpbmcgYGF0aDlrX3J4X3ByZXBhcmVgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQgdGFza2xldCBmaXJlcyBvZmYgd2hlbiBVU0IgcGFja2V0cyBjb21lIGluLiBUaGF0J3MgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcywgY2FuIHN5emthbGxlciBldmVuIHJlYWNoIGBhdGg5a19odGNgPyBEb2VzIHN5emthbGxlciBrbm93IGFib3V0IFVTQiB3aXJlbGVzcywgb3IgY2FuIGl0IHBva2UgYXJvdW5kIFVTQiBkZXZpY2VzIGF0IGFsbD9cblxuQWhhISBTeXprYWxsZXIgdXNlcyBgc3l6X3VzYl9jb25uZWN0YCBmb3IgVVNCIGZ1enppbmcsIHNwZWNpZmljYWxseSB3aXRoIHJhdy1nYWRnZXQsIGR1bW15X2hjZCwgb3IgdXNiaXAuIFRoYXQgY2xpY2tzLiBVU0IgZHJpdmVycyBpbiBMaW51eCwgKmVzcGVjaWFsbHkqIHdpcmVsZXNzIG9uZXMgbGlrZSBgYXRoOWtfaHRjYCwgYHJ0bDgxODdgLCBldGMuLCBhcmUgcHJpbWUgdGFyZ2V0cyBmb3IgVVNCIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIFRoZXkncmUgYmFzaWNhbGx5IGJyZWFkLWFuZC1idXR0ZXIuXG5cbk5vdywgaG9sZCBvbi4gR290dGEgbWFrZSBzdXJlIHdlJ3JlIG5vdCB3YXN0aW5nIHRpbWUuIFNlY3Rpb24gMSBhbmQgMiBvZiB0aGlzIHByb21wdCBhcmUgY2xlYXIgb24gcmVhY2hhYmlsaXR5LiBcIlJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFLlwiIElmIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlLCB3ZSdyZSBkb25lLiBObyBmdXp6aW5nLiBMdWNraWx5LCB2aXJ0dWFsIGJ1c2VzIGFyZSBhY2Nlc3NpYmxlISBTcGVjaWZpY2FsbHksIFVTQiBnYWRnZXRzIGFyZSByZWFjaGFibGUsIHNvIHRoZSBVU0IgYnVzIGl0c2VsZiBpcyBhIHZpYWJsZSB0YXJnZXQhXG5cbkFscmlnaHQsIHdlJ3JlIGluIHRoZSBjbGVhciB0byBjb250aW51ZSEgTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIGZvciBgYXRoOWtfaHRjYCwgZXNwZWNpYWxseSBhbnl0aGluZyByZWxhdGVkIHRvIHNwZWN0cmFsIHNjYW5uaW5nIG9yIEZGVCBmZWF0dXJlcy4gTGV0J3Mgc2VlLi4uIEknbGwgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIHRoYXQgZHJpdmVyIHNwZWNpZmljYWxseSwgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgYEFUSDlLX0NPTU1PTl9TUEVDVFJBTGAsIGBBVEg5S19IVENfREVCVUdGU2AsIGFuZCBhbnl0aGluZyBlbHNlIHJlbGV2YW50IGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZ2AuIFRoYXQnbGwgdGVsbCBtZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpYWwgYnVpbGQgb3B0aW9ucyBJIG5lZWQgdG8ga25vdyBhYm91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyODcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDI6MDUuMDQyNDU2MzMxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjExNTE0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVRIOUtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6Mjpjb25maWcgQVRIOUtfSFdcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0zLVxcdHRyaXN0YXRlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6NDpjb25maWcgQVRIOUtfQ09NTU9OXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctNS1cXHR0cmlzdGF0ZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTYtXFx0c2VsZWN0IEFUSF9DT01NT05cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzo3OmNvbmZpZyBBVEg5S19DT01NT05fREVCVUdcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy04LVxcdGJvb2xcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzo5OmNvbmZpZyBBVEg5S19ERlNfREVCVUdGU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTEwLVxcdGRlZl9ib29sIHlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTEyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjEzOmNvbmZpZyBBVEg5S19CVENPRVhfU1VQUE9SVFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE0LVxcdGJvb2wgXFxcIkF0aGVyb3MgYmx1ZXRvb3RoIGNvZXhpc3RlbmNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0yMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoyMTpjb25maWcgQVRIOUtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0yMi1cXHR0cmlzdGF0ZSBcXFwiQXRoZXJvcyA4MDIuMTFuIHdpcmVsZXNzIGNhcmRzIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0zOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzozOTpjb25maWcgQVRIOUtfUENJXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctNDAtXFx0Ym9vbCBcXFwiQXRoZXJvcyBhdGg5ayBQQ0kvUENJZSBidXMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTQ3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjQ4OmNvbmZpZyBBVEg5S19BSEJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy00OS1cXHRib29sIFxcXCJBdGhlcm9zIGF0aDlrIEFIQiBidXMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTU3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjU4OmNvbmZpZyBBVEg5S19ERUJVR0ZTXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctNTktXFx0Ym9vbCBcXFwiQXRoZXJvcyBhdGg5ayBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy02OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzo2OTpjb25maWcgQVRIOUtfU1RBVElPTl9TVEFUSVNUSUNTXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctNzAtXFx0Ym9vbCBcXFwiRGV0YWlsZWQgc3RhdGlvbiBzdGF0aXN0aWNzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctNzUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6NzY6Y29uZmlnIEFUSDlLX1RYOTlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy03Ny1cXHRib29sIFxcXCJBdGhlcm9zIGF0aDlrIFRYOTkgdGVzdGluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctOTUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6OTY6Y29uZmlnIEFUSDlLX0RGU19DRVJUSUZJRURcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy05Ny1cXHRib29sIFxcXCJBdGhlcm9zIERGUyBzdXBwb3J0IGZvciBjZXJ0aWZpZWQgcGxhdGZvcm1zXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTE0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjExNTpjb25maWcgQVRIOUtfRFlOQUNLXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTE2LVxcdGJvb2wgXFxcIkF0aGVyb3MgYXRoOWsgQUNLIHRpbWVvdXQgZXN0aW1hdGlvbiBhbGdvcml0aG1cXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xMjMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTI0OmNvbmZpZyBBVEg5S19XT1dcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xMjUtXFx0Ym9vbCBcXFwiV2FrZSBvbiBXaXJlbGVzcyBMQU4gc3VwcG9ydCAoRVhQRVJJTUVOVEFMKVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTEzMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoxMzI6Y29uZmlnIEFUSDlLX1JGS0lMTFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTEzMy1cXHRib29sIFxcXCJBdGhlcm9zIGF0aDlrIHJma2lsbCBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE0MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoxNDI6Y29uZmlnIEFUSDlLX0NIQU5ORUxfQ09OVEVYVFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE0My1cXHRib29sIFxcXCJDaGFubmVsIENvbnRleHQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE1MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoxNTE6Y29uZmlnIEFUSDlLX1BDT0VNXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTUyLVxcdGJvb2wgXFxcIkF0aGVyb3MgYXRoOWsgc3VwcG9ydCBmb3IgUEMgT0VNIGNhcmRzXFxcIiBpZiBFWFBFUlRcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE1NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoxNTY6Y29uZmlnIEFUSDlLX1BDSV9OT19FRVBST01cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNTctXFx0dHJpc3RhdGUgXFxcIkF0aGVyb3MgYXRoOWsgcGNpIGxvYWRlciBmb3IgRUVQUk9NLWxlc3MgY2hpcHNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTcyOmNvbmZpZyBBVEg5S19IVENcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNzMtXFx0dHJpc3RhdGUgXFxcIkF0aGVyb3MgSFRDIGJhc2VkIHdpcmVsZXNzIGNhcmRzIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xODYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTg3OmNvbmZpZyBBVEg5S19IVENfREVCVUdGU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE4OC1cXHRib29sIFxcXCJBdGhlcm9zIGF0aDlrX2h0YyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xOTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTk1OmNvbmZpZyBBVEg5S19IV1JOR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE5Ni1cXHRib29sIFxcXCJSYW5kb20gbnVtYmVyIGdlbmVyYXRvciBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMjA1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjIwNjpjb25maWcgQVRIOUtfQ09NTU9OX1NQRUNUUkFMXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMjA3LVxcdGJvb2wgXFxcIkF0aGVyb3MgYXRoOWsvYXRoOWtfaHRjIHNwZWN0cmFsIHNjYW4gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDI6MDUuMDk0NTc4MjQ3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MDgwMzUxMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUgY2hlY2s6XG5cbioqRXhhbWluaW5nIHRoZSBBdGhlcm9zIDlrIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZSBgYXRoOWtgIGRyaXZlciBpcyBjb25maWd1cmVkLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgYEFUSDlLX0hUQ2AgYW5kIGBBVEg5S19DT01NT05fU1BFQ1RSQUxgIG9wdGlvbnMuIEknbGwgb3BlbiB1cCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWdgLiBNeSBtYWluIGZvY3VzIHdpbGwgYmUgYXJvdW5kIHRob3NlIHR3byBzeW1ib2xzLiBJJ2xsIGltbWVkaWF0ZWx5IHN0YXJ0IHNjYW5uaW5nIHRoZSBmaWxlIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcywgdGhlIGRlZmF1bHQgdmFsdWVzIChpZiBhbnkpLCBhbmQgdGhlIGhlbHAgdGV4dCBhc3NvY2lhdGVkIHdpdGggdGhlc2UgY29uZmlndXJhdGlvbnMuIEknbSBsb29raW5nIGZvciB3aGVyZSB0aGV5J3JlIGRlZmluZWQgd2l0aGluIHRoZSBoaWVyYXJjaHksIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBzdXBwb3J0LCBhbmQgd2hhdCBmZWF0dXJlcyB0aGV5IGVuYWJsZSBvciBkaXNhYmxlLiBJJ2xsIHBheSBhdHRlbnRpb24gdG8gYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBvcHRpb25zIChlLmcuLCBpZiBgQVRIOUtfSFRDYCByZXF1aXJlcyBhbm90aGVyIHN5bWJvbCB0byBiZSBlbmFibGVkLCBJIG5lZWQgdG8gbm90ZSB0aGF0KS4gQWxzbywgSSdsbCByZXZpZXcgYW55IGNvbmRpdGlvbmFsIGxvZ2ljLCBsaWtlIGBpZmAgc3RhdGVtZW50cywgYXJvdW5kIHRoZXNlIHN5bWJvbHMg4oCTIHRoYXQgd2lsbCB0ZWxsIG1lIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyB0aGV5J3JlIHNlbGVjdGFibGUuIFVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGVzZSBjb25maWd1cmF0aW9ucyBhZmZlY3QgdGhlIGRyaXZlcidzIGJlaGF2aW9yIGFuZCBwZXJmb3JtYW5jZS4gVGhpcyB3aWxsIGhlbHAgbWUgaWYgSSBuZWVkIHRvIGRpYWdub3NlIGFuIGlzc3VlIHdpdGggdGhpcyBkcml2ZXIgbGF0ZXIgb3IgdHVuZSBpdCBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjg0OSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQyOjA3LjkwMjYxNzk0MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTcwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTcwOlxcdFxcdCAgSWYgdW5zdXJlIHNheSBOLlxcbiAxNzE6XFx0XFxuIDE3MjpcXHRjb25maWcgQVRIOUtfSFRDXFxuIDE3MzpcXHRcXHR0cmlzdGF0ZSBcXFwiQXRoZXJvcyBIVEMgYmFzZWQgd2lyZWxlc3MgY2FyZHMgc3VwcG9ydFxcXCJcXG4gMTc0OlxcdFxcdGRlcGVuZHMgb24gVVNCIFxcdTAwMjZcXHUwMDI2IE1BQzgwMjExXFxuIDE3NTpcXHRcXHRzZWxlY3QgTUFDODAyMTFfTEVEUyBpZiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1NQUM4MDIxMVxcbiAxNzY6XFx0XFx0c2VsZWN0IEFUSDlLX0hXXFxuIDE3NzpcXHRcXHRzZWxlY3QgQVRIOUtfQ09NTU9OXFxuIDE3ODpcXHRcXHRoZWxwXFxuIDE3OTpcXHRcXHQgIFN1cHBvcnQgZm9yIEF0aGVyb3MgSFRDIGJhc2VkIGNhcmRzLlxcbiAxODA6XFx0XFx0ICBDaGlwc2V0cyBzdXBwb3J0ZWQ6IEFSOTI3MVxcbiAxODE6XFx0XFxuIDE4MjpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uOlxcbiAxODM6XFx0XFx0ICBodHRwczovL3dpcmVsZXNzLndpa2kua2VybmVsLm9yZy9lbi91c2Vycy9Ecml2ZXJzL2F0aDlrX2h0Y1xcbiAxODQ6XFx0XFxuIDE4NTpcXHRcXHQgIFRoZSBidWlsdCBtb2R1bGUgd2lsbCBiZSBhdGg5a19odGMuXFxuIDE4NjpcXHRcXG4gMTg3OlxcdGNvbmZpZyBBVEg5S19IVENfREVCVUdGU1xcbiAxODg6XFx0XFx0Ym9vbCBcXFwiQXRoZXJvcyBhdGg5a19odGMgZGVidWdnaW5nXFxcIlxcbiAxODk6XFx0XFx0ZGVwZW5kcyBvbiBBVEg5S19IVEMgXFx1MDAyNlxcdTAwMjYgREVCVUdfRlNcXG4gMTkwOlxcdFxcdHNlbGVjdCBBVEg5S19DT01NT05fREVCVUdcXG4gMTkxOlxcdFxcdGhlbHBcXG4gMTkyOlxcdFxcdCAgU2F5IFksIGlmIHlvdSBuZWVkIGFjY2VzcyB0byBhdGg5a19odGMncyBzdGF0aXN0aWNzLlxcbiAxOTM6XFx0XFx0ICBBcyB3ZWxsIGFzIGFjY2VzcyB0byB0aGUgRkZUL3NwZWN0cmFsIGRhdGEuXFxuIDE5NDpcXHRcXG4gMTk1OlxcdGNvbmZpZyBBVEg5S19IV1JOR1xcbiAxOTY6XFx0XFx0Ym9vbCBcXFwiUmFuZG9tIG51bWJlciBnZW5lcmF0b3Igc3VwcG9ydFxcXCJcXG4gMTk3OlxcdFxcdGRlcGVuZHMgb24gQVRIOUsgXFx1MDAyNlxcdTAwMjYgKEhXX1JBTkRPTSA9IHkgfHwgSFdfUkFORE9NID0gQVRIOUspXFxuIDE5ODpcXHRcXHRkZWZhdWx0IG5cXG4gMTk5OlxcdFxcdGhlbHBcXG4gMjAwOlxcdFxcdCAgVGhpcyBvcHRpb24gaW5jb3Jwb3JhdGVzIHRoZSBBREMgcmVnaXN0ZXIgb3V0cHV0IGFzIGEgc291cmNlIG9mXFxuIDIwMTpcXHRcXHQgIHJhbmRvbW5lc3MgaW50byBMaW51eCBlbnRyb3B5IHBvb2wgKC9kZXYvdXJhbmRvbSBhbmQgL2Rldi9yYW5kb20pXFxuIDIwMjpcXHRcXG4gMjAzOlxcdFxcdCAgU2F5IFksIGZlZWRzIHRoZSBlbnRyb3B5IGRpcmVjdGx5IGZyb20gdGhlIFdpRmkgZHJpdmVyIHRvIHRoZSBpbnB1dFxcbiAyMDQ6XFx0XFx0ICBwb29sLlxcbiAyMDU6XFx0XFxuIDIwNjpcXHRjb25maWcgQVRIOUtfQ09NTU9OX1NQRUNUUkFMXFxuIDIwNzpcXHRcXHRib29sIFxcXCJBdGhlcm9zIGF0aDlrL2F0aDlrX2h0YyBzcGVjdHJhbCBzY2FuIHN1cHBvcnRcXFwiXFxuIDIwODpcXHRcXHRkZXBlbmRzIG9uIEFUSDlLX0RFQlVHRlMgfHwgQVRIOUtfSFRDX0RFQlVHRlNcXG4gMjA5OlxcdFxcdHNlbGVjdCBSRUxBWVxcbiAyMTA6XFx0XFx0ZGVmYXVsdCBuXFxuIDIxMTpcXHRcXHRoZWxwXFxuIDIxMjpcXHRcXHQgIFNheSBZIHRvIGVuYWJsZSBhY2Nlc3MgdG8gdGhlIEZGVC9zcGVjdHJhbCBkYXRhIHZpYSBkZWJ1Z2ZzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MjowNy45MDI3MjI0MjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIyNTEzMDMyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBhdGg5a19odGNgIENvZGViYXNlKipcblxuT2theSwgc28gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIGBzcGVjX3ByaXZgIGFuZCBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAgd2l0aGluIHRoZSBgYXRoOWtfaHRjYCBkcml2ZXIuIFNlZW1zIGxpa2UgdGhlc2UgYXJlIHR3byBjcml0aWNhbCBjb21wb25lbnRzIHRoYXQgbGlrZWx5IHdvcmsgdG9nZXRoZXIgaW4gc29tZSB3YXkgcmVsYXRlZCB0byBzcGVjdHJhbCBhbmFseXNpcyBvciBwcm9jZXNzaW5nIHdpdGhpbiB0aGUgQXRoZXJvcyBXaS1GaSBjaGlwc2V0J3MgSFRDIChIb3N0IFRyYW5zcG9ydCBDb250cm9sKSBpbnRlcmZhY2UuIE15IGZpcnN0IHN0ZXAgaXMgdG8gcXVpY2tseSBsb2NhdGUgd2hlcmUgdGhlc2UgYXJlIHVzZWQuIExldCdzIGZpcmUgdXAgYSBncmVwIGNvbW1hbmQgYW5kIHNlZSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgb3IgdmFyaWFibGVzIGFwcGVhciBpbiB0aGUgY29kZWJhc2UuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGJ1aWxkIGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgc3lzdGVtIGZsb3cuIEZyb20gdGhlcmUgSSdsbCBiZSBhYmxlIHRvIHRyYWNlIHRoZWlyIHVzYWdlLCB1bmRlcnN0YW5kIHRoZSBkYXRhIHRoZXkgYXJlIGhhbmRsaW5nLCBhbmQgc2VlIHRoZSBsb2dpY2FsIGNvbm5lY3Rpb25zIGJldHdlZW4gdGhlc2UgdHdvIHBhcnRzIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODk4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MjoxMC4xMjc4NTY0NzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMDY4Mjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aF9jbW5fcHJvY2Vzc19mZnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM9NDQ5PWF0aF9jbW5faXNfZmZ0X2J1Zl9mdWxsKHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy00NjgtLyogcmV0dXJucyAxIGlmIHRoaXMgd2FzIGEgc3BlY3RyYWwgZnJhbWUsIGV2ZW4gaWYgbm90IGhhbmRsZWQuICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjQ2OTppbnQgYXRoX2Ntbl9wcm9jZXNzX2ZmdChzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTQ3MC1cXHRcXHQgICAgc3RydWN0IGF0aF9yeF9zdGF0dXMgKnJzLCB1NjQgdHNmKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTY4My19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjY4NDpFWFBPUlRfU1lNQk9MKGF0aF9jbW5fcHJvY2Vzc19mZnQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy02ODUtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg9MTc3PWludCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNzktXFx0XFx0XFx0ICAgICAgIGVudW0gc3BlY3RyYWxfbW9kZSBzcGVjdHJhbF9tb2RlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTgwOmludCBhdGhfY21uX3Byb2Nlc3NfZmZ0KHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdiwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTgxLVxcdFxcdCAgICBzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnMsIHU2NCB0c2YpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oPTE5Mj1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fdHJpZ2dlcihzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE5Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTk3OnN0YXRpYyBpbmxpbmUgaW50IGF0aF9jbW5fcHJvY2Vzc19mZnQoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xOTgtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz05OTg9c3RhdGljIGJvb2wgYXRoOWtfcnhfcHJlcGFyZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTA3My1cXHRcXHQvKiBUT0RPOiBOb3QgdXNpbmcgREZTIHByb2Nlc3Npbmcgbm93LiAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzoxMDc0OlxcdFxcdGlmIChhdGhfY21uX3Byb2Nlc3NfZmZ0KFxcdTAwMjZwcml2LVxcdTAwM2VzcGVjX3ByaXYsIGhkcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTA3NS1cXHRcXHRcXHRcXHQgICAgXFx1MDAyNnJ4X3N0YXRzLCByeF9zdGF0dXMtXFx1MDAzZW1hY3RpbWUpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTA4Ny1cXHRcXHRyeF9zdGF0cy5yc19waHllcnIgPSBBVEg5S19QSFlFUlJfUkFEQVI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjEwODg6XFx0XFx0aWYgKGF0aF9jbW5fcHJvY2Vzc19mZnQoXFx1MDAyNnByaXYtXFx1MDAzZXNwZWNfcHJpdiwgaGRyLCBcXHUwMDI2cnhfc3RhdHMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEwODktXFx0XFx0XFx0XFx0XFx0cnhfc3RhdHVzLVxcdTAwM2VtYWN0aW1lKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmM9ODA2PXN0YXRpYyBpbnQgYXRoOWtfcnhfc2tiX3ByZXByb2Nlc3Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jLTg4My1cXHRcXHR9IGVsc2UgaWYgKHNjLVxcdTAwM2VzcGVjX3ByaXYuc3BlY3RyYWxfbW9kZSAhPSBTUEVDVFJBTF9ESVNBQkxFRCBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmM6ODg0OlxcdFxcdFxcdCAgIGF0aF9jbW5fcHJvY2Vzc19mZnQoXFx1MDAyNnNjLVxcdTAwM2VzcGVjX3ByaXYsIGhkciwgcnhfc3RhdHMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYy04ODUtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHJ4X3N0YXR1cy1cXHUwMDNlbWFjdGltZSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDI6MTAuMTg3OTMyMjM0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNTMzMzQwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGNvbW1vbi1zcGVjdHJhbC5vYCBnZXRzIGJ1aWx0LCBzbyBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGVgLiBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSwgc28gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIHR5cGljYWwgTWFrZWZpbGUgY29uc3RydWN0cyDigJMgb2JqZWN0IGZpbGUgZGVwZW5kZW5jaWVzLCBzb3VyY2UgZmlsZSBsaXN0cywgY29tcGlsZXIgZmxhZ3MsIGFuZCB0aGUgbGlrZS4gSXQgc2hvdWxkIGJlIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBwcm9jZXNzLCBidXQgSSB3YW50IHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgZXZlcnkgc3RlcC4gVGhlIGF0aDlrIGRyaXZlciBpcyBjcml0aWNhbCwgYW5kIGtub3dpbmcgaG93IGl0cyBjb21wb25lbnRzIGFyZSBhc3NlbWJsZWQgaXMgdml0YWwgZm9yIGRlYnVnZ2luZyBvciBjdXN0b21pemF0aW9uLiBUaGlzIGlzIGEgc3RhbmRhcmQgcHJvY2VkdXJlOyBJJ2xsIGlkZW50aWZ5IHRoZSByZWxldmFudCBydWxlcyBvciB2YXJpYWJsZXMgcmVsYXRlZCB0byBgY29tbW9uLXNwZWN0cmFsLm9gIGFuZCB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIGJhY2sgdG8gdGhlaXIgc291cmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTI4MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQyOjEyLjQ0MTI3MDA3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDgyMTM0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb21tb24tc3BlY3RyYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZT02NT1hdGg5a19jb21tb24tJChDT05GSUdfQVRIOUtfQ09NTU9OX0RFQlVHKSArPSBjb21tb24tZGVidWcub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZTo2NjphdGg5a19jb21tb24tJChDT05GSUdfQVRIOUtfQ09NTU9OX1NQRUNUUkFMKSArPSBjb21tb24tc3BlY3RyYWwub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZS02Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uaC0yNi0jaW5jbHVkZSBcXFwiY29tbW9uLWRlYnVnLmhcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5oOjI3OiNpbmNsdWRlIFxcXCJjb21tb24tc3BlY3RyYWwuaFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmgtMjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQyOjEyLjQ5NjEwMTExNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTY4MDMyMzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDUkMgRXJyb3IgSGFuZGxpbmcgaW4gYXRoOWtfaHRjIGZvciBTcGVjdHJhbCBTYW1wbGVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgdGhlIGBhdGg5a19odGNgIFVTQiBXaS1GaSBkcml2ZXIuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBmb2N1c2VkIG9uIGhvdyBDUkMgZXJyb3JzIGFyZSBoYW5kbGVkIGluIGBhdGg5a19yeF9wcmVwYXJlYCwgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIHJlY2VpdmVkIGRhdGEgbGVuZ3RoIG1hdGNoZXMgdGhhdCBvZiBhIHNwZWN0cmFsIHNhbXBsZS5cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGNvZGUgaW50cm9kdWNlcyBhIGNoZWNrLCBgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW5gLCB0byBkZXRlcm1pbmUgaWYgYSBwYXJ0aWN1bGFyIHBhY2tldCBsZW5ndGggY29ycmVzcG9uZHMgdG8gYSBzcGVjdHJhbCBzYW1wbGUuIFRoaXMgZnVuY3Rpb24gZGVwZW5kcyBvbiB3aGV0aGVyIHNwZWN0cmFsIG1vZGUgaXMgZW5hYmxlZCwgYW5kIHRoZSBjaGFubmVsIHR5cGUgdG8gZGV0ZXJtaW5lIHRoZSBleHBlY3RlZCBGRlQgbGVuZ3RoLiBJIHNlZSB0aGF0IGl0IHVzZXMgYGNmZzgwMjExX2dldF9jaGFuZGVmX3R5cGVgIHRvIGdyYWIgY2hhbm5lbCB0eXBlLCB3aGljaCBpbXBhY3RzIHRoZSBgZmZ0X2xlbmAgY2FsY3VsYXRpb24uIFRoZSBjb21wYXJpc29uIGBsZW4gKyAxIFx1MDAzZT0gZmZ0X2xlbiBcdTAwMjZcdTAwMjYgbGVuIFx1MDAzYz0gZmZ0X2xlbiArIDJgIGlzIGludGVyZXN0aW5nOyBpdCBhY2NvdW50cyBmb3Igc29tZSBwb3RlbnRpYWwgbGVuZ3RoIHZhcmlhdGlvbnMsIHBlcmhhcHMgcmVsYXRlZCB0byBwYWRkaW5nIG9yIGFsaWdubWVudC5cblxuVGhlIGNydWNpYWwgYml0LCB0aGUgY2hlY2sgYHVubGlrZWx5KHJ4X3N0YXRzLnJzX3N0YXR1cyBcdTAwMjYgQVRIOUtfUlhFUlJfQ1JDKWAgaXMgd2hhdCBjYXRjaGVzIG15IGV5ZS4gSXQncyB1c2luZyBgdW5saWtlbHlgLCBzbyB0aGUgQ1JDIGVycm9yIHBhdGggaXMgYXNzdW1lZCB0byBiZSBsZXNzIGZyZXF1ZW50LiBJZiBhIENSQyBlcnJvciBpcyBmbGFnZ2VkICphbmQqIHRoZSBsZW5ndGggbWF0Y2hlcyBhIHNwZWN0cmFsIHNhbXBsZSwgdGhlIGNvZGUgc2V0cyBgcnhfc3RhdHMucnNfcGh5ZXJyYCB0byBgQVRIOUtfUEhZRVJSX1JBREFSYC4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCByYWRhciBkZXRlY3Rpb24gc2NlbmFyaW8sIHdoaWNoIGlzIGZhc2NpbmF0aW5nLiBUaGVuLCBpdCBjYWxscyBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAuIFRoaXMgaXMgdGhlIGltcG9ydGFudCBwYXJ0OyBpdCBsb29rcyBsaWtlIHRoaXMgaXMgd2hlcmUgdGhlIEZGVCBkYXRhIGlzIGFjdHVhbGx5IHByb2Nlc3NlZC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYWxsIHRoZXNlIGZ1bmN0aW9ucyBhbmQgZGF0YSBmbG93cy4gSSBzZWUgYm90aCBgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW5gIGFuZCBgYXRoOWtfcnhfcHJlcGFyZWAgYXJlIHN0YXRpYyBmdW5jdGlvbnMgaW4gYGh0Y19kcnZfdHhyeC5jYCwgd2hpY2ggdGVsbHMgbWUgdGhleSBhcmUgaW50ZXJuYWwgdG8gdGhhdCBjb21waWxhdGlvbiB1bml0LiBJIGFsc28gbmVlZCB0byBrbm93IHdoYXQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIG9yIGNhbGxlcnMgdGhlcmUgbWlnaHQgYmUsIGFuZCwgaWYgYGF0aF9jbW5fcHJvY2Vzc19mZnRgIGlzIGV4cG9ydGVkLlxuXG5BbHJpZ2h0LCB0aGUgY29kZSByZWZlcmVuY2VzIGBhdGg5a19yeF90YXNrbGV0YCwgYW5kIGl0IGNhbGxzIGBhdGg5a19yeF9wcmVwYXJlYC4gR29vZCwgSSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG5vdy4gYGF0aF9jbW5fcHJvY2Vzc19mZnRgIGlzIGNhbGxlZCAqaW5zaWRlKiB0aGlzIGJsb2NrLCBhbmQgdGhhdCdzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byB0cmFjZSBob3cgcGFja2V0cyBhcmUgcmVjZWl2ZWQgYW5kIHByb2Nlc3NlZCBieSBgYXRoOWtfaHRjYC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGhvdyBgYXRoOWtfcnhfdGFza2xldGAgaXMgdHJpZ2dlcmVkIGFuZCB3aGF0IGl0J3MgdWx0aW1hdGVseSBkb2luZy4gSSBhbHNvIG5lZWQgdG8ga25vdyBob3cgcGFja2V0cyBhcmUgcGFzc2VkIGludG8gdGhlIGRyaXZlci4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlcmUgaXNuJ3Qgc29tZSBzaWRlIGVmZmVjdCBvciBvdGhlciB1bmludGVuZGVkIGNvbnNlcXVlbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTcwMCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MjoxNy40NjQxMzg2MTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2OTAzOTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDlrX3J4X3Rhc2tsZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaD01OTg9dm9pZCBhdGg5a19ob3N0X3J4X2luaXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6NTk5OnZvaWQgYXRoOWtfcnhfdGFza2xldChzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC02MDAtdTMyIGF0aDlrX2h0Y19jYWxjcnhmaWx0ZXIoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2luaXQuYz02MDY9c3RhdGljIGludCBhdGg5a19pbml0X3ByaXYoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfaW5pdC5jLTY0Ny1cXHRtdXRleF9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2VodGNfcG1fbG9jayk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfaW5pdC5jOjY0ODpcXHR0YXNrbGV0X3NldHVwKFxcdTAwMjZwcml2LVxcdTAwM2VyeF90YXNrbGV0LCBhdGg5a19yeF90YXNrbGV0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmMtNjQ5LVxcdHRhc2tsZXRfc2V0dXAoXFx1MDAyNnByaXYtXFx1MDAzZXR4X2ZhaWxlZF90YXNrbGV0LCBhdGg5a190eF9mYWlsZWRfdGFza2xldCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM9OTk4PXN0YXRpYyBib29sIGF0aDlrX3J4X3ByZXBhcmUoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTExMTgtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjExMTk6dm9pZCBhdGg5a19yeF90YXNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTEyMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQyOjE3LjUyMTA0ODk3OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzA1NzUwNDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgQXRoZXJvcyBXaXJlbGVzcyBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBJIHNlZSB3ZSBoYXZlIGBBVEg5S19IVENgLCB3aGljaCBzZWVtcyB0byBiZSBlc3NlbnRpYWwgZm9yIEF0aGVyb3MgSFRDLWJhc2VkIHdpcmVsZXNzIGNhcmRzIGFuZCBoaW5nZXMgb24gYm90aCBVU0IgYW5kIHRoZSBNQUM4MDIxMSBmcmFtZXdvcmsuIFRoZW4gdGhlcmUncyBgQVRIOUtfSFRDX0RFQlVHRlNgLCBhIGRlYnVnLWZvY3VzZWQgb3B0aW9uIGRlcGVuZGVudCBvbiBgQVRIOUtfSFRDYCBhbmQgZGVidWcgZmlsZSBzeXN0ZW0gc3VwcG9ydC4gTm93LCBgQVRIOUtfQ09NTU9OX1NQRUNUUkFMYCBkZXBlbmRzIG9uIGVpdGhlciB0aGUgYEFUSDlLX0RFQlVHRlNgIG9yIGBBVEg5S19IVENfREVCVUdGU2Agb3B0aW9ucywgd2hpY2ggbWFrZXMgc2Vuc2UuXG5cbkJ1dCB3YWl0IGEgbWludXRlLCB0aGUgc3RydWN0dXJlIHRoYXQncyBnb3QgbWUgY29uZnVzZWQgaXMgYHNwZWNfcHJpdmAgYW5kIGBhdGhfY21uX3Byb2Nlc3NfZmZ0YD8gVGhhdCdzIHdoYXQgSSdkIGV4cGVjdCB0byBzZWUgd2l0aCB0aGUgYGNvbW1vbi1zcGVjdHJhbGAgY29uZmlnIGFjdGl2ZS4gV2l0aG91dCBgQVRIOUtfQ09NTU9OX1NQRUNUUkFMYCBlbmFibGVkLCB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGVzZSBzcGVjdHJhbCBhbmFseXNpcyBjb21wb25lbnRzPyBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYGNvbW1vbi1zcGVjdHJhbC5oYCB0byBzZWUgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIsIG9yIHdoZXRoZXIgdGhleSdyZSBldmVuIHN1cHBvc2VkIHRvIGJlIHByZXNlbnQgd2l0aG91dCB0aGUgc3BlY3RyYWwgYW5hbHlzaXMgZmVhdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NTA5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQyOjIyLjgyNjgwNDM4MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEwNTkyODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3BlY3RyYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MjA6I2luY2x1ZGUgXFxcIi4uL3NwZWN0cmFsX2NvbW1vbi5oXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0yMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MjI6LyogZW51bSBzcGVjdHJhbF9tb2RlOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0yMy0gKlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoyNDogKiBAU1BFQ1RSQUxfRElTQUJMRUQ6IHNwZWN0cmFsIG1vZGUgaXMgZGlzYWJsZWRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMjUtICogQFNQRUNUUkFMX0JBQ0tHUk9VTkQ6IGhhcmR3YXJlIHNlbmRzIHNhbXBsZXMgd2hlbiBpdCBpcyBub3QgYnVzeSB3aXRoXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTI2LSAqXFx0c29tZXRoaW5nIGVsc2UuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjI3OiAqIEBTUEVDVFJBTF9NQU5VQUw6IHNwZWN0cmFsIHNjYW4gaXMgZW5hYmxlZCwgdHJpZ2dlcmluZyBmb3Igc2FtcGxlc1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0yOC0gKlxcdGlzIHBlcmZvcm1lZCBtYW51YWxseS5cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0zMS0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MzI6ZW51bSBzcGVjdHJhbF9tb2RlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMzMtXFx0U1BFQ1RSQUxfRElTQUJMRUQgPSAwLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTM5LSNkZWZpbmUgU1BFQ1RSQUxfU0NBTl9CSVRNQVNLXFx0XFx0MHgxMFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDo0MDovKiBSYWRhciBpbmZvIHBhY2tldCBmb3JtYXQsIHVzZWQgZm9yIERGUyBhbmQgc3BlY3RyYWwgZm9ybWF0cy4gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtNDEtc3RydWN0IGF0aF9yYWRhcl9pbmZvIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC00Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6NDc6LyogVGhlIEhUMjAgc3BlY3RyYWwgZGF0YSBoYXMgNCBieXRlcyBvZiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGF0IGl0J3MgZW5kLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC00OC0gKlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oPTk3PXN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC05OC1cXHRzdHJ1Y3QgYXRoX2h3ICphaDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6OTk6XFx0LyogcmVsYXkoZnMpIGNoYW5uZWwgZm9yIHNwZWN0cmFsIHNjYW4gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTAwLVxcdHN0cnVjdCByY2hhbiAqcmZzX2NoYW5fc3BlY19zY2FuO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxMDE6XFx0ZW51bSBzcGVjdHJhbF9tb2RlIHNwZWN0cmFsX21vZGU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTEwMi1cXHRzdHJ1Y3QgYXRoX3NwZWNfc2NhbiBzcGVjX2NvbmZpZztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xMTEtLyogZ3JhYnMgdGhlIG1heCBtYWduaXR1ZGUgZnJvbSB0aGUgYWxsL3VwcGVyL2xvd2VyIGJpbnMgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTEyOnN0YXRpYyBpbmxpbmUgdTE2IHNwZWN0cmFsX21heF9tYWduaXR1ZGUodTggKmJpbnMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTExMy17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTE5LS8qIHJldHVybiB0aGUgbWF4IG1hZ25pdHVkZSBmcm9tIHRoZSBhbGwvdXBwZXIvbG93ZXIgYmlucyAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxMjA6c3RhdGljIGlubGluZSB1OCBzcGVjdHJhbF9tYXhfaW5kZXgodTggKmJpbnMsIGludCBudW1fYmlucylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTIxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNDctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjE0ODpzdGF0aWMgaW5saW5lIHU4IHNwZWN0cmFsX21heF9pbmRleF9odDQwKHU4ICpiaW5zKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNDkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE1MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTUyOlxcdGlkeCA9IHNwZWN0cmFsX21heF9pbmRleChiaW5zLCBTUEVDVFJBTF9IVDIwXzQwX05VTV9CSU5TKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTUzLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE1OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTYwOnN0YXRpYyBpbmxpbmUgdTggc3BlY3RyYWxfbWF4X2luZGV4X2h0MjAodTggKmJpbnMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE2MS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjE2MjpcXHRyZXR1cm4gc3BlY3RyYWxfbWF4X2luZGV4KGJpbnMsIFNQRUNUUkFMX0hUMjBfTlVNX0JJTlMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNjMtfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE2NS0vKiByZXR1cm4gdGhlIGJpdG1hcCB3ZWlnaHQgZnJvbSB0aGUgYWxsL3VwcGVyL2xvd2VyIGJpbnMgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTY2OnN0YXRpYyBpbmxpbmUgdTggc3BlY3RyYWxfYml0bWFwX3dlaWdodCh1OCAqYmlucylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTY3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNzEtI2lmZGVmIENPTkZJR19BVEg5S19DT01NT05fU1BFQ1RSQUxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTcyOnZvaWQgYXRoOWtfY21uX3NwZWN0cmFsX2luaXRfZGVidWcoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LCBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3BoeSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjE3Mzp2b2lkIGF0aDlrX2Ntbl9zcGVjdHJhbF9kZWluaXRfZGVidWcoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTc0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxNzU6dm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE3Ni1cXHRcXHRcXHRcXHQgc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTc3OmludCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTc4LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjE3OTpcXHRcXHRcXHQgICAgICAgZW51bSBzcGVjdHJhbF9tb2RlIHNwZWN0cmFsX21vZGUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODAtaW50IGF0aF9jbW5fcHJvY2Vzc19mZnQoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE4Mi0jZWxzZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxODM6c3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2Ntbl9zcGVjdHJhbF9pbml0X2RlYnVnKHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTg0LVxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3BoeSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjE4ODpzdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfY21uX3NwZWN0cmFsX2RlaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE4OS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTkxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxOTI6c3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXIoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTkzLVxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDI6MjIuODc3ODY5NzY5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxNDQ1Nzk3MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBhdGg5ayBDb21tb24gU3BlY3RyYWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgY29uZmlndXJhdGlvbiBzdGFuZHBvaW50LiBJdCBsb29rcyBsaWtlIGBDT05GSUdfQVRIOUtfQ09NTU9OX1NQRUNUUkFMYCBpcyB0aGUga2V5IGhlcmUuIElmIHRoYXQncyBlbmFibGVkLCB0aGUgZnVsbCBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAgZnVuY3Rpb24gaW4gYGNvbW1vbi1zcGVjdHJhbC5jYCBnZXRzIGFjdGl2YXRlZC4gTWFrZXMgc2Vuc2UsIHRoYXQncyB3aGF0IEknZCBleHBlY3QuIEhvd2V2ZXIsIGlmIGl0J3MgZGlzYWJsZWQsIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAgaXMganVzdCBhIHN0dWIsIGVmZmVjdGl2ZWx5IHNraXBwaW5nIHRoZSBGRlQgZnJhbWUgcHJvY2Vzc2luZy4gTm93LCB0aGUgZGVwZW5kZW5jaWVzIGFyZSB3aGF0J3MgaW1wb3J0YW50LiBgQ09ORklHX0FUSDlLX0NPTU1PTl9TUEVDVFJBTGAgZGVwZW5kcyBvbiBlaXRoZXIgYEFUSDlLX0RFQlVHRlNgIG9yIGBBVEg5S19IVENfREVCVUdGU2AuIERpdmluZyBkZWVwZXIsIGBDT05GSUdfQVRIOUtfSFRDX0RFQlVHRlNgIGluIHR1cm4gZGVwZW5kcyBvbiBgQVRIOUtfSFRDYCAqYW5kKiBgREVCVUdfRlNgLiBBbmQgYEFUSDlLX0hUQ2AgaXRzZWxmIHJlbGllcyBvbiBgVVNCYCBhbmQgYE1BQzgwMjExYC4gU28sIGl0J3MgYSBjaGFpbiwgZWFjaCBjb25maWd1cmF0aW9uIGl0ZW0gaXMgZGVwZW5kZW50IG9uIHRoZSBwcmlvci5cblxuSSBzaG91bGQgcHJvYmFibHkgdmVyaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbiBpdHNlbGYgbm93LiBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBmb3IgYGF0aF9jbW5fcHJvY2Vzc19mZnRgIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmNgIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0J3MgYmVpbmcgZG9uZSB3aGVuIGVuYWJsZWQuIEtub3dpbmcgdGhlIGV4YWN0IGNvZGUgYmVpbmcgZXhlY3V0ZWQsIGJhc2VkIG9uIHRoZXNlIGNvbmRpdGlvbnMsIHdpbGwgZ2l2ZSBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDExMiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MjoyOC4wMjI0NTQ1OTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NjUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NjU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQ2NjpcXHR9XFxuIDQ2NzpcXHRcXG4gNDY4OlxcdC8qIHJldHVybnMgMSBpZiB0aGlzIHdhcyBhIHNwZWN0cmFsIGZyYW1lLCBldmVuIGlmIG5vdCBoYW5kbGVkLiAqL1xcbiA0Njk6XFx0aW50IGF0aF9jbW5fcHJvY2Vzc19mZnQoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxcbiA0NzA6XFx0XFx0XFx0ICAgIHN0cnVjdCBhdGhfcnhfc3RhdHVzICpycywgdTY0IHRzZilcXG4gNDcxOlxcdHtcXG4gNDcyOlxcdFxcdHU4IHNhbXBsZV9idWZbU1BFQ1RSQUxfU0FNUExFX01BWF9MRU5dID0gezB9O1xcbiA0NzM6XFx0XFx0c3RydWN0IGF0aF9odyAqYWggPSBzcGVjX3ByaXYtXFx1MDAzZWFoO1xcbiA0NzQ6XFx0XFx0c3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzcGVjX3ByaXYtXFx1MDAzZWFoKTtcXG4gNDc1OlxcdFxcdHN0cnVjdCBhdGhfc29mdGMgKnNjID0gY29tbW9uLVxcdTAwM2Vwcml2O1xcbiA0NzY6XFx0XFx0dTggbnVtX2JpbnMsICp2ZGF0YSA9ICh1OCAqKWhkcjtcXG4gNDc3OlxcdFxcdHN0cnVjdCBhdGhfcmFkYXJfaW5mbyAqcmFkYXJfaW5mbztcXG4gNDc4OlxcdFxcdGludCBsZW4gPSBycy1cXHUwMDNlcnNfZGF0YWxlbjtcXG4gNDc5OlxcdFxcdGludCBpO1xcbiA0ODA6XFx0XFx0aW50IGdvdF9zbGVuID0gMDtcXG4gNDgxOlxcdFxcdHU4ICAqc2FtcGxlX3N0YXJ0O1xcbiA0ODI6XFx0XFx0aW50IHNhbXBsZV9ieXRlcyA9IDA7XFxuIDQ4MzpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gNDg0OlxcdFxcdHUxNiBmZnRfbGVuLCBzYW1wbGVfbGVuLCBmcmVxID0gYWgtXFx1MDAzZWN1cmNoYW4tXFx1MDAzZWNoYW4tXFx1MDAzZWNlbnRlcl9mcmVxO1xcbiA0ODU6XFx0XFx0ZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFuX3R5cGU7XFxuIDQ4NjpcXHRcXHRhdGhfY21uX2ZmdF9pZHhfdmFsaWRhdG9yICpmZnRfaWR4X3ZhbGlkYXRvcjtcXG4gNDg3OlxcdFxcdGF0aF9jbW5fZmZ0X3NhbXBsZV9oYW5kbGVyICpmZnRfaGFuZGxlcjtcXG4gNDg4OlxcdFxcbiA0ODk6XFx0XFx0LyogQVI5MjgwIGFuZCBiZWZvcmUgcmVwb3J0IHZpYSBBVEg5S19QSFlFUlJfUkFEQVIsIEFSOTN4eCBhbmQgbmV3ZXJcXG4gNDkwOlxcdFxcdCAqIHZpYSBBVEg5S19QSFlFUlJfU1BFQ1RSQUwuIEhhdmVuJ3Qgc2VlbiBBVEg5S19QSFlFUlJfRkFMU0VfUkFEQVJfRVhUXFxuIDQ5MTpcXHRcXHQgKiB5ZXQsIGJ1dCB0aGlzIGlzIHN1cHBvc2VkIHRvIGJlIHBvc3NpYmxlIGFzIHdlbGwuXFxuIDQ5MjpcXHRcXHQgKi9cXG4gNDkzOlxcdFxcdGlmIChycy1cXHUwMDNlcnNfcGh5ZXJyICE9IEFUSDlLX1BIWUVSUl9SQURBUiBcXHUwMDI2XFx1MDAyNlxcbiA0OTQ6XFx0XFx0ICAgIHJzLVxcdTAwM2Vyc19waHllcnIgIT0gQVRIOUtfUEhZRVJSX0ZBTFNFX1JBREFSX0VYVCBcXHUwMDI2XFx1MDAyNlxcbiA0OTU6XFx0XFx0ICAgIHJzLVxcdTAwM2Vyc19waHllcnIgIT0gQVRIOUtfUEhZRVJSX1NQRUNUUkFMKVxcbiA0OTY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQ5NzpcXHRcXG4gNDk4OlxcdFxcdC8qIGNoZWNrIGlmIHNwZWN0cmFsIHNjYW4gYml0IGlzIHNldC4gVGhpcyBkb2VzIG5vdCBoYXZlIHRvIGJlIGNoZWNrZWRcXG4gNDk5OlxcdFxcdCAqIGlmIHJlY2VpdmVkIHRocm91Z2ggYSBTUEVDVFJBTCBwaHkgZXJyb3IsIGJ1dCBzaG91bGRuJ3QgaHVydC5cXG4gNTAwOlxcdFxcdCAqL1xcbiA1MDE6XFx0XFx0cmFkYXJfaW5mbyA9ICgoc3RydWN0IGF0aF9yYWRhcl9pbmZvICopXFx1MDAyNnZkYXRhW2xlbl0pIC0gMTtcXG4gNTAyOlxcdFxcdGlmICghKHJhZGFyX2luZm8tXFx1MDAzZXB1bHNlX2J3X2luZm8gXFx1MDAyNiBTUEVDVFJBTF9TQ0FOX0JJVE1BU0spKVxcbiA1MDM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDUwNDpcXHRcXG4gNTA1OlxcdFxcdGlmICghc3BlY19wcml2LVxcdTAwM2VyZnNfY2hhbl9zcGVjX3NjYW4pXFxuIDUwNjpcXHRcXHRcXHRyZXR1cm4gMTtcXG4gNTA3OlxcdFxcbiA1MDg6XFx0XFx0LyogT3V0cHV0IGJ1ZmZlcnMgYXJlIGZ1bGwsIG5vIG5lZWQgdG8gcHJvY2VzcyBhbnl0aGluZ1xcbiA1MDk6XFx0XFx0ICogc2luY2UgdGhlcmUgaXMgbm8gc3BhY2UgdG8gcHV0IHRoZSByZXN1bHQgYW55d2F5XFxuIDUxMDpcXHRcXHQgKi9cXG4gNTExOlxcdFxcdHJldCA9IGF0aF9jbW5faXNfZmZ0X2J1Zl9mdWxsKHNwZWNfcHJpdik7XFxuIDUxMjpcXHRcXHRpZiAocmV0ID09IDEpIHtcXG4gNTEzOlxcdFxcdFxcdGF0aF9kYmcoY29tbW9uLCBTUEVDVFJBTF9TQ0FOLCBcXFwiRkZUIHJlcG9ydCBpZ25vcmVkLCBubyBzcGFjZSBcXFwiXFxuIDUxNDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFwibGVmdCBvbiBvdXRwdXQgYnVmZmVyc1xcXFxuXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQyOjI4LjAyMjU2OTAzNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTMxNTIyOTI5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aCBGdXp6aW5nOiBBdGhlcm9zIFVTQiBXaXJlbGVzcyBEcml2ZXIgUlggUGF0aCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBpbiBgYXRoOWtfcnhfcHJlcGFyZWAgd2l0aGluIHRoZSBBdGhlcm9zIFVTQiB3aXJlbGVzcyBkcml2ZXIgKGBhdGg5a19odGNgKS4gVGhlIGNoYW5nZSBpbnRyb2R1Y2VzIGEgbmV3IGNvbmRpdGlvbjogaWYgYSByZWNlaXZlZCBwYWNrZXQgaGFzIGEgQ1JDIGVycm9yIChgQVRIOUtfUlhFUlJfQ1JDYCkgYW5kIGl0cyBsZW5ndGggbWF0Y2hlcyBhIHNwZWN0cmFsIHNhbXBsZSBsZW5ndGgsIGl0J3MgZmxhZ2dlZCBhcyBwb3RlbnRpYWxseSByZWxhdGVkIHRvIHJhZGFyIGludGVyZmVyZW5jZSAoYEFUSDlLX1BIWUVSUl9SQURBUmApLiBUaGlzIHRyaWdnZXJzIGEgY2FsbCB0byBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8gTGV0J3Mgc2VlLiBBY2NvcmRpbmcgdG8gdGhlIGNyaXRlcmlhLCBpdCdzIGEgcG9zaXRpdmUgc2lnbmFsIGlmIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gYSBkcml2ZXIgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcywgbGlrZSBVU0IuIEJpbmdvISBgYXRoOWtfaHRjYCBpcyBhIFVTQiB3aXJlbGVzcyBkcml2ZXIsIGFjY2Vzc2libGUgdGhyb3VnaCBVU0IuIFRoZSBgYXRoOWtfcnhfcHJlcGFyZWAgZnVuY3Rpb24gaXMgcGFydCBvZiB0aGUgUlggcGF0aCwgc28gaXQncyBkaXJlY3RseSBleGVjdXRlZCB3aGVuIFVTQiBSWCBwYWNrZXRzIGFycml2ZS4gVGhlIHBhdGNoIGludHJvZHVjZXMgdGhpcyBuZXcgbG9naWMgcGF0aCBzcGVjaWZpY2FsbHkgZm9yIGhhbmRsaW5nIENSQyBlcnJvcnMgaW4gdGhlIGNvbnRleHQgb2Ygc3BlY3RyYWwgc2FtcGxlcywgd2hpY2ggaXMgZGVmaW5pdGVseSByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGluIHRoaXMgZHJpdmVyLiBUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIEZvY3VzU3ltYm9scyBhbmQgRW5hYmxlQ29uZmlncy5cblxuSGVyZSdzIG15IHRoaW5raW5nOlxuKiAgIGBhdGg5a19yeF90YXNrbGV0YDogVGhpcyBpcyB0aGUgdGFza2xldCB0aGF0IGhhbmRsZXMgdGhlIFJYIGJ1ZmZlcnMuIEl0IGNhbGxzIGBhdGg5a19yeF9wcmVwYXJlYCwgbWFraW5nIGl0IGEgY3J1Y2lhbCBlbnRyeSBwb2ludC5cbiogICBgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW5gOiBUaGUgc3RhdGljIGhlbHBlciBmdW5jdGlvbiBpcyBhZGRlZCBpbiBgaHRjX2Rydl90eHJ4LmNgIHRvIGNoZWNrIGlmIHRoZSBsZW5ndGggbWF0Y2hlcyBzYW1wbGUgbGVuZ3RoLiBXZSBuZWVkIHRvIGZpbmQgb3V0IHdoZXRoZXIgdGhpcyBpcyBpbmxpbmVkIG9yIG5vdC4gV2Ugc2hvdWxkIHByb2JhYmx5IGFsc28gaW5jbHVkZSBgYXRoOWtfcnhfdGFza2xldGAgdG8gZW5zdXJlIHRoYXQgdGhpcyBpcyByZWFjaGFibGUuXG4qICAgYGF0aF9jbW5fcHJvY2Vzc19mZnRgOiBUaGlzIGlzIHRoZSBGRlQgcGFyc2luZyBmdW5jdGlvbiB0aGF0J3Mgbm93IGNhbGxlZCB1bmRlciB0aGUgbmV3IGNvbmRpdGlvbi5cblxuTGV0IG1lIGNoZWNrIGlmIGBhdGg5a19yeF9wcmVwYXJlYCBpcyBzdGF0aWMgKGl0IGlzKS4gQWxzbywgYGF0aDlrX3J4X3Rhc2tsZXRgIGlzIG5vbi1zdGF0aWMgKGl0J3MgZWl0aGVyIGV4cG9ydGVkIG9yIGluIGEgaGVhZGVyKS4gSSdsbCBhbHNvIGhhdmUgdG8gY2hlY2sgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYGh0Y19kcnZfdHhyeC5jYCwgbGlrZSBgYXRoOWtfaHRjX3J4X21zZ2AuXG5cblNvLCB0aGUga2V5IGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoIG9wZW5zIHVwIGEgbmV3IGNvZGUgcGF0aCB0cmlnZ2VyZWQgYnkgQ1JDIGVycm9ycywgcG90ZW50aWFsbHkgbGVhZGluZyB0byB0aGUgRkZUIHByb2Nlc3NpbmcuIFRoaXMgbG9va3MgbGlrZSBhIHByb21pc2luZyB0YXJnZXQgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNjIwLCJPdXRwdXRUb2tlbnMiOjU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzkyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDI6NDMuMzM3ODAwNjg0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTM2NTY2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWjAtOV9dKyAuKlxcXFwoLipcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz0yMz1zdGF0aWMgY29uc3QgaW50IHN1YnR5cGVfdHhxX3RvX2h3cVtdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTM5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo0MDppbnQgZ2V0X2h3X3FudW0odTE2IHF1ZXVlLCBpbnQgKmh3cV9tYXApXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTQxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NTY6dm9pZCBhdGg5a19odGNfY2hlY2tfc3RvcF9xdWV1ZXMoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01Ny17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNjctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjY4OnZvaWQgYXRoOWtfaHRjX2NoZWNrX3dha2VfcXVldWVzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNjkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTc4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo3OTppbnQgYXRoOWtfaHRjX3R4X2dldF9zbG90KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtODAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTk0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo5NTp2b2lkIGF0aDlrX2h0Y190eF9jbGVhcl9zbG90KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgaW50IHNsb3QpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTk2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xMDEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjEwMjpzdGF0aWMgaW5saW5lIGVudW0gaHRjX2VuZHBvaW50X2lkIGdldF9odGNfZXBpZChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEwMy1cXHRcXHRcXHRcXHRcXHRcXHR1MTYgcW51bSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz0xMzE9Z2V0X2h0Y19lcGlkX3F1ZXVlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgdTggZXBpZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xNTYtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjE1NzpzdGF0aWMgaW5saW5lIGludCBzdHJpcF9kcnZfaGVhZGVyKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTU4LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTg3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzoxODg6aW50IGF0aF9odGNfdHhxX3VwZGF0ZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIGludCBxbnVtLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xODktXFx0XFx0ICAgICAgIHN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0yMTMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjIxNDpzdGF0aWMgdm9pZCBhdGg5a19odGNfdHhfbWdtdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTIxNS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgYXRoOWtfaHRjX3ZpZiAqYXZwLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTI1OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MjYwOnN0YXRpYyB2b2lkIGF0aDlrX2h0Y190eF9kYXRhKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMjYxLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMzM5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzozNDA6aW50IGF0aDlrX2h0Y190eF9zdGFydChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTM0MS1cXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0zOTEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjM5MjpzdGF0aWMgaW5saW5lIGJvb2wgX19hdGg5a19odGNfY2hlY2tfdHhfYWdncihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTM5My1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBhdGg5a19odGNfc3RhICppc3RhLCB1OCB0aWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNDA0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo0MDU6c3RhdGljIHZvaWQgYXRoOWtfaHRjX2NoZWNrX3R4X2FnZ3Ioc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy00MDYtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNDQ0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo0NDU6c3RhdGljIHZvaWQgYXRoOWtfaHRjX3R4X3Byb2Nlc3Moc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy00NDYtXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNTI4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo1Mjk6c3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h0Y190eF9kcmFpbnEoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01MzAtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKnF1ZXVlKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTUzOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NTM5OnZvaWQgYXRoOWtfaHRjX3R4X2RyYWluKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNTQwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01NzctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjU3ODp2b2lkIGF0aDlrX3R4X2ZhaWxlZF90YXNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNTc5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01OTEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjU5MjpzdGF0aWMgaW5saW5lIGJvb2wgY2hlY2tfY29va2llKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNTkzLVxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNjE3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo2MTg6c3RhdGljIHN0cnVjdCBza19idWZmKiBhdGg5a19odGNfdHhfZ2V0X3BhY2tldChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTYxOS1cXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IF9fd21pX2V2ZW50X3R4c3RhdHVzICp0eHMpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNjQ2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo2NDc6dm9pZCBhdGg5a19odGNfdHhzdGF0dXMoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LCB2b2lkICp3bWlfZXZlbnQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTY0OC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNjg5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo2OTA6dm9pZCBhdGg5a19odGNfdHhlcCh2b2lkICpkcnZfcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNjkxLVxcdFxcdCAgICBlbnVtIGh0Y19lbmRwb2ludF9pZCBlcF9pZCwgYm9vbCB0eG9rKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTcxNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NzE2OnN0YXRpYyBpbmxpbmUgYm9vbCBjaGVja19wYWNrZXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy03MTcte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTczMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NzMzOnN0YXRpYyB2b2lkIGF0aDlrX2h0Y190eF9jbGVhbnVwX3F1ZXVlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNzM0LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICplcGlkX3F1ZXVlKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTc2MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NzYxOnZvaWQgYXRoOWtfaHRjX3R4X2NsZWFudXBfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTc2Mi17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtODA4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo4MDk6aW50IGF0aDlrX3R4X2luaXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy04MTAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTgyMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6ODIyOnZvaWQgYXRoOWtfdHhfY2xlYW51cChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTgyMy17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtODI2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo4Mjc6Ym9vbCBhdGg5a19odGNfdHhxX3NldHVwKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgaW50IHN1YnR5cGUpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTgyOC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtODUxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo4NTI6aW50IGF0aDlrX2h0Y19jYWJxX3NldHVwKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtODUzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy04NjgtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjg2OTp1MzIgYXRoOWtfaHRjX2NhbGNyeGZpbHRlcihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTg3MC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtOTE1LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo5MTY6c3RhdGljIHZvaWQgYXRoOWtfaHRjX29wbW9kZV9pbml0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtOTE3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy05MjktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjkzMDp2b2lkIGF0aDlrX2hvc3RfcnhfaW5pdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTkzMS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtOTM3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo5Mzg6c3RhdGljIGlubGluZSB2b2lkIGNvbnZlcnRfaHRjX2ZsYWcoc3RydWN0IGF0aF9yeF9zdGF0dXMgKnJ4X3N0YXRzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy05MzktXFx0XFx0XFx0XFx0ICAgc3RydWN0IGF0aF9odGNfcnhfc3RhdHVzICpyeHN0YXR1cylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy05NDgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjk0OTpzdGF0aWMgdm9pZCByeF9zdGF0dXNfaHRjX3RvX2F0aChzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnhfc3RhdHMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTk1MC1cXHRcXHRcXHRcXHQgc3RydWN0IGF0aF9odGNfcnhfc3RhdHVzICpyeHN0YXR1cylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy05NzgtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjk3OTpzdGF0aWMgYm9vbCBhdGg5a19odGNfaXNfc3BlY3RyYWxfc2FtcGxlX2xlbihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTk4MC1cXHRcXHRcXHRcXHRcXHQgICAgIHUxNiBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtOTk3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo5OTg6c3RhdGljIGJvb2wgYXRoOWtfcnhfcHJlcGFyZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTk5OS1cXHRcXHRcXHQgICAgIHN0cnVjdCBhdGg5a19odGNfcnhidWYgKnJ4YnVmLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTExMTgtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjExMTk6dm9pZCBhdGg5a19yeF90YXNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTEyMC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTE3Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MTE3Mzp2b2lkIGF0aDlrX2h0Y19yeGVwKHZvaWQgKmRydl9wcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xMTc0LVxcdFxcdCAgICBlbnVtIGh0Y19lbmRwb2ludF9pZCBlcF9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xMjEyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzoxMjEzOnZvaWQgYXRoOWtfcnhfY2xlYW51cChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEyMTQte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEyMjQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjEyMjU6aW50IGF0aDlrX3J4X2luaXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xMjI2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDI6NDMuMzk3MTcxMDZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjIzNDg2MjgwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYXRoOWtfaHRjIFJYIFBhdGggZm9yIFNwZWN0cmFsIFNhbXBsZSBEZXRlY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUga2V5IEZvY3VzU3ltYm9scyBqdW1wIG91dDogYGF0aDlrX3J4X3Rhc2tsZXRgLCBgYXRoOWtfaHRjX3J4ZXBgLCBhbmQgYGF0aF9jbW5fcHJvY2Vzc19mZnRgLiBUaGVzZSBhcmUgdGhlIGNyaXRpY2FsIHBvaW50cyB3aGVyZSB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBSWCBwYXRoLiBTcGVjaWZpY2FsbHksIGBhdGg5a19odGNfcnhlcGAgcHVsbHMgU0tCcyBmcm9tIHRoZSBVU0IgSFRDIGVuZHBvaW50LCBxdWV1ZXMgdGhlbSB0byBgcHJpdi1cdTAwM2VyeC5yeGJ1Zl9xdWV1ZWAsIGFuZCBzY2hlZHVsZXMgdGhlIGByeF90YXNrbGV0YC4gVGhlbiBgYXRoOWtfcnhfdGFza2xldGAga2lja3MgaW4sIGRlcXVldWVzIHRoZSBTS0IsIGFuZCBjYWxscyBgYXRoOWtfcnhfcHJlcGFyZWAuIFdpdGhpbiBgYXRoOWtfcnhfcHJlcGFyZWAsIHdlIGZpbmQgdGhlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCwgc3BlY2lmaWNhbGx5IGBhdGg5a19odGNfaXNfc3BlY3RyYWxfc2FtcGxlX2xlbmAgYW5kIGBhdGhfY21uX3Byb2Nlc3NfZmZ0YC5cblxuTm93LCBsZXQncyB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHRvIG1ha2Ugc3VyZSB3ZSdyZSBlbmFibGluZyBhbGwgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuIFRoZSBiYXNlIHJlcXVpcmVtZW50IHNlZW1zIHRvIGJlIGBBVEg5S19IVENgLCBhbmQgd2UgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBlbmFibGVkLiBgQVRIOUtfSFRDYCBkZXBlbmRzIG9uIGBVU0IgXHUwMDI2XHUwMDI2IE1BQzgwMjExYCwgc28gdGhvc2UgYXJlIGFsc28gdml0YWwuIEZ1cnRoZXIsIHdlIHNlZSBgQVRIOUtfSFRDX0RFQlVHRlNgIChkZXBlbmRlbnQgb24gYEFUSDlLX0hUQyBcdTAwMjZcdTAwMjYgREVCVUdfRlNgKSBhbmQgYEFUSDlLX0NPTU1PTl9TUEVDVFJBTGAgKGRlcGVuZGVudCBvbiBgQVRIOUtfREVCVUdGUyB8fCBBVEg5S19IVENfREVCVUdGU2AsIGFuZCBzZWxlY3RpbmcgYFJFTEFZYCkuIFNvIHRvIGVuc3VyZSB0aGUgZW50aXJlIGZlYXR1cmUgaXMgZW5hYmxlZCwgd2UgbmVlZCB0byBlbnN1cmUgdGhlc2UgYXJlIGVuYWJsZWQ6IFwiQVRIOUtfSFRDXCIsIFwiQVRIOUtfSFRDX0RFQlVHRlNcIiwgYW5kIFwiQVRIOUtfQ09NTU9OX1NQRUNUUkFMXCIuXG5cblRoZSBwYXRjaCdzIHB1cnBvc2UgYmVjb21lcyBjbGVhci4gSXQncyBhYm91dCBpbnRyb2R1Y2luZyBGRlQgc3BlY3RyYWwgc2FtcGxlIGRldGVjdGlvbiB0byBDUkMtZXJyb3JlZCBmcmFtZXMgd2l0aGluIHRoZSBSWCBwcm9jZXNzaW5nIHBhdGggaW4gdGhlIGF0aDlrX2h0YyBVU0Igd2lyZWxlc3MgZHJpdmVyLiBGcmFtZXMgd2l0aCBDUkMgZXJyb3JzIHRoYXQgYWxpZ24gd2l0aCBzcGVjaWZpYyBzcGVjdHJhbCBGRlQgc2FtcGxlIHNpemVzIGFyZSBwYXNzZWQgdG8gYGF0aF9jbW5fcHJvY2Vzc19mZnRgIGZvciBzcGVjdHJhbCBhbmFseXNpcy4gQmVjYXVzZSB0aGlzIGNvZGUgcGF0aCBjYW4gYmUgcmVhY2hlZCB0aHJvdWdoIFVTQiBkZXZpY2UgZW11bGF0aW9uLCBpdCByZXByZXNlbnRzIGEgcG90ZW50aWFsbHkgbmV3IGF0dGFjayBzdXJmYWNlIGR1ZSB0byByZWFjaGFibGUgbW9kaWZpZWQgZXhlY3V0YWJsZSBkcml2ZXIgY29kZSwgYW5kIHRoZXJlZm9yZSB3YXJyYW50cyBmdXp6aW5nLlxuXG5BbHJpZ2h0LCB0aGF0J3MgdGhlIGFuYWx5c2lzLiBUaW1lIHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NTkwLCJPdXRwdXRUb2tlbnMiOjE3NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0Mjo0OS42MzIwMzczNzJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjI5NTczMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRIOUtfSFRDXCIsXG4gICAgXCJBVEg5S19IVENfREVCVUdGU1wiLFxuICAgIFwiQVRIOUtfQ09NTU9OX1NQRUNUUkFMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXRoOWtfcnhfdGFza2xldFwiLFxuICAgIFwiYXRoOWtfaHRjX3J4ZXBcIixcbiAgICBcImF0aF9jbW5fcHJvY2Vzc19mZnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHNwZWN0cmFsIEZGVCBzYW1wbGUgZGV0ZWN0aW9uIGZvciBDUkMtZXJyb3JlZCBmcmFtZXMgaW4gdGhlIFJYIHByb2Nlc3NpbmcgcGF0aCAoYXRoOWtfcnhfcHJlcGFyZSkgb2YgdGhlIGF0aDlrX2h0YyBVU0Igd2lyZWxlc3MgZHJpdmVyLCBkaXJlY3RpbmcgcXVhbGlmeWluZyBmcmFtZXMgaW50byBhdGhfY21uX3Byb2Nlc3NfZmZ0LiBCZWNhdXNlIGF0aDlrX2h0YyBpcyBhIFVTQiBXaS1GaSBkcml2ZXIgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiwgdGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBrZXJuZWwgY29kZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUSDlLX0hUQ1wiLFxuICAgIFwiQVRIOUtfSFRDX0RFQlVHRlNcIixcbiAgICBcIkFUSDlLX0NPTU1PTl9TUEVDVFJBTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImF0aDlrX3J4X3Rhc2tsZXRcIixcbiAgICBcImF0aDlrX2h0Y19yeGVwXCIsXG4gICAgXCJhdGhfY21uX3Byb2Nlc3NfZmZ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzcGVjdHJhbCBGRlQgc2FtcGxlIGRldGVjdGlvbiBmb3IgQ1JDLWVycm9yZWQgZnJhbWVzIGluIHRoZSBSWCBwcm9jZXNzaW5nIHBhdGggKGF0aDlrX3J4X3ByZXBhcmUpIG9mIHRoZSBhdGg5a19odGMgVVNCIHdpcmVsZXNzIGRyaXZlciwgZGlyZWN0aW5nIHF1YWxpZnlpbmcgZnJhbWVzIGludG8gYXRoX2Ntbl9wcm9jZXNzX2ZmdC4gQmVjYXVzZSBhdGg5a19odGMgaXMgYSBVU0IgV2ktRmkgZHJpdmVyIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24sIHRoaXMgdG91Y2hlcyByZWFjaGFibGUga2VybmVsIGNvZGUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDI6NDkuNzE4MzQyNjc1WiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTk3NDE3MjA4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQyOjQ5LjcxODk0NjQ3NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM5OTczNTYyODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHNwZWN0cmFsIHNjYW4gc2FtcGxlIGxlbmd0aCB2YWxpZGF0aW9uIHZpYSBhdGg5a19odGNfaXNfc3BlY3RyYWxfc2FtcGxlX2xlbigpIGFuZCBmb3J3YXJkcyBDUkMtZXJyb3JlZCBmcmFtZXMgd2l0aCBtYXRjaGluZyBsZW5ndGhzIHRvIGF0aF9jbW5fcHJvY2Vzc19mZnQoKSBpbiBhdGg5a19yeF9wcmVwYXJlKCkuIEFsbCB2YXJpYWJsZXMgYW5kIHN0cnVjdHVyZSBmaWVsZHMgdXNlZCAoZS5nLiwgcnNfZGF0YWxlbiwgcnhfc3RhdHMucnNfcGh5ZXJyLCBjaGFuX3R5cGUsIGZmdF9sZW4pIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMsIHBlcmZvcm0gYW55IGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG9yIGV4cG9zZSBwYWRkaW5nL3VuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgKHN1Y2ggYXMgYnVmZmVyIGJvdW5kcyBvciBwb2ludGVyIGhhbmRsaW5nKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5Yzg3MTJhZDE0MWVjNzUwZmIxZjg1ZGZhZDNmYzdhMWJlNjg4ZjI0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwMjo0MTo0NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguY1xuaW5kZXggYmVkN2VhMjQyNWEwZS4uZjIxY2ZjMDM0MjZiMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jXG5AQCAtOTY5LDYgKzk2OSwzMiBAQCBzdGF0aWMgdm9pZCByeF9zdGF0dXNfaHRjX3RvX2F0aChzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnhfc3RhdHMsXG4gXHRjb252ZXJ0X2h0Y19mbGFnKHJ4X3N0YXRzLCByeHN0YXR1cyk7XG4gfVxuIFxuKy8qXG4rICogVGhlIGZpcm13YXJlIHJlcG9ydHMgYSBmcmFtZSB0aGF0IGZhaWxlZCBpdHMgQ1JDIGFzIGEgQ1JDIGVycm9yIGV2ZW4gd2hlblxuKyAqIHRoZSBQSFkgZXJyb3IgYml0IGlzIHNldCBhcyB3ZWxsLCBzbyB1bmRlciBpbnRlcmZlcmVuY2Ugc3BlY3RyYWwgc2FtcGxlc1xuKyAqIHJlYWNoIHRoZSBob3N0IGFzIENSQyBlcnJvcnMuIEEgc2FtcGxlIGlzIHJlY29nbmlzYWJsZSBieSBpdHMgc2l6ZTogdGhlXG4rICogRkZUIHJlcG9ydCBsZW5ndGggZm9yIHRoZSBjaGFubmVsIHdpZHRoLCBwbHVzIG9yIG1pbnVzIHRoZSB0d28gYnl0ZXMgdGhlXG4rICogTUFDIG1heSBhZGQgb3IgZHJvcC5cbisgKi9cbitzdGF0aWMgYm9vbCBhdGg5a19odGNfaXNfc3BlY3RyYWxfc2FtcGxlX2xlbihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG4rXHRcdFx0XHRcdCAgICAgdTE2IGxlbilcbit7XG4rXHRlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5fdHlwZTtcbitcdHUxNiBmZnRfbGVuO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlc3BlY19wcml2LnNwZWN0cmFsX21vZGUgPT0gU1BFQ1RSQUxfRElTQUJMRUQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGNoYW5fdHlwZSA9IGNmZzgwMjExX2dldF9jaGFuZGVmX3R5cGUoXHUwMDI2cHJpdi1cdTAwM2Vody1cdTAwM2Vjb25mLmNoYW5kZWYpO1xuK1x0aWYgKGNoYW5fdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0ME1JTlVTIHx8XG4rXHQgICAgY2hhbl90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwUExVUylcbitcdFx0ZmZ0X2xlbiA9IFNQRUNUUkFMX0hUMjBfNDBfVE9UQUxfREFUQV9MRU47XG4rXHRlbHNlXG4rXHRcdGZmdF9sZW4gPSBTUEVDVFJBTF9IVDIwX1RPVEFMX0RBVEFfTEVOO1xuK1xuK1x0cmV0dXJuIGxlbiArIDEgXHUwMDNlPSBmZnRfbGVuIFx1MDAyNlx1MDAyNiBsZW4gXHUwMDNjPSBmZnRfbGVuICsgMjtcbit9XG4rXG4gc3RhdGljIGJvb2wgYXRoOWtfcnhfcHJlcGFyZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgYXRoOWtfaHRjX3J4YnVmICpyeGJ1ZixcbiBcdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpXG5AQCAtMTA1Miw2ICsxMDc4LDE4IEBAIHN0YXRpYyBib29sIGF0aDlrX3J4X3ByZXBhcmUoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuIFx0XHRnb3RvIHJ4X25leHQ7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogTGV0IHRoZSBGRlQgcGFyc2VyIGRlY2lkZSB3aGV0aGVyIGEgQ1JDIGVycm9yIG9mIHNhbXBsZSBzaXplIGlzIGFcbitcdCAqIHNhbXBsZTsgaXQgdmFsaWRhdGVzIHRoZSBjb250ZW50cyBhbmQgcmV0dXJucyAwIGZvciBhbnl0aGluZyBlbHNlLlxuK1x0ICovXG4rXHRpZiAodW5saWtlbHkocnhfc3RhdHMucnNfc3RhdHVzIFx1MDAyNiBBVEg5S19SWEVSUl9DUkMpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKHByaXYsIHJzX2RhdGFsZW4pKSB7XG4rXHRcdHJ4X3N0YXRzLnJzX3BoeWVyciA9IEFUSDlLX1BIWUVSUl9SQURBUjtcbitcdFx0aWYgKGF0aF9jbW5fcHJvY2Vzc19mZnQoXHUwMDI2cHJpdi1cdTAwM2VzcGVjX3ByaXYsIGhkciwgXHUwMDI2cnhfc3RhdHMsXG4rXHRcdFx0XHRcdHJ4X3N0YXR1cy1cdTAwM2VtYWN0aW1lKSlcbitcdFx0XHRnb3RvIHJ4X25leHQ7XG4rXHR9XG4rXG4gXHRpZiAoIWF0aDlrX2Ntbl9yeF9hY2NlcHQoY29tbW9uLCBoZHIsIHJ4X3N0YXR1cywgXHUwMDI2cnhfc3RhdHMsXG4gXHRcdFx0XHUwMDI2ZGVjcnlwdF9lcnJvciwgcHJpdi1cdTAwM2VyeGZpbHRlcikpXG4gXHRcdGdvdG8gcnhfbmV4dDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQyOjQ5LjcxODk0NzQ4NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTYyMzc0ODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYXRoOWsgUlggUGF0aCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgYXBwcm9hY2ggaXMgdG8gdXNlIGBncmVwcGVyYCBhbmQgYHJlYWQtZmlsZWAgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIHNlY3Rpb25zLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjaGFuZ2UgaW1wYWN0cyB0aGUgZGF0YSBmbG93LCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBgYXRoOWtfcnhfcHJlcGFyZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguY2Agc2luY2UgdGhhdCBzZWVtcyBsaWtlIHRoZSByZWxldmFudCBmaWxlLiBJJ2xsIHJlYWQgYXJvdW5kIGxpbmVzIDk2OSB0byAxMDgwIG9mIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmNgIHRvIHNlZSBob3cgdGhlIGNvZGUgZnVuY3Rpb25zIGFyb3VuZCB0aGF0IHBhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MzgsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQyOjU0LjI4MTMyNTQ3N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk2MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5NjA6XFx0XFxuIDk2MTpcXHRcXHRtZW1jcHkocnhfc3RhdHMtXFx1MDAzZXJzX3Jzc2lfY3RsLCByeHN0YXR1cy1cXHUwMDNlcnNfcnNzaV9jdGwsXFxuIDk2MjpcXHRcXHRcXHRzaXplb2Yocnhfc3RhdHMtXFx1MDAzZXJzX3Jzc2lfY3RsKSk7XFxuIDk2MzpcXHRcXHRtZW1jcHkocnhfc3RhdHMtXFx1MDAzZXJzX3Jzc2lfZXh0LCByeHN0YXR1cy1cXHUwMDNlcnNfcnNzaV9leHQsXFxuIDk2NDpcXHRcXHRcXHRzaXplb2Yocnhfc3RhdHMtXFx1MDAzZXJzX3Jzc2lfZXh0KSk7XFxuIDk2NTpcXHRcXG4gOTY2OlxcdFxcdHJ4X3N0YXRzLVxcdTAwM2Vyc19pc2FnZ3JcXHQ9IHJ4c3RhdHVzLVxcdTAwM2Vyc19pc2FnZ3I7XFxuIDk2NzpcXHRcXHRyeF9zdGF0cy1cXHUwMDNlcnNfbW9yZWFnZ3JcXHQ9IHJ4c3RhdHVzLVxcdTAwM2Vyc19tb3JlYWdncjtcXG4gOTY4OlxcdFxcdHJ4X3N0YXRzLVxcdTAwM2Vyc19udW1fZGVsaW1zXFx0PSByeHN0YXR1cy1cXHUwMDNlcnNfbnVtX2RlbGltcztcXG4gOTY5OlxcdFxcdGNvbnZlcnRfaHRjX2ZsYWcocnhfc3RhdHMsIHJ4c3RhdHVzKTtcXG4gOTcwOlxcdH1cXG4gOTcxOlxcdFxcbiA5NzI6XFx0LypcXG4gOTczOlxcdCAqIFRoZSBmaXJtd2FyZSByZXBvcnRzIGEgZnJhbWUgdGhhdCBmYWlsZWQgaXRzIENSQyBhcyBhIENSQyBlcnJvciBldmVuIHdoZW5cXG4gOTc0OlxcdCAqIHRoZSBQSFkgZXJyb3IgYml0IGlzIHNldCBhcyB3ZWxsLCBzbyB1bmRlciBpbnRlcmZlcmVuY2Ugc3BlY3RyYWwgc2FtcGxlc1xcbiA5NzU6XFx0ICogcmVhY2ggdGhlIGhvc3QgYXMgQ1JDIGVycm9ycy4gQSBzYW1wbGUgaXMgcmVjb2duaXNhYmxlIGJ5IGl0cyBzaXplOiB0aGVcXG4gOTc2OlxcdCAqIEZGVCByZXBvcnQgbGVuZ3RoIGZvciB0aGUgY2hhbm5lbCB3aWR0aCwgcGx1cyBvciBtaW51cyB0aGUgdHdvIGJ5dGVzIHRoZVxcbiA5Nzc6XFx0ICogTUFDIG1heSBhZGQgb3IgZHJvcC5cXG4gOTc4OlxcdCAqL1xcbiA5Nzk6XFx0c3RhdGljIGJvb2wgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW4oc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbiA5ODA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB1MTYgbGVuKVxcbiA5ODE6XFx0e1xcbiA5ODI6XFx0XFx0ZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFuX3R5cGU7XFxuIDk4MzpcXHRcXHR1MTYgZmZ0X2xlbjtcXG4gOTg0OlxcdFxcbiA5ODU6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXNwZWNfcHJpdi5zcGVjdHJhbF9tb2RlID09IFNQRUNUUkFMX0RJU0FCTEVEKVxcbiA5ODY6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA5ODc6XFx0XFxuIDk4ODpcXHRcXHRjaGFuX3R5cGUgPSBjZmc4MDIxMV9nZXRfY2hhbmRlZl90eXBlKFxcdTAwMjZwcml2LVxcdTAwM2Vody1cXHUwMDNlY29uZi5jaGFuZGVmKTtcXG4gOTg5OlxcdFxcdGlmIChjaGFuX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUyB8fFxcbiA5OTA6XFx0XFx0ICAgIGNoYW5fdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0MFBMVVMpXFxuIDk5MTpcXHRcXHRcXHRmZnRfbGVuID0gU1BFQ1RSQUxfSFQyMF80MF9UT1RBTF9EQVRBX0xFTjtcXG4gOTkyOlxcdFxcdGVsc2VcXG4gOTkzOlxcdFxcdFxcdGZmdF9sZW4gPSBTUEVDVFJBTF9IVDIwX1RPVEFMX0RBVEFfTEVOO1xcbiA5OTQ6XFx0XFxuIDk5NTpcXHRcXHRyZXR1cm4gbGVuICsgMSBcXHUwMDNlPSBmZnRfbGVuIFxcdTAwMjZcXHUwMDI2IGxlbiBcXHUwMDNjPSBmZnRfbGVuICsgMjtcXG4gOTk2OlxcdH1cXG4gOTk3OlxcdFxcbiA5OTg6XFx0c3RhdGljIGJvb2wgYXRoOWtfcnhfcHJlcGFyZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuIDk5OTpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBhdGg5a19odGNfcnhidWYgKnJ4YnVmLFxcbjEwMDA6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKVxcbjEwMDE6XFx0XFxuMTAwMjpcXHR7XFxuMTAwMzpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyO1xcbjEwMDQ6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwcml2LVxcdTAwM2VodztcXG4xMDA1OlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSByeGJ1Zi1cXHUwMDNlc2tiO1xcbjEwMDY6XFx0XFx0c3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihwcml2LVxcdTAwM2VhaCk7XFxuMTAwNzpcXHRcXHRzdHJ1Y3QgYXRoX2h3ICphaCA9IGNvbW1vbi1cXHUwMDNlYWg7XFxuMTAwODpcXHRcXHRzdHJ1Y3QgYXRoX2h0Y19yeF9zdGF0dXMgKnJ4c3RhdHVzO1xcbjEwMDk6XFx0XFx0c3RydWN0IGF0aF9yeF9zdGF0dXMgcnhfc3RhdHM7XFxuMTAxMDpcXHRcXHRib29sIGRlY3J5cHRfZXJyb3IgPSBmYWxzZTtcXG4xMDExOlxcdFxcdHUxNiByc19kYXRhbGVuO1xcbjEwMTI6XFx0XFx0Ym9vbCBpc19waHllcnI7XFxuMTAxMzpcXHRcXG4xMDE0OlxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIEhUQ19SWF9GUkFNRV9IRUFERVJfU0laRSkge1xcbjEwMTU6XFx0XFx0XFx0YXRoX2Vycihjb21tb24sIFxcXCJDb3JydXB0ZWQgUlggZnJhbWUsIGRyb3BwaW5nIChsZW46ICVkKVxcXFxuXFxcIixcXG4xMDE2OlxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlbGVuKTtcXG4xMDE3OlxcdFxcdFxcdGdvdG8gcnhfbmV4dDtcXG4xMDE4OlxcdFxcdH1cXG4xMDE5OlxcdFxcbjEwMjA6XFx0XFx0cnhzdGF0dXMgPSAoc3RydWN0IGF0aF9odGNfcnhfc3RhdHVzICopc2tiLVxcdTAwM2VkYXRhO1xcbjEwMjE6XFx0XFxuMTAyMjpcXHRcXHRyc19kYXRhbGVuID0gYmUxNl90b19jcHUocnhzdGF0dXMtXFx1MDAzZXJzX2RhdGFsZW4pO1xcbjEwMjM6XFx0XFx0aWYgKHVubGlrZWx5KHJzX2RhdGFsZW4gLVxcbjEwMjQ6XFx0XFx0ICAgIChza2ItXFx1MDAzZWxlbiAtIEhUQ19SWF9GUkFNRV9IRUFERVJfU0laRSkgIT0gMCkpIHtcXG4xMDI1OlxcdFxcdFxcdGF0aF9lcnIoY29tbW9uLFxcbjEwMjY6XFx0XFx0XFx0XFx0XFxcIkNvcnJ1cHRlZCBSWCBkYXRhIGxlbiwgZHJvcHBpbmcgKGRsZW46ICVkLCBza2JsZW46ICVkKVxcXFxuXFxcIixcXG4xMDI3OlxcdFxcdFxcdFxcdHJzX2RhdGFsZW4sIHNrYi1cXHUwMDNlbGVuKTtcXG4xMDI4OlxcdFxcdFxcdGdvdG8gcnhfbmV4dDtcXG4xMDI5OlxcdFxcdH1cXG4xMDMwOlxcdFxcbjEwMzE6XFx0XFx0aXNfcGh5ZXJyID0gcnhzdGF0dXMtXFx1MDAzZXJzX3N0YXR1cyBcXHUwMDI2IEFUSDlLX1JYRVJSX1BIWTtcXG4xMDMyOlxcdFxcdC8qXFxuMTAzMzpcXHRcXHQgKiBEaXNjYXJkIHplcm8tbGVuZ3RoIHBhY2tldHMgYW5kIHBhY2tldHMgc21hbGxlciB0aGFuIGFuIEFDS1xcbjEwMzQ6XFx0XFx0ICogd2hpY2ggYXJlIG5vdCBQSFlfRVJST1IgKHNob3J0IHJhZGFyIHB1bHNlcyBoYXZlIGEgbGVuZ3RoIG9mIDMpXFxuMTAzNTpcXHRcXHQgKi9cXG4xMDM2OlxcdFxcdGlmICh1bmxpa2VseSghcnNfZGF0YWxlbiB8fCAocnNfZGF0YWxlbiBcXHUwMDNjIDEwIFxcdTAwMjZcXHUwMDI2ICFpc19waHllcnIpKSkge1xcbjEwMzc6XFx0XFx0XFx0YXRoX2RiZyhjb21tb24sIEFOWSxcXG4xMDM4OlxcdFxcdFxcdFxcdFxcXCJTaG9ydCBSWCBkYXRhIGxlbiwgZHJvcHBpbmcgKGRsZW46ICVkKVxcXFxuXFxcIixcXG4xMDM5OlxcdFxcdFxcdFxcdHJzX2RhdGFsZW4pO1xcbjEwNDA6XFx0XFx0XFx0Z290byByeF9uZXh0O1xcbjEwNDE6XFx0XFx0fVxcbjEwNDI6XFx0XFxuMTA0MzpcXHRcXHRpZiAocnhzdGF0dXMtXFx1MDAzZXJzX2tleWl4IFxcdTAwM2U9IEFUSF9LRVlNQVggXFx1MDAyNlxcdTAwMjZcXG4xMDQ0OlxcdFxcdCAgICByeHN0YXR1cy1cXHUwMDNlcnNfa2V5aXggIT0gQVRIOUtfUlhLRVlJWF9JTlZBTElEKSB7XFxuMTA0NTpcXHRcXHRcXHRhdGhfZGJnKGNvbW1vbiwgQU5ZLFxcbjEwNDY6XFx0XFx0XFx0XFx0XFxcIkludmFsaWQga2V5aXgsIGRyb3BwaW5nIChrZXlpeDogJWQpXFxcXG5cXFwiLFxcbjEwNDc6XFx0XFx0XFx0XFx0cnhzdGF0dXMtXFx1MDAzZXJzX2tleWl4KTtcXG4xMDQ4OlxcdFxcdFxcdGdvdG8gcnhfbmV4dDtcXG4xMDQ5OlxcdFxcdH1cXG4xMDUwOlxcdFxcbjEwNTE6XFx0XFx0LyogR2V0IHRoZSBSWCBzdGF0dXMgaW5mb3JtYXRpb24gKi9cXG4xMDUyOlxcdFxcbjEwNTM6XFx0XFx0bWVtc2V0KHJ4X3N0YXR1cywgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzKSk7XFxuMTA1NDpcXHRcXG4xMDU1OlxcdFxcdC8qIENvcHkgZXZlcnl0aGluZyBmcm9tIGF0aF9odGNfcnhfc3RhdHVzIChIVENfUlhfRlJBTUVfSEVBREVSKS5cXG4xMDU2OlxcdFxcdCAqIEFmdGVyIHRoaXMsIHdlIGNhbiBkcm9wIHRoaXMgcGFydCBvZiBza2IuICovXFxuMTA1NzpcXHRcXHRyeF9zdGF0dXNfaHRjX3RvX2F0aChcXHUwMDI2cnhfc3RhdHMsIHJ4c3RhdHVzKTtcXG4xMDU4OlxcdFxcdGF0aDlrX2h0Y19lcnJfc3RhdF9yeChwcml2LCBcXHUwMDI2cnhfc3RhdHMpO1xcbjEwNTk6XFx0XFx0cnhfc3RhdHVzLVxcdTAwM2VtYWN0aW1lID0gYmU2NF90b19jcHUocnhzdGF0dXMtXFx1MDAzZXJzX3RzdGFtcCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQyOjU0LjI4MTQ2MjUzN1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODU2MzM1MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIHRoZSBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGBodGNfZHJ2X3R4cnguY2AgZm9yIERlZXBlciBJbnNpZ2h0KipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gbGluZXMgZnJvbSAxMDYwIG9ud2FyZCBpbiBgaHRjX2Rydl90eHJ4LmNgLiBJIG5lZWQgYSBjbG9zZXIgbG9vayBhdCB0aGlzIHNlY3Rpb24sIGFuZCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ29pbmcgbGluZSBieSBsaW5lLiBJIHN1c3BlY3QgdGhpcyBpcyB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24gaGFuZGxpbmcgbG9naWMgaXMuIEknbSBob3BpbmcgdG8gZGlzY292ZXIgc29tZSBrZXkgZWxlbWVudHMgd2l0aGluIHRoaXMgZmlsZSwgYXMgd2VsbCBhcyBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSBsZXZlbCBkZXNpZ24uIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGRpZyB1cCwgc2hhbGwgd2U/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MzYsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQyOjU2LjEzNzgwMTg1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA2MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA2MDpcXHRcXHRza2JfcHVsbChza2IsIEhUQ19SWF9GUkFNRV9IRUFERVJfU0laRSk7XFxuMTA2MTpcXHRcXG4xMDYyOlxcdFxcdC8qXFxuMTA2MzpcXHRcXHQgKiBldmVyeXRoaW5nIGJ1dCB0aGUgcmF0ZSBpcyBjaGVja2VkIGhlcmUsIHRoZSByYXRlIGNoZWNrIGlzIGRvbmVcXG4xMDY0OlxcdFxcdCAqIHNlcGFyYXRlbHkgdG8gYXZvaWQgZG9pbmcgdHdvIGxvb2t1cHMgZm9yIGEgcmF0ZSBmb3IgZWFjaCBmcmFtZS5cXG4xMDY1OlxcdFxcdCAqL1xcbjEwNjY6XFx0XFx0aGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLVxcdTAwM2VkYXRhO1xcbjEwNjc6XFx0XFxuMTA2ODpcXHRcXHQvKlxcbjEwNjk6XFx0XFx0ICogUHJvY2VzcyBQSFkgZXJyb3JzIGFuZCByZXR1cm4gc28gdGhhdCB0aGUgcGFja2V0XFxuMTA3MDpcXHRcXHQgKiBjYW4gYmUgZHJvcHBlZC5cXG4xMDcxOlxcdFxcdCAqL1xcbjEwNzI6XFx0XFx0aWYgKHVubGlrZWx5KGlzX3BoeWVycikpIHtcXG4xMDczOlxcdFxcdFxcdC8qIFRPRE86IE5vdCB1c2luZyBERlMgcHJvY2Vzc2luZyBub3cuICovXFxuMTA3NDpcXHRcXHRcXHRpZiAoYXRoX2Ntbl9wcm9jZXNzX2ZmdChcXHUwMDI2cHJpdi1cXHUwMDNlc3BlY19wcml2LCBoZHIsXFxuMTA3NTpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnJ4X3N0YXRzLCByeF9zdGF0dXMtXFx1MDAzZW1hY3RpbWUpKSB7XFxuMTA3NjpcXHRcXHRcXHRcXHQvKiBUT0RPOiBDb2RlIHRvIGNvbGxlY3Qgc3BlY3RyYWwgc2NhbiBzdGF0aXN0aWNzICovXFxuMTA3NzpcXHRcXHRcXHR9XFxuMTA3ODpcXHRcXHRcXHRnb3RvIHJ4X25leHQ7XFxuMTA3OTpcXHRcXHR9XFxuMTA4MDpcXHRcXG4xMDgxOlxcdFxcdC8qXFxuMTA4MjpcXHRcXHQgKiBMZXQgdGhlIEZGVCBwYXJzZXIgZGVjaWRlIHdoZXRoZXIgYSBDUkMgZXJyb3Igb2Ygc2FtcGxlIHNpemUgaXMgYVxcbjEwODM6XFx0XFx0ICogc2FtcGxlOyBpdCB2YWxpZGF0ZXMgdGhlIGNvbnRlbnRzIGFuZCByZXR1cm5zIDAgZm9yIGFueXRoaW5nIGVsc2UuXFxuMTA4NDpcXHRcXHQgKi9cXG4xMDg1OlxcdFxcdGlmICh1bmxpa2VseShyeF9zdGF0cy5yc19zdGF0dXMgXFx1MDAyNiBBVEg5S19SWEVSUl9DUkMpIFxcdTAwMjZcXHUwMDI2XFxuMTA4NjpcXHRcXHQgICAgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW4ocHJpdiwgcnNfZGF0YWxlbikpIHtcXG4xMDg3OlxcdFxcdFxcdHJ4X3N0YXRzLnJzX3BoeWVyciA9IEFUSDlLX1BIWUVSUl9SQURBUjtcXG4xMDg4OlxcdFxcdFxcdGlmIChhdGhfY21uX3Byb2Nlc3NfZmZ0KFxcdTAwMjZwcml2LVxcdTAwM2VzcGVjX3ByaXYsIGhkciwgXFx1MDAyNnJ4X3N0YXRzLFxcbjEwODk6XFx0XFx0XFx0XFx0XFx0XFx0cnhfc3RhdHVzLVxcdTAwM2VtYWN0aW1lKSlcXG4xMDkwOlxcdFxcdFxcdFxcdGdvdG8gcnhfbmV4dDtcXG4xMDkxOlxcdFxcdH1cXG4xMDkyOlxcdFxcbjEwOTM6XFx0XFx0aWYgKCFhdGg5a19jbW5fcnhfYWNjZXB0KGNvbW1vbiwgaGRyLCByeF9zdGF0dXMsIFxcdTAwMjZyeF9zdGF0cyxcXG4xMDk0OlxcdFxcdFxcdFxcdFxcdTAwMjZkZWNyeXB0X2Vycm9yLCBwcml2LVxcdTAwM2VyeGZpbHRlcikpXFxuMTA5NTpcXHRcXHRcXHRnb3RvIHJ4X25leHQ7XFxuMTA5NjpcXHRcXG4xMDk3OlxcdFxcdGF0aDlrX2Ntbl9yeF9za2JfcG9zdHByb2Nlc3MoY29tbW9uLCBza2IsIFxcdTAwMjZyeF9zdGF0cyxcXG4xMDk4OlxcdFxcdFxcdFxcdFxcdCAgICAgcnhfc3RhdHVzLCBkZWNyeXB0X2Vycm9yKTtcXG4xMDk5OlxcdFxcbjExMDA6XFx0XFx0aWYgKGF0aDlrX2Ntbl9wcm9jZXNzX3JhdGUoY29tbW9uLCBodywgXFx1MDAyNnJ4X3N0YXRzLCByeF9zdGF0dXMpKVxcbjExMDE6XFx0XFx0XFx0Z290byByeF9uZXh0O1xcbjExMDI6XFx0XFxuMTEwMzpcXHRcXHRyeF9zdGF0cy5pc19teWJlYWNvbiA9IGF0aF9pc19teWJlYWNvbihjb21tb24sIGhkcik7XFxuMTEwNDpcXHRcXHRhdGg5a19jbW5fcHJvY2Vzc19yc3NpKGNvbW1vbiwgaHcsIFxcdTAwMjZyeF9zdGF0cywgcnhfc3RhdHVzKTtcXG4xMTA1OlxcdFxcbjExMDY6XFx0XFx0cnhfc3RhdHVzLVxcdTAwM2ViYW5kID0gYWgtXFx1MDAzZWN1cmNoYW4tXFx1MDAzZWNoYW4tXFx1MDAzZWJhbmQ7XFxuMTEwNzpcXHRcXHRyeF9zdGF0dXMtXFx1MDAzZWZyZXEgPSBhaC1cXHUwMDNlY3VyY2hhbi1cXHUwMDNlY2hhbi1cXHUwMDNlY2VudGVyX2ZyZXE7XFxuMTEwODpcXHRcXHRyeF9zdGF0dXMtXFx1MDAzZWFudGVubmEgPSByeF9zdGF0cy5yc19hbnRlbm5hO1xcbjExMDk6XFx0XFx0cnhfc3RhdHVzLVxcdTAwM2VmbGFnIHw9IFJYX0ZMQUdfTUFDVElNRV9FTkQ7XFxuMTExMDpcXHRcXG4xMTExOlxcdFxcdHJldHVybiB0cnVlO1xcbjExMTI6XFx0cnhfbmV4dDpcXG4xMTEzOlxcdFxcdHJldHVybiBmYWxzZTtcXG4xMTE0OlxcdH1cXG4xMTE1OlxcdFxcbjExMTY6XFx0LypcXG4xMTE3OlxcdCAqIEZJWE1FOiBIYW5kbGUgRkxVU0ggbGF0ZXIgb24uXFxuMTExODpcXHQgKi9cXG4xMTE5OlxcdHZvaWQgYXRoOWtfcnhfdGFza2xldChzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQyOjU2LjEzNzk1MjM5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2ODYxMzYyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIEZGVCBhbmQgUlggU3RhdHMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggdGhlIEZhc3QgRm91cmllciBUcmFuc2Zvcm0gcHJvY2Vzc2luZyBhbmQgdGhlIHJlY2VpdmVyIHN0YXRpc3RpY3MgaGVyZS4gRmlyc3QsIEkgd2FudCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGF0aF9jbW5fcHJvY2Vzc19mZnRgIGZ1bmN0aW9uLiBXaGF0IGlzIGl0IGRvaW5nIGV4YWN0bHk/IEFuZCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiBgcnhfc3RhdHNgLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4gTm93LCBsZXQncyBzZWFyY2ggZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAsIHRvIHNlZSBpdCBpbiBhY3Rpb24sIGFuZCBhbHNvIGh1bnQgZG93biBgcnhfc3RhdHVzX2h0Y190b19hdGhgLiBIb3BlZnVsbHksIGRpZ2dpbmcgaW50byB0aG9zZSB3aWxsIGdpdmUgbWUgdGhlIGluc2lnaHRzIEkgbmVlZCB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDQzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0Mjo1Ny44MjQwOTE4MDRaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDQxNjI3OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoX2Ntbl9wcm9jZXNzX2ZmdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM9NDQ5PWF0aF9jbW5faXNfZmZ0X2J1Zl9mdWxsKHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy00NjgtLyogcmV0dXJucyAxIGlmIHRoaXMgd2FzIGEgc3BlY3RyYWwgZnJhbWUsIGV2ZW4gaWYgbm90IGhhbmRsZWQuICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjQ2OTppbnQgYXRoX2Ntbl9wcm9jZXNzX2ZmdChzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTQ3MC1cXHRcXHQgICAgc3RydWN0IGF0aF9yeF9zdGF0dXMgKnJzLCB1NjQgdHNmKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTY4My19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjY4NDpFWFBPUlRfU1lNQk9MKGF0aF9jbW5fcHJvY2Vzc19mZnQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy02ODUtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg9MTc3PWludCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNzktXFx0XFx0XFx0ICAgICAgIGVudW0gc3BlY3RyYWxfbW9kZSBzcGVjdHJhbF9tb2RlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTgwOmludCBhdGhfY21uX3Byb2Nlc3NfZmZ0KHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdiwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTgxLVxcdFxcdCAgICBzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnMsIHU2NCB0c2YpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oPTE5Mj1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fdHJpZ2dlcihzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE5Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTk3OnN0YXRpYyBpbmxpbmUgaW50IGF0aF9jbW5fcHJvY2Vzc19mZnQoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xOTgtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz05OTg9c3RhdGljIGJvb2wgYXRoOWtfcnhfcHJlcGFyZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTA3My1cXHRcXHQvKiBUT0RPOiBOb3QgdXNpbmcgREZTIHByb2Nlc3Npbmcgbm93LiAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzoxMDc0OlxcdFxcdGlmIChhdGhfY21uX3Byb2Nlc3NfZmZ0KFxcdTAwMjZwcml2LVxcdTAwM2VzcGVjX3ByaXYsIGhkcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTA3NS1cXHRcXHRcXHRcXHQgICAgXFx1MDAyNnJ4X3N0YXRzLCByeF9zdGF0dXMtXFx1MDAzZW1hY3RpbWUpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTA4Ny1cXHRcXHRyeF9zdGF0cy5yc19waHllcnIgPSBBVEg5S19QSFlFUlJfUkFEQVI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjEwODg6XFx0XFx0aWYgKGF0aF9jbW5fcHJvY2Vzc19mZnQoXFx1MDAyNnByaXYtXFx1MDAzZXNwZWNfcHJpdiwgaGRyLCBcXHUwMDI2cnhfc3RhdHMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEwODktXFx0XFx0XFx0XFx0XFx0cnhfc3RhdHVzLVxcdTAwM2VtYWN0aW1lKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmM9ODA2PXN0YXRpYyBpbnQgYXRoOWtfcnhfc2tiX3ByZXByb2Nlc3Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jLTg4My1cXHRcXHR9IGVsc2UgaWYgKHNjLVxcdTAwM2VzcGVjX3ByaXYuc3BlY3RyYWxfbW9kZSAhPSBTUEVDVFJBTF9ESVNBQkxFRCBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmM6ODg0OlxcdFxcdFxcdCAgIGF0aF9jbW5fcHJvY2Vzc19mZnQoXFx1MDAyNnNjLVxcdTAwM2VzcGVjX3ByaXYsIGhkciwgcnhfc3RhdHMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYy04ODUtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHJ4X3N0YXR1cy1cXHUwMDNlbWFjdGltZSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDM6MDAuMzY4MjYwODE1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3Njc3NzM3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCBzdW1tYXJpemluZyB0aGUgcHJvbXB0LCBrZWVwaW5nIGluIG1pbmQgbXkgZmllbGQgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyB0aGUgYHJ4X3N0YXR1c19odGNfdG9fYXRoYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIG15IGZpcnN0IHN0ZXAgaXMgdG8gemVybyBpbiBvbiB0aGlzIGByeF9zdGF0dXNfaHRjX3RvX2F0aGAgZnVuY3Rpb24uIFRoZSBmaWxlbmFtZSwgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguY2AsIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgbGlrZWx5IGEgY3JpdGljYWwgcGllY2UgaW4gdGhlIEF0aGVyb3MgKG5vdyBRdWFsY29tbSBBdGhlcm9zKSB3aXJlbGVzcyBkcml2ZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBhdGg5a2AgZmFtaWx5LCBhbmQgZGVhbGluZyB3aXRoIHRoZSBIYXJkd2FyZSBUcmFuc3BvcnQgQ29udGV4dCAoSFRDKSBsYXllciBmb3IgaGFuZGxpbmcgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgb3BlcmF0aW9ucy4gVGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmLCBgcnhfc3RhdHVzX2h0Y190b19hdGhgLCBzdWdnZXN0cyBpdHMgcm9sZSBpcyB0cmFuc2Zvcm1pbmcgb3IgaW50ZXJwcmV0aW5nIHJlY2VpdmUgc3RhdHVzIGluZm9ybWF0aW9uIGZyb20gdGhlIEhUQyBsYXllciBpbnRvIGEgZm9ybWF0IHVzYWJsZSBieSB0aGUgYGF0aDlrYCBkcml2ZXIncyBjb3JlLlxuXG5HaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIHN5c3RlbXMsIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSB3aGVyZSB0aGUgbG93LWxldmVsIEhUQy1zcGVjaWZpYyByZWNlaXZlIHN0YXR1cyBzdHJ1Y3R1cmVzIGFyZSBwYXJzZWQsIHRyYW5zbGF0ZWQsIGFuZCBwb3NzaWJseSBub3JtYWxpemVkIGludG8gdGhlIG1vcmUgZHJpdmVyLWludGVybmFsIGBhdGg5a2AgcmVwcmVzZW50YXRpb25zLiBUaGlzIHByb2JhYmx5IGludm9sdmVzIGV4dHJhY3RpbmcgZGV0YWlscyBhYm91dCB0aGUgcmVjZWl2ZWQgcGFja2V0LCBsaWtlIHRoZSBzaWduYWwgc3RyZW5ndGgsIG5vaXNlIGxldmVsLCBkYXRhIHJhdGUsIGZyYW1lIGNvbnRyb2wgZmllbGRzLCBwb3RlbnRpYWwgZXJyb3JzLCBhbmQgcGVyaGFwcyBldmVuIEhUQy1zcGVjaWZpYyB0aW1lc3RhbXBzIG9yIG90aGVyIG1ldGFkYXRhLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgc3BlY2lmaWMgZmllbGRzIGFyZSBtYXBwZWQsIGFuZCBob3cgZXJyb3IgY29uZGl0aW9ucyBhcmUgaGFuZGxlZC4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gdml0YWwgdGFza3MgbGlrZSBRb1MsIHJhdGUgYWRhcHRhdGlvbiwgYW5kIHBhY2tldCBmaWx0ZXJpbmcgZm9yIHRoZSB3aXJlbGVzcyBpbnRlcmZhY2UuIExldCdzIGRpZyBpbiBhbmQgc2VlIGV4YWN0bHkgaG93IGl0IHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mzg2LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDM6MDQuMTM2MDM4Nzk2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTQwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTQwOlxcdHtcXG4gOTQxOlxcdFxcdHJ4X3N0YXRzLVxcdTAwM2VlbmNfZmxhZ3MgPSAwO1xcbiA5NDI6XFx0XFx0cnhfc3RhdHMtXFx1MDAzZWJ3ID0gUkFURV9JTkZPX0JXXzIwO1xcbiA5NDM6XFx0XFx0aWYgKHJ4c3RhdHVzLVxcdTAwM2Vyc19mbGFncyBcXHUwMDI2IEFUSDlLX1JYXzIwNDApXFxuIDk0NDpcXHRcXHRcXHRyeF9zdGF0cy1cXHUwMDNlYncgPSBSQVRFX0lORk9fQldfNDA7XFxuIDk0NTpcXHRcXHRpZiAocnhzdGF0dXMtXFx1MDAzZXJzX2ZsYWdzIFxcdTAwMjYgQVRIOUtfUlhfR0kpXFxuIDk0NjpcXHRcXHRcXHRyeF9zdGF0cy1cXHUwMDNlZW5jX2ZsYWdzIHw9IFJYX0VOQ19GTEFHX1NIT1JUX0dJO1xcbiA5NDc6XFx0fVxcbiA5NDg6XFx0XFxuIDk0OTpcXHRzdGF0aWMgdm9pZCByeF9zdGF0dXNfaHRjX3RvX2F0aChzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnhfc3RhdHMsXFxuIDk1MDpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGF0aF9odGNfcnhfc3RhdHVzICpyeHN0YXR1cylcXG4gOTUxOlxcdHtcXG4gOTUyOlxcdFxcdHJ4X3N0YXRzLVxcdTAwM2Vyc19kYXRhbGVuXFx0PSBiZTE2X3RvX2NwdShyeHN0YXR1cy1cXHUwMDNlcnNfZGF0YWxlbik7XFxuIDk1MzpcXHRcXHRyeF9zdGF0cy1cXHUwMDNlcnNfc3RhdHVzXFx0PSByeHN0YXR1cy1cXHUwMDNlcnNfc3RhdHVzO1xcbiA5NTQ6XFx0XFx0cnhfc3RhdHMtXFx1MDAzZXJzX3BoeWVyclxcdD0gcnhzdGF0dXMtXFx1MDAzZXJzX3BoeWVycjtcXG4gOTU1OlxcdFxcdHJ4X3N0YXRzLVxcdTAwM2Vyc19yc3NpXFx0PSByeHN0YXR1cy1cXHUwMDNlcnNfcnNzaTtcXG4gOTU2OlxcdFxcdHJ4X3N0YXRzLVxcdTAwM2Vyc19rZXlpeFxcdD0gcnhzdGF0dXMtXFx1MDAzZXJzX2tleWl4O1xcbiA5NTc6XFx0XFx0cnhfc3RhdHMtXFx1MDAzZXJzX3JhdGVcXHQ9IHJ4c3RhdHVzLVxcdTAwM2Vyc19yYXRlO1xcbiA5NTg6XFx0XFx0cnhfc3RhdHMtXFx1MDAzZXJzX2FudGVubmFcXHQ9IHJ4c3RhdHVzLVxcdTAwM2Vyc19hbnRlbm5hO1xcbiA5NTk6XFx0XFx0cnhfc3RhdHMtXFx1MDAzZXJzX21vcmVcXHQ9IHJ4c3RhdHVzLVxcdTAwM2Vyc19tb3JlO1xcbiA5NjA6XFx0XFxuIDk2MTpcXHRcXHRtZW1jcHkocnhfc3RhdHMtXFx1MDAzZXJzX3Jzc2lfY3RsLCByeHN0YXR1cy1cXHUwMDNlcnNfcnNzaV9jdGwsXFxuIDk2MjpcXHRcXHRcXHRzaXplb2Yocnhfc3RhdHMtXFx1MDAzZXJzX3Jzc2lfY3RsKSk7XFxuIDk2MzpcXHRcXHRtZW1jcHkocnhfc3RhdHMtXFx1MDAzZXJzX3Jzc2lfZXh0LCByeHN0YXR1cy1cXHUwMDNlcnNfcnNzaV9leHQsXFxuIDk2NDpcXHRcXHRcXHRzaXplb2Yocnhfc3RhdHMtXFx1MDAzZXJzX3Jzc2lfZXh0KSk7XFxuIDk2NTpcXHRcXG4gOTY2OlxcdFxcdHJ4X3N0YXRzLVxcdTAwM2Vyc19pc2FnZ3JcXHQ9IHJ4c3RhdHVzLVxcdTAwM2Vyc19pc2FnZ3I7XFxuIDk2NzpcXHRcXHRyeF9zdGF0cy1cXHUwMDNlcnNfbW9yZWFnZ3JcXHQ9IHJ4c3RhdHVzLVxcdTAwM2Vyc19tb3JlYWdncjtcXG4gOTY4OlxcdFxcdHJ4X3N0YXRzLVxcdTAwM2Vyc19udW1fZGVsaW1zXFx0PSByeHN0YXR1cy1cXHUwMDNlcnNfbnVtX2RlbGltcztcXG4gOTY5OlxcdFxcdGNvbnZlcnRfaHRjX2ZsYWcocnhfc3RhdHMsIHJ4c3RhdHVzKTtcXG4gOTcwOlxcdH1cXG4gOTcxOlxcdFxcbiA5NzI6XFx0LypcXG4gOTczOlxcdCAqIFRoZSBmaXJtd2FyZSByZXBvcnRzIGEgZnJhbWUgdGhhdCBmYWlsZWQgaXRzIENSQyBhcyBhIENSQyBlcnJvciBldmVuIHdoZW5cXG4gOTc0OlxcdCAqIHRoZSBQSFkgZXJyb3IgYml0IGlzIHNldCBhcyB3ZWxsLCBzbyB1bmRlciBpbnRlcmZlcmVuY2Ugc3BlY3RyYWwgc2FtcGxlc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MzowNC4xMzYyMDkzNTZaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEzNDI1Mjg3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhhdCBjb2RlIHNuaXBwZXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEF0aGVyb3MgUlggU3RhdHVzIGFuZCBGRlQgUHJvY2Vzc2luZyoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBpbiBvbiB0aGUgYGF0aF9yeF9zdGF0dXNgIHN0cnVjdCBhbmQgaG93IHRoZSBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggaXQuIFRoaXMgaXMgaW50ZXJlc3RpbmcsIGFuZCBJIGltbWVkaWF0ZWx5IHdhbnQgdG8ganVtcCBpbnRvIGBjb21tb24tc3BlY3RyYWwuY2AgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAuIEknbSBnb2luZyB0byBsb29rIGZvciBob3cgdGhlIHN0YXR1cyBpbmZvcm1hdGlvbiBmcm9tIHRoZSByZWNlaXZlZCBzaWduYWwgZ2V0cyBwYXJzZWQgYW5kIGZlZCBpbnRvIHRoZSBGRlQgcHJvY2Vzc2luZyBzdGVwcy4gSSdtIGtlZW4gdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGRpZmZlcmVudCBtb2R1bGF0aW9uIHNjaGVtZXMsIHBvdGVudGlhbCBlcnJvcnMsIGFuZCBwZXJoYXBzIGV2ZW4gc29tZSBvZiB0aGUgc3BlY3RyYWwgYW5hbHlzaXMgdGVjaG5pcXVlcyB1c2VkIGluIHRoYXQgZnVuY3Rpb24uIEknbSBhc3N1bWluZyB0aGF0IHRoZSBgYXRoX3J4X3N0YXR1c2Agc3RydWN0IGNvbnRhaW5zIGEgd2VhbHRoIG9mIGxvdy1sZXZlbCBkZXRhaWxzIGFib3V0IHRoZSByZWNlaXZlZCBwYWNrZXQgYW5kIHRoYXQgdGhvc2UgZGV0YWlscyBhcmUgY3J1Y2lhbCBmb3IgZHJpdmluZyB0aGUgRkZUIGVmZmljaWVudGx5IGFuZCBhY2N1cmF0ZWx5LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvbiBob3cgdGhlIGhhcmR3YXJlIG9mZmxvYWRzIGFueSBGRlQgY29tcHV0YXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTMzLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MzowNi4yNzA0NjcxOTZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NjUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NjU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQ2NjpcXHR9XFxuIDQ2NzpcXHRcXG4gNDY4OlxcdC8qIHJldHVybnMgMSBpZiB0aGlzIHdhcyBhIHNwZWN0cmFsIGZyYW1lLCBldmVuIGlmIG5vdCBoYW5kbGVkLiAqL1xcbiA0Njk6XFx0aW50IGF0aF9jbW5fcHJvY2Vzc19mZnQoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxcbiA0NzA6XFx0XFx0XFx0ICAgIHN0cnVjdCBhdGhfcnhfc3RhdHVzICpycywgdTY0IHRzZilcXG4gNDcxOlxcdHtcXG4gNDcyOlxcdFxcdHU4IHNhbXBsZV9idWZbU1BFQ1RSQUxfU0FNUExFX01BWF9MRU5dID0gezB9O1xcbiA0NzM6XFx0XFx0c3RydWN0IGF0aF9odyAqYWggPSBzcGVjX3ByaXYtXFx1MDAzZWFoO1xcbiA0NzQ6XFx0XFx0c3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzcGVjX3ByaXYtXFx1MDAzZWFoKTtcXG4gNDc1OlxcdFxcdHN0cnVjdCBhdGhfc29mdGMgKnNjID0gY29tbW9uLVxcdTAwM2Vwcml2O1xcbiA0NzY6XFx0XFx0dTggbnVtX2JpbnMsICp2ZGF0YSA9ICh1OCAqKWhkcjtcXG4gNDc3OlxcdFxcdHN0cnVjdCBhdGhfcmFkYXJfaW5mbyAqcmFkYXJfaW5mbztcXG4gNDc4OlxcdFxcdGludCBsZW4gPSBycy1cXHUwMDNlcnNfZGF0YWxlbjtcXG4gNDc5OlxcdFxcdGludCBpO1xcbiA0ODA6XFx0XFx0aW50IGdvdF9zbGVuID0gMDtcXG4gNDgxOlxcdFxcdHU4ICAqc2FtcGxlX3N0YXJ0O1xcbiA0ODI6XFx0XFx0aW50IHNhbXBsZV9ieXRlcyA9IDA7XFxuIDQ4MzpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gNDg0OlxcdFxcdHUxNiBmZnRfbGVuLCBzYW1wbGVfbGVuLCBmcmVxID0gYWgtXFx1MDAzZWN1cmNoYW4tXFx1MDAzZWNoYW4tXFx1MDAzZWNlbnRlcl9mcmVxO1xcbiA0ODU6XFx0XFx0ZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFuX3R5cGU7XFxuIDQ4NjpcXHRcXHRhdGhfY21uX2ZmdF9pZHhfdmFsaWRhdG9yICpmZnRfaWR4X3ZhbGlkYXRvcjtcXG4gNDg3OlxcdFxcdGF0aF9jbW5fZmZ0X3NhbXBsZV9oYW5kbGVyICpmZnRfaGFuZGxlcjtcXG4gNDg4OlxcdFxcbiA0ODk6XFx0XFx0LyogQVI5MjgwIGFuZCBiZWZvcmUgcmVwb3J0IHZpYSBBVEg5S19QSFlFUlJfUkFEQVIsIEFSOTN4eCBhbmQgbmV3ZXJcXG4gNDkwOlxcdFxcdCAqIHZpYSBBVEg5S19QSFlFUlJfU1BFQ1RSQUwuIEhhdmVuJ3Qgc2VlbiBBVEg5S19QSFlFUlJfRkFMU0VfUkFEQVJfRVhUXFxuIDQ5MTpcXHRcXHQgKiB5ZXQsIGJ1dCB0aGlzIGlzIHN1cHBvc2VkIHRvIGJlIHBvc3NpYmxlIGFzIHdlbGwuXFxuIDQ5MjpcXHRcXHQgKi9cXG4gNDkzOlxcdFxcdGlmIChycy1cXHUwMDNlcnNfcGh5ZXJyICE9IEFUSDlLX1BIWUVSUl9SQURBUiBcXHUwMDI2XFx1MDAyNlxcbiA0OTQ6XFx0XFx0ICAgIHJzLVxcdTAwM2Vyc19waHllcnIgIT0gQVRIOUtfUEhZRVJSX0ZBTFNFX1JBREFSX0VYVCBcXHUwMDI2XFx1MDAyNlxcbiA0OTU6XFx0XFx0ICAgIHJzLVxcdTAwM2Vyc19waHllcnIgIT0gQVRIOUtfUEhZRVJSX1NQRUNUUkFMKVxcbiA0OTY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQ5NzpcXHRcXG4gNDk4OlxcdFxcdC8qIGNoZWNrIGlmIHNwZWN0cmFsIHNjYW4gYml0IGlzIHNldC4gVGhpcyBkb2VzIG5vdCBoYXZlIHRvIGJlIGNoZWNrZWRcXG4gNDk5OlxcdFxcdCAqIGlmIHJlY2VpdmVkIHRocm91Z2ggYSBTUEVDVFJBTCBwaHkgZXJyb3IsIGJ1dCBzaG91bGRuJ3QgaHVydC5cXG4gNTAwOlxcdFxcdCAqL1xcbiA1MDE6XFx0XFx0cmFkYXJfaW5mbyA9ICgoc3RydWN0IGF0aF9yYWRhcl9pbmZvICopXFx1MDAyNnZkYXRhW2xlbl0pIC0gMTtcXG4gNTAyOlxcdFxcdGlmICghKHJhZGFyX2luZm8tXFx1MDAzZXB1bHNlX2J3X2luZm8gXFx1MDAyNiBTUEVDVFJBTF9TQ0FOX0JJVE1BU0spKVxcbiA1MDM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDUwNDpcXHRcXG4gNTA1OlxcdFxcdGlmICghc3BlY19wcml2LVxcdTAwM2VyZnNfY2hhbl9zcGVjX3NjYW4pXFxuIDUwNjpcXHRcXHRcXHRyZXR1cm4gMTtcXG4gNTA3OlxcdFxcbiA1MDg6XFx0XFx0LyogT3V0cHV0IGJ1ZmZlcnMgYXJlIGZ1bGwsIG5vIG5lZWQgdG8gcHJvY2VzcyBhbnl0aGluZ1xcbiA1MDk6XFx0XFx0ICogc2luY2UgdGhlcmUgaXMgbm8gc3BhY2UgdG8gcHV0IHRoZSByZXN1bHQgYW55d2F5XFxuIDUxMDpcXHRcXHQgKi9cXG4gNTExOlxcdFxcdHJldCA9IGF0aF9jbW5faXNfZmZ0X2J1Zl9mdWxsKHNwZWNfcHJpdik7XFxuIDUxMjpcXHRcXHRpZiAocmV0ID09IDEpIHtcXG4gNTEzOlxcdFxcdFxcdGF0aF9kYmcoY29tbW9uLCBTUEVDVFJBTF9TQ0FOLCBcXFwiRkZUIHJlcG9ydCBpZ25vcmVkLCBubyBzcGFjZSBcXFwiXFxuIDUxNDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFwibGVmdCBvbiBvdXRwdXQgYnVmZmVyc1xcXFxuXFxcIik7XFxuIDUxNTpcXHRcXHRcXHRyZXR1cm4gMTtcXG4gNTE2OlxcdFxcdH1cXG4gNTE3OlxcdFxcbiA1MTg6XFx0XFx0Y2hhbl90eXBlID0gY2ZnODAyMTFfZ2V0X2NoYW5kZWZfdHlwZShcXHUwMDI2Y29tbW9uLVxcdTAwM2Vody1cXHUwMDNlY29uZi5jaGFuZGVmKTtcXG4gNTE5OlxcdFxcdGlmICgoY2hhbl90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMpIHx8XFxuIDUyMDpcXHRcXHQgICAgKGNoYW5fdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0MFBMVVMpKSB7XFxuIDUyMTpcXHRcXHRcXHRmZnRfbGVuID0gU1BFQ1RSQUxfSFQyMF80MF9UT1RBTF9EQVRBX0xFTjtcXG4gNTIyOlxcdFxcdFxcdHNhbXBsZV9sZW4gPSBTUEVDVFJBTF9IVDIwXzQwX1NBTVBMRV9MRU47XFxuIDUyMzpcXHRcXHRcXHRudW1fYmlucyA9IFNQRUNUUkFMX0hUMjBfNDBfTlVNX0JJTlM7XFxuIDUyNDpcXHRcXHRcXHRmZnRfaWR4X3ZhbGlkYXRvciA9IFxcdTAwMjZhdGhfY21uX21heF9pZHhfdmVyaWZ5X2h0MjBfNDBfZmZ0O1xcbiA1MjU6XFx0XFx0XFx0ZmZ0X2hhbmRsZXIgPSBcXHUwMDI2YXRoX2Ntbl9wcm9jZXNzX2h0MjBfNDBfZmZ0O1xcbiA1MjY6XFx0XFx0fSBlbHNlIHtcXG4gNTI3OlxcdFxcdFxcdGZmdF9sZW4gPSBTUEVDVFJBTF9IVDIwX1RPVEFMX0RBVEFfTEVOO1xcbiA1Mjg6XFx0XFx0XFx0c2FtcGxlX2xlbiA9IFNQRUNUUkFMX0hUMjBfU0FNUExFX0xFTjtcXG4gNTI5OlxcdFxcdFxcdG51bV9iaW5zID0gU1BFQ1RSQUxfSFQyMF9OVU1fQklOUztcXG4gNTMwOlxcdFxcdFxcdGZmdF9pZHhfdmFsaWRhdG9yID0gYXRoX2Ntbl9tYXhfaWR4X3ZlcmlmeV9odDIwX2ZmdDtcXG4gNTMxOlxcdFxcdFxcdGZmdF9oYW5kbGVyID0gXFx1MDAyNmF0aF9jbW5fcHJvY2Vzc19odDIwX2ZmdDtcXG4gNTMyOlxcdFxcdH1cXG4gNTMzOlxcdFxcbiA1MzQ6XFx0XFx0YXRoX2RiZyhjb21tb24sIFNQRUNUUkFMX1NDQU4sIFxcXCJHb3QgcmFkYXIgZHVtcCBid19pbmZvOiAweCVYLFxcXCJcXG4gNTM1OlxcdFxcdFxcdFxcdFxcdFxcdFxcXCJsZW46ICVpIGZmdF9sZW46ICVpXFxcXG5cXFwiLFxcbiA1MzY6XFx0XFx0XFx0XFx0XFx0XFx0cmFkYXJfaW5mby1cXHUwMDNlcHVsc2VfYndfaW5mbyxcXG4gNTM3OlxcdFxcdFxcdFxcdFxcdFxcdGxlbixcXG4gNTM4OlxcdFxcdFxcdFxcdFxcdFxcdGZmdF9sZW4pO1xcbiA1Mzk6XFx0XFx0c2FtcGxlX3N0YXJ0ID0gdmRhdGE7XFxuIDU0MDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbGVuIC0gMjsgaSsrKSB7XFxuIDU0MTpcXHRcXHRcXHRzYW1wbGVfYnl0ZXMrKztcXG4gNTQyOlxcdFxcbiA1NDM6XFx0XFx0XFx0LyogT25seSBhIHNpbmdsZSBzYW1wbGUgcmVjZWl2ZWQsIG5vIG5lZWQgdG8gbG9va1xcbiA1NDQ6XFx0XFx0XFx0ICogZm9yIHRoZSBzYW1wbGUncyBlbmQsIGRvIHRoZSBjb3JyZWN0aW9uIGJhc2VkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQzOjA2LjI3MDY0Mzg4NloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjAwNzA3MTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGF0aDlrX3J4X3ByZXBhcmVgIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSdtIGxvb2tpbmcgYXQgdGhlIGBhdGg5a19yeF9wcmVwYXJlYCBmdW5jdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgZGVjbGFyYXRpb24gb2YgYHJ4X3N0YXRzYDogYHN0cnVjdCBhdGhfcnhfc3RhdHVzIHJ4X3N0YXRzO2AuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGluaXRpYWxpemF0aW9uLiBJcyB0aGlzIHN0cnVjdCBiZWluZyBmdWxseSBpbml0aWFsaXplZD8gSXQncyBhIGNyaXRpY2FsIHN0cnVjdHVyZSwgYW5kIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNhbiBsZWFkIHRvIGFsbCBzb3J0cyBvZiBuYXN0eSBidWdzLCBlc3BlY2lhbGx5IGluIGEgZHJpdmVyLlxuXG5OZXh0LCBJIHNlZSBgcnhfc3RhdHVzX2h0Y190b19hdGgoXHUwMDI2cnhfc3RhdHMsIHJ4c3RhdHVzKTtgLiBUaGlzIGZ1bmN0aW9uIGFwcGVhcnMgdG8gcG9wdWxhdGUgYHJ4X3N0YXRzYCBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgYHJ4c3RhdHVzYC4gIFRoYXQncyBnb29kLCBidXQgaXQgZG9lc24ndCBndWFyYW50ZWUgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBgcnhzdGF0dXNfaHRjX3RvX2F0aCgpYCBkb2VzLiAgTW9yZSBpbXBvcnRhbnRseSwgSSBuZWVkIHRvIGtub3cgdGhlIGRlZmluaXRpb24gb2YgdGhlIGBhdGhfcnhfc3RhdHVzYCBzdHJ1Y3QuIEknbGwgaGF2ZSB0byBjaGVjayB0aGUgaGVhZGVyIGZpbGUgdG8gdW5kZXJzdGFuZCBhbGwgaXRzIGZpZWxkcyBhbmQgc2VlIHdoaWNoLCBpZiBhbnksIG1pZ2h0IGJlIGxlZnQgdW5pbml0aWFsaXplZCBieSB0aGlzIGZ1bmN0aW9uLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGlmIGl0IGluY2x1ZGVzIHBhZGRpbmcgb3IgcmVzZXJ2ZWQgbWVtYmVycyB0aGF0IGNvdWxkIGJlIHByb2JsZW1hdGljIGlmIG5vdCBleHBsaWNpdGx5IHplcm9lZC4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzc0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MzowOC40NzEzNTU0MTJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5ODIwMTYwNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGF0aF9yeF9zdGF0dXMgXFxcXHtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oPTk5PXN0cnVjdCBhdGhfdHhfc3RhdHVzIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuaC0xMjctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oOjEyODpzdHJ1Y3QgYXRoX3J4X3N0YXR1cyB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oLTEyOS1cXHR1MzIgcnNfdHN0YW1wO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MzoxMS40NTMzODA0N1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDE5NjU1MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIGl0OlxuXG4qKkRpdmluZyBpbnRvIGF0aDlrJ3MgbWFjLmgqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0J3Mgc3RhcnQgYnkgY3JhY2tpbmcgb3BlbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oYCBhbmQgemVyb2luZyBpbiBvbiByb3VnaGx5IGxpbmUgMTI4LiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIE1BQy1sYXllciBkZWZpbml0aW9ucyBpbiB0aGlzIGFyZWEuIFByb2JhYmx5IHJlbGF0ZWQgdG8gZGF0YSBzdHJ1Y3R1cmVzIG9yIGZ1bmN0aW9uIHByb3RvdHlwZXMgdGhhdCBhcmUgZnVuZGFtZW50YWwgdG8gdGhlIEF0aGVyb3MgOWsgd2lyZWxlc3MgZHJpdmVyJ3Mgb3BlcmF0aW9uLiBJJ20gdGhpbmtpbmcgd2UnbGwgc2VlIHNvbWUga2V5IHN0cnVjdHVyZXMgdGhhdCBoYW5kbGUgZnJhbWUgcHJvY2Vzc2luZywgcGVyaGFwcyByZWxhdGVkIHRvIHJhdGUgY29udHJvbCwgUW9TLCBvciBwb3RlbnRpYWxseSBldmVuIHNvbWUgaW50ZXJydXB0LXJlbGF0ZWQgZGF0YS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBhdGg5aydzIGFyY2hpdGVjdHVyZSwgc28gdGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gcmVhY3F1YWludCBteXNlbGYgd2l0aCB0aGUgZGV0YWlscy4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg2NSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQzOjEzLjQ3MzAzODk1WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDYxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTI1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTI1OlxcdFxcdHUzMiBkdXJhdGlvbjtcXG4gMTI2OlxcdH07XFxuIDEyNzpcXHRcXG4gMTI4OlxcdHN0cnVjdCBhdGhfcnhfc3RhdHVzIHtcXG4gMTI5OlxcdFxcdHUzMiByc190c3RhbXA7XFxuIDEzMDpcXHRcXHR1MTYgcnNfZGF0YWxlbjtcXG4gMTMxOlxcdFxcdHU4IHJzX3N0YXR1cztcXG4gMTMyOlxcdFxcdHU4IHJzX3BoeWVycjtcXG4gMTMzOlxcdFxcdGludDhfdCByc19yc3NpO1xcbiAxMzQ6XFx0XFx0dTggcnNfa2V5aXg7XFxuIDEzNTpcXHRcXHR1OCByc19yYXRlO1xcbiAxMzY6XFx0XFx0dTggcnNfYW50ZW5uYTtcXG4gMTM3OlxcdFxcdHU4IHJzX21vcmU7XFxuIDEzODpcXHRcXHRpbnQ4X3QgcnNfcnNzaV9jdGxbM107XFxuIDEzOTpcXHRcXHRpbnQ4X3QgcnNfcnNzaV9leHRbM107XFxuIDE0MDpcXHRcXHR1OCByc19pc2FnZ3I7XFxuIDE0MTpcXHRcXHR1OCByc19maXJzdGFnZ3I7XFxuIDE0MjpcXHRcXHR1OCByc19tb3JlYWdncjtcXG4gMTQzOlxcdFxcdHU4IHJzX251bV9kZWxpbXM7XFxuIDE0NDpcXHRcXHR1OCByc19mbGFncztcXG4gMTQ1OlxcdFxcdGJvb2wgaXNfbXliZWFjb247XFxuIDE0NjpcXHRcXHR1MzIgZXZtMDtcXG4gMTQ3OlxcdFxcdHUzMiBldm0xO1xcbiAxNDg6XFx0XFx0dTMyIGV2bTI7XFxuIDE0OTpcXHRcXHR1MzIgZXZtMztcXG4gMTUwOlxcdFxcdHUzMiBldm00O1xcbiAxNTE6XFx0XFx0dTE2IGVuY19mbGFncztcXG4gMTUyOlxcdFxcdGVudW0gcmF0ZV9pbmZvX2J3IGJ3O1xcbiAxNTM6XFx0fTtcXG4gMTU0OlxcdFxcbiAxNTU6XFx0c3RydWN0IGF0aF9odGNfcnhfc3RhdHVzIHtcXG4gMTU2OlxcdFxcdF9fYmU2NCByc190c3RhbXA7XFxuIDE1NzpcXHRcXHRfX2JlMTYgcnNfZGF0YWxlbjtcXG4gMTU4OlxcdFxcdHU4IHJzX3N0YXR1cztcXG4gMTU5OlxcdFxcdHU4IHJzX3BoeWVycjtcXG4gMTYwOlxcdFxcdGludDhfdCByc19yc3NpO1xcbiAxNjE6XFx0XFx0aW50OF90IHJzX3Jzc2lfY3RsWzNdO1xcbiAxNjI6XFx0XFx0aW50OF90IHJzX3Jzc2lfZXh0WzNdO1xcbiAxNjM6XFx0XFx0dTggcnNfa2V5aXg7XFxuIDE2NDpcXHRcXHR1OCByc19yYXRlO1xcbiAxNjU6XFx0XFx0dTggcnNfYW50ZW5uYTtcXG4gMTY2OlxcdFxcdHU4IHJzX21vcmU7XFxuIDE2NzpcXHRcXHR1OCByc19pc2FnZ3I7XFxuIDE2ODpcXHRcXHR1OCByc19tb3JlYWdncjtcXG4gMTY5OlxcdFxcdHU4IHJzX251bV9kZWxpbXM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQzOjEzLjQ3MzE1MTA1OVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzQ1NzA1MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGF0YSBGbG93IGluIGBhdGhfY21uX3Byb2Nlc3NfZmZ0YCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYGF0aF9jbW5fcHJvY2Vzc19mZnRgIGFuZCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdy4gUmlnaHQsIHRoZSBjb2RlIGlzIHVzaW5nIGZpZWxkcyBmcm9tIHRoZSBgcnNgIHN0cnVjdC4gSSBjYW4gc2VlIHRoYXQgb25seSBgcnMtXHUwMDNlcnNfZGF0YWxlbmAgYW5kIGBycy1cdTAwM2Vyc19waHllcnJgIGFyZSBkaXJlY3RseSB1c2VkIHdpdGhpbiB0aGUgZnVuY3Rpb24uIGByc19kYXRhbGVuYCBpcyBjbGVhcmx5IGluaXRpYWxpemVkIGJ5IGByeF9zdGF0dXNfaHRjX3RvX2F0aGAsIHRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBgcnNfcGh5ZXJyYCBpcyBzZXQgcmlnaHQgYmVmb3JlIHRoZSBjYWxsLCBlaXRoZXIgd2l0aCBgQVRIOUtfUEhZRVJSX1JBREFSYCBvciBwb3RlbnRpYWxseSB0aHJvdWdoIGByeF9zdGF0dXNfaHRjX3RvX2F0aGAuXG5cbk5vdywgdGhlIGNydWNpYWwgYml0OiB0aGUgcmV0dXJuIHZhbHVlIG9mIGBhdGhfY21uX3Byb2Nlc3NfZmZ0YC4gSWYgaXQgcmV0dXJucyB0cnVlLCB3ZSBqdW1wIHRvIGByeF9uZXh0YC4gSG0sIHRoYXQncyBpbnRlcmVzdGluZyBiZWNhdXNlIGByeF9uZXh0YCB1bHRpbWF0ZWx5IHJldHVybnMgYGZhbHNlYCwgd2hpY2ggaW5kaWNhdGVzIHRoZSBwYWNrZXQgaXMgZHJvcHBlZCwgc2luY2UgaXQgd2FzIHRyZWF0ZWQgYXMgc3BlY3RyYWwgZGF0YS4gVGhpcyBtYWtlcyBzZW5zZSBmcm9tIGEgcGVyZm9ybWFuY2UgcGVyc3BlY3RpdmUgYW5kIGFsc28gaGVscHMgd2l0aCBzaWduYWwgcHJvY2Vzc2luZy5cblxuT24gdGhlIG90aGVyIGhhbmQsIGEgcmV0dXJuIHZhbHVlIG9mIGZhbHNlIG1lYW5zIHRoZSBjb2RlIGNvbnRpbnVlcyB0byBgYXRoOWtfY21uX3J4X2FjY2VwdGAuIE9rYXksIGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nIGFnYWluLiBgcnhfc3RhdHMucnNfcGh5ZXJyYCB3YXMgbW9kaWZpZWQgdG8gYEFUSDlLX1BIWUVSUl9SQURBUmAuIEJ1dCwgYGF0aDlrX2Ntbl9yeF9hY2NlcHRgIGlzIGNsZWFybHkgdGhlIGNyaXRpY2FsIHBvaW50LiBJIHNob3VsZCBwcm9iYWJseSBkaXZlIGludG8gaXQsIHRvIGZpZ3VyZSBvdXQgaG93IGl0IGhhbmRsZXMgdGhlIGRhdGEuIFRoaXMgd2lsbCBzaGVkIGxpZ2h0IG9uIHRoZSBjb21wbGV0ZSBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3NzgsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MzoxNi44MTg4NTg4WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDM1MDkzNTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDlrX2Ntbl9yeF9hY2NlcHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5jPTI5PU1PRFVMRV9MSUNFTlNFKFxcXCJEdWFsIEJTRC9HUExcXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uYy0zMS0vKiBBc3N1bWVzIHlvdSd2ZSBhbHJlYWR5IGRvbmUgdGhlIGVuZGlhbiB0byBDUFUgY29udmVyc2lvbiAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uYzozMjpib29sIGF0aDlrX2Ntbl9yeF9hY2NlcHQoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmMtMzMtXFx0XFx0XFx0IHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmMtMTE2LX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmM6MTE3OkVYUE9SVF9TWU1CT0woYXRoOWtfY21uX3J4X2FjY2VwdCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5jLTExOC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uaD01Mj1zdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5oLTYzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uaDo2NDpib29sIGF0aDlrX2Ntbl9yeF9hY2NlcHQoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmgtNjUtXFx0XFx0XFx0IHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM9OTk4PXN0YXRpYyBib29sIGF0aDlrX3J4X3ByZXBhcmUoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEwOTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjEwOTM6XFx0aWYgKCFhdGg5a19jbW5fcnhfYWNjZXB0KGNvbW1vbiwgaGRyLCByeF9zdGF0dXMsIFxcdTAwMjZyeF9zdGF0cyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTA5NC1cXHRcXHRcXHRcXHUwMDI2ZGVjcnlwdF9lcnJvciwgcHJpdi1cXHUwMDNlcnhmaWx0ZXIpKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYz04MDY9c3RhdGljIGludCBhdGg5a19yeF9za2JfcHJlcHJvY2VzcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmMtODk1LVxcdHNwaW5fbG9ja19iaChcXHUwMDI2c2MtXFx1MDAzZWNoYW5fbG9jayk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYzo4OTY6XFx0aWYgKCFhdGg5a19jbW5fcnhfYWNjZXB0KGNvbW1vbiwgaGRyLCByeF9zdGF0dXMsIHJ4X3N0YXRzLCBkZWNyeXB0X2Vycm9yLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmMtODk3LVxcdFxcdFxcdFxcdCBzYy1cXHUwMDNlY3VyX2NoYW4tXFx1MDAzZXJ4ZmlsdGVyKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MzoxOC44NTM5NjE3OThaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM5NTQ2MjUwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoYXQga2VybmVsIGNvZGU6XG5cbioqRGl2aW5nIGludG8gYGF0aDlrX2Ntbl9yeF9hY2NlcHRgKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcmVjZWl2ZXIgYWNjZXB0YW5jZSBmdW5jdGlvbiwgYGF0aDlrX2Ntbl9yeF9hY2NlcHRgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgYXRoOWtgIHdpcmVsZXNzIGRyaXZlci4gVGhhdCBtZWFucyBJJ20gbG9va2luZyBhdCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5jYC4gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgZmlsdGVyaW5nIGluY29taW5nIDgwMi4xMSBmcmFtZXMuIEknbSBhc3N1bWluZyBpdCdzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgdGhlIGluaXRpYWwgZGV0ZXJtaW5hdGlvbiBpZiBhIHJlY2VpdmVkIGZyYW1lIHNob3VsZCBldmVuIGJlIHBhc3NlZCB1cCB0aGUgc3RhY2sgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZywgb3IgaWYgaXQgc2hvdWxkIGJlIGRyb3BwZWQgZWFybHkgb24uIFRoaXMgY2FuIGJlIGJhc2VkIG9uIHRoaW5ncyBsaWtlIGZyYW1lIHR5cGUsIGFkZHJlc3MgZmlsdGVyaW5nLCBzaWduYWwgc3RyZW5ndGgsIG9yIGFueSBudW1iZXIgb2YgZmFjdG9ycyByZWxhdGVkIHRvIHRoZSBoYXJkd2FyZSdzIHJlY2VwdGlvbiBjaGFyYWN0ZXJpc3RpY3MgYW5kIGNvbmZpZ3VyZWQgc2V0dGluZ3MuXG5cbktub3dpbmcgdGhlIGBhdGg5a2AgZHJpdmVyLCBJJ2QgcHJlZGljdCB0aGVyZSdzIGxpa2VseSBzb21lIGZhaXJseSBoYXJkd2FyZS1zcGVjaWZpYyBpbnRlcmFjdGlvbiBpbiB0aGlzIGZ1bmN0aW9uLiBUaGlzIG1pZ2h0IGludm9sdmUgZGlyZWN0IHJlZ2lzdGVyIHJlYWRzIHRvIGNoZWNrIHN0YXR1cyBiaXRzLCBsb29raW5nIGF0IGRlc2NyaXB0b3JzIHBhc3NlZCBieSB0aGUgaGFyZHdhcmUsIG9yIGFjY2Vzc2luZyBwZXItcGFja2V0IG1ldGFkYXRhIHBsYWNlZCB0aGVyZSBieSB0aGUgZmlybXdhcmUuIEknbSBrZWVuIHRvIHNlZSB0aGUgc3BlY2lmaWMgY2hlY2tzLiBJdCB3b3VsZCBiZSBoZWxwZnVsIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlJ3MgRE1BIGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcuIElzIGl0IGNhbGxlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcj8gT3IgZG9lcyBpdCBvcGVyYXRlIHNvbWV3aGVyZSBpbiBhIFJYIHByb2Nlc3NpbmcgcGF0aCBzZXBhcmF0ZSBmcm9tIGludGVycnVwdHM/XG5cbk15IGh1bmNoIGlzIHRoYXQgdGhlcmUgbWlnaHQgYmUgc29tZSBjb25kaXRpb25hbCBsb2dpYyBhcm91bmQgc2VjdXJpdHkgZmVhdHVyZXMsIHRvby4gUGVyaGFwcyB0aGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGNoZWNrcyBvbiB0aGUgZnJhbWUncyBzZWN1cml0eSBoZWFkZXJzLCBvciBpbnRlcmFjdHMgd2l0aCBrZXkgbWFuYWdlbWVudCB0YWJsZXMuIEknbGwgbmVlZCB0byBsb29rIGF0IGFueSBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24gdGhhdCBtaWdodCBiZSBpbnZvbHZlZC4gSSdsbCBiZSBmb2N1c2VkIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGNyaXRlcmlhIHVzZWQgdG8gYWNjZXB0IG9yIHJlamVjdCBhIHBhY2tldCwgYW5kIHRoZSBvdmVyYWxsIGltcGFjdCBvbiBzeXN0ZW0gcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTM4LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDM6MjIuMjQ5NDI3OTY0WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzA6XFx0XFxuICAzMTpcXHQvKiBBc3N1bWVzIHlvdSd2ZSBhbHJlYWR5IGRvbmUgdGhlIGVuZGlhbiB0byBDUFUgY29udmVyc2lvbiAqL1xcbiAgMzI6XFx0Ym9vbCBhdGg5a19jbW5fcnhfYWNjZXB0KHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sXFxuICAzMzpcXHRcXHRcXHRcXHQgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcXG4gIDM0OlxcdFxcdFxcdFxcdCBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhzLFxcbiAgMzU6XFx0XFx0XFx0XFx0IHN0cnVjdCBhdGhfcnhfc3RhdHVzICpyeF9zdGF0cyxcXG4gIDM2OlxcdFxcdFxcdFxcdCBib29sICpkZWNyeXB0X2Vycm9yLFxcbiAgMzc6XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCByeGZpbHRlcilcXG4gIDM4OlxcdHtcXG4gIDM5OlxcdFxcdHN0cnVjdCBhdGhfaHcgKmFoID0gY29tbW9uLVxcdTAwM2VhaDtcXG4gIDQwOlxcdFxcdGJvb2wgaXNfbWMsIGlzX3ZhbGlkX3RraXAsIHN0cmlwX21pYywgbWljX2Vycm9yO1xcbiAgNDE6XFx0XFx0X19sZTE2IGZjO1xcbiAgNDI6XFx0XFxuICA0MzpcXHRcXHRmYyA9IGhkci1cXHUwMDNlZnJhbWVfY29udHJvbDtcXG4gIDQ0OlxcdFxcbiAgNDU6XFx0XFx0aXNfbWMgPSAhIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci1cXHUwMDNlYWRkcjEpO1xcbiAgNDY6XFx0XFx0aXNfdmFsaWRfdGtpcCA9IHJ4X3N0YXRzLVxcdTAwM2Vyc19rZXlpeCAhPSBBVEg5S19SWEtFWUlYX0lOVkFMSUQgXFx1MDAyNlxcdTAwMjZcXG4gIDQ3OlxcdFxcdFxcdHRlc3RfYml0KHJ4X3N0YXRzLVxcdTAwM2Vyc19rZXlpeCwgY29tbW9uLVxcdTAwM2V0a2lwX2tleW1hcCk7XFxuICA0ODpcXHRcXHRzdHJpcF9taWMgPSBpc192YWxpZF90a2lwIFxcdTAwMjZcXHUwMDI2IGllZWU4MDIxMV9pc19kYXRhKGZjKSBcXHUwMDI2XFx1MDAyNlxcbiAgNDk6XFx0XFx0XFx0aWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoZmMpIFxcdTAwMjZcXHUwMDI2XFxuICA1MDpcXHRcXHRcXHQhKHJ4X3N0YXRzLVxcdTAwM2Vyc19zdGF0dXMgXFx1MDAyNlxcbiAgNTE6XFx0XFx0XFx0KEFUSDlLX1JYRVJSX0RFQ1JZUFQgfCBBVEg5S19SWEVSUl9DUkMgfCBBVEg5S19SWEVSUl9NSUMgfFxcbiAgNTI6XFx0XFx0XFx0IEFUSDlLX1JYRVJSX0tFWU1JU1MpKTtcXG4gIDUzOlxcdFxcbiAgNTQ6XFx0XFx0LypcXG4gIDU1OlxcdFxcdCAqIEtleSBtaXNzIGV2ZW50cyBhcmUgb25seSByZWxldmFudCBmb3IgcGFpcndpc2Uga2V5cyB3aGVyZSB0aGVcXG4gIDU2OlxcdFxcdCAqIGRlc2NyaXB0b3IgZG9lcyBjb250YWluIGEgdmFsaWQga2V5IGluZGV4LiBUaGlzIGhhcyBiZWVuIG9ic2VydmVkXFxuICA1NzpcXHRcXHQgKiBtb3N0bHkgd2l0aCBDQ01QIGVuY3J5cHRpb24uXFxuICA1ODpcXHRcXHQgKi9cXG4gIDU5OlxcdFxcdGlmIChyeF9zdGF0cy1cXHUwMDNlcnNfa2V5aXggPT0gQVRIOUtfUlhLRVlJWF9JTlZBTElEIHx8XFxuICA2MDpcXHRcXHQgICAgIXRlc3RfYml0KHJ4X3N0YXRzLVxcdTAwM2Vyc19rZXlpeCwgY29tbW9uLVxcdTAwM2VjY21wX2tleW1hcCkpXFxuICA2MTpcXHRcXHRcXHRyeF9zdGF0cy1cXHUwMDNlcnNfc3RhdHVzIFxcdTAwMjY9IH5BVEg5S19SWEVSUl9LRVlNSVNTO1xcbiAgNjI6XFx0XFxuICA2MzpcXHRcXHRtaWNfZXJyb3IgPSBpc192YWxpZF90a2lwIFxcdTAwMjZcXHUwMDI2ICFpZWVlODAyMTFfaXNfY3RsKGZjKSBcXHUwMDI2XFx1MDAyNlxcbiAgNjQ6XFx0XFx0XFx0IWllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGZjKSBcXHUwMDI2XFx1MDAyNlxcbiAgNjU6XFx0XFx0XFx0IShsZTE2X3RvX2NwdShoZHItXFx1MDAzZXNlcV9jdHJsKSBcXHUwMDI2IElFRUU4MDIxMV9TQ1RMX0ZSQUcpIFxcdTAwMjZcXHUwMDI2XFxuICA2NjpcXHRcXHRcXHQocnhfc3RhdHMtXFx1MDAzZXJzX3N0YXR1cyBcXHUwMDI2IEFUSDlLX1JYRVJSX01JQyk7XFxuICA2NzpcXHRcXG4gIDY4OlxcdFxcdC8qXFxuICA2OTpcXHRcXHQgKiBUaGUgcnhfc3RhdHMtXFx1MDAzZXJzX3N0YXR1cyB3aWxsIG5vdCBiZSBzZXQgdW50aWwgdGhlIGVuZCBvZiB0aGVcXG4gIDcwOlxcdFxcdCAqIGNoYWluZWQgZGVzY3JpcHRvcnMgc28gaXQgY2FuIGJlIGlnbm9yZWQgaWYgcnNfbW9yZSBpcyBzZXQuIFRoZVxcbiAgNzE6XFx0XFx0ICogcnNfbW9yZSB3aWxsIGJlIGZhbHNlIGF0IHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIGNoYWluZWRcXG4gIDcyOlxcdFxcdCAqIGRlc2NyaXB0b3JzLlxcbiAgNzM6XFx0XFx0ICovXFxuICA3NDpcXHRcXHRpZiAocnhfc3RhdHMtXFx1MDAzZXJzX3N0YXR1cyAhPSAwKSB7XFxuICA3NTpcXHRcXHRcXHR1OCBzdGF0dXNfbWFzaztcXG4gIDc2OlxcdFxcbiAgNzc6XFx0XFx0XFx0aWYgKHJ4X3N0YXRzLVxcdTAwM2Vyc19zdGF0dXMgXFx1MDAyNiBBVEg5S19SWEVSUl9DUkMpIHtcXG4gIDc4OlxcdFxcdFxcdFxcdHJ4cy1cXHUwMDNlZmxhZyB8PSBSWF9GTEFHX0ZBSUxFRF9GQ1NfQ1JDO1xcbiAgNzk6XFx0XFx0XFx0XFx0bWljX2Vycm9yID0gZmFsc2U7XFxuICA4MDpcXHRcXHRcXHR9XFxuICA4MTpcXHRcXG4gIDgyOlxcdFxcdFxcdGlmICgocnhfc3RhdHMtXFx1MDAzZXJzX3N0YXR1cyBcXHUwMDI2IEFUSDlLX1JYRVJSX0RFQ1JZUFQpIHx8XFxuICA4MzpcXHRcXHRcXHQgICAgKCFpc19tYyBcXHUwMDI2XFx1MDAyNiAocnhfc3RhdHMtXFx1MDAzZXJzX3N0YXR1cyBcXHUwMDI2IEFUSDlLX1JYRVJSX0tFWU1JU1MpKSkge1xcbiAgODQ6XFx0XFx0XFx0XFx0KmRlY3J5cHRfZXJyb3IgPSB0cnVlO1xcbiAgODU6XFx0XFx0XFx0XFx0bWljX2Vycm9yID0gZmFsc2U7XFxuICA4NjpcXHRcXHRcXHR9XFxuICA4NzpcXHRcXG4gIDg4OlxcdFxcbiAgODk6XFx0XFx0XFx0LypcXG4gIDkwOlxcdFxcdFxcdCAqIFJlamVjdCBlcnJvciBmcmFtZXMgd2l0aCB0aGUgZXhjZXB0aW9uIG9mXFxuICA5MTpcXHRcXHRcXHQgKiBkZWNyeXB0aW9uIGFuZCBNSUMgZmFpbHVyZXMuIEZvciBtb25pdG9yIG1vZGUsXFxuICA5MjpcXHRcXHRcXHQgKiB3ZSBhbHNvIGlnbm9yZSB0aGUgQ1JDIGVycm9yLlxcbiAgOTM6XFx0XFx0XFx0ICovXFxuICA5NDpcXHRcXHRcXHRzdGF0dXNfbWFzayA9IEFUSDlLX1JYRVJSX0RFQ1JZUFQgfCBBVEg5S19SWEVSUl9NSUMgfFxcbiAgOTU6XFx0XFx0XFx0XFx0ICAgICAgQVRIOUtfUlhFUlJfS0VZTUlTUztcXG4gIDk2OlxcdFxcbiAgOTc6XFx0XFx0XFx0aWYgKGFoLVxcdTAwM2Vpc19tb25pdG9yaW5nIFxcdTAwMjZcXHUwMDI2IChyeGZpbHRlciBcXHUwMDI2IEZJRl9GQ1NGQUlMKSlcXG4gIDk4OlxcdFxcdFxcdFxcdHN0YXR1c19tYXNrIHw9IEFUSDlLX1JYRVJSX0NSQztcXG4gIDk5OlxcdFxcbiAxMDA6XFx0XFx0XFx0aWYgKHJ4X3N0YXRzLVxcdTAwM2Vyc19zdGF0dXMgXFx1MDAyNiB+c3RhdHVzX21hc2spXFxuIDEwMTpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDEwMjpcXHRcXHR9XFxuIDEwMzpcXHRcXG4gMTA0OlxcdFxcdC8qXFxuIDEwNTpcXHRcXHQgKiBGb3IgdW5pY2FzdCBmcmFtZXMgdGhlIE1JQyBlcnJvciBiaXQgY2FuIGhhdmUgZmFsc2UgcG9zaXRpdmVzLFxcbiAxMDY6XFx0XFx0ICogc28gYWxsIE1JQyBlcnJvciByZXBvcnRzIG5lZWQgdG8gYmUgdmFsaWRhdGVkIGluIHNvZnR3YXJlLlxcbiAxMDc6XFx0XFx0ICogRmFsc2UgbmVnYXRpdmVzIGFyZSBub3QgY29tbW9uLCBzbyBza2lwIHNvZnR3YXJlIHZlcmlmaWNhdGlvblxcbiAxMDg6XFx0XFx0ICogaWYgdGhlIGhhcmR3YXJlIGNvbnNpZGVycyB0aGUgTUlDIHZhbGlkLlxcbiAxMDk6XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQzOjIyLjI0OTU1ODE1NFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NDQyOTIzNzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOL0tBU0FOIEFuYWx5c2lzIG9mIFNwZWN0cmFsIFNhbXBsZSBMZW5ndGggQ2hlY2sqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGFuYWx5c2lzIGZvY3VzZXMgb24gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gS01TQU4uIFRoZSBjb3JlIGNoYW5nZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBhdGg5a19odGNfaXNfc3BlY3RyYWxfc2FtcGxlX2xlbigpYCwgd2hpY2ggZXNzZW50aWFsbHkgcGVyZm9ybXMgYSBsZW5ndGggY2hlY2sgYmFzZWQgb24gY2hhbm5lbCB0eXBlIHRvIGRldGVybWluZSBpZiBhIHNwZWN0cmFsIHNhbXBsZSBzaG91bGQgYmUgcHJvY2Vzc2VkLiBJJ3ZlIGV4YW1pbmVkIHRoZSBjb2RlLCBmb2N1c2luZyBvbiBob3cgZGF0YSBmbG93cyBhbmQgaXMgaW5pdGlhbGl6ZWQuXG5cbkZpcnN0LCB3aXRoaW4gYGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKClgLCBgY2hhbl90eXBlYCBhbmQgYGZmdF9sZW5gIGFyZSBzaW1wbGUgbG9jYWwgc2NhbGFycywgaW5pdGlhbGl6ZWQgdW5jb25kaXRpb25hbGx5LiBUaGVuLCBgYXRoOWtfcnhfcHJlcGFyZSgpYCBpcyB3aGVyZSB0aGUgbGVuZ3RoIGNoZWNrIGlzIHV0aWxpemVkLiBUaGUgbGVuZ3RoIGNoZWNrIHJlbGllcyBvbiBgcnhzdGF0dXMtXHUwMDNlcnNfZGF0YWxlbmAgd2hpY2ggaXMgYW4gaW5pdGlhbGl6YXRpb24gdmFsdWUuIElmIHRoZSBsZW5ndGggY2hlY2sgaXMgbWV0LCBhbmQgYSBDUkMgZXJyb3IgaXMgZW5jb3VudGVyZWQsIGByc19waHllcnJgIGdldHMgc2V0IGFuZCB0aGUgZGF0YSBpcyBwYXNzZWQgdG8gYGF0aF9jbW5fcHJvY2Vzc19mZnQoKWAsIHdoZXJlIHRoZSBzYW1wbGUgYnVmZmVyIGlzIHplcm9lZCBvdXQuIE5vIGRhdGEgaXMgbGVha2VkLlxuXG5DcnVjaWFsbHksIEknbSBjaGVja2luZyBhZ2FpbnN0IHRoZSBLTVNBTiBjcml0ZXJpYSwgYXMgdGhpcyBpcyBhIHBvdGVudGlhbCBhcmVhIGZvciBsZWFrcywgYnV0IGFsc28gZm9yIHN0YW5kYXJkIEtBU0FOIGlzc3Vlcy4gSSd2ZSBjb25maXJtZWQ6XG5cbjEuICBUaGVyZSBhcmUgbm8ga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBtaWdodCBiZSB1bmluaXRpYWxpemVkLlxuMi4gIFRoZSBjb2RlIGRvZXNuJ3QgcmVseSBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb25kaXRpb25hbCBsb2dpYy5cbjMuICBObyBuZXcsIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgYW5kIHBvdGVudGlhbGx5IGxlZnQgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy5cbjQuICBUaGVyZSBhcmUgbm8gYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLlxuXG5UaGlzIGFuYWx5c2lzIHNob3dzIHRoYXQgYWxsIGxvY2FsIHZhcmlhYmxlcywgYHN0cnVjdGAgZmllbGRzLCBhbmQgYnVmZmVycyB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCB0aHVzLCBzdGFuZGFyZCBzYW5pdGl6ZXJzIChsaWtlIEtBU0FOKSBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIGFueSBpc3N1ZXMgdGhhdCBtYXkgYXJpc2UgZnJvbSBvdXQtb2YtYm91bmRzIGFjY2VzcywgZXRjLiBJJ20gY29tZm9ydGFibGUgc3RhdGluZyB0aGF0IHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IEtNU0FOIGNvbmNlcm5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDkwNywiT3V0cHV0VG9rZW5zIjoxODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MzoyOS42OTI0ODYxNThaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3BlY3RyYWwgc2NhbiBzYW1wbGUgbGVuZ3RoIHZhbGlkYXRpb24gdmlhIGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKCkgYW5kIGZvcndhcmRzIENSQy1lcnJvcmVkIGZyYW1lcyB3aXRoIG1hdGNoaW5nIGxlbmd0aHMgdG8gYXRoX2Ntbl9wcm9jZXNzX2ZmdCgpIGluIGF0aDlrX3J4X3ByZXBhcmUoKS4gQWxsIHZhcmlhYmxlcyBhbmQgc3RydWN0dXJlIGZpZWxkcyB1c2VkIChlLmcuLCByc19kYXRhbGVuLCByeF9zdGF0cy5yc19waHllcnIsIGNoYW5fdHlwZSwgZmZ0X2xlbikgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgYnVmZmVycywgcGVyZm9ybSBhbnkgY29weV90b191c2VyIG9wZXJhdGlvbnMsIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgb3IgZXhwb3NlIHBhZGRpbmcvdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcyAoc3VjaCBhcyBidWZmZXIgYm91bmRzIG9yIHBvaW50ZXIgaGFuZGxpbmcpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3BlY3RyYWwgc2NhbiBzYW1wbGUgbGVuZ3RoIHZhbGlkYXRpb24gdmlhIGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKCkgYW5kIGZvcndhcmRzIENSQy1lcnJvcmVkIGZyYW1lcyB3aXRoIG1hdGNoaW5nIGxlbmd0aHMgdG8gYXRoX2Ntbl9wcm9jZXNzX2ZmdCgpIGluIGF0aDlrX3J4X3ByZXBhcmUoKS4gQWxsIHZhcmlhYmxlcyBhbmQgc3RydWN0dXJlIGZpZWxkcyB1c2VkIChlLmcuLCByc19kYXRhbGVuLCByeF9zdGF0cy5yc19waHllcnIsIGNoYW5fdHlwZSwgZmZ0X2xlbikgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgYnVmZmVycywgcGVyZm9ybSBhbnkgY29weV90b191c2VyIG9wZXJhdGlvbnMsIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgb3IgZXhwb3NlIHBhZGRpbmcvdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcyAoc3VjaCBhcyBidWZmZXIgYm91bmRzIG9yIHBvaW50ZXIgaGFuZGxpbmcpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowvlqbn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 02:39:46 +0000 UTC FinishedAt: 2026-09-05 02:43:31 +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": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATH9K_HTC", "ATH9K_HTC_DEBUGFS", "ATH9K_COMMON_SPECTRAL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATH9K_HTC", "ATH9K_HTC_DEBUGFS", "ATH9K_COMMON_SPECTRAL" ], "series_id": "2da910d4-c592-40bc-af85-81ad73ef8c2b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ath9k_rx_tasklet", "ath9k_htc_rxep", "ath_cmn_process_fft" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDlLX0hUQyYjMzQ7LAogICAgJiMzNDtBVEg5S19IVENfREVCVUdGUyYjMzQ7LAogICAgJiMzNDtBVEg5S19DT01NT05fU1BFQ1RSQUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthdGg5a19yeF90YXNrbGV0JiMzNDssCiAgICAmIzM0O2F0aDlrX2h0Y19yeGVwJiMzNDssCiAgICAmIzM0O2F0aF9jbW5fcHJvY2Vzc19mZnQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHNwZWN0cmFsIHNjYW4gc2FtcGxlIGxlbmd0aCB2YWxpZGF0aW9uIHZpYSBhdGg5a19odGNfaXNfc3BlY3RyYWxfc2FtcGxlX2xlbigpIGFuZCBmb3J3YXJkcyBDUkMtZXJyb3JlZCBmcmFtZXMgd2l0aCBtYXRjaGluZyBsZW5ndGhzIHRvIGF0aF9jbW5fcHJvY2Vzc19mZnQoKSBpbiBhdGg5a19yeF9wcmVwYXJlKCkuIEFsbCB2YXJpYWJsZXMgYW5kIHN0cnVjdHVyZSBmaWVsZHMgdXNlZCAoZS5nLiwgcnNfZGF0YWxlbiwgcnhfc3RhdHMucnNfcGh5ZXJyLCBjaGFuX3R5cGUsIGZmdF9sZW4pIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMsIHBlcmZvcm0gYW55IGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG9yIGV4cG9zZSBwYWRkaW5nL3VuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgKHN1Y2ggYXMgYnVmZmVyIGJvdW5kcyBvciBwb2ludGVyIGhhbmRsaW5nKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzcGVjdHJhbCBGRlQgc2FtcGxlIGRldGVjdGlvbiBmb3IgQ1JDLWVycm9yZWQgZnJhbWVzIGluIHRoZSBSWCBwcm9jZXNzaW5nIHBhdGggKGF0aDlrX3J4X3ByZXBhcmUpIG9mIHRoZSBhdGg5a19odGMgVVNCIHdpcmVsZXNzIGRyaXZlciwgZGlyZWN0aW5nIHF1YWxpZnlpbmcgZnJhbWVzIGludG8gYXRoX2Ntbl9wcm9jZXNzX2ZmdC4gQmVjYXVzZSBhdGg5a19odGMgaXMgYSBVU0IgV2ktRmkgZHJpdmVyIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24sIHRoaXMgdG91Y2hlcyByZWFjaGFibGUga2VybmVsIGNvZGUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDljODcxMmFkMTQxZWM3NTBmYjFmODVkZmFkM2ZjN2ExYmU2ODhmMjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDAyOjQxOjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguY1xuaW5kZXggYmVkN2VhMjQyNWEwZS4uZjIxY2ZjMDM0MjZiMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jXG5AQCAtOTY5LDYgJiM0Mzs5NjksMzIgQEAgc3RhdGljIHZvaWQgcnhfc3RhdHVzX2h0Y190b19hdGgoc3RydWN0IGF0aF9yeF9zdGF0dXMgKnJ4X3N0YXRzLFxuIFx0Y29udmVydF9odGNfZmxhZyhyeF9zdGF0cywgcnhzdGF0dXMpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogVGhlIGZpcm13YXJlIHJlcG9ydHMgYSBmcmFtZSB0aGF0IGZhaWxlZCBpdHMgQ1JDIGFzIGEgQ1JDIGVycm9yIGV2ZW4gd2hlblxuJiM0MzsgKiB0aGUgUEhZIGVycm9yIGJpdCBpcyBzZXQgYXMgd2VsbCwgc28gdW5kZXIgaW50ZXJmZXJlbmNlIHNwZWN0cmFsIHNhbXBsZXNcbiYjNDM7ICogcmVhY2ggdGhlIGhvc3QgYXMgQ1JDIGVycm9ycy4gQSBzYW1wbGUgaXMgcmVjb2duaXNhYmxlIGJ5IGl0cyBzaXplOiB0aGVcbiYjNDM7ICogRkZUIHJlcG9ydCBsZW5ndGggZm9yIHRoZSBjaGFubmVsIHdpZHRoLCBwbHVzIG9yIG1pbnVzIHRoZSB0d28gYnl0ZXMgdGhlXG4mIzQzOyAqIE1BQyBtYXkgYWRkIG9yIGRyb3AuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCBhdGg5a19odGNfaXNfc3BlY3RyYWxfc2FtcGxlX2xlbihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHUxNiBsZW4pXG4mIzQzO3tcbiYjNDM7XHRlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5fdHlwZTtcbiYjNDM7XHR1MTYgZmZ0X2xlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlc3BlY19wcml2LnNwZWN0cmFsX21vZGUgPT0gU1BFQ1RSQUxfRElTQUJMRUQpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGNoYW5fdHlwZSA9IGNmZzgwMjExX2dldF9jaGFuZGVmX3R5cGUoXHUwMDI2cHJpdi1cdTAwM2Vody1cdTAwM2Vjb25mLmNoYW5kZWYpO1xuJiM0MztcdGlmIChjaGFuX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUyB8fFxuJiM0MztcdCAgICBjaGFuX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTKVxuJiM0MztcdFx0ZmZ0X2xlbiA9IFNQRUNUUkFMX0hUMjBfNDBfVE9UQUxfREFUQV9MRU47XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZmZ0X2xlbiA9IFNQRUNUUkFMX0hUMjBfVE9UQUxfREFUQV9MRU47XG4mIzQzO1xuJiM0MztcdHJldHVybiBsZW4gJiM0MzsgMSBcdTAwM2U9IGZmdF9sZW4gXHUwMDI2XHUwMDI2IGxlbiBcdTAwM2M9IGZmdF9sZW4gJiM0MzsgMjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgYm9vbCBhdGg5a19yeF9wcmVwYXJlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbiBcdFx0XHQgICAgIHN0cnVjdCBhdGg5a19odGNfcnhidWYgKnJ4YnVmLFxuIFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cylcbkBAIC0xMDUyLDYgJiM0MzsxMDc4LDE4IEBAIHN0YXRpYyBib29sIGF0aDlrX3J4X3ByZXBhcmUoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuIFx0XHRnb3RvIHJ4X25leHQ7XG4gXHR9XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBMZXQgdGhlIEZGVCBwYXJzZXIgZGVjaWRlIHdoZXRoZXIgYSBDUkMgZXJyb3Igb2Ygc2FtcGxlIHNpemUgaXMgYVxuJiM0MztcdCAqIHNhbXBsZTsgaXQgdmFsaWRhdGVzIHRoZSBjb250ZW50cyBhbmQgcmV0dXJucyAwIGZvciBhbnl0aGluZyBlbHNlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseShyeF9zdGF0cy5yc19zdGF0dXMgXHUwMDI2IEFUSDlLX1JYRVJSX0NSQykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKHByaXYsIHJzX2RhdGFsZW4pKSB7XG4mIzQzO1x0XHRyeF9zdGF0cy5yc19waHllcnIgPSBBVEg5S19QSFlFUlJfUkFEQVI7XG4mIzQzO1x0XHRpZiAoYXRoX2Ntbl9wcm9jZXNzX2ZmdChcdTAwMjZwcml2LVx1MDAzZXNwZWNfcHJpdiwgaGRyLCBcdTAwMjZyeF9zdGF0cyxcbiYjNDM7XHRcdFx0XHRcdHJ4X3N0YXR1cy1cdTAwM2VtYWN0aW1lKSlcbiYjNDM7XHRcdFx0Z290byByeF9uZXh0O1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoIWF0aDlrX2Ntbl9yeF9hY2NlcHQoY29tbW9uLCBoZHIsIHJ4X3N0YXR1cywgXHUwMDI2cnhfc3RhdHMsXG4gXHRcdFx0XHUwMDI2ZGVjcnlwdF9lcnJvciwgcHJpdi1cdTAwM2VyeGZpbHRlcikpXG4gXHRcdGdvdG8gcnhfbmV4dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBVEg5S19IVEMmIzM0OywKICAgICYjMzQ7QVRIOUtfSFRDX0RFQlVHRlMmIzM0OywKICAgICYjMzQ7QVRIOUtfQ09NTU9OX1NQRUNUUkFMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXRoOWtfcnhfdGFza2xldCYjMzQ7LAogICAgJiMzNDthdGg5a19odGNfcnhlcCYjMzQ7LAogICAgJiMzNDthdGhfY21uX3Byb2Nlc3NfZmZ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3BlY3RyYWwgRkZUIHNhbXBsZSBkZXRlY3Rpb24gZm9yIENSQy1lcnJvcmVkIGZyYW1lcyBpbiB0aGUgUlggcHJvY2Vzc2luZyBwYXRoIChhdGg5a19yeF9wcmVwYXJlKSBvZiB0aGUgYXRoOWtfaHRjIFVTQiB3aXJlbGVzcyBkcml2ZXIsIGRpcmVjdGluZyBxdWFsaWZ5aW5nIGZyYW1lcyBpbnRvIGF0aF9jbW5fcHJvY2Vzc19mZnQuIEJlY2F1c2UgYXRoOWtfaHRjIGlzIGEgVVNCIFdpLUZpIGRyaXZlciByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uLCB0aGlzIHRvdWNoZXMgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5Yzg3MTJhZDE0MWVjNzUwZmIxZjg1ZGZhZDNmYzdhMWJlNjg4ZjI0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAwMjo0MTo0NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYwppbmRleCBiZWQ3ZWEyNDI1YTBlLi5mMjFjZmMwMzQyNmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jCkBAIC05NjksNiAmIzQzOzk2OSwzMiBAQCBzdGF0aWMgdm9pZCByeF9zdGF0dXNfaHRjX3RvX2F0aChzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnhfc3RhdHMsCiAJY29udmVydF9odGNfZmxhZyhyeF9zdGF0cywgcnhzdGF0dXMpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBUaGUgZmlybXdhcmUgcmVwb3J0cyBhIGZyYW1lIHRoYXQgZmFpbGVkIGl0cyBDUkMgYXMgYSBDUkMgZXJyb3IgZXZlbiB3aGVuCiYjNDM7ICogdGhlIFBIWSBlcnJvciBiaXQgaXMgc2V0IGFzIHdlbGwsIHNvIHVuZGVyIGludGVyZmVyZW5jZSBzcGVjdHJhbCBzYW1wbGVzCiYjNDM7ICogcmVhY2ggdGhlIGhvc3QgYXMgQ1JDIGVycm9ycy4gQSBzYW1wbGUgaXMgcmVjb2duaXNhYmxlIGJ5IGl0cyBzaXplOiB0aGUKJiM0MzsgKiBGRlQgcmVwb3J0IGxlbmd0aCBmb3IgdGhlIGNoYW5uZWwgd2lkdGgsIHBsdXMgb3IgbWludXMgdGhlIHR3byBieXRlcyB0aGUKJiM0MzsgKiBNQUMgbWF5IGFkZCBvciBkcm9wLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKJiM0MzsJCQkJCSAgICAgdTE2IGxlbikKJiM0Mzt7CiYjNDM7CWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbl90eXBlOwomIzQzOwl1MTYgZmZ0X2xlbjsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3NwZWNfcHJpdi5zcGVjdHJhbF9tb2RlID09IFNQRUNUUkFMX0RJU0FCTEVEKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwljaGFuX3R5cGUgPSBjZmc4MDIxMV9nZXRfY2hhbmRlZl90eXBlKCZhbXA7cHJpdi0mZ3Q7aHctJmd0O2NvbmYuY2hhbmRlZik7CiYjNDM7CWlmIChjaGFuX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUyB8fAomIzQzOwkgICAgY2hhbl90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwUExVUykKJiM0MzsJCWZmdF9sZW4gPSBTUEVDVFJBTF9IVDIwXzQwX1RPVEFMX0RBVEFfTEVOOwomIzQzOwllbHNlCiYjNDM7CQlmZnRfbGVuID0gU1BFQ1RSQUxfSFQyMF9UT1RBTF9EQVRBX0xFTjsKJiM0MzsKJiM0MzsJcmV0dXJuIGxlbiAmIzQzOyAxICZndDs9IGZmdF9sZW4gJmFtcDsmYW1wOyBsZW4gJmx0Oz0gZmZ0X2xlbiAmIzQzOyAyOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGF0aDlrX3J4X3ByZXBhcmUoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAogCQkJICAgICBzdHJ1Y3QgYXRoOWtfaHRjX3J4YnVmICpyeGJ1ZiwKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKQEAgLTEwNTIsNiAmIzQzOzEwNzgsMTggQEAgc3RhdGljIGJvb2wgYXRoOWtfcnhfcHJlcGFyZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCiAJCWdvdG8gcnhfbmV4dDsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogTGV0IHRoZSBGRlQgcGFyc2VyIGRlY2lkZSB3aGV0aGVyIGEgQ1JDIGVycm9yIG9mIHNhbXBsZSBzaXplIGlzIGEKJiM0MzsJICogc2FtcGxlOyBpdCB2YWxpZGF0ZXMgdGhlIGNvbnRlbnRzIGFuZCByZXR1cm5zIDAgZm9yIGFueXRoaW5nIGVsc2UuCiYjNDM7CSAqLwomIzQzOwlpZiAodW5saWtlbHkocnhfc3RhdHMucnNfc3RhdHVzICZhbXA7IEFUSDlLX1JYRVJSX0NSQykgJmFtcDsmYW1wOwomIzQzOwkgICAgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW4ocHJpdiwgcnNfZGF0YWxlbikpIHsKJiM0MzsJCXJ4X3N0YXRzLnJzX3BoeWVyciA9IEFUSDlLX1BIWUVSUl9SQURBUjsKJiM0MzsJCWlmIChhdGhfY21uX3Byb2Nlc3NfZmZ0KCZhbXA7cHJpdi0mZ3Q7c3BlY19wcml2LCBoZHIsICZhbXA7cnhfc3RhdHMsCiYjNDM7CQkJCQlyeF9zdGF0dXMtJmd0O21hY3RpbWUpKQomIzQzOwkJCWdvdG8gcnhfbmV4dDsKJiM0MzsJfQomIzQzOwogCWlmICghYXRoOWtfY21uX3J4X2FjY2VwdChjb21tb24sIGhkciwgcnhfc3RhdHVzLCAmYW1wO3J4X3N0YXRzLAogCQkJJmFtcDtkZWNyeXB0X2Vycm9yLCBwcml2LSZndDtyeGZpbHRlcikpCiAJCWdvdG8gcnhfbmV4dDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUyNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIGl0JiMzOTtzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bGwgZG8gaXMgcmVhbGx5IGV4YW1pbmUgdGhlIGRpZmYg4oCTIHRoZSBtb2RpZmllZCBmaWxlcyB0ZWxsIGEgc3RvcnkuIEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmNgLiBSaWdodCBhd2F5LCB0aGF0IHJhaXNlcyBhIGZldyBxdWVzdGlvbnMuIElzIHRoaXMgYSBVU0Igd2lyZWxlc3MgZHJpdmVyLCBvciBQQ0ksIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIHF1aWNrIGNoZWNrIHNob3VsZCBjb25maXJtIG15IHN1c3BpY2lvbnMuIEFoLCBpdCYjMzk7cyB0aGUgQXRoZXJvcyBVU0IgODAyLjExbiB3aXJlbGVzcyBkZXZpY2UgZHJpdmVyLCBIVEMgbWVhbmluZyBIb3N0IFRhcmdldCBDb21tdW5pY2F0aW9uIG92ZXIgVVNCLiBOb3csIGNhbiB0aGlzIHRoaW5nIGJlIGVtdWxhdGVkIHRocm91Z2ggc3l6a2FsbGVyJiMzOTtzIFVTQiBjYXBhYmlsaXRpZXM/IFRoaW5raW5nIGFib3V0IHN5emthbGxlciYjMzk7cyBVU0IgZnV6emluZywgaXQgaGFzIGZ1bmN0aW9ucyBsaWtlIGBzeXpfdXNiX2Nvbm5lY3RgIC0gdGhhdCYjMzk7cyBhIGdvb2Qgc2lnbi4gQW5kIGdpdmVuIHRoYXQgdGhpcyBpcyBhIFVTQiBkcml2ZXIgKGBBVEg5S19IVENgKSwgdGhlIGFuc3dlciBpcyB5ZXMsIHRoaXMgaXMgcHJvbWlzaW5nLiBCdXQgSSBzaG91bGQgY29uZmlybSB3aXRoIHRoZSBLY29uZmlnIGFuZCBvdGhlciBmaWxlcyB0byBjb25maXJtIHdoYXQgSSBzdXNwZWN0LiBJJiMzOTtsbCBuZWVkIHRvIHJ1biBzb21ldGhpbmcgbGlrZSBncmVwcGVyIG9yIHF1aWNrbHkgcmVhZCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlIHVuZGVyIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBVEg5S19IVEMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc9MTM9Y29uZmlnIEFUSDlLX0JUQ09FWF9TVVBQT1JUXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNC1cdGJvb2wgXCYjMzQ7QXRoZXJvcyBibHVldG9vdGggY29leGlzdGVuY2Ugc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTU6XHRkZXBlbmRzIG9uIChBVEg5SyB8fCBBVEg5S19IVEMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNi1cdGRlZmF1bHQgeVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnPTE1Nj1jb25maWcgQVRIOUtfUENJX05PX0VFUFJPTVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE3MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjE3Mjpjb25maWcgQVRIOUtfSFRDXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNzMtXHR0cmlzdGF0ZSBcJiMzNDtBdGhlcm9zIEhUQyBiYXNlZCB3aXJlbGVzcyBjYXJkcyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTg2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTg3OmNvbmZpZyBBVEg5S19IVENfREVCVUdGU1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTg4LVx0Ym9vbCBcJiMzNDtBdGhlcm9zIGF0aDlrX2h0YyBkZWJ1Z2dpbmdcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjE4OTpcdGRlcGVuZHMgb24gQVRIOUtfSFRDIFx1MDAyNlx1MDAyNiBERUJVR19GU1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTkwLVx0c2VsZWN0IEFUSDlLX0NPTU1PTl9ERUJVR1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnPTIwNj1jb25maWcgQVRIOUtfQ09NTU9OX1NQRUNUUkFMXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0yMDctXHRib29sIFwmIzM0O0F0aGVyb3MgYXRoOWsvYXRoOWtfaHRjIHNwZWN0cmFsIHNjYW4gc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MjA4Olx0ZGVwZW5kcyBvbiBBVEg5S19ERUJVR0ZTIHx8IEFUSDlLX0hUQ19ERUJVR0ZTXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0yMDktXHRzZWxlY3QgUkVMQVlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGU9Njg9YXRoOWtfaHRjLXkgJiM0Mzs9XHRodGNfaHN0Lm8gXFxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGUtNzYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGU6Nzc6YXRoOWtfaHRjLSQoQ09ORklHX0FUSDlLX0hUQ19ERUJVR0ZTKSAmIzQzOz0gaHRjX2Rydl9kZWJ1Zy5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGUtNzgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGU6Nzk6b2JqLSQoQ09ORklHX0FUSDlLX0hUQykgJiM0Mzs9IGF0aDlrX2h0Yy5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGUtODAtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19lZXByb20uYz0zMzkwPXN0YXRpYyBib29sIGF0aDlrX2h3X2FyOTMwMF9maWxsX2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2VlcHJvbS5jLTM0MDAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2VlcHJvbS5jOjM0MDE6I2lmIGRlZmluZWQoQ09ORklHX0FUSDlLX0RFQlVHRlMpIHx8IGRlZmluZWQoQ09ORklHX0FUSDlLX0hUQ19ERUJVR0ZTKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19lZXByb20uYy0zNDAyLXN0YXRpYyB1MzIgYXI5MDAzX2R1bXBfbW9kYWxfZWVwcm9tKGNoYXIgKmJ1ZiwgdTMyIGxlbiwgdTMyIHNpemUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYz0yMzI9c3RhdGljIGlubGluZSB2b2lkIGF0aDlrX3NrYl9xdWV1ZV9jb21wbGV0ZShzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYy0yMzgtXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUocXVldWUpKSAhPSBOVUxMKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jOjIzOTojaWZkZWYgQ09ORklHX0FUSDlLX0hUQ19ERUJVR0ZTXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jLTI0MC1cdFx0aW50IGxuID0gc2tiLVx1MDAzZWxlbjtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jPTM3Nj1zdGF0aWMgaW50IGhpZl91c2Jfc2VuZF90eChzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYy0zOTktXHQvKiBNZ210L0JlYWNvbiBmcmFtZXMgZG9uJiMzOTt0IHVzZSB0aGUgVFggYnVmZmVyIHBvb2wgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmM6NDAwOlx0aWYgKCh0eF9jdGwtXHUwMDNldHlwZSA9PSBBVEg5S19IVENfTUdNVCkgfHxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmM6NDAxOlx0ICAgICh0eF9jdGwtXHUwMDNldHlwZSA9PSBBVEg5S19IVENfQkVBQ09OKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYy00MDItXHRcdHJldCA9IGhpZl91c2Jfc2VuZF9tZ210KGhpZl9kZXYsIHNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYy00MDYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jOjQwNzpcdGlmICgodHhfY3RsLVx1MDAzZXR5cGUgPT0gQVRIOUtfSFRDX05PUk1BTCkgfHxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmM6NDA4Olx0ICAgICh0eF9jdGwtXHUwMDNldHlwZSA9PSBBVEg5S19IVENfQU1QRFUpKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jLTQwOS1cdFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZoaWZfZGV2LVx1MDAzZXR4LnR4X3NrYl9xdWV1ZSwgc2tiKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jPTQ4Nz1zdGF0aWMgaW5saW5lIGJvb2wgY2hlY2tfaW5kZXgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaWR4KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMtNDkyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYzo0OTM6XHRpZiAoKHR4X2N0bC1cdTAwM2V0eXBlID09IEFUSDlLX0hUQ19BTVBEVSkgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jLTQ5NC1cdCAgICAodHhfY3RsLVx1MDAzZXN0YV9pZHggPT0gaWR4KSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg9NTY9ZW51bSBodGNfb3Btb2RlIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtNjQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6NjU6I2RlZmluZSBBVEg5S19IVENfQU1QRFUgIDFcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDo2NjojZGVmaW5lIEFUSDlLX0hUQ19OT1JNQUwgMlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjY3OiNkZWZpbmUgQVRIOUtfSFRDX0JFQUNPTiAzXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6Njg6I2RlZmluZSBBVEg5S19IVENfTUdNVCAgIDRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC02OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDo3MDojZGVmaW5lIEFUSDlLX0hUQ19UWF9DVFNPTkxZICAgICAgMHgxXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6NzE6I2RlZmluZSBBVEg5S19IVENfVFhfUlRTQ1RTICAgICAgIDB4MlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTcyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oPTczPXN0cnVjdCB0eF9mcmFtZV9oZHIge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC03Ny1cdHU4IHRpZG5vO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjc4Olx0X19iZTMyIGZsYWdzOyAvKiBBVEg5S19IVENfVFhfKiAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTc5LVx0dTgga2V5X3R5cGU7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oPTE5ND1zdHJ1Y3QgYXRoOWtfaHRjX3RhcmdldF9yeF9zdGF0cyB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTE5OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDoyMDA6I2RlZmluZSBBVEg5S19IVENfTUFYX1ZJRiAyXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6MjAxOiNkZWZpbmUgQVRIOUtfSFRDX01BWF9CQ05fVklGIDJcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0yMDItXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oPTI0OT1zdHJ1Y3QgYXRoOWtfdmlmX2l0ZXJfZGF0YSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTI1My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDoyNTQ6I2RlZmluZSBBVEg5S19IVENfTUFYX1NUQSA4XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6MjU1OiNkZWZpbmUgQVRIOUtfSFRDX01BWF9USUQgOFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTI1Ni1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg9MjY0PXN0cnVjdCBhdGg5a19odGNfc3RhIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0yNjUtXHR1OCBpbmRleDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDoyNjY6XHRlbnVtIHRpZF9hZ2dyX3N0YXRlIHRpZF9zdGF0ZVtBVEg5S19IVENfTUFYX1RJRF07XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtMjY3LVx0c3RydWN0IHdvcmtfc3RydWN0IHJjX3VwZGF0ZV93b3JrO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0yNzAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6MjcxOiNkZWZpbmUgQVRIOUtfSFRDX1JYQlVGIDI1NlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTI3Mi0jZGVmaW5lIEhUQ19SWF9GUkFNRV9IRUFERVJfU0laRSA0MFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaD0yODE9c3RydWN0IGF0aDlrX2h0Y19yeCB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTI4Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDoyODc6I2RlZmluZSBBVEg5S19IVENfVFhfQ0xFQU5VUF9JTlRFUlZBTCA1MCAvKiBtcyAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjI4ODojZGVmaW5lIEFUSDlLX0hUQ19UWF9USU1FT1VUX0lOVEVSVkFMIDMwMDAgLyogbXMgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDoyODk6I2RlZmluZSBBVEg5S19IVENfVFhfUkVTRVJWRSAxMFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjI5MDojZGVmaW5lIEFUSDlLX0hUQ19UWF9USU1FT1VUX0NPVU5UIDQwXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6MjkxOiNkZWZpbmUgQVRIOUtfSFRDX1RYX1RIUkVTSE9MRCAoTUFYX1RYX0JVRl9OVU0gLSBBVEg5S19IVENfVFhfUkVTRVJWRSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0yOTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6MjkzOiNkZWZpbmUgQVRIOUtfSFRDX09QX1RYX1FVRVVFU19TVE9QIEJJVCgwKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjI5NDojZGVmaW5lIEFUSDlLX0hUQ19PUF9UWF9EUkFJTiAgICAgICBCSVQoMSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0yOTUtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oPTMxMT1zdHJ1Y3QgYXRoOWtfaHRjX3R4X2N0bCB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6MzEyOlx0dTggdHlwZTsgLyogQVRIOUtfSFRDXyogKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0zMTMtXHR1OCBlcGlkO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaD0zMTk9c3RhdGljIGlubGluZSBzdHJ1Y3QgYXRoOWtfaHRjX3R4X2N0bCAqSFRDX1NLQl9DQihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0zMjctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6MzI4OiNpZmRlZiBDT05GSUdfQVRIOUtfSFRDX0RFQlVHRlNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0zMjktI2RlZmluZSBfX1NUQVRfU0FGRShoaWZfZGV2LCBleHByKVx0ZG8geyAoKGhpZl9kZXYpLVx1MDAzZWh0Y19oYW5kbGUtXHUwMDNlZHJ2X3ByaXYgPyAoZXhwcikgOiAwKTsgfSB3aGlsZSAoMClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg9Mzg4PXN0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19odGNfZXJyX3N0YXRfcngoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0zOTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6MzkzOiNlbmRpZiAvKiBDT05GSUdfQVRIOUtfSFRDX0RFQlVHRlMgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0zOTQtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oPTQwOT1zdHJ1Y3QgaHRjX2JlYWNvbiB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTQxNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDo0MTY6XHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqYnNsb3RbQVRIOUtfSFRDX01BWF9CQ05fVklGXTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC00MTctXHR1MzIgYm1pc3NjbnQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oPTQ1Nj1zdHJ1Y3QgYXRoOWtfaHRjX3ByaXYge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC00NzgtXHR1OCBzdGFfc2xvdDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDo0Nzk6XHR1OCB2aWZfc3RhX3Bvc1tBVEg5S19IVENfTUFYX1ZJRl07XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtNDgwLVx0dTggbnVtX2lic3NfdmlmO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC01MzUtXHRzdHJ1Y3QgZGVsYXllZF93b3JrIGR1dHlfY3ljbGVfd29yaztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDo1MzY6I2lmZGVmIENPTkZJR19BVEg5S19IVENfREVCVUdGU1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTUzNy1cdHN0cnVjdCBhdGg5a19kZWJ1ZyBkZWJ1Zztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg9NjQxPWludCBhdGg5a19odGNfcmVzdW1lKHN0cnVjdCBodGNfdGFyZ2V0ICpodGNfaGFuZGxlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC02NDItI2VuZGlmXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6NjQzOiNpZmRlZiBDT05GSUdfQVRIOUtfSFRDX0RFQlVHRlNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC02NDQtaW50IGF0aDlrX2h0Y19pbml0X2RlYnVnKHN0cnVjdCBhdGhfaHcgKmFoKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg9NjQ4PXN0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19odGNfZGVpbml0X2RlYnVnKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtNjUwLX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDo2NTE6I2VuZGlmIC8qIENPTkZJR19BVEg5S19IVENfREVCVUdGUyAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTY1Mi1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYz0xMTE9c3RhdGljIHZvaWQgYXRoOWtfaHRjX2JlYWNvbl9jb25maWdfYXAoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jLTExNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jOjExNzpcdGF0aDlrX2Ntbl9iZWFjb25fY29uZmlnX2FwKGFoLCBjb25mLCBBVEg5S19IVENfTUFYX0JDTl9WSUYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmMtMTE4LVx0YXRoOWtfaHRjX2JlYWNvbl9pbml0KHByaXYsIGNvbmYsIGZhbHNlKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYz0xOTE9c3RhdGljIHZvaWQgYXRoOWtfaHRjX3NlbmRfYmVhY29uKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYy0yNDItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYzoyNDM6XHR0eF9jdGwtXHUwMDNldHlwZSA9IEFUSDlLX0hUQ19CRUFDT047XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYy0yNDQtXHR0eF9jdGwtXHUwMDNlZXBpZCA9IHByaXYtXHUwMDNlYmVhY29uX2VwO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jPTI2ND1zdGF0aWMgaW50IGF0aDlrX2h0Y19jaG9vc2VfYnNsb3Qoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jLTI3Ni1cdHRzZnR1ID0gVFNGX1RPX1RVKHRzZiBcdTAwM2VcdTAwM2UgMzIsIHRzZik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYzoyNzc6XHRzbG90ID0gKCh0c2Z0dSAlIGludHZhbCkgKiBBVEg5S19IVENfTUFYX0JDTl9WSUYpIC8gaW50dmFsO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmM6Mjc4Olx0c2xvdCA9IEFUSDlLX0hUQ19NQVhfQkNOX1ZJRiAtIHNsb3QgLSAxO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmMtMjc5LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jPTMyNT12b2lkIGF0aDlrX2h0Y19hc3NpZ25fYnNsb3Qoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jLTMzMi1cdHNwaW5fbG9ja19iaChcdTAwMjZwcml2LVx1MDAzZWJlYWNvbl9sb2NrKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jOjMzMzpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDlLX0hUQ19NQVhfQkNOX1ZJRjsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jLTMzNC1cdFx0aWYgKHByaXYtXHUwMDNlYmVhY29uLmJzbG90W2ldID09IE5VTEwpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYz0zNjU9dm9pZCBhdGg5a19odGNfc2V0X3RzZmFkanVzdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmMtMzgwLVx0ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYzozODE6XHR0c2ZhZGp1c3QgPSBjdXJfY29uZi1cdTAwM2ViZWFjb25faW50ZXJ2YWwgKiBhdnAtXHUwMDNlYnNsb3QgLyBBVEg5S19IVENfTUFYX0JDTl9WSUY7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYy0zODItXHRhdnAtXHUwMDNldHNmYWRqdXN0ID0gY3B1X3RvX2xlNjQoVFVfVE9fVVNFQyh0c2ZhZGp1c3QpKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9kZWJ1Zy5jPTM5OD1zdGF0aWMgY29uc3QgY2hhciBhdGg5a19odGNfZ3N0cmluZ3Nfc3RhdHNbXVtFVEhfR1NUUklOR19MRU5dID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmMtNDE4LX07XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9kZWJ1Zy5jOjQxOTojZGVmaW5lIEFUSDlLX0hUQ19TU1RBVFNfTEVOIEFSUkFZX1NJWkUoYXRoOWtfaHRjX2dzdHJpbmdzX3N0YXRzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYy00MjAtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYz00MzA9aW50IGF0aDlrX2h0Y19nZXRfZXRfc3NldF9jb3VudChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9kZWJ1Zy5jLTQzMy1cdGlmIChzc2V0ID09IEVUSF9TU19TVEFUUylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmM6NDM0Olx0XHRyZXR1cm4gQVRIOUtfSFRDX1NTVEFUU19MRU47XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9kZWJ1Zy5jLTQzNS1cdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmM9NDQ4PXZvaWQgYXRoOWtfaHRjX2dldF9ldF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9kZWJ1Zy5jLTQ3My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmM6NDc0Olx0V0FSTl9PTihpICE9IEFUSDlLX0hUQ19TU1RBVFNfTEVOKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmMtNDc1LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmM9NjA2PXN0YXRpYyBpbnQgYXRoOWtfaW5pdF9wcml2KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmMtNjczLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfaW5pdC5jOjY3NDpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDlLX0hUQ19NQVhfQkNOX1ZJRjsgaSYjNDM7JiM0MzspXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmMtNjc1LVx0XHRwcml2LVx1MDAzZWJlYWNvbi5ic2xvdFtpXSA9IE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jPTE4ND12b2lkIGF0aDlrX2h0Y19yZXNldChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTIzMy1cdG1vZF90aW1lcihcdTAwMjZwcml2LVx1MDAzZXR4LmNsZWFudXBfdGltZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM6MjM0Olx0XHQgIGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhBVEg5S19IVENfVFhfQ0xFQU5VUF9JTlRFUlZBTCkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTIzNS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM9MjQwPXN0YXRpYyBpbnQgYXRoOWtfaHRjX3NldF9jaGFubmVsKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtMzExLVx0bW9kX3RpbWVyKFx1MDAyNnByaXYtXHUwMDNldHguY2xlYW51cF90aW1lcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYzozMTI6XHRcdCAgamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKEFUSDlLX0hUQ19UWF9DTEVBTlVQX0lOVEVSVkFMKSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtMzEzLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYz0zNTA9c3RhdGljIGludCBhdGg5a19odGNfYWRkX21vbml0b3JfaW50ZXJmYWNlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtMzU3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jOjM1ODpcdGlmICgocHJpdi1cdTAwM2VudmlmcyBcdTAwM2U9IEFUSDlLX0hUQ19NQVhfVklGKSB8fFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jOjM1OTpcdCAgICAocHJpdi1cdTAwM2Vuc3RhdGlvbnMgXHUwMDNlPSBBVEg5S19IVENfTUFYX1NUQSkpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYy0zNjAtXHRcdHJldCA9IC1FTk9CVUZTO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYy0zNjQtXHRzdGFfaWR4ID0gZmZ6KHByaXYtXHUwMDNlc3RhX3Nsb3QpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jOjM2NTpcdGlmICgoc3RhX2lkeCBcdTAwM2MgMCkgfHwgKHN0YV9pZHggXHUwMDNlIEFUSDlLX0hUQ19NQVhfU1RBKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTM2Ni1cdFx0cmV0ID0gLUVOT0JVRlM7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jPTQ2Nj1zdGF0aWMgaW50IGF0aDlrX2h0Y19hZGRfc3RhdGlvbihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTQ3Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYzo0Nzg6XHRpZiAocHJpdi1cdTAwM2Vuc3RhdGlvbnMgXHUwMDNlPSBBVEg5S19IVENfTUFYX1NUQSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYy00NzktXHRcdHJldHVybiAtRU5PQlVGUztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtNDgxLVx0c3RhX2lkeCA9IGZmeihwcml2LVx1MDAzZXN0YV9zbG90KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYzo0ODI6XHRpZiAoKHN0YV9pZHggXHUwMDNjIDApIHx8IChzdGFfaWR4IFx1MDAzZSBBVEg5S19IVENfTUFYX1NUQSkpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtNDgzLVx0XHRyZXR1cm4gLUVOT0JVRlM7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jPTcwMj1zdGF0aWMgaW50IGF0aDlrX2h0Y190eF9hZ2dyX29wZXIoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYy03MTMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM6NzE0Olx0aWYgKHRpZCBcdTAwM2U9IEFUSDlLX0hUQ19NQVhfVElEKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTcxNS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jPTkwNz1zdGF0aWMgaW50IGF0aDlrX2h0Y19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtOTYwLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnByaXYtXHUwMDNldHgudHhfbG9jayk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM6OTYxOlx0cHJpdi1cdTAwM2V0eC5mbGFncyBcdTAwMjY9IH5BVEg5S19IVENfT1BfVFhfUVVFVUVTX1NUT1A7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtOTYyLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cHJpdi1cdTAwM2V0eC50eF9sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtOTY2LVx0bW9kX3RpbWVyKFx1MDAyNnByaXYtXHUwMDNldHguY2xlYW51cF90aW1lcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYzo5Njc6XHRcdCAgamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKEFUSDlLX0hUQ19UWF9DTEVBTlVQX0lOVEVSVkFMKSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtOTY4LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYz0xNjU4PXN0YXRpYyBpbnQgYXRoOWtfaHRjX2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtMTY4OC1cdGNhc2UgSUVFRTgwMjExX0FNUERVX1RYX09QRVJBVElPTkFMOlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jOjE2ODk6XHRcdGlmICh0aWQgXHUwMDNlPSBBVEg5S19IVENfTUFYX1RJRCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTE2OTAtXHRcdFx0cmV0ID0gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM9MTg3ND1zdHJ1Y3QgaWVlZTgwMjExX29wcyBhdGg5a19odGNfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYy0xOTA2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jOjE5MDc6I2lmZGVmIENPTkZJR19BVEg5S19IVENfREVCVUdGU1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTE5MDgtXHQuZ2V0X2V0X3NzZXRfY291bnQgID0gYXRoOWtfaHRjX2dldF9ldF9zc2V0X2NvdW50LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz0yMz1zdGF0aWMgY29uc3QgaW50IHN1YnR5cGVfdHhxX3RvX2h3cVtdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0yOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzozMDojZGVmaW5lIEFUSDlLX0hUQ19JTklUX1RYUShzdWJ0eXBlKSBkbyB7XHRcdFx0XFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0zMS1cdFx0cWkudHFpX3N1YnR5cGUgPSBzdWJ0eXBlX3R4cV90b19od3Fbc3VidHlwZV07XHRcXFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz01Nj12b2lkIGF0aDlrX2h0Y19jaGVja19zdG9wX3F1ZXVlcyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTU5LVx0cHJpdi1cdTAwM2V0eC5xdWV1ZWRfY250JiM0MzsmIzQzOztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo2MDpcdGlmICgocHJpdi1cdTAwM2V0eC5xdWV1ZWRfY250IFx1MDAzZT0gQVRIOUtfSFRDX1RYX1RIUkVTSE9MRCkgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NjE6XHQgICAgIShwcml2LVx1MDAzZXR4LmZsYWdzIFx1MDAyNiBBVEg5S19IVENfT1BfVFhfUVVFVUVTX1NUT1ApKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NjI6XHRcdHByaXYtXHUwMDNldHguZmxhZ3MgfD0gQVRIOUtfSFRDX09QX1RYX1FVRVVFU19TVE9QO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTYzLVx0XHRpZWVlODAyMTFfc3RvcF9xdWV1ZXMocHJpdi1cdTAwM2Vodyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTY4PXZvaWQgYXRoOWtfaHRjX2NoZWNrX3dha2VfcXVldWVzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNzAtXHRzcGluX2xvY2tfYmgoXHUwMDI2cHJpdi1cdTAwM2V0eC50eF9sb2NrKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo3MTpcdGlmICgocHJpdi1cdTAwM2V0eC5xdWV1ZWRfY250IFx1MDAzYyBBVEg5S19IVENfVFhfVEhSRVNIT0xEKSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo3MjpcdCAgICAocHJpdi1cdTAwM2V0eC5mbGFncyBcdTAwMjYgQVRIOUtfSFRDX09QX1RYX1FVRVVFU19TVE9QKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjczOlx0XHRwcml2LVx1MDAzZXR4LmZsYWdzIFx1MDAyNj0gfkFUSDlLX0hUQ19PUF9UWF9RVUVVRVNfU1RPUDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy03NC1cdFx0aWVlZTgwMjExX3dha2VfcXVldWVzKHByaXYtXHUwMDNlaHcpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz0yMTQ9c3RhdGljIHZvaWQgYXRoOWtfaHRjX3R4X21nbXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0yNDAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MjQxOlx0dHhfY3RsLVx1MDAzZXR5cGUgPSBBVEg5S19IVENfTUdNVDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0yNDItXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTI2MD1zdGF0aWMgdm9pZCBhdGg5a19odGNfdHhfZGF0YShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTI5Mi1cdGlmICh0eF9pbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MjkzOlx0XHR0eF9jdGwtXHUwMDNldHlwZSA9IEFUSDlLX0hUQ19BTVBEVTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzoyOTQ6XHRcdHR4X2hkci5kYXRhX3R5cGUgPSBBVEg5S19IVENfQU1QRFU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMjk1LVx0fSBlbHNlIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzoyOTY6XHRcdHR4X2N0bC1cdTAwM2V0eXBlID0gQVRIOUtfSFRDX05PUk1BTDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzoyOTc6XHRcdHR4X2hkci5kYXRhX3R5cGUgPSBBVEg5S19IVENfTk9STUFMO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTI5OC1cdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMzEyLVx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2UgcHJpdi1cdTAwM2Vody1cdTAwM2V3aXBoeS1cdTAwM2VydHNfdGhyZXNob2xkKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjMxMzpcdFx0XHRmbGFncyB8PSBBVEg5S19IVENfVFhfUlRTQ1RTO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTMxNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0zMTUtXHQvKiBDVFMtdG8tc2VsZiAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjMxNjpcdGlmICghKGZsYWdzIFx1MDAyNiBBVEg5S19IVENfVFhfUlRTQ1RTKSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0zMTctXHQgICAgKHZpZiBcdTAwMjZcdTAwMjYgdmlmLVx1MDAzZWJzc19jb25mLnVzZV9jdHNfcHJvdCkpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MzE4Olx0XHRmbGFncyB8PSBBVEg5S19IVENfVFhfQ1RTT05MWTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0zMTktXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTM5Mj1zdGF0aWMgaW5saW5lIGJvb2wgX19hdGg5a19odGNfY2hlY2tfdHhfYWdncihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTM5Ny1cdHNwaW5fbG9ja19iaChcdTAwMjZwcml2LVx1MDAzZXR4LnR4X2xvY2spO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjM5ODpcdGlmICgodGlkIFx1MDAzYyBBVEg5S19IVENfTUFYX1RJRCkgXHUwMDI2XHUwMDI2IChpc3RhLVx1MDAzZXRpZF9zdGF0ZVt0aWRdID09IEFHR1JfU1RPUCkpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMzk5LVx0XHRyZXQgPSB0cnVlO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz00NDU9c3RhdGljIHZvaWQgYXRoOWtfaHRjX3R4X3Byb2Nlc3Moc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy00NzgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NDc5Olx0aWYgKHR4cy1cdTAwM2V0c19mbGFncyBcdTAwMjYgQVRIOUtfSFRDX1RYU1RBVF9BQ0spIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy00ODAtXHRcdHR4X2luZm8tXHUwMDNlZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy00ODQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NDg1Olx0aWYgKHR4cy1cdTAwM2V0c19mbGFncyBcdTAwMjYgQVRIOUtfSFRDX1RYU1RBVF9GSUxUKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTQ4Ni1cdFx0dHhfaW5mby1cdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9UWF9GSUxURVJFRDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy00ODctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NDg4Olx0aWYgKHR4cy1cdTAwM2V0c19mbGFncyBcdTAwMjYgQVRIOUtfSFRDX1RYU1RBVF9SVENfQ1RTKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTQ4OS1cdFx0cmF0ZS1cdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFM7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTQ5MS1cdHJhdGUtXHUwMDNlY291bnQgPSAxO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjQ5MjpcdHJhdGUtXHUwMDNlaWR4ID0gTVModHhzLVx1MDAzZXRzX3JhdGUsIEFUSDlLX0hUQ19UWFNUQVRfUkFURSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNDkzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjQ5NDpcdGlmICh0eHMtXHUwMDNldHNfZmxhZ3MgXHUwMDI2IEFUSDlLX0hUQ19UWFNUQVRfTUNTKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNDk1LVx0XHRyYXRlLVx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ19NQ1M7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNDk2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjQ5NzpcdFx0aWYgKHR4cy1cdTAwM2V0c19mbGFncyBcdTAwMjYgQVRIOUtfSFRDX1RYU1RBVF9DVzQwKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTQ5OC1cdFx0XHRyYXRlLVx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEg7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NDk5Olx0XHRpZiAodHhzLVx1MDAzZXRzX2ZsYWdzIFx1MDAyNiBBVEg5S19IVENfVFhTVEFUX1NHSSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01MDAtXHRcdFx0cmF0ZS1cdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0k7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTUzOT12b2lkIGF0aDlrX2h0Y190eF9kcmFpbihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTU0My1cdHNwaW5fbG9ja19iaChcdTAwMjZwcml2LVx1MDAzZXR4LnR4X2xvY2spO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjU0NDpcdHByaXYtXHUwMDNldHguZmxhZ3MgfD0gQVRIOUtfSFRDX09QX1RYX0RSQUlOO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTU0NS1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnByaXYtXHUwMDNldHgudHhfbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTU3My1cdHNwaW5fbG9ja19iaChcdTAwMjZwcml2LVx1MDAzZXR4LnR4X2xvY2spO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjU3NDpcdHByaXYtXHUwMDNldHguZmxhZ3MgXHUwMDI2PSB+QVRIOUtfSFRDX09QX1RYX0RSQUlOO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTU3NS1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnByaXYtXHUwMDNldHgudHhfbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTU3OD12b2lkIGF0aDlrX3R4X2ZhaWxlZF90YXNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNTgyLVx0c3Bpbl9sb2NrKFx1MDAyNnByaXYtXHUwMDNldHgudHhfbG9jayk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NTgzOlx0aWYgKHByaXYtXHUwMDNldHguZmxhZ3MgXHUwMDI2IEFUSDlLX0hUQ19PUF9UWF9EUkFJTikge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTU4NC1cdFx0c3Bpbl91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2V0eC50eF9sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM9NjE4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiogYXRoOWtfaHRjX3R4X2dldF9wYWNrZXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy02MjQtXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjYyNTpcdHU4IGVwaWQgPSBNUyh0eHMtXHUwMDNldHNfcmF0ZSwgQVRIOUtfSFRDX1RYU1RBVF9FUElEKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy02MjYtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTcxNj1zdGF0aWMgaW5saW5lIGJvb2wgY2hlY2tfcGFja2V0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNzI0LVx0XHQgICAgICAgdHhfY3RsLVx1MDAzZXRpbWVzdGFtcCAmIzQzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjcyNTpcdFx0ICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoQVRIOUtfSFRDX1RYX1RJTUVPVVRfSU5URVJWQUwpKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTcyNi1cdFx0YXRoX2RiZyhjb21tb24sIFhNSVQsIFwmIzM0O0Ryb3BwaW5nIGEgcGFja2V0IGR1ZSB0byBUWCB0aW1lb3V0XFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM9NzYxPXZvaWQgYXRoOWtfaHRjX3R4X2NsZWFudXBfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTc3Ni1cdFx0XHRcdGV2ZW50LVx1MDAzZXR4cy5jb29raWUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6Nzc3Olx0XHRcdFx0TVMoZXZlbnQtXHUwMDNldHhzLnRzX3JhdGUsIEFUSDlLX0hUQ19UWFNUQVRfRVBJRCkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTc3OC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNzg0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjc4NTpcdFx0aWYgKCYjNDM7JiM0MztldmVudC1cdTAwM2Vjb3VudCBcdTAwM2U9IEFUSDlLX0hUQ19UWF9USU1FT1VUX0NPVU5UKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNzg2LVx0XHRcdGxpc3RfZGVsKFx1MDAyNmV2ZW50LVx1MDAzZWxpc3QpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy04MDUtXHRtb2RfdGltZXIoXHUwMDI2cHJpdi1cdTAwM2V0eC5jbGVhbnVwX3RpbWVyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjgwNjpcdFx0ICBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoQVRIOUtfSFRDX1RYX0NMRUFOVVBfSU5URVJWQUwpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy04MDctfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz04Mjc9Ym9vbCBhdGg5a19odGNfdHhxX3NldHVwKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgaW50IHN1YnR5cGUpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTgzNC1cdG1lbXNldChcdTAwMjZxaSwgMCwgc2l6ZW9mKHFpKSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6ODM1Olx0QVRIOUtfSFRDX0lOSVRfVFhRKHN1YnR5cGUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTgzNi1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM9ODUyPWludCBhdGg5a19odGNfY2FicV9zZXR1cChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTg1Ni1cdG1lbXNldChcdTAwMjZxaSwgMCwgc2l6ZW9mKHFpKSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6ODU3Olx0QVRIOUtfSFRDX0lOSVRfVFhRKDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTg1OC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM9MTIyNT1pbnQgYXRoOWtfcnhfaW5pdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEyMzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MTIzMjpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDlLX0hUQ19SWEJVRjsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xMjMzLVx0XHRzdHJ1Y3QgYXRoOWtfaHRjX3J4YnVmICpyeGJ1ZiA9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5jPTEzOD12b2lkIGF0aDlrX3dtaV9ldmVudF90YXNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmMtMTc4LVx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZwcml2LVx1MDAzZXR4LnR4X2xvY2spO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5jOjE3OTpcdFx0XHRpZiAocHJpdi1cdTAwM2V0eC5mbGFncyBcdTAwMjYgQVRIOUtfSFRDX09QX1RYX0RSQUlOKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmMtMTgwLVx0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cHJpdi1cdTAwM2V0eC50eF9sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmg9Mzk9c3RydWN0IHdtaV9ldmVudF9zd2JhIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmgtNTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmg6NTE6I2RlZmluZSBBVEg5S19IVENfVFhTVEFUX0FDSyAgICAgICAgQklUKDApXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmg6NTI6I2RlZmluZSBBVEg5S19IVENfVFhTVEFUX0ZJTFQgICAgICAgQklUKDEpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmg6NTM6I2RlZmluZSBBVEg5S19IVENfVFhTVEFUX1JUQ19DVFMgICAgQklUKDIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmg6NTQ6I2RlZmluZSBBVEg5S19IVENfVFhTVEFUX01DUyAgICAgICAgQklUKDMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmg6NTU6I2RlZmluZSBBVEg5S19IVENfVFhTVEFUX0NXNDAgICAgICAgQklUKDQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmg6NTY6I2RlZmluZSBBVEg5S19IVENfVFhTVEFUX1NHSSAgICAgICAgQklUKDUpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmgtNTctXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5oLTYzLSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5oOjY0OiNkZWZpbmUgQVRIOUtfSFRDX1RYU1RBVF9SQVRFICAgICAgIDB4MGZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93bWkuaDo2NTojZGVmaW5lIEFUSDlLX0hUQ19UWFNUQVRfUkFURV9TICAgICAwXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmgtNjYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmg6Njc6I2RlZmluZSBBVEg5S19IVENfVFhTVEFUX0VQSUQgICAgICAgMHhmMFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5oOjY4OiNkZWZpbmUgQVRIOUtfSFRDX1RYU1RBVF9FUElEX1MgICAgIDRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93bWkuaC02OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjUyMAoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRGl2aW5nIERlZXAgaW50byB0aGUgQXRoZXJvcyBDb2RlKioKCk9rYXksIHRpbWUgdG8gcmVhbGx5IGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSBBdGhlcm9zIHdpcmVsZXNzIGRyaXZlci4gSSYjMzk7bSBmb2N1c2luZyBvbiBgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW5gLCBgYXRoOWtfcnhfcHJlcGFyZWAsIGFuZCBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAsIGFuZCB0aGUgY29kZSBpbW1lZGlhdGVseSBhcm91bmQgdGhlbSwgYWxsIHdpdGhpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jYC4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGRyaXZlciBoYW5kbGVzIHNwZWN0cmFsIGFuYWx5c2lzIHNhbXBsZSBsZW5ndGgsIGhvdyBpdCBwcmVwYXJlcyBmb3IgcmVjZWl2ZSBvcGVyYXRpb25zLCBhbmQgcHJlY2lzZWx5IGhvdyB0aGUgRkZUIHByb2Nlc3NpbmcgaXMgaGFwcGVuaW5nLiBUaGlzIGxpa2VseSByZWxhdGVzIHRvIHNpZ25hbCBwcm9jZXNzaW5nIGFuZCBkYXRhIGFjcXVpc2l0aW9uLCBhbmQgSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgbG93LWxldmVsIGZ1bmN0aW9ucyBpbnRlZ3JhdGUgd2l0aGluIHRoZSBlbnRpcmUgcmVjZWl2ZSBwYXRoLiBLbm93aW5nIHRoaXMgaXMgY3JpdGljYWwgdG8gcGVyZm9ybWFuY2UgYW5kLCBwb3RlbnRpYWxseSwgcGlucG9pbnRpbmcgYW55IG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLCBlc3BlY2lhbGx5IGFyb3VuZCBkYXRhIGZsb3cgYW5kIGludGVycnVwdCBoYW5kbGluZy4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cgYW5kIGlkZW50aWZ5IHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGhhcmR3YXJlIHJlZ2lzdGVycy4gTXkgZ29hbCBpcyBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlY2VpdmUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk2NTpcdFxuIDk2NjpcdFx0cnhfc3RhdHMtXHUwMDNlcnNfaXNhZ2dyXHQ9IHJ4c3RhdHVzLVx1MDAzZXJzX2lzYWdncjtcbiA5Njc6XHRcdHJ4X3N0YXRzLVx1MDAzZXJzX21vcmVhZ2dyXHQ9IHJ4c3RhdHVzLVx1MDAzZXJzX21vcmVhZ2dyO1xuIDk2ODpcdFx0cnhfc3RhdHMtXHUwMDNlcnNfbnVtX2RlbGltc1x0PSByeHN0YXR1cy1cdTAwM2Vyc19udW1fZGVsaW1zO1xuIDk2OTpcdFx0Y29udmVydF9odGNfZmxhZyhyeF9zdGF0cywgcnhzdGF0dXMpO1xuIDk3MDpcdH1cbiA5NzE6XHRcbiA5NzI6XHQvKlxuIDk3MzpcdCAqIFRoZSBmaXJtd2FyZSByZXBvcnRzIGEgZnJhbWUgdGhhdCBmYWlsZWQgaXRzIENSQyBhcyBhIENSQyBlcnJvciBldmVuIHdoZW5cbiA5NzQ6XHQgKiB0aGUgUEhZIGVycm9yIGJpdCBpcyBzZXQgYXMgd2VsbCwgc28gdW5kZXIgaW50ZXJmZXJlbmNlIHNwZWN0cmFsIHNhbXBsZXNcbiA5NzU6XHQgKiByZWFjaCB0aGUgaG9zdCBhcyBDUkMgZXJyb3JzLiBBIHNhbXBsZSBpcyByZWNvZ25pc2FibGUgYnkgaXRzIHNpemU6IHRoZVxuIDk3NjpcdCAqIEZGVCByZXBvcnQgbGVuZ3RoIGZvciB0aGUgY2hhbm5lbCB3aWR0aCwgcGx1cyBvciBtaW51cyB0aGUgdHdvIGJ5dGVzIHRoZVxuIDk3NzpcdCAqIE1BQyBtYXkgYWRkIG9yIGRyb3AuXG4gOTc4Olx0ICovXG4gOTc5Olx0c3RhdGljIGJvb2wgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW4oc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuIDk4MDpcdFx0XHRcdFx0XHQgICAgIHUxNiBsZW4pXG4gOTgxOlx0e1xuIDk4MjpcdFx0ZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFuX3R5cGU7XG4gOTgzOlx0XHR1MTYgZmZ0X2xlbjtcbiA5ODQ6XHRcbiA5ODU6XHRcdGlmIChwcml2LVx1MDAzZXNwZWNfcHJpdi5zcGVjdHJhbF9tb2RlID09IFNQRUNUUkFMX0RJU0FCTEVEKVxuIDk4NjpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gOTg3Olx0XG4gOTg4Olx0XHRjaGFuX3R5cGUgPSBjZmc4MDIxMV9nZXRfY2hhbmRlZl90eXBlKFx1MDAyNnByaXYtXHUwMDNlaHctXHUwMDNlY29uZi5jaGFuZGVmKTtcbiA5ODk6XHRcdGlmIChjaGFuX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUyB8fFxuIDk5MDpcdFx0ICAgIGNoYW5fdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0MFBMVVMpXG4gOTkxOlx0XHRcdGZmdF9sZW4gPSBTUEVDVFJBTF9IVDIwXzQwX1RPVEFMX0RBVEFfTEVOO1xuIDk5MjpcdFx0ZWxzZVxuIDk5MzpcdFx0XHRmZnRfbGVuID0gU1BFQ1RSQUxfSFQyMF9UT1RBTF9EQVRBX0xFTjtcbiA5OTQ6XHRcbiA5OTU6XHRcdHJldHVybiBsZW4gJiM0MzsgMSBcdTAwM2U9IGZmdF9sZW4gXHUwMDI2XHUwMDI2IGxlbiBcdTAwM2M9IGZmdF9sZW4gJiM0MzsgMjtcbiA5OTY6XHR9XG4gOTk3Olx0XG4gOTk4Olx0c3RhdGljIGJvb2wgYXRoOWtfcnhfcHJlcGFyZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG4gOTk5Olx0XHRcdFx0ICAgICBzdHJ1Y3QgYXRoOWtfaHRjX3J4YnVmICpyeGJ1ZixcbjEwMDA6XHRcdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpXG4xMDAxOlx0XG4xMDAyOlx0e1xuMTAwMzpcdFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjtcbjEwMDQ6XHRcdHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcHJpdi1cdTAwM2VodztcbjEwMDU6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSByeGJ1Zi1cdTAwM2Vza2I7XG4xMDA2Olx0XHRzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHByaXYtXHUwMDNlYWgpO1xuMTAwNzpcdFx0c3RydWN0IGF0aF9odyAqYWggPSBjb21tb24tXHUwMDNlYWg7XG4xMDA4Olx0XHRzdHJ1Y3QgYXRoX2h0Y19yeF9zdGF0dXMgKnJ4c3RhdHVzO1xuMTAwOTpcdFx0c3RydWN0IGF0aF9yeF9zdGF0dXMgcnhfc3RhdHM7XG4xMDEwOlx0XHRib29sIGRlY3J5cHRfZXJyb3IgPSBmYWxzZTtcbjEwMTE6XHRcdHUxNiByc19kYXRhbGVuO1xuMTAxMjpcdFx0Ym9vbCBpc19waHllcnI7XG4xMDEzOlx0XG4xMDE0Olx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgSFRDX1JYX0ZSQU1FX0hFQURFUl9TSVpFKSB7XG4xMDE1Olx0XHRcdGF0aF9lcnIoY29tbW9uLCBcJiMzNDtDb3JydXB0ZWQgUlggZnJhbWUsIGRyb3BwaW5nIChsZW46ICVkKVxcblwmIzM0OyxcbjEwMTY6XHRcdFx0XHRza2ItXHUwMDNlbGVuKTtcbjEwMTc6XHRcdFx0Z290byByeF9uZXh0O1xuMTAxODpcdFx0fVxuMTAxOTpcdFxuMTAyMDpcdFx0cnhzdGF0dXMgPSAoc3RydWN0IGF0aF9odGNfcnhfc3RhdHVzICopc2tiLVx1MDAzZWRhdGE7XG4xMDIxOlx0XG4xMDIyOlx0XHRyc19kYXRhbGVuID0gYmUxNl90b19jcHUocnhzdGF0dXMtXHUwMDNlcnNfZGF0YWxlbik7XG4xMDIzOlx0XHRpZiAodW5saWtlbHkocnNfZGF0YWxlbiAtXG4xMDI0Olx0XHQgICAgKHNrYi1cdTAwM2VsZW4gLSBIVENfUlhfRlJBTUVfSEVBREVSX1NJWkUpICE9IDApKSB7XG4xMDI1Olx0XHRcdGF0aF9lcnIoY29tbW9uLFxuMTAyNjpcdFx0XHRcdFwmIzM0O0NvcnJ1cHRlZCBSWCBkYXRhIGxlbiwgZHJvcHBpbmcgKGRsZW46ICVkLCBza2JsZW46ICVkKVxcblwmIzM0OyxcbjEwMjc6XHRcdFx0XHRyc19kYXRhbGVuLCBza2ItXHUwMDNlbGVuKTtcbjEwMjg6XHRcdFx0Z290byByeF9uZXh0O1xuMTAyOTpcdFx0fVxuMTAzMDpcdFxuMTAzMTpcdFx0aXNfcGh5ZXJyID0gcnhzdGF0dXMtXHUwMDNlcnNfc3RhdHVzIFx1MDAyNiBBVEg5S19SWEVSUl9QSFk7XG4xMDMyOlx0XHQvKlxuMTAzMzpcdFx0ICogRGlzY2FyZCB6ZXJvLWxlbmd0aCBwYWNrZXRzIGFuZCBwYWNrZXRzIHNtYWxsZXIgdGhhbiBhbiBBQ0tcbjEwMzQ6XHRcdCAqIHdoaWNoIGFyZSBub3QgUEhZX0VSUk9SIChzaG9ydCByYWRhciBwdWxzZXMgaGF2ZSBhIGxlbmd0aCBvZiAzKVxuMTAzNTpcdFx0ICovXG4xMDM2Olx0XHRpZiAodW5saWtlbHkoIXJzX2RhdGFsZW4gfHwgKHJzX2RhdGFsZW4gXHUwMDNjIDEwIFx1MDAyNlx1MDAyNiAhaXNfcGh5ZXJyKSkpIHtcbjEwMzc6XHRcdFx0YXRoX2RiZyhjb21tb24sIEFOWSxcbjEwMzg6XHRcdFx0XHRcJiMzNDtTaG9ydCBSWCBkYXRhIGxlbiwgZHJvcHBpbmcgKGRsZW46ICVkKVxcblwmIzM0OyxcbjEwMzk6XHRcdFx0XHRyc19kYXRhbGVuKTtcbjEwNDA6XHRcdFx0Z290byByeF9uZXh0O1xuMTA0MTpcdFx0fVxuMTA0MjpcdFxuMTA0MzpcdFx0aWYgKHJ4c3RhdHVzLVx1MDAzZXJzX2tleWl4IFx1MDAzZT0gQVRIX0tFWU1BWCBcdTAwMjZcdTAwMjZcbjEwNDQ6XHRcdCAgICByeHN0YXR1cy1cdTAwM2Vyc19rZXlpeCAhPSBBVEg5S19SWEtFWUlYX0lOVkFMSUQpIHtcbjEwNDU6XHRcdFx0YXRoX2RiZyhjb21tb24sIEFOWSxcbjEwNDY6XHRcdFx0XHRcJiMzNDtJbnZhbGlkIGtleWl4LCBkcm9wcGluZyAoa2V5aXg6ICVkKVxcblwmIzM0OyxcbjEwNDc6XHRcdFx0XHRyeHN0YXR1cy1cdTAwM2Vyc19rZXlpeCk7XG4xMDQ4Olx0XHRcdGdvdG8gcnhfbmV4dDtcbjEwNDk6XHRcdH1cbjEwNTA6XHRcbjEwNTE6XHRcdC8qIEdldCB0aGUgUlggc3RhdHVzIGluZm9ybWF0aW9uICovXG4xMDUyOlx0XG4xMDUzOlx0XHRtZW1zZXQocnhfc3RhdHVzLCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMpKTtcbjEwNTQ6XHRcbjEwNTU6XHRcdC8qIENvcHkgZXZlcnl0aGluZyBmcm9tIGF0aF9odGNfcnhfc3RhdHVzIChIVENfUlhfRlJBTUVfSEVBREVSKS5cbjEwNTY6XHRcdCAqIEFmdGVyIHRoaXMsIHdlIGNhbiBkcm9wIHRoaXMgcGFydCBvZiBza2IuICovXG4xMDU3Olx0XHRyeF9zdGF0dXNfaHRjX3RvX2F0aChcdTAwMjZyeF9zdGF0cywgcnhzdGF0dXMpO1xuMTA1ODpcdFx0YXRoOWtfaHRjX2Vycl9zdGF0X3J4KHByaXYsIFx1MDAyNnJ4X3N0YXRzKTtcbjEwNTk6XHRcdHJ4X3N0YXR1cy1cdTAwM2VtYWN0aW1lID0gYmU2NF90b19jcHUocnhzdGF0dXMtXHUwMDNlcnNfdHN0YW1wKTtcbjEwNjA6XHRcdHNrYl9wdWxsKHNrYiwgSFRDX1JYX0ZSQU1FX0hFQURFUl9TSVpFKTtcbjEwNjE6XHRcbjEwNjI6XHRcdC8qXG4xMDYzOlx0XHQgKiBldmVyeXRoaW5nIGJ1dCB0aGUgcmF0ZSBpcyBjaGVja2VkIGhlcmUsIHRoZSByYXRlIGNoZWNrIGlzIGRvbmVcbjEwNjQ6XHRcdCAqIHNlcGFyYXRlbHkgdG8gYXZvaWQgZG9pbmcgdHdvIGxvb2t1cHMgZm9yIGEgcmF0ZSBmb3IgZWFjaCBmcmFtZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODY1NgoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGtlcm5lbCBkZXZlbG9wbWVudCBhbmQgc3BlY2lmaWNhbGx5IHdvcmtpbmcgd2l0aCB0aGUgYXRoOWsgd2lyZWxlc3MgZHJpdmVyOgoKKipEaXZpbmcgaW50byBgYXRoOWtfcnhfcHJlcGFyZWAqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRoZSBgYXRoOWtfcnhfcHJlcGFyZWAgZnVuY3Rpb24uIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCBpbiB0aGUgcmVjZWl2ZSBwYXRoIGZvciB0aGlzIGRyaXZlciwgc28gYSBkZXRhaWxlZCB1bmRlcnN0YW5kaW5nIGlzIGVzc2VudGlhbC4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgZGlzc2VjdCBpdHMgbG9naWMsIHN0ZXAgYnkgc3RlcC4gSSYjMzk7bSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBidXQgc3BlY2lmaWNzIG9mIHRoaXMgZnVuY3Rpb24gYXJlIGNydWNpYWwgZm9yIHdoYXRldmVyIGRlYnVnZ2luZyBvciBvcHRpbWl6YXRpb24gdGFzayBJJiMzOTttIGN1cnJlbnRseSBmb2N1c2VkIG9uLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA2NTpcdFx0ICovXG4xMDY2Olx0XHRoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItXHUwMDNlZGF0YTtcbjEwNjc6XHRcbjEwNjg6XHRcdC8qXG4xMDY5Olx0XHQgKiBQcm9jZXNzIFBIWSBlcnJvcnMgYW5kIHJldHVybiBzbyB0aGF0IHRoZSBwYWNrZXRcbjEwNzA6XHRcdCAqIGNhbiBiZSBkcm9wcGVkLlxuMTA3MTpcdFx0ICovXG4xMDcyOlx0XHRpZiAodW5saWtlbHkoaXNfcGh5ZXJyKSkge1xuMTA3MzpcdFx0XHQvKiBUT0RPOiBOb3QgdXNpbmcgREZTIHByb2Nlc3Npbmcgbm93LiAqL1xuMTA3NDpcdFx0XHRpZiAoYXRoX2Ntbl9wcm9jZXNzX2ZmdChcdTAwMjZwcml2LVx1MDAzZXNwZWNfcHJpdiwgaGRyLFxuMTA3NTpcdFx0XHRcdFx0ICAgIFx1MDAyNnJ4X3N0YXRzLCByeF9zdGF0dXMtXHUwMDNlbWFjdGltZSkpIHtcbjEwNzY6XHRcdFx0XHQvKiBUT0RPOiBDb2RlIHRvIGNvbGxlY3Qgc3BlY3RyYWwgc2NhbiBzdGF0aXN0aWNzICovXG4xMDc3Olx0XHRcdH1cbjEwNzg6XHRcdFx0Z290byByeF9uZXh0O1xuMTA3OTpcdFx0fVxuMTA4MDpcdFxuMTA4MTpcdFx0LypcbjEwODI6XHRcdCAqIExldCB0aGUgRkZUIHBhcnNlciBkZWNpZGUgd2hldGhlciBhIENSQyBlcnJvciBvZiBzYW1wbGUgc2l6ZSBpcyBhXG4xMDgzOlx0XHQgKiBzYW1wbGU7IGl0IHZhbGlkYXRlcyB0aGUgY29udGVudHMgYW5kIHJldHVybnMgMCBmb3IgYW55dGhpbmcgZWxzZS5cbjEwODQ6XHRcdCAqL1xuMTA4NTpcdFx0aWYgKHVubGlrZWx5KHJ4X3N0YXRzLnJzX3N0YXR1cyBcdTAwMjYgQVRIOUtfUlhFUlJfQ1JDKSBcdTAwMjZcdTAwMjZcbjEwODY6XHRcdCAgICBhdGg5a19odGNfaXNfc3BlY3RyYWxfc2FtcGxlX2xlbihwcml2LCByc19kYXRhbGVuKSkge1xuMTA4NzpcdFx0XHRyeF9zdGF0cy5yc19waHllcnIgPSBBVEg5S19QSFlFUlJfUkFEQVI7XG4xMDg4Olx0XHRcdGlmIChhdGhfY21uX3Byb2Nlc3NfZmZ0KFx1MDAyNnByaXYtXHUwMDNlc3BlY19wcml2LCBoZHIsIFx1MDAyNnJ4X3N0YXRzLFxuMTA4OTpcdFx0XHRcdFx0XHRyeF9zdGF0dXMtXHUwMDNlbWFjdGltZSkpXG4xMDkwOlx0XHRcdFx0Z290byByeF9uZXh0O1xuMTA5MTpcdFx0fVxuMTA5MjpcdFxuMTA5MzpcdFx0aWYgKCFhdGg5a19jbW5fcnhfYWNjZXB0KGNvbW1vbiwgaGRyLCByeF9zdGF0dXMsIFx1MDAyNnJ4X3N0YXRzLFxuMTA5NDpcdFx0XHRcdFx1MDAyNmRlY3J5cHRfZXJyb3IsIHByaXYtXHUwMDNlcnhmaWx0ZXIpKVxuMTA5NTpcdFx0XHRnb3RvIHJ4X25leHQ7XG4xMDk2Olx0XG4xMDk3Olx0XHRhdGg5a19jbW5fcnhfc2tiX3Bvc3Rwcm9jZXNzKGNvbW1vbiwgc2tiLCBcdTAwMjZyeF9zdGF0cyxcbjEwOTg6XHRcdFx0XHRcdCAgICAgcnhfc3RhdHVzLCBkZWNyeXB0X2Vycm9yKTtcbjEwOTk6XHRcbjExMDA6XHRcdGlmIChhdGg5a19jbW5fcHJvY2Vzc19yYXRlKGNvbW1vbiwgaHcsIFx1MDAyNnJ4X3N0YXRzLCByeF9zdGF0dXMpKVxuMTEwMTpcdFx0XHRnb3RvIHJ4X25leHQ7XG4xMTAyOlx0XG4xMTAzOlx0XHRyeF9zdGF0cy5pc19teWJlYWNvbiA9IGF0aF9pc19teWJlYWNvbihjb21tb24sIGhkcik7XG4xMTA0Olx0XHRhdGg5a19jbW5fcHJvY2Vzc19yc3NpKGNvbW1vbiwgaHcsIFx1MDAyNnJ4X3N0YXRzLCByeF9zdGF0dXMpO1xuMTEwNTpcdFxuMTEwNjpcdFx0cnhfc3RhdHVzLVx1MDAzZWJhbmQgPSBhaC1cdTAwM2VjdXJjaGFuLVx1MDAzZWNoYW4tXHUwMDNlYmFuZDtcbjExMDc6XHRcdHJ4X3N0YXR1cy1cdTAwM2VmcmVxID0gYWgtXHUwMDNlY3VyY2hhbi1cdTAwM2VjaGFuLVx1MDAzZWNlbnRlcl9mcmVxO1xuMTEwODpcdFx0cnhfc3RhdHVzLVx1MDAzZWFudGVubmEgPSByeF9zdGF0cy5yc19hbnRlbm5hO1xuMTEwOTpcdFx0cnhfc3RhdHVzLVx1MDAzZWZsYWcgfD0gUlhfRkxBR19NQUNUSU1FX0VORDtcbjExMTA6XHRcbjExMTE6XHRcdHJldHVybiB0cnVlO1xuMTExMjpcdHJ4X25leHQ6XG4xMTEzOlx0XHRyZXR1cm4gZmFsc2U7XG4xMTE0Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzA5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYGF0aDlrX2h0Y2AgUlggUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgYXRoOWtfaHRjYCBkcml2ZXImIzM5O3MgcmVjZWl2ZSBwYXRoIHJpZ2h0IG5vdy4gU3BlY2lmaWNhbGx5LCBJIGtub3cgdGhhdCBgYXRoOWtfcnhfcHJlcGFyZWAgaXMgYSBrZXkgZnVuY3Rpb24gaW4gdGhhdCBwcm9jZXNzLiBUaGUgcXVlc3Rpb24gaXMsIHdoZXJlIGRvZXMgaXQgZml0IGluIHRoZSBncmFuZCBzY2hlbWU/IFdoZXJlIGlzIGl0IGFjdHVhbGx5ICpjYWxsZWQqIGZyb20gd2l0aGluIHRoYXQgUlggcGF0aD8gVGltZSB0byB0cmFjZSBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBjb2RlYmFzZSBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGxpbmcgY29udGV4dCB0byB0cnVseSBncmFzcCBpdHMgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoOWtfcnhfcHJlcGFyZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM9OTc5PXN0YXRpYyBib29sIGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtOTk3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjk5ODpzdGF0aWMgYm9vbCBhdGg5a19yeF9wcmVwYXJlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy05OTktXHRcdFx0ICAgICBzdHJ1Y3QgYXRoOWtfaHRjX3J4YnVmICpyeGJ1Zixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM9MTExOT12b2lkIGF0aDlrX3J4X3Rhc2tsZXQoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xMTQ0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjExNDU6XHRcdGlmICghYXRoOWtfcnhfcHJlcGFyZShwcml2LCByeGJ1ZiwgXHUwMDI2cnhfc3RhdHVzKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTExNDYtXHRcdFx0ZGV2X2tmcmVlX3NrYl9hbnkocnhidWYtXHUwMDNlc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyODcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIG9uIEZ1enppbmcgdGhlIGF0aDlrX2h0YyBEcml2ZXIgd2l0aCBzeXprYWxsZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGBhdGg5a19yeF90YXNrbGV0YCBpcyBjYWxsaW5nIGBhdGg5a19yeF9wcmVwYXJlYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGF0IHRhc2tsZXQgZmlyZXMgb2ZmIHdoZW4gVVNCIHBhY2tldHMgY29tZSBpbi4gVGhhdCYjMzk7cyBteSBzdGFydGluZyBwb2ludC4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzLCBjYW4gc3l6a2FsbGVyIGV2ZW4gcmVhY2ggYGF0aDlrX2h0Y2A/IERvZXMgc3l6a2FsbGVyIGtub3cgYWJvdXQgVVNCIHdpcmVsZXNzLCBvciBjYW4gaXQgcG9rZSBhcm91bmQgVVNCIGRldmljZXMgYXQgYWxsPwoKQWhhISBTeXprYWxsZXIgdXNlcyBgc3l6X3VzYl9jb25uZWN0YCBmb3IgVVNCIGZ1enppbmcsIHNwZWNpZmljYWxseSB3aXRoIHJhdy1nYWRnZXQsIGR1bW15X2hjZCwgb3IgdXNiaXAuIFRoYXQgY2xpY2tzLiBVU0IgZHJpdmVycyBpbiBMaW51eCwgKmVzcGVjaWFsbHkqIHdpcmVsZXNzIG9uZXMgbGlrZSBgYXRoOWtfaHRjYCwgYHJ0bDgxODdgLCBldGMuLCBhcmUgcHJpbWUgdGFyZ2V0cyBmb3IgVVNCIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIFRoZXkmIzM5O3JlIGJhc2ljYWxseSBicmVhZC1hbmQtYnV0dGVyLgoKTm93LCBob2xkIG9uLiBHb3R0YSBtYWtlIHN1cmUgd2UmIzM5O3JlIG5vdCB3YXN0aW5nIHRpbWUuIFNlY3Rpb24gMSBhbmQgMiBvZiB0aGlzIHByb21wdCBhcmUgY2xlYXIgb24gcmVhY2hhYmlsaXR5LiAmIzM0O1JFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFLiYjMzQ7IElmIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlLCB3ZSYjMzk7cmUgZG9uZS4gTm8gZnV6emluZy4gTHVja2lseSwgdmlydHVhbCBidXNlcyBhcmUgYWNjZXNzaWJsZSEgU3BlY2lmaWNhbGx5LCBVU0IgZ2FkZ2V0cyBhcmUgcmVhY2hhYmxlLCBzbyB0aGUgVVNCIGJ1cyBpdHNlbGYgaXMgYSB2aWFibGUgdGFyZ2V0IQoKQWxyaWdodCwgd2UmIzM5O3JlIGluIHRoZSBjbGVhciB0byBjb250aW51ZSEgTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIGZvciBgYXRoOWtfaHRjYCwgZXNwZWNpYWxseSBhbnl0aGluZyByZWxhdGVkIHRvIHNwZWN0cmFsIHNjYW5uaW5nIG9yIEZGVCBmZWF0dXJlcy4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgdGhhdCBkcml2ZXIgc3BlY2lmaWNhbGx5LCBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBgQVRIOUtfQ09NTU9OX1NQRUNUUkFMYCwgYEFUSDlLX0hUQ19ERUJVR0ZTYCwgYW5kIGFueXRoaW5nIGVsc2UgcmVsZXZhbnQgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnYC4gVGhhdCYjMzk7bGwgdGVsbCBtZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpYWwgYnVpbGQgb3B0aW9ucyBJIG5lZWQgdG8ga25vdyBhYm91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFUSDlLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoyOmNvbmZpZyBBVEg5S19IV1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMy1cdHRyaXN0YXRlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzo0OmNvbmZpZyBBVEg5S19DT01NT05cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTUtXHR0cmlzdGF0ZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctNi1cdHNlbGVjdCBBVEhfQ09NTU9OXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzo3OmNvbmZpZyBBVEg5S19DT01NT05fREVCVUdcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTgtXHRib29sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzo5OmNvbmZpZyBBVEg5S19ERlNfREVCVUdGU1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTAtXHRkZWZfYm9vbCB5XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoxMzpjb25maWcgQVRIOUtfQlRDT0VYX1NVUFBPUlRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE0LVx0Ym9vbCBcJiMzNDtBdGhlcm9zIGJsdWV0b290aCBjb2V4aXN0ZW5jZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoyMTpjb25maWcgQVRIOUtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTIyLVx0dHJpc3RhdGUgXCYjMzQ7QXRoZXJvcyA4MDIuMTFuIHdpcmVsZXNzIGNhcmRzIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0zOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjM5OmNvbmZpZyBBVEg5S19QQ0lcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTQwLVx0Ym9vbCBcJiMzNDtBdGhlcm9zIGF0aDlrIFBDSS9QQ0llIGJ1cyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctNDctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzo0ODpjb25maWcgQVRIOUtfQUhCXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy00OS1cdGJvb2wgXCYjMzQ7QXRoZXJvcyBhdGg5ayBBSEIgYnVzIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy01Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjU4OmNvbmZpZyBBVEg5S19ERUJVR0ZTXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7QXRoZXJvcyBhdGg5ayBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy02OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjY5OmNvbmZpZyBBVEg5S19TVEFUSU9OX1NUQVRJU1RJQ1NcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtEZXRhaWxlZCBzdGF0aW9uIHN0YXRpc3RpY3NcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy03NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjc2OmNvbmZpZyBBVEg5S19UWDk5XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7QXRoZXJvcyBhdGg5ayBUWDk5IHRlc3Rpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTk1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6OTY6Y29uZmlnIEFUSDlLX0RGU19DRVJUSUZJRURcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTk3LVx0Ym9vbCBcJiMzNDtBdGhlcm9zIERGUyBzdXBwb3J0IGZvciBjZXJ0aWZpZWQgcGxhdGZvcm1zXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTE0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTE1OmNvbmZpZyBBVEg5S19EWU5BQ0tcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTExNi1cdGJvb2wgXCYjMzQ7QXRoZXJvcyBhdGg5ayBBQ0sgdGltZW91dCBlc3RpbWF0aW9uIGFsZ29yaXRobVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTEyMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjEyNDpjb25maWcgQVRIOUtfV09XXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xMjUtXHRib29sIFwmIzM0O1dha2Ugb24gV2lyZWxlc3MgTEFOIHN1cHBvcnQgKEVYUEVSSU1FTlRBTClcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xMzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoxMzI6Y29uZmlnIEFUSDlLX1JGS0lMTFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTMzLVx0Ym9vbCBcJiMzNDtBdGhlcm9zIGF0aDlrIHJma2lsbCBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE0MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjE0Mjpjb25maWcgQVRIOUtfQ0hBTk5FTF9DT05URVhUXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNDMtXHRib29sIFwmIzM0O0NoYW5uZWwgQ29udGV4dCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTUwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTUxOmNvbmZpZyBBVEg5S19QQ09FTVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTUyLVx0Ym9vbCBcJiMzNDtBdGhlcm9zIGF0aDlrIHN1cHBvcnQgZm9yIFBDIE9FTSBjYXJkc1wmIzM0OyBpZiBFWFBFUlRcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoxNTY6Y29uZmlnIEFUSDlLX1BDSV9OT19FRVBST01cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE1Ny1cdHRyaXN0YXRlIFwmIzM0O0F0aGVyb3MgYXRoOWsgcGNpIGxvYWRlciBmb3IgRUVQUk9NLWxlc3MgY2hpcHNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoxNzI6Y29uZmlnIEFUSDlLX0hUQ1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTczLVx0dHJpc3RhdGUgXCYjMzQ7QXRoZXJvcyBIVEMgYmFzZWQgd2lyZWxlc3MgY2FyZHMgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE4Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjE4Nzpjb25maWcgQVRIOUtfSFRDX0RFQlVHRlNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7QXRoZXJvcyBhdGg5a19odGMgZGVidWdnaW5nXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTk0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTk1OmNvbmZpZyBBVEg5S19IV1JOR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTk2LVx0Ym9vbCBcJiMzNDtSYW5kb20gbnVtYmVyIGdlbmVyYXRvciBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMjA1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MjA2OmNvbmZpZyBBVEg5S19DT01NT05fU1BFQ1RSQUxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTIwNy1cdGJvb2wgXCYjMzQ7QXRoZXJvcyBhdGg5ay9hdGg5a19odGMgc3BlY3RyYWwgc2NhbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODQ5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUgY2hlY2s6CgoqKkV4YW1pbmluZyB0aGUgQXRoZXJvcyA5ayBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIGBhdGg5a2AgZHJpdmVyIGlzIGNvbmZpZ3VyZWQsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBgQVRIOUtfSFRDYCBhbmQgYEFUSDlLX0NPTU1PTl9TUEVDVFJBTGAgb3B0aW9ucy4gSSYjMzk7bGwgb3BlbiB1cCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWdgLiBNeSBtYWluIGZvY3VzIHdpbGwgYmUgYXJvdW5kIHRob3NlIHR3byBzeW1ib2xzLiBJJiMzOTtsbCBpbW1lZGlhdGVseSBzdGFydCBzY2FubmluZyB0aGUgZmlsZSB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBkZWZhdWx0IHZhbHVlcyAoaWYgYW55KSwgYW5kIHRoZSBoZWxwIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGxvb2tpbmcgZm9yIHdoZXJlIHRoZXkmIzM5O3JlIGRlZmluZWQgd2l0aGluIHRoZSBoaWVyYXJjaHksIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBzdXBwb3J0LCBhbmQgd2hhdCBmZWF0dXJlcyB0aGV5IGVuYWJsZSBvciBkaXNhYmxlLiBJJiMzOTtsbCBwYXkgYXR0ZW50aW9uIHRvIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgb3B0aW9ucyAoZS5nLiwgaWYgYEFUSDlLX0hUQ2AgcmVxdWlyZXMgYW5vdGhlciBzeW1ib2wgdG8gYmUgZW5hYmxlZCwgSSBuZWVkIHRvIG5vdGUgdGhhdCkuIEFsc28sIEkmIzM5O2xsIHJldmlldyBhbnkgY29uZGl0aW9uYWwgbG9naWMsIGxpa2UgYGlmYCBzdGF0ZW1lbnRzLCBhcm91bmQgdGhlc2Ugc3ltYm9scyDigJMgdGhhdCB3aWxsIHRlbGwgbWUgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzIHRoZXkmIzM5O3JlIHNlbGVjdGFibGUuIFVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGVzZSBjb25maWd1cmF0aW9ucyBhZmZlY3QgdGhlIGRyaXZlciYjMzk7cyBiZWhhdmlvciBhbmQgcGVyZm9ybWFuY2UuIFRoaXMgd2lsbCBoZWxwIG1lIGlmIEkgbmVlZCB0byBkaWFnbm9zZSBhbiBpc3N1ZSB3aXRoIHRoaXMgZHJpdmVyIGxhdGVyIG9yIHR1bmUgaXQgZm9yIGEgc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTcwOlx0XHQgIElmIHVuc3VyZSBzYXkgTi5cbiAxNzE6XHRcbiAxNzI6XHRjb25maWcgQVRIOUtfSFRDXG4gMTczOlx0XHR0cmlzdGF0ZSBcJiMzNDtBdGhlcm9zIEhUQyBiYXNlZCB3aXJlbGVzcyBjYXJkcyBzdXBwb3J0XCYjMzQ7XG4gMTc0Olx0XHRkZXBlbmRzIG9uIFVTQiBcdTAwMjZcdTAwMjYgTUFDODAyMTFcbiAxNzU6XHRcdHNlbGVjdCBNQUM4MDIxMV9MRURTIGlmIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU1BQzgwMjExXG4gMTc2Olx0XHRzZWxlY3QgQVRIOUtfSFdcbiAxNzc6XHRcdHNlbGVjdCBBVEg5S19DT01NT05cbiAxNzg6XHRcdGhlbHBcbiAxNzk6XHRcdCAgU3VwcG9ydCBmb3IgQXRoZXJvcyBIVEMgYmFzZWQgY2FyZHMuXG4gMTgwOlx0XHQgIENoaXBzZXRzIHN1cHBvcnRlZDogQVI5MjcxXG4gMTgxOlx0XG4gMTgyOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uOlxuIDE4MzpcdFx0ICBodHRwczovL3dpcmVsZXNzLndpa2kua2VybmVsLm9yZy9lbi91c2Vycy9Ecml2ZXJzL2F0aDlrX2h0Y1xuIDE4NDpcdFxuIDE4NTpcdFx0ICBUaGUgYnVpbHQgbW9kdWxlIHdpbGwgYmUgYXRoOWtfaHRjLlxuIDE4NjpcdFxuIDE4NzpcdGNvbmZpZyBBVEg5S19IVENfREVCVUdGU1xuIDE4ODpcdFx0Ym9vbCBcJiMzNDtBdGhlcm9zIGF0aDlrX2h0YyBkZWJ1Z2dpbmdcJiMzNDtcbiAxODk6XHRcdGRlcGVuZHMgb24gQVRIOUtfSFRDIFx1MDAyNlx1MDAyNiBERUJVR19GU1xuIDE5MDpcdFx0c2VsZWN0IEFUSDlLX0NPTU1PTl9ERUJVR1xuIDE5MTpcdFx0aGVscFxuIDE5MjpcdFx0ICBTYXkgWSwgaWYgeW91IG5lZWQgYWNjZXNzIHRvIGF0aDlrX2h0YyYjMzk7cyBzdGF0aXN0aWNzLlxuIDE5MzpcdFx0ICBBcyB3ZWxsIGFzIGFjY2VzcyB0byB0aGUgRkZUL3NwZWN0cmFsIGRhdGEuXG4gMTk0Olx0XG4gMTk1Olx0Y29uZmlnIEFUSDlLX0hXUk5HXG4gMTk2Olx0XHRib29sIFwmIzM0O1JhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIHN1cHBvcnRcJiMzNDtcbiAxOTc6XHRcdGRlcGVuZHMgb24gQVRIOUsgXHUwMDI2XHUwMDI2IChIV19SQU5ET00gPSB5IHx8IEhXX1JBTkRPTSA9IEFUSDlLKVxuIDE5ODpcdFx0ZGVmYXVsdCBuXG4gMTk5Olx0XHRoZWxwXG4gMjAwOlx0XHQgIFRoaXMgb3B0aW9uIGluY29ycG9yYXRlcyB0aGUgQURDIHJlZ2lzdGVyIG91dHB1dCBhcyBhIHNvdXJjZSBvZlxuIDIwMTpcdFx0ICByYW5kb21uZXNzIGludG8gTGludXggZW50cm9weSBwb29sICgvZGV2L3VyYW5kb20gYW5kIC9kZXYvcmFuZG9tKVxuIDIwMjpcdFxuIDIwMzpcdFx0ICBTYXkgWSwgZmVlZHMgdGhlIGVudHJvcHkgZGlyZWN0bHkgZnJvbSB0aGUgV2lGaSBkcml2ZXIgdG8gdGhlIGlucHV0XG4gMjA0Olx0XHQgIHBvb2wuXG4gMjA1Olx0XG4gMjA2Olx0Y29uZmlnIEFUSDlLX0NPTU1PTl9TUEVDVFJBTFxuIDIwNzpcdFx0Ym9vbCBcJiMzNDtBdGhlcm9zIGF0aDlrL2F0aDlrX2h0YyBzcGVjdHJhbCBzY2FuIHN1cHBvcnRcJiMzNDtcbiAyMDg6XHRcdGRlcGVuZHMgb24gQVRIOUtfREVCVUdGUyB8fCBBVEg5S19IVENfREVCVUdGU1xuIDIwOTpcdFx0c2VsZWN0IFJFTEFZXG4gMjEwOlx0XHRkZWZhdWx0IG5cbiAyMTE6XHRcdGhlbHBcbiAyMTI6XHRcdCAgU2F5IFkgdG8gZW5hYmxlIGFjY2VzcyB0byB0aGUgRkZUL3NwZWN0cmFsIGRhdGEgdmlhIGRlYnVnZnMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODk4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGBhdGg5a19odGNgIENvZGViYXNlKioKCk9rYXksIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgc3BlY19wcml2YCBhbmQgYGF0aF9jbW5fcHJvY2Vzc19mZnRgIHdpdGhpbiB0aGUgYGF0aDlrX2h0Y2AgZHJpdmVyLiBTZWVtcyBsaWtlIHRoZXNlIGFyZSB0d28gY3JpdGljYWwgY29tcG9uZW50cyB0aGF0IGxpa2VseSB3b3JrIHRvZ2V0aGVyIGluIHNvbWUgd2F5IHJlbGF0ZWQgdG8gc3BlY3RyYWwgYW5hbHlzaXMgb3IgcHJvY2Vzc2luZyB3aXRoaW4gdGhlIEF0aGVyb3MgV2ktRmkgY2hpcHNldCYjMzk7cyBIVEMgKEhvc3QgVHJhbnNwb3J0IENvbnRyb2wpIGludGVyZmFjZS4gTXkgZmlyc3Qgc3RlcCBpcyB0byBxdWlja2x5IGxvY2F0ZSB3aGVyZSB0aGVzZSBhcmUgdXNlZC4gTGV0JiMzOTtzIGZpcmUgdXAgYSBncmVwIGNvbW1hbmQgYW5kIHNlZSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgb3IgdmFyaWFibGVzIGFwcGVhciBpbiB0aGUgY29kZWJhc2UuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGJ1aWxkIGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgc3lzdGVtIGZsb3cuIEZyb20gdGhlcmUgSSYjMzk7bGwgYmUgYWJsZSB0byB0cmFjZSB0aGVpciB1c2FnZSwgdW5kZXJzdGFuZCB0aGUgZGF0YSB0aGV5IGFyZSBoYW5kbGluZywgYW5kIHNlZSB0aGUgbG9naWNhbCBjb25uZWN0aW9ucyBiZXR3ZWVuIHRoZXNlIHR3byBwYXJ0cyBvZiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGhfY21uX3Byb2Nlc3NfZmZ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM9NDQ5PWF0aF9jbW5faXNfZmZ0X2J1Zl9mdWxsKHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtNDY4LS8qIHJldHVybnMgMSBpZiB0aGlzIHdhcyBhIHNwZWN0cmFsIGZyYW1lLCBldmVuIGlmIG5vdCBoYW5kbGVkLiAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjQ2OTppbnQgYXRoX2Ntbl9wcm9jZXNzX2ZmdChzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtNDcwLVx0XHQgICAgc3RydWN0IGF0aF9yeF9zdGF0dXMgKnJzLCB1NjQgdHNmKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy02ODMtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjY4NDpFWFBPUlRfU1lNQk9MKGF0aF9jbW5fcHJvY2Vzc19mZnQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTY4NS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg9MTc3PWludCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTc5LVx0XHRcdCAgICAgICBlbnVtIHNwZWN0cmFsX21vZGUgc3BlY3RyYWxfbW9kZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTgwOmludCBhdGhfY21uX3Byb2Nlc3NfZmZ0KHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdiwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODEtXHRcdCAgICBzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnMsIHU2NCB0c2YpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaD0xOTI9c3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXIoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTk2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjE5NzpzdGF0aWMgaW5saW5lIGludCBhdGhfY21uX3Byb2Nlc3NfZmZ0KHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xOTgtXHRcdFx0XHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz05OTg9c3RhdGljIGJvb2wgYXRoOWtfcnhfcHJlcGFyZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEwNzMtXHRcdC8qIFRPRE86IE5vdCB1c2luZyBERlMgcHJvY2Vzc2luZyBub3cuICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MTA3NDpcdFx0aWYgKGF0aF9jbW5fcHJvY2Vzc19mZnQoXHUwMDI2cHJpdi1cdTAwM2VzcGVjX3ByaXYsIGhkcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xMDc1LVx0XHRcdFx0ICAgIFx1MDAyNnJ4X3N0YXRzLCByeF9zdGF0dXMtXHUwMDNlbWFjdGltZSkpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTA4Ny1cdFx0cnhfc3RhdHMucnNfcGh5ZXJyID0gQVRIOUtfUEhZRVJSX1JBREFSO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjEwODg6XHRcdGlmIChhdGhfY21uX3Byb2Nlc3NfZmZ0KFx1MDAyNnByaXYtXHUwMDNlc3BlY19wcml2LCBoZHIsIFx1MDAyNnJ4X3N0YXRzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEwODktXHRcdFx0XHRcdHJ4X3N0YXR1cy1cdTAwM2VtYWN0aW1lKSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jPTgwNj1zdGF0aWMgaW50IGF0aDlrX3J4X3NrYl9wcmVwcm9jZXNzKHN0cnVjdCBhdGhfc29mdGMgKnNjLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmMtODgzLVx0XHR9IGVsc2UgaWYgKHNjLVx1MDAzZXNwZWNfcHJpdi5zcGVjdHJhbF9tb2RlICE9IFNQRUNUUkFMX0RJU0FCTEVEIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYzo4ODQ6XHRcdFx0ICAgYXRoX2Ntbl9wcm9jZXNzX2ZmdChcdTAwMjZzYy1cdTAwM2VzcGVjX3ByaXYsIGhkciwgcnhfc3RhdHMsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jLTg4NS1cdFx0XHRcdFx0ICAgICAgIHJ4X3N0YXR1cy1cdTAwM2VtYWN0aW1lKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTI4MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgY29tbW9uLXNwZWN0cmFsLm9gIGdldHMgYnVpbHQsIHNvIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGVgLiBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEsIHNvIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgdHlwaWNhbCBNYWtlZmlsZSBjb25zdHJ1Y3RzIOKAkyBvYmplY3QgZmlsZSBkZXBlbmRlbmNpZXMsIHNvdXJjZSBmaWxlIGxpc3RzLCBjb21waWxlciBmbGFncywgYW5kIHRoZSBsaWtlLiBJdCBzaG91bGQgYmUgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHByb2Nlc3MsIGJ1dCBJIHdhbnQgdG8gZW5zdXJlIEkgdW5kZXJzdGFuZCBldmVyeSBzdGVwLiBUaGUgYXRoOWsgZHJpdmVyIGlzIGNyaXRpY2FsLCBhbmQga25vd2luZyBob3cgaXRzIGNvbXBvbmVudHMgYXJlIGFzc2VtYmxlZCBpcyB2aXRhbCBmb3IgZGVidWdnaW5nIG9yIGN1c3RvbWl6YXRpb24uIFRoaXMgaXMgYSBzdGFuZGFyZCBwcm9jZWR1cmU7IEkmIzM5O2xsIGlkZW50aWZ5IHRoZSByZWxldmFudCBydWxlcyBvciB2YXJpYWJsZXMgcmVsYXRlZCB0byBgY29tbW9uLXNwZWN0cmFsLm9gIGFuZCB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIGJhY2sgdG8gdGhlaXIgc291cmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb21tb24tc3BlY3RyYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlPTY1PWF0aDlrX2NvbW1vbi0kKENPTkZJR19BVEg5S19DT01NT05fREVCVUcpICYjNDM7PSBjb21tb24tZGVidWcub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlOjY2OmF0aDlrX2NvbW1vbi0kKENPTkZJR19BVEg5S19DT01NT05fU1BFQ1RSQUwpICYjNDM7PSBjb21tb24tc3BlY3RyYWwub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlLTY3LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uaC0yNi0jaW5jbHVkZSBcJiMzNDtjb21tb24tZGVidWcuaFwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5oOjI3OiNpbmNsdWRlIFwmIzM0O2NvbW1vbi1zcGVjdHJhbC5oXCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmgtMjgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NzAwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDUkMgRXJyb3IgSGFuZGxpbmcgaW4gYXRoOWtfaHRjIGZvciBTcGVjdHJhbCBTYW1wbGVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIGZvciB0aGUgYGF0aDlrX2h0Y2AgVVNCIFdpLUZpIGRyaXZlci4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGZvY3VzZWQgb24gaG93IENSQyBlcnJvcnMgYXJlIGhhbmRsZWQgaW4gYGF0aDlrX3J4X3ByZXBhcmVgLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGUgcmVjZWl2ZWQgZGF0YSBsZW5ndGggbWF0Y2hlcyB0aGF0IG9mIGEgc3BlY3RyYWwgc2FtcGxlLgoKTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBjb2RlIGludHJvZHVjZXMgYSBjaGVjaywgYGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuYCwgdG8gZGV0ZXJtaW5lIGlmIGEgcGFydGljdWxhciBwYWNrZXQgbGVuZ3RoIGNvcnJlc3BvbmRzIHRvIGEgc3BlY3RyYWwgc2FtcGxlLiBUaGlzIGZ1bmN0aW9uIGRlcGVuZHMgb24gd2hldGhlciBzcGVjdHJhbCBtb2RlIGlzIGVuYWJsZWQsIGFuZCB0aGUgY2hhbm5lbCB0eXBlIHRvIGRldGVybWluZSB0aGUgZXhwZWN0ZWQgRkZUIGxlbmd0aC4gSSBzZWUgdGhhdCBpdCB1c2VzIGBjZmc4MDIxMV9nZXRfY2hhbmRlZl90eXBlYCB0byBncmFiIGNoYW5uZWwgdHlwZSwgd2hpY2ggaW1wYWN0cyB0aGUgYGZmdF9sZW5gIGNhbGN1bGF0aW9uLiBUaGUgY29tcGFyaXNvbiBgbGVuICYjNDM7IDEgJmd0Oz0gZmZ0X2xlbiAmYW1wOyZhbXA7IGxlbiAmbHQ7PSBmZnRfbGVuICYjNDM7IDJgIGlzIGludGVyZXN0aW5nOyBpdCBhY2NvdW50cyBmb3Igc29tZSBwb3RlbnRpYWwgbGVuZ3RoIHZhcmlhdGlvbnMsIHBlcmhhcHMgcmVsYXRlZCB0byBwYWRkaW5nIG9yIGFsaWdubWVudC4KClRoZSBjcnVjaWFsIGJpdCwgdGhlIGNoZWNrIGB1bmxpa2VseShyeF9zdGF0cy5yc19zdGF0dXMgJmFtcDsgQVRIOUtfUlhFUlJfQ1JDKWAgaXMgd2hhdCBjYXRjaGVzIG15IGV5ZS4gSXQmIzM5O3MgdXNpbmcgYHVubGlrZWx5YCwgc28gdGhlIENSQyBlcnJvciBwYXRoIGlzIGFzc3VtZWQgdG8gYmUgbGVzcyBmcmVxdWVudC4gSWYgYSBDUkMgZXJyb3IgaXMgZmxhZ2dlZCAqYW5kKiB0aGUgbGVuZ3RoIG1hdGNoZXMgYSBzcGVjdHJhbCBzYW1wbGUsIHRoZSBjb2RlIHNldHMgYHJ4X3N0YXRzLnJzX3BoeWVycmAgdG8gYEFUSDlLX1BIWUVSUl9SQURBUmAuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgcmFkYXIgZGV0ZWN0aW9uIHNjZW5hcmlvLCB3aGljaCBpcyBmYXNjaW5hdGluZy4gVGhlbiwgaXQgY2FsbHMgYGF0aF9jbW5fcHJvY2Vzc19mZnRgLiBUaGlzIGlzIHRoZSBpbXBvcnRhbnQgcGFydDsgaXQgbG9va3MgbGlrZSB0aGlzIGlzIHdoZXJlIHRoZSBGRlQgZGF0YSBpcyBhY3R1YWxseSBwcm9jZXNzZWQuCgpJIG5lZWQgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhbGwgdGhlc2UgZnVuY3Rpb25zIGFuZCBkYXRhIGZsb3dzLiBJIHNlZSBib3RoIGBhdGg5a19odGNfaXNfc3BlY3RyYWxfc2FtcGxlX2xlbmAgYW5kIGBhdGg5a19yeF9wcmVwYXJlYCBhcmUgc3RhdGljIGZ1bmN0aW9ucyBpbiBgaHRjX2Rydl90eHJ4LmNgLCB3aGljaCB0ZWxscyBtZSB0aGV5IGFyZSBpbnRlcm5hbCB0byB0aGF0IGNvbXBpbGF0aW9uIHVuaXQuIEkgYWxzbyBuZWVkIHRvIGtub3cgd2hhdCBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgb3IgY2FsbGVycyB0aGVyZSBtaWdodCBiZSwgYW5kLCBpZiBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAgaXMgZXhwb3J0ZWQuCgpBbHJpZ2h0LCB0aGUgY29kZSByZWZlcmVuY2VzIGBhdGg5a19yeF90YXNrbGV0YCwgYW5kIGl0IGNhbGxzIGBhdGg5a19yeF9wcmVwYXJlYC4gR29vZCwgSSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG5vdy4gYGF0aF9jbW5fcHJvY2Vzc19mZnRgIGlzIGNhbGxlZCAqaW5zaWRlKiB0aGlzIGJsb2NrLCBhbmQgdGhhdCYjMzk7cyBhbiBleHBvcnRlZCBmdW5jdGlvbi4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIGhvdyBwYWNrZXRzIGFyZSByZWNlaXZlZCBhbmQgcHJvY2Vzc2VkIGJ5IGBhdGg5a19odGNgLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGhvdyBgYXRoOWtfcnhfdGFza2xldGAgaXMgdHJpZ2dlcmVkIGFuZCB3aGF0IGl0JiMzOTtzIHVsdGltYXRlbHkgZG9pbmcuIEkgYWxzbyBuZWVkIHRvIGtub3cgaG93IHBhY2tldHMgYXJlIHBhc3NlZCBpbnRvIHRoZSBkcml2ZXIuIEkgbmVlZCB0byBiZSBzdXJlIHRoZXJlIGlzbiYjMzk7dCBzb21lIHNpZGUgZWZmZWN0IG9yIG90aGVyIHVuaW50ZW5kZWQgY29uc2VxdWVuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDlrX3J4X3Rhc2tsZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oPTU5OD12b2lkIGF0aDlrX2hvc3RfcnhfaW5pdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjU5OTp2b2lkIGF0aDlrX3J4X3Rhc2tsZXQoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC02MDAtdTMyIGF0aDlrX2h0Y19jYWxjcnhmaWx0ZXIoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmM9NjA2PXN0YXRpYyBpbnQgYXRoOWtfaW5pdF9wcml2KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmMtNjQ3LVx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZWh0Y19wbV9sb2NrKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2luaXQuYzo2NDg6XHR0YXNrbGV0X3NldHVwKFx1MDAyNnByaXYtXHUwMDNlcnhfdGFza2xldCwgYXRoOWtfcnhfdGFza2xldCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmMtNjQ5LVx0dGFza2xldF9zZXR1cChcdTAwMjZwcml2LVx1MDAzZXR4X2ZhaWxlZF90YXNrbGV0LCBhdGg5a190eF9mYWlsZWRfdGFza2xldCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTk5OD1zdGF0aWMgYm9vbCBhdGg5a19yeF9wcmVwYXJlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTExOC0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzoxMTE5OnZvaWQgYXRoOWtfcnhfdGFza2xldChzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTEyMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTA5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgQXRoZXJvcyBXaXJlbGVzcyBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIEkgc2VlIHdlIGhhdmUgYEFUSDlLX0hUQ2AsIHdoaWNoIHNlZW1zIHRvIGJlIGVzc2VudGlhbCBmb3IgQXRoZXJvcyBIVEMtYmFzZWQgd2lyZWxlc3MgY2FyZHMgYW5kIGhpbmdlcyBvbiBib3RoIFVTQiBhbmQgdGhlIE1BQzgwMjExIGZyYW1ld29yay4gVGhlbiB0aGVyZSYjMzk7cyBgQVRIOUtfSFRDX0RFQlVHRlNgLCBhIGRlYnVnLWZvY3VzZWQgb3B0aW9uIGRlcGVuZGVudCBvbiBgQVRIOUtfSFRDYCBhbmQgZGVidWcgZmlsZSBzeXN0ZW0gc3VwcG9ydC4gTm93LCBgQVRIOUtfQ09NTU9OX1NQRUNUUkFMYCBkZXBlbmRzIG9uIGVpdGhlciB0aGUgYEFUSDlLX0RFQlVHRlNgIG9yIGBBVEg5S19IVENfREVCVUdGU2Agb3B0aW9ucywgd2hpY2ggbWFrZXMgc2Vuc2UuCgpCdXQgd2FpdCBhIG1pbnV0ZSwgdGhlIHN0cnVjdHVyZSB0aGF0JiMzOTtzIGdvdCBtZSBjb25mdXNlZCBpcyBgc3BlY19wcml2YCBhbmQgYGF0aF9jbW5fcHJvY2Vzc19mZnRgPyBUaGF0JiMzOTtzIHdoYXQgSSYjMzk7ZCBleHBlY3QgdG8gc2VlIHdpdGggdGhlIGBjb21tb24tc3BlY3RyYWxgIGNvbmZpZyBhY3RpdmUuIFdpdGhvdXQgYEFUSDlLX0NPTU1PTl9TUEVDVFJBTGAgZW5hYmxlZCwgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoZXNlIHNwZWN0cmFsIGFuYWx5c2lzIGNvbXBvbmVudHM/IEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gYGNvbW1vbi1zcGVjdHJhbC5oYCB0byBzZWUgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIsIG9yIHdoZXRoZXIgdGhleSYjMzk7cmUgZXZlbiBzdXBwb3NlZCB0byBiZSBwcmVzZW50IHdpdGhvdXQgdGhlIHNwZWN0cmFsIGFuYWx5c2lzIGZlYXR1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzcGVjdHJhbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MjA6I2luY2x1ZGUgXCYjMzQ7Li4vc3BlY3RyYWxfY29tbW9uLmhcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0yMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoyMjovKiBlbnVtIHNwZWN0cmFsX21vZGU6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMjMtICpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoyNDogKiBAU1BFQ1RSQUxfRElTQUJMRUQ6IHNwZWN0cmFsIG1vZGUgaXMgZGlzYWJsZWRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0yNS0gKiBAU1BFQ1RSQUxfQkFDS0dST1VORDogaGFyZHdhcmUgc2VuZHMgc2FtcGxlcyB3aGVuIGl0IGlzIG5vdCBidXN5IHdpdGhcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0yNi0gKlx0c29tZXRoaW5nIGVsc2UuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6Mjc6ICogQFNQRUNUUkFMX01BTlVBTDogc3BlY3RyYWwgc2NhbiBpcyBlbmFibGVkLCB0cmlnZ2VyaW5nIGZvciBzYW1wbGVzXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMjgtICpcdGlzIHBlcmZvcm1lZCBtYW51YWxseS5cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMzEtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MzI6ZW51bSBzcGVjdHJhbF9tb2RlIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0zMy1cdFNQRUNUUkFMX0RJU0FCTEVEID0gMCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMzktI2RlZmluZSBTUEVDVFJBTF9TQ0FOX0JJVE1BU0tcdFx0MHgxMFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjQwOi8qIFJhZGFyIGluZm8gcGFja2V0IGZvcm1hdCwgdXNlZCBmb3IgREZTIGFuZCBzcGVjdHJhbCBmb3JtYXRzLiAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTQxLXN0cnVjdCBhdGhfcmFkYXJfaW5mbyB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTQ2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjQ3Oi8qIFRoZSBIVDIwIHNwZWN0cmFsIGRhdGEgaGFzIDQgYnl0ZXMgb2YgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhdCBpdCYjMzk7cyBlbmQuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtNDgtICpcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg9OTc9c3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtOTgtXHRzdHJ1Y3QgYXRoX2h3ICphaDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDo5OTpcdC8qIHJlbGF5KGZzKSBjaGFubmVsIGZvciBzcGVjdHJhbCBzY2FuICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTAwLVx0c3RydWN0IHJjaGFuICpyZnNfY2hhbl9zcGVjX3NjYW47XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTAxOlx0ZW51bSBzcGVjdHJhbF9tb2RlIHNwZWN0cmFsX21vZGU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTAyLVx0c3RydWN0IGF0aF9zcGVjX3NjYW4gc3BlY19jb25maWc7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTExMS0vKiBncmFicyB0aGUgbWF4IG1hZ25pdHVkZSBmcm9tIHRoZSBhbGwvdXBwZXIvbG93ZXIgYmlucyAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjExMjpzdGF0aWMgaW5saW5lIHUxNiBzcGVjdHJhbF9tYXhfbWFnbml0dWRlKHU4ICpiaW5zKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTExMy17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTExOS0vKiByZXR1cm4gdGhlIG1heCBtYWduaXR1ZGUgZnJvbSB0aGUgYWxsL3VwcGVyL2xvd2VyIGJpbnMgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxMjA6c3RhdGljIGlubGluZSB1OCBzcGVjdHJhbF9tYXhfaW5kZXgodTggKmJpbnMsIGludCBudW1fYmlucylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xMjEte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNDctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTQ4OnN0YXRpYyBpbmxpbmUgdTggc3BlY3RyYWxfbWF4X2luZGV4X2h0NDAodTggKmJpbnMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTQ5LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTUxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjE1MjpcdGlkeCA9IHNwZWN0cmFsX21heF9pbmRleChiaW5zLCBTUEVDVFJBTF9IVDIwXzQwX05VTV9CSU5TKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNTMtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE1OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxNjA6c3RhdGljIGlubGluZSB1OCBzcGVjdHJhbF9tYXhfaW5kZXhfaHQyMCh1OCAqYmlucylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNjEte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjE2MjpcdHJldHVybiBzcGVjdHJhbF9tYXhfaW5kZXgoYmlucywgU1BFQ1RSQUxfSFQyMF9OVU1fQklOUyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTYzLX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTY1LS8qIHJldHVybiB0aGUgYml0bWFwIHdlaWdodCBmcm9tIHRoZSBhbGwvdXBwZXIvbG93ZXIgYmlucyAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjE2NjpzdGF0aWMgaW5saW5lIHU4IHNwZWN0cmFsX2JpdG1hcF93ZWlnaHQodTggKmJpbnMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTY3LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTcxLSNpZmRlZiBDT05GSUdfQVRIOUtfQ09NTU9OX1NQRUNUUkFMXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTcyOnZvaWQgYXRoOWtfY21uX3NwZWN0cmFsX2luaXRfZGVidWcoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LCBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3BoeSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTczOnZvaWQgYXRoOWtfY21uX3NwZWN0cmFsX2RlaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE3NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxNzU6dm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTc2LVx0XHRcdFx0IHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTc3OmludCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNzgtXHRcdFx0ICAgICAgIHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxNzk6XHRcdFx0ICAgICAgIGVudW0gc3BlY3RyYWxfbW9kZSBzcGVjdHJhbF9tb2RlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODAtaW50IGF0aF9jbW5fcHJvY2Vzc19mZnQoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODItI2Vsc2VcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxODM6c3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2Ntbl9zcGVjdHJhbF9pbml0X2RlYnVnKHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODQtXHRcdFx0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcGh5KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTg4OnN0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfZGVpbml0X2RlYnVnKHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODkte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xOTEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTkyOnN0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTkzLVx0XHRcdFx0XHRcdCAgIHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAxMTIKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBhdGg5ayBDb21tb24gU3BlY3RyYWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBjb25maWd1cmF0aW9uIHN0YW5kcG9pbnQuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19BVEg5S19DT01NT05fU1BFQ1RSQUxgIGlzIHRoZSBrZXkgaGVyZS4gSWYgdGhhdCYjMzk7cyBlbmFibGVkLCB0aGUgZnVsbCBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAgZnVuY3Rpb24gaW4gYGNvbW1vbi1zcGVjdHJhbC5jYCBnZXRzIGFjdGl2YXRlZC4gTWFrZXMgc2Vuc2UsIHRoYXQmIzM5O3Mgd2hhdCBJJiMzOTtkIGV4cGVjdC4gSG93ZXZlciwgaWYgaXQmIzM5O3MgZGlzYWJsZWQsIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAgaXMganVzdCBhIHN0dWIsIGVmZmVjdGl2ZWx5IHNraXBwaW5nIHRoZSBGRlQgZnJhbWUgcHJvY2Vzc2luZy4gTm93LCB0aGUgZGVwZW5kZW5jaWVzIGFyZSB3aGF0JiMzOTtzIGltcG9ydGFudC4gYENPTkZJR19BVEg5S19DT01NT05fU1BFQ1RSQUxgIGRlcGVuZHMgb24gZWl0aGVyIGBBVEg5S19ERUJVR0ZTYCBvciBgQVRIOUtfSFRDX0RFQlVHRlNgLiBEaXZpbmcgZGVlcGVyLCBgQ09ORklHX0FUSDlLX0hUQ19ERUJVR0ZTYCBpbiB0dXJuIGRlcGVuZHMgb24gYEFUSDlLX0hUQ2AgKmFuZCogYERFQlVHX0ZTYC4gQW5kIGBBVEg5S19IVENgIGl0c2VsZiByZWxpZXMgb24gYFVTQmAgYW5kIGBNQUM4MDIxMWAuIFNvLCBpdCYjMzk7cyBhIGNoYWluLCBlYWNoIGNvbmZpZ3VyYXRpb24gaXRlbSBpcyBkZXBlbmRlbnQgb24gdGhlIHByaW9yLgoKSSBzaG91bGQgcHJvYmFibHkgdmVyaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbiBpdHNlbGYgbm93LiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgYWN0dWFsIGNvZGUgZm9yIGBhdGhfY21uX3Byb2Nlc3NfZmZ0YCBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jYCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCYjMzk7cyBiZWluZyBkb25lIHdoZW4gZW5hYmxlZC4gS25vd2luZyB0aGUgZXhhY3QgY29kZSBiZWluZyBleGVjdXRlZCwgYmFzZWQgb24gdGhlc2UgY29uZGl0aW9ucywgd2lsbCBnaXZlIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjU6XHRcdFx0cmV0dXJuIDA7XG4gNDY2Olx0fVxuIDQ2NzpcdFxuIDQ2ODpcdC8qIHJldHVybnMgMSBpZiB0aGlzIHdhcyBhIHNwZWN0cmFsIGZyYW1lLCBldmVuIGlmIG5vdCBoYW5kbGVkLiAqL1xuIDQ2OTpcdGludCBhdGhfY21uX3Byb2Nlc3NfZmZ0KHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdiwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcbiA0NzA6XHRcdFx0ICAgIHN0cnVjdCBhdGhfcnhfc3RhdHVzICpycywgdTY0IHRzZilcbiA0NzE6XHR7XG4gNDcyOlx0XHR1OCBzYW1wbGVfYnVmW1NQRUNUUkFMX1NBTVBMRV9NQVhfTEVOXSA9IHswfTtcbiA0NzM6XHRcdHN0cnVjdCBhdGhfaHcgKmFoID0gc3BlY19wcml2LVx1MDAzZWFoO1xuIDQ3NDpcdFx0c3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzcGVjX3ByaXYtXHUwMDNlYWgpO1xuIDQ3NTpcdFx0c3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBjb21tb24tXHUwMDNlcHJpdjtcbiA0NzY6XHRcdHU4IG51bV9iaW5zLCAqdmRhdGEgPSAodTggKiloZHI7XG4gNDc3Olx0XHRzdHJ1Y3QgYXRoX3JhZGFyX2luZm8gKnJhZGFyX2luZm87XG4gNDc4Olx0XHRpbnQgbGVuID0gcnMtXHUwMDNlcnNfZGF0YWxlbjtcbiA0Nzk6XHRcdGludCBpO1xuIDQ4MDpcdFx0aW50IGdvdF9zbGVuID0gMDtcbiA0ODE6XHRcdHU4ICAqc2FtcGxlX3N0YXJ0O1xuIDQ4MjpcdFx0aW50IHNhbXBsZV9ieXRlcyA9IDA7XG4gNDgzOlx0XHRpbnQgcmV0ID0gMDtcbiA0ODQ6XHRcdHUxNiBmZnRfbGVuLCBzYW1wbGVfbGVuLCBmcmVxID0gYWgtXHUwMDNlY3VyY2hhbi1cdTAwM2VjaGFuLVx1MDAzZWNlbnRlcl9mcmVxO1xuIDQ4NTpcdFx0ZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFuX3R5cGU7XG4gNDg2Olx0XHRhdGhfY21uX2ZmdF9pZHhfdmFsaWRhdG9yICpmZnRfaWR4X3ZhbGlkYXRvcjtcbiA0ODc6XHRcdGF0aF9jbW5fZmZ0X3NhbXBsZV9oYW5kbGVyICpmZnRfaGFuZGxlcjtcbiA0ODg6XHRcbiA0ODk6XHRcdC8qIEFSOTI4MCBhbmQgYmVmb3JlIHJlcG9ydCB2aWEgQVRIOUtfUEhZRVJSX1JBREFSLCBBUjkzeHggYW5kIG5ld2VyXG4gNDkwOlx0XHQgKiB2aWEgQVRIOUtfUEhZRVJSX1NQRUNUUkFMLiBIYXZlbiYjMzk7dCBzZWVuIEFUSDlLX1BIWUVSUl9GQUxTRV9SQURBUl9FWFRcbiA0OTE6XHRcdCAqIHlldCwgYnV0IHRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgcG9zc2libGUgYXMgd2VsbC5cbiA0OTI6XHRcdCAqL1xuIDQ5MzpcdFx0aWYgKHJzLVx1MDAzZXJzX3BoeWVyciAhPSBBVEg5S19QSFlFUlJfUkFEQVIgXHUwMDI2XHUwMDI2XG4gNDk0Olx0XHQgICAgcnMtXHUwMDNlcnNfcGh5ZXJyICE9IEFUSDlLX1BIWUVSUl9GQUxTRV9SQURBUl9FWFQgXHUwMDI2XHUwMDI2XG4gNDk1Olx0XHQgICAgcnMtXHUwMDNlcnNfcGh5ZXJyICE9IEFUSDlLX1BIWUVSUl9TUEVDVFJBTClcbiA0OTY6XHRcdFx0cmV0dXJuIDA7XG4gNDk3Olx0XG4gNDk4Olx0XHQvKiBjaGVjayBpZiBzcGVjdHJhbCBzY2FuIGJpdCBpcyBzZXQuIFRoaXMgZG9lcyBub3QgaGF2ZSB0byBiZSBjaGVja2VkXG4gNDk5Olx0XHQgKiBpZiByZWNlaXZlZCB0aHJvdWdoIGEgU1BFQ1RSQUwgcGh5IGVycm9yLCBidXQgc2hvdWxkbiYjMzk7dCBodXJ0LlxuIDUwMDpcdFx0ICovXG4gNTAxOlx0XHRyYWRhcl9pbmZvID0gKChzdHJ1Y3QgYXRoX3JhZGFyX2luZm8gKilcdTAwMjZ2ZGF0YVtsZW5dKSAtIDE7XG4gNTAyOlx0XHRpZiAoIShyYWRhcl9pbmZvLVx1MDAzZXB1bHNlX2J3X2luZm8gXHUwMDI2IFNQRUNUUkFMX1NDQU5fQklUTUFTSykpXG4gNTAzOlx0XHRcdHJldHVybiAwO1xuIDUwNDpcdFxuIDUwNTpcdFx0aWYgKCFzcGVjX3ByaXYtXHUwMDNlcmZzX2NoYW5fc3BlY19zY2FuKVxuIDUwNjpcdFx0XHRyZXR1cm4gMTtcbiA1MDc6XHRcbiA1MDg6XHRcdC8qIE91dHB1dCBidWZmZXJzIGFyZSBmdWxsLCBubyBuZWVkIHRvIHByb2Nlc3MgYW55dGhpbmdcbiA1MDk6XHRcdCAqIHNpbmNlIHRoZXJlIGlzIG5vIHNwYWNlIHRvIHB1dCB0aGUgcmVzdWx0IGFueXdheVxuIDUxMDpcdFx0ICovXG4gNTExOlx0XHRyZXQgPSBhdGhfY21uX2lzX2ZmdF9idWZfZnVsbChzcGVjX3ByaXYpO1xuIDUxMjpcdFx0aWYgKHJldCA9PSAxKSB7XG4gNTEzOlx0XHRcdGF0aF9kYmcoY29tbW9uLCBTUEVDVFJBTF9TQ0FOLCBcJiMzNDtGRlQgcmVwb3J0IGlnbm9yZWQsIG5vIHNwYWNlIFwmIzM0O1xuIDUxNDpcdFx0XHRcdFx0XHRcdFwmIzM0O2xlZnQgb24gb3V0cHV0IGJ1ZmZlcnNcXG5cJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTYyMAoJCQkJCQkJb3V0cHV0OiA1NQoJCQkJCQkJdGhvdWdodHM6IDc5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aCBGdXp6aW5nOiBBdGhlcm9zIFVTQiBXaXJlbGVzcyBEcml2ZXIgUlggUGF0aCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBpbiBgYXRoOWtfcnhfcHJlcGFyZWAgd2l0aGluIHRoZSBBdGhlcm9zIFVTQiB3aXJlbGVzcyBkcml2ZXIgKGBhdGg5a19odGNgKS4gVGhlIGNoYW5nZSBpbnRyb2R1Y2VzIGEgbmV3IGNvbmRpdGlvbjogaWYgYSByZWNlaXZlZCBwYWNrZXQgaGFzIGEgQ1JDIGVycm9yIChgQVRIOUtfUlhFUlJfQ1JDYCkgYW5kIGl0cyBsZW5ndGggbWF0Y2hlcyBhIHNwZWN0cmFsIHNhbXBsZSBsZW5ndGgsIGl0JiMzOTtzIGZsYWdnZWQgYXMgcG90ZW50aWFsbHkgcmVsYXRlZCB0byByYWRhciBpbnRlcmZlcmVuY2UgKGBBVEg5S19QSFlFUlJfUkFEQVJgKS4gVGhpcyB0cmlnZ2VycyBhIGNhbGwgdG8gYGF0aF9jbW5fcHJvY2Vzc19mZnRgLgoKTXkgZmlyc3QgdGhvdWdodCBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBMZXQmIzM5O3Mgc2VlLiBBY2NvcmRpbmcgdG8gdGhlIGNyaXRlcmlhLCBpdCYjMzk7cyBhIHBvc2l0aXZlIHNpZ25hbCBpZiB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGluIGEgZHJpdmVyIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMsIGxpa2UgVVNCLiBCaW5nbyEgYGF0aDlrX2h0Y2AgaXMgYSBVU0Igd2lyZWxlc3MgZHJpdmVyLCBhY2Nlc3NpYmxlIHRocm91Z2ggVVNCLiBUaGUgYGF0aDlrX3J4X3ByZXBhcmVgIGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlIFJYIHBhdGgsIHNvIGl0JiMzOTtzIGRpcmVjdGx5IGV4ZWN1dGVkIHdoZW4gVVNCIFJYIHBhY2tldHMgYXJyaXZlLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGlzIG5ldyBsb2dpYyBwYXRoIHNwZWNpZmljYWxseSBmb3IgaGFuZGxpbmcgQ1JDIGVycm9ycyBpbiB0aGUgY29udGV4dCBvZiBzcGVjdHJhbCBzYW1wbGVzLCB3aGljaCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gdGhpcyBkcml2ZXIuIFRoZXJlZm9yZSwgYFdvcnRoRnV6emluZz10cnVlYC4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBGb2N1c1N5bWJvbHMgYW5kIEVuYWJsZUNvbmZpZ3MuCgpIZXJlJiMzOTtzIG15IHRoaW5raW5nOgoqICAgYGF0aDlrX3J4X3Rhc2tsZXRgOiBUaGlzIGlzIHRoZSB0YXNrbGV0IHRoYXQgaGFuZGxlcyB0aGUgUlggYnVmZmVycy4gSXQgY2FsbHMgYGF0aDlrX3J4X3ByZXBhcmVgLCBtYWtpbmcgaXQgYSBjcnVjaWFsIGVudHJ5IHBvaW50LgoqICAgYGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuYDogVGhlIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb24gaXMgYWRkZWQgaW4gYGh0Y19kcnZfdHhyeC5jYCB0byBjaGVjayBpZiB0aGUgbGVuZ3RoIG1hdGNoZXMgc2FtcGxlIGxlbmd0aC4gV2UgbmVlZCB0byBmaW5kIG91dCB3aGV0aGVyIHRoaXMgaXMgaW5saW5lZCBvciBub3QuIFdlIHNob3VsZCBwcm9iYWJseSBhbHNvIGluY2x1ZGUgYGF0aDlrX3J4X3Rhc2tsZXRgIHRvIGVuc3VyZSB0aGF0IHRoaXMgaXMgcmVhY2hhYmxlLgoqICAgYGF0aF9jbW5fcHJvY2Vzc19mZnRgOiBUaGlzIGlzIHRoZSBGRlQgcGFyc2luZyBmdW5jdGlvbiB0aGF0JiMzOTtzIG5vdyBjYWxsZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb24uCgpMZXQgbWUgY2hlY2sgaWYgYGF0aDlrX3J4X3ByZXBhcmVgIGlzIHN0YXRpYyAoaXQgaXMpLiBBbHNvLCBgYXRoOWtfcnhfdGFza2xldGAgaXMgbm9uLXN0YXRpYyAoaXQmIzM5O3MgZWl0aGVyIGV4cG9ydGVkIG9yIGluIGEgaGVhZGVyKS4gSSYjMzk7bGwgYWxzbyBoYXZlIHRvIGNoZWNrIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBodGNfZHJ2X3R4cnguY2AsIGxpa2UgYGF0aDlrX2h0Y19yeF9tc2dgLgoKU28sIHRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoaXMgcGF0Y2ggb3BlbnMgdXAgYSBuZXcgY29kZSBwYXRoIHRyaWdnZXJlZCBieSBDUkMgZXJyb3JzLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHRoZSBGRlQgcHJvY2Vzc2luZy4gVGhpcyBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIHRhcmdldCBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVowLTlfXSYjNDM7IC4qXFwoLiomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTIzPXN0YXRpYyBjb25zdCBpbnQgc3VidHlwZV90eHFfdG9faHdxW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTM5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjQwOmludCBnZXRfaHdfcW51bSh1MTYgcXVldWUsIGludCAqaHdxX21hcClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy00MS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTU1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjU2OnZvaWQgYXRoOWtfaHRjX2NoZWNrX3N0b3BfcXVldWVzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01Ny17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTY3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjY4OnZvaWQgYXRoOWtfaHRjX2NoZWNrX3dha2VfcXVldWVzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy02OS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTc4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjc5OmludCBhdGg5a19odGNfdHhfZ2V0X3Nsb3Qoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTgwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtOTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6OTU6dm9pZCBhdGg5a19odGNfdHhfY2xlYXJfc2xvdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIGludCBzbG90KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTk2LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTAxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjEwMjpzdGF0aWMgaW5saW5lIGVudW0gaHRjX2VuZHBvaW50X2lkIGdldF9odGNfZXBpZChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTAzLVx0XHRcdFx0XHRcdHUxNiBxbnVtKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz0xMzE9Z2V0X2h0Y19lcGlkX3F1ZXVlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgdTggZXBpZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTU2LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjE1NzpzdGF0aWMgaW5saW5lIGludCBzdHJpcF9kcnZfaGVhZGVyKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xNTgtXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xODctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MTg4OmludCBhdGhfaHRjX3R4cV91cGRhdGUoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LCBpbnQgcW51bSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xODktXHRcdCAgICAgICBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWluZm8pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTIxMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzoyMTQ6c3RhdGljIHZvaWQgYXRoOWtfaHRjX3R4X21nbXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTIxNS1cdFx0XHQgICAgICBzdHJ1Y3QgYXRoOWtfaHRjX3ZpZiAqYXZwLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0yNTktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MjYwOnN0YXRpYyB2b2lkIGF0aDlrX2h0Y190eF9kYXRhKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0yNjEtXHRcdFx0ICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMzM5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjM0MDppbnQgYXRoOWtfaHRjX3R4X3N0YXJ0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0zNDEtXHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0zOTEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MzkyOnN0YXRpYyBpbmxpbmUgYm9vbCBfX2F0aDlrX2h0Y19jaGVja190eF9hZ2dyKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0zOTMtXHRcdFx0XHRcdCAgICAgc3RydWN0IGF0aDlrX2h0Y19zdGEgKmlzdGEsIHU4IHRpZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNDA0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjQwNTpzdGF0aWMgdm9pZCBhdGg5a19odGNfY2hlY2tfdHhfYWdncihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNDA2LVx0XHRcdFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTQ0NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo0NDU6c3RhdGljIHZvaWQgYXRoOWtfaHRjX3R4X3Byb2Nlc3Moc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTQ0Ni1cdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01MjgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NTI5OnN0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19odGNfdHhfZHJhaW5xKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01MzAtXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTUzOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo1Mzk6dm9pZCBhdGg5a19odGNfdHhfZHJhaW4oc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTU0MC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTU3Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo1Nzg6dm9pZCBhdGg5a190eF9mYWlsZWRfdGFza2xldChzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNTc5LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNTkxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjU5MjpzdGF0aWMgaW5saW5lIGJvb2wgY2hlY2tfY29va2llKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01OTMtXHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy02MTctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NjE4OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiogYXRoOWtfaHRjX3R4X2dldF9wYWNrZXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTYxOS1cdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBfX3dtaV9ldmVudF90eHN0YXR1cyAqdHhzKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy02NDYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NjQ3OnZvaWQgYXRoOWtfaHRjX3R4c3RhdHVzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgdm9pZCAqd21pX2V2ZW50KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTY0OC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTY4OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo2OTA6dm9pZCBhdGg5a19odGNfdHhlcCh2b2lkICpkcnZfcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy02OTEtXHRcdCAgICBlbnVtIGh0Y19lbmRwb2ludF9pZCBlcF9pZCwgYm9vbCB0eG9rKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy03MTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NzE2OnN0YXRpYyBpbmxpbmUgYm9vbCBjaGVja19wYWNrZXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTcxNy17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTczMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo3MzM6c3RhdGljIHZvaWQgYXRoOWtfaHRjX3R4X2NsZWFudXBfcXVldWUoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTczNC1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICplcGlkX3F1ZXVlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy03NjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NzYxOnZvaWQgYXRoOWtfaHRjX3R4X2NsZWFudXBfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNzYyLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtODA4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjgwOTppbnQgYXRoOWtfdHhfaW5pdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtODEwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtODIxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjgyMjp2b2lkIGF0aDlrX3R4X2NsZWFudXAoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTgyMy17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTgyNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo4Mjc6Ym9vbCBhdGg5a19odGNfdHhxX3NldHVwKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgaW50IHN1YnR5cGUpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtODI4LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtODUxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjg1MjppbnQgYXRoOWtfaHRjX2NhYnFfc2V0dXAoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTg1My17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTg2OC0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo4Njk6dTMyIGF0aDlrX2h0Y19jYWxjcnhmaWx0ZXIoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTg3MC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTkxNS0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo5MTY6c3RhdGljIHZvaWQgYXRoOWtfaHRjX29wbW9kZV9pbml0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy05MTcte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy05MjktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6OTMwOnZvaWQgYXRoOWtfaG9zdF9yeF9pbml0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy05MzEte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy05MzctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6OTM4OnN0YXRpYyBpbmxpbmUgdm9pZCBjb252ZXJ0X2h0Y19mbGFnKHN0cnVjdCBhdGhfcnhfc3RhdHVzICpyeF9zdGF0cyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy05MzktXHRcdFx0XHQgICBzdHJ1Y3QgYXRoX2h0Y19yeF9zdGF0dXMgKnJ4c3RhdHVzKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy05NDgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6OTQ5OnN0YXRpYyB2b2lkIHJ4X3N0YXR1c19odGNfdG9fYXRoKHN0cnVjdCBhdGhfcnhfc3RhdHVzICpyeF9zdGF0cyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy05NTAtXHRcdFx0XHQgc3RydWN0IGF0aF9odGNfcnhfc3RhdHVzICpyeHN0YXR1cylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtOTc4LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjk3OTpzdGF0aWMgYm9vbCBhdGg5a19odGNfaXNfc3BlY3RyYWxfc2FtcGxlX2xlbihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtOTgwLVx0XHRcdFx0XHQgICAgIHUxNiBsZW4pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTk5Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo5OTg6c3RhdGljIGJvb2wgYXRoOWtfcnhfcHJlcGFyZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtOTk5LVx0XHRcdCAgICAgc3RydWN0IGF0aDlrX2h0Y19yeGJ1ZiAqcnhidWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTExMTgtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MTExOTp2b2lkIGF0aDlrX3J4X3Rhc2tsZXQoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTExMjAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xMTcyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjExNzM6dm9pZCBhdGg5a19odGNfcnhlcCh2b2lkICpkcnZfcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xMTc0LVx0XHQgICAgZW51bSBodGNfZW5kcG9pbnRfaWQgZXBfaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEyMTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MTIxMzp2b2lkIGF0aDlrX3J4X2NsZWFudXAoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEyMTQte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xMjI0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjEyMjU6aW50IGF0aDlrX3J4X2luaXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEyMjYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzU5MAoJCQkJCQkJb3V0cHV0OiAxNzcKCQkJCQkJCXRob3VnaHRzOiA0ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGF0aDlrX2h0YyBSWCBQYXRoIGZvciBTcGVjdHJhbCBTYW1wbGUgRGV0ZWN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUga2V5IEZvY3VzU3ltYm9scyBqdW1wIG91dDogYGF0aDlrX3J4X3Rhc2tsZXRgLCBgYXRoOWtfaHRjX3J4ZXBgLCBhbmQgYGF0aF9jbW5fcHJvY2Vzc19mZnRgLiBUaGVzZSBhcmUgdGhlIGNyaXRpY2FsIHBvaW50cyB3aGVyZSB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBSWCBwYXRoLiBTcGVjaWZpY2FsbHksIGBhdGg5a19odGNfcnhlcGAgcHVsbHMgU0tCcyBmcm9tIHRoZSBVU0IgSFRDIGVuZHBvaW50LCBxdWV1ZXMgdGhlbSB0byBgcHJpdi0mZ3Q7cngucnhidWZfcXVldWVgLCBhbmQgc2NoZWR1bGVzIHRoZSBgcnhfdGFza2xldGAuIFRoZW4gYGF0aDlrX3J4X3Rhc2tsZXRgIGtpY2tzIGluLCBkZXF1ZXVlcyB0aGUgU0tCLCBhbmQgY2FsbHMgYGF0aDlrX3J4X3ByZXBhcmVgLiBXaXRoaW4gYGF0aDlrX3J4X3ByZXBhcmVgLCB3ZSBmaW5kIHRoZSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QsIHNwZWNpZmljYWxseSBgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW5gIGFuZCBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgZW5hYmxpbmcgYWxsIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBUaGUgYmFzZSByZXF1aXJlbWVudCBzZWVtcyB0byBiZSBgQVRIOUtfSFRDYCwgYW5kIHdlIG5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgZW5hYmxlZC4gYEFUSDlLX0hUQ2AgZGVwZW5kcyBvbiBgVVNCICZhbXA7JmFtcDsgTUFDODAyMTFgLCBzbyB0aG9zZSBhcmUgYWxzbyB2aXRhbC4gRnVydGhlciwgd2Ugc2VlIGBBVEg5S19IVENfREVCVUdGU2AgKGRlcGVuZGVudCBvbiBgQVRIOUtfSFRDICZhbXA7JmFtcDsgREVCVUdfRlNgKSBhbmQgYEFUSDlLX0NPTU1PTl9TUEVDVFJBTGAgKGRlcGVuZGVudCBvbiBgQVRIOUtfREVCVUdGUyB8fCBBVEg5S19IVENfREVCVUdGU2AsIGFuZCBzZWxlY3RpbmcgYFJFTEFZYCkuIFNvIHRvIGVuc3VyZSB0aGUgZW50aXJlIGZlYXR1cmUgaXMgZW5hYmxlZCwgd2UgbmVlZCB0byBlbnN1cmUgdGhlc2UgYXJlIGVuYWJsZWQ6ICYjMzQ7QVRIOUtfSFRDJiMzNDssICYjMzQ7QVRIOUtfSFRDX0RFQlVHRlMmIzM0OywgYW5kICYjMzQ7QVRIOUtfQ09NTU9OX1NQRUNUUkFMJiMzNDsuCgpUaGUgcGF0Y2gmIzM5O3MgcHVycG9zZSBiZWNvbWVzIGNsZWFyLiBJdCYjMzk7cyBhYm91dCBpbnRyb2R1Y2luZyBGRlQgc3BlY3RyYWwgc2FtcGxlIGRldGVjdGlvbiB0byBDUkMtZXJyb3JlZCBmcmFtZXMgd2l0aGluIHRoZSBSWCBwcm9jZXNzaW5nIHBhdGggaW4gdGhlIGF0aDlrX2h0YyBVU0Igd2lyZWxlc3MgZHJpdmVyLiBGcmFtZXMgd2l0aCBDUkMgZXJyb3JzIHRoYXQgYWxpZ24gd2l0aCBzcGVjaWZpYyBzcGVjdHJhbCBGRlQgc2FtcGxlIHNpemVzIGFyZSBwYXNzZWQgdG8gYGF0aF9jbW5fcHJvY2Vzc19mZnRgIGZvciBzcGVjdHJhbCBhbmFseXNpcy4gQmVjYXVzZSB0aGlzIGNvZGUgcGF0aCBjYW4gYmUgcmVhY2hlZCB0aHJvdWdoIFVTQiBkZXZpY2UgZW11bGF0aW9uLCBpdCByZXByZXNlbnRzIGEgcG90ZW50aWFsbHkgbmV3IGF0dGFjayBzdXJmYWNlIGR1ZSB0byByZWFjaGFibGUgbW9kaWZpZWQgZXhlY3V0YWJsZSBkcml2ZXIgY29kZSwgYW5kIHRoZXJlZm9yZSB3YXJyYW50cyBmdXp6aW5nLgoKQWxyaWdodCwgdGhhdCYjMzk7cyB0aGUgYW5hbHlzaXMuIFRpbWUgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDlLX0hUQyYjMzQ7LAogICAgJiMzNDtBVEg5S19IVENfREVCVUdGUyYjMzQ7LAogICAgJiMzNDtBVEg5S19DT01NT05fU1BFQ1RSQUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthdGg5a19yeF90YXNrbGV0JiMzNDssCiAgICAmIzM0O2F0aDlrX2h0Y19yeGVwJiMzNDssCiAgICAmIzM0O2F0aF9jbW5fcHJvY2Vzc19mZnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzcGVjdHJhbCBGRlQgc2FtcGxlIGRldGVjdGlvbiBmb3IgQ1JDLWVycm9yZWQgZnJhbWVzIGluIHRoZSBSWCBwcm9jZXNzaW5nIHBhdGggKGF0aDlrX3J4X3ByZXBhcmUpIG9mIHRoZSBhdGg5a19odGMgVVNCIHdpcmVsZXNzIGRyaXZlciwgZGlyZWN0aW5nIHF1YWxpZnlpbmcgZnJhbWVzIGludG8gYXRoX2Ntbl9wcm9jZXNzX2ZmdC4gQmVjYXVzZSBhdGg5a19odGMgaXMgYSBVU0IgV2ktRmkgZHJpdmVyIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24sIHRoaXMgdG91Y2hlcyByZWFjaGFibGUga2VybmVsIGNvZGUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QVRIOUtfSFRDJiMzNDssCiAgICAmIzM0O0FUSDlLX0hUQ19ERUJVR0ZTJiMzNDssCiAgICAmIzM0O0FUSDlLX0NPTU1PTl9TUEVDVFJBTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2F0aDlrX3J4X3Rhc2tsZXQmIzM0OywKICAgICYjMzQ7YXRoOWtfaHRjX3J4ZXAmIzM0OywKICAgICYjMzQ7YXRoX2Ntbl9wcm9jZXNzX2ZmdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHNwZWN0cmFsIEZGVCBzYW1wbGUgZGV0ZWN0aW9uIGZvciBDUkMtZXJyb3JlZCBmcmFtZXMgaW4gdGhlIFJYIHByb2Nlc3NpbmcgcGF0aCAoYXRoOWtfcnhfcHJlcGFyZSkgb2YgdGhlIGF0aDlrX2h0YyBVU0Igd2lyZWxlc3MgZHJpdmVyLCBkaXJlY3RpbmcgcXVhbGlmeWluZyBmcmFtZXMgaW50byBhdGhfY21uX3Byb2Nlc3NfZmZ0LiBCZWNhdXNlIGF0aDlrX2h0YyBpcyBhIFVTQiBXaS1GaSBkcml2ZXIgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiwgdGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBrZXJuZWwgY29kZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzcGVjdHJhbCBzY2FuIHNhbXBsZSBsZW5ndGggdmFsaWRhdGlvbiB2aWEgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW4oKSBhbmQgZm9yd2FyZHMgQ1JDLWVycm9yZWQgZnJhbWVzIHdpdGggbWF0Y2hpbmcgbGVuZ3RocyB0byBhdGhfY21uX3Byb2Nlc3NfZmZ0KCkgaW4gYXRoOWtfcnhfcHJlcGFyZSgpLiBBbGwgdmFyaWFibGVzIGFuZCBzdHJ1Y3R1cmUgZmllbGRzIHVzZWQgKGUuZy4sIHJzX2RhdGFsZW4sIHJ4X3N0YXRzLnJzX3BoeWVyciwgY2hhbl90eXBlLCBmZnRfbGVuKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBidWZmZXJzLCBwZXJmb3JtIGFueSBjb3B5X3RvX3VzZXIgb3BlcmF0aW9ucywgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBvciBleHBvc2UgcGFkZGluZy91bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIChzdWNoIGFzIGJ1ZmZlciBib3VuZHMgb3IgcG9pbnRlciBoYW5kbGluZykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5Yzg3MTJhZDE0MWVjNzUwZmIxZjg1ZGZhZDNmYzdhMWJlNjg4ZjI0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAwMjo0MTo0NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYwppbmRleCBiZWQ3ZWEyNDI1YTBlLi5mMjFjZmMwMzQyNmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jCkBAIC05NjksNiAmIzQzOzk2OSwzMiBAQCBzdGF0aWMgdm9pZCByeF9zdGF0dXNfaHRjX3RvX2F0aChzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnhfc3RhdHMsCiAJY29udmVydF9odGNfZmxhZyhyeF9zdGF0cywgcnhzdGF0dXMpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBUaGUgZmlybXdhcmUgcmVwb3J0cyBhIGZyYW1lIHRoYXQgZmFpbGVkIGl0cyBDUkMgYXMgYSBDUkMgZXJyb3IgZXZlbiB3aGVuCiYjNDM7ICogdGhlIFBIWSBlcnJvciBiaXQgaXMgc2V0IGFzIHdlbGwsIHNvIHVuZGVyIGludGVyZmVyZW5jZSBzcGVjdHJhbCBzYW1wbGVzCiYjNDM7ICogcmVhY2ggdGhlIGhvc3QgYXMgQ1JDIGVycm9ycy4gQSBzYW1wbGUgaXMgcmVjb2duaXNhYmxlIGJ5IGl0cyBzaXplOiB0aGUKJiM0MzsgKiBGRlQgcmVwb3J0IGxlbmd0aCBmb3IgdGhlIGNoYW5uZWwgd2lkdGgsIHBsdXMgb3IgbWludXMgdGhlIHR3byBieXRlcyB0aGUKJiM0MzsgKiBNQUMgbWF5IGFkZCBvciBkcm9wLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKJiM0MzsJCQkJCSAgICAgdTE2IGxlbikKJiM0Mzt7CiYjNDM7CWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbl90eXBlOwomIzQzOwl1MTYgZmZ0X2xlbjsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3NwZWNfcHJpdi5zcGVjdHJhbF9tb2RlID09IFNQRUNUUkFMX0RJU0FCTEVEKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwljaGFuX3R5cGUgPSBjZmc4MDIxMV9nZXRfY2hhbmRlZl90eXBlKCZhbXA7cHJpdi0mZ3Q7aHctJmd0O2NvbmYuY2hhbmRlZik7CiYjNDM7CWlmIChjaGFuX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUyB8fAomIzQzOwkgICAgY2hhbl90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwUExVUykKJiM0MzsJCWZmdF9sZW4gPSBTUEVDVFJBTF9IVDIwXzQwX1RPVEFMX0RBVEFfTEVOOwomIzQzOwllbHNlCiYjNDM7CQlmZnRfbGVuID0gU1BFQ1RSQUxfSFQyMF9UT1RBTF9EQVRBX0xFTjsKJiM0MzsKJiM0MzsJcmV0dXJuIGxlbiAmIzQzOyAxICZndDs9IGZmdF9sZW4gJmFtcDsmYW1wOyBsZW4gJmx0Oz0gZmZ0X2xlbiAmIzQzOyAyOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGF0aDlrX3J4X3ByZXBhcmUoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAogCQkJICAgICBzdHJ1Y3QgYXRoOWtfaHRjX3J4YnVmICpyeGJ1ZiwKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKQEAgLTEwNTIsNiAmIzQzOzEwNzgsMTggQEAgc3RhdGljIGJvb2wgYXRoOWtfcnhfcHJlcGFyZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCiAJCWdvdG8gcnhfbmV4dDsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogTGV0IHRoZSBGRlQgcGFyc2VyIGRlY2lkZSB3aGV0aGVyIGEgQ1JDIGVycm9yIG9mIHNhbXBsZSBzaXplIGlzIGEKJiM0MzsJICogc2FtcGxlOyBpdCB2YWxpZGF0ZXMgdGhlIGNvbnRlbnRzIGFuZCByZXR1cm5zIDAgZm9yIGFueXRoaW5nIGVsc2UuCiYjNDM7CSAqLwomIzQzOwlpZiAodW5saWtlbHkocnhfc3RhdHMucnNfc3RhdHVzICZhbXA7IEFUSDlLX1JYRVJSX0NSQykgJmFtcDsmYW1wOwomIzQzOwkgICAgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW4ocHJpdiwgcnNfZGF0YWxlbikpIHsKJiM0MzsJCXJ4X3N0YXRzLnJzX3BoeWVyciA9IEFUSDlLX1BIWUVSUl9SQURBUjsKJiM0MzsJCWlmIChhdGhfY21uX3Byb2Nlc3NfZmZ0KCZhbXA7cHJpdi0mZ3Q7c3BlY19wcml2LCBoZHIsICZhbXA7cnhfc3RhdHMsCiYjNDM7CQkJCQlyeF9zdGF0dXMtJmd0O21hY3RpbWUpKQomIzQzOwkJCWdvdG8gcnhfbmV4dDsKJiM0MzsJfQomIzQzOwogCWlmICghYXRoOWtfY21uX3J4X2FjY2VwdChjb21tb24sIGhkciwgcnhfc3RhdHVzLCAmYW1wO3J4X3N0YXRzLAogCQkJJmFtcDtkZWNyeXB0X2Vycm9yLCBwcml2LSZndDtyeGZpbHRlcikpCiAJCWdvdG8gcnhfbmV4dDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MzgKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGF0aDlrIFJYIFBhdGgqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgYXBwcm9hY2ggaXMgdG8gdXNlIGBncmVwcGVyYCBhbmQgYHJlYWQtZmlsZWAgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIHNlY3Rpb25zLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjaGFuZ2UgaW1wYWN0cyB0aGUgZGF0YSBmbG93LCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBgYXRoOWtfcnhfcHJlcGFyZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguY2Agc2luY2UgdGhhdCBzZWVtcyBsaWtlIHRoZSByZWxldmFudCBmaWxlLiBJJiMzOTtsbCByZWFkIGFyb3VuZCBsaW5lcyA5NjkgdG8gMTA4MCBvZiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jYCB0byBzZWUgaG93IHRoZSBjb2RlIGZ1bmN0aW9ucyBhcm91bmQgdGhhdCBwYXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk2MDpcdFxuIDk2MTpcdFx0bWVtY3B5KHJ4X3N0YXRzLVx1MDAzZXJzX3Jzc2lfY3RsLCByeHN0YXR1cy1cdTAwM2Vyc19yc3NpX2N0bCxcbiA5NjI6XHRcdFx0c2l6ZW9mKHJ4X3N0YXRzLVx1MDAzZXJzX3Jzc2lfY3RsKSk7XG4gOTYzOlx0XHRtZW1jcHkocnhfc3RhdHMtXHUwMDNlcnNfcnNzaV9leHQsIHJ4c3RhdHVzLVx1MDAzZXJzX3Jzc2lfZXh0LFxuIDk2NDpcdFx0XHRzaXplb2Yocnhfc3RhdHMtXHUwMDNlcnNfcnNzaV9leHQpKTtcbiA5NjU6XHRcbiA5NjY6XHRcdHJ4X3N0YXRzLVx1MDAzZXJzX2lzYWdnclx0PSByeHN0YXR1cy1cdTAwM2Vyc19pc2FnZ3I7XG4gOTY3Olx0XHRyeF9zdGF0cy1cdTAwM2Vyc19tb3JlYWdnclx0PSByeHN0YXR1cy1cdTAwM2Vyc19tb3JlYWdncjtcbiA5Njg6XHRcdHJ4X3N0YXRzLVx1MDAzZXJzX251bV9kZWxpbXNcdD0gcnhzdGF0dXMtXHUwMDNlcnNfbnVtX2RlbGltcztcbiA5Njk6XHRcdGNvbnZlcnRfaHRjX2ZsYWcocnhfc3RhdHMsIHJ4c3RhdHVzKTtcbiA5NzA6XHR9XG4gOTcxOlx0XG4gOTcyOlx0LypcbiA5NzM6XHQgKiBUaGUgZmlybXdhcmUgcmVwb3J0cyBhIGZyYW1lIHRoYXQgZmFpbGVkIGl0cyBDUkMgYXMgYSBDUkMgZXJyb3IgZXZlbiB3aGVuXG4gOTc0Olx0ICogdGhlIFBIWSBlcnJvciBiaXQgaXMgc2V0IGFzIHdlbGwsIHNvIHVuZGVyIGludGVyZmVyZW5jZSBzcGVjdHJhbCBzYW1wbGVzXG4gOTc1Olx0ICogcmVhY2ggdGhlIGhvc3QgYXMgQ1JDIGVycm9ycy4gQSBzYW1wbGUgaXMgcmVjb2duaXNhYmxlIGJ5IGl0cyBzaXplOiB0aGVcbiA5NzY6XHQgKiBGRlQgcmVwb3J0IGxlbmd0aCBmb3IgdGhlIGNoYW5uZWwgd2lkdGgsIHBsdXMgb3IgbWludXMgdGhlIHR3byBieXRlcyB0aGVcbiA5Nzc6XHQgKiBNQUMgbWF5IGFkZCBvciBkcm9wLlxuIDk3ODpcdCAqL1xuIDk3OTpcdHN0YXRpYyBib29sIGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbiA5ODA6XHRcdFx0XHRcdFx0ICAgICB1MTYgbGVuKVxuIDk4MTpcdHtcbiA5ODI6XHRcdGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbl90eXBlO1xuIDk4MzpcdFx0dTE2IGZmdF9sZW47XG4gOTg0Olx0XG4gOTg1Olx0XHRpZiAocHJpdi1cdTAwM2VzcGVjX3ByaXYuc3BlY3RyYWxfbW9kZSA9PSBTUEVDVFJBTF9ESVNBQkxFRClcbiA5ODY6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDk4NzpcdFxuIDk4ODpcdFx0Y2hhbl90eXBlID0gY2ZnODAyMTFfZ2V0X2NoYW5kZWZfdHlwZShcdTAwMjZwcml2LVx1MDAzZWh3LVx1MDAzZWNvbmYuY2hhbmRlZik7XG4gOTg5Olx0XHRpZiAoY2hhbl90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMgfHxcbiA5OTA6XHRcdCAgICBjaGFuX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTKVxuIDk5MTpcdFx0XHRmZnRfbGVuID0gU1BFQ1RSQUxfSFQyMF80MF9UT1RBTF9EQVRBX0xFTjtcbiA5OTI6XHRcdGVsc2VcbiA5OTM6XHRcdFx0ZmZ0X2xlbiA9IFNQRUNUUkFMX0hUMjBfVE9UQUxfREFUQV9MRU47XG4gOTk0Olx0XG4gOTk1Olx0XHRyZXR1cm4gbGVuICYjNDM7IDEgXHUwMDNlPSBmZnRfbGVuIFx1MDAyNlx1MDAyNiBsZW4gXHUwMDNjPSBmZnRfbGVuICYjNDM7IDI7XG4gOTk2Olx0fVxuIDk5NzpcdFxuIDk5ODpcdHN0YXRpYyBib29sIGF0aDlrX3J4X3ByZXBhcmUoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuIDk5OTpcdFx0XHRcdCAgICAgc3RydWN0IGF0aDlrX2h0Y19yeGJ1ZiAqcnhidWYsXG4xMDAwOlx0XHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKVxuMTAwMTpcdFxuMTAwMjpcdHtcbjEwMDM6XHRcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7XG4xMDA0Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHByaXYtXHUwMDNlaHc7XG4xMDA1Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcnhidWYtXHUwMDNlc2tiO1xuMTAwNjpcdFx0c3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihwcml2LVx1MDAzZWFoKTtcbjEwMDc6XHRcdHN0cnVjdCBhdGhfaHcgKmFoID0gY29tbW9uLVx1MDAzZWFoO1xuMTAwODpcdFx0c3RydWN0IGF0aF9odGNfcnhfc3RhdHVzICpyeHN0YXR1cztcbjEwMDk6XHRcdHN0cnVjdCBhdGhfcnhfc3RhdHVzIHJ4X3N0YXRzO1xuMTAxMDpcdFx0Ym9vbCBkZWNyeXB0X2Vycm9yID0gZmFsc2U7XG4xMDExOlx0XHR1MTYgcnNfZGF0YWxlbjtcbjEwMTI6XHRcdGJvb2wgaXNfcGh5ZXJyO1xuMTAxMzpcdFxuMTAxNDpcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIEhUQ19SWF9GUkFNRV9IRUFERVJfU0laRSkge1xuMTAxNTpcdFx0XHRhdGhfZXJyKGNvbW1vbiwgXCYjMzQ7Q29ycnVwdGVkIFJYIGZyYW1lLCBkcm9wcGluZyAobGVuOiAlZClcXG5cJiMzNDssXG4xMDE2Olx0XHRcdFx0c2tiLVx1MDAzZWxlbik7XG4xMDE3Olx0XHRcdGdvdG8gcnhfbmV4dDtcbjEwMTg6XHRcdH1cbjEwMTk6XHRcbjEwMjA6XHRcdHJ4c3RhdHVzID0gKHN0cnVjdCBhdGhfaHRjX3J4X3N0YXR1cyAqKXNrYi1cdTAwM2VkYXRhO1xuMTAyMTpcdFxuMTAyMjpcdFx0cnNfZGF0YWxlbiA9IGJlMTZfdG9fY3B1KHJ4c3RhdHVzLVx1MDAzZXJzX2RhdGFsZW4pO1xuMTAyMzpcdFx0aWYgKHVubGlrZWx5KHJzX2RhdGFsZW4gLVxuMTAyNDpcdFx0ICAgIChza2ItXHUwMDNlbGVuIC0gSFRDX1JYX0ZSQU1FX0hFQURFUl9TSVpFKSAhPSAwKSkge1xuMTAyNTpcdFx0XHRhdGhfZXJyKGNvbW1vbixcbjEwMjY6XHRcdFx0XHRcJiMzNDtDb3JydXB0ZWQgUlggZGF0YSBsZW4sIGRyb3BwaW5nIChkbGVuOiAlZCwgc2tibGVuOiAlZClcXG5cJiMzNDssXG4xMDI3Olx0XHRcdFx0cnNfZGF0YWxlbiwgc2tiLVx1MDAzZWxlbik7XG4xMDI4Olx0XHRcdGdvdG8gcnhfbmV4dDtcbjEwMjk6XHRcdH1cbjEwMzA6XHRcbjEwMzE6XHRcdGlzX3BoeWVyciA9IHJ4c3RhdHVzLVx1MDAzZXJzX3N0YXR1cyBcdTAwMjYgQVRIOUtfUlhFUlJfUEhZO1xuMTAzMjpcdFx0LypcbjEwMzM6XHRcdCAqIERpc2NhcmQgemVyby1sZW5ndGggcGFja2V0cyBhbmQgcGFja2V0cyBzbWFsbGVyIHRoYW4gYW4gQUNLXG4xMDM0Olx0XHQgKiB3aGljaCBhcmUgbm90IFBIWV9FUlJPUiAoc2hvcnQgcmFkYXIgcHVsc2VzIGhhdmUgYSBsZW5ndGggb2YgMylcbjEwMzU6XHRcdCAqL1xuMTAzNjpcdFx0aWYgKHVubGlrZWx5KCFyc19kYXRhbGVuIHx8IChyc19kYXRhbGVuIFx1MDAzYyAxMCBcdTAwMjZcdTAwMjYgIWlzX3BoeWVycikpKSB7XG4xMDM3Olx0XHRcdGF0aF9kYmcoY29tbW9uLCBBTlksXG4xMDM4Olx0XHRcdFx0XCYjMzQ7U2hvcnQgUlggZGF0YSBsZW4sIGRyb3BwaW5nIChkbGVuOiAlZClcXG5cJiMzNDssXG4xMDM5Olx0XHRcdFx0cnNfZGF0YWxlbik7XG4xMDQwOlx0XHRcdGdvdG8gcnhfbmV4dDtcbjEwNDE6XHRcdH1cbjEwNDI6XHRcbjEwNDM6XHRcdGlmIChyeHN0YXR1cy1cdTAwM2Vyc19rZXlpeCBcdTAwM2U9IEFUSF9LRVlNQVggXHUwMDI2XHUwMDI2XG4xMDQ0Olx0XHQgICAgcnhzdGF0dXMtXHUwMDNlcnNfa2V5aXggIT0gQVRIOUtfUlhLRVlJWF9JTlZBTElEKSB7XG4xMDQ1Olx0XHRcdGF0aF9kYmcoY29tbW9uLCBBTlksXG4xMDQ2Olx0XHRcdFx0XCYjMzQ7SW52YWxpZCBrZXlpeCwgZHJvcHBpbmcgKGtleWl4OiAlZClcXG5cJiMzNDssXG4xMDQ3Olx0XHRcdFx0cnhzdGF0dXMtXHUwMDNlcnNfa2V5aXgpO1xuMTA0ODpcdFx0XHRnb3RvIHJ4X25leHQ7XG4xMDQ5Olx0XHR9XG4xMDUwOlx0XG4xMDUxOlx0XHQvKiBHZXQgdGhlIFJYIHN0YXR1cyBpbmZvcm1hdGlvbiAqL1xuMTA1MjpcdFxuMTA1MzpcdFx0bWVtc2V0KHJ4X3N0YXR1cywgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzKSk7XG4xMDU0Olx0XG4xMDU1Olx0XHQvKiBDb3B5IGV2ZXJ5dGhpbmcgZnJvbSBhdGhfaHRjX3J4X3N0YXR1cyAoSFRDX1JYX0ZSQU1FX0hFQURFUikuXG4xMDU2Olx0XHQgKiBBZnRlciB0aGlzLCB3ZSBjYW4gZHJvcCB0aGlzIHBhcnQgb2Ygc2tiLiAqL1xuMTA1NzpcdFx0cnhfc3RhdHVzX2h0Y190b19hdGgoXHUwMDI2cnhfc3RhdHMsIHJ4c3RhdHVzKTtcbjEwNTg6XHRcdGF0aDlrX2h0Y19lcnJfc3RhdF9yeChwcml2LCBcdTAwMjZyeF9zdGF0cyk7XG4xMDU5Olx0XHRyeF9zdGF0dXMtXHUwMDNlbWFjdGltZSA9IGJlNjRfdG9fY3B1KHJ4c3RhdHVzLVx1MDAzZXJzX3RzdGFtcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MzYKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byBgaHRjX2Rydl90eHJ4LmNgIGZvciBEZWVwZXIgSW5zaWdodCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gbGluZXMgZnJvbSAxMDYwIG9ud2FyZCBpbiBgaHRjX2Rydl90eHJ4LmNgLiBJIG5lZWQgYSBjbG9zZXIgbG9vayBhdCB0aGlzIHNlY3Rpb24sIGFuZCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdvaW5nIGxpbmUgYnkgbGluZS4gSSBzdXNwZWN0IHRoaXMgaXMgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIHRyYW5zbWlzc2lvbiBhbmQgcmVjZXB0aW9uIGhhbmRsaW5nIGxvZ2ljIGlzLiBJJiMzOTttIGhvcGluZyB0byBkaXNjb3ZlciBzb21lIGtleSBlbGVtZW50cyB3aXRoaW4gdGhpcyBmaWxlLCBhcyB3ZWxsIGFzIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtIGxldmVsIGRlc2lnbi4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGRpZyB1cCwgc2hhbGwgd2U/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDYwOlx0XHRza2JfcHVsbChza2IsIEhUQ19SWF9GUkFNRV9IRUFERVJfU0laRSk7XG4xMDYxOlx0XG4xMDYyOlx0XHQvKlxuMTA2MzpcdFx0ICogZXZlcnl0aGluZyBidXQgdGhlIHJhdGUgaXMgY2hlY2tlZCBoZXJlLCB0aGUgcmF0ZSBjaGVjayBpcyBkb25lXG4xMDY0Olx0XHQgKiBzZXBhcmF0ZWx5IHRvIGF2b2lkIGRvaW5nIHR3byBsb29rdXBzIGZvciBhIHJhdGUgZm9yIGVhY2ggZnJhbWUuXG4xMDY1Olx0XHQgKi9cbjEwNjY6XHRcdGhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cdTAwM2VkYXRhO1xuMTA2NzpcdFxuMTA2ODpcdFx0LypcbjEwNjk6XHRcdCAqIFByb2Nlc3MgUEhZIGVycm9ycyBhbmQgcmV0dXJuIHNvIHRoYXQgdGhlIHBhY2tldFxuMTA3MDpcdFx0ICogY2FuIGJlIGRyb3BwZWQuXG4xMDcxOlx0XHQgKi9cbjEwNzI6XHRcdGlmICh1bmxpa2VseShpc19waHllcnIpKSB7XG4xMDczOlx0XHRcdC8qIFRPRE86IE5vdCB1c2luZyBERlMgcHJvY2Vzc2luZyBub3cuICovXG4xMDc0Olx0XHRcdGlmIChhdGhfY21uX3Byb2Nlc3NfZmZ0KFx1MDAyNnByaXYtXHUwMDNlc3BlY19wcml2LCBoZHIsXG4xMDc1Olx0XHRcdFx0XHQgICAgXHUwMDI2cnhfc3RhdHMsIHJ4X3N0YXR1cy1cdTAwM2VtYWN0aW1lKSkge1xuMTA3NjpcdFx0XHRcdC8qIFRPRE86IENvZGUgdG8gY29sbGVjdCBzcGVjdHJhbCBzY2FuIHN0YXRpc3RpY3MgKi9cbjEwNzc6XHRcdFx0fVxuMTA3ODpcdFx0XHRnb3RvIHJ4X25leHQ7XG4xMDc5Olx0XHR9XG4xMDgwOlx0XG4xMDgxOlx0XHQvKlxuMTA4MjpcdFx0ICogTGV0IHRoZSBGRlQgcGFyc2VyIGRlY2lkZSB3aGV0aGVyIGEgQ1JDIGVycm9yIG9mIHNhbXBsZSBzaXplIGlzIGFcbjEwODM6XHRcdCAqIHNhbXBsZTsgaXQgdmFsaWRhdGVzIHRoZSBjb250ZW50cyBhbmQgcmV0dXJucyAwIGZvciBhbnl0aGluZyBlbHNlLlxuMTA4NDpcdFx0ICovXG4xMDg1Olx0XHRpZiAodW5saWtlbHkocnhfc3RhdHMucnNfc3RhdHVzIFx1MDAyNiBBVEg5S19SWEVSUl9DUkMpIFx1MDAyNlx1MDAyNlxuMTA4NjpcdFx0ICAgIGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKHByaXYsIHJzX2RhdGFsZW4pKSB7XG4xMDg3Olx0XHRcdHJ4X3N0YXRzLnJzX3BoeWVyciA9IEFUSDlLX1BIWUVSUl9SQURBUjtcbjEwODg6XHRcdFx0aWYgKGF0aF9jbW5fcHJvY2Vzc19mZnQoXHUwMDI2cHJpdi1cdTAwM2VzcGVjX3ByaXYsIGhkciwgXHUwMDI2cnhfc3RhdHMsXG4xMDg5Olx0XHRcdFx0XHRcdHJ4X3N0YXR1cy1cdTAwM2VtYWN0aW1lKSlcbjEwOTA6XHRcdFx0XHRnb3RvIHJ4X25leHQ7XG4xMDkxOlx0XHR9XG4xMDkyOlx0XG4xMDkzOlx0XHRpZiAoIWF0aDlrX2Ntbl9yeF9hY2NlcHQoY29tbW9uLCBoZHIsIHJ4X3N0YXR1cywgXHUwMDI2cnhfc3RhdHMsXG4xMDk0Olx0XHRcdFx0XHUwMDI2ZGVjcnlwdF9lcnJvciwgcHJpdi1cdTAwM2VyeGZpbHRlcikpXG4xMDk1Olx0XHRcdGdvdG8gcnhfbmV4dDtcbjEwOTY6XHRcbjEwOTc6XHRcdGF0aDlrX2Ntbl9yeF9za2JfcG9zdHByb2Nlc3MoY29tbW9uLCBza2IsIFx1MDAyNnJ4X3N0YXRzLFxuMTA5ODpcdFx0XHRcdFx0ICAgICByeF9zdGF0dXMsIGRlY3J5cHRfZXJyb3IpO1xuMTA5OTpcdFxuMTEwMDpcdFx0aWYgKGF0aDlrX2Ntbl9wcm9jZXNzX3JhdGUoY29tbW9uLCBodywgXHUwMDI2cnhfc3RhdHMsIHJ4X3N0YXR1cykpXG4xMTAxOlx0XHRcdGdvdG8gcnhfbmV4dDtcbjExMDI6XHRcbjExMDM6XHRcdHJ4X3N0YXRzLmlzX215YmVhY29uID0gYXRoX2lzX215YmVhY29uKGNvbW1vbiwgaGRyKTtcbjExMDQ6XHRcdGF0aDlrX2Ntbl9wcm9jZXNzX3Jzc2koY29tbW9uLCBodywgXHUwMDI2cnhfc3RhdHMsIHJ4X3N0YXR1cyk7XG4xMTA1Olx0XG4xMTA2Olx0XHRyeF9zdGF0dXMtXHUwMDNlYmFuZCA9IGFoLVx1MDAzZWN1cmNoYW4tXHUwMDNlY2hhbi1cdTAwM2ViYW5kO1xuMTEwNzpcdFx0cnhfc3RhdHVzLVx1MDAzZWZyZXEgPSBhaC1cdTAwM2VjdXJjaGFuLVx1MDAzZWNoYW4tXHUwMDNlY2VudGVyX2ZyZXE7XG4xMTA4Olx0XHRyeF9zdGF0dXMtXHUwMDNlYW50ZW5uYSA9IHJ4X3N0YXRzLnJzX2FudGVubmE7XG4xMTA5Olx0XHRyeF9zdGF0dXMtXHUwMDNlZmxhZyB8PSBSWF9GTEFHX01BQ1RJTUVfRU5EO1xuMTExMDpcdFxuMTExMTpcdFx0cmV0dXJuIHRydWU7XG4xMTEyOlx0cnhfbmV4dDpcbjExMTM6XHRcdHJldHVybiBmYWxzZTtcbjExMTQ6XHR9XG4xMTE1Olx0XG4xMTE2Olx0LypcbjExMTc6XHQgKiBGSVhNRTogSGFuZGxlIEZMVVNIIGxhdGVyIG9uLlxuMTExODpcdCAqL1xuMTExOTpcdHZvaWQgYXRoOWtfcnhfdGFza2xldChzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNDMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgRkZUIGFuZCBSWCBTdGF0cyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIHRoZSBGYXN0IEZvdXJpZXIgVHJhbnNmb3JtIHByb2Nlc3NpbmcgYW5kIHRoZSByZWNlaXZlciBzdGF0aXN0aWNzIGhlcmUuIEZpcnN0LCBJIHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBhdGhfY21uX3Byb2Nlc3NfZmZ0YCBmdW5jdGlvbi4gV2hhdCBpcyBpdCBkb2luZyBleGFjdGx5PyBBbmQgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgaW4gYHJ4X3N0YXRzYC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBOb3csIGxldCYjMzk7cyBzZWFyY2ggZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAsIHRvIHNlZSBpdCBpbiBhY3Rpb24sIGFuZCBhbHNvIGh1bnQgZG93biBgcnhfc3RhdHVzX2h0Y190b19hdGhgLiBIb3BlZnVsbHksIGRpZ2dpbmcgaW50byB0aG9zZSB3aWxsIGdpdmUgbWUgdGhlIGluc2lnaHRzIEkgbmVlZCB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGhfY21uX3Byb2Nlc3NfZmZ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYz00NDk9YXRoX2Ntbl9pc19mZnRfYnVmX2Z1bGwoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy00NjgtLyogcmV0dXJucyAxIGlmIHRoaXMgd2FzIGEgc3BlY3RyYWwgZnJhbWUsIGV2ZW4gaWYgbm90IGhhbmRsZWQuICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM6NDY5OmludCBhdGhfY21uX3Byb2Nlc3NfZmZ0KHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdiwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy00NzAtXHRcdCAgICBzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnMsIHU2NCB0c2YpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTY4My19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM6Njg0OkVYUE9SVF9TWU1CT0woYXRoX2Ntbl9wcm9jZXNzX2ZmdCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtNjg1LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaD0xNzc9aW50IGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZyhzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNzktXHRcdFx0ICAgICAgIGVudW0gc3BlY3RyYWxfbW9kZSBzcGVjdHJhbF9tb2RlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxODA6aW50IGF0aF9jbW5fcHJvY2Vzc19mZnQoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE4MS1cdFx0ICAgIHN0cnVjdCBhdGhfcnhfc3RhdHVzICpycywgdTY0IHRzZik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oPTE5Mj1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fdHJpZ2dlcihzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xOTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTk3OnN0YXRpYyBpbmxpbmUgaW50IGF0aF9jbW5fcHJvY2Vzc19mZnQoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE5OC1cdFx0XHRcdCAgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTk5OD1zdGF0aWMgYm9vbCBhdGg5a19yeF9wcmVwYXJlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTA3My1cdFx0LyogVE9ETzogTm90IHVzaW5nIERGUyBwcm9jZXNzaW5nIG5vdy4gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzoxMDc0Olx0XHRpZiAoYXRoX2Ntbl9wcm9jZXNzX2ZmdChcdTAwMjZwcml2LVx1MDAzZXNwZWNfcHJpdiwgaGRyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEwNzUtXHRcdFx0XHQgICAgXHUwMDI2cnhfc3RhdHMsIHJ4X3N0YXR1cy1cdTAwM2VtYWN0aW1lKSkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xMDg3LVx0XHRyeF9zdGF0cy5yc19waHllcnIgPSBBVEg5S19QSFlFUlJfUkFEQVI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MTA4ODpcdFx0aWYgKGF0aF9jbW5fcHJvY2Vzc19mZnQoXHUwMDI2cHJpdi1cdTAwM2VzcGVjX3ByaXYsIGhkciwgXHUwMDI2cnhfc3RhdHMsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTA4OS1cdFx0XHRcdFx0cnhfc3RhdHVzLVx1MDAzZW1hY3RpbWUpKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmM9ODA2PXN0YXRpYyBpbnQgYXRoOWtfcnhfc2tiX3ByZXByb2Nlc3Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYy04ODMtXHRcdH0gZWxzZSBpZiAoc2MtXHUwMDNlc3BlY19wcml2LnNwZWN0cmFsX21vZGUgIT0gU1BFQ1RSQUxfRElTQUJMRUQgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jOjg4NDpcdFx0XHQgICBhdGhfY21uX3Byb2Nlc3NfZmZ0KFx1MDAyNnNjLVx1MDAzZXNwZWNfcHJpdiwgaGRyLCByeF9zdGF0cyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmMtODg1LVx0XHRcdFx0XHQgICAgICAgcnhfc3RhdHVzLVx1MDAzZW1hY3RpbWUpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczODYKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSBwcm9tcHQsIGtlZXBpbmcgaW4gbWluZCBteSBmaWVsZCBleHBlcnRpc2U6CgoqKkV4YW1pbmluZyB0aGUgYHJ4X3N0YXR1c19odGNfdG9fYXRoYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBteSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gdGhpcyBgcnhfc3RhdHVzX2h0Y190b19hdGhgIGZ1bmN0aW9uLiBUaGUgZmlsZW5hbWUsIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmNgLCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgYSBjcml0aWNhbCBwaWVjZSBpbiB0aGUgQXRoZXJvcyAobm93IFF1YWxjb21tIEF0aGVyb3MpIHdpcmVsZXNzIGRyaXZlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGF0aDlrYCBmYW1pbHksIGFuZCBkZWFsaW5nIHdpdGggdGhlIEhhcmR3YXJlIFRyYW5zcG9ydCBDb250ZXh0IChIVEMpIGxheWVyIGZvciBoYW5kbGluZyByZWNlaXZlIGFuZCB0cmFuc21pdCBvcGVyYXRpb25zLiBUaGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYsIGByeF9zdGF0dXNfaHRjX3RvX2F0aGAsIHN1Z2dlc3RzIGl0cyByb2xlIGlzIHRyYW5zZm9ybWluZyBvciBpbnRlcnByZXRpbmcgcmVjZWl2ZSBzdGF0dXMgaW5mb3JtYXRpb24gZnJvbSB0aGUgSFRDIGxheWVyIGludG8gYSBmb3JtYXQgdXNhYmxlIGJ5IHRoZSBgYXRoOWtgIGRyaXZlciYjMzk7cyBjb3JlLgoKR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGVzZSBzeXN0ZW1zLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIHdoZXJlIHRoZSBsb3ctbGV2ZWwgSFRDLXNwZWNpZmljIHJlY2VpdmUgc3RhdHVzIHN0cnVjdHVyZXMgYXJlIHBhcnNlZCwgdHJhbnNsYXRlZCwgYW5kIHBvc3NpYmx5IG5vcm1hbGl6ZWQgaW50byB0aGUgbW9yZSBkcml2ZXItaW50ZXJuYWwgYGF0aDlrYCByZXByZXNlbnRhdGlvbnMuIFRoaXMgcHJvYmFibHkgaW52b2x2ZXMgZXh0cmFjdGluZyBkZXRhaWxzIGFib3V0IHRoZSByZWNlaXZlZCBwYWNrZXQsIGxpa2UgdGhlIHNpZ25hbCBzdHJlbmd0aCwgbm9pc2UgbGV2ZWwsIGRhdGEgcmF0ZSwgZnJhbWUgY29udHJvbCBmaWVsZHMsIHBvdGVudGlhbCBlcnJvcnMsIGFuZCBwZXJoYXBzIGV2ZW4gSFRDLXNwZWNpZmljIHRpbWVzdGFtcHMgb3Igb3RoZXIgbWV0YWRhdGEuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgc3BlY2lmaWMgZmllbGRzIGFyZSBtYXBwZWQsIGFuZCBob3cgZXJyb3IgY29uZGl0aW9ucyBhcmUgaGFuZGxlZC4gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIHZpdGFsIHRhc2tzIGxpa2UgUW9TLCByYXRlIGFkYXB0YXRpb24sIGFuZCBwYWNrZXQgZmlsdGVyaW5nIGZvciB0aGUgd2lyZWxlc3MgaW50ZXJmYWNlLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgZXhhY3RseSBob3cgaXQgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NDA6XHR7XG4gOTQxOlx0XHRyeF9zdGF0cy1cdTAwM2VlbmNfZmxhZ3MgPSAwO1xuIDk0MjpcdFx0cnhfc3RhdHMtXHUwMDNlYncgPSBSQVRFX0lORk9fQldfMjA7XG4gOTQzOlx0XHRpZiAocnhzdGF0dXMtXHUwMDNlcnNfZmxhZ3MgXHUwMDI2IEFUSDlLX1JYXzIwNDApXG4gOTQ0Olx0XHRcdHJ4X3N0YXRzLVx1MDAzZWJ3ID0gUkFURV9JTkZPX0JXXzQwO1xuIDk0NTpcdFx0aWYgKHJ4c3RhdHVzLVx1MDAzZXJzX2ZsYWdzIFx1MDAyNiBBVEg5S19SWF9HSSlcbiA5NDY6XHRcdFx0cnhfc3RhdHMtXHUwMDNlZW5jX2ZsYWdzIHw9IFJYX0VOQ19GTEFHX1NIT1JUX0dJO1xuIDk0NzpcdH1cbiA5NDg6XHRcbiA5NDk6XHRzdGF0aWMgdm9pZCByeF9zdGF0dXNfaHRjX3RvX2F0aChzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnhfc3RhdHMsXG4gOTUwOlx0XHRcdFx0XHQgc3RydWN0IGF0aF9odGNfcnhfc3RhdHVzICpyeHN0YXR1cylcbiA5NTE6XHR7XG4gOTUyOlx0XHRyeF9zdGF0cy1cdTAwM2Vyc19kYXRhbGVuXHQ9IGJlMTZfdG9fY3B1KHJ4c3RhdHVzLVx1MDAzZXJzX2RhdGFsZW4pO1xuIDk1MzpcdFx0cnhfc3RhdHMtXHUwMDNlcnNfc3RhdHVzXHQ9IHJ4c3RhdHVzLVx1MDAzZXJzX3N0YXR1cztcbiA5NTQ6XHRcdHJ4X3N0YXRzLVx1MDAzZXJzX3BoeWVyclx0PSByeHN0YXR1cy1cdTAwM2Vyc19waHllcnI7XG4gOTU1Olx0XHRyeF9zdGF0cy1cdTAwM2Vyc19yc3NpXHQ9IHJ4c3RhdHVzLVx1MDAzZXJzX3Jzc2k7XG4gOTU2Olx0XHRyeF9zdGF0cy1cdTAwM2Vyc19rZXlpeFx0PSByeHN0YXR1cy1cdTAwM2Vyc19rZXlpeDtcbiA5NTc6XHRcdHJ4X3N0YXRzLVx1MDAzZXJzX3JhdGVcdD0gcnhzdGF0dXMtXHUwMDNlcnNfcmF0ZTtcbiA5NTg6XHRcdHJ4X3N0YXRzLVx1MDAzZXJzX2FudGVubmFcdD0gcnhzdGF0dXMtXHUwMDNlcnNfYW50ZW5uYTtcbiA5NTk6XHRcdHJ4X3N0YXRzLVx1MDAzZXJzX21vcmVcdD0gcnhzdGF0dXMtXHUwMDNlcnNfbW9yZTtcbiA5NjA6XHRcbiA5NjE6XHRcdG1lbWNweShyeF9zdGF0cy1cdTAwM2Vyc19yc3NpX2N0bCwgcnhzdGF0dXMtXHUwMDNlcnNfcnNzaV9jdGwsXG4gOTYyOlx0XHRcdHNpemVvZihyeF9zdGF0cy1cdTAwM2Vyc19yc3NpX2N0bCkpO1xuIDk2MzpcdFx0bWVtY3B5KHJ4X3N0YXRzLVx1MDAzZXJzX3Jzc2lfZXh0LCByeHN0YXR1cy1cdTAwM2Vyc19yc3NpX2V4dCxcbiA5NjQ6XHRcdFx0c2l6ZW9mKHJ4X3N0YXRzLVx1MDAzZXJzX3Jzc2lfZXh0KSk7XG4gOTY1Olx0XG4gOTY2Olx0XHRyeF9zdGF0cy1cdTAwM2Vyc19pc2FnZ3JcdD0gcnhzdGF0dXMtXHUwMDNlcnNfaXNhZ2dyO1xuIDk2NzpcdFx0cnhfc3RhdHMtXHUwMDNlcnNfbW9yZWFnZ3JcdD0gcnhzdGF0dXMtXHUwMDNlcnNfbW9yZWFnZ3I7XG4gOTY4Olx0XHRyeF9zdGF0cy1cdTAwM2Vyc19udW1fZGVsaW1zXHQ9IHJ4c3RhdHVzLVx1MDAzZXJzX251bV9kZWxpbXM7XG4gOTY5Olx0XHRjb252ZXJ0X2h0Y19mbGFnKHJ4X3N0YXRzLCByeHN0YXR1cyk7XG4gOTcwOlx0fVxuIDk3MTpcdFxuIDk3MjpcdC8qXG4gOTczOlx0ICogVGhlIGZpcm13YXJlIHJlcG9ydHMgYSBmcmFtZSB0aGF0IGZhaWxlZCBpdHMgQ1JDIGFzIGEgQ1JDIGVycm9yIGV2ZW4gd2hlblxuIDk3NDpcdCAqIHRoZSBQSFkgZXJyb3IgYml0IGlzIHNldCBhcyB3ZWxsLCBzbyB1bmRlciBpbnRlcmZlcmVuY2Ugc3BlY3RyYWwgc2FtcGxlc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTMzCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGF0IGNvZGUgc25pcHBldDoKCioqRGl2aW5nIGludG8gdGhlIEF0aGVyb3MgUlggU3RhdHVzIGFuZCBGRlQgUHJvY2Vzc2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIGluIG9uIHRoZSBgYXRoX3J4X3N0YXR1c2Agc3RydWN0IGFuZCBob3cgdGhlIGBhdGhfY21uX3Byb2Nlc3NfZmZ0YCBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCBpdC4gVGhpcyBpcyBpbnRlcmVzdGluZywgYW5kIEkgaW1tZWRpYXRlbHkgd2FudCB0byBqdW1wIGludG8gYGNvbW1vbi1zcGVjdHJhbC5jYCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgaG93IHRoZSBzdGF0dXMgaW5mb3JtYXRpb24gZnJvbSB0aGUgcmVjZWl2ZWQgc2lnbmFsIGdldHMgcGFyc2VkIGFuZCBmZWQgaW50byB0aGUgRkZUIHByb2Nlc3Npbmcgc3RlcHMuIEkmIzM5O20ga2VlbiB0byBzZWUgaG93IHRoZSBjb2RlIGhhbmRsZXMgZGlmZmVyZW50IG1vZHVsYXRpb24gc2NoZW1lcywgcG90ZW50aWFsIGVycm9ycywgYW5kIHBlcmhhcHMgZXZlbiBzb21lIG9mIHRoZSBzcGVjdHJhbCBhbmFseXNpcyB0ZWNobmlxdWVzIHVzZWQgaW4gdGhhdCBmdW5jdGlvbi4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoZSBgYXRoX3J4X3N0YXR1c2Agc3RydWN0IGNvbnRhaW5zIGEgd2VhbHRoIG9mIGxvdy1sZXZlbCBkZXRhaWxzIGFib3V0IHRoZSByZWNlaXZlZCBwYWNrZXQgYW5kIHRoYXQgdGhvc2UgZGV0YWlscyBhcmUgY3J1Y2lhbCBmb3IgZHJpdmluZyB0aGUgRkZUIGVmZmljaWVudGx5IGFuZCBhY2N1cmF0ZWx5LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgb24gaG93IHRoZSBoYXJkd2FyZSBvZmZsb2FkcyBhbnkgRkZUIGNvbXB1dGF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ2NTpcdFx0XHRyZXR1cm4gMDtcbiA0NjY6XHR9XG4gNDY3Olx0XG4gNDY4Olx0LyogcmV0dXJucyAxIGlmIHRoaXMgd2FzIGEgc3BlY3RyYWwgZnJhbWUsIGV2ZW4gaWYgbm90IGhhbmRsZWQuICovXG4gNDY5Olx0aW50IGF0aF9jbW5fcHJvY2Vzc19mZnQoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuIDQ3MDpcdFx0XHQgICAgc3RydWN0IGF0aF9yeF9zdGF0dXMgKnJzLCB1NjQgdHNmKVxuIDQ3MTpcdHtcbiA0NzI6XHRcdHU4IHNhbXBsZV9idWZbU1BFQ1RSQUxfU0FNUExFX01BWF9MRU5dID0gezB9O1xuIDQ3MzpcdFx0c3RydWN0IGF0aF9odyAqYWggPSBzcGVjX3ByaXYtXHUwMDNlYWg7XG4gNDc0Olx0XHRzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHNwZWNfcHJpdi1cdTAwM2VhaCk7XG4gNDc1Olx0XHRzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGNvbW1vbi1cdTAwM2Vwcml2O1xuIDQ3NjpcdFx0dTggbnVtX2JpbnMsICp2ZGF0YSA9ICh1OCAqKWhkcjtcbiA0Nzc6XHRcdHN0cnVjdCBhdGhfcmFkYXJfaW5mbyAqcmFkYXJfaW5mbztcbiA0Nzg6XHRcdGludCBsZW4gPSBycy1cdTAwM2Vyc19kYXRhbGVuO1xuIDQ3OTpcdFx0aW50IGk7XG4gNDgwOlx0XHRpbnQgZ290X3NsZW4gPSAwO1xuIDQ4MTpcdFx0dTggICpzYW1wbGVfc3RhcnQ7XG4gNDgyOlx0XHRpbnQgc2FtcGxlX2J5dGVzID0gMDtcbiA0ODM6XHRcdGludCByZXQgPSAwO1xuIDQ4NDpcdFx0dTE2IGZmdF9sZW4sIHNhbXBsZV9sZW4sIGZyZXEgPSBhaC1cdTAwM2VjdXJjaGFuLVx1MDAzZWNoYW4tXHUwMDNlY2VudGVyX2ZyZXE7XG4gNDg1Olx0XHRlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5fdHlwZTtcbiA0ODY6XHRcdGF0aF9jbW5fZmZ0X2lkeF92YWxpZGF0b3IgKmZmdF9pZHhfdmFsaWRhdG9yO1xuIDQ4NzpcdFx0YXRoX2Ntbl9mZnRfc2FtcGxlX2hhbmRsZXIgKmZmdF9oYW5kbGVyO1xuIDQ4ODpcdFxuIDQ4OTpcdFx0LyogQVI5MjgwIGFuZCBiZWZvcmUgcmVwb3J0IHZpYSBBVEg5S19QSFlFUlJfUkFEQVIsIEFSOTN4eCBhbmQgbmV3ZXJcbiA0OTA6XHRcdCAqIHZpYSBBVEg5S19QSFlFUlJfU1BFQ1RSQUwuIEhhdmVuJiMzOTt0IHNlZW4gQVRIOUtfUEhZRVJSX0ZBTFNFX1JBREFSX0VYVFxuIDQ5MTpcdFx0ICogeWV0LCBidXQgdGhpcyBpcyBzdXBwb3NlZCB0byBiZSBwb3NzaWJsZSBhcyB3ZWxsLlxuIDQ5MjpcdFx0ICovXG4gNDkzOlx0XHRpZiAocnMtXHUwMDNlcnNfcGh5ZXJyICE9IEFUSDlLX1BIWUVSUl9SQURBUiBcdTAwMjZcdTAwMjZcbiA0OTQ6XHRcdCAgICBycy1cdTAwM2Vyc19waHllcnIgIT0gQVRIOUtfUEhZRVJSX0ZBTFNFX1JBREFSX0VYVCBcdTAwMjZcdTAwMjZcbiA0OTU6XHRcdCAgICBycy1cdTAwM2Vyc19waHllcnIgIT0gQVRIOUtfUEhZRVJSX1NQRUNUUkFMKVxuIDQ5NjpcdFx0XHRyZXR1cm4gMDtcbiA0OTc6XHRcbiA0OTg6XHRcdC8qIGNoZWNrIGlmIHNwZWN0cmFsIHNjYW4gYml0IGlzIHNldC4gVGhpcyBkb2VzIG5vdCBoYXZlIHRvIGJlIGNoZWNrZWRcbiA0OTk6XHRcdCAqIGlmIHJlY2VpdmVkIHRocm91Z2ggYSBTUEVDVFJBTCBwaHkgZXJyb3IsIGJ1dCBzaG91bGRuJiMzOTt0IGh1cnQuXG4gNTAwOlx0XHQgKi9cbiA1MDE6XHRcdHJhZGFyX2luZm8gPSAoKHN0cnVjdCBhdGhfcmFkYXJfaW5mbyAqKVx1MDAyNnZkYXRhW2xlbl0pIC0gMTtcbiA1MDI6XHRcdGlmICghKHJhZGFyX2luZm8tXHUwMDNlcHVsc2VfYndfaW5mbyBcdTAwMjYgU1BFQ1RSQUxfU0NBTl9CSVRNQVNLKSlcbiA1MDM6XHRcdFx0cmV0dXJuIDA7XG4gNTA0Olx0XG4gNTA1Olx0XHRpZiAoIXNwZWNfcHJpdi1cdTAwM2VyZnNfY2hhbl9zcGVjX3NjYW4pXG4gNTA2Olx0XHRcdHJldHVybiAxO1xuIDUwNzpcdFxuIDUwODpcdFx0LyogT3V0cHV0IGJ1ZmZlcnMgYXJlIGZ1bGwsIG5vIG5lZWQgdG8gcHJvY2VzcyBhbnl0aGluZ1xuIDUwOTpcdFx0ICogc2luY2UgdGhlcmUgaXMgbm8gc3BhY2UgdG8gcHV0IHRoZSByZXN1bHQgYW55d2F5XG4gNTEwOlx0XHQgKi9cbiA1MTE6XHRcdHJldCA9IGF0aF9jbW5faXNfZmZ0X2J1Zl9mdWxsKHNwZWNfcHJpdik7XG4gNTEyOlx0XHRpZiAocmV0ID09IDEpIHtcbiA1MTM6XHRcdFx0YXRoX2RiZyhjb21tb24sIFNQRUNUUkFMX1NDQU4sIFwmIzM0O0ZGVCByZXBvcnQgaWdub3JlZCwgbm8gc3BhY2UgXCYjMzQ7XG4gNTE0Olx0XHRcdFx0XHRcdFx0XCYjMzQ7bGVmdCBvbiBvdXRwdXQgYnVmZmVyc1xcblwmIzM0Oyk7XG4gNTE1Olx0XHRcdHJldHVybiAxO1xuIDUxNjpcdFx0fVxuIDUxNzpcdFxuIDUxODpcdFx0Y2hhbl90eXBlID0gY2ZnODAyMTFfZ2V0X2NoYW5kZWZfdHlwZShcdTAwMjZjb21tb24tXHUwMDNlaHctXHUwMDNlY29uZi5jaGFuZGVmKTtcbiA1MTk6XHRcdGlmICgoY2hhbl90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMpIHx8XG4gNTIwOlx0XHQgICAgKGNoYW5fdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0MFBMVVMpKSB7XG4gNTIxOlx0XHRcdGZmdF9sZW4gPSBTUEVDVFJBTF9IVDIwXzQwX1RPVEFMX0RBVEFfTEVOO1xuIDUyMjpcdFx0XHRzYW1wbGVfbGVuID0gU1BFQ1RSQUxfSFQyMF80MF9TQU1QTEVfTEVOO1xuIDUyMzpcdFx0XHRudW1fYmlucyA9IFNQRUNUUkFMX0hUMjBfNDBfTlVNX0JJTlM7XG4gNTI0Olx0XHRcdGZmdF9pZHhfdmFsaWRhdG9yID0gXHUwMDI2YXRoX2Ntbl9tYXhfaWR4X3ZlcmlmeV9odDIwXzQwX2ZmdDtcbiA1MjU6XHRcdFx0ZmZ0X2hhbmRsZXIgPSBcdTAwMjZhdGhfY21uX3Byb2Nlc3NfaHQyMF80MF9mZnQ7XG4gNTI2Olx0XHR9IGVsc2Uge1xuIDUyNzpcdFx0XHRmZnRfbGVuID0gU1BFQ1RSQUxfSFQyMF9UT1RBTF9EQVRBX0xFTjtcbiA1Mjg6XHRcdFx0c2FtcGxlX2xlbiA9IFNQRUNUUkFMX0hUMjBfU0FNUExFX0xFTjtcbiA1Mjk6XHRcdFx0bnVtX2JpbnMgPSBTUEVDVFJBTF9IVDIwX05VTV9CSU5TO1xuIDUzMDpcdFx0XHRmZnRfaWR4X3ZhbGlkYXRvciA9IGF0aF9jbW5fbWF4X2lkeF92ZXJpZnlfaHQyMF9mZnQ7XG4gNTMxOlx0XHRcdGZmdF9oYW5kbGVyID0gXHUwMDI2YXRoX2Ntbl9wcm9jZXNzX2h0MjBfZmZ0O1xuIDUzMjpcdFx0fVxuIDUzMzpcdFxuIDUzNDpcdFx0YXRoX2RiZyhjb21tb24sIFNQRUNUUkFMX1NDQU4sIFwmIzM0O0dvdCByYWRhciBkdW1wIGJ3X2luZm86IDB4JVgsXCYjMzQ7XG4gNTM1Olx0XHRcdFx0XHRcdFwmIzM0O2xlbjogJWkgZmZ0X2xlbjogJWlcXG5cJiMzNDssXG4gNTM2Olx0XHRcdFx0XHRcdHJhZGFyX2luZm8tXHUwMDNlcHVsc2VfYndfaW5mbyxcbiA1Mzc6XHRcdFx0XHRcdFx0bGVuLFxuIDUzODpcdFx0XHRcdFx0XHRmZnRfbGVuKTtcbiA1Mzk6XHRcdHNhbXBsZV9zdGFydCA9IHZkYXRhO1xuIDU0MDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuIC0gMjsgaSYjNDM7JiM0MzspIHtcbiA1NDE6XHRcdFx0c2FtcGxlX2J5dGVzJiM0MzsmIzQzOztcbiA1NDI6XHRcbiA1NDM6XHRcdFx0LyogT25seSBhIHNpbmdsZSBzYW1wbGUgcmVjZWl2ZWQsIG5vIG5lZWQgdG8gbG9va1xuIDU0NDpcdFx0XHQgKiBmb3IgdGhlIHNhbXBsZSYjMzk7cyBlbmQsIGRvIHRoZSBjb3JyZWN0aW9uIGJhc2VkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzc0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgYXRoOWtfcnhfcHJlcGFyZWAgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYGF0aDlrX3J4X3ByZXBhcmVgIGZ1bmN0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBkZWNsYXJhdGlvbiBvZiBgcnhfc3RhdHNgOiBgc3RydWN0IGF0aF9yeF9zdGF0dXMgcnhfc3RhdHM7YC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaW5pdGlhbGl6YXRpb24uIElzIHRoaXMgc3RydWN0IGJlaW5nIGZ1bGx5IGluaXRpYWxpemVkPyBJdCYjMzk7cyBhIGNyaXRpY2FsIHN0cnVjdHVyZSwgYW5kIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNhbiBsZWFkIHRvIGFsbCBzb3J0cyBvZiBuYXN0eSBidWdzLCBlc3BlY2lhbGx5IGluIGEgZHJpdmVyLgoKTmV4dCwgSSBzZWUgYHJ4X3N0YXR1c19odGNfdG9fYXRoKCZhbXA7cnhfc3RhdHMsIHJ4c3RhdHVzKTtgLiBUaGlzIGZ1bmN0aW9uIGFwcGVhcnMgdG8gcG9wdWxhdGUgYHJ4X3N0YXRzYCBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgYHJ4c3RhdHVzYC4gIFRoYXQmIzM5O3MgZ29vZCwgYnV0IGl0IGRvZXNuJiMzOTt0IGd1YXJhbnRlZSBpbml0aWFsaXphdGlvbi4gSSBuZWVkIHRvIHZlcmlmeSB3aGF0IGByeHN0YXR1c19odGNfdG9fYXRoKClgIGRvZXMuICBNb3JlIGltcG9ydGFudGx5LCBJIG5lZWQgdG8ga25vdyB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYGF0aF9yeF9zdGF0dXNgIHN0cnVjdC4gSSYjMzk7bGwgaGF2ZSB0byBjaGVjayB0aGUgaGVhZGVyIGZpbGUgdG8gdW5kZXJzdGFuZCBhbGwgaXRzIGZpZWxkcyBhbmQgc2VlIHdoaWNoLCBpZiBhbnksIG1pZ2h0IGJlIGxlZnQgdW5pbml0aWFsaXplZCBieSB0aGlzIGZ1bmN0aW9uLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBpZiBpdCBpbmNsdWRlcyBwYWRkaW5nIG9yIHJlc2VydmVkIG1lbWJlcnMgdGhhdCBjb3VsZCBiZSBwcm9ibGVtYXRpYyBpZiBub3QgZXhwbGljaXRseSB6ZXJvZWQuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGF0aF9yeF9zdGF0dXMgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuaD05OT1zdHJ1Y3QgYXRoX3R4X3N0YXR1cyB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oLTEyNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuaDoxMjg6c3RydWN0IGF0aF9yeF9zdGF0dXMge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oLTEyOS1cdHUzMiByc190c3RhbXA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODY1CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCBpdDoKCioqRGl2aW5nIGludG8gYXRoOWsmIzM5O3MgbWFjLmgqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBzdGFydCBieSBjcmFja2luZyBvcGVuIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmhgIGFuZCB6ZXJvaW5nIGluIG9uIHJvdWdobHkgbGluZSAxMjguIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIE1BQy1sYXllciBkZWZpbml0aW9ucyBpbiB0aGlzIGFyZWEuIFByb2JhYmx5IHJlbGF0ZWQgdG8gZGF0YSBzdHJ1Y3R1cmVzIG9yIGZ1bmN0aW9uIHByb3RvdHlwZXMgdGhhdCBhcmUgZnVuZGFtZW50YWwgdG8gdGhlIEF0aGVyb3MgOWsgd2lyZWxlc3MgZHJpdmVyJiMzOTtzIG9wZXJhdGlvbi4gSSYjMzk7bSB0aGlua2luZyB3ZSYjMzk7bGwgc2VlIHNvbWUga2V5IHN0cnVjdHVyZXMgdGhhdCBoYW5kbGUgZnJhbWUgcHJvY2Vzc2luZywgcGVyaGFwcyByZWxhdGVkIHRvIHJhdGUgY29udHJvbCwgUW9TLCBvciBwb3RlbnRpYWxseSBldmVuIHNvbWUgaW50ZXJydXB0LXJlbGF0ZWQgZGF0YS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBhdGg5ayYjMzk7cyBhcmNoaXRlY3R1cmUsIHNvIHRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHJlYWNxdWFpbnQgbXlzZWxmIHdpdGggdGhlIGRldGFpbHMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTI1Olx0XHR1MzIgZHVyYXRpb247XG4gMTI2Olx0fTtcbiAxMjc6XHRcbiAxMjg6XHRzdHJ1Y3QgYXRoX3J4X3N0YXR1cyB7XG4gMTI5Olx0XHR1MzIgcnNfdHN0YW1wO1xuIDEzMDpcdFx0dTE2IHJzX2RhdGFsZW47XG4gMTMxOlx0XHR1OCByc19zdGF0dXM7XG4gMTMyOlx0XHR1OCByc19waHllcnI7XG4gMTMzOlx0XHRpbnQ4X3QgcnNfcnNzaTtcbiAxMzQ6XHRcdHU4IHJzX2tleWl4O1xuIDEzNTpcdFx0dTggcnNfcmF0ZTtcbiAxMzY6XHRcdHU4IHJzX2FudGVubmE7XG4gMTM3Olx0XHR1OCByc19tb3JlO1xuIDEzODpcdFx0aW50OF90IHJzX3Jzc2lfY3RsWzNdO1xuIDEzOTpcdFx0aW50OF90IHJzX3Jzc2lfZXh0WzNdO1xuIDE0MDpcdFx0dTggcnNfaXNhZ2dyO1xuIDE0MTpcdFx0dTggcnNfZmlyc3RhZ2dyO1xuIDE0MjpcdFx0dTggcnNfbW9yZWFnZ3I7XG4gMTQzOlx0XHR1OCByc19udW1fZGVsaW1zO1xuIDE0NDpcdFx0dTggcnNfZmxhZ3M7XG4gMTQ1Olx0XHRib29sIGlzX215YmVhY29uO1xuIDE0NjpcdFx0dTMyIGV2bTA7XG4gMTQ3Olx0XHR1MzIgZXZtMTtcbiAxNDg6XHRcdHUzMiBldm0yO1xuIDE0OTpcdFx0dTMyIGV2bTM7XG4gMTUwOlx0XHR1MzIgZXZtNDtcbiAxNTE6XHRcdHUxNiBlbmNfZmxhZ3M7XG4gMTUyOlx0XHRlbnVtIHJhdGVfaW5mb19idyBidztcbiAxNTM6XHR9O1xuIDE1NDpcdFxuIDE1NTpcdHN0cnVjdCBhdGhfaHRjX3J4X3N0YXR1cyB7XG4gMTU2Olx0XHRfX2JlNjQgcnNfdHN0YW1wO1xuIDE1NzpcdFx0X19iZTE2IHJzX2RhdGFsZW47XG4gMTU4Olx0XHR1OCByc19zdGF0dXM7XG4gMTU5Olx0XHR1OCByc19waHllcnI7XG4gMTYwOlx0XHRpbnQ4X3QgcnNfcnNzaTtcbiAxNjE6XHRcdGludDhfdCByc19yc3NpX2N0bFszXTtcbiAxNjI6XHRcdGludDhfdCByc19yc3NpX2V4dFszXTtcbiAxNjM6XHRcdHU4IHJzX2tleWl4O1xuIDE2NDpcdFx0dTggcnNfcmF0ZTtcbiAxNjU6XHRcdHU4IHJzX2FudGVubmE7XG4gMTY2Olx0XHR1OCByc19tb3JlO1xuIDE2NzpcdFx0dTggcnNfaXNhZ2dyO1xuIDE2ODpcdFx0dTggcnNfbW9yZWFnZ3I7XG4gMTY5Olx0XHR1OCByc19udW1fZGVsaW1zO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc3OAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDI5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERhdGEgRmxvdyBpbiBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBhdGhfY21uX3Byb2Nlc3NfZmZ0YCBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cuIFJpZ2h0LCB0aGUgY29kZSBpcyB1c2luZyBmaWVsZHMgZnJvbSB0aGUgYHJzYCBzdHJ1Y3QuIEkgY2FuIHNlZSB0aGF0IG9ubHkgYHJzLSZndDtyc19kYXRhbGVuYCBhbmQgYHJzLSZndDtyc19waHllcnJgIGFyZSBkaXJlY3RseSB1c2VkIHdpdGhpbiB0aGUgZnVuY3Rpb24uIGByc19kYXRhbGVuYCBpcyBjbGVhcmx5IGluaXRpYWxpemVkIGJ5IGByeF9zdGF0dXNfaHRjX3RvX2F0aGAsIHRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBgcnNfcGh5ZXJyYCBpcyBzZXQgcmlnaHQgYmVmb3JlIHRoZSBjYWxsLCBlaXRoZXIgd2l0aCBgQVRIOUtfUEhZRVJSX1JBREFSYCBvciBwb3RlbnRpYWxseSB0aHJvdWdoIGByeF9zdGF0dXNfaHRjX3RvX2F0aGAuCgpOb3csIHRoZSBjcnVjaWFsIGJpdDogdGhlIHJldHVybiB2YWx1ZSBvZiBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAuIElmIGl0IHJldHVybnMgdHJ1ZSwgd2UganVtcCB0byBgcnhfbmV4dGAuIEhtLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nIGJlY2F1c2UgYHJ4X25leHRgIHVsdGltYXRlbHkgcmV0dXJucyBgZmFsc2VgLCB3aGljaCBpbmRpY2F0ZXMgdGhlIHBhY2tldCBpcyBkcm9wcGVkLCBzaW5jZSBpdCB3YXMgdHJlYXRlZCBhcyBzcGVjdHJhbCBkYXRhLiBUaGlzIG1ha2VzIHNlbnNlIGZyb20gYSBwZXJmb3JtYW5jZSBwZXJzcGVjdGl2ZSBhbmQgYWxzbyBoZWxwcyB3aXRoIHNpZ25hbCBwcm9jZXNzaW5nLgoKT24gdGhlIG90aGVyIGhhbmQsIGEgcmV0dXJuIHZhbHVlIG9mIGZhbHNlIG1lYW5zIHRoZSBjb2RlIGNvbnRpbnVlcyB0byBgYXRoOWtfY21uX3J4X2FjY2VwdGAuIE9rYXksIGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZyBhZ2Fpbi4gYHJ4X3N0YXRzLnJzX3BoeWVycmAgd2FzIG1vZGlmaWVkIHRvIGBBVEg5S19QSFlFUlJfUkFEQVJgLiBCdXQsIGBhdGg5a19jbW5fcnhfYWNjZXB0YCBpcyBjbGVhcmx5IHRoZSBjcml0aWNhbCBwb2ludC4gSSBzaG91bGQgcHJvYmFibHkgZGl2ZSBpbnRvIGl0LCB0byBmaWd1cmUgb3V0IGhvdyBpdCBoYW5kbGVzIHRoZSBkYXRhLiBUaGlzIHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgY29tcGxldGUgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDlrX2Ntbl9yeF9hY2NlcHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5jPTI5PU1PRFVMRV9MSUNFTlNFKFwmIzM0O0R1YWwgQlNEL0dQTFwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5jLTMxLS8qIEFzc3VtZXMgeW91JiMzOTt2ZSBhbHJlYWR5IGRvbmUgdGhlIGVuZGlhbiB0byBDUFUgY29udmVyc2lvbiAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5jOjMyOmJvb2wgYXRoOWtfY21uX3J4X2FjY2VwdChzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5jLTMzLVx0XHRcdCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uYy0xMTYtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5jOjExNzpFWFBPUlRfU1lNQk9MKGF0aDlrX2Ntbl9yeF9hY2NlcHQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5jLTExOC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmg9NTI9c3RydWN0IGF0aF9iZWFjb25fY29uZmlnIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmgtNjMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmg6NjQ6Ym9vbCBhdGg5a19jbW5fcnhfYWNjZXB0KHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmgtNjUtXHRcdFx0IHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTk5OD1zdGF0aWMgYm9vbCBhdGg5a19yeF9wcmVwYXJlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTA5Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzoxMDkzOlx0aWYgKCFhdGg5a19jbW5fcnhfYWNjZXB0KGNvbW1vbiwgaGRyLCByeF9zdGF0dXMsIFx1MDAyNnJ4X3N0YXRzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEwOTQtXHRcdFx0XHUwMDI2ZGVjcnlwdF9lcnJvciwgcHJpdi1cdTAwM2VyeGZpbHRlcikpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYz04MDY9c3RhdGljIGludCBhdGg5a19yeF9za2JfcHJlcHJvY2VzcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jLTg5NS1cdHNwaW5fbG9ja19iaChcdTAwMjZzYy1cdTAwM2VjaGFuX2xvY2spO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYzo4OTY6XHRpZiAoIWF0aDlrX2Ntbl9yeF9hY2NlcHQoY29tbW9uLCBoZHIsIHJ4X3N0YXR1cywgcnhfc3RhdHMsIGRlY3J5cHRfZXJyb3IsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jLTg5Ny1cdFx0XHRcdCBzYy1cdTAwM2VjdXJfY2hhbi1cdTAwM2VyeGZpbHRlcikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMzgKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQga2VybmVsIGNvZGU6CgoqKkRpdmluZyBpbnRvIGBhdGg5a19jbW5fcnhfYWNjZXB0YCoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyByZWNlaXZlciBhY2NlcHRhbmNlIGZ1bmN0aW9uLCBgYXRoOWtfY21uX3J4X2FjY2VwdGAsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBhdGg5a2Agd2lyZWxlc3MgZHJpdmVyLiBUaGF0IG1lYW5zIEkmIzM5O20gbG9va2luZyBhdCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5jYC4gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgZmlsdGVyaW5nIGluY29taW5nIDgwMi4xMSBmcmFtZXMuIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIG1ha2luZyB0aGUgaW5pdGlhbCBkZXRlcm1pbmF0aW9uIGlmIGEgcmVjZWl2ZWQgZnJhbWUgc2hvdWxkIGV2ZW4gYmUgcGFzc2VkIHVwIHRoZSBzdGFjayBmb3IgZnVydGhlciBwcm9jZXNzaW5nLCBvciBpZiBpdCBzaG91bGQgYmUgZHJvcHBlZCBlYXJseSBvbi4gVGhpcyBjYW4gYmUgYmFzZWQgb24gdGhpbmdzIGxpa2UgZnJhbWUgdHlwZSwgYWRkcmVzcyBmaWx0ZXJpbmcsIHNpZ25hbCBzdHJlbmd0aCwgb3IgYW55IG51bWJlciBvZiBmYWN0b3JzIHJlbGF0ZWQgdG8gdGhlIGhhcmR3YXJlJiMzOTtzIHJlY2VwdGlvbiBjaGFyYWN0ZXJpc3RpY3MgYW5kIGNvbmZpZ3VyZWQgc2V0dGluZ3MuCgpLbm93aW5nIHRoZSBgYXRoOWtgIGRyaXZlciwgSSYjMzk7ZCBwcmVkaWN0IHRoZXJlJiMzOTtzIGxpa2VseSBzb21lIGZhaXJseSBoYXJkd2FyZS1zcGVjaWZpYyBpbnRlcmFjdGlvbiBpbiB0aGlzIGZ1bmN0aW9uLiBUaGlzIG1pZ2h0IGludm9sdmUgZGlyZWN0IHJlZ2lzdGVyIHJlYWRzIHRvIGNoZWNrIHN0YXR1cyBiaXRzLCBsb29raW5nIGF0IGRlc2NyaXB0b3JzIHBhc3NlZCBieSB0aGUgaGFyZHdhcmUsIG9yIGFjY2Vzc2luZyBwZXItcGFja2V0IG1ldGFkYXRhIHBsYWNlZCB0aGVyZSBieSB0aGUgZmlybXdhcmUuIEkmIzM5O20ga2VlbiB0byBzZWUgdGhlIHNwZWNpZmljIGNoZWNrcy4gSXQgd291bGQgYmUgaGVscGZ1bCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSYjMzk7cyBETUEgYW5kIGludGVycnVwdCBoYW5kbGluZy4gSXMgaXQgY2FsbGVkIGZyb20gdGhlIGludGVycnVwdCBoYW5kbGVyPyBPciBkb2VzIGl0IG9wZXJhdGUgc29tZXdoZXJlIGluIGEgUlggcHJvY2Vzc2luZyBwYXRoIHNlcGFyYXRlIGZyb20gaW50ZXJydXB0cz8KCk15IGh1bmNoIGlzIHRoYXQgdGhlcmUgbWlnaHQgYmUgc29tZSBjb25kaXRpb25hbCBsb2dpYyBhcm91bmQgc2VjdXJpdHkgZmVhdHVyZXMsIHRvby4gUGVyaGFwcyB0aGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGNoZWNrcyBvbiB0aGUgZnJhbWUmIzM5O3Mgc2VjdXJpdHkgaGVhZGVycywgb3IgaW50ZXJhY3RzIHdpdGgga2V5IG1hbmFnZW1lbnQgdGFibGVzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYW55IGVuY3J5cHRpb24gb3IgZGVjcnlwdGlvbiB0aGF0IG1pZ2h0IGJlIGludm9sdmVkLiBJJiMzOTtsbCBiZSBmb2N1c2VkIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGNyaXRlcmlhIHVzZWQgdG8gYWNjZXB0IG9yIHJlamVjdCBhIHBhY2tldCwgYW5kIHRoZSBvdmVyYWxsIGltcGFjdCBvbiBzeXN0ZW0gcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzMDpcdFxuICAzMTpcdC8qIEFzc3VtZXMgeW91JiMzOTt2ZSBhbHJlYWR5IGRvbmUgdGhlIGVuZGlhbiB0byBDUFUgY29udmVyc2lvbiAqL1xuICAzMjpcdGJvb2wgYXRoOWtfY21uX3J4X2FjY2VwdChzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLFxuICAzMzpcdFx0XHRcdCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuICAzNDpcdFx0XHRcdCBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhzLFxuICAzNTpcdFx0XHRcdCBzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnhfc3RhdHMsXG4gIDM2Olx0XHRcdFx0IGJvb2wgKmRlY3J5cHRfZXJyb3IsXG4gIDM3Olx0XHRcdFx0IHVuc2lnbmVkIGludCByeGZpbHRlcilcbiAgMzg6XHR7XG4gIDM5Olx0XHRzdHJ1Y3QgYXRoX2h3ICphaCA9IGNvbW1vbi1cdTAwM2VhaDtcbiAgNDA6XHRcdGJvb2wgaXNfbWMsIGlzX3ZhbGlkX3RraXAsIHN0cmlwX21pYywgbWljX2Vycm9yO1xuICA0MTpcdFx0X19sZTE2IGZjO1xuICA0MjpcdFxuICA0MzpcdFx0ZmMgPSBoZHItXHUwMDNlZnJhbWVfY29udHJvbDtcbiAgNDQ6XHRcbiAgNDU6XHRcdGlzX21jID0gISFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItXHUwMDNlYWRkcjEpO1xuICA0NjpcdFx0aXNfdmFsaWRfdGtpcCA9IHJ4X3N0YXRzLVx1MDAzZXJzX2tleWl4ICE9IEFUSDlLX1JYS0VZSVhfSU5WQUxJRCBcdTAwMjZcdTAwMjZcbiAgNDc6XHRcdFx0dGVzdF9iaXQocnhfc3RhdHMtXHUwMDNlcnNfa2V5aXgsIGNvbW1vbi1cdTAwM2V0a2lwX2tleW1hcCk7XG4gIDQ4Olx0XHRzdHJpcF9taWMgPSBpc192YWxpZF90a2lwIFx1MDAyNlx1MDAyNiBpZWVlODAyMTFfaXNfZGF0YShmYykgXHUwMDI2XHUwMDI2XG4gIDQ5Olx0XHRcdGllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGZjKSBcdTAwMjZcdTAwMjZcbiAgNTA6XHRcdFx0IShyeF9zdGF0cy1cdTAwM2Vyc19zdGF0dXMgXHUwMDI2XG4gIDUxOlx0XHRcdChBVEg5S19SWEVSUl9ERUNSWVBUIHwgQVRIOUtfUlhFUlJfQ1JDIHwgQVRIOUtfUlhFUlJfTUlDIHxcbiAgNTI6XHRcdFx0IEFUSDlLX1JYRVJSX0tFWU1JU1MpKTtcbiAgNTM6XHRcbiAgNTQ6XHRcdC8qXG4gIDU1Olx0XHQgKiBLZXkgbWlzcyBldmVudHMgYXJlIG9ubHkgcmVsZXZhbnQgZm9yIHBhaXJ3aXNlIGtleXMgd2hlcmUgdGhlXG4gIDU2Olx0XHQgKiBkZXNjcmlwdG9yIGRvZXMgY29udGFpbiBhIHZhbGlkIGtleSBpbmRleC4gVGhpcyBoYXMgYmVlbiBvYnNlcnZlZFxuICA1NzpcdFx0ICogbW9zdGx5IHdpdGggQ0NNUCBlbmNyeXB0aW9uLlxuICA1ODpcdFx0ICovXG4gIDU5Olx0XHRpZiAocnhfc3RhdHMtXHUwMDNlcnNfa2V5aXggPT0gQVRIOUtfUlhLRVlJWF9JTlZBTElEIHx8XG4gIDYwOlx0XHQgICAgIXRlc3RfYml0KHJ4X3N0YXRzLVx1MDAzZXJzX2tleWl4LCBjb21tb24tXHUwMDNlY2NtcF9rZXltYXApKVxuICA2MTpcdFx0XHRyeF9zdGF0cy1cdTAwM2Vyc19zdGF0dXMgXHUwMDI2PSB+QVRIOUtfUlhFUlJfS0VZTUlTUztcbiAgNjI6XHRcbiAgNjM6XHRcdG1pY19lcnJvciA9IGlzX3ZhbGlkX3RraXAgXHUwMDI2XHUwMDI2ICFpZWVlODAyMTFfaXNfY3RsKGZjKSBcdTAwMjZcdTAwMjZcbiAgNjQ6XHRcdFx0IWllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGZjKSBcdTAwMjZcdTAwMjZcbiAgNjU6XHRcdFx0IShsZTE2X3RvX2NwdShoZHItXHUwMDNlc2VxX2N0cmwpIFx1MDAyNiBJRUVFODAyMTFfU0NUTF9GUkFHKSBcdTAwMjZcdTAwMjZcbiAgNjY6XHRcdFx0KHJ4X3N0YXRzLVx1MDAzZXJzX3N0YXR1cyBcdTAwMjYgQVRIOUtfUlhFUlJfTUlDKTtcbiAgNjc6XHRcbiAgNjg6XHRcdC8qXG4gIDY5Olx0XHQgKiBUaGUgcnhfc3RhdHMtXHUwMDNlcnNfc3RhdHVzIHdpbGwgbm90IGJlIHNldCB1bnRpbCB0aGUgZW5kIG9mIHRoZVxuICA3MDpcdFx0ICogY2hhaW5lZCBkZXNjcmlwdG9ycyBzbyBpdCBjYW4gYmUgaWdub3JlZCBpZiByc19tb3JlIGlzIHNldC4gVGhlXG4gIDcxOlx0XHQgKiByc19tb3JlIHdpbGwgYmUgZmFsc2UgYXQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgY2hhaW5lZFxuICA3MjpcdFx0ICogZGVzY3JpcHRvcnMuXG4gIDczOlx0XHQgKi9cbiAgNzQ6XHRcdGlmIChyeF9zdGF0cy1cdTAwM2Vyc19zdGF0dXMgIT0gMCkge1xuICA3NTpcdFx0XHR1OCBzdGF0dXNfbWFzaztcbiAgNzY6XHRcbiAgNzc6XHRcdFx0aWYgKHJ4X3N0YXRzLVx1MDAzZXJzX3N0YXR1cyBcdTAwMjYgQVRIOUtfUlhFUlJfQ1JDKSB7XG4gIDc4Olx0XHRcdFx0cnhzLVx1MDAzZWZsYWcgfD0gUlhfRkxBR19GQUlMRURfRkNTX0NSQztcbiAgNzk6XHRcdFx0XHRtaWNfZXJyb3IgPSBmYWxzZTtcbiAgODA6XHRcdFx0fVxuICA4MTpcdFxuICA4MjpcdFx0XHRpZiAoKHJ4X3N0YXRzLVx1MDAzZXJzX3N0YXR1cyBcdTAwMjYgQVRIOUtfUlhFUlJfREVDUllQVCkgfHxcbiAgODM6XHRcdFx0ICAgICghaXNfbWMgXHUwMDI2XHUwMDI2IChyeF9zdGF0cy1cdTAwM2Vyc19zdGF0dXMgXHUwMDI2IEFUSDlLX1JYRVJSX0tFWU1JU1MpKSkge1xuICA4NDpcdFx0XHRcdCpkZWNyeXB0X2Vycm9yID0gdHJ1ZTtcbiAgODU6XHRcdFx0XHRtaWNfZXJyb3IgPSBmYWxzZTtcbiAgODY6XHRcdFx0fVxuICA4NzpcdFxuICA4ODpcdFxuICA4OTpcdFx0XHQvKlxuICA5MDpcdFx0XHQgKiBSZWplY3QgZXJyb3IgZnJhbWVzIHdpdGggdGhlIGV4Y2VwdGlvbiBvZlxuICA5MTpcdFx0XHQgKiBkZWNyeXB0aW9uIGFuZCBNSUMgZmFpbHVyZXMuIEZvciBtb25pdG9yIG1vZGUsXG4gIDkyOlx0XHRcdCAqIHdlIGFsc28gaWdub3JlIHRoZSBDUkMgZXJyb3IuXG4gIDkzOlx0XHRcdCAqL1xuICA5NDpcdFx0XHRzdGF0dXNfbWFzayA9IEFUSDlLX1JYRVJSX0RFQ1JZUFQgfCBBVEg5S19SWEVSUl9NSUMgfFxuICA5NTpcdFx0XHRcdCAgICAgIEFUSDlLX1JYRVJSX0tFWU1JU1M7XG4gIDk2Olx0XG4gIDk3Olx0XHRcdGlmIChhaC1cdTAwM2Vpc19tb25pdG9yaW5nIFx1MDAyNlx1MDAyNiAocnhmaWx0ZXIgXHUwMDI2IEZJRl9GQ1NGQUlMKSlcbiAgOTg6XHRcdFx0XHRzdGF0dXNfbWFzayB8PSBBVEg5S19SWEVSUl9DUkM7XG4gIDk5Olx0XG4gMTAwOlx0XHRcdGlmIChyeF9zdGF0cy1cdTAwM2Vyc19zdGF0dXMgXHUwMDI2IH5zdGF0dXNfbWFzaylcbiAxMDE6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMTAyOlx0XHR9XG4gMTAzOlx0XG4gMTA0Olx0XHQvKlxuIDEwNTpcdFx0ICogRm9yIHVuaWNhc3QgZnJhbWVzIHRoZSBNSUMgZXJyb3IgYml0IGNhbiBoYXZlIGZhbHNlIHBvc2l0aXZlcyxcbiAxMDY6XHRcdCAqIHNvIGFsbCBNSUMgZXJyb3IgcmVwb3J0cyBuZWVkIHRvIGJlIHZhbGlkYXRlZCBpbiBzb2Z0d2FyZS5cbiAxMDc6XHRcdCAqIEZhbHNlIG5lZ2F0aXZlcyBhcmUgbm90IGNvbW1vbiwgc28gc2tpcCBzb2Z0d2FyZSB2ZXJpZmljYXRpb25cbiAxMDg6XHRcdCAqIGlmIHRoZSBoYXJkd2FyZSBjb25zaWRlcnMgdGhlIE1JQyB2YWxpZC5cbiAxMDk6XHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkwNwoJCQkJCQkJb3V0cHV0OiAxODgKCQkJCQkJCXRob3VnaHRzOiA5MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4vS0FTQU4gQW5hbHlzaXMgb2YgU3BlY3RyYWwgU2FtcGxlIExlbmd0aCBDaGVjayoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBhbmFseXNpcyBmb2N1c2VzIG9uIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIEtNU0FOLiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW4oKWAsIHdoaWNoIGVzc2VudGlhbGx5IHBlcmZvcm1zIGEgbGVuZ3RoIGNoZWNrIGJhc2VkIG9uIGNoYW5uZWwgdHlwZSB0byBkZXRlcm1pbmUgaWYgYSBzcGVjdHJhbCBzYW1wbGUgc2hvdWxkIGJlIHByb2Nlc3NlZC4gSSYjMzk7dmUgZXhhbWluZWQgdGhlIGNvZGUsIGZvY3VzaW5nIG9uIGhvdyBkYXRhIGZsb3dzIGFuZCBpcyBpbml0aWFsaXplZC4KCkZpcnN0LCB3aXRoaW4gYGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKClgLCBgY2hhbl90eXBlYCBhbmQgYGZmdF9sZW5gIGFyZSBzaW1wbGUgbG9jYWwgc2NhbGFycywgaW5pdGlhbGl6ZWQgdW5jb25kaXRpb25hbGx5LiBUaGVuLCBgYXRoOWtfcnhfcHJlcGFyZSgpYCBpcyB3aGVyZSB0aGUgbGVuZ3RoIGNoZWNrIGlzIHV0aWxpemVkLiBUaGUgbGVuZ3RoIGNoZWNrIHJlbGllcyBvbiBgcnhzdGF0dXMtJmd0O3JzX2RhdGFsZW5gIHdoaWNoIGlzIGFuIGluaXRpYWxpemF0aW9uIHZhbHVlLiBJZiB0aGUgbGVuZ3RoIGNoZWNrIGlzIG1ldCwgYW5kIGEgQ1JDIGVycm9yIGlzIGVuY291bnRlcmVkLCBgcnNfcGh5ZXJyYCBnZXRzIHNldCBhbmQgdGhlIGRhdGEgaXMgcGFzc2VkIHRvIGBhdGhfY21uX3Byb2Nlc3NfZmZ0KClgLCB3aGVyZSB0aGUgc2FtcGxlIGJ1ZmZlciBpcyB6ZXJvZWQgb3V0LiBObyBkYXRhIGlzIGxlYWtlZC4KCkNydWNpYWxseSwgSSYjMzk7bSBjaGVja2luZyBhZ2FpbnN0IHRoZSBLTVNBTiBjcml0ZXJpYSwgYXMgdGhpcyBpcyBhIHBvdGVudGlhbCBhcmVhIGZvciBsZWFrcywgYnV0IGFsc28gZm9yIHN0YW5kYXJkIEtBU0FOIGlzc3Vlcy4gSSYjMzk7dmUgY29uZmlybWVkOgoKMS4gIFRoZXJlIGFyZSBubyBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQuCjIuICBUaGUgY29kZSBkb2VzbiYjMzk7dCByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbmRpdGlvbmFsIGxvZ2ljLgozLiAgTm8gbmV3LCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgYWxsb2NhdGVkIGFuZCBwb3RlbnRpYWxseSBsZWZ0IHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuCjQuICBUaGVyZSBhcmUgbm8gYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLgoKVGhpcyBhbmFseXNpcyBzaG93cyB0aGF0IGFsbCBsb2NhbCB2YXJpYWJsZXMsIGBzdHJ1Y3RgIGZpZWxkcywgYW5kIGJ1ZmZlcnMgdG91Y2hlZCBieSB0aGlzIHBhdGNoIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgdGh1cywgc3RhbmRhcmQgc2FuaXRpemVycyAobGlrZSBLQVNBTikgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIGRldGVjdGluZyBhbnkgaXNzdWVzIHRoYXQgbWF5IGFyaXNlIGZyb20gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGV0Yy4gSSYjMzk7bSBjb21mb3J0YWJsZSBzdGF0aW5nIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IEtNU0FOIGNvbmNlcm5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHNwZWN0cmFsIHNjYW4gc2FtcGxlIGxlbmd0aCB2YWxpZGF0aW9uIHZpYSBhdGg5a19odGNfaXNfc3BlY3RyYWxfc2FtcGxlX2xlbigpIGFuZCBmb3J3YXJkcyBDUkMtZXJyb3JlZCBmcmFtZXMgd2l0aCBtYXRjaGluZyBsZW5ndGhzIHRvIGF0aF9jbW5fcHJvY2Vzc19mZnQoKSBpbiBhdGg5a19yeF9wcmVwYXJlKCkuIEFsbCB2YXJpYWJsZXMgYW5kIHN0cnVjdHVyZSBmaWVsZHMgdXNlZCAoZS5nLiwgcnNfZGF0YWxlbiwgcnhfc3RhdHMucnNfcGh5ZXJyLCBjaGFuX3R5cGUsIGZmdF9sZW4pIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMsIHBlcmZvcm0gYW55IGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG9yIGV4cG9zZSBwYWRkaW5nL3VuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgKHN1Y2ggYXMgYnVmZmVyIGJvdW5kcyBvciBwb2ludGVyIGhhbmRsaW5nKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3BlY3RyYWwgc2NhbiBzYW1wbGUgbGVuZ3RoIHZhbGlkYXRpb24gdmlhIGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKCkgYW5kIGZvcndhcmRzIENSQy1lcnJvcmVkIGZyYW1lcyB3aXRoIG1hdGNoaW5nIGxlbmd0aHMgdG8gYXRoX2Ntbl9wcm9jZXNzX2ZmdCgpIGluIGF0aDlrX3J4X3ByZXBhcmUoKS4gQWxsIHZhcmlhYmxlcyBhbmQgc3RydWN0dXJlIGZpZWxkcyB1c2VkIChlLmcuLCByc19kYXRhbGVuLCByeF9zdGF0cy5yc19waHllcnIsIGNoYW5fdHlwZSwgZmZ0X2xlbikgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgYnVmZmVycywgcGVyZm9ybSBhbnkgY29weV90b191c2VyIG9wZXJhdGlvbnMsIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgb3IgZXhwb3NlIHBhZGRpbmcvdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcyAoc3VjaCBhcyBidWZmZXIgYm91bmRzIG9yIHBvaW50ZXIgaGFuZGxpbmcpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MTo0NS45ODU0NTgwNDJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM3MDcwNjg3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRIOUtfSFRDXCIsXG4gICAgXCJBVEg5S19IVENfREVCVUdGU1wiLFxuICAgIFwiQVRIOUtfQ09NTU9OX1NQRUNUUkFMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXRoOWtfcnhfdGFza2xldFwiLFxuICAgIFwiYXRoOWtfaHRjX3J4ZXBcIixcbiAgICBcImF0aF9jbW5fcHJvY2Vzc19mZnRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3BlY3RyYWwgc2NhbiBzYW1wbGUgbGVuZ3RoIHZhbGlkYXRpb24gdmlhIGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKCkgYW5kIGZvcndhcmRzIENSQy1lcnJvcmVkIGZyYW1lcyB3aXRoIG1hdGNoaW5nIGxlbmd0aHMgdG8gYXRoX2Ntbl9wcm9jZXNzX2ZmdCgpIGluIGF0aDlrX3J4X3ByZXBhcmUoKS4gQWxsIHZhcmlhYmxlcyBhbmQgc3RydWN0dXJlIGZpZWxkcyB1c2VkIChlLmcuLCByc19kYXRhbGVuLCByeF9zdGF0cy5yc19waHllcnIsIGNoYW5fdHlwZSwgZmZ0X2xlbikgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgYnVmZmVycywgcGVyZm9ybSBhbnkgY29weV90b191c2VyIG9wZXJhdGlvbnMsIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgb3IgZXhwb3NlIHBhZGRpbmcvdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcyAoc3VjaCBhcyBidWZmZXIgYm91bmRzIG9yIHBvaW50ZXIgaGFuZGxpbmcpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3BlY3RyYWwgRkZUIHNhbXBsZSBkZXRlY3Rpb24gZm9yIENSQy1lcnJvcmVkIGZyYW1lcyBpbiB0aGUgUlggcHJvY2Vzc2luZyBwYXRoIChhdGg5a19yeF9wcmVwYXJlKSBvZiB0aGUgYXRoOWtfaHRjIFVTQiB3aXJlbGVzcyBkcml2ZXIsIGRpcmVjdGluZyBxdWFsaWZ5aW5nIGZyYW1lcyBpbnRvIGF0aF9jbW5fcHJvY2Vzc19mZnQuIEJlY2F1c2UgYXRoOWtfaHRjIGlzIGEgVVNCIFdpLUZpIGRyaXZlciByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uLCB0aGlzIHRvdWNoZXMgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQxOjQ1Ljk4NTQ2NTI3MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1NTAxNDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWM4NzEyYWQxNDFlYzc1MGZiMWY4NWRmYWQzZmM3YTFiZTY4OGYyNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCA1IDAyOjQxOjQ1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguY1xcbmluZGV4IGJlZDdlYTI0MjVhMGUuLmYyMWNmYzAzNDI2YjIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jXFxuQEAgLTk2OSw2ICs5NjksMzIgQEAgc3RhdGljIHZvaWQgcnhfc3RhdHVzX2h0Y190b19hdGgoc3RydWN0IGF0aF9yeF9zdGF0dXMgKnJ4X3N0YXRzLFxcbiBcXHRjb252ZXJ0X2h0Y19mbGFnKHJ4X3N0YXRzLCByeHN0YXR1cyk7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFRoZSBmaXJtd2FyZSByZXBvcnRzIGEgZnJhbWUgdGhhdCBmYWlsZWQgaXRzIENSQyBhcyBhIENSQyBlcnJvciBldmVuIHdoZW5cXG4rICogdGhlIFBIWSBlcnJvciBiaXQgaXMgc2V0IGFzIHdlbGwsIHNvIHVuZGVyIGludGVyZmVyZW5jZSBzcGVjdHJhbCBzYW1wbGVzXFxuKyAqIHJlYWNoIHRoZSBob3N0IGFzIENSQyBlcnJvcnMuIEEgc2FtcGxlIGlzIHJlY29nbmlzYWJsZSBieSBpdHMgc2l6ZTogdGhlXFxuKyAqIEZGVCByZXBvcnQgbGVuZ3RoIGZvciB0aGUgY2hhbm5lbCB3aWR0aCwgcGx1cyBvciBtaW51cyB0aGUgdHdvIGJ5dGVzIHRoZVxcbisgKiBNQUMgbWF5IGFkZCBvciBkcm9wLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW4oc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHUxNiBsZW4pXFxuK3tcXG4rXFx0ZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFuX3R5cGU7XFxuK1xcdHUxNiBmZnRfbGVuO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXNwZWNfcHJpdi5zcGVjdHJhbF9tb2RlID09IFNQRUNUUkFMX0RJU0FCTEVEKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRjaGFuX3R5cGUgPSBjZmc4MDIxMV9nZXRfY2hhbmRlZl90eXBlKFxcdTAwMjZwcml2LVxcdTAwM2Vody1cXHUwMDNlY29uZi5jaGFuZGVmKTtcXG4rXFx0aWYgKGNoYW5fdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0ME1JTlVTIHx8XFxuK1xcdCAgICBjaGFuX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTKVxcbitcXHRcXHRmZnRfbGVuID0gU1BFQ1RSQUxfSFQyMF80MF9UT1RBTF9EQVRBX0xFTjtcXG4rXFx0ZWxzZVxcbitcXHRcXHRmZnRfbGVuID0gU1BFQ1RSQUxfSFQyMF9UT1RBTF9EQVRBX0xFTjtcXG4rXFxuK1xcdHJldHVybiBsZW4gKyAxIFxcdTAwM2U9IGZmdF9sZW4gXFx1MDAyNlxcdTAwMjYgbGVuIFxcdTAwM2M9IGZmdF9sZW4gKyAyO1xcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCBhdGg5a19yeF9wcmVwYXJlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYXRoOWtfaHRjX3J4YnVmICpyeGJ1ZixcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKVxcbkBAIC0xMDUyLDYgKzEwNzgsMTggQEAgc3RhdGljIGJvb2wgYXRoOWtfcnhfcHJlcGFyZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuIFxcdFxcdGdvdG8gcnhfbmV4dDtcXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogTGV0IHRoZSBGRlQgcGFyc2VyIGRlY2lkZSB3aGV0aGVyIGEgQ1JDIGVycm9yIG9mIHNhbXBsZSBzaXplIGlzIGFcXG4rXFx0ICogc2FtcGxlOyBpdCB2YWxpZGF0ZXMgdGhlIGNvbnRlbnRzIGFuZCByZXR1cm5zIDAgZm9yIGFueXRoaW5nIGVsc2UuXFxuK1xcdCAqL1xcbitcXHRpZiAodW5saWtlbHkocnhfc3RhdHMucnNfc3RhdHVzIFxcdTAwMjYgQVRIOUtfUlhFUlJfQ1JDKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW4ocHJpdiwgcnNfZGF0YWxlbikpIHtcXG4rXFx0XFx0cnhfc3RhdHMucnNfcGh5ZXJyID0gQVRIOUtfUEhZRVJSX1JBREFSO1xcbitcXHRcXHRpZiAoYXRoX2Ntbl9wcm9jZXNzX2ZmdChcXHUwMDI2cHJpdi1cXHUwMDNlc3BlY19wcml2LCBoZHIsIFxcdTAwMjZyeF9zdGF0cyxcXG4rXFx0XFx0XFx0XFx0XFx0cnhfc3RhdHVzLVxcdTAwM2VtYWN0aW1lKSlcXG4rXFx0XFx0XFx0Z290byByeF9uZXh0O1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoIWF0aDlrX2Ntbl9yeF9hY2NlcHQoY29tbW9uLCBoZHIsIHJ4X3N0YXR1cywgXFx1MDAyNnJ4X3N0YXRzLFxcbiBcXHRcXHRcXHRcXHUwMDI2ZGVjcnlwdF9lcnJvciwgcHJpdi1cXHUwMDNlcnhmaWx0ZXIpKVxcbiBcXHRcXHRnb3RvIHJ4X25leHQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQxOjQ2LjQ1MTc0OTUxN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjMyNjY1ODc5MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRIOUtfSFRDXCIsXG4gICAgXCJBVEg5S19IVENfREVCVUdGU1wiLFxuICAgIFwiQVRIOUtfQ09NTU9OX1NQRUNUUkFMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXRoOWtfcnhfdGFza2xldFwiLFxuICAgIFwiYXRoOWtfaHRjX3J4ZXBcIixcbiAgICBcImF0aF9jbW5fcHJvY2Vzc19mZnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHNwZWN0cmFsIEZGVCBzYW1wbGUgZGV0ZWN0aW9uIGZvciBDUkMtZXJyb3JlZCBmcmFtZXMgaW4gdGhlIFJYIHByb2Nlc3NpbmcgcGF0aCAoYXRoOWtfcnhfcHJlcGFyZSkgb2YgdGhlIGF0aDlrX2h0YyBVU0Igd2lyZWxlc3MgZHJpdmVyLCBkaXJlY3RpbmcgcXVhbGlmeWluZyBmcmFtZXMgaW50byBhdGhfY21uX3Byb2Nlc3NfZmZ0LiBCZWNhdXNlIGF0aDlrX2h0YyBpcyBhIFVTQiBXaS1GaSBkcml2ZXIgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiwgdGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBrZXJuZWwgY29kZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDljODcxMmFkMTQxZWM3NTBmYjFmODVkZmFkM2ZjN2ExYmU2ODhmMjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDAyOjQxOjQ1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jXG5pbmRleCBiZWQ3ZWEyNDI1YTBlLi5mMjFjZmMwMzQyNmIyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmNcbkBAIC05NjksNiArOTY5LDMyIEBAIHN0YXRpYyB2b2lkIHJ4X3N0YXR1c19odGNfdG9fYXRoKHN0cnVjdCBhdGhfcnhfc3RhdHVzICpyeF9zdGF0cyxcbiBcdGNvbnZlcnRfaHRjX2ZsYWcocnhfc3RhdHMsIHJ4c3RhdHVzKTtcbiB9XG4gXG4rLypcbisgKiBUaGUgZmlybXdhcmUgcmVwb3J0cyBhIGZyYW1lIHRoYXQgZmFpbGVkIGl0cyBDUkMgYXMgYSBDUkMgZXJyb3IgZXZlbiB3aGVuXG4rICogdGhlIFBIWSBlcnJvciBiaXQgaXMgc2V0IGFzIHdlbGwsIHNvIHVuZGVyIGludGVyZmVyZW5jZSBzcGVjdHJhbCBzYW1wbGVzXG4rICogcmVhY2ggdGhlIGhvc3QgYXMgQ1JDIGVycm9ycy4gQSBzYW1wbGUgaXMgcmVjb2duaXNhYmxlIGJ5IGl0cyBzaXplOiB0aGVcbisgKiBGRlQgcmVwb3J0IGxlbmd0aCBmb3IgdGhlIGNoYW5uZWwgd2lkdGgsIHBsdXMgb3IgbWludXMgdGhlIHR3byBieXRlcyB0aGVcbisgKiBNQUMgbWF5IGFkZCBvciBkcm9wLlxuKyAqL1xuK3N0YXRpYyBib29sIGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbitcdFx0XHRcdFx0ICAgICB1MTYgbGVuKVxuK3tcbitcdGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbl90eXBlO1xuK1x0dTE2IGZmdF9sZW47XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VzcGVjX3ByaXYuc3BlY3RyYWxfbW9kZSA9PSBTUEVDVFJBTF9ESVNBQkxFRClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Y2hhbl90eXBlID0gY2ZnODAyMTFfZ2V0X2NoYW5kZWZfdHlwZShcdTAwMjZwcml2LVx1MDAzZWh3LVx1MDAzZWNvbmYuY2hhbmRlZik7XG4rXHRpZiAoY2hhbl90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMgfHxcbitcdCAgICBjaGFuX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTKVxuK1x0XHRmZnRfbGVuID0gU1BFQ1RSQUxfSFQyMF80MF9UT1RBTF9EQVRBX0xFTjtcbitcdGVsc2VcbitcdFx0ZmZ0X2xlbiA9IFNQRUNUUkFMX0hUMjBfVE9UQUxfREFUQV9MRU47XG4rXG4rXHRyZXR1cm4gbGVuICsgMSBcdTAwM2U9IGZmdF9sZW4gXHUwMDI2XHUwMDI2IGxlbiBcdTAwM2M9IGZmdF9sZW4gKyAyO1xuK31cbitcbiBzdGF0aWMgYm9vbCBhdGg5a19yeF9wcmVwYXJlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbiBcdFx0XHQgICAgIHN0cnVjdCBhdGg5a19odGNfcnhidWYgKnJ4YnVmLFxuIFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cylcbkBAIC0xMDUyLDYgKzEwNzgsMTggQEAgc3RhdGljIGJvb2wgYXRoOWtfcnhfcHJlcGFyZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG4gXHRcdGdvdG8gcnhfbmV4dDtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBMZXQgdGhlIEZGVCBwYXJzZXIgZGVjaWRlIHdoZXRoZXIgYSBDUkMgZXJyb3Igb2Ygc2FtcGxlIHNpemUgaXMgYVxuK1x0ICogc2FtcGxlOyBpdCB2YWxpZGF0ZXMgdGhlIGNvbnRlbnRzIGFuZCByZXR1cm5zIDAgZm9yIGFueXRoaW5nIGVsc2UuXG4rXHQgKi9cbitcdGlmICh1bmxpa2VseShyeF9zdGF0cy5yc19zdGF0dXMgXHUwMDI2IEFUSDlLX1JYRVJSX0NSQykgXHUwMDI2XHUwMDI2XG4rXHQgICAgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW4ocHJpdiwgcnNfZGF0YWxlbikpIHtcbitcdFx0cnhfc3RhdHMucnNfcGh5ZXJyID0gQVRIOUtfUEhZRVJSX1JBREFSO1xuK1x0XHRpZiAoYXRoX2Ntbl9wcm9jZXNzX2ZmdChcdTAwMjZwcml2LVx1MDAzZXNwZWNfcHJpdiwgaGRyLCBcdTAwMjZyeF9zdGF0cyxcbitcdFx0XHRcdFx0cnhfc3RhdHVzLVx1MDAzZW1hY3RpbWUpKVxuK1x0XHRcdGdvdG8gcnhfbmV4dDtcbitcdH1cbitcbiBcdGlmICghYXRoOWtfY21uX3J4X2FjY2VwdChjb21tb24sIGhkciwgcnhfc3RhdHVzLCBcdTAwMjZyeF9zdGF0cyxcbiBcdFx0XHRcdTAwMjZkZWNyeXB0X2Vycm9yLCBwcml2LVx1MDAzZXJ4ZmlsdGVyKSlcbiBcdFx0Z290byByeF9uZXh0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDE6NDYuNDUxNzUyNzg3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjI3Mjk4OTE5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiBUaGUgZmlyc3QgdGhpbmcgSSdsbCBkbyBpcyByZWFsbHkgZXhhbWluZSB0aGUgZGlmZiDigJMgdGhlIG1vZGlmaWVkIGZpbGVzIHRlbGwgYSBzdG9yeS4gSSBzZWUgaXQncyB0b3VjaGluZyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jYC4gUmlnaHQgYXdheSwgdGhhdCByYWlzZXMgYSBmZXcgcXVlc3Rpb25zLiBJcyB0aGlzIGEgVVNCIHdpcmVsZXNzIGRyaXZlciwgb3IgUENJLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBjaGVjayBzaG91bGQgY29uZmlybSBteSBzdXNwaWNpb25zLiBBaCwgaXQncyB0aGUgQXRoZXJvcyBVU0IgODAyLjExbiB3aXJlbGVzcyBkZXZpY2UgZHJpdmVyLCBIVEMgbWVhbmluZyBIb3N0IFRhcmdldCBDb21tdW5pY2F0aW9uIG92ZXIgVVNCLiBOb3csIGNhbiB0aGlzIHRoaW5nIGJlIGVtdWxhdGVkIHRocm91Z2ggc3l6a2FsbGVyJ3MgVVNCIGNhcGFiaWxpdGllcz8gVGhpbmtpbmcgYWJvdXQgc3l6a2FsbGVyJ3MgVVNCIGZ1enppbmcsIGl0IGhhcyBmdW5jdGlvbnMgbGlrZSBgc3l6X3VzYl9jb25uZWN0YCAtIHRoYXQncyBhIGdvb2Qgc2lnbi4gQW5kIGdpdmVuIHRoYXQgdGhpcyBpcyBhIFVTQiBkcml2ZXIgKGBBVEg5S19IVENgKSwgdGhlIGFuc3dlciBpcyB5ZXMsIHRoaXMgaXMgcHJvbWlzaW5nLiBCdXQgSSBzaG91bGQgY29uZmlybSB3aXRoIHRoZSBLY29uZmlnIGFuZCBvdGhlciBmaWxlcyB0byBjb25maXJtIHdoYXQgSSBzdXNwZWN0LiBJJ2xsIG5lZWQgdG8gcnVuIHNvbWV0aGluZyBsaWtlIGdyZXBwZXIgb3IgcXVpY2tseSByZWFkIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUgdW5kZXIgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9gLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTI2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDE6NTIuNzI0NzQ1NTY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNDc2NjUxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBVEg5S19IVENcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnPTEzPWNvbmZpZyBBVEg5S19CVENPRVhfU1VQUE9SVFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE0LVxcdGJvb2wgXFxcIkF0aGVyb3MgYmx1ZXRvb3RoIGNvZXhpc3RlbmNlIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTU6XFx0ZGVwZW5kcyBvbiAoQVRIOUsgfHwgQVRIOUtfSFRDKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE2LVxcdGRlZmF1bHQgeVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc9MTU2PWNvbmZpZyBBVEg5S19QQ0lfTk9fRUVQUk9NXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTcyOmNvbmZpZyBBVEg5S19IVENcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNzMtXFx0dHJpc3RhdGUgXFxcIkF0aGVyb3MgSFRDIGJhc2VkIHdpcmVsZXNzIGNhcmRzIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xODYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTg3OmNvbmZpZyBBVEg5S19IVENfREVCVUdGU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE4OC1cXHRib29sIFxcXCJBdGhlcm9zIGF0aDlrX2h0YyBkZWJ1Z2dpbmdcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTg5OlxcdGRlcGVuZHMgb24gQVRIOUtfSFRDIFxcdTAwMjZcXHUwMDI2IERFQlVHX0ZTXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTkwLVxcdHNlbGVjdCBBVEg5S19DT01NT05fREVCVUdcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnPTIwNj1jb25maWcgQVRIOUtfQ09NTU9OX1NQRUNUUkFMXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMjA3LVxcdGJvb2wgXFxcIkF0aGVyb3MgYXRoOWsvYXRoOWtfaHRjIHNwZWN0cmFsIHNjYW4gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoyMDg6XFx0ZGVwZW5kcyBvbiBBVEg5S19ERUJVR0ZTIHx8IEFUSDlLX0hUQ19ERUJVR0ZTXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMjA5LVxcdHNlbGVjdCBSRUxBWVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlPTY4PWF0aDlrX2h0Yy15ICs9XFx0aHRjX2hzdC5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZS03Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGU6Nzc6YXRoOWtfaHRjLSQoQ09ORklHX0FUSDlLX0hUQ19ERUJVR0ZTKSArPSBodGNfZHJ2X2RlYnVnLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGUtNzgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlOjc5Om9iai0kKENPTkZJR19BVEg5S19IVEMpICs9IGF0aDlrX2h0Yy5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlLTgwLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19lZXByb20uYz0zMzkwPXN0YXRpYyBib29sIGF0aDlrX2h3X2FyOTMwMF9maWxsX2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfZWVwcm9tLmMtMzQwMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2VlcHJvbS5jOjM0MDE6I2lmIGRlZmluZWQoQ09ORklHX0FUSDlLX0RFQlVHRlMpIHx8IGRlZmluZWQoQ09ORklHX0FUSDlLX0hUQ19ERUJVR0ZTKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfZWVwcm9tLmMtMzQwMi1zdGF0aWMgdTMyIGFyOTAwM19kdW1wX21vZGFsX2VlcHJvbShjaGFyICpidWYsIHUzMiBsZW4sIHUzMiBzaXplLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYz0yMzI9c3RhdGljIGlubGluZSB2b2lkIGF0aDlrX3NrYl9xdWV1ZV9jb21wbGV0ZShzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jLTIzOC1cXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUocXVldWUpKSAhPSBOVUxMKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYzoyMzk6I2lmZGVmIENPTkZJR19BVEg5S19IVENfREVCVUdGU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMtMjQwLVxcdFxcdGludCBsbiA9IHNrYi1cXHUwMDNlbGVuO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYz0zNzY9c3RhdGljIGludCBoaWZfdXNiX3NlbmRfdHgoc3RydWN0IGhpZl9kZXZpY2VfdXNiICpoaWZfZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYy0zOTktXFx0LyogTWdtdC9CZWFjb24gZnJhbWVzIGRvbid0IHVzZSB0aGUgVFggYnVmZmVyIHBvb2wgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jOjQwMDpcXHRpZiAoKHR4X2N0bC1cXHUwMDNldHlwZSA9PSBBVEg5S19IVENfTUdNVCkgfHxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jOjQwMTpcXHQgICAgKHR4X2N0bC1cXHUwMDNldHlwZSA9PSBBVEg5S19IVENfQkVBQ09OKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMtNDAyLVxcdFxcdHJldCA9IGhpZl91c2Jfc2VuZF9tZ210KGhpZl9kZXYsIHNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jLTQwNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jOjQwNzpcXHRpZiAoKHR4X2N0bC1cXHUwMDNldHlwZSA9PSBBVEg5S19IVENfTk9STUFMKSB8fFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmM6NDA4OlxcdCAgICAodHhfY3RsLVxcdTAwM2V0eXBlID09IEFUSDlLX0hUQ19BTVBEVSkpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jLTQwOS1cXHRcXHRfX3NrYl9xdWV1ZV90YWlsKFxcdTAwMjZoaWZfZGV2LVxcdTAwM2V0eC50eF9za2JfcXVldWUsIHNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jPTQ4Nz1zdGF0aWMgaW5saW5lIGJvb2wgY2hlY2tfaW5kZXgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaWR4KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYy00OTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYzo0OTM6XFx0aWYgKCh0eF9jdGwtXFx1MDAzZXR5cGUgPT0gQVRIOUtfSFRDX0FNUERVKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMtNDk0LVxcdCAgICAodHhfY3RsLVxcdTAwM2VzdGFfaWR4ID09IGlkeCkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg9NTY9ZW51bSBodGNfb3Btb2RlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC02NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6NjU6I2RlZmluZSBBVEg5S19IVENfQU1QRFUgIDFcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6NjY6I2RlZmluZSBBVEg5S19IVENfTk9STUFMIDJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6Njc6I2RlZmluZSBBVEg5S19IVENfQkVBQ09OIDNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6Njg6I2RlZmluZSBBVEg5S19IVENfTUdNVCAgIDRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtNjktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjcwOiNkZWZpbmUgQVRIOUtfSFRDX1RYX0NUU09OTFkgICAgICAweDFcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6NzE6I2RlZmluZSBBVEg5S19IVENfVFhfUlRTQ1RTICAgICAgIDB4MlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC03Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg9NzM9c3RydWN0IHR4X2ZyYW1lX2hkciB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtNzctXFx0dTggdGlkbm87XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjc4OlxcdF9fYmUzMiBmbGFnczsgLyogQVRIOUtfSFRDX1RYXyogKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtNzktXFx0dTgga2V5X3R5cGU7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg9MTk0PXN0cnVjdCBhdGg5a19odGNfdGFyZ2V0X3J4X3N0YXRzIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0xOTktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjIwMDojZGVmaW5lIEFUSDlLX0hUQ19NQVhfVklGIDJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6MjAxOiNkZWZpbmUgQVRIOUtfSFRDX01BWF9CQ05fVklGIDJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtMjAyLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oPTI0OT1zdHJ1Y3QgYXRoOWtfdmlmX2l0ZXJfZGF0YSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtMjUzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDoyNTQ6I2RlZmluZSBBVEg5S19IVENfTUFYX1NUQSA4XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjI1NTojZGVmaW5lIEFUSDlLX0hUQ19NQVhfVElEIDhcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtMjU2LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oPTI2ND1zdHJ1Y3QgYXRoOWtfaHRjX3N0YSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTI2NS1cXHR1OCBpbmRleDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6MjY2OlxcdGVudW0gdGlkX2FnZ3Jfc3RhdGUgdGlkX3N0YXRlW0FUSDlLX0hUQ19NQVhfVElEXTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtMjY3LVxcdHN0cnVjdCB3b3JrX3N0cnVjdCByY191cGRhdGVfd29yaztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0yNzAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjI3MTojZGVmaW5lIEFUSDlLX0hUQ19SWEJVRiAyNTZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtMjcyLSNkZWZpbmUgSFRDX1JYX0ZSQU1FX0hFQURFUl9TSVpFIDQwXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg9MjgxPXN0cnVjdCBhdGg5a19odGNfcngge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTI4Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6Mjg3OiNkZWZpbmUgQVRIOUtfSFRDX1RYX0NMRUFOVVBfSU5URVJWQUwgNTAgLyogbXMgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6Mjg4OiNkZWZpbmUgQVRIOUtfSFRDX1RYX1RJTUVPVVRfSU5URVJWQUwgMzAwMCAvKiBtcyAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDoyODk6I2RlZmluZSBBVEg5S19IVENfVFhfUkVTRVJWRSAxMFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDoyOTA6I2RlZmluZSBBVEg5S19IVENfVFhfVElNRU9VVF9DT1VOVCA0MFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDoyOTE6I2RlZmluZSBBVEg5S19IVENfVFhfVEhSRVNIT0xEIChNQVhfVFhfQlVGX05VTSAtIEFUSDlLX0hUQ19UWF9SRVNFUlZFKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0yOTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjI5MzojZGVmaW5lIEFUSDlLX0hUQ19PUF9UWF9RVUVVRVNfU1RPUCBCSVQoMClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6Mjk0OiNkZWZpbmUgQVRIOUtfSFRDX09QX1RYX0RSQUlOICAgICAgIEJJVCgxKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0yOTUtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg9MzExPXN0cnVjdCBhdGg5a19odGNfdHhfY3RsIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6MzEyOlxcdHU4IHR5cGU7IC8qIEFUSDlLX0hUQ18qICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTMxMy1cXHR1OCBlcGlkO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oPTMxOT1zdGF0aWMgaW5saW5lIHN0cnVjdCBhdGg5a19odGNfdHhfY3RsICpIVENfU0tCX0NCKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtMzI3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDozMjg6I2lmZGVmIENPTkZJR19BVEg5S19IVENfREVCVUdGU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0zMjktI2RlZmluZSBfX1NUQVRfU0FGRShoaWZfZGV2LCBleHByKVxcdGRvIHsgKChoaWZfZGV2KS1cXHUwMDNlaHRjX2hhbmRsZS1cXHUwMDNlZHJ2X3ByaXYgPyAoZXhwcikgOiAwKTsgfSB3aGlsZSAoMClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaD0zODg9c3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h0Y19lcnJfc3RhdF9yeChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtMzkyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDozOTM6I2VuZGlmIC8qIENPTkZJR19BVEg5S19IVENfREVCVUdGUyAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC0zOTQtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg9NDA5PXN0cnVjdCBodGNfYmVhY29uIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC00MTUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjQxNjpcXHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqYnNsb3RbQVRIOUtfSFRDX01BWF9CQ05fVklGXTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtNDE3LVxcdHUzMiBibWlzc2NudDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaD00NTY9c3RydWN0IGF0aDlrX2h0Y19wcml2IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC00NzgtXFx0dTggc3RhX3Nsb3Q7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oOjQ3OTpcXHR1OCB2aWZfc3RhX3Bvc1tBVEg5S19IVENfTUFYX1ZJRl07XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTQ4MC1cXHR1OCBudW1faWJzc192aWY7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtNTM1LVxcdHN0cnVjdCBkZWxheWVkX3dvcmsgZHV0eV9jeWNsZV93b3JrO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDo1MzY6I2lmZGVmIENPTkZJR19BVEg5S19IVENfREVCVUdGU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC01MzctXFx0c3RydWN0IGF0aDlrX2RlYnVnIGRlYnVnO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oPTY0MT1pbnQgYXRoOWtfaHRjX3Jlc3VtZShzdHJ1Y3QgaHRjX3RhcmdldCAqaHRjX2hhbmRsZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oLTY0Mi0jZW5kaWZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6NjQzOiNpZmRlZiBDT05GSUdfQVRIOUtfSFRDX0RFQlVHRlNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgtNjQ0LWludCBhdGg5a19odGNfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX2h3ICphaCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg9NjQ4PXN0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19odGNfZGVpbml0X2RlYnVnKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC02NTAtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaDo2NTE6I2VuZGlmIC8qIENPTkZJR19BVEg5S19IVENfREVCVUdGUyAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC02NTItXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYz0xMTE9c3RhdGljIHZvaWQgYXRoOWtfaHRjX2JlYWNvbl9jb25maWdfYXAoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmMtMTE2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jOjExNzpcXHRhdGg5a19jbW5fYmVhY29uX2NvbmZpZ19hcChhaCwgY29uZiwgQVRIOUtfSFRDX01BWF9CQ05fVklGKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYy0xMTgtXFx0YXRoOWtfaHRjX2JlYWNvbl9pbml0KHByaXYsIGNvbmYsIGZhbHNlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jPTE5MT1zdGF0aWMgdm9pZCBhdGg5a19odGNfc2VuZF9iZWFjb24oc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmMtMjQyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jOjI0MzpcXHR0eF9jdGwtXFx1MDAzZXR5cGUgPSBBVEg5S19IVENfQkVBQ09OO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jLTI0NC1cXHR0eF9jdGwtXFx1MDAzZWVwaWQgPSBwcml2LVxcdTAwM2ViZWFjb25fZXA7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYz0yNjQ9c3RhdGljIGludCBhdGg5a19odGNfY2hvb3NlX2JzbG90KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jLTI3Ni1cXHR0c2Z0dSA9IFRTRl9UT19UVSh0c2YgXFx1MDAzZVxcdTAwM2UgMzIsIHRzZik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmM6Mjc3OlxcdHNsb3QgPSAoKHRzZnR1ICUgaW50dmFsKSAqIEFUSDlLX0hUQ19NQVhfQkNOX1ZJRikgLyBpbnR2YWw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmM6Mjc4OlxcdHNsb3QgPSBBVEg5S19IVENfTUFYX0JDTl9WSUYgLSBzbG90IC0gMTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYy0yNzktXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYz0zMjU9dm9pZCBhdGg5a19odGNfYXNzaWduX2JzbG90KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jLTMzMi1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNnByaXYtXFx1MDAzZWJlYWNvbl9sb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYzozMzM6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFUSDlLX0hUQ19NQVhfQkNOX1ZJRjsgaSsrKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmMtMzM0LVxcdFxcdGlmIChwcml2LVxcdTAwM2ViZWFjb24uYnNsb3RbaV0gPT0gTlVMTCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmM9MzY1PXZvaWQgYXRoOWtfaHRjX3NldF90c2ZhZGp1c3Qoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmMtMzgwLVxcdCAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jOjM4MTpcXHR0c2ZhZGp1c3QgPSBjdXJfY29uZi1cXHUwMDNlYmVhY29uX2ludGVydmFsICogYXZwLVxcdTAwM2Vic2xvdCAvIEFUSDlLX0hUQ19NQVhfQkNOX1ZJRjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYy0zODItXFx0YXZwLVxcdTAwM2V0c2ZhZGp1c3QgPSBjcHVfdG9fbGU2NChUVV9UT19VU0VDKHRzZmFkanVzdCkpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYz0zOTg9c3RhdGljIGNvbnN0IGNoYXIgYXRoOWtfaHRjX2dzdHJpbmdzX3N0YXRzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmMtNDE4LX07XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYzo0MTk6I2RlZmluZSBBVEg5S19IVENfU1NUQVRTX0xFTiBBUlJBWV9TSVpFKGF0aDlrX2h0Y19nc3RyaW5nc19zdGF0cylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9kZWJ1Zy5jLTQyMC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmM9NDMwPWludCBhdGg5a19odGNfZ2V0X2V0X3NzZXRfY291bnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9kZWJ1Zy5jLTQzMy1cXHRpZiAoc3NldCA9PSBFVEhfU1NfU1RBVFMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYzo0MzQ6XFx0XFx0cmV0dXJuIEFUSDlLX0hUQ19TU1RBVFNfTEVOO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmMtNDM1LVxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYz00NDg9dm9pZCBhdGg5a19odGNfZ2V0X2V0X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYy00NzMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYzo0NzQ6XFx0V0FSTl9PTihpICE9IEFUSDlLX0hUQ19TU1RBVFNfTEVOKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9kZWJ1Zy5jLTQ3NS19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmM9NjA2PXN0YXRpYyBpbnQgYXRoOWtfaW5pdF9wcml2KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2luaXQuYy02NzMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfaW5pdC5jOjY3NDpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVRIOUtfSFRDX01BWF9CQ05fVklGOyBpKyspXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfaW5pdC5jLTY3NS1cXHRcXHRwcml2LVxcdTAwM2ViZWFjb24uYnNsb3RbaV0gPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jPTE4ND12b2lkIGF0aDlrX2h0Y19yZXNldChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtMjMzLVxcdG1vZF90aW1lcihcXHUwMDI2cHJpdi1cXHUwMDNldHguY2xlYW51cF90aW1lcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM6MjM0OlxcdFxcdCAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQVRIOUtfSFRDX1RYX0NMRUFOVVBfSU5URVJWQUwpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtMjM1LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jPTI0MD1zdGF0aWMgaW50IGF0aDlrX2h0Y19zZXRfY2hhbm5lbChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtMzExLVxcdG1vZF90aW1lcihcXHUwMDI2cHJpdi1cXHUwMDNldHguY2xlYW51cF90aW1lcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM6MzEyOlxcdFxcdCAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQVRIOUtfSFRDX1RYX0NMRUFOVVBfSU5URVJWQUwpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtMzEzLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jPTM1MD1zdGF0aWMgaW50IGF0aDlrX2h0Y19hZGRfbW9uaXRvcl9pbnRlcmZhY2Uoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTM1Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM6MzU4OlxcdGlmICgocHJpdi1cXHUwMDNlbnZpZnMgXFx1MDAzZT0gQVRIOUtfSFRDX01BWF9WSUYpIHx8XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jOjM1OTpcXHQgICAgKHByaXYtXFx1MDAzZW5zdGF0aW9ucyBcXHUwMDNlPSBBVEg5S19IVENfTUFYX1NUQSkpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtMzYwLVxcdFxcdHJldCA9IC1FTk9CVUZTO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTM2NC1cXHRzdGFfaWR4ID0gZmZ6KHByaXYtXFx1MDAzZXN0YV9zbG90KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM6MzY1OlxcdGlmICgoc3RhX2lkeCBcXHUwMDNjIDApIHx8IChzdGFfaWR4IFxcdTAwM2UgQVRIOUtfSFRDX01BWF9TVEEpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTM2Ni1cXHRcXHRyZXQgPSAtRU5PQlVGUztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYz00NjY9c3RhdGljIGludCBhdGg5a19odGNfYWRkX3N0YXRpb24oc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTQ3Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM6NDc4OlxcdGlmIChwcml2LVxcdTAwM2Vuc3RhdGlvbnMgXFx1MDAzZT0gQVRIOUtfSFRDX01BWF9TVEEpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTQ3OS1cXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtNDgxLVxcdHN0YV9pZHggPSBmZnoocHJpdi1cXHUwMDNlc3RhX3Nsb3QpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYzo0ODI6XFx0aWYgKChzdGFfaWR4IFxcdTAwM2MgMCkgfHwgKHN0YV9pZHggXFx1MDAzZSBBVEg5S19IVENfTUFYX1NUQSkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTQ4My1cXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM9NzAyPXN0YXRpYyBpbnQgYXRoOWtfaHRjX3R4X2FnZ3Jfb3BlcihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtNzEzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYzo3MTQ6XFx0aWYgKHRpZCBcXHUwMDNlPSBBVEg5S19IVENfTUFYX1RJRClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtNzE1LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jPTkwNz1zdGF0aWMgaW50IGF0aDlrX2h0Y19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYy05NjAtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwcml2LVxcdTAwM2V0eC50eF9sb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM6OTYxOlxcdHByaXYtXFx1MDAzZXR4LmZsYWdzIFxcdTAwMjY9IH5BVEg5S19IVENfT1BfVFhfUVVFVUVTX1NUT1A7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTk2Mi1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2cHJpdi1cXHUwMDNldHgudHhfbG9jayk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtOTY2LVxcdG1vZF90aW1lcihcXHUwMDI2cHJpdi1cXHUwMDNldHguY2xlYW51cF90aW1lcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM6OTY3OlxcdFxcdCAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQVRIOUtfSFRDX1RYX0NMRUFOVVBfSU5URVJWQUwpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtOTY4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jPTE2NTg9c3RhdGljIGludCBhdGg5a19odGNfYW1wZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTE2ODgtXFx0Y2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfT1BFUkFUSU9OQUw6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jOjE2ODk6XFx0XFx0aWYgKHRpZCBcXHUwMDNlPSBBVEg5S19IVENfTUFYX1RJRCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYy0xNjkwLVxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM9MTg3ND1zdHJ1Y3QgaWVlZTgwMjExX29wcyBhdGg5a19odGNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTE5MDYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jOjE5MDc6I2lmZGVmIENPTkZJR19BVEg5S19IVENfREVCVUdGU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYy0xOTA4LVxcdC5nZXRfZXRfc3NldF9jb3VudCAgPSBhdGg5a19odGNfZ2V0X2V0X3NzZXRfY291bnQsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM9MjM9c3RhdGljIGNvbnN0IGludCBzdWJ0eXBlX3R4cV90b19od3FbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0yOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MzA6I2RlZmluZSBBVEg5S19IVENfSU5JVF9UWFEoc3VidHlwZSkgZG8ge1xcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMzEtXFx0XFx0cWkudHFpX3N1YnR5cGUgPSBzdWJ0eXBlX3R4cV90b19od3Fbc3VidHlwZV07XFx0XFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTU2PXZvaWQgYXRoOWtfaHRjX2NoZWNrX3N0b3BfcXVldWVzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01OS1cXHRwcml2LVxcdTAwM2V0eC5xdWV1ZWRfY250Kys7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjYwOlxcdGlmICgocHJpdi1cXHUwMDNldHgucXVldWVkX2NudCBcXHUwMDNlPSBBVEg5S19IVENfVFhfVEhSRVNIT0xEKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo2MTpcXHQgICAgIShwcml2LVxcdTAwM2V0eC5mbGFncyBcXHUwMDI2IEFUSDlLX0hUQ19PUF9UWF9RVUVVRVNfU1RPUCkpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NjI6XFx0XFx0cHJpdi1cXHUwMDNldHguZmxhZ3MgfD0gQVRIOUtfSFRDX09QX1RYX1FVRVVFU19TVE9QO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy02My1cXHRcXHRpZWVlODAyMTFfc3RvcF9xdWV1ZXMocHJpdi1cXHUwMDNlaHcpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTY4PXZvaWQgYXRoOWtfaHRjX2NoZWNrX3dha2VfcXVldWVzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy03MC1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNnByaXYtXFx1MDAzZXR4LnR4X2xvY2spO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo3MTpcXHRpZiAoKHByaXYtXFx1MDAzZXR4LnF1ZXVlZF9jbnQgXFx1MDAzYyBBVEg5S19IVENfVFhfVEhSRVNIT0xEKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo3MjpcXHQgICAgKHByaXYtXFx1MDAzZXR4LmZsYWdzIFxcdTAwMjYgQVRIOUtfSFRDX09QX1RYX1FVRVVFU19TVE9QKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo3MzpcXHRcXHRwcml2LVxcdTAwM2V0eC5mbGFncyBcXHUwMDI2PSB+QVRIOUtfSFRDX09QX1RYX1FVRVVFU19TVE9QO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy03NC1cXHRcXHRpZWVlODAyMTFfd2FrZV9xdWV1ZXMocHJpdi1cXHUwMDNlaHcpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTIxND1zdGF0aWMgdm9pZCBhdGg5a19odGNfdHhfbWdtdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMjQwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzoyNDE6XFx0dHhfY3RsLVxcdTAwM2V0eXBlID0gQVRIOUtfSFRDX01HTVQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTI0Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz0yNjA9c3RhdGljIHZvaWQgYXRoOWtfaHRjX3R4X2RhdGEoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTI5Mi1cXHRpZiAodHhfaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjI5MzpcXHRcXHR0eF9jdGwtXFx1MDAzZXR5cGUgPSBBVEg5S19IVENfQU1QRFU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjI5NDpcXHRcXHR0eF9oZHIuZGF0YV90eXBlID0gQVRIOUtfSFRDX0FNUERVO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0yOTUtXFx0fSBlbHNlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6Mjk2OlxcdFxcdHR4X2N0bC1cXHUwMDNldHlwZSA9IEFUSDlLX0hUQ19OT1JNQUw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjI5NzpcXHRcXHR0eF9oZHIuZGF0YV90eXBlID0gQVRIOUtfSFRDX05PUk1BTDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMjk4LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0zMTItXFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2UgcHJpdi1cXHUwMDNlaHctXFx1MDAzZXdpcGh5LVxcdTAwM2VydHNfdGhyZXNob2xkKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzozMTM6XFx0XFx0XFx0ZmxhZ3MgfD0gQVRIOUtfSFRDX1RYX1JUU0NUUztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMzE0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0zMTUtXFx0LyogQ1RTLXRvLXNlbGYgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MzE2OlxcdGlmICghKGZsYWdzIFxcdTAwMjYgQVRIOUtfSFRDX1RYX1JUU0NUUykgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMzE3LVxcdCAgICAodmlmIFxcdTAwMjZcXHUwMDI2IHZpZi1cXHUwMDNlYnNzX2NvbmYudXNlX2N0c19wcm90KSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MzE4OlxcdFxcdGZsYWdzIHw9IEFUSDlLX0hUQ19UWF9DVFNPTkxZO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0zMTktXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM9MzkyPXN0YXRpYyBpbmxpbmUgYm9vbCBfX2F0aDlrX2h0Y19jaGVja190eF9hZ2dyKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0zOTctXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwcml2LVxcdTAwM2V0eC50eF9sb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6Mzk4OlxcdGlmICgodGlkIFxcdTAwM2MgQVRIOUtfSFRDX01BWF9USUQpIFxcdTAwMjZcXHUwMDI2IChpc3RhLVxcdTAwM2V0aWRfc3RhdGVbdGlkXSA9PSBBR0dSX1NUT1ApKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0zOTktXFx0XFx0cmV0ID0gdHJ1ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz00NDU9c3RhdGljIHZvaWQgYXRoOWtfaHRjX3R4X3Byb2Nlc3Moc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTQ3OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NDc5OlxcdGlmICh0eHMtXFx1MDAzZXRzX2ZsYWdzIFxcdTAwMjYgQVRIOUtfSFRDX1RYU1RBVF9BQ0spIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNDgwLVxcdFxcdHR4X2luZm8tXFx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy00ODQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjQ4NTpcXHRpZiAodHhzLVxcdTAwM2V0c19mbGFncyBcXHUwMDI2IEFUSDlLX0hUQ19UWFNUQVRfRklMVClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNDg2LVxcdFxcdHR4X2luZm8tXFx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX1RYX0ZJTFRFUkVEO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy00ODctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjQ4ODpcXHRpZiAodHhzLVxcdTAwM2V0c19mbGFncyBcXHUwMDI2IEFUSDlLX0hUQ19UWFNUQVRfUlRDX0NUUylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNDg5LVxcdFxcdHJhdGUtXFx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy00OTEtXFx0cmF0ZS1cXHUwMDNlY291bnQgPSAxO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo0OTI6XFx0cmF0ZS1cXHUwMDNlaWR4ID0gTVModHhzLVxcdTAwM2V0c19yYXRlLCBBVEg5S19IVENfVFhTVEFUX1JBVEUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy00OTMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjQ5NDpcXHRpZiAodHhzLVxcdTAwM2V0c19mbGFncyBcXHUwMDI2IEFUSDlLX0hUQ19UWFNUQVRfTUNTKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTQ5NS1cXHRcXHRyYXRlLVxcdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfTUNTO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy00OTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjQ5NzpcXHRcXHRpZiAodHhzLVxcdTAwM2V0c19mbGFncyBcXHUwMDI2IEFUSDlLX0hUQ19UWFNUQVRfQ1c0MClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNDk4LVxcdFxcdFxcdHJhdGUtXFx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEg7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjQ5OTpcXHRcXHRpZiAodHhzLVxcdTAwM2V0c19mbGFncyBcXHUwMDI2IEFUSDlLX0hUQ19UWFNUQVRfU0dJKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01MDAtXFx0XFx0XFx0cmF0ZS1cXHUwMDNlZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTUzOT12b2lkIGF0aDlrX2h0Y190eF9kcmFpbihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNTQzLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2cHJpdi1cXHUwMDNldHgudHhfbG9jayk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjU0NDpcXHRwcml2LVxcdTAwM2V0eC5mbGFncyB8PSBBVEg5S19IVENfT1BfVFhfRFJBSU47XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTU0NS1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2cHJpdi1cXHUwMDNldHgudHhfbG9jayk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNTczLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2cHJpdi1cXHUwMDNldHgudHhfbG9jayk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjU3NDpcXHRwcml2LVxcdTAwM2V0eC5mbGFncyBcXHUwMDI2PSB+QVRIOUtfSFRDX09QX1RYX0RSQUlOO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01NzUtXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnByaXYtXFx1MDAzZXR4LnR4X2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTU3OD12b2lkIGF0aDlrX3R4X2ZhaWxlZF90YXNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01ODItXFx0c3Bpbl9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2V0eC50eF9sb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NTgzOlxcdGlmIChwcml2LVxcdTAwM2V0eC5mbGFncyBcXHUwMDI2IEFUSDlLX0hUQ19PUF9UWF9EUkFJTikge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01ODQtXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXR4LnR4X2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTYxOD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYqIGF0aDlrX2h0Y190eF9nZXRfcGFja2V0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy02MjQtXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NjI1OlxcdHU4IGVwaWQgPSBNUyh0eHMtXFx1MDAzZXRzX3JhdGUsIEFUSDlLX0hUQ19UWFNUQVRfRVBJRCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTYyNi1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz03MTY9c3RhdGljIGlubGluZSBib29sIGNoZWNrX3BhY2tldChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNzI0LVxcdFxcdCAgICAgICB0eF9jdGwtXFx1MDAzZXRpbWVzdGFtcCArXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjcyNTpcXHRcXHQgICAgICAgbXNlY3NfdG9famlmZmllcyhBVEg5S19IVENfVFhfVElNRU9VVF9JTlRFUlZBTCkpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTcyNi1cXHRcXHRhdGhfZGJnKGNvbW1vbiwgWE1JVCwgXFxcIkRyb3BwaW5nIGEgcGFja2V0IGR1ZSB0byBUWCB0aW1lb3V0XFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz03NjE9dm9pZCBhdGg5a19odGNfdHhfY2xlYW51cF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy03NzYtXFx0XFx0XFx0XFx0ZXZlbnQtXFx1MDAzZXR4cy5jb29raWUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjc3NzpcXHRcXHRcXHRcXHRNUyhldmVudC1cXHUwMDNldHhzLnRzX3JhdGUsIEFUSDlLX0hUQ19UWFNUQVRfRVBJRCkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy03NzgtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNzg0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo3ODU6XFx0XFx0aWYgKCsrZXZlbnQtXFx1MDAzZWNvdW50IFxcdTAwM2U9IEFUSDlLX0hUQ19UWF9USU1FT1VUX0NPVU5UKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTc4Ni1cXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2ZXZlbnQtXFx1MDAzZWxpc3QpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTgwNS1cXHRtb2RfdGltZXIoXFx1MDAyNnByaXYtXFx1MDAzZXR4LmNsZWFudXBfdGltZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjgwNjpcXHRcXHQgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEFUSDlLX0hUQ19UWF9DTEVBTlVQX0lOVEVSVkFMKSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTgwNy19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM9ODI3PWJvb2wgYXRoOWtfaHRjX3R4cV9zZXR1cChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIGludCBzdWJ0eXBlKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTgzNC1cXHRtZW1zZXQoXFx1MDAyNnFpLCAwLCBzaXplb2YocWkpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6ODM1OlxcdEFUSDlLX0hUQ19JTklUX1RYUShzdWJ0eXBlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtODM2LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTg1Mj1pbnQgYXRoOWtfaHRjX2NhYnFfc2V0dXAoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTg1Ni1cXHRtZW1zZXQoXFx1MDAyNnFpLCAwLCBzaXplb2YocWkpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6ODU3OlxcdEFUSDlLX0hUQ19JTklUX1RYUSgwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtODU4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jPTEyMjU9aW50IGF0aDlrX3J4X2luaXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEyMzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjEyMzI6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFUSDlLX0hUQ19SWEJVRjsgaSsrKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEyMzMtXFx0XFx0c3RydWN0IGF0aDlrX2h0Y19yeGJ1ZiAqcnhidWYgPVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5jPTEzOD12b2lkIGF0aDlrX3dtaV9ldmVudF90YXNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93bWkuYy0xNzgtXFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwcml2LVxcdTAwM2V0eC50eF9sb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmM6MTc5OlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2V0eC5mbGFncyBcXHUwMDI2IEFUSDlLX0hUQ19PUF9UWF9EUkFJTikge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93bWkuYy0xODAtXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnByaXYtXFx1MDAzZXR4LnR4X2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5oPTM5PXN0cnVjdCB3bWlfZXZlbnRfc3diYSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmgtNTAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5oOjUxOiNkZWZpbmUgQVRIOUtfSFRDX1RYU1RBVF9BQ0sgICAgICAgIEJJVCgwKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93bWkuaDo1MjojZGVmaW5lIEFUSDlLX0hUQ19UWFNUQVRfRklMVCAgICAgICBCSVQoMSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmg6NTM6I2RlZmluZSBBVEg5S19IVENfVFhTVEFUX1JUQ19DVFMgICAgQklUKDIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5oOjU0OiNkZWZpbmUgQVRIOUtfSFRDX1RYU1RBVF9NQ1MgICAgICAgIEJJVCgzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93bWkuaDo1NTojZGVmaW5lIEFUSDlLX0hUQ19UWFNUQVRfQ1c0MCAgICAgICBCSVQoNClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmg6NTY6I2RlZmluZSBBVEg5S19IVENfVFhTVEFUX1NHSSAgICAgICAgQklUKDUpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5oLTU3LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5oLTYzLSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93bWkuaDo2NDojZGVmaW5lIEFUSDlLX0hUQ19UWFNUQVRfUkFURSAgICAgICAweDBmXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5oOjY1OiNkZWZpbmUgQVRIOUtfSFRDX1RYU1RBVF9SQVRFX1MgICAgIDBcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmgtNjYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5oOjY3OiNkZWZpbmUgQVRIOUtfSFRDX1RYU1RBVF9FUElEICAgICAgIDB4ZjBcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmg6Njg6I2RlZmluZSBBVEg5S19IVENfVFhTVEFUX0VQSURfUyAgICAgNFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93bWkuaC02OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDE6NTMuMTU5NTE5MDA2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI3ODc0NzgxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBBdGhlcm9zIENvZGUqKlxuXG5Pa2F5LCB0aW1lIHRvIHJlYWxseSBkaWcgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3BlY2lmaWMgc2VjdGlvbiBvZiB0aGUgQXRoZXJvcyB3aXJlbGVzcyBkcml2ZXIuIEknbSBmb2N1c2luZyBvbiBgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW5gLCBgYXRoOWtfcnhfcHJlcGFyZWAsIGFuZCBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAsIGFuZCB0aGUgY29kZSBpbW1lZGlhdGVseSBhcm91bmQgdGhlbSwgYWxsIHdpdGhpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jYC4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGRyaXZlciBoYW5kbGVzIHNwZWN0cmFsIGFuYWx5c2lzIHNhbXBsZSBsZW5ndGgsIGhvdyBpdCBwcmVwYXJlcyBmb3IgcmVjZWl2ZSBvcGVyYXRpb25zLCBhbmQgcHJlY2lzZWx5IGhvdyB0aGUgRkZUIHByb2Nlc3NpbmcgaXMgaGFwcGVuaW5nLiBUaGlzIGxpa2VseSByZWxhdGVzIHRvIHNpZ25hbCBwcm9jZXNzaW5nIGFuZCBkYXRhIGFjcXVpc2l0aW9uLCBhbmQgSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgbG93LWxldmVsIGZ1bmN0aW9ucyBpbnRlZ3JhdGUgd2l0aGluIHRoZSBlbnRpcmUgcmVjZWl2ZSBwYXRoLiBLbm93aW5nIHRoaXMgaXMgY3JpdGljYWwgdG8gcGVyZm9ybWFuY2UgYW5kLCBwb3RlbnRpYWxseSwgcGlucG9pbnRpbmcgYW55IG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLCBlc3BlY2lhbGx5IGFyb3VuZCBkYXRhIGZsb3cgYW5kIGludGVycnVwdCBoYW5kbGluZy4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cgYW5kIGlkZW50aWZ5IHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGhhcmR3YXJlIHJlZ2lzdGVycy4gTXkgZ29hbCBpcyBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlY2VpdmUgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MjAsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MTo1NS40MzgyNzA2NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTY1LFxuICBcIkxpbmVDb3VudFwiOiAxMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk2NTpcXHRcXG4gOTY2OlxcdFxcdHJ4X3N0YXRzLVxcdTAwM2Vyc19pc2FnZ3JcXHQ9IHJ4c3RhdHVzLVxcdTAwM2Vyc19pc2FnZ3I7XFxuIDk2NzpcXHRcXHRyeF9zdGF0cy1cXHUwMDNlcnNfbW9yZWFnZ3JcXHQ9IHJ4c3RhdHVzLVxcdTAwM2Vyc19tb3JlYWdncjtcXG4gOTY4OlxcdFxcdHJ4X3N0YXRzLVxcdTAwM2Vyc19udW1fZGVsaW1zXFx0PSByeHN0YXR1cy1cXHUwMDNlcnNfbnVtX2RlbGltcztcXG4gOTY5OlxcdFxcdGNvbnZlcnRfaHRjX2ZsYWcocnhfc3RhdHMsIHJ4c3RhdHVzKTtcXG4gOTcwOlxcdH1cXG4gOTcxOlxcdFxcbiA5NzI6XFx0LypcXG4gOTczOlxcdCAqIFRoZSBmaXJtd2FyZSByZXBvcnRzIGEgZnJhbWUgdGhhdCBmYWlsZWQgaXRzIENSQyBhcyBhIENSQyBlcnJvciBldmVuIHdoZW5cXG4gOTc0OlxcdCAqIHRoZSBQSFkgZXJyb3IgYml0IGlzIHNldCBhcyB3ZWxsLCBzbyB1bmRlciBpbnRlcmZlcmVuY2Ugc3BlY3RyYWwgc2FtcGxlc1xcbiA5NzU6XFx0ICogcmVhY2ggdGhlIGhvc3QgYXMgQ1JDIGVycm9ycy4gQSBzYW1wbGUgaXMgcmVjb2duaXNhYmxlIGJ5IGl0cyBzaXplOiB0aGVcXG4gOTc2OlxcdCAqIEZGVCByZXBvcnQgbGVuZ3RoIGZvciB0aGUgY2hhbm5lbCB3aWR0aCwgcGx1cyBvciBtaW51cyB0aGUgdHdvIGJ5dGVzIHRoZVxcbiA5Nzc6XFx0ICogTUFDIG1heSBhZGQgb3IgZHJvcC5cXG4gOTc4OlxcdCAqL1xcbiA5Nzk6XFx0c3RhdGljIGJvb2wgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW4oc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbiA5ODA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB1MTYgbGVuKVxcbiA5ODE6XFx0e1xcbiA5ODI6XFx0XFx0ZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFuX3R5cGU7XFxuIDk4MzpcXHRcXHR1MTYgZmZ0X2xlbjtcXG4gOTg0OlxcdFxcbiA5ODU6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXNwZWNfcHJpdi5zcGVjdHJhbF9tb2RlID09IFNQRUNUUkFMX0RJU0FCTEVEKVxcbiA5ODY6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA5ODc6XFx0XFxuIDk4ODpcXHRcXHRjaGFuX3R5cGUgPSBjZmc4MDIxMV9nZXRfY2hhbmRlZl90eXBlKFxcdTAwMjZwcml2LVxcdTAwM2Vody1cXHUwMDNlY29uZi5jaGFuZGVmKTtcXG4gOTg5OlxcdFxcdGlmIChjaGFuX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUyB8fFxcbiA5OTA6XFx0XFx0ICAgIGNoYW5fdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0MFBMVVMpXFxuIDk5MTpcXHRcXHRcXHRmZnRfbGVuID0gU1BFQ1RSQUxfSFQyMF80MF9UT1RBTF9EQVRBX0xFTjtcXG4gOTkyOlxcdFxcdGVsc2VcXG4gOTkzOlxcdFxcdFxcdGZmdF9sZW4gPSBTUEVDVFJBTF9IVDIwX1RPVEFMX0RBVEFfTEVOO1xcbiA5OTQ6XFx0XFxuIDk5NTpcXHRcXHRyZXR1cm4gbGVuICsgMSBcXHUwMDNlPSBmZnRfbGVuIFxcdTAwMjZcXHUwMDI2IGxlbiBcXHUwMDNjPSBmZnRfbGVuICsgMjtcXG4gOTk2OlxcdH1cXG4gOTk3OlxcdFxcbiA5OTg6XFx0c3RhdGljIGJvb2wgYXRoOWtfcnhfcHJlcGFyZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuIDk5OTpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBhdGg5a19odGNfcnhidWYgKnJ4YnVmLFxcbjEwMDA6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKVxcbjEwMDE6XFx0XFxuMTAwMjpcXHR7XFxuMTAwMzpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyO1xcbjEwMDQ6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwcml2LVxcdTAwM2VodztcXG4xMDA1OlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSByeGJ1Zi1cXHUwMDNlc2tiO1xcbjEwMDY6XFx0XFx0c3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihwcml2LVxcdTAwM2VhaCk7XFxuMTAwNzpcXHRcXHRzdHJ1Y3QgYXRoX2h3ICphaCA9IGNvbW1vbi1cXHUwMDNlYWg7XFxuMTAwODpcXHRcXHRzdHJ1Y3QgYXRoX2h0Y19yeF9zdGF0dXMgKnJ4c3RhdHVzO1xcbjEwMDk6XFx0XFx0c3RydWN0IGF0aF9yeF9zdGF0dXMgcnhfc3RhdHM7XFxuMTAxMDpcXHRcXHRib29sIGRlY3J5cHRfZXJyb3IgPSBmYWxzZTtcXG4xMDExOlxcdFxcdHUxNiByc19kYXRhbGVuO1xcbjEwMTI6XFx0XFx0Ym9vbCBpc19waHllcnI7XFxuMTAxMzpcXHRcXG4xMDE0OlxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIEhUQ19SWF9GUkFNRV9IRUFERVJfU0laRSkge1xcbjEwMTU6XFx0XFx0XFx0YXRoX2Vycihjb21tb24sIFxcXCJDb3JydXB0ZWQgUlggZnJhbWUsIGRyb3BwaW5nIChsZW46ICVkKVxcXFxuXFxcIixcXG4xMDE2OlxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlbGVuKTtcXG4xMDE3OlxcdFxcdFxcdGdvdG8gcnhfbmV4dDtcXG4xMDE4OlxcdFxcdH1cXG4xMDE5OlxcdFxcbjEwMjA6XFx0XFx0cnhzdGF0dXMgPSAoc3RydWN0IGF0aF9odGNfcnhfc3RhdHVzICopc2tiLVxcdTAwM2VkYXRhO1xcbjEwMjE6XFx0XFxuMTAyMjpcXHRcXHRyc19kYXRhbGVuID0gYmUxNl90b19jcHUocnhzdGF0dXMtXFx1MDAzZXJzX2RhdGFsZW4pO1xcbjEwMjM6XFx0XFx0aWYgKHVubGlrZWx5KHJzX2RhdGFsZW4gLVxcbjEwMjQ6XFx0XFx0ICAgIChza2ItXFx1MDAzZWxlbiAtIEhUQ19SWF9GUkFNRV9IRUFERVJfU0laRSkgIT0gMCkpIHtcXG4xMDI1OlxcdFxcdFxcdGF0aF9lcnIoY29tbW9uLFxcbjEwMjY6XFx0XFx0XFx0XFx0XFxcIkNvcnJ1cHRlZCBSWCBkYXRhIGxlbiwgZHJvcHBpbmcgKGRsZW46ICVkLCBza2JsZW46ICVkKVxcXFxuXFxcIixcXG4xMDI3OlxcdFxcdFxcdFxcdHJzX2RhdGFsZW4sIHNrYi1cXHUwMDNlbGVuKTtcXG4xMDI4OlxcdFxcdFxcdGdvdG8gcnhfbmV4dDtcXG4xMDI5OlxcdFxcdH1cXG4xMDMwOlxcdFxcbjEwMzE6XFx0XFx0aXNfcGh5ZXJyID0gcnhzdGF0dXMtXFx1MDAzZXJzX3N0YXR1cyBcXHUwMDI2IEFUSDlLX1JYRVJSX1BIWTtcXG4xMDMyOlxcdFxcdC8qXFxuMTAzMzpcXHRcXHQgKiBEaXNjYXJkIHplcm8tbGVuZ3RoIHBhY2tldHMgYW5kIHBhY2tldHMgc21hbGxlciB0aGFuIGFuIEFDS1xcbjEwMzQ6XFx0XFx0ICogd2hpY2ggYXJlIG5vdCBQSFlfRVJST1IgKHNob3J0IHJhZGFyIHB1bHNlcyBoYXZlIGEgbGVuZ3RoIG9mIDMpXFxuMTAzNTpcXHRcXHQgKi9cXG4xMDM2OlxcdFxcdGlmICh1bmxpa2VseSghcnNfZGF0YWxlbiB8fCAocnNfZGF0YWxlbiBcXHUwMDNjIDEwIFxcdTAwMjZcXHUwMDI2ICFpc19waHllcnIpKSkge1xcbjEwMzc6XFx0XFx0XFx0YXRoX2RiZyhjb21tb24sIEFOWSxcXG4xMDM4OlxcdFxcdFxcdFxcdFxcXCJTaG9ydCBSWCBkYXRhIGxlbiwgZHJvcHBpbmcgKGRsZW46ICVkKVxcXFxuXFxcIixcXG4xMDM5OlxcdFxcdFxcdFxcdHJzX2RhdGFsZW4pO1xcbjEwNDA6XFx0XFx0XFx0Z290byByeF9uZXh0O1xcbjEwNDE6XFx0XFx0fVxcbjEwNDI6XFx0XFxuMTA0MzpcXHRcXHRpZiAocnhzdGF0dXMtXFx1MDAzZXJzX2tleWl4IFxcdTAwM2U9IEFUSF9LRVlNQVggXFx1MDAyNlxcdTAwMjZcXG4xMDQ0OlxcdFxcdCAgICByeHN0YXR1cy1cXHUwMDNlcnNfa2V5aXggIT0gQVRIOUtfUlhLRVlJWF9JTlZBTElEKSB7XFxuMTA0NTpcXHRcXHRcXHRhdGhfZGJnKGNvbW1vbiwgQU5ZLFxcbjEwNDY6XFx0XFx0XFx0XFx0XFxcIkludmFsaWQga2V5aXgsIGRyb3BwaW5nIChrZXlpeDogJWQpXFxcXG5cXFwiLFxcbjEwNDc6XFx0XFx0XFx0XFx0cnhzdGF0dXMtXFx1MDAzZXJzX2tleWl4KTtcXG4xMDQ4OlxcdFxcdFxcdGdvdG8gcnhfbmV4dDtcXG4xMDQ5OlxcdFxcdH1cXG4xMDUwOlxcdFxcbjEwNTE6XFx0XFx0LyogR2V0IHRoZSBSWCBzdGF0dXMgaW5mb3JtYXRpb24gKi9cXG4xMDUyOlxcdFxcbjEwNTM6XFx0XFx0bWVtc2V0KHJ4X3N0YXR1cywgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzKSk7XFxuMTA1NDpcXHRcXG4xMDU1OlxcdFxcdC8qIENvcHkgZXZlcnl0aGluZyBmcm9tIGF0aF9odGNfcnhfc3RhdHVzIChIVENfUlhfRlJBTUVfSEVBREVSKS5cXG4xMDU2OlxcdFxcdCAqIEFmdGVyIHRoaXMsIHdlIGNhbiBkcm9wIHRoaXMgcGFydCBvZiBza2IuICovXFxuMTA1NzpcXHRcXHRyeF9zdGF0dXNfaHRjX3RvX2F0aChcXHUwMDI2cnhfc3RhdHMsIHJ4c3RhdHVzKTtcXG4xMDU4OlxcdFxcdGF0aDlrX2h0Y19lcnJfc3RhdF9yeChwcml2LCBcXHUwMDI2cnhfc3RhdHMpO1xcbjEwNTk6XFx0XFx0cnhfc3RhdHVzLVxcdTAwM2VtYWN0aW1lID0gYmU2NF90b19jcHUocnhzdGF0dXMtXFx1MDAzZXJzX3RzdGFtcCk7XFxuMTA2MDpcXHRcXHRza2JfcHVsbChza2IsIEhUQ19SWF9GUkFNRV9IRUFERVJfU0laRSk7XFxuMTA2MTpcXHRcXG4xMDYyOlxcdFxcdC8qXFxuMTA2MzpcXHRcXHQgKiBldmVyeXRoaW5nIGJ1dCB0aGUgcmF0ZSBpcyBjaGVja2VkIGhlcmUsIHRoZSByYXRlIGNoZWNrIGlzIGRvbmVcXG4xMDY0OlxcdFxcdCAqIHNlcGFyYXRlbHkgdG8gYXZvaWQgZG9pbmcgdHdvIGxvb2t1cHMgZm9yIGEgcmF0ZSBmb3IgZWFjaCBmcmFtZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDE6NTUuNDM4NDE0MzZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzI0NDMxODQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgZGV2ZWxvcG1lbnQgYW5kIHNwZWNpZmljYWxseSB3b3JraW5nIHdpdGggdGhlIGF0aDlrIHdpcmVsZXNzIGRyaXZlcjpcblxuKipEaXZpbmcgaW50byBgYXRoOWtfcnhfcHJlcGFyZWAqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoZSBgYXRoOWtfcnhfcHJlcGFyZWAgZnVuY3Rpb24uIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCBpbiB0aGUgcmVjZWl2ZSBwYXRoIGZvciB0aGlzIGRyaXZlciwgc28gYSBkZXRhaWxlZCB1bmRlcnN0YW5kaW5nIGlzIGVzc2VudGlhbC4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSBkaXNzZWN0IGl0cyBsb2dpYywgc3RlcCBieSBzdGVwLiBJJ20gYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSwgYnV0IHNwZWNpZmljcyBvZiB0aGlzIGZ1bmN0aW9uIGFyZSBjcnVjaWFsIGZvciB3aGF0ZXZlciBkZWJ1Z2dpbmcgb3Igb3B0aW1pemF0aW9uIHRhc2sgSSdtIGN1cnJlbnRseSBmb2N1c2VkIG9uLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NTYsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQxOjU4LjE2Mjg0OTEwMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA2NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA2NTpcXHRcXHQgKi9cXG4xMDY2OlxcdFxcdGhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cXHUwMDNlZGF0YTtcXG4xMDY3OlxcdFxcbjEwNjg6XFx0XFx0LypcXG4xMDY5OlxcdFxcdCAqIFByb2Nlc3MgUEhZIGVycm9ycyBhbmQgcmV0dXJuIHNvIHRoYXQgdGhlIHBhY2tldFxcbjEwNzA6XFx0XFx0ICogY2FuIGJlIGRyb3BwZWQuXFxuMTA3MTpcXHRcXHQgKi9cXG4xMDcyOlxcdFxcdGlmICh1bmxpa2VseShpc19waHllcnIpKSB7XFxuMTA3MzpcXHRcXHRcXHQvKiBUT0RPOiBOb3QgdXNpbmcgREZTIHByb2Nlc3Npbmcgbm93LiAqL1xcbjEwNzQ6XFx0XFx0XFx0aWYgKGF0aF9jbW5fcHJvY2Vzc19mZnQoXFx1MDAyNnByaXYtXFx1MDAzZXNwZWNfcHJpdiwgaGRyLFxcbjEwNzU6XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZyeF9zdGF0cywgcnhfc3RhdHVzLVxcdTAwM2VtYWN0aW1lKSkge1xcbjEwNzY6XFx0XFx0XFx0XFx0LyogVE9ETzogQ29kZSB0byBjb2xsZWN0IHNwZWN0cmFsIHNjYW4gc3RhdGlzdGljcyAqL1xcbjEwNzc6XFx0XFx0XFx0fVxcbjEwNzg6XFx0XFx0XFx0Z290byByeF9uZXh0O1xcbjEwNzk6XFx0XFx0fVxcbjEwODA6XFx0XFxuMTA4MTpcXHRcXHQvKlxcbjEwODI6XFx0XFx0ICogTGV0IHRoZSBGRlQgcGFyc2VyIGRlY2lkZSB3aGV0aGVyIGEgQ1JDIGVycm9yIG9mIHNhbXBsZSBzaXplIGlzIGFcXG4xMDgzOlxcdFxcdCAqIHNhbXBsZTsgaXQgdmFsaWRhdGVzIHRoZSBjb250ZW50cyBhbmQgcmV0dXJucyAwIGZvciBhbnl0aGluZyBlbHNlLlxcbjEwODQ6XFx0XFx0ICovXFxuMTA4NTpcXHRcXHRpZiAodW5saWtlbHkocnhfc3RhdHMucnNfc3RhdHVzIFxcdTAwMjYgQVRIOUtfUlhFUlJfQ1JDKSBcXHUwMDI2XFx1MDAyNlxcbjEwODY6XFx0XFx0ICAgIGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKHByaXYsIHJzX2RhdGFsZW4pKSB7XFxuMTA4NzpcXHRcXHRcXHRyeF9zdGF0cy5yc19waHllcnIgPSBBVEg5S19QSFlFUlJfUkFEQVI7XFxuMTA4ODpcXHRcXHRcXHRpZiAoYXRoX2Ntbl9wcm9jZXNzX2ZmdChcXHUwMDI2cHJpdi1cXHUwMDNlc3BlY19wcml2LCBoZHIsIFxcdTAwMjZyeF9zdGF0cyxcXG4xMDg5OlxcdFxcdFxcdFxcdFxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlbWFjdGltZSkpXFxuMTA5MDpcXHRcXHRcXHRcXHRnb3RvIHJ4X25leHQ7XFxuMTA5MTpcXHRcXHR9XFxuMTA5MjpcXHRcXG4xMDkzOlxcdFxcdGlmICghYXRoOWtfY21uX3J4X2FjY2VwdChjb21tb24sIGhkciwgcnhfc3RhdHVzLCBcXHUwMDI2cnhfc3RhdHMsXFxuMTA5NDpcXHRcXHRcXHRcXHRcXHUwMDI2ZGVjcnlwdF9lcnJvciwgcHJpdi1cXHUwMDNlcnhmaWx0ZXIpKVxcbjEwOTU6XFx0XFx0XFx0Z290byByeF9uZXh0O1xcbjEwOTY6XFx0XFxuMTA5NzpcXHRcXHRhdGg5a19jbW5fcnhfc2tiX3Bvc3Rwcm9jZXNzKGNvbW1vbiwgc2tiLCBcXHUwMDI2cnhfc3RhdHMsXFxuMTA5ODpcXHRcXHRcXHRcXHRcXHQgICAgIHJ4X3N0YXR1cywgZGVjcnlwdF9lcnJvcik7XFxuMTA5OTpcXHRcXG4xMTAwOlxcdFxcdGlmIChhdGg5a19jbW5fcHJvY2Vzc19yYXRlKGNvbW1vbiwgaHcsIFxcdTAwMjZyeF9zdGF0cywgcnhfc3RhdHVzKSlcXG4xMTAxOlxcdFxcdFxcdGdvdG8gcnhfbmV4dDtcXG4xMTAyOlxcdFxcbjExMDM6XFx0XFx0cnhfc3RhdHMuaXNfbXliZWFjb24gPSBhdGhfaXNfbXliZWFjb24oY29tbW9uLCBoZHIpO1xcbjExMDQ6XFx0XFx0YXRoOWtfY21uX3Byb2Nlc3NfcnNzaShjb21tb24sIGh3LCBcXHUwMDI2cnhfc3RhdHMsIHJ4X3N0YXR1cyk7XFxuMTEwNTpcXHRcXG4xMTA2OlxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlYmFuZCA9IGFoLVxcdTAwM2VjdXJjaGFuLVxcdTAwM2VjaGFuLVxcdTAwM2ViYW5kO1xcbjExMDc6XFx0XFx0cnhfc3RhdHVzLVxcdTAwM2VmcmVxID0gYWgtXFx1MDAzZWN1cmNoYW4tXFx1MDAzZWNoYW4tXFx1MDAzZWNlbnRlcl9mcmVxO1xcbjExMDg6XFx0XFx0cnhfc3RhdHVzLVxcdTAwM2VhbnRlbm5hID0gcnhfc3RhdHMucnNfYW50ZW5uYTtcXG4xMTA5OlxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlZmxhZyB8PSBSWF9GTEFHX01BQ1RJTUVfRU5EO1xcbjExMTA6XFx0XFxuMTExMTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMTEyOlxcdHJ4X25leHQ6XFxuMTExMzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTExNDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQxOjU4LjE2Mjk4MDcxM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzOTMwNjMxOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBhdGg5a19odGNgIFJYIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGBhdGg5a19odGNgIGRyaXZlcidzIHJlY2VpdmUgcGF0aCByaWdodCBub3cuIFNwZWNpZmljYWxseSwgSSBrbm93IHRoYXQgYGF0aDlrX3J4X3ByZXBhcmVgIGlzIGEga2V5IGZ1bmN0aW9uIGluIHRoYXQgcHJvY2Vzcy4gVGhlIHF1ZXN0aW9uIGlzLCB3aGVyZSBkb2VzIGl0IGZpdCBpbiB0aGUgZ3JhbmQgc2NoZW1lPyBXaGVyZSBpcyBpdCBhY3R1YWxseSAqY2FsbGVkKiBmcm9tIHdpdGhpbiB0aGF0IFJYIHBhdGg/IFRpbWUgdG8gdHJhY2UgaXRzIHVzYWdlIHdpdGhpbiB0aGUgY29kZWJhc2UgYW5kIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGNvbnRleHQgdG8gdHJ1bHkgZ3Jhc3AgaXRzIGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzA5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MjowMC41NTYwNDg3NThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MzI2NzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDlrX3J4X3ByZXBhcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz05Nzk9c3RhdGljIGJvb2wgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW4oc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTk5Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6OTk4OnN0YXRpYyBib29sIGF0aDlrX3J4X3ByZXBhcmUoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy05OTktXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYXRoOWtfaHRjX3J4YnVmICpyeGJ1ZixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz0xMTE5PXZvaWQgYXRoOWtfcnhfdGFza2xldChzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTE0NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MTE0NTpcXHRcXHRpZiAoIWF0aDlrX3J4X3ByZXBhcmUocHJpdiwgcnhidWYsIFxcdTAwMjZyeF9zdGF0dXMpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTExNDYtXFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkocnhidWYtXFx1MDAzZXNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQyOjAwLjYxMjM4MzMyNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDMwMDY4Njc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBvbiBGdXp6aW5nIHRoZSBhdGg5a19odGMgRHJpdmVyIHdpdGggc3l6a2FsbGVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgYGF0aDlrX3J4X3Rhc2tsZXRgIGlzIGNhbGxpbmcgYGF0aDlrX3J4X3ByZXBhcmVgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQgdGFza2xldCBmaXJlcyBvZmYgd2hlbiBVU0IgcGFja2V0cyBjb21lIGluLiBUaGF0J3MgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcywgY2FuIHN5emthbGxlciBldmVuIHJlYWNoIGBhdGg5a19odGNgPyBEb2VzIHN5emthbGxlciBrbm93IGFib3V0IFVTQiB3aXJlbGVzcywgb3IgY2FuIGl0IHBva2UgYXJvdW5kIFVTQiBkZXZpY2VzIGF0IGFsbD9cblxuQWhhISBTeXprYWxsZXIgdXNlcyBgc3l6X3VzYl9jb25uZWN0YCBmb3IgVVNCIGZ1enppbmcsIHNwZWNpZmljYWxseSB3aXRoIHJhdy1nYWRnZXQsIGR1bW15X2hjZCwgb3IgdXNiaXAuIFRoYXQgY2xpY2tzLiBVU0IgZHJpdmVycyBpbiBMaW51eCwgKmVzcGVjaWFsbHkqIHdpcmVsZXNzIG9uZXMgbGlrZSBgYXRoOWtfaHRjYCwgYHJ0bDgxODdgLCBldGMuLCBhcmUgcHJpbWUgdGFyZ2V0cyBmb3IgVVNCIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIFRoZXkncmUgYmFzaWNhbGx5IGJyZWFkLWFuZC1idXR0ZXIuXG5cbk5vdywgaG9sZCBvbi4gR290dGEgbWFrZSBzdXJlIHdlJ3JlIG5vdCB3YXN0aW5nIHRpbWUuIFNlY3Rpb24gMSBhbmQgMiBvZiB0aGlzIHByb21wdCBhcmUgY2xlYXIgb24gcmVhY2hhYmlsaXR5LiBcIlJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFLlwiIElmIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlLCB3ZSdyZSBkb25lLiBObyBmdXp6aW5nLiBMdWNraWx5LCB2aXJ0dWFsIGJ1c2VzIGFyZSBhY2Nlc3NpYmxlISBTcGVjaWZpY2FsbHksIFVTQiBnYWRnZXRzIGFyZSByZWFjaGFibGUsIHNvIHRoZSBVU0IgYnVzIGl0c2VsZiBpcyBhIHZpYWJsZSB0YXJnZXQhXG5cbkFscmlnaHQsIHdlJ3JlIGluIHRoZSBjbGVhciB0byBjb250aW51ZSEgTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIGZvciBgYXRoOWtfaHRjYCwgZXNwZWNpYWxseSBhbnl0aGluZyByZWxhdGVkIHRvIHNwZWN0cmFsIHNjYW5uaW5nIG9yIEZGVCBmZWF0dXJlcy4gTGV0J3Mgc2VlLi4uIEknbGwgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIHRoYXQgZHJpdmVyIHNwZWNpZmljYWxseSwgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgYEFUSDlLX0NPTU1PTl9TUEVDVFJBTGAsIGBBVEg5S19IVENfREVCVUdGU2AsIGFuZCBhbnl0aGluZyBlbHNlIHJlbGV2YW50IGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZ2AuIFRoYXQnbGwgdGVsbCBtZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpYWwgYnVpbGQgb3B0aW9ucyBJIG5lZWQgdG8ga25vdyBhYm91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyODcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDI6MDUuMDQyNDU2MzMxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjExNTE0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVRIOUtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6Mjpjb25maWcgQVRIOUtfSFdcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0zLVxcdHRyaXN0YXRlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6NDpjb25maWcgQVRIOUtfQ09NTU9OXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctNS1cXHR0cmlzdGF0ZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTYtXFx0c2VsZWN0IEFUSF9DT01NT05cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzo3OmNvbmZpZyBBVEg5S19DT01NT05fREVCVUdcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy04LVxcdGJvb2xcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzo5OmNvbmZpZyBBVEg5S19ERlNfREVCVUdGU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTEwLVxcdGRlZl9ib29sIHlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTEyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjEzOmNvbmZpZyBBVEg5S19CVENPRVhfU1VQUE9SVFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE0LVxcdGJvb2wgXFxcIkF0aGVyb3MgYmx1ZXRvb3RoIGNvZXhpc3RlbmNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0yMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoyMTpjb25maWcgQVRIOUtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0yMi1cXHR0cmlzdGF0ZSBcXFwiQXRoZXJvcyA4MDIuMTFuIHdpcmVsZXNzIGNhcmRzIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0zOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzozOTpjb25maWcgQVRIOUtfUENJXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctNDAtXFx0Ym9vbCBcXFwiQXRoZXJvcyBhdGg5ayBQQ0kvUENJZSBidXMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTQ3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjQ4OmNvbmZpZyBBVEg5S19BSEJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy00OS1cXHRib29sIFxcXCJBdGhlcm9zIGF0aDlrIEFIQiBidXMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTU3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjU4OmNvbmZpZyBBVEg5S19ERUJVR0ZTXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctNTktXFx0Ym9vbCBcXFwiQXRoZXJvcyBhdGg5ayBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy02OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzo2OTpjb25maWcgQVRIOUtfU1RBVElPTl9TVEFUSVNUSUNTXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctNzAtXFx0Ym9vbCBcXFwiRGV0YWlsZWQgc3RhdGlvbiBzdGF0aXN0aWNzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctNzUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6NzY6Y29uZmlnIEFUSDlLX1RYOTlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy03Ny1cXHRib29sIFxcXCJBdGhlcm9zIGF0aDlrIFRYOTkgdGVzdGluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctOTUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6OTY6Y29uZmlnIEFUSDlLX0RGU19DRVJUSUZJRURcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy05Ny1cXHRib29sIFxcXCJBdGhlcm9zIERGUyBzdXBwb3J0IGZvciBjZXJ0aWZpZWQgcGxhdGZvcm1zXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTE0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjExNTpjb25maWcgQVRIOUtfRFlOQUNLXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTE2LVxcdGJvb2wgXFxcIkF0aGVyb3MgYXRoOWsgQUNLIHRpbWVvdXQgZXN0aW1hdGlvbiBhbGdvcml0aG1cXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xMjMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTI0OmNvbmZpZyBBVEg5S19XT1dcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xMjUtXFx0Ym9vbCBcXFwiV2FrZSBvbiBXaXJlbGVzcyBMQU4gc3VwcG9ydCAoRVhQRVJJTUVOVEFMKVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTEzMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoxMzI6Y29uZmlnIEFUSDlLX1JGS0lMTFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTEzMy1cXHRib29sIFxcXCJBdGhlcm9zIGF0aDlrIHJma2lsbCBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE0MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoxNDI6Y29uZmlnIEFUSDlLX0NIQU5ORUxfQ09OVEVYVFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE0My1cXHRib29sIFxcXCJDaGFubmVsIENvbnRleHQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE1MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoxNTE6Y29uZmlnIEFUSDlLX1BDT0VNXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTUyLVxcdGJvb2wgXFxcIkF0aGVyb3MgYXRoOWsgc3VwcG9ydCBmb3IgUEMgT0VNIGNhcmRzXFxcIiBpZiBFWFBFUlRcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE1NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoxNTY6Y29uZmlnIEFUSDlLX1BDSV9OT19FRVBST01cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNTctXFx0dHJpc3RhdGUgXFxcIkF0aGVyb3MgYXRoOWsgcGNpIGxvYWRlciBmb3IgRUVQUk9NLWxlc3MgY2hpcHNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTcyOmNvbmZpZyBBVEg5S19IVENcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNzMtXFx0dHJpc3RhdGUgXFxcIkF0aGVyb3MgSFRDIGJhc2VkIHdpcmVsZXNzIGNhcmRzIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xODYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTg3OmNvbmZpZyBBVEg5S19IVENfREVCVUdGU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE4OC1cXHRib29sIFxcXCJBdGhlcm9zIGF0aDlrX2h0YyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xOTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWc6MTk1OmNvbmZpZyBBVEg5S19IV1JOR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE5Ni1cXHRib29sIFxcXCJSYW5kb20gbnVtYmVyIGdlbmVyYXRvciBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMjA1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjIwNjpjb25maWcgQVRIOUtfQ09NTU9OX1NQRUNUUkFMXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMjA3LVxcdGJvb2wgXFxcIkF0aGVyb3MgYXRoOWsvYXRoOWtfaHRjIHNwZWN0cmFsIHNjYW4gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDI6MDUuMDk0NTc4MjQ3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MDgwMzUxMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUgY2hlY2s6XG5cbioqRXhhbWluaW5nIHRoZSBBdGhlcm9zIDlrIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZSBgYXRoOWtgIGRyaXZlciBpcyBjb25maWd1cmVkLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgYEFUSDlLX0hUQ2AgYW5kIGBBVEg5S19DT01NT05fU1BFQ1RSQUxgIG9wdGlvbnMuIEknbGwgb3BlbiB1cCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWdgLiBNeSBtYWluIGZvY3VzIHdpbGwgYmUgYXJvdW5kIHRob3NlIHR3byBzeW1ib2xzLiBJJ2xsIGltbWVkaWF0ZWx5IHN0YXJ0IHNjYW5uaW5nIHRoZSBmaWxlIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcywgdGhlIGRlZmF1bHQgdmFsdWVzIChpZiBhbnkpLCBhbmQgdGhlIGhlbHAgdGV4dCBhc3NvY2lhdGVkIHdpdGggdGhlc2UgY29uZmlndXJhdGlvbnMuIEknbSBsb29raW5nIGZvciB3aGVyZSB0aGV5J3JlIGRlZmluZWQgd2l0aGluIHRoZSBoaWVyYXJjaHksIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBzdXBwb3J0LCBhbmQgd2hhdCBmZWF0dXJlcyB0aGV5IGVuYWJsZSBvciBkaXNhYmxlLiBJJ2xsIHBheSBhdHRlbnRpb24gdG8gYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBvcHRpb25zIChlLmcuLCBpZiBgQVRIOUtfSFRDYCByZXF1aXJlcyBhbm90aGVyIHN5bWJvbCB0byBiZSBlbmFibGVkLCBJIG5lZWQgdG8gbm90ZSB0aGF0KS4gQWxzbywgSSdsbCByZXZpZXcgYW55IGNvbmRpdGlvbmFsIGxvZ2ljLCBsaWtlIGBpZmAgc3RhdGVtZW50cywgYXJvdW5kIHRoZXNlIHN5bWJvbHMg4oCTIHRoYXQgd2lsbCB0ZWxsIG1lIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyB0aGV5J3JlIHNlbGVjdGFibGUuIFVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGVzZSBjb25maWd1cmF0aW9ucyBhZmZlY3QgdGhlIGRyaXZlcidzIGJlaGF2aW9yIGFuZCBwZXJmb3JtYW5jZS4gVGhpcyB3aWxsIGhlbHAgbWUgaWYgSSBuZWVkIHRvIGRpYWdub3NlIGFuIGlzc3VlIHdpdGggdGhpcyBkcml2ZXIgbGF0ZXIgb3IgdHVuZSBpdCBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjg0OSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQyOjA3LjkwMjYxNzk0MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTcwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTcwOlxcdFxcdCAgSWYgdW5zdXJlIHNheSBOLlxcbiAxNzE6XFx0XFxuIDE3MjpcXHRjb25maWcgQVRIOUtfSFRDXFxuIDE3MzpcXHRcXHR0cmlzdGF0ZSBcXFwiQXRoZXJvcyBIVEMgYmFzZWQgd2lyZWxlc3MgY2FyZHMgc3VwcG9ydFxcXCJcXG4gMTc0OlxcdFxcdGRlcGVuZHMgb24gVVNCIFxcdTAwMjZcXHUwMDI2IE1BQzgwMjExXFxuIDE3NTpcXHRcXHRzZWxlY3QgTUFDODAyMTFfTEVEUyBpZiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1NQUM4MDIxMVxcbiAxNzY6XFx0XFx0c2VsZWN0IEFUSDlLX0hXXFxuIDE3NzpcXHRcXHRzZWxlY3QgQVRIOUtfQ09NTU9OXFxuIDE3ODpcXHRcXHRoZWxwXFxuIDE3OTpcXHRcXHQgIFN1cHBvcnQgZm9yIEF0aGVyb3MgSFRDIGJhc2VkIGNhcmRzLlxcbiAxODA6XFx0XFx0ICBDaGlwc2V0cyBzdXBwb3J0ZWQ6IEFSOTI3MVxcbiAxODE6XFx0XFxuIDE4MjpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uOlxcbiAxODM6XFx0XFx0ICBodHRwczovL3dpcmVsZXNzLndpa2kua2VybmVsLm9yZy9lbi91c2Vycy9Ecml2ZXJzL2F0aDlrX2h0Y1xcbiAxODQ6XFx0XFxuIDE4NTpcXHRcXHQgIFRoZSBidWlsdCBtb2R1bGUgd2lsbCBiZSBhdGg5a19odGMuXFxuIDE4NjpcXHRcXG4gMTg3OlxcdGNvbmZpZyBBVEg5S19IVENfREVCVUdGU1xcbiAxODg6XFx0XFx0Ym9vbCBcXFwiQXRoZXJvcyBhdGg5a19odGMgZGVidWdnaW5nXFxcIlxcbiAxODk6XFx0XFx0ZGVwZW5kcyBvbiBBVEg5S19IVEMgXFx1MDAyNlxcdTAwMjYgREVCVUdfRlNcXG4gMTkwOlxcdFxcdHNlbGVjdCBBVEg5S19DT01NT05fREVCVUdcXG4gMTkxOlxcdFxcdGhlbHBcXG4gMTkyOlxcdFxcdCAgU2F5IFksIGlmIHlvdSBuZWVkIGFjY2VzcyB0byBhdGg5a19odGMncyBzdGF0aXN0aWNzLlxcbiAxOTM6XFx0XFx0ICBBcyB3ZWxsIGFzIGFjY2VzcyB0byB0aGUgRkZUL3NwZWN0cmFsIGRhdGEuXFxuIDE5NDpcXHRcXG4gMTk1OlxcdGNvbmZpZyBBVEg5S19IV1JOR1xcbiAxOTY6XFx0XFx0Ym9vbCBcXFwiUmFuZG9tIG51bWJlciBnZW5lcmF0b3Igc3VwcG9ydFxcXCJcXG4gMTk3OlxcdFxcdGRlcGVuZHMgb24gQVRIOUsgXFx1MDAyNlxcdTAwMjYgKEhXX1JBTkRPTSA9IHkgfHwgSFdfUkFORE9NID0gQVRIOUspXFxuIDE5ODpcXHRcXHRkZWZhdWx0IG5cXG4gMTk5OlxcdFxcdGhlbHBcXG4gMjAwOlxcdFxcdCAgVGhpcyBvcHRpb24gaW5jb3Jwb3JhdGVzIHRoZSBBREMgcmVnaXN0ZXIgb3V0cHV0IGFzIGEgc291cmNlIG9mXFxuIDIwMTpcXHRcXHQgIHJhbmRvbW5lc3MgaW50byBMaW51eCBlbnRyb3B5IHBvb2wgKC9kZXYvdXJhbmRvbSBhbmQgL2Rldi9yYW5kb20pXFxuIDIwMjpcXHRcXG4gMjAzOlxcdFxcdCAgU2F5IFksIGZlZWRzIHRoZSBlbnRyb3B5IGRpcmVjdGx5IGZyb20gdGhlIFdpRmkgZHJpdmVyIHRvIHRoZSBpbnB1dFxcbiAyMDQ6XFx0XFx0ICBwb29sLlxcbiAyMDU6XFx0XFxuIDIwNjpcXHRjb25maWcgQVRIOUtfQ09NTU9OX1NQRUNUUkFMXFxuIDIwNzpcXHRcXHRib29sIFxcXCJBdGhlcm9zIGF0aDlrL2F0aDlrX2h0YyBzcGVjdHJhbCBzY2FuIHN1cHBvcnRcXFwiXFxuIDIwODpcXHRcXHRkZXBlbmRzIG9uIEFUSDlLX0RFQlVHRlMgfHwgQVRIOUtfSFRDX0RFQlVHRlNcXG4gMjA5OlxcdFxcdHNlbGVjdCBSRUxBWVxcbiAyMTA6XFx0XFx0ZGVmYXVsdCBuXFxuIDIxMTpcXHRcXHRoZWxwXFxuIDIxMjpcXHRcXHQgIFNheSBZIHRvIGVuYWJsZSBhY2Nlc3MgdG8gdGhlIEZGVC9zcGVjdHJhbCBkYXRhIHZpYSBkZWJ1Z2ZzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MjowNy45MDI3MjI0MjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIyNTEzMDMyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBhdGg5a19odGNgIENvZGViYXNlKipcblxuT2theSwgc28gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIGBzcGVjX3ByaXZgIGFuZCBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAgd2l0aGluIHRoZSBgYXRoOWtfaHRjYCBkcml2ZXIuIFNlZW1zIGxpa2UgdGhlc2UgYXJlIHR3byBjcml0aWNhbCBjb21wb25lbnRzIHRoYXQgbGlrZWx5IHdvcmsgdG9nZXRoZXIgaW4gc29tZSB3YXkgcmVsYXRlZCB0byBzcGVjdHJhbCBhbmFseXNpcyBvciBwcm9jZXNzaW5nIHdpdGhpbiB0aGUgQXRoZXJvcyBXaS1GaSBjaGlwc2V0J3MgSFRDIChIb3N0IFRyYW5zcG9ydCBDb250cm9sKSBpbnRlcmZhY2UuIE15IGZpcnN0IHN0ZXAgaXMgdG8gcXVpY2tseSBsb2NhdGUgd2hlcmUgdGhlc2UgYXJlIHVzZWQuIExldCdzIGZpcmUgdXAgYSBncmVwIGNvbW1hbmQgYW5kIHNlZSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgb3IgdmFyaWFibGVzIGFwcGVhciBpbiB0aGUgY29kZWJhc2UuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGJ1aWxkIGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgc3lzdGVtIGZsb3cuIEZyb20gdGhlcmUgSSdsbCBiZSBhYmxlIHRvIHRyYWNlIHRoZWlyIHVzYWdlLCB1bmRlcnN0YW5kIHRoZSBkYXRhIHRoZXkgYXJlIGhhbmRsaW5nLCBhbmQgc2VlIHRoZSBsb2dpY2FsIGNvbm5lY3Rpb25zIGJldHdlZW4gdGhlc2UgdHdvIHBhcnRzIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODk4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MjoxMC4xMjc4NTY0NzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMDY4Mjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aF9jbW5fcHJvY2Vzc19mZnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM9NDQ5PWF0aF9jbW5faXNfZmZ0X2J1Zl9mdWxsKHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy00NjgtLyogcmV0dXJucyAxIGlmIHRoaXMgd2FzIGEgc3BlY3RyYWwgZnJhbWUsIGV2ZW4gaWYgbm90IGhhbmRsZWQuICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjQ2OTppbnQgYXRoX2Ntbl9wcm9jZXNzX2ZmdChzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTQ3MC1cXHRcXHQgICAgc3RydWN0IGF0aF9yeF9zdGF0dXMgKnJzLCB1NjQgdHNmKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTY4My19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjY4NDpFWFBPUlRfU1lNQk9MKGF0aF9jbW5fcHJvY2Vzc19mZnQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy02ODUtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg9MTc3PWludCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNzktXFx0XFx0XFx0ICAgICAgIGVudW0gc3BlY3RyYWxfbW9kZSBzcGVjdHJhbF9tb2RlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTgwOmludCBhdGhfY21uX3Byb2Nlc3NfZmZ0KHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdiwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTgxLVxcdFxcdCAgICBzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnMsIHU2NCB0c2YpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oPTE5Mj1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fdHJpZ2dlcihzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE5Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTk3OnN0YXRpYyBpbmxpbmUgaW50IGF0aF9jbW5fcHJvY2Vzc19mZnQoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xOTgtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz05OTg9c3RhdGljIGJvb2wgYXRoOWtfcnhfcHJlcGFyZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTA3My1cXHRcXHQvKiBUT0RPOiBOb3QgdXNpbmcgREZTIHByb2Nlc3Npbmcgbm93LiAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzoxMDc0OlxcdFxcdGlmIChhdGhfY21uX3Byb2Nlc3NfZmZ0KFxcdTAwMjZwcml2LVxcdTAwM2VzcGVjX3ByaXYsIGhkcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTA3NS1cXHRcXHRcXHRcXHQgICAgXFx1MDAyNnJ4X3N0YXRzLCByeF9zdGF0dXMtXFx1MDAzZW1hY3RpbWUpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTA4Ny1cXHRcXHRyeF9zdGF0cy5yc19waHllcnIgPSBBVEg5S19QSFlFUlJfUkFEQVI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjEwODg6XFx0XFx0aWYgKGF0aF9jbW5fcHJvY2Vzc19mZnQoXFx1MDAyNnByaXYtXFx1MDAzZXNwZWNfcHJpdiwgaGRyLCBcXHUwMDI2cnhfc3RhdHMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEwODktXFx0XFx0XFx0XFx0XFx0cnhfc3RhdHVzLVxcdTAwM2VtYWN0aW1lKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmM9ODA2PXN0YXRpYyBpbnQgYXRoOWtfcnhfc2tiX3ByZXByb2Nlc3Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jLTg4My1cXHRcXHR9IGVsc2UgaWYgKHNjLVxcdTAwM2VzcGVjX3ByaXYuc3BlY3RyYWxfbW9kZSAhPSBTUEVDVFJBTF9ESVNBQkxFRCBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmM6ODg0OlxcdFxcdFxcdCAgIGF0aF9jbW5fcHJvY2Vzc19mZnQoXFx1MDAyNnNjLVxcdTAwM2VzcGVjX3ByaXYsIGhkciwgcnhfc3RhdHMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYy04ODUtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHJ4X3N0YXR1cy1cXHUwMDNlbWFjdGltZSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDI6MTAuMTg3OTMyMjM0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNTMzMzQwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGNvbW1vbi1zcGVjdHJhbC5vYCBnZXRzIGJ1aWx0LCBzbyBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGVgLiBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSwgc28gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIHR5cGljYWwgTWFrZWZpbGUgY29uc3RydWN0cyDigJMgb2JqZWN0IGZpbGUgZGVwZW5kZW5jaWVzLCBzb3VyY2UgZmlsZSBsaXN0cywgY29tcGlsZXIgZmxhZ3MsIGFuZCB0aGUgbGlrZS4gSXQgc2hvdWxkIGJlIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBwcm9jZXNzLCBidXQgSSB3YW50IHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgZXZlcnkgc3RlcC4gVGhlIGF0aDlrIGRyaXZlciBpcyBjcml0aWNhbCwgYW5kIGtub3dpbmcgaG93IGl0cyBjb21wb25lbnRzIGFyZSBhc3NlbWJsZWQgaXMgdml0YWwgZm9yIGRlYnVnZ2luZyBvciBjdXN0b21pemF0aW9uLiBUaGlzIGlzIGEgc3RhbmRhcmQgcHJvY2VkdXJlOyBJJ2xsIGlkZW50aWZ5IHRoZSByZWxldmFudCBydWxlcyBvciB2YXJpYWJsZXMgcmVsYXRlZCB0byBgY29tbW9uLXNwZWN0cmFsLm9gIGFuZCB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIGJhY2sgdG8gdGhlaXIgc291cmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTI4MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQyOjEyLjQ0MTI3MDA3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDgyMTM0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb21tb24tc3BlY3RyYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZT02NT1hdGg5a19jb21tb24tJChDT05GSUdfQVRIOUtfQ09NTU9OX0RFQlVHKSArPSBjb21tb24tZGVidWcub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZTo2NjphdGg5a19jb21tb24tJChDT05GSUdfQVRIOUtfQ09NTU9OX1NQRUNUUkFMKSArPSBjb21tb24tc3BlY3RyYWwub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZS02Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uaC0yNi0jaW5jbHVkZSBcXFwiY29tbW9uLWRlYnVnLmhcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5oOjI3OiNpbmNsdWRlIFxcXCJjb21tb24tc3BlY3RyYWwuaFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmgtMjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQyOjEyLjQ5NjEwMTExNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTY4MDMyMzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDUkMgRXJyb3IgSGFuZGxpbmcgaW4gYXRoOWtfaHRjIGZvciBTcGVjdHJhbCBTYW1wbGVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgdGhlIGBhdGg5a19odGNgIFVTQiBXaS1GaSBkcml2ZXIuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBmb2N1c2VkIG9uIGhvdyBDUkMgZXJyb3JzIGFyZSBoYW5kbGVkIGluIGBhdGg5a19yeF9wcmVwYXJlYCwgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIHJlY2VpdmVkIGRhdGEgbGVuZ3RoIG1hdGNoZXMgdGhhdCBvZiBhIHNwZWN0cmFsIHNhbXBsZS5cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGNvZGUgaW50cm9kdWNlcyBhIGNoZWNrLCBgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW5gLCB0byBkZXRlcm1pbmUgaWYgYSBwYXJ0aWN1bGFyIHBhY2tldCBsZW5ndGggY29ycmVzcG9uZHMgdG8gYSBzcGVjdHJhbCBzYW1wbGUuIFRoaXMgZnVuY3Rpb24gZGVwZW5kcyBvbiB3aGV0aGVyIHNwZWN0cmFsIG1vZGUgaXMgZW5hYmxlZCwgYW5kIHRoZSBjaGFubmVsIHR5cGUgdG8gZGV0ZXJtaW5lIHRoZSBleHBlY3RlZCBGRlQgbGVuZ3RoLiBJIHNlZSB0aGF0IGl0IHVzZXMgYGNmZzgwMjExX2dldF9jaGFuZGVmX3R5cGVgIHRvIGdyYWIgY2hhbm5lbCB0eXBlLCB3aGljaCBpbXBhY3RzIHRoZSBgZmZ0X2xlbmAgY2FsY3VsYXRpb24uIFRoZSBjb21wYXJpc29uIGBsZW4gKyAxIFx1MDAzZT0gZmZ0X2xlbiBcdTAwMjZcdTAwMjYgbGVuIFx1MDAzYz0gZmZ0X2xlbiArIDJgIGlzIGludGVyZXN0aW5nOyBpdCBhY2NvdW50cyBmb3Igc29tZSBwb3RlbnRpYWwgbGVuZ3RoIHZhcmlhdGlvbnMsIHBlcmhhcHMgcmVsYXRlZCB0byBwYWRkaW5nIG9yIGFsaWdubWVudC5cblxuVGhlIGNydWNpYWwgYml0LCB0aGUgY2hlY2sgYHVubGlrZWx5KHJ4X3N0YXRzLnJzX3N0YXR1cyBcdTAwMjYgQVRIOUtfUlhFUlJfQ1JDKWAgaXMgd2hhdCBjYXRjaGVzIG15IGV5ZS4gSXQncyB1c2luZyBgdW5saWtlbHlgLCBzbyB0aGUgQ1JDIGVycm9yIHBhdGggaXMgYXNzdW1lZCB0byBiZSBsZXNzIGZyZXF1ZW50LiBJZiBhIENSQyBlcnJvciBpcyBmbGFnZ2VkICphbmQqIHRoZSBsZW5ndGggbWF0Y2hlcyBhIHNwZWN0cmFsIHNhbXBsZSwgdGhlIGNvZGUgc2V0cyBgcnhfc3RhdHMucnNfcGh5ZXJyYCB0byBgQVRIOUtfUEhZRVJSX1JBREFSYC4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCByYWRhciBkZXRlY3Rpb24gc2NlbmFyaW8sIHdoaWNoIGlzIGZhc2NpbmF0aW5nLiBUaGVuLCBpdCBjYWxscyBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAuIFRoaXMgaXMgdGhlIGltcG9ydGFudCBwYXJ0OyBpdCBsb29rcyBsaWtlIHRoaXMgaXMgd2hlcmUgdGhlIEZGVCBkYXRhIGlzIGFjdHVhbGx5IHByb2Nlc3NlZC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYWxsIHRoZXNlIGZ1bmN0aW9ucyBhbmQgZGF0YSBmbG93cy4gSSBzZWUgYm90aCBgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW5gIGFuZCBgYXRoOWtfcnhfcHJlcGFyZWAgYXJlIHN0YXRpYyBmdW5jdGlvbnMgaW4gYGh0Y19kcnZfdHhyeC5jYCwgd2hpY2ggdGVsbHMgbWUgdGhleSBhcmUgaW50ZXJuYWwgdG8gdGhhdCBjb21waWxhdGlvbiB1bml0LiBJIGFsc28gbmVlZCB0byBrbm93IHdoYXQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIG9yIGNhbGxlcnMgdGhlcmUgbWlnaHQgYmUsIGFuZCwgaWYgYGF0aF9jbW5fcHJvY2Vzc19mZnRgIGlzIGV4cG9ydGVkLlxuXG5BbHJpZ2h0LCB0aGUgY29kZSByZWZlcmVuY2VzIGBhdGg5a19yeF90YXNrbGV0YCwgYW5kIGl0IGNhbGxzIGBhdGg5a19yeF9wcmVwYXJlYC4gR29vZCwgSSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG5vdy4gYGF0aF9jbW5fcHJvY2Vzc19mZnRgIGlzIGNhbGxlZCAqaW5zaWRlKiB0aGlzIGJsb2NrLCBhbmQgdGhhdCdzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byB0cmFjZSBob3cgcGFja2V0cyBhcmUgcmVjZWl2ZWQgYW5kIHByb2Nlc3NlZCBieSBgYXRoOWtfaHRjYC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGhvdyBgYXRoOWtfcnhfdGFza2xldGAgaXMgdHJpZ2dlcmVkIGFuZCB3aGF0IGl0J3MgdWx0aW1hdGVseSBkb2luZy4gSSBhbHNvIG5lZWQgdG8ga25vdyBob3cgcGFja2V0cyBhcmUgcGFzc2VkIGludG8gdGhlIGRyaXZlci4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlcmUgaXNuJ3Qgc29tZSBzaWRlIGVmZmVjdCBvciBvdGhlciB1bmludGVuZGVkIGNvbnNlcXVlbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTcwMCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MjoxNy40NjQxMzg2MTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2OTAzOTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDlrX3J4X3Rhc2tsZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaD01OTg9dm9pZCBhdGg5a19ob3N0X3J4X2luaXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmg6NTk5OnZvaWQgYXRoOWtfcnhfdGFza2xldChzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaC02MDAtdTMyIGF0aDlrX2h0Y19jYWxjcnhmaWx0ZXIoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2luaXQuYz02MDY9c3RhdGljIGludCBhdGg5a19pbml0X3ByaXYoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfaW5pdC5jLTY0Ny1cXHRtdXRleF9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2VodGNfcG1fbG9jayk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfaW5pdC5jOjY0ODpcXHR0YXNrbGV0X3NldHVwKFxcdTAwMjZwcml2LVxcdTAwM2VyeF90YXNrbGV0LCBhdGg5a19yeF90YXNrbGV0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmMtNjQ5LVxcdHRhc2tsZXRfc2V0dXAoXFx1MDAyNnByaXYtXFx1MDAzZXR4X2ZhaWxlZF90YXNrbGV0LCBhdGg5a190eF9mYWlsZWRfdGFza2xldCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM9OTk4PXN0YXRpYyBib29sIGF0aDlrX3J4X3ByZXBhcmUoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTExMTgtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjExMTk6dm9pZCBhdGg5a19yeF90YXNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTEyMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQyOjE3LjUyMTA0ODk3OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzA1NzUwNDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgQXRoZXJvcyBXaXJlbGVzcyBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBJIHNlZSB3ZSBoYXZlIGBBVEg5S19IVENgLCB3aGljaCBzZWVtcyB0byBiZSBlc3NlbnRpYWwgZm9yIEF0aGVyb3MgSFRDLWJhc2VkIHdpcmVsZXNzIGNhcmRzIGFuZCBoaW5nZXMgb24gYm90aCBVU0IgYW5kIHRoZSBNQUM4MDIxMSBmcmFtZXdvcmsuIFRoZW4gdGhlcmUncyBgQVRIOUtfSFRDX0RFQlVHRlNgLCBhIGRlYnVnLWZvY3VzZWQgb3B0aW9uIGRlcGVuZGVudCBvbiBgQVRIOUtfSFRDYCBhbmQgZGVidWcgZmlsZSBzeXN0ZW0gc3VwcG9ydC4gTm93LCBgQVRIOUtfQ09NTU9OX1NQRUNUUkFMYCBkZXBlbmRzIG9uIGVpdGhlciB0aGUgYEFUSDlLX0RFQlVHRlNgIG9yIGBBVEg5S19IVENfREVCVUdGU2Agb3B0aW9ucywgd2hpY2ggbWFrZXMgc2Vuc2UuXG5cbkJ1dCB3YWl0IGEgbWludXRlLCB0aGUgc3RydWN0dXJlIHRoYXQncyBnb3QgbWUgY29uZnVzZWQgaXMgYHNwZWNfcHJpdmAgYW5kIGBhdGhfY21uX3Byb2Nlc3NfZmZ0YD8gVGhhdCdzIHdoYXQgSSdkIGV4cGVjdCB0byBzZWUgd2l0aCB0aGUgYGNvbW1vbi1zcGVjdHJhbGAgY29uZmlnIGFjdGl2ZS4gV2l0aG91dCBgQVRIOUtfQ09NTU9OX1NQRUNUUkFMYCBlbmFibGVkLCB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGVzZSBzcGVjdHJhbCBhbmFseXNpcyBjb21wb25lbnRzPyBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYGNvbW1vbi1zcGVjdHJhbC5oYCB0byBzZWUgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIsIG9yIHdoZXRoZXIgdGhleSdyZSBldmVuIHN1cHBvc2VkIHRvIGJlIHByZXNlbnQgd2l0aG91dCB0aGUgc3BlY3RyYWwgYW5hbHlzaXMgZmVhdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NTA5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQyOjIyLjgyNjgwNDM4MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEwNTkyODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3BlY3RyYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MjA6I2luY2x1ZGUgXFxcIi4uL3NwZWN0cmFsX2NvbW1vbi5oXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0yMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MjI6LyogZW51bSBzcGVjdHJhbF9tb2RlOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0yMy0gKlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoyNDogKiBAU1BFQ1RSQUxfRElTQUJMRUQ6IHNwZWN0cmFsIG1vZGUgaXMgZGlzYWJsZWRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMjUtICogQFNQRUNUUkFMX0JBQ0tHUk9VTkQ6IGhhcmR3YXJlIHNlbmRzIHNhbXBsZXMgd2hlbiBpdCBpcyBub3QgYnVzeSB3aXRoXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTI2LSAqXFx0c29tZXRoaW5nIGVsc2UuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjI3OiAqIEBTUEVDVFJBTF9NQU5VQUw6IHNwZWN0cmFsIHNjYW4gaXMgZW5hYmxlZCwgdHJpZ2dlcmluZyBmb3Igc2FtcGxlc1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0yOC0gKlxcdGlzIHBlcmZvcm1lZCBtYW51YWxseS5cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0zMS0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MzI6ZW51bSBzcGVjdHJhbF9tb2RlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMzMtXFx0U1BFQ1RSQUxfRElTQUJMRUQgPSAwLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTM5LSNkZWZpbmUgU1BFQ1RSQUxfU0NBTl9CSVRNQVNLXFx0XFx0MHgxMFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDo0MDovKiBSYWRhciBpbmZvIHBhY2tldCBmb3JtYXQsIHVzZWQgZm9yIERGUyBhbmQgc3BlY3RyYWwgZm9ybWF0cy4gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtNDEtc3RydWN0IGF0aF9yYWRhcl9pbmZvIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC00Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6NDc6LyogVGhlIEhUMjAgc3BlY3RyYWwgZGF0YSBoYXMgNCBieXRlcyBvZiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGF0IGl0J3MgZW5kLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC00OC0gKlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oPTk3PXN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC05OC1cXHRzdHJ1Y3QgYXRoX2h3ICphaDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6OTk6XFx0LyogcmVsYXkoZnMpIGNoYW5uZWwgZm9yIHNwZWN0cmFsIHNjYW4gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTAwLVxcdHN0cnVjdCByY2hhbiAqcmZzX2NoYW5fc3BlY19zY2FuO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxMDE6XFx0ZW51bSBzcGVjdHJhbF9tb2RlIHNwZWN0cmFsX21vZGU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTEwMi1cXHRzdHJ1Y3QgYXRoX3NwZWNfc2NhbiBzcGVjX2NvbmZpZztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xMTEtLyogZ3JhYnMgdGhlIG1heCBtYWduaXR1ZGUgZnJvbSB0aGUgYWxsL3VwcGVyL2xvd2VyIGJpbnMgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTEyOnN0YXRpYyBpbmxpbmUgdTE2IHNwZWN0cmFsX21heF9tYWduaXR1ZGUodTggKmJpbnMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTExMy17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTE5LS8qIHJldHVybiB0aGUgbWF4IG1hZ25pdHVkZSBmcm9tIHRoZSBhbGwvdXBwZXIvbG93ZXIgYmlucyAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxMjA6c3RhdGljIGlubGluZSB1OCBzcGVjdHJhbF9tYXhfaW5kZXgodTggKmJpbnMsIGludCBudW1fYmlucylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTIxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNDctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjE0ODpzdGF0aWMgaW5saW5lIHU4IHNwZWN0cmFsX21heF9pbmRleF9odDQwKHU4ICpiaW5zKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNDkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE1MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTUyOlxcdGlkeCA9IHNwZWN0cmFsX21heF9pbmRleChiaW5zLCBTUEVDVFJBTF9IVDIwXzQwX05VTV9CSU5TKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTUzLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE1OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTYwOnN0YXRpYyBpbmxpbmUgdTggc3BlY3RyYWxfbWF4X2luZGV4X2h0MjAodTggKmJpbnMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE2MS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjE2MjpcXHRyZXR1cm4gc3BlY3RyYWxfbWF4X2luZGV4KGJpbnMsIFNQRUNUUkFMX0hUMjBfTlVNX0JJTlMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNjMtfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE2NS0vKiByZXR1cm4gdGhlIGJpdG1hcCB3ZWlnaHQgZnJvbSB0aGUgYWxsL3VwcGVyL2xvd2VyIGJpbnMgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTY2OnN0YXRpYyBpbmxpbmUgdTggc3BlY3RyYWxfYml0bWFwX3dlaWdodCh1OCAqYmlucylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTY3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNzEtI2lmZGVmIENPTkZJR19BVEg5S19DT01NT05fU1BFQ1RSQUxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTcyOnZvaWQgYXRoOWtfY21uX3NwZWN0cmFsX2luaXRfZGVidWcoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LCBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3BoeSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjE3Mzp2b2lkIGF0aDlrX2Ntbl9zcGVjdHJhbF9kZWluaXRfZGVidWcoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTc0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxNzU6dm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE3Ni1cXHRcXHRcXHRcXHQgc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTc3OmludCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTc4LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjE3OTpcXHRcXHRcXHQgICAgICAgZW51bSBzcGVjdHJhbF9tb2RlIHNwZWN0cmFsX21vZGUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODAtaW50IGF0aF9jbW5fcHJvY2Vzc19mZnQoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE4Mi0jZWxzZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxODM6c3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2Ntbl9zcGVjdHJhbF9pbml0X2RlYnVnKHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTg0LVxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3BoeSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjE4ODpzdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfY21uX3NwZWN0cmFsX2RlaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE4OS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTkxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxOTI6c3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXIoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTkzLVxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDI6MjIuODc3ODY5NzY5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxNDQ1Nzk3MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBhdGg5ayBDb21tb24gU3BlY3RyYWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgY29uZmlndXJhdGlvbiBzdGFuZHBvaW50LiBJdCBsb29rcyBsaWtlIGBDT05GSUdfQVRIOUtfQ09NTU9OX1NQRUNUUkFMYCBpcyB0aGUga2V5IGhlcmUuIElmIHRoYXQncyBlbmFibGVkLCB0aGUgZnVsbCBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAgZnVuY3Rpb24gaW4gYGNvbW1vbi1zcGVjdHJhbC5jYCBnZXRzIGFjdGl2YXRlZC4gTWFrZXMgc2Vuc2UsIHRoYXQncyB3aGF0IEknZCBleHBlY3QuIEhvd2V2ZXIsIGlmIGl0J3MgZGlzYWJsZWQsIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAgaXMganVzdCBhIHN0dWIsIGVmZmVjdGl2ZWx5IHNraXBwaW5nIHRoZSBGRlQgZnJhbWUgcHJvY2Vzc2luZy4gTm93LCB0aGUgZGVwZW5kZW5jaWVzIGFyZSB3aGF0J3MgaW1wb3J0YW50LiBgQ09ORklHX0FUSDlLX0NPTU1PTl9TUEVDVFJBTGAgZGVwZW5kcyBvbiBlaXRoZXIgYEFUSDlLX0RFQlVHRlNgIG9yIGBBVEg5S19IVENfREVCVUdGU2AuIERpdmluZyBkZWVwZXIsIGBDT05GSUdfQVRIOUtfSFRDX0RFQlVHRlNgIGluIHR1cm4gZGVwZW5kcyBvbiBgQVRIOUtfSFRDYCAqYW5kKiBgREVCVUdfRlNgLiBBbmQgYEFUSDlLX0hUQ2AgaXRzZWxmIHJlbGllcyBvbiBgVVNCYCBhbmQgYE1BQzgwMjExYC4gU28sIGl0J3MgYSBjaGFpbiwgZWFjaCBjb25maWd1cmF0aW9uIGl0ZW0gaXMgZGVwZW5kZW50IG9uIHRoZSBwcmlvci5cblxuSSBzaG91bGQgcHJvYmFibHkgdmVyaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbiBpdHNlbGYgbm93LiBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBmb3IgYGF0aF9jbW5fcHJvY2Vzc19mZnRgIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmNgIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0J3MgYmVpbmcgZG9uZSB3aGVuIGVuYWJsZWQuIEtub3dpbmcgdGhlIGV4YWN0IGNvZGUgYmVpbmcgZXhlY3V0ZWQsIGJhc2VkIG9uIHRoZXNlIGNvbmRpdGlvbnMsIHdpbGwgZ2l2ZSBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDExMiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MjoyOC4wMjI0NTQ1OTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NjUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NjU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQ2NjpcXHR9XFxuIDQ2NzpcXHRcXG4gNDY4OlxcdC8qIHJldHVybnMgMSBpZiB0aGlzIHdhcyBhIHNwZWN0cmFsIGZyYW1lLCBldmVuIGlmIG5vdCBoYW5kbGVkLiAqL1xcbiA0Njk6XFx0aW50IGF0aF9jbW5fcHJvY2Vzc19mZnQoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxcbiA0NzA6XFx0XFx0XFx0ICAgIHN0cnVjdCBhdGhfcnhfc3RhdHVzICpycywgdTY0IHRzZilcXG4gNDcxOlxcdHtcXG4gNDcyOlxcdFxcdHU4IHNhbXBsZV9idWZbU1BFQ1RSQUxfU0FNUExFX01BWF9MRU5dID0gezB9O1xcbiA0NzM6XFx0XFx0c3RydWN0IGF0aF9odyAqYWggPSBzcGVjX3ByaXYtXFx1MDAzZWFoO1xcbiA0NzQ6XFx0XFx0c3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzcGVjX3ByaXYtXFx1MDAzZWFoKTtcXG4gNDc1OlxcdFxcdHN0cnVjdCBhdGhfc29mdGMgKnNjID0gY29tbW9uLVxcdTAwM2Vwcml2O1xcbiA0NzY6XFx0XFx0dTggbnVtX2JpbnMsICp2ZGF0YSA9ICh1OCAqKWhkcjtcXG4gNDc3OlxcdFxcdHN0cnVjdCBhdGhfcmFkYXJfaW5mbyAqcmFkYXJfaW5mbztcXG4gNDc4OlxcdFxcdGludCBsZW4gPSBycy1cXHUwMDNlcnNfZGF0YWxlbjtcXG4gNDc5OlxcdFxcdGludCBpO1xcbiA0ODA6XFx0XFx0aW50IGdvdF9zbGVuID0gMDtcXG4gNDgxOlxcdFxcdHU4ICAqc2FtcGxlX3N0YXJ0O1xcbiA0ODI6XFx0XFx0aW50IHNhbXBsZV9ieXRlcyA9IDA7XFxuIDQ4MzpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gNDg0OlxcdFxcdHUxNiBmZnRfbGVuLCBzYW1wbGVfbGVuLCBmcmVxID0gYWgtXFx1MDAzZWN1cmNoYW4tXFx1MDAzZWNoYW4tXFx1MDAzZWNlbnRlcl9mcmVxO1xcbiA0ODU6XFx0XFx0ZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFuX3R5cGU7XFxuIDQ4NjpcXHRcXHRhdGhfY21uX2ZmdF9pZHhfdmFsaWRhdG9yICpmZnRfaWR4X3ZhbGlkYXRvcjtcXG4gNDg3OlxcdFxcdGF0aF9jbW5fZmZ0X3NhbXBsZV9oYW5kbGVyICpmZnRfaGFuZGxlcjtcXG4gNDg4OlxcdFxcbiA0ODk6XFx0XFx0LyogQVI5MjgwIGFuZCBiZWZvcmUgcmVwb3J0IHZpYSBBVEg5S19QSFlFUlJfUkFEQVIsIEFSOTN4eCBhbmQgbmV3ZXJcXG4gNDkwOlxcdFxcdCAqIHZpYSBBVEg5S19QSFlFUlJfU1BFQ1RSQUwuIEhhdmVuJ3Qgc2VlbiBBVEg5S19QSFlFUlJfRkFMU0VfUkFEQVJfRVhUXFxuIDQ5MTpcXHRcXHQgKiB5ZXQsIGJ1dCB0aGlzIGlzIHN1cHBvc2VkIHRvIGJlIHBvc3NpYmxlIGFzIHdlbGwuXFxuIDQ5MjpcXHRcXHQgKi9cXG4gNDkzOlxcdFxcdGlmIChycy1cXHUwMDNlcnNfcGh5ZXJyICE9IEFUSDlLX1BIWUVSUl9SQURBUiBcXHUwMDI2XFx1MDAyNlxcbiA0OTQ6XFx0XFx0ICAgIHJzLVxcdTAwM2Vyc19waHllcnIgIT0gQVRIOUtfUEhZRVJSX0ZBTFNFX1JBREFSX0VYVCBcXHUwMDI2XFx1MDAyNlxcbiA0OTU6XFx0XFx0ICAgIHJzLVxcdTAwM2Vyc19waHllcnIgIT0gQVRIOUtfUEhZRVJSX1NQRUNUUkFMKVxcbiA0OTY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQ5NzpcXHRcXG4gNDk4OlxcdFxcdC8qIGNoZWNrIGlmIHNwZWN0cmFsIHNjYW4gYml0IGlzIHNldC4gVGhpcyBkb2VzIG5vdCBoYXZlIHRvIGJlIGNoZWNrZWRcXG4gNDk5OlxcdFxcdCAqIGlmIHJlY2VpdmVkIHRocm91Z2ggYSBTUEVDVFJBTCBwaHkgZXJyb3IsIGJ1dCBzaG91bGRuJ3QgaHVydC5cXG4gNTAwOlxcdFxcdCAqL1xcbiA1MDE6XFx0XFx0cmFkYXJfaW5mbyA9ICgoc3RydWN0IGF0aF9yYWRhcl9pbmZvICopXFx1MDAyNnZkYXRhW2xlbl0pIC0gMTtcXG4gNTAyOlxcdFxcdGlmICghKHJhZGFyX2luZm8tXFx1MDAzZXB1bHNlX2J3X2luZm8gXFx1MDAyNiBTUEVDVFJBTF9TQ0FOX0JJVE1BU0spKVxcbiA1MDM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDUwNDpcXHRcXG4gNTA1OlxcdFxcdGlmICghc3BlY19wcml2LVxcdTAwM2VyZnNfY2hhbl9zcGVjX3NjYW4pXFxuIDUwNjpcXHRcXHRcXHRyZXR1cm4gMTtcXG4gNTA3OlxcdFxcbiA1MDg6XFx0XFx0LyogT3V0cHV0IGJ1ZmZlcnMgYXJlIGZ1bGwsIG5vIG5lZWQgdG8gcHJvY2VzcyBhbnl0aGluZ1xcbiA1MDk6XFx0XFx0ICogc2luY2UgdGhlcmUgaXMgbm8gc3BhY2UgdG8gcHV0IHRoZSByZXN1bHQgYW55d2F5XFxuIDUxMDpcXHRcXHQgKi9cXG4gNTExOlxcdFxcdHJldCA9IGF0aF9jbW5faXNfZmZ0X2J1Zl9mdWxsKHNwZWNfcHJpdik7XFxuIDUxMjpcXHRcXHRpZiAocmV0ID09IDEpIHtcXG4gNTEzOlxcdFxcdFxcdGF0aF9kYmcoY29tbW9uLCBTUEVDVFJBTF9TQ0FOLCBcXFwiRkZUIHJlcG9ydCBpZ25vcmVkLCBubyBzcGFjZSBcXFwiXFxuIDUxNDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFwibGVmdCBvbiBvdXRwdXQgYnVmZmVyc1xcXFxuXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQyOjI4LjAyMjU2OTAzNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTMxNTIyOTI5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aCBGdXp6aW5nOiBBdGhlcm9zIFVTQiBXaXJlbGVzcyBEcml2ZXIgUlggUGF0aCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBpbiBgYXRoOWtfcnhfcHJlcGFyZWAgd2l0aGluIHRoZSBBdGhlcm9zIFVTQiB3aXJlbGVzcyBkcml2ZXIgKGBhdGg5a19odGNgKS4gVGhlIGNoYW5nZSBpbnRyb2R1Y2VzIGEgbmV3IGNvbmRpdGlvbjogaWYgYSByZWNlaXZlZCBwYWNrZXQgaGFzIGEgQ1JDIGVycm9yIChgQVRIOUtfUlhFUlJfQ1JDYCkgYW5kIGl0cyBsZW5ndGggbWF0Y2hlcyBhIHNwZWN0cmFsIHNhbXBsZSBsZW5ndGgsIGl0J3MgZmxhZ2dlZCBhcyBwb3RlbnRpYWxseSByZWxhdGVkIHRvIHJhZGFyIGludGVyZmVyZW5jZSAoYEFUSDlLX1BIWUVSUl9SQURBUmApLiBUaGlzIHRyaWdnZXJzIGEgY2FsbCB0byBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8gTGV0J3Mgc2VlLiBBY2NvcmRpbmcgdG8gdGhlIGNyaXRlcmlhLCBpdCdzIGEgcG9zaXRpdmUgc2lnbmFsIGlmIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gYSBkcml2ZXIgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcywgbGlrZSBVU0IuIEJpbmdvISBgYXRoOWtfaHRjYCBpcyBhIFVTQiB3aXJlbGVzcyBkcml2ZXIsIGFjY2Vzc2libGUgdGhyb3VnaCBVU0IuIFRoZSBgYXRoOWtfcnhfcHJlcGFyZWAgZnVuY3Rpb24gaXMgcGFydCBvZiB0aGUgUlggcGF0aCwgc28gaXQncyBkaXJlY3RseSBleGVjdXRlZCB3aGVuIFVTQiBSWCBwYWNrZXRzIGFycml2ZS4gVGhlIHBhdGNoIGludHJvZHVjZXMgdGhpcyBuZXcgbG9naWMgcGF0aCBzcGVjaWZpY2FsbHkgZm9yIGhhbmRsaW5nIENSQyBlcnJvcnMgaW4gdGhlIGNvbnRleHQgb2Ygc3BlY3RyYWwgc2FtcGxlcywgd2hpY2ggaXMgZGVmaW5pdGVseSByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGluIHRoaXMgZHJpdmVyLiBUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIEZvY3VzU3ltYm9scyBhbmQgRW5hYmxlQ29uZmlncy5cblxuSGVyZSdzIG15IHRoaW5raW5nOlxuKiAgIGBhdGg5a19yeF90YXNrbGV0YDogVGhpcyBpcyB0aGUgdGFza2xldCB0aGF0IGhhbmRsZXMgdGhlIFJYIGJ1ZmZlcnMuIEl0IGNhbGxzIGBhdGg5a19yeF9wcmVwYXJlYCwgbWFraW5nIGl0IGEgY3J1Y2lhbCBlbnRyeSBwb2ludC5cbiogICBgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW5gOiBUaGUgc3RhdGljIGhlbHBlciBmdW5jdGlvbiBpcyBhZGRlZCBpbiBgaHRjX2Rydl90eHJ4LmNgIHRvIGNoZWNrIGlmIHRoZSBsZW5ndGggbWF0Y2hlcyBzYW1wbGUgbGVuZ3RoLiBXZSBuZWVkIHRvIGZpbmQgb3V0IHdoZXRoZXIgdGhpcyBpcyBpbmxpbmVkIG9yIG5vdC4gV2Ugc2hvdWxkIHByb2JhYmx5IGFsc28gaW5jbHVkZSBgYXRoOWtfcnhfdGFza2xldGAgdG8gZW5zdXJlIHRoYXQgdGhpcyBpcyByZWFjaGFibGUuXG4qICAgYGF0aF9jbW5fcHJvY2Vzc19mZnRgOiBUaGlzIGlzIHRoZSBGRlQgcGFyc2luZyBmdW5jdGlvbiB0aGF0J3Mgbm93IGNhbGxlZCB1bmRlciB0aGUgbmV3IGNvbmRpdGlvbi5cblxuTGV0IG1lIGNoZWNrIGlmIGBhdGg5a19yeF9wcmVwYXJlYCBpcyBzdGF0aWMgKGl0IGlzKS4gQWxzbywgYGF0aDlrX3J4X3Rhc2tsZXRgIGlzIG5vbi1zdGF0aWMgKGl0J3MgZWl0aGVyIGV4cG9ydGVkIG9yIGluIGEgaGVhZGVyKS4gSSdsbCBhbHNvIGhhdmUgdG8gY2hlY2sgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYGh0Y19kcnZfdHhyeC5jYCwgbGlrZSBgYXRoOWtfaHRjX3J4X21zZ2AuXG5cblNvLCB0aGUga2V5IGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoIG9wZW5zIHVwIGEgbmV3IGNvZGUgcGF0aCB0cmlnZ2VyZWQgYnkgQ1JDIGVycm9ycywgcG90ZW50aWFsbHkgbGVhZGluZyB0byB0aGUgRkZUIHByb2Nlc3NpbmcuIFRoaXMgbG9va3MgbGlrZSBhIHByb21pc2luZyB0YXJnZXQgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNjIwLCJPdXRwdXRUb2tlbnMiOjU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzkyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDI6NDMuMzM3ODAwNjg0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTM2NTY2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWjAtOV9dKyAuKlxcXFwoLipcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz0yMz1zdGF0aWMgY29uc3QgaW50IHN1YnR5cGVfdHhxX3RvX2h3cVtdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTM5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo0MDppbnQgZ2V0X2h3X3FudW0odTE2IHF1ZXVlLCBpbnQgKmh3cV9tYXApXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTQxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NTY6dm9pZCBhdGg5a19odGNfY2hlY2tfc3RvcF9xdWV1ZXMoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01Ny17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNjctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjY4OnZvaWQgYXRoOWtfaHRjX2NoZWNrX3dha2VfcXVldWVzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNjkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTc4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo3OTppbnQgYXRoOWtfaHRjX3R4X2dldF9zbG90KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtODAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTk0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo5NTp2b2lkIGF0aDlrX2h0Y190eF9jbGVhcl9zbG90KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgaW50IHNsb3QpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTk2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xMDEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjEwMjpzdGF0aWMgaW5saW5lIGVudW0gaHRjX2VuZHBvaW50X2lkIGdldF9odGNfZXBpZChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEwMy1cXHRcXHRcXHRcXHRcXHRcXHR1MTYgcW51bSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz0xMzE9Z2V0X2h0Y19lcGlkX3F1ZXVlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgdTggZXBpZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xNTYtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjE1NzpzdGF0aWMgaW5saW5lIGludCBzdHJpcF9kcnZfaGVhZGVyKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTU4LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTg3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzoxODg6aW50IGF0aF9odGNfdHhxX3VwZGF0ZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIGludCBxbnVtLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xODktXFx0XFx0ICAgICAgIHN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0yMTMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjIxNDpzdGF0aWMgdm9pZCBhdGg5a19odGNfdHhfbWdtdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTIxNS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgYXRoOWtfaHRjX3ZpZiAqYXZwLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTI1OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MjYwOnN0YXRpYyB2b2lkIGF0aDlrX2h0Y190eF9kYXRhKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMjYxLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMzM5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzozNDA6aW50IGF0aDlrX2h0Y190eF9zdGFydChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTM0MS1cXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0zOTEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjM5MjpzdGF0aWMgaW5saW5lIGJvb2wgX19hdGg5a19odGNfY2hlY2tfdHhfYWdncihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTM5My1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBhdGg5a19odGNfc3RhICppc3RhLCB1OCB0aWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNDA0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo0MDU6c3RhdGljIHZvaWQgYXRoOWtfaHRjX2NoZWNrX3R4X2FnZ3Ioc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy00MDYtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNDQ0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo0NDU6c3RhdGljIHZvaWQgYXRoOWtfaHRjX3R4X3Byb2Nlc3Moc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy00NDYtXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNTI4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo1Mjk6c3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h0Y190eF9kcmFpbnEoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01MzAtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKnF1ZXVlKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTUzOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NTM5OnZvaWQgYXRoOWtfaHRjX3R4X2RyYWluKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNTQwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01NzctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjU3ODp2b2lkIGF0aDlrX3R4X2ZhaWxlZF90YXNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNTc5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy01OTEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjU5MjpzdGF0aWMgaW5saW5lIGJvb2wgY2hlY2tfY29va2llKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNTkzLVxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNjE3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo2MTg6c3RhdGljIHN0cnVjdCBza19idWZmKiBhdGg5a19odGNfdHhfZ2V0X3BhY2tldChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTYxOS1cXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IF9fd21pX2V2ZW50X3R4c3RhdHVzICp0eHMpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNjQ2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo2NDc6dm9pZCBhdGg5a19odGNfdHhzdGF0dXMoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LCB2b2lkICp3bWlfZXZlbnQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTY0OC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNjg5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo2OTA6dm9pZCBhdGg5a19odGNfdHhlcCh2b2lkICpkcnZfcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNjkxLVxcdFxcdCAgICBlbnVtIGh0Y19lbmRwb2ludF9pZCBlcF9pZCwgYm9vbCB0eG9rKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTcxNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NzE2OnN0YXRpYyBpbmxpbmUgYm9vbCBjaGVja19wYWNrZXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy03MTcte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTczMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NzMzOnN0YXRpYyB2b2lkIGF0aDlrX2h0Y190eF9jbGVhbnVwX3F1ZXVlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtNzM0LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICplcGlkX3F1ZXVlKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTc2MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6NzYxOnZvaWQgYXRoOWtfaHRjX3R4X2NsZWFudXBfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTc2Mi17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtODA4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo4MDk6aW50IGF0aDlrX3R4X2luaXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy04MTAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTgyMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6ODIyOnZvaWQgYXRoOWtfdHhfY2xlYW51cChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTgyMy17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtODI2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo4Mjc6Ym9vbCBhdGg5a19odGNfdHhxX3NldHVwKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgaW50IHN1YnR5cGUpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTgyOC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtODUxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo4NTI6aW50IGF0aDlrX2h0Y19jYWJxX3NldHVwKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtODUzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy04NjgtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjg2OTp1MzIgYXRoOWtfaHRjX2NhbGNyeGZpbHRlcihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTg3MC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtOTE1LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo5MTY6c3RhdGljIHZvaWQgYXRoOWtfaHRjX29wbW9kZV9pbml0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtOTE3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy05MjktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjkzMDp2b2lkIGF0aDlrX2hvc3RfcnhfaW5pdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTkzMS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtOTM3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo5Mzg6c3RhdGljIGlubGluZSB2b2lkIGNvbnZlcnRfaHRjX2ZsYWcoc3RydWN0IGF0aF9yeF9zdGF0dXMgKnJ4X3N0YXRzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy05MzktXFx0XFx0XFx0XFx0ICAgc3RydWN0IGF0aF9odGNfcnhfc3RhdHVzICpyeHN0YXR1cylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy05NDgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjk0OTpzdGF0aWMgdm9pZCByeF9zdGF0dXNfaHRjX3RvX2F0aChzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnhfc3RhdHMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTk1MC1cXHRcXHRcXHRcXHQgc3RydWN0IGF0aF9odGNfcnhfc3RhdHVzICpyeHN0YXR1cylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy05NzgtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjk3OTpzdGF0aWMgYm9vbCBhdGg5a19odGNfaXNfc3BlY3RyYWxfc2FtcGxlX2xlbihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTk4MC1cXHRcXHRcXHRcXHRcXHQgICAgIHUxNiBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtOTk3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzo5OTg6c3RhdGljIGJvb2wgYXRoOWtfcnhfcHJlcGFyZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTk5OS1cXHRcXHRcXHQgICAgIHN0cnVjdCBhdGg5a19odGNfcnhidWYgKnJ4YnVmLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTExMTgtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjExMTk6dm9pZCBhdGg5a19yeF90YXNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTEyMC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTE3Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM6MTE3Mzp2b2lkIGF0aDlrX2h0Y19yeGVwKHZvaWQgKmRydl9wcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xMTc0LVxcdFxcdCAgICBlbnVtIGh0Y19lbmRwb2ludF9pZCBlcF9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xMjEyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzoxMjEzOnZvaWQgYXRoOWtfcnhfY2xlYW51cChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEyMTQte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEyMjQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjEyMjU6aW50IGF0aDlrX3J4X2luaXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYy0xMjI2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDI6NDMuMzk3MTcxMDZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjIzNDg2MjgwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYXRoOWtfaHRjIFJYIFBhdGggZm9yIFNwZWN0cmFsIFNhbXBsZSBEZXRlY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUga2V5IEZvY3VzU3ltYm9scyBqdW1wIG91dDogYGF0aDlrX3J4X3Rhc2tsZXRgLCBgYXRoOWtfaHRjX3J4ZXBgLCBhbmQgYGF0aF9jbW5fcHJvY2Vzc19mZnRgLiBUaGVzZSBhcmUgdGhlIGNyaXRpY2FsIHBvaW50cyB3aGVyZSB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBSWCBwYXRoLiBTcGVjaWZpY2FsbHksIGBhdGg5a19odGNfcnhlcGAgcHVsbHMgU0tCcyBmcm9tIHRoZSBVU0IgSFRDIGVuZHBvaW50LCBxdWV1ZXMgdGhlbSB0byBgcHJpdi1cdTAwM2VyeC5yeGJ1Zl9xdWV1ZWAsIGFuZCBzY2hlZHVsZXMgdGhlIGByeF90YXNrbGV0YC4gVGhlbiBgYXRoOWtfcnhfdGFza2xldGAga2lja3MgaW4sIGRlcXVldWVzIHRoZSBTS0IsIGFuZCBjYWxscyBgYXRoOWtfcnhfcHJlcGFyZWAuIFdpdGhpbiBgYXRoOWtfcnhfcHJlcGFyZWAsIHdlIGZpbmQgdGhlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCwgc3BlY2lmaWNhbGx5IGBhdGg5a19odGNfaXNfc3BlY3RyYWxfc2FtcGxlX2xlbmAgYW5kIGBhdGhfY21uX3Byb2Nlc3NfZmZ0YC5cblxuTm93LCBsZXQncyB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHRvIG1ha2Ugc3VyZSB3ZSdyZSBlbmFibGluZyBhbGwgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuIFRoZSBiYXNlIHJlcXVpcmVtZW50IHNlZW1zIHRvIGJlIGBBVEg5S19IVENgLCBhbmQgd2UgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBlbmFibGVkLiBgQVRIOUtfSFRDYCBkZXBlbmRzIG9uIGBVU0IgXHUwMDI2XHUwMDI2IE1BQzgwMjExYCwgc28gdGhvc2UgYXJlIGFsc28gdml0YWwuIEZ1cnRoZXIsIHdlIHNlZSBgQVRIOUtfSFRDX0RFQlVHRlNgIChkZXBlbmRlbnQgb24gYEFUSDlLX0hUQyBcdTAwMjZcdTAwMjYgREVCVUdfRlNgKSBhbmQgYEFUSDlLX0NPTU1PTl9TUEVDVFJBTGAgKGRlcGVuZGVudCBvbiBgQVRIOUtfREVCVUdGUyB8fCBBVEg5S19IVENfREVCVUdGU2AsIGFuZCBzZWxlY3RpbmcgYFJFTEFZYCkuIFNvIHRvIGVuc3VyZSB0aGUgZW50aXJlIGZlYXR1cmUgaXMgZW5hYmxlZCwgd2UgbmVlZCB0byBlbnN1cmUgdGhlc2UgYXJlIGVuYWJsZWQ6IFwiQVRIOUtfSFRDXCIsIFwiQVRIOUtfSFRDX0RFQlVHRlNcIiwgYW5kIFwiQVRIOUtfQ09NTU9OX1NQRUNUUkFMXCIuXG5cblRoZSBwYXRjaCdzIHB1cnBvc2UgYmVjb21lcyBjbGVhci4gSXQncyBhYm91dCBpbnRyb2R1Y2luZyBGRlQgc3BlY3RyYWwgc2FtcGxlIGRldGVjdGlvbiB0byBDUkMtZXJyb3JlZCBmcmFtZXMgd2l0aGluIHRoZSBSWCBwcm9jZXNzaW5nIHBhdGggaW4gdGhlIGF0aDlrX2h0YyBVU0Igd2lyZWxlc3MgZHJpdmVyLiBGcmFtZXMgd2l0aCBDUkMgZXJyb3JzIHRoYXQgYWxpZ24gd2l0aCBzcGVjaWZpYyBzcGVjdHJhbCBGRlQgc2FtcGxlIHNpemVzIGFyZSBwYXNzZWQgdG8gYGF0aF9jbW5fcHJvY2Vzc19mZnRgIGZvciBzcGVjdHJhbCBhbmFseXNpcy4gQmVjYXVzZSB0aGlzIGNvZGUgcGF0aCBjYW4gYmUgcmVhY2hlZCB0aHJvdWdoIFVTQiBkZXZpY2UgZW11bGF0aW9uLCBpdCByZXByZXNlbnRzIGEgcG90ZW50aWFsbHkgbmV3IGF0dGFjayBzdXJmYWNlIGR1ZSB0byByZWFjaGFibGUgbW9kaWZpZWQgZXhlY3V0YWJsZSBkcml2ZXIgY29kZSwgYW5kIHRoZXJlZm9yZSB3YXJyYW50cyBmdXp6aW5nLlxuXG5BbHJpZ2h0LCB0aGF0J3MgdGhlIGFuYWx5c2lzLiBUaW1lIHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NTkwLCJPdXRwdXRUb2tlbnMiOjE3NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0Mjo0OS42MzIwMzczNzJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjI5NTczMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRIOUtfSFRDXCIsXG4gICAgXCJBVEg5S19IVENfREVCVUdGU1wiLFxuICAgIFwiQVRIOUtfQ09NTU9OX1NQRUNUUkFMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXRoOWtfcnhfdGFza2xldFwiLFxuICAgIFwiYXRoOWtfaHRjX3J4ZXBcIixcbiAgICBcImF0aF9jbW5fcHJvY2Vzc19mZnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHNwZWN0cmFsIEZGVCBzYW1wbGUgZGV0ZWN0aW9uIGZvciBDUkMtZXJyb3JlZCBmcmFtZXMgaW4gdGhlIFJYIHByb2Nlc3NpbmcgcGF0aCAoYXRoOWtfcnhfcHJlcGFyZSkgb2YgdGhlIGF0aDlrX2h0YyBVU0Igd2lyZWxlc3MgZHJpdmVyLCBkaXJlY3RpbmcgcXVhbGlmeWluZyBmcmFtZXMgaW50byBhdGhfY21uX3Byb2Nlc3NfZmZ0LiBCZWNhdXNlIGF0aDlrX2h0YyBpcyBhIFVTQiBXaS1GaSBkcml2ZXIgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiwgdGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBrZXJuZWwgY29kZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUSDlLX0hUQ1wiLFxuICAgIFwiQVRIOUtfSFRDX0RFQlVHRlNcIixcbiAgICBcIkFUSDlLX0NPTU1PTl9TUEVDVFJBTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImF0aDlrX3J4X3Rhc2tsZXRcIixcbiAgICBcImF0aDlrX2h0Y19yeGVwXCIsXG4gICAgXCJhdGhfY21uX3Byb2Nlc3NfZmZ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzcGVjdHJhbCBGRlQgc2FtcGxlIGRldGVjdGlvbiBmb3IgQ1JDLWVycm9yZWQgZnJhbWVzIGluIHRoZSBSWCBwcm9jZXNzaW5nIHBhdGggKGF0aDlrX3J4X3ByZXBhcmUpIG9mIHRoZSBhdGg5a19odGMgVVNCIHdpcmVsZXNzIGRyaXZlciwgZGlyZWN0aW5nIHF1YWxpZnlpbmcgZnJhbWVzIGludG8gYXRoX2Ntbl9wcm9jZXNzX2ZmdC4gQmVjYXVzZSBhdGg5a19odGMgaXMgYSBVU0IgV2ktRmkgZHJpdmVyIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24sIHRoaXMgdG91Y2hlcyByZWFjaGFibGUga2VybmVsIGNvZGUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDI6NDkuNzE4MzQyNjc1WiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTk3NDE3MjA4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQyOjQ5LjcxODk0NjQ3NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM5OTczNTYyODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHNwZWN0cmFsIHNjYW4gc2FtcGxlIGxlbmd0aCB2YWxpZGF0aW9uIHZpYSBhdGg5a19odGNfaXNfc3BlY3RyYWxfc2FtcGxlX2xlbigpIGFuZCBmb3J3YXJkcyBDUkMtZXJyb3JlZCBmcmFtZXMgd2l0aCBtYXRjaGluZyBsZW5ndGhzIHRvIGF0aF9jbW5fcHJvY2Vzc19mZnQoKSBpbiBhdGg5a19yeF9wcmVwYXJlKCkuIEFsbCB2YXJpYWJsZXMgYW5kIHN0cnVjdHVyZSBmaWVsZHMgdXNlZCAoZS5nLiwgcnNfZGF0YWxlbiwgcnhfc3RhdHMucnNfcGh5ZXJyLCBjaGFuX3R5cGUsIGZmdF9sZW4pIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMsIHBlcmZvcm0gYW55IGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG9yIGV4cG9zZSBwYWRkaW5nL3VuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgKHN1Y2ggYXMgYnVmZmVyIGJvdW5kcyBvciBwb2ludGVyIGhhbmRsaW5nKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5Yzg3MTJhZDE0MWVjNzUwZmIxZjg1ZGZhZDNmYzdhMWJlNjg4ZjI0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwMjo0MTo0NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguY1xuaW5kZXggYmVkN2VhMjQyNWEwZS4uZjIxY2ZjMDM0MjZiMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jXG5AQCAtOTY5LDYgKzk2OSwzMiBAQCBzdGF0aWMgdm9pZCByeF9zdGF0dXNfaHRjX3RvX2F0aChzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnhfc3RhdHMsXG4gXHRjb252ZXJ0X2h0Y19mbGFnKHJ4X3N0YXRzLCByeHN0YXR1cyk7XG4gfVxuIFxuKy8qXG4rICogVGhlIGZpcm13YXJlIHJlcG9ydHMgYSBmcmFtZSB0aGF0IGZhaWxlZCBpdHMgQ1JDIGFzIGEgQ1JDIGVycm9yIGV2ZW4gd2hlblxuKyAqIHRoZSBQSFkgZXJyb3IgYml0IGlzIHNldCBhcyB3ZWxsLCBzbyB1bmRlciBpbnRlcmZlcmVuY2Ugc3BlY3RyYWwgc2FtcGxlc1xuKyAqIHJlYWNoIHRoZSBob3N0IGFzIENSQyBlcnJvcnMuIEEgc2FtcGxlIGlzIHJlY29nbmlzYWJsZSBieSBpdHMgc2l6ZTogdGhlXG4rICogRkZUIHJlcG9ydCBsZW5ndGggZm9yIHRoZSBjaGFubmVsIHdpZHRoLCBwbHVzIG9yIG1pbnVzIHRoZSB0d28gYnl0ZXMgdGhlXG4rICogTUFDIG1heSBhZGQgb3IgZHJvcC5cbisgKi9cbitzdGF0aWMgYm9vbCBhdGg5a19odGNfaXNfc3BlY3RyYWxfc2FtcGxlX2xlbihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG4rXHRcdFx0XHRcdCAgICAgdTE2IGxlbilcbit7XG4rXHRlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5fdHlwZTtcbitcdHUxNiBmZnRfbGVuO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlc3BlY19wcml2LnNwZWN0cmFsX21vZGUgPT0gU1BFQ1RSQUxfRElTQUJMRUQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGNoYW5fdHlwZSA9IGNmZzgwMjExX2dldF9jaGFuZGVmX3R5cGUoXHUwMDI2cHJpdi1cdTAwM2Vody1cdTAwM2Vjb25mLmNoYW5kZWYpO1xuK1x0aWYgKGNoYW5fdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0ME1JTlVTIHx8XG4rXHQgICAgY2hhbl90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwUExVUylcbitcdFx0ZmZ0X2xlbiA9IFNQRUNUUkFMX0hUMjBfNDBfVE9UQUxfREFUQV9MRU47XG4rXHRlbHNlXG4rXHRcdGZmdF9sZW4gPSBTUEVDVFJBTF9IVDIwX1RPVEFMX0RBVEFfTEVOO1xuK1xuK1x0cmV0dXJuIGxlbiArIDEgXHUwMDNlPSBmZnRfbGVuIFx1MDAyNlx1MDAyNiBsZW4gXHUwMDNjPSBmZnRfbGVuICsgMjtcbit9XG4rXG4gc3RhdGljIGJvb2wgYXRoOWtfcnhfcHJlcGFyZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgYXRoOWtfaHRjX3J4YnVmICpyeGJ1ZixcbiBcdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpXG5AQCAtMTA1Miw2ICsxMDc4LDE4IEBAIHN0YXRpYyBib29sIGF0aDlrX3J4X3ByZXBhcmUoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxuIFx0XHRnb3RvIHJ4X25leHQ7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogTGV0IHRoZSBGRlQgcGFyc2VyIGRlY2lkZSB3aGV0aGVyIGEgQ1JDIGVycm9yIG9mIHNhbXBsZSBzaXplIGlzIGFcbitcdCAqIHNhbXBsZTsgaXQgdmFsaWRhdGVzIHRoZSBjb250ZW50cyBhbmQgcmV0dXJucyAwIGZvciBhbnl0aGluZyBlbHNlLlxuK1x0ICovXG4rXHRpZiAodW5saWtlbHkocnhfc3RhdHMucnNfc3RhdHVzIFx1MDAyNiBBVEg5S19SWEVSUl9DUkMpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKHByaXYsIHJzX2RhdGFsZW4pKSB7XG4rXHRcdHJ4X3N0YXRzLnJzX3BoeWVyciA9IEFUSDlLX1BIWUVSUl9SQURBUjtcbitcdFx0aWYgKGF0aF9jbW5fcHJvY2Vzc19mZnQoXHUwMDI2cHJpdi1cdTAwM2VzcGVjX3ByaXYsIGhkciwgXHUwMDI2cnhfc3RhdHMsXG4rXHRcdFx0XHRcdHJ4X3N0YXR1cy1cdTAwM2VtYWN0aW1lKSlcbitcdFx0XHRnb3RvIHJ4X25leHQ7XG4rXHR9XG4rXG4gXHRpZiAoIWF0aDlrX2Ntbl9yeF9hY2NlcHQoY29tbW9uLCBoZHIsIHJ4X3N0YXR1cywgXHUwMDI2cnhfc3RhdHMsXG4gXHRcdFx0XHUwMDI2ZGVjcnlwdF9lcnJvciwgcHJpdi1cdTAwM2VyeGZpbHRlcikpXG4gXHRcdGdvdG8gcnhfbmV4dDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQyOjQ5LjcxODk0NzQ4NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTYyMzc0ODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYXRoOWsgUlggUGF0aCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgYXBwcm9hY2ggaXMgdG8gdXNlIGBncmVwcGVyYCBhbmQgYHJlYWQtZmlsZWAgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIHNlY3Rpb25zLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjaGFuZ2UgaW1wYWN0cyB0aGUgZGF0YSBmbG93LCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBgYXRoOWtfcnhfcHJlcGFyZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguY2Agc2luY2UgdGhhdCBzZWVtcyBsaWtlIHRoZSByZWxldmFudCBmaWxlLiBJJ2xsIHJlYWQgYXJvdW5kIGxpbmVzIDk2OSB0byAxMDgwIG9mIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmNgIHRvIHNlZSBob3cgdGhlIGNvZGUgZnVuY3Rpb25zIGFyb3VuZCB0aGF0IHBhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MzgsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQyOjU0LjI4MTMyNTQ3N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk2MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5NjA6XFx0XFxuIDk2MTpcXHRcXHRtZW1jcHkocnhfc3RhdHMtXFx1MDAzZXJzX3Jzc2lfY3RsLCByeHN0YXR1cy1cXHUwMDNlcnNfcnNzaV9jdGwsXFxuIDk2MjpcXHRcXHRcXHRzaXplb2Yocnhfc3RhdHMtXFx1MDAzZXJzX3Jzc2lfY3RsKSk7XFxuIDk2MzpcXHRcXHRtZW1jcHkocnhfc3RhdHMtXFx1MDAzZXJzX3Jzc2lfZXh0LCByeHN0YXR1cy1cXHUwMDNlcnNfcnNzaV9leHQsXFxuIDk2NDpcXHRcXHRcXHRzaXplb2Yocnhfc3RhdHMtXFx1MDAzZXJzX3Jzc2lfZXh0KSk7XFxuIDk2NTpcXHRcXG4gOTY2OlxcdFxcdHJ4X3N0YXRzLVxcdTAwM2Vyc19pc2FnZ3JcXHQ9IHJ4c3RhdHVzLVxcdTAwM2Vyc19pc2FnZ3I7XFxuIDk2NzpcXHRcXHRyeF9zdGF0cy1cXHUwMDNlcnNfbW9yZWFnZ3JcXHQ9IHJ4c3RhdHVzLVxcdTAwM2Vyc19tb3JlYWdncjtcXG4gOTY4OlxcdFxcdHJ4X3N0YXRzLVxcdTAwM2Vyc19udW1fZGVsaW1zXFx0PSByeHN0YXR1cy1cXHUwMDNlcnNfbnVtX2RlbGltcztcXG4gOTY5OlxcdFxcdGNvbnZlcnRfaHRjX2ZsYWcocnhfc3RhdHMsIHJ4c3RhdHVzKTtcXG4gOTcwOlxcdH1cXG4gOTcxOlxcdFxcbiA5NzI6XFx0LypcXG4gOTczOlxcdCAqIFRoZSBmaXJtd2FyZSByZXBvcnRzIGEgZnJhbWUgdGhhdCBmYWlsZWQgaXRzIENSQyBhcyBhIENSQyBlcnJvciBldmVuIHdoZW5cXG4gOTc0OlxcdCAqIHRoZSBQSFkgZXJyb3IgYml0IGlzIHNldCBhcyB3ZWxsLCBzbyB1bmRlciBpbnRlcmZlcmVuY2Ugc3BlY3RyYWwgc2FtcGxlc1xcbiA5NzU6XFx0ICogcmVhY2ggdGhlIGhvc3QgYXMgQ1JDIGVycm9ycy4gQSBzYW1wbGUgaXMgcmVjb2duaXNhYmxlIGJ5IGl0cyBzaXplOiB0aGVcXG4gOTc2OlxcdCAqIEZGVCByZXBvcnQgbGVuZ3RoIGZvciB0aGUgY2hhbm5lbCB3aWR0aCwgcGx1cyBvciBtaW51cyB0aGUgdHdvIGJ5dGVzIHRoZVxcbiA5Nzc6XFx0ICogTUFDIG1heSBhZGQgb3IgZHJvcC5cXG4gOTc4OlxcdCAqL1xcbiA5Nzk6XFx0c3RhdGljIGJvb2wgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW4oc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbiA5ODA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB1MTYgbGVuKVxcbiA5ODE6XFx0e1xcbiA5ODI6XFx0XFx0ZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFuX3R5cGU7XFxuIDk4MzpcXHRcXHR1MTYgZmZ0X2xlbjtcXG4gOTg0OlxcdFxcbiA5ODU6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXNwZWNfcHJpdi5zcGVjdHJhbF9tb2RlID09IFNQRUNUUkFMX0RJU0FCTEVEKVxcbiA5ODY6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA5ODc6XFx0XFxuIDk4ODpcXHRcXHRjaGFuX3R5cGUgPSBjZmc4MDIxMV9nZXRfY2hhbmRlZl90eXBlKFxcdTAwMjZwcml2LVxcdTAwM2Vody1cXHUwMDNlY29uZi5jaGFuZGVmKTtcXG4gOTg5OlxcdFxcdGlmIChjaGFuX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUyB8fFxcbiA5OTA6XFx0XFx0ICAgIGNoYW5fdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0MFBMVVMpXFxuIDk5MTpcXHRcXHRcXHRmZnRfbGVuID0gU1BFQ1RSQUxfSFQyMF80MF9UT1RBTF9EQVRBX0xFTjtcXG4gOTkyOlxcdFxcdGVsc2VcXG4gOTkzOlxcdFxcdFxcdGZmdF9sZW4gPSBTUEVDVFJBTF9IVDIwX1RPVEFMX0RBVEFfTEVOO1xcbiA5OTQ6XFx0XFxuIDk5NTpcXHRcXHRyZXR1cm4gbGVuICsgMSBcXHUwMDNlPSBmZnRfbGVuIFxcdTAwMjZcXHUwMDI2IGxlbiBcXHUwMDNjPSBmZnRfbGVuICsgMjtcXG4gOTk2OlxcdH1cXG4gOTk3OlxcdFxcbiA5OTg6XFx0c3RhdGljIGJvb2wgYXRoOWtfcnhfcHJlcGFyZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuIDk5OTpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBhdGg5a19odGNfcnhidWYgKnJ4YnVmLFxcbjEwMDA6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKVxcbjEwMDE6XFx0XFxuMTAwMjpcXHR7XFxuMTAwMzpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyO1xcbjEwMDQ6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwcml2LVxcdTAwM2VodztcXG4xMDA1OlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSByeGJ1Zi1cXHUwMDNlc2tiO1xcbjEwMDY6XFx0XFx0c3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihwcml2LVxcdTAwM2VhaCk7XFxuMTAwNzpcXHRcXHRzdHJ1Y3QgYXRoX2h3ICphaCA9IGNvbW1vbi1cXHUwMDNlYWg7XFxuMTAwODpcXHRcXHRzdHJ1Y3QgYXRoX2h0Y19yeF9zdGF0dXMgKnJ4c3RhdHVzO1xcbjEwMDk6XFx0XFx0c3RydWN0IGF0aF9yeF9zdGF0dXMgcnhfc3RhdHM7XFxuMTAxMDpcXHRcXHRib29sIGRlY3J5cHRfZXJyb3IgPSBmYWxzZTtcXG4xMDExOlxcdFxcdHUxNiByc19kYXRhbGVuO1xcbjEwMTI6XFx0XFx0Ym9vbCBpc19waHllcnI7XFxuMTAxMzpcXHRcXG4xMDE0OlxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIEhUQ19SWF9GUkFNRV9IRUFERVJfU0laRSkge1xcbjEwMTU6XFx0XFx0XFx0YXRoX2Vycihjb21tb24sIFxcXCJDb3JydXB0ZWQgUlggZnJhbWUsIGRyb3BwaW5nIChsZW46ICVkKVxcXFxuXFxcIixcXG4xMDE2OlxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlbGVuKTtcXG4xMDE3OlxcdFxcdFxcdGdvdG8gcnhfbmV4dDtcXG4xMDE4OlxcdFxcdH1cXG4xMDE5OlxcdFxcbjEwMjA6XFx0XFx0cnhzdGF0dXMgPSAoc3RydWN0IGF0aF9odGNfcnhfc3RhdHVzICopc2tiLVxcdTAwM2VkYXRhO1xcbjEwMjE6XFx0XFxuMTAyMjpcXHRcXHRyc19kYXRhbGVuID0gYmUxNl90b19jcHUocnhzdGF0dXMtXFx1MDAzZXJzX2RhdGFsZW4pO1xcbjEwMjM6XFx0XFx0aWYgKHVubGlrZWx5KHJzX2RhdGFsZW4gLVxcbjEwMjQ6XFx0XFx0ICAgIChza2ItXFx1MDAzZWxlbiAtIEhUQ19SWF9GUkFNRV9IRUFERVJfU0laRSkgIT0gMCkpIHtcXG4xMDI1OlxcdFxcdFxcdGF0aF9lcnIoY29tbW9uLFxcbjEwMjY6XFx0XFx0XFx0XFx0XFxcIkNvcnJ1cHRlZCBSWCBkYXRhIGxlbiwgZHJvcHBpbmcgKGRsZW46ICVkLCBza2JsZW46ICVkKVxcXFxuXFxcIixcXG4xMDI3OlxcdFxcdFxcdFxcdHJzX2RhdGFsZW4sIHNrYi1cXHUwMDNlbGVuKTtcXG4xMDI4OlxcdFxcdFxcdGdvdG8gcnhfbmV4dDtcXG4xMDI5OlxcdFxcdH1cXG4xMDMwOlxcdFxcbjEwMzE6XFx0XFx0aXNfcGh5ZXJyID0gcnhzdGF0dXMtXFx1MDAzZXJzX3N0YXR1cyBcXHUwMDI2IEFUSDlLX1JYRVJSX1BIWTtcXG4xMDMyOlxcdFxcdC8qXFxuMTAzMzpcXHRcXHQgKiBEaXNjYXJkIHplcm8tbGVuZ3RoIHBhY2tldHMgYW5kIHBhY2tldHMgc21hbGxlciB0aGFuIGFuIEFDS1xcbjEwMzQ6XFx0XFx0ICogd2hpY2ggYXJlIG5vdCBQSFlfRVJST1IgKHNob3J0IHJhZGFyIHB1bHNlcyBoYXZlIGEgbGVuZ3RoIG9mIDMpXFxuMTAzNTpcXHRcXHQgKi9cXG4xMDM2OlxcdFxcdGlmICh1bmxpa2VseSghcnNfZGF0YWxlbiB8fCAocnNfZGF0YWxlbiBcXHUwMDNjIDEwIFxcdTAwMjZcXHUwMDI2ICFpc19waHllcnIpKSkge1xcbjEwMzc6XFx0XFx0XFx0YXRoX2RiZyhjb21tb24sIEFOWSxcXG4xMDM4OlxcdFxcdFxcdFxcdFxcXCJTaG9ydCBSWCBkYXRhIGxlbiwgZHJvcHBpbmcgKGRsZW46ICVkKVxcXFxuXFxcIixcXG4xMDM5OlxcdFxcdFxcdFxcdHJzX2RhdGFsZW4pO1xcbjEwNDA6XFx0XFx0XFx0Z290byByeF9uZXh0O1xcbjEwNDE6XFx0XFx0fVxcbjEwNDI6XFx0XFxuMTA0MzpcXHRcXHRpZiAocnhzdGF0dXMtXFx1MDAzZXJzX2tleWl4IFxcdTAwM2U9IEFUSF9LRVlNQVggXFx1MDAyNlxcdTAwMjZcXG4xMDQ0OlxcdFxcdCAgICByeHN0YXR1cy1cXHUwMDNlcnNfa2V5aXggIT0gQVRIOUtfUlhLRVlJWF9JTlZBTElEKSB7XFxuMTA0NTpcXHRcXHRcXHRhdGhfZGJnKGNvbW1vbiwgQU5ZLFxcbjEwNDY6XFx0XFx0XFx0XFx0XFxcIkludmFsaWQga2V5aXgsIGRyb3BwaW5nIChrZXlpeDogJWQpXFxcXG5cXFwiLFxcbjEwNDc6XFx0XFx0XFx0XFx0cnhzdGF0dXMtXFx1MDAzZXJzX2tleWl4KTtcXG4xMDQ4OlxcdFxcdFxcdGdvdG8gcnhfbmV4dDtcXG4xMDQ5OlxcdFxcdH1cXG4xMDUwOlxcdFxcbjEwNTE6XFx0XFx0LyogR2V0IHRoZSBSWCBzdGF0dXMgaW5mb3JtYXRpb24gKi9cXG4xMDUyOlxcdFxcbjEwNTM6XFx0XFx0bWVtc2V0KHJ4X3N0YXR1cywgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzKSk7XFxuMTA1NDpcXHRcXG4xMDU1OlxcdFxcdC8qIENvcHkgZXZlcnl0aGluZyBmcm9tIGF0aF9odGNfcnhfc3RhdHVzIChIVENfUlhfRlJBTUVfSEVBREVSKS5cXG4xMDU2OlxcdFxcdCAqIEFmdGVyIHRoaXMsIHdlIGNhbiBkcm9wIHRoaXMgcGFydCBvZiBza2IuICovXFxuMTA1NzpcXHRcXHRyeF9zdGF0dXNfaHRjX3RvX2F0aChcXHUwMDI2cnhfc3RhdHMsIHJ4c3RhdHVzKTtcXG4xMDU4OlxcdFxcdGF0aDlrX2h0Y19lcnJfc3RhdF9yeChwcml2LCBcXHUwMDI2cnhfc3RhdHMpO1xcbjEwNTk6XFx0XFx0cnhfc3RhdHVzLVxcdTAwM2VtYWN0aW1lID0gYmU2NF90b19jcHUocnhzdGF0dXMtXFx1MDAzZXJzX3RzdGFtcCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQyOjU0LjI4MTQ2MjUzN1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODU2MzM1MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIHRoZSBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGBodGNfZHJ2X3R4cnguY2AgZm9yIERlZXBlciBJbnNpZ2h0KipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gbGluZXMgZnJvbSAxMDYwIG9ud2FyZCBpbiBgaHRjX2Rydl90eHJ4LmNgLiBJIG5lZWQgYSBjbG9zZXIgbG9vayBhdCB0aGlzIHNlY3Rpb24sIGFuZCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ29pbmcgbGluZSBieSBsaW5lLiBJIHN1c3BlY3QgdGhpcyBpcyB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24gaGFuZGxpbmcgbG9naWMgaXMuIEknbSBob3BpbmcgdG8gZGlzY292ZXIgc29tZSBrZXkgZWxlbWVudHMgd2l0aGluIHRoaXMgZmlsZSwgYXMgd2VsbCBhcyBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSBsZXZlbCBkZXNpZ24uIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGRpZyB1cCwgc2hhbGwgd2U/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MzYsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQyOjU2LjEzNzgwMTg1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA2MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA2MDpcXHRcXHRza2JfcHVsbChza2IsIEhUQ19SWF9GUkFNRV9IRUFERVJfU0laRSk7XFxuMTA2MTpcXHRcXG4xMDYyOlxcdFxcdC8qXFxuMTA2MzpcXHRcXHQgKiBldmVyeXRoaW5nIGJ1dCB0aGUgcmF0ZSBpcyBjaGVja2VkIGhlcmUsIHRoZSByYXRlIGNoZWNrIGlzIGRvbmVcXG4xMDY0OlxcdFxcdCAqIHNlcGFyYXRlbHkgdG8gYXZvaWQgZG9pbmcgdHdvIGxvb2t1cHMgZm9yIGEgcmF0ZSBmb3IgZWFjaCBmcmFtZS5cXG4xMDY1OlxcdFxcdCAqL1xcbjEwNjY6XFx0XFx0aGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLVxcdTAwM2VkYXRhO1xcbjEwNjc6XFx0XFxuMTA2ODpcXHRcXHQvKlxcbjEwNjk6XFx0XFx0ICogUHJvY2VzcyBQSFkgZXJyb3JzIGFuZCByZXR1cm4gc28gdGhhdCB0aGUgcGFja2V0XFxuMTA3MDpcXHRcXHQgKiBjYW4gYmUgZHJvcHBlZC5cXG4xMDcxOlxcdFxcdCAqL1xcbjEwNzI6XFx0XFx0aWYgKHVubGlrZWx5KGlzX3BoeWVycikpIHtcXG4xMDczOlxcdFxcdFxcdC8qIFRPRE86IE5vdCB1c2luZyBERlMgcHJvY2Vzc2luZyBub3cuICovXFxuMTA3NDpcXHRcXHRcXHRpZiAoYXRoX2Ntbl9wcm9jZXNzX2ZmdChcXHUwMDI2cHJpdi1cXHUwMDNlc3BlY19wcml2LCBoZHIsXFxuMTA3NTpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnJ4X3N0YXRzLCByeF9zdGF0dXMtXFx1MDAzZW1hY3RpbWUpKSB7XFxuMTA3NjpcXHRcXHRcXHRcXHQvKiBUT0RPOiBDb2RlIHRvIGNvbGxlY3Qgc3BlY3RyYWwgc2NhbiBzdGF0aXN0aWNzICovXFxuMTA3NzpcXHRcXHRcXHR9XFxuMTA3ODpcXHRcXHRcXHRnb3RvIHJ4X25leHQ7XFxuMTA3OTpcXHRcXHR9XFxuMTA4MDpcXHRcXG4xMDgxOlxcdFxcdC8qXFxuMTA4MjpcXHRcXHQgKiBMZXQgdGhlIEZGVCBwYXJzZXIgZGVjaWRlIHdoZXRoZXIgYSBDUkMgZXJyb3Igb2Ygc2FtcGxlIHNpemUgaXMgYVxcbjEwODM6XFx0XFx0ICogc2FtcGxlOyBpdCB2YWxpZGF0ZXMgdGhlIGNvbnRlbnRzIGFuZCByZXR1cm5zIDAgZm9yIGFueXRoaW5nIGVsc2UuXFxuMTA4NDpcXHRcXHQgKi9cXG4xMDg1OlxcdFxcdGlmICh1bmxpa2VseShyeF9zdGF0cy5yc19zdGF0dXMgXFx1MDAyNiBBVEg5S19SWEVSUl9DUkMpIFxcdTAwMjZcXHUwMDI2XFxuMTA4NjpcXHRcXHQgICAgYXRoOWtfaHRjX2lzX3NwZWN0cmFsX3NhbXBsZV9sZW4ocHJpdiwgcnNfZGF0YWxlbikpIHtcXG4xMDg3OlxcdFxcdFxcdHJ4X3N0YXRzLnJzX3BoeWVyciA9IEFUSDlLX1BIWUVSUl9SQURBUjtcXG4xMDg4OlxcdFxcdFxcdGlmIChhdGhfY21uX3Byb2Nlc3NfZmZ0KFxcdTAwMjZwcml2LVxcdTAwM2VzcGVjX3ByaXYsIGhkciwgXFx1MDAyNnJ4X3N0YXRzLFxcbjEwODk6XFx0XFx0XFx0XFx0XFx0XFx0cnhfc3RhdHVzLVxcdTAwM2VtYWN0aW1lKSlcXG4xMDkwOlxcdFxcdFxcdFxcdGdvdG8gcnhfbmV4dDtcXG4xMDkxOlxcdFxcdH1cXG4xMDkyOlxcdFxcbjEwOTM6XFx0XFx0aWYgKCFhdGg5a19jbW5fcnhfYWNjZXB0KGNvbW1vbiwgaGRyLCByeF9zdGF0dXMsIFxcdTAwMjZyeF9zdGF0cyxcXG4xMDk0OlxcdFxcdFxcdFxcdFxcdTAwMjZkZWNyeXB0X2Vycm9yLCBwcml2LVxcdTAwM2VyeGZpbHRlcikpXFxuMTA5NTpcXHRcXHRcXHRnb3RvIHJ4X25leHQ7XFxuMTA5NjpcXHRcXG4xMDk3OlxcdFxcdGF0aDlrX2Ntbl9yeF9za2JfcG9zdHByb2Nlc3MoY29tbW9uLCBza2IsIFxcdTAwMjZyeF9zdGF0cyxcXG4xMDk4OlxcdFxcdFxcdFxcdFxcdCAgICAgcnhfc3RhdHVzLCBkZWNyeXB0X2Vycm9yKTtcXG4xMDk5OlxcdFxcbjExMDA6XFx0XFx0aWYgKGF0aDlrX2Ntbl9wcm9jZXNzX3JhdGUoY29tbW9uLCBodywgXFx1MDAyNnJ4X3N0YXRzLCByeF9zdGF0dXMpKVxcbjExMDE6XFx0XFx0XFx0Z290byByeF9uZXh0O1xcbjExMDI6XFx0XFxuMTEwMzpcXHRcXHRyeF9zdGF0cy5pc19teWJlYWNvbiA9IGF0aF9pc19teWJlYWNvbihjb21tb24sIGhkcik7XFxuMTEwNDpcXHRcXHRhdGg5a19jbW5fcHJvY2Vzc19yc3NpKGNvbW1vbiwgaHcsIFxcdTAwMjZyeF9zdGF0cywgcnhfc3RhdHVzKTtcXG4xMTA1OlxcdFxcbjExMDY6XFx0XFx0cnhfc3RhdHVzLVxcdTAwM2ViYW5kID0gYWgtXFx1MDAzZWN1cmNoYW4tXFx1MDAzZWNoYW4tXFx1MDAzZWJhbmQ7XFxuMTEwNzpcXHRcXHRyeF9zdGF0dXMtXFx1MDAzZWZyZXEgPSBhaC1cXHUwMDNlY3VyY2hhbi1cXHUwMDNlY2hhbi1cXHUwMDNlY2VudGVyX2ZyZXE7XFxuMTEwODpcXHRcXHRyeF9zdGF0dXMtXFx1MDAzZWFudGVubmEgPSByeF9zdGF0cy5yc19hbnRlbm5hO1xcbjExMDk6XFx0XFx0cnhfc3RhdHVzLVxcdTAwM2VmbGFnIHw9IFJYX0ZMQUdfTUFDVElNRV9FTkQ7XFxuMTExMDpcXHRcXG4xMTExOlxcdFxcdHJldHVybiB0cnVlO1xcbjExMTI6XFx0cnhfbmV4dDpcXG4xMTEzOlxcdFxcdHJldHVybiBmYWxzZTtcXG4xMTE0OlxcdH1cXG4xMTE1OlxcdFxcbjExMTY6XFx0LypcXG4xMTE3OlxcdCAqIEZJWE1FOiBIYW5kbGUgRkxVU0ggbGF0ZXIgb24uXFxuMTExODpcXHQgKi9cXG4xMTE5OlxcdHZvaWQgYXRoOWtfcnhfdGFza2xldChzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQyOjU2LjEzNzk1MjM5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2ODYxMzYyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIEZGVCBhbmQgUlggU3RhdHMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggdGhlIEZhc3QgRm91cmllciBUcmFuc2Zvcm0gcHJvY2Vzc2luZyBhbmQgdGhlIHJlY2VpdmVyIHN0YXRpc3RpY3MgaGVyZS4gRmlyc3QsIEkgd2FudCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGF0aF9jbW5fcHJvY2Vzc19mZnRgIGZ1bmN0aW9uLiBXaGF0IGlzIGl0IGRvaW5nIGV4YWN0bHk/IEFuZCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiBgcnhfc3RhdHNgLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4gTm93LCBsZXQncyBzZWFyY2ggZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAsIHRvIHNlZSBpdCBpbiBhY3Rpb24sIGFuZCBhbHNvIGh1bnQgZG93biBgcnhfc3RhdHVzX2h0Y190b19hdGhgLiBIb3BlZnVsbHksIGRpZ2dpbmcgaW50byB0aG9zZSB3aWxsIGdpdmUgbWUgdGhlIGluc2lnaHRzIEkgbmVlZCB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDQzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0Mjo1Ny44MjQwOTE4MDRaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDQxNjI3OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoX2Ntbl9wcm9jZXNzX2ZmdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM9NDQ5PWF0aF9jbW5faXNfZmZ0X2J1Zl9mdWxsKHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy00NjgtLyogcmV0dXJucyAxIGlmIHRoaXMgd2FzIGEgc3BlY3RyYWwgZnJhbWUsIGV2ZW4gaWYgbm90IGhhbmRsZWQuICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjQ2OTppbnQgYXRoX2Ntbl9wcm9jZXNzX2ZmdChzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTQ3MC1cXHRcXHQgICAgc3RydWN0IGF0aF9yeF9zdGF0dXMgKnJzLCB1NjQgdHNmKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTY4My19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjY4NDpFWFBPUlRfU1lNQk9MKGF0aF9jbW5fcHJvY2Vzc19mZnQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy02ODUtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg9MTc3PWludCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNzktXFx0XFx0XFx0ICAgICAgIGVudW0gc3BlY3RyYWxfbW9kZSBzcGVjdHJhbF9tb2RlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTgwOmludCBhdGhfY21uX3Byb2Nlc3NfZmZ0KHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdiwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTgxLVxcdFxcdCAgICBzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnMsIHU2NCB0c2YpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oPTE5Mj1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fdHJpZ2dlcihzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE5Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTk3OnN0YXRpYyBpbmxpbmUgaW50IGF0aF9jbW5fcHJvY2Vzc19mZnQoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xOTgtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYz05OTg9c3RhdGljIGJvb2wgYXRoOWtfcnhfcHJlcGFyZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTA3My1cXHRcXHQvKiBUT0RPOiBOb3QgdXNpbmcgREZTIHByb2Nlc3Npbmcgbm93LiAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYzoxMDc0OlxcdFxcdGlmIChhdGhfY21uX3Byb2Nlc3NfZmZ0KFxcdTAwMjZwcml2LVxcdTAwM2VzcGVjX3ByaXYsIGhkcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTA3NS1cXHRcXHRcXHRcXHQgICAgXFx1MDAyNnJ4X3N0YXRzLCByeF9zdGF0dXMtXFx1MDAzZW1hY3RpbWUpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTA4Ny1cXHRcXHRyeF9zdGF0cy5yc19waHllcnIgPSBBVEg5S19QSFlFUlJfUkFEQVI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjEwODg6XFx0XFx0aWYgKGF0aF9jbW5fcHJvY2Vzc19mZnQoXFx1MDAyNnByaXYtXFx1MDAzZXNwZWNfcHJpdiwgaGRyLCBcXHUwMDI2cnhfc3RhdHMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEwODktXFx0XFx0XFx0XFx0XFx0cnhfc3RhdHVzLVxcdTAwM2VtYWN0aW1lKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmM9ODA2PXN0YXRpYyBpbnQgYXRoOWtfcnhfc2tiX3ByZXByb2Nlc3Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jLTg4My1cXHRcXHR9IGVsc2UgaWYgKHNjLVxcdTAwM2VzcGVjX3ByaXYuc3BlY3RyYWxfbW9kZSAhPSBTUEVDVFJBTF9ESVNBQkxFRCBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmM6ODg0OlxcdFxcdFxcdCAgIGF0aF9jbW5fcHJvY2Vzc19mZnQoXFx1MDAyNnNjLVxcdTAwM2VzcGVjX3ByaXYsIGhkciwgcnhfc3RhdHMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYy04ODUtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHJ4X3N0YXR1cy1cXHUwMDNlbWFjdGltZSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDM6MDAuMzY4MjYwODE1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3Njc3NzM3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCBzdW1tYXJpemluZyB0aGUgcHJvbXB0LCBrZWVwaW5nIGluIG1pbmQgbXkgZmllbGQgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyB0aGUgYHJ4X3N0YXR1c19odGNfdG9fYXRoYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIG15IGZpcnN0IHN0ZXAgaXMgdG8gemVybyBpbiBvbiB0aGlzIGByeF9zdGF0dXNfaHRjX3RvX2F0aGAgZnVuY3Rpb24uIFRoZSBmaWxlbmFtZSwgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguY2AsIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgbGlrZWx5IGEgY3JpdGljYWwgcGllY2UgaW4gdGhlIEF0aGVyb3MgKG5vdyBRdWFsY29tbSBBdGhlcm9zKSB3aXJlbGVzcyBkcml2ZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBhdGg5a2AgZmFtaWx5LCBhbmQgZGVhbGluZyB3aXRoIHRoZSBIYXJkd2FyZSBUcmFuc3BvcnQgQ29udGV4dCAoSFRDKSBsYXllciBmb3IgaGFuZGxpbmcgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgb3BlcmF0aW9ucy4gVGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmLCBgcnhfc3RhdHVzX2h0Y190b19hdGhgLCBzdWdnZXN0cyBpdHMgcm9sZSBpcyB0cmFuc2Zvcm1pbmcgb3IgaW50ZXJwcmV0aW5nIHJlY2VpdmUgc3RhdHVzIGluZm9ybWF0aW9uIGZyb20gdGhlIEhUQyBsYXllciBpbnRvIGEgZm9ybWF0IHVzYWJsZSBieSB0aGUgYGF0aDlrYCBkcml2ZXIncyBjb3JlLlxuXG5HaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIHN5c3RlbXMsIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSB3aGVyZSB0aGUgbG93LWxldmVsIEhUQy1zcGVjaWZpYyByZWNlaXZlIHN0YXR1cyBzdHJ1Y3R1cmVzIGFyZSBwYXJzZWQsIHRyYW5zbGF0ZWQsIGFuZCBwb3NzaWJseSBub3JtYWxpemVkIGludG8gdGhlIG1vcmUgZHJpdmVyLWludGVybmFsIGBhdGg5a2AgcmVwcmVzZW50YXRpb25zLiBUaGlzIHByb2JhYmx5IGludm9sdmVzIGV4dHJhY3RpbmcgZGV0YWlscyBhYm91dCB0aGUgcmVjZWl2ZWQgcGFja2V0LCBsaWtlIHRoZSBzaWduYWwgc3RyZW5ndGgsIG5vaXNlIGxldmVsLCBkYXRhIHJhdGUsIGZyYW1lIGNvbnRyb2wgZmllbGRzLCBwb3RlbnRpYWwgZXJyb3JzLCBhbmQgcGVyaGFwcyBldmVuIEhUQy1zcGVjaWZpYyB0aW1lc3RhbXBzIG9yIG90aGVyIG1ldGFkYXRhLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgc3BlY2lmaWMgZmllbGRzIGFyZSBtYXBwZWQsIGFuZCBob3cgZXJyb3IgY29uZGl0aW9ucyBhcmUgaGFuZGxlZC4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gdml0YWwgdGFza3MgbGlrZSBRb1MsIHJhdGUgYWRhcHRhdGlvbiwgYW5kIHBhY2tldCBmaWx0ZXJpbmcgZm9yIHRoZSB3aXJlbGVzcyBpbnRlcmZhY2UuIExldCdzIGRpZyBpbiBhbmQgc2VlIGV4YWN0bHkgaG93IGl0IHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mzg2LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDM6MDQuMTM2MDM4Nzk2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTQwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTQwOlxcdHtcXG4gOTQxOlxcdFxcdHJ4X3N0YXRzLVxcdTAwM2VlbmNfZmxhZ3MgPSAwO1xcbiA5NDI6XFx0XFx0cnhfc3RhdHMtXFx1MDAzZWJ3ID0gUkFURV9JTkZPX0JXXzIwO1xcbiA5NDM6XFx0XFx0aWYgKHJ4c3RhdHVzLVxcdTAwM2Vyc19mbGFncyBcXHUwMDI2IEFUSDlLX1JYXzIwNDApXFxuIDk0NDpcXHRcXHRcXHRyeF9zdGF0cy1cXHUwMDNlYncgPSBSQVRFX0lORk9fQldfNDA7XFxuIDk0NTpcXHRcXHRpZiAocnhzdGF0dXMtXFx1MDAzZXJzX2ZsYWdzIFxcdTAwMjYgQVRIOUtfUlhfR0kpXFxuIDk0NjpcXHRcXHRcXHRyeF9zdGF0cy1cXHUwMDNlZW5jX2ZsYWdzIHw9IFJYX0VOQ19GTEFHX1NIT1JUX0dJO1xcbiA5NDc6XFx0fVxcbiA5NDg6XFx0XFxuIDk0OTpcXHRzdGF0aWMgdm9pZCByeF9zdGF0dXNfaHRjX3RvX2F0aChzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnhfc3RhdHMsXFxuIDk1MDpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGF0aF9odGNfcnhfc3RhdHVzICpyeHN0YXR1cylcXG4gOTUxOlxcdHtcXG4gOTUyOlxcdFxcdHJ4X3N0YXRzLVxcdTAwM2Vyc19kYXRhbGVuXFx0PSBiZTE2X3RvX2NwdShyeHN0YXR1cy1cXHUwMDNlcnNfZGF0YWxlbik7XFxuIDk1MzpcXHRcXHRyeF9zdGF0cy1cXHUwMDNlcnNfc3RhdHVzXFx0PSByeHN0YXR1cy1cXHUwMDNlcnNfc3RhdHVzO1xcbiA5NTQ6XFx0XFx0cnhfc3RhdHMtXFx1MDAzZXJzX3BoeWVyclxcdD0gcnhzdGF0dXMtXFx1MDAzZXJzX3BoeWVycjtcXG4gOTU1OlxcdFxcdHJ4X3N0YXRzLVxcdTAwM2Vyc19yc3NpXFx0PSByeHN0YXR1cy1cXHUwMDNlcnNfcnNzaTtcXG4gOTU2OlxcdFxcdHJ4X3N0YXRzLVxcdTAwM2Vyc19rZXlpeFxcdD0gcnhzdGF0dXMtXFx1MDAzZXJzX2tleWl4O1xcbiA5NTc6XFx0XFx0cnhfc3RhdHMtXFx1MDAzZXJzX3JhdGVcXHQ9IHJ4c3RhdHVzLVxcdTAwM2Vyc19yYXRlO1xcbiA5NTg6XFx0XFx0cnhfc3RhdHMtXFx1MDAzZXJzX2FudGVubmFcXHQ9IHJ4c3RhdHVzLVxcdTAwM2Vyc19hbnRlbm5hO1xcbiA5NTk6XFx0XFx0cnhfc3RhdHMtXFx1MDAzZXJzX21vcmVcXHQ9IHJ4c3RhdHVzLVxcdTAwM2Vyc19tb3JlO1xcbiA5NjA6XFx0XFxuIDk2MTpcXHRcXHRtZW1jcHkocnhfc3RhdHMtXFx1MDAzZXJzX3Jzc2lfY3RsLCByeHN0YXR1cy1cXHUwMDNlcnNfcnNzaV9jdGwsXFxuIDk2MjpcXHRcXHRcXHRzaXplb2Yocnhfc3RhdHMtXFx1MDAzZXJzX3Jzc2lfY3RsKSk7XFxuIDk2MzpcXHRcXHRtZW1jcHkocnhfc3RhdHMtXFx1MDAzZXJzX3Jzc2lfZXh0LCByeHN0YXR1cy1cXHUwMDNlcnNfcnNzaV9leHQsXFxuIDk2NDpcXHRcXHRcXHRzaXplb2Yocnhfc3RhdHMtXFx1MDAzZXJzX3Jzc2lfZXh0KSk7XFxuIDk2NTpcXHRcXG4gOTY2OlxcdFxcdHJ4X3N0YXRzLVxcdTAwM2Vyc19pc2FnZ3JcXHQ9IHJ4c3RhdHVzLVxcdTAwM2Vyc19pc2FnZ3I7XFxuIDk2NzpcXHRcXHRyeF9zdGF0cy1cXHUwMDNlcnNfbW9yZWFnZ3JcXHQ9IHJ4c3RhdHVzLVxcdTAwM2Vyc19tb3JlYWdncjtcXG4gOTY4OlxcdFxcdHJ4X3N0YXRzLVxcdTAwM2Vyc19udW1fZGVsaW1zXFx0PSByeHN0YXR1cy1cXHUwMDNlcnNfbnVtX2RlbGltcztcXG4gOTY5OlxcdFxcdGNvbnZlcnRfaHRjX2ZsYWcocnhfc3RhdHMsIHJ4c3RhdHVzKTtcXG4gOTcwOlxcdH1cXG4gOTcxOlxcdFxcbiA5NzI6XFx0LypcXG4gOTczOlxcdCAqIFRoZSBmaXJtd2FyZSByZXBvcnRzIGEgZnJhbWUgdGhhdCBmYWlsZWQgaXRzIENSQyBhcyBhIENSQyBlcnJvciBldmVuIHdoZW5cXG4gOTc0OlxcdCAqIHRoZSBQSFkgZXJyb3IgYml0IGlzIHNldCBhcyB3ZWxsLCBzbyB1bmRlciBpbnRlcmZlcmVuY2Ugc3BlY3RyYWwgc2FtcGxlc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MzowNC4xMzYyMDkzNTZaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEzNDI1Mjg3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhhdCBjb2RlIHNuaXBwZXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEF0aGVyb3MgUlggU3RhdHVzIGFuZCBGRlQgUHJvY2Vzc2luZyoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBpbiBvbiB0aGUgYGF0aF9yeF9zdGF0dXNgIHN0cnVjdCBhbmQgaG93IHRoZSBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggaXQuIFRoaXMgaXMgaW50ZXJlc3RpbmcsIGFuZCBJIGltbWVkaWF0ZWx5IHdhbnQgdG8ganVtcCBpbnRvIGBjb21tb24tc3BlY3RyYWwuY2AgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBgYXRoX2Ntbl9wcm9jZXNzX2ZmdGAuIEknbSBnb2luZyB0byBsb29rIGZvciBob3cgdGhlIHN0YXR1cyBpbmZvcm1hdGlvbiBmcm9tIHRoZSByZWNlaXZlZCBzaWduYWwgZ2V0cyBwYXJzZWQgYW5kIGZlZCBpbnRvIHRoZSBGRlQgcHJvY2Vzc2luZyBzdGVwcy4gSSdtIGtlZW4gdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGRpZmZlcmVudCBtb2R1bGF0aW9uIHNjaGVtZXMsIHBvdGVudGlhbCBlcnJvcnMsIGFuZCBwZXJoYXBzIGV2ZW4gc29tZSBvZiB0aGUgc3BlY3RyYWwgYW5hbHlzaXMgdGVjaG5pcXVlcyB1c2VkIGluIHRoYXQgZnVuY3Rpb24uIEknbSBhc3N1bWluZyB0aGF0IHRoZSBgYXRoX3J4X3N0YXR1c2Agc3RydWN0IGNvbnRhaW5zIGEgd2VhbHRoIG9mIGxvdy1sZXZlbCBkZXRhaWxzIGFib3V0IHRoZSByZWNlaXZlZCBwYWNrZXQgYW5kIHRoYXQgdGhvc2UgZGV0YWlscyBhcmUgY3J1Y2lhbCBmb3IgZHJpdmluZyB0aGUgRkZUIGVmZmljaWVudGx5IGFuZCBhY2N1cmF0ZWx5LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvbiBob3cgdGhlIGhhcmR3YXJlIG9mZmxvYWRzIGFueSBGRlQgY29tcHV0YXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTMzLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MzowNi4yNzA0NjcxOTZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NjUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NjU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQ2NjpcXHR9XFxuIDQ2NzpcXHRcXG4gNDY4OlxcdC8qIHJldHVybnMgMSBpZiB0aGlzIHdhcyBhIHNwZWN0cmFsIGZyYW1lLCBldmVuIGlmIG5vdCBoYW5kbGVkLiAqL1xcbiA0Njk6XFx0aW50IGF0aF9jbW5fcHJvY2Vzc19mZnQoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxcbiA0NzA6XFx0XFx0XFx0ICAgIHN0cnVjdCBhdGhfcnhfc3RhdHVzICpycywgdTY0IHRzZilcXG4gNDcxOlxcdHtcXG4gNDcyOlxcdFxcdHU4IHNhbXBsZV9idWZbU1BFQ1RSQUxfU0FNUExFX01BWF9MRU5dID0gezB9O1xcbiA0NzM6XFx0XFx0c3RydWN0IGF0aF9odyAqYWggPSBzcGVjX3ByaXYtXFx1MDAzZWFoO1xcbiA0NzQ6XFx0XFx0c3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzcGVjX3ByaXYtXFx1MDAzZWFoKTtcXG4gNDc1OlxcdFxcdHN0cnVjdCBhdGhfc29mdGMgKnNjID0gY29tbW9uLVxcdTAwM2Vwcml2O1xcbiA0NzY6XFx0XFx0dTggbnVtX2JpbnMsICp2ZGF0YSA9ICh1OCAqKWhkcjtcXG4gNDc3OlxcdFxcdHN0cnVjdCBhdGhfcmFkYXJfaW5mbyAqcmFkYXJfaW5mbztcXG4gNDc4OlxcdFxcdGludCBsZW4gPSBycy1cXHUwMDNlcnNfZGF0YWxlbjtcXG4gNDc5OlxcdFxcdGludCBpO1xcbiA0ODA6XFx0XFx0aW50IGdvdF9zbGVuID0gMDtcXG4gNDgxOlxcdFxcdHU4ICAqc2FtcGxlX3N0YXJ0O1xcbiA0ODI6XFx0XFx0aW50IHNhbXBsZV9ieXRlcyA9IDA7XFxuIDQ4MzpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gNDg0OlxcdFxcdHUxNiBmZnRfbGVuLCBzYW1wbGVfbGVuLCBmcmVxID0gYWgtXFx1MDAzZWN1cmNoYW4tXFx1MDAzZWNoYW4tXFx1MDAzZWNlbnRlcl9mcmVxO1xcbiA0ODU6XFx0XFx0ZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFuX3R5cGU7XFxuIDQ4NjpcXHRcXHRhdGhfY21uX2ZmdF9pZHhfdmFsaWRhdG9yICpmZnRfaWR4X3ZhbGlkYXRvcjtcXG4gNDg3OlxcdFxcdGF0aF9jbW5fZmZ0X3NhbXBsZV9oYW5kbGVyICpmZnRfaGFuZGxlcjtcXG4gNDg4OlxcdFxcbiA0ODk6XFx0XFx0LyogQVI5MjgwIGFuZCBiZWZvcmUgcmVwb3J0IHZpYSBBVEg5S19QSFlFUlJfUkFEQVIsIEFSOTN4eCBhbmQgbmV3ZXJcXG4gNDkwOlxcdFxcdCAqIHZpYSBBVEg5S19QSFlFUlJfU1BFQ1RSQUwuIEhhdmVuJ3Qgc2VlbiBBVEg5S19QSFlFUlJfRkFMU0VfUkFEQVJfRVhUXFxuIDQ5MTpcXHRcXHQgKiB5ZXQsIGJ1dCB0aGlzIGlzIHN1cHBvc2VkIHRvIGJlIHBvc3NpYmxlIGFzIHdlbGwuXFxuIDQ5MjpcXHRcXHQgKi9cXG4gNDkzOlxcdFxcdGlmIChycy1cXHUwMDNlcnNfcGh5ZXJyICE9IEFUSDlLX1BIWUVSUl9SQURBUiBcXHUwMDI2XFx1MDAyNlxcbiA0OTQ6XFx0XFx0ICAgIHJzLVxcdTAwM2Vyc19waHllcnIgIT0gQVRIOUtfUEhZRVJSX0ZBTFNFX1JBREFSX0VYVCBcXHUwMDI2XFx1MDAyNlxcbiA0OTU6XFx0XFx0ICAgIHJzLVxcdTAwM2Vyc19waHllcnIgIT0gQVRIOUtfUEhZRVJSX1NQRUNUUkFMKVxcbiA0OTY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQ5NzpcXHRcXG4gNDk4OlxcdFxcdC8qIGNoZWNrIGlmIHNwZWN0cmFsIHNjYW4gYml0IGlzIHNldC4gVGhpcyBkb2VzIG5vdCBoYXZlIHRvIGJlIGNoZWNrZWRcXG4gNDk5OlxcdFxcdCAqIGlmIHJlY2VpdmVkIHRocm91Z2ggYSBTUEVDVFJBTCBwaHkgZXJyb3IsIGJ1dCBzaG91bGRuJ3QgaHVydC5cXG4gNTAwOlxcdFxcdCAqL1xcbiA1MDE6XFx0XFx0cmFkYXJfaW5mbyA9ICgoc3RydWN0IGF0aF9yYWRhcl9pbmZvICopXFx1MDAyNnZkYXRhW2xlbl0pIC0gMTtcXG4gNTAyOlxcdFxcdGlmICghKHJhZGFyX2luZm8tXFx1MDAzZXB1bHNlX2J3X2luZm8gXFx1MDAyNiBTUEVDVFJBTF9TQ0FOX0JJVE1BU0spKVxcbiA1MDM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDUwNDpcXHRcXG4gNTA1OlxcdFxcdGlmICghc3BlY19wcml2LVxcdTAwM2VyZnNfY2hhbl9zcGVjX3NjYW4pXFxuIDUwNjpcXHRcXHRcXHRyZXR1cm4gMTtcXG4gNTA3OlxcdFxcbiA1MDg6XFx0XFx0LyogT3V0cHV0IGJ1ZmZlcnMgYXJlIGZ1bGwsIG5vIG5lZWQgdG8gcHJvY2VzcyBhbnl0aGluZ1xcbiA1MDk6XFx0XFx0ICogc2luY2UgdGhlcmUgaXMgbm8gc3BhY2UgdG8gcHV0IHRoZSByZXN1bHQgYW55d2F5XFxuIDUxMDpcXHRcXHQgKi9cXG4gNTExOlxcdFxcdHJldCA9IGF0aF9jbW5faXNfZmZ0X2J1Zl9mdWxsKHNwZWNfcHJpdik7XFxuIDUxMjpcXHRcXHRpZiAocmV0ID09IDEpIHtcXG4gNTEzOlxcdFxcdFxcdGF0aF9kYmcoY29tbW9uLCBTUEVDVFJBTF9TQ0FOLCBcXFwiRkZUIHJlcG9ydCBpZ25vcmVkLCBubyBzcGFjZSBcXFwiXFxuIDUxNDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFwibGVmdCBvbiBvdXRwdXQgYnVmZmVyc1xcXFxuXFxcIik7XFxuIDUxNTpcXHRcXHRcXHRyZXR1cm4gMTtcXG4gNTE2OlxcdFxcdH1cXG4gNTE3OlxcdFxcbiA1MTg6XFx0XFx0Y2hhbl90eXBlID0gY2ZnODAyMTFfZ2V0X2NoYW5kZWZfdHlwZShcXHUwMDI2Y29tbW9uLVxcdTAwM2Vody1cXHUwMDNlY29uZi5jaGFuZGVmKTtcXG4gNTE5OlxcdFxcdGlmICgoY2hhbl90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMpIHx8XFxuIDUyMDpcXHRcXHQgICAgKGNoYW5fdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0MFBMVVMpKSB7XFxuIDUyMTpcXHRcXHRcXHRmZnRfbGVuID0gU1BFQ1RSQUxfSFQyMF80MF9UT1RBTF9EQVRBX0xFTjtcXG4gNTIyOlxcdFxcdFxcdHNhbXBsZV9sZW4gPSBTUEVDVFJBTF9IVDIwXzQwX1NBTVBMRV9MRU47XFxuIDUyMzpcXHRcXHRcXHRudW1fYmlucyA9IFNQRUNUUkFMX0hUMjBfNDBfTlVNX0JJTlM7XFxuIDUyNDpcXHRcXHRcXHRmZnRfaWR4X3ZhbGlkYXRvciA9IFxcdTAwMjZhdGhfY21uX21heF9pZHhfdmVyaWZ5X2h0MjBfNDBfZmZ0O1xcbiA1MjU6XFx0XFx0XFx0ZmZ0X2hhbmRsZXIgPSBcXHUwMDI2YXRoX2Ntbl9wcm9jZXNzX2h0MjBfNDBfZmZ0O1xcbiA1MjY6XFx0XFx0fSBlbHNlIHtcXG4gNTI3OlxcdFxcdFxcdGZmdF9sZW4gPSBTUEVDVFJBTF9IVDIwX1RPVEFMX0RBVEFfTEVOO1xcbiA1Mjg6XFx0XFx0XFx0c2FtcGxlX2xlbiA9IFNQRUNUUkFMX0hUMjBfU0FNUExFX0xFTjtcXG4gNTI5OlxcdFxcdFxcdG51bV9iaW5zID0gU1BFQ1RSQUxfSFQyMF9OVU1fQklOUztcXG4gNTMwOlxcdFxcdFxcdGZmdF9pZHhfdmFsaWRhdG9yID0gYXRoX2Ntbl9tYXhfaWR4X3ZlcmlmeV9odDIwX2ZmdDtcXG4gNTMxOlxcdFxcdFxcdGZmdF9oYW5kbGVyID0gXFx1MDAyNmF0aF9jbW5fcHJvY2Vzc19odDIwX2ZmdDtcXG4gNTMyOlxcdFxcdH1cXG4gNTMzOlxcdFxcbiA1MzQ6XFx0XFx0YXRoX2RiZyhjb21tb24sIFNQRUNUUkFMX1NDQU4sIFxcXCJHb3QgcmFkYXIgZHVtcCBid19pbmZvOiAweCVYLFxcXCJcXG4gNTM1OlxcdFxcdFxcdFxcdFxcdFxcdFxcXCJsZW46ICVpIGZmdF9sZW46ICVpXFxcXG5cXFwiLFxcbiA1MzY6XFx0XFx0XFx0XFx0XFx0XFx0cmFkYXJfaW5mby1cXHUwMDNlcHVsc2VfYndfaW5mbyxcXG4gNTM3OlxcdFxcdFxcdFxcdFxcdFxcdGxlbixcXG4gNTM4OlxcdFxcdFxcdFxcdFxcdFxcdGZmdF9sZW4pO1xcbiA1Mzk6XFx0XFx0c2FtcGxlX3N0YXJ0ID0gdmRhdGE7XFxuIDU0MDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbGVuIC0gMjsgaSsrKSB7XFxuIDU0MTpcXHRcXHRcXHRzYW1wbGVfYnl0ZXMrKztcXG4gNTQyOlxcdFxcbiA1NDM6XFx0XFx0XFx0LyogT25seSBhIHNpbmdsZSBzYW1wbGUgcmVjZWl2ZWQsIG5vIG5lZWQgdG8gbG9va1xcbiA1NDQ6XFx0XFx0XFx0ICogZm9yIHRoZSBzYW1wbGUncyBlbmQsIGRvIHRoZSBjb3JyZWN0aW9uIGJhc2VkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQzOjA2LjI3MDY0Mzg4NloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjAwNzA3MTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGF0aDlrX3J4X3ByZXBhcmVgIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSdtIGxvb2tpbmcgYXQgdGhlIGBhdGg5a19yeF9wcmVwYXJlYCBmdW5jdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgZGVjbGFyYXRpb24gb2YgYHJ4X3N0YXRzYDogYHN0cnVjdCBhdGhfcnhfc3RhdHVzIHJ4X3N0YXRzO2AuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGluaXRpYWxpemF0aW9uLiBJcyB0aGlzIHN0cnVjdCBiZWluZyBmdWxseSBpbml0aWFsaXplZD8gSXQncyBhIGNyaXRpY2FsIHN0cnVjdHVyZSwgYW5kIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNhbiBsZWFkIHRvIGFsbCBzb3J0cyBvZiBuYXN0eSBidWdzLCBlc3BlY2lhbGx5IGluIGEgZHJpdmVyLlxuXG5OZXh0LCBJIHNlZSBgcnhfc3RhdHVzX2h0Y190b19hdGgoXHUwMDI2cnhfc3RhdHMsIHJ4c3RhdHVzKTtgLiBUaGlzIGZ1bmN0aW9uIGFwcGVhcnMgdG8gcG9wdWxhdGUgYHJ4X3N0YXRzYCBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgYHJ4c3RhdHVzYC4gIFRoYXQncyBnb29kLCBidXQgaXQgZG9lc24ndCBndWFyYW50ZWUgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBgcnhzdGF0dXNfaHRjX3RvX2F0aCgpYCBkb2VzLiAgTW9yZSBpbXBvcnRhbnRseSwgSSBuZWVkIHRvIGtub3cgdGhlIGRlZmluaXRpb24gb2YgdGhlIGBhdGhfcnhfc3RhdHVzYCBzdHJ1Y3QuIEknbGwgaGF2ZSB0byBjaGVjayB0aGUgaGVhZGVyIGZpbGUgdG8gdW5kZXJzdGFuZCBhbGwgaXRzIGZpZWxkcyBhbmQgc2VlIHdoaWNoLCBpZiBhbnksIG1pZ2h0IGJlIGxlZnQgdW5pbml0aWFsaXplZCBieSB0aGlzIGZ1bmN0aW9uLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGlmIGl0IGluY2x1ZGVzIHBhZGRpbmcgb3IgcmVzZXJ2ZWQgbWVtYmVycyB0aGF0IGNvdWxkIGJlIHByb2JsZW1hdGljIGlmIG5vdCBleHBsaWNpdGx5IHplcm9lZC4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzc0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MzowOC40NzEzNTU0MTJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5ODIwMTYwNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGF0aF9yeF9zdGF0dXMgXFxcXHtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oPTk5PXN0cnVjdCBhdGhfdHhfc3RhdHVzIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuaC0xMjctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oOjEyODpzdHJ1Y3QgYXRoX3J4X3N0YXR1cyB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oLTEyOS1cXHR1MzIgcnNfdHN0YW1wO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MzoxMS40NTMzODA0N1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDE5NjU1MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIGl0OlxuXG4qKkRpdmluZyBpbnRvIGF0aDlrJ3MgbWFjLmgqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0J3Mgc3RhcnQgYnkgY3JhY2tpbmcgb3BlbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oYCBhbmQgemVyb2luZyBpbiBvbiByb3VnaGx5IGxpbmUgMTI4LiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIE1BQy1sYXllciBkZWZpbml0aW9ucyBpbiB0aGlzIGFyZWEuIFByb2JhYmx5IHJlbGF0ZWQgdG8gZGF0YSBzdHJ1Y3R1cmVzIG9yIGZ1bmN0aW9uIHByb3RvdHlwZXMgdGhhdCBhcmUgZnVuZGFtZW50YWwgdG8gdGhlIEF0aGVyb3MgOWsgd2lyZWxlc3MgZHJpdmVyJ3Mgb3BlcmF0aW9uLiBJJ20gdGhpbmtpbmcgd2UnbGwgc2VlIHNvbWUga2V5IHN0cnVjdHVyZXMgdGhhdCBoYW5kbGUgZnJhbWUgcHJvY2Vzc2luZywgcGVyaGFwcyByZWxhdGVkIHRvIHJhdGUgY29udHJvbCwgUW9TLCBvciBwb3RlbnRpYWxseSBldmVuIHNvbWUgaW50ZXJydXB0LXJlbGF0ZWQgZGF0YS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBhdGg5aydzIGFyY2hpdGVjdHVyZSwgc28gdGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gcmVhY3F1YWludCBteXNlbGYgd2l0aCB0aGUgZGV0YWlscy4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg2NSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQzOjEzLjQ3MzAzODk1WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDYxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTI1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTI1OlxcdFxcdHUzMiBkdXJhdGlvbjtcXG4gMTI2OlxcdH07XFxuIDEyNzpcXHRcXG4gMTI4OlxcdHN0cnVjdCBhdGhfcnhfc3RhdHVzIHtcXG4gMTI5OlxcdFxcdHUzMiByc190c3RhbXA7XFxuIDEzMDpcXHRcXHR1MTYgcnNfZGF0YWxlbjtcXG4gMTMxOlxcdFxcdHU4IHJzX3N0YXR1cztcXG4gMTMyOlxcdFxcdHU4IHJzX3BoeWVycjtcXG4gMTMzOlxcdFxcdGludDhfdCByc19yc3NpO1xcbiAxMzQ6XFx0XFx0dTggcnNfa2V5aXg7XFxuIDEzNTpcXHRcXHR1OCByc19yYXRlO1xcbiAxMzY6XFx0XFx0dTggcnNfYW50ZW5uYTtcXG4gMTM3OlxcdFxcdHU4IHJzX21vcmU7XFxuIDEzODpcXHRcXHRpbnQ4X3QgcnNfcnNzaV9jdGxbM107XFxuIDEzOTpcXHRcXHRpbnQ4X3QgcnNfcnNzaV9leHRbM107XFxuIDE0MDpcXHRcXHR1OCByc19pc2FnZ3I7XFxuIDE0MTpcXHRcXHR1OCByc19maXJzdGFnZ3I7XFxuIDE0MjpcXHRcXHR1OCByc19tb3JlYWdncjtcXG4gMTQzOlxcdFxcdHU4IHJzX251bV9kZWxpbXM7XFxuIDE0NDpcXHRcXHR1OCByc19mbGFncztcXG4gMTQ1OlxcdFxcdGJvb2wgaXNfbXliZWFjb247XFxuIDE0NjpcXHRcXHR1MzIgZXZtMDtcXG4gMTQ3OlxcdFxcdHUzMiBldm0xO1xcbiAxNDg6XFx0XFx0dTMyIGV2bTI7XFxuIDE0OTpcXHRcXHR1MzIgZXZtMztcXG4gMTUwOlxcdFxcdHUzMiBldm00O1xcbiAxNTE6XFx0XFx0dTE2IGVuY19mbGFncztcXG4gMTUyOlxcdFxcdGVudW0gcmF0ZV9pbmZvX2J3IGJ3O1xcbiAxNTM6XFx0fTtcXG4gMTU0OlxcdFxcbiAxNTU6XFx0c3RydWN0IGF0aF9odGNfcnhfc3RhdHVzIHtcXG4gMTU2OlxcdFxcdF9fYmU2NCByc190c3RhbXA7XFxuIDE1NzpcXHRcXHRfX2JlMTYgcnNfZGF0YWxlbjtcXG4gMTU4OlxcdFxcdHU4IHJzX3N0YXR1cztcXG4gMTU5OlxcdFxcdHU4IHJzX3BoeWVycjtcXG4gMTYwOlxcdFxcdGludDhfdCByc19yc3NpO1xcbiAxNjE6XFx0XFx0aW50OF90IHJzX3Jzc2lfY3RsWzNdO1xcbiAxNjI6XFx0XFx0aW50OF90IHJzX3Jzc2lfZXh0WzNdO1xcbiAxNjM6XFx0XFx0dTggcnNfa2V5aXg7XFxuIDE2NDpcXHRcXHR1OCByc19yYXRlO1xcbiAxNjU6XFx0XFx0dTggcnNfYW50ZW5uYTtcXG4gMTY2OlxcdFxcdHU4IHJzX21vcmU7XFxuIDE2NzpcXHRcXHR1OCByc19pc2FnZ3I7XFxuIDE2ODpcXHRcXHR1OCByc19tb3JlYWdncjtcXG4gMTY5OlxcdFxcdHU4IHJzX251bV9kZWxpbXM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQzOjEzLjQ3MzE1MTA1OVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzQ1NzA1MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGF0YSBGbG93IGluIGBhdGhfY21uX3Byb2Nlc3NfZmZ0YCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYGF0aF9jbW5fcHJvY2Vzc19mZnRgIGFuZCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdy4gUmlnaHQsIHRoZSBjb2RlIGlzIHVzaW5nIGZpZWxkcyBmcm9tIHRoZSBgcnNgIHN0cnVjdC4gSSBjYW4gc2VlIHRoYXQgb25seSBgcnMtXHUwMDNlcnNfZGF0YWxlbmAgYW5kIGBycy1cdTAwM2Vyc19waHllcnJgIGFyZSBkaXJlY3RseSB1c2VkIHdpdGhpbiB0aGUgZnVuY3Rpb24uIGByc19kYXRhbGVuYCBpcyBjbGVhcmx5IGluaXRpYWxpemVkIGJ5IGByeF9zdGF0dXNfaHRjX3RvX2F0aGAsIHRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBgcnNfcGh5ZXJyYCBpcyBzZXQgcmlnaHQgYmVmb3JlIHRoZSBjYWxsLCBlaXRoZXIgd2l0aCBgQVRIOUtfUEhZRVJSX1JBREFSYCBvciBwb3RlbnRpYWxseSB0aHJvdWdoIGByeF9zdGF0dXNfaHRjX3RvX2F0aGAuXG5cbk5vdywgdGhlIGNydWNpYWwgYml0OiB0aGUgcmV0dXJuIHZhbHVlIG9mIGBhdGhfY21uX3Byb2Nlc3NfZmZ0YC4gSWYgaXQgcmV0dXJucyB0cnVlLCB3ZSBqdW1wIHRvIGByeF9uZXh0YC4gSG0sIHRoYXQncyBpbnRlcmVzdGluZyBiZWNhdXNlIGByeF9uZXh0YCB1bHRpbWF0ZWx5IHJldHVybnMgYGZhbHNlYCwgd2hpY2ggaW5kaWNhdGVzIHRoZSBwYWNrZXQgaXMgZHJvcHBlZCwgc2luY2UgaXQgd2FzIHRyZWF0ZWQgYXMgc3BlY3RyYWwgZGF0YS4gVGhpcyBtYWtlcyBzZW5zZSBmcm9tIGEgcGVyZm9ybWFuY2UgcGVyc3BlY3RpdmUgYW5kIGFsc28gaGVscHMgd2l0aCBzaWduYWwgcHJvY2Vzc2luZy5cblxuT24gdGhlIG90aGVyIGhhbmQsIGEgcmV0dXJuIHZhbHVlIG9mIGZhbHNlIG1lYW5zIHRoZSBjb2RlIGNvbnRpbnVlcyB0byBgYXRoOWtfY21uX3J4X2FjY2VwdGAuIE9rYXksIGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nIGFnYWluLiBgcnhfc3RhdHMucnNfcGh5ZXJyYCB3YXMgbW9kaWZpZWQgdG8gYEFUSDlLX1BIWUVSUl9SQURBUmAuIEJ1dCwgYGF0aDlrX2Ntbl9yeF9hY2NlcHRgIGlzIGNsZWFybHkgdGhlIGNyaXRpY2FsIHBvaW50LiBJIHNob3VsZCBwcm9iYWJseSBkaXZlIGludG8gaXQsIHRvIGZpZ3VyZSBvdXQgaG93IGl0IGhhbmRsZXMgdGhlIGRhdGEuIFRoaXMgd2lsbCBzaGVkIGxpZ2h0IG9uIHRoZSBjb21wbGV0ZSBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3NzgsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MzoxNi44MTg4NTg4WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDM1MDkzNTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDlrX2Ntbl9yeF9hY2NlcHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5jPTI5PU1PRFVMRV9MSUNFTlNFKFxcXCJEdWFsIEJTRC9HUExcXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uYy0zMS0vKiBBc3N1bWVzIHlvdSd2ZSBhbHJlYWR5IGRvbmUgdGhlIGVuZGlhbiB0byBDUFUgY29udmVyc2lvbiAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uYzozMjpib29sIGF0aDlrX2Ntbl9yeF9hY2NlcHQoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmMtMzMtXFx0XFx0XFx0IHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmMtMTE2LX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmM6MTE3OkVYUE9SVF9TWU1CT0woYXRoOWtfY21uX3J4X2FjY2VwdCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5jLTExOC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uaD01Mj1zdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5oLTYzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uaDo2NDpib29sIGF0aDlrX2Ntbl9yeF9hY2NlcHQoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmgtNjUtXFx0XFx0XFx0IHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmM9OTk4PXN0YXRpYyBib29sIGF0aDlrX3J4X3ByZXBhcmUoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jLTEwOTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jOjEwOTM6XFx0aWYgKCFhdGg5a19jbW5fcnhfYWNjZXB0KGNvbW1vbiwgaGRyLCByeF9zdGF0dXMsIFxcdTAwMjZyeF9zdGF0cyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMtMTA5NC1cXHRcXHRcXHRcXHUwMDI2ZGVjcnlwdF9lcnJvciwgcHJpdi1cXHUwMDNlcnhmaWx0ZXIpKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYz04MDY9c3RhdGljIGludCBhdGg5a19yeF9za2JfcHJlcHJvY2VzcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmMtODk1LVxcdHNwaW5fbG9ja19iaChcXHUwMDI2c2MtXFx1MDAzZWNoYW5fbG9jayk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYzo4OTY6XFx0aWYgKCFhdGg5a19jbW5fcnhfYWNjZXB0KGNvbW1vbiwgaGRyLCByeF9zdGF0dXMsIHJ4X3N0YXRzLCBkZWNyeXB0X2Vycm9yLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmMtODk3LVxcdFxcdFxcdFxcdCBzYy1cXHUwMDNlY3VyX2NoYW4tXFx1MDAzZXJ4ZmlsdGVyKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MzoxOC44NTM5NjE3OThaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM5NTQ2MjUwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoYXQga2VybmVsIGNvZGU6XG5cbioqRGl2aW5nIGludG8gYGF0aDlrX2Ntbl9yeF9hY2NlcHRgKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcmVjZWl2ZXIgYWNjZXB0YW5jZSBmdW5jdGlvbiwgYGF0aDlrX2Ntbl9yeF9hY2NlcHRgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgYXRoOWtgIHdpcmVsZXNzIGRyaXZlci4gVGhhdCBtZWFucyBJJ20gbG9va2luZyBhdCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5jYC4gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgZmlsdGVyaW5nIGluY29taW5nIDgwMi4xMSBmcmFtZXMuIEknbSBhc3N1bWluZyBpdCdzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgdGhlIGluaXRpYWwgZGV0ZXJtaW5hdGlvbiBpZiBhIHJlY2VpdmVkIGZyYW1lIHNob3VsZCBldmVuIGJlIHBhc3NlZCB1cCB0aGUgc3RhY2sgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZywgb3IgaWYgaXQgc2hvdWxkIGJlIGRyb3BwZWQgZWFybHkgb24uIFRoaXMgY2FuIGJlIGJhc2VkIG9uIHRoaW5ncyBsaWtlIGZyYW1lIHR5cGUsIGFkZHJlc3MgZmlsdGVyaW5nLCBzaWduYWwgc3RyZW5ndGgsIG9yIGFueSBudW1iZXIgb2YgZmFjdG9ycyByZWxhdGVkIHRvIHRoZSBoYXJkd2FyZSdzIHJlY2VwdGlvbiBjaGFyYWN0ZXJpc3RpY3MgYW5kIGNvbmZpZ3VyZWQgc2V0dGluZ3MuXG5cbktub3dpbmcgdGhlIGBhdGg5a2AgZHJpdmVyLCBJJ2QgcHJlZGljdCB0aGVyZSdzIGxpa2VseSBzb21lIGZhaXJseSBoYXJkd2FyZS1zcGVjaWZpYyBpbnRlcmFjdGlvbiBpbiB0aGlzIGZ1bmN0aW9uLiBUaGlzIG1pZ2h0IGludm9sdmUgZGlyZWN0IHJlZ2lzdGVyIHJlYWRzIHRvIGNoZWNrIHN0YXR1cyBiaXRzLCBsb29raW5nIGF0IGRlc2NyaXB0b3JzIHBhc3NlZCBieSB0aGUgaGFyZHdhcmUsIG9yIGFjY2Vzc2luZyBwZXItcGFja2V0IG1ldGFkYXRhIHBsYWNlZCB0aGVyZSBieSB0aGUgZmlybXdhcmUuIEknbSBrZWVuIHRvIHNlZSB0aGUgc3BlY2lmaWMgY2hlY2tzLiBJdCB3b3VsZCBiZSBoZWxwZnVsIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlJ3MgRE1BIGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcuIElzIGl0IGNhbGxlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcj8gT3IgZG9lcyBpdCBvcGVyYXRlIHNvbWV3aGVyZSBpbiBhIFJYIHByb2Nlc3NpbmcgcGF0aCBzZXBhcmF0ZSBmcm9tIGludGVycnVwdHM/XG5cbk15IGh1bmNoIGlzIHRoYXQgdGhlcmUgbWlnaHQgYmUgc29tZSBjb25kaXRpb25hbCBsb2dpYyBhcm91bmQgc2VjdXJpdHkgZmVhdHVyZXMsIHRvby4gUGVyaGFwcyB0aGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGNoZWNrcyBvbiB0aGUgZnJhbWUncyBzZWN1cml0eSBoZWFkZXJzLCBvciBpbnRlcmFjdHMgd2l0aCBrZXkgbWFuYWdlbWVudCB0YWJsZXMuIEknbGwgbmVlZCB0byBsb29rIGF0IGFueSBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24gdGhhdCBtaWdodCBiZSBpbnZvbHZlZC4gSSdsbCBiZSBmb2N1c2VkIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGNyaXRlcmlhIHVzZWQgdG8gYWNjZXB0IG9yIHJlamVjdCBhIHBhY2tldCwgYW5kIHRoZSBvdmVyYWxsIGltcGFjdCBvbiBzeXN0ZW0gcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTM4LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDI6NDM6MjIuMjQ5NDI3OTY0WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzA6XFx0XFxuICAzMTpcXHQvKiBBc3N1bWVzIHlvdSd2ZSBhbHJlYWR5IGRvbmUgdGhlIGVuZGlhbiB0byBDUFUgY29udmVyc2lvbiAqL1xcbiAgMzI6XFx0Ym9vbCBhdGg5a19jbW5fcnhfYWNjZXB0KHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sXFxuICAzMzpcXHRcXHRcXHRcXHQgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcXG4gIDM0OlxcdFxcdFxcdFxcdCBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhzLFxcbiAgMzU6XFx0XFx0XFx0XFx0IHN0cnVjdCBhdGhfcnhfc3RhdHVzICpyeF9zdGF0cyxcXG4gIDM2OlxcdFxcdFxcdFxcdCBib29sICpkZWNyeXB0X2Vycm9yLFxcbiAgMzc6XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCByeGZpbHRlcilcXG4gIDM4OlxcdHtcXG4gIDM5OlxcdFxcdHN0cnVjdCBhdGhfaHcgKmFoID0gY29tbW9uLVxcdTAwM2VhaDtcXG4gIDQwOlxcdFxcdGJvb2wgaXNfbWMsIGlzX3ZhbGlkX3RraXAsIHN0cmlwX21pYywgbWljX2Vycm9yO1xcbiAgNDE6XFx0XFx0X19sZTE2IGZjO1xcbiAgNDI6XFx0XFxuICA0MzpcXHRcXHRmYyA9IGhkci1cXHUwMDNlZnJhbWVfY29udHJvbDtcXG4gIDQ0OlxcdFxcbiAgNDU6XFx0XFx0aXNfbWMgPSAhIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci1cXHUwMDNlYWRkcjEpO1xcbiAgNDY6XFx0XFx0aXNfdmFsaWRfdGtpcCA9IHJ4X3N0YXRzLVxcdTAwM2Vyc19rZXlpeCAhPSBBVEg5S19SWEtFWUlYX0lOVkFMSUQgXFx1MDAyNlxcdTAwMjZcXG4gIDQ3OlxcdFxcdFxcdHRlc3RfYml0KHJ4X3N0YXRzLVxcdTAwM2Vyc19rZXlpeCwgY29tbW9uLVxcdTAwM2V0a2lwX2tleW1hcCk7XFxuICA0ODpcXHRcXHRzdHJpcF9taWMgPSBpc192YWxpZF90a2lwIFxcdTAwMjZcXHUwMDI2IGllZWU4MDIxMV9pc19kYXRhKGZjKSBcXHUwMDI2XFx1MDAyNlxcbiAgNDk6XFx0XFx0XFx0aWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoZmMpIFxcdTAwMjZcXHUwMDI2XFxuICA1MDpcXHRcXHRcXHQhKHJ4X3N0YXRzLVxcdTAwM2Vyc19zdGF0dXMgXFx1MDAyNlxcbiAgNTE6XFx0XFx0XFx0KEFUSDlLX1JYRVJSX0RFQ1JZUFQgfCBBVEg5S19SWEVSUl9DUkMgfCBBVEg5S19SWEVSUl9NSUMgfFxcbiAgNTI6XFx0XFx0XFx0IEFUSDlLX1JYRVJSX0tFWU1JU1MpKTtcXG4gIDUzOlxcdFxcbiAgNTQ6XFx0XFx0LypcXG4gIDU1OlxcdFxcdCAqIEtleSBtaXNzIGV2ZW50cyBhcmUgb25seSByZWxldmFudCBmb3IgcGFpcndpc2Uga2V5cyB3aGVyZSB0aGVcXG4gIDU2OlxcdFxcdCAqIGRlc2NyaXB0b3IgZG9lcyBjb250YWluIGEgdmFsaWQga2V5IGluZGV4LiBUaGlzIGhhcyBiZWVuIG9ic2VydmVkXFxuICA1NzpcXHRcXHQgKiBtb3N0bHkgd2l0aCBDQ01QIGVuY3J5cHRpb24uXFxuICA1ODpcXHRcXHQgKi9cXG4gIDU5OlxcdFxcdGlmIChyeF9zdGF0cy1cXHUwMDNlcnNfa2V5aXggPT0gQVRIOUtfUlhLRVlJWF9JTlZBTElEIHx8XFxuICA2MDpcXHRcXHQgICAgIXRlc3RfYml0KHJ4X3N0YXRzLVxcdTAwM2Vyc19rZXlpeCwgY29tbW9uLVxcdTAwM2VjY21wX2tleW1hcCkpXFxuICA2MTpcXHRcXHRcXHRyeF9zdGF0cy1cXHUwMDNlcnNfc3RhdHVzIFxcdTAwMjY9IH5BVEg5S19SWEVSUl9LRVlNSVNTO1xcbiAgNjI6XFx0XFxuICA2MzpcXHRcXHRtaWNfZXJyb3IgPSBpc192YWxpZF90a2lwIFxcdTAwMjZcXHUwMDI2ICFpZWVlODAyMTFfaXNfY3RsKGZjKSBcXHUwMDI2XFx1MDAyNlxcbiAgNjQ6XFx0XFx0XFx0IWllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGZjKSBcXHUwMDI2XFx1MDAyNlxcbiAgNjU6XFx0XFx0XFx0IShsZTE2X3RvX2NwdShoZHItXFx1MDAzZXNlcV9jdHJsKSBcXHUwMDI2IElFRUU4MDIxMV9TQ1RMX0ZSQUcpIFxcdTAwMjZcXHUwMDI2XFxuICA2NjpcXHRcXHRcXHQocnhfc3RhdHMtXFx1MDAzZXJzX3N0YXR1cyBcXHUwMDI2IEFUSDlLX1JYRVJSX01JQyk7XFxuICA2NzpcXHRcXG4gIDY4OlxcdFxcdC8qXFxuICA2OTpcXHRcXHQgKiBUaGUgcnhfc3RhdHMtXFx1MDAzZXJzX3N0YXR1cyB3aWxsIG5vdCBiZSBzZXQgdW50aWwgdGhlIGVuZCBvZiB0aGVcXG4gIDcwOlxcdFxcdCAqIGNoYWluZWQgZGVzY3JpcHRvcnMgc28gaXQgY2FuIGJlIGlnbm9yZWQgaWYgcnNfbW9yZSBpcyBzZXQuIFRoZVxcbiAgNzE6XFx0XFx0ICogcnNfbW9yZSB3aWxsIGJlIGZhbHNlIGF0IHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIGNoYWluZWRcXG4gIDcyOlxcdFxcdCAqIGRlc2NyaXB0b3JzLlxcbiAgNzM6XFx0XFx0ICovXFxuICA3NDpcXHRcXHRpZiAocnhfc3RhdHMtXFx1MDAzZXJzX3N0YXR1cyAhPSAwKSB7XFxuICA3NTpcXHRcXHRcXHR1OCBzdGF0dXNfbWFzaztcXG4gIDc2OlxcdFxcbiAgNzc6XFx0XFx0XFx0aWYgKHJ4X3N0YXRzLVxcdTAwM2Vyc19zdGF0dXMgXFx1MDAyNiBBVEg5S19SWEVSUl9DUkMpIHtcXG4gIDc4OlxcdFxcdFxcdFxcdHJ4cy1cXHUwMDNlZmxhZyB8PSBSWF9GTEFHX0ZBSUxFRF9GQ1NfQ1JDO1xcbiAgNzk6XFx0XFx0XFx0XFx0bWljX2Vycm9yID0gZmFsc2U7XFxuICA4MDpcXHRcXHRcXHR9XFxuICA4MTpcXHRcXG4gIDgyOlxcdFxcdFxcdGlmICgocnhfc3RhdHMtXFx1MDAzZXJzX3N0YXR1cyBcXHUwMDI2IEFUSDlLX1JYRVJSX0RFQ1JZUFQpIHx8XFxuICA4MzpcXHRcXHRcXHQgICAgKCFpc19tYyBcXHUwMDI2XFx1MDAyNiAocnhfc3RhdHMtXFx1MDAzZXJzX3N0YXR1cyBcXHUwMDI2IEFUSDlLX1JYRVJSX0tFWU1JU1MpKSkge1xcbiAgODQ6XFx0XFx0XFx0XFx0KmRlY3J5cHRfZXJyb3IgPSB0cnVlO1xcbiAgODU6XFx0XFx0XFx0XFx0bWljX2Vycm9yID0gZmFsc2U7XFxuICA4NjpcXHRcXHRcXHR9XFxuICA4NzpcXHRcXG4gIDg4OlxcdFxcbiAgODk6XFx0XFx0XFx0LypcXG4gIDkwOlxcdFxcdFxcdCAqIFJlamVjdCBlcnJvciBmcmFtZXMgd2l0aCB0aGUgZXhjZXB0aW9uIG9mXFxuICA5MTpcXHRcXHRcXHQgKiBkZWNyeXB0aW9uIGFuZCBNSUMgZmFpbHVyZXMuIEZvciBtb25pdG9yIG1vZGUsXFxuICA5MjpcXHRcXHRcXHQgKiB3ZSBhbHNvIGlnbm9yZSB0aGUgQ1JDIGVycm9yLlxcbiAgOTM6XFx0XFx0XFx0ICovXFxuICA5NDpcXHRcXHRcXHRzdGF0dXNfbWFzayA9IEFUSDlLX1JYRVJSX0RFQ1JZUFQgfCBBVEg5S19SWEVSUl9NSUMgfFxcbiAgOTU6XFx0XFx0XFx0XFx0ICAgICAgQVRIOUtfUlhFUlJfS0VZTUlTUztcXG4gIDk2OlxcdFxcbiAgOTc6XFx0XFx0XFx0aWYgKGFoLVxcdTAwM2Vpc19tb25pdG9yaW5nIFxcdTAwMjZcXHUwMDI2IChyeGZpbHRlciBcXHUwMDI2IEZJRl9GQ1NGQUlMKSlcXG4gIDk4OlxcdFxcdFxcdFxcdHN0YXR1c19tYXNrIHw9IEFUSDlLX1JYRVJSX0NSQztcXG4gIDk5OlxcdFxcbiAxMDA6XFx0XFx0XFx0aWYgKHJ4X3N0YXRzLVxcdTAwM2Vyc19zdGF0dXMgXFx1MDAyNiB+c3RhdHVzX21hc2spXFxuIDEwMTpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDEwMjpcXHRcXHR9XFxuIDEwMzpcXHRcXG4gMTA0OlxcdFxcdC8qXFxuIDEwNTpcXHRcXHQgKiBGb3IgdW5pY2FzdCBmcmFtZXMgdGhlIE1JQyBlcnJvciBiaXQgY2FuIGhhdmUgZmFsc2UgcG9zaXRpdmVzLFxcbiAxMDY6XFx0XFx0ICogc28gYWxsIE1JQyBlcnJvciByZXBvcnRzIG5lZWQgdG8gYmUgdmFsaWRhdGVkIGluIHNvZnR3YXJlLlxcbiAxMDc6XFx0XFx0ICogRmFsc2UgbmVnYXRpdmVzIGFyZSBub3QgY29tbW9uLCBzbyBza2lwIHNvZnR3YXJlIHZlcmlmaWNhdGlvblxcbiAxMDg6XFx0XFx0ICogaWYgdGhlIGhhcmR3YXJlIGNvbnNpZGVycyB0aGUgTUlDIHZhbGlkLlxcbiAxMDk6XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAyOjQzOjIyLjI0OTU1ODE1NFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NDQyOTIzNzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOL0tBU0FOIEFuYWx5c2lzIG9mIFNwZWN0cmFsIFNhbXBsZSBMZW5ndGggQ2hlY2sqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGFuYWx5c2lzIGZvY3VzZXMgb24gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gS01TQU4uIFRoZSBjb3JlIGNoYW5nZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBhdGg5a19odGNfaXNfc3BlY3RyYWxfc2FtcGxlX2xlbigpYCwgd2hpY2ggZXNzZW50aWFsbHkgcGVyZm9ybXMgYSBsZW5ndGggY2hlY2sgYmFzZWQgb24gY2hhbm5lbCB0eXBlIHRvIGRldGVybWluZSBpZiBhIHNwZWN0cmFsIHNhbXBsZSBzaG91bGQgYmUgcHJvY2Vzc2VkLiBJJ3ZlIGV4YW1pbmVkIHRoZSBjb2RlLCBmb2N1c2luZyBvbiBob3cgZGF0YSBmbG93cyBhbmQgaXMgaW5pdGlhbGl6ZWQuXG5cbkZpcnN0LCB3aXRoaW4gYGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKClgLCBgY2hhbl90eXBlYCBhbmQgYGZmdF9sZW5gIGFyZSBzaW1wbGUgbG9jYWwgc2NhbGFycywgaW5pdGlhbGl6ZWQgdW5jb25kaXRpb25hbGx5LiBUaGVuLCBgYXRoOWtfcnhfcHJlcGFyZSgpYCBpcyB3aGVyZSB0aGUgbGVuZ3RoIGNoZWNrIGlzIHV0aWxpemVkLiBUaGUgbGVuZ3RoIGNoZWNrIHJlbGllcyBvbiBgcnhzdGF0dXMtXHUwMDNlcnNfZGF0YWxlbmAgd2hpY2ggaXMgYW4gaW5pdGlhbGl6YXRpb24gdmFsdWUuIElmIHRoZSBsZW5ndGggY2hlY2sgaXMgbWV0LCBhbmQgYSBDUkMgZXJyb3IgaXMgZW5jb3VudGVyZWQsIGByc19waHllcnJgIGdldHMgc2V0IGFuZCB0aGUgZGF0YSBpcyBwYXNzZWQgdG8gYGF0aF9jbW5fcHJvY2Vzc19mZnQoKWAsIHdoZXJlIHRoZSBzYW1wbGUgYnVmZmVyIGlzIHplcm9lZCBvdXQuIE5vIGRhdGEgaXMgbGVha2VkLlxuXG5DcnVjaWFsbHksIEknbSBjaGVja2luZyBhZ2FpbnN0IHRoZSBLTVNBTiBjcml0ZXJpYSwgYXMgdGhpcyBpcyBhIHBvdGVudGlhbCBhcmVhIGZvciBsZWFrcywgYnV0IGFsc28gZm9yIHN0YW5kYXJkIEtBU0FOIGlzc3Vlcy4gSSd2ZSBjb25maXJtZWQ6XG5cbjEuICBUaGVyZSBhcmUgbm8ga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBtaWdodCBiZSB1bmluaXRpYWxpemVkLlxuMi4gIFRoZSBjb2RlIGRvZXNuJ3QgcmVseSBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb25kaXRpb25hbCBsb2dpYy5cbjMuICBObyBuZXcsIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgYW5kIHBvdGVudGlhbGx5IGxlZnQgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy5cbjQuICBUaGVyZSBhcmUgbm8gYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLlxuXG5UaGlzIGFuYWx5c2lzIHNob3dzIHRoYXQgYWxsIGxvY2FsIHZhcmlhYmxlcywgYHN0cnVjdGAgZmllbGRzLCBhbmQgYnVmZmVycyB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCB0aHVzLCBzdGFuZGFyZCBzYW5pdGl6ZXJzIChsaWtlIEtBU0FOKSBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIGFueSBpc3N1ZXMgdGhhdCBtYXkgYXJpc2UgZnJvbSBvdXQtb2YtYm91bmRzIGFjY2VzcywgZXRjLiBJJ20gY29tZm9ydGFibGUgc3RhdGluZyB0aGF0IHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IEtNU0FOIGNvbmNlcm5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDkwNywiT3V0cHV0VG9rZW5zIjoxODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMjo0MzoyOS42OTI0ODYxNThaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3BlY3RyYWwgc2NhbiBzYW1wbGUgbGVuZ3RoIHZhbGlkYXRpb24gdmlhIGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKCkgYW5kIGZvcndhcmRzIENSQy1lcnJvcmVkIGZyYW1lcyB3aXRoIG1hdGNoaW5nIGxlbmd0aHMgdG8gYXRoX2Ntbl9wcm9jZXNzX2ZmdCgpIGluIGF0aDlrX3J4X3ByZXBhcmUoKS4gQWxsIHZhcmlhYmxlcyBhbmQgc3RydWN0dXJlIGZpZWxkcyB1c2VkIChlLmcuLCByc19kYXRhbGVuLCByeF9zdGF0cy5yc19waHllcnIsIGNoYW5fdHlwZSwgZmZ0X2xlbikgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgYnVmZmVycywgcGVyZm9ybSBhbnkgY29weV90b191c2VyIG9wZXJhdGlvbnMsIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgb3IgZXhwb3NlIHBhZGRpbmcvdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcyAoc3VjaCBhcyBidWZmZXIgYm91bmRzIG9yIHBvaW50ZXIgaGFuZGxpbmcpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3BlY3RyYWwgc2NhbiBzYW1wbGUgbGVuZ3RoIHZhbGlkYXRpb24gdmlhIGF0aDlrX2h0Y19pc19zcGVjdHJhbF9zYW1wbGVfbGVuKCkgYW5kIGZvcndhcmRzIENSQy1lcnJvcmVkIGZyYW1lcyB3aXRoIG1hdGNoaW5nIGxlbmd0aHMgdG8gYXRoX2Ntbl9wcm9jZXNzX2ZmdCgpIGluIGF0aDlrX3J4X3ByZXBhcmUoKS4gQWxsIHZhcmlhYmxlcyBhbmQgc3RydWN0dXJlIGZpZWxkcyB1c2VkIChlLmcuLCByc19kYXRhbGVuLCByeF9zdGF0cy5yc19waHllcnIsIGNoYW5fdHlwZSwgZmZ0X2xlbikgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgYnVmZmVycywgcGVyZm9ybSBhbnkgY29weV90b191c2VyIG9wZXJhdGlvbnMsIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgb3IgZXhwb3NlIHBhZGRpbmcvdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcyAoc3VjaCBhcyBidWZmZXIgYm91bmRzIG9yIHBvaW50ZXIgaGFuZGxpbmcpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowvlqbn[1] Phase: Succeeded StartedAt: 2026-09-05 02:43:41 +0000 UTC FinishedAt: 2026-09-05 02:43:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlqbn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 02:43:41 +0000 UTC FinishedAt: 2026-09-05 02:43:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlqbn[2] Phase: Succeeded StartedAt: 2026-09-05 02:43:41 +0000 UTC FinishedAt: 2026-09-05 04:22:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 02:43:41 +0000 UTC FinishedAt: 2026-09-05 04:22:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 02:43:41 +0000 UTC FinishedAt: 2026-09-05 02:43:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 02:43:41 +0000 UTC FinishedAt: 2026-09-05 02:43:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"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-workflowvlqbn/series-workflowvlqbn-convert-artifact-614733330/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 02:43:51 +0000 UTC FinishedAt: 2026-09-05 03:01:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 02:43:51 +0000 UTC FinishedAt: 2026-09-05 03:01:42 +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:*20e811cf-0e32-4c62-b57c-ab7e2c00ac9a,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-workflowvlqbn/series-workflowvlqbn-convert-artifact-614733330/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": "e151547b-6ffb-4b64-b3c7-abc3e7a8907c", "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-workflowvlqbn/series-workflowvlqbn-build-action-3032389520/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 02:43:51 +0000 UTC FinishedAt: 2026-09-05 03:01:32 +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:*20e811cf-0e32-4c62-b57c-ab7e2c00ac9a,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-workflowvlqbn/series-workflowvlqbn-convert-artifact-614733330/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": "e151547b-6ffb-4b64-b3c7-abc3e7a8907c", "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-workflowvlqbn/series-workflowvlqbn-build-action-3032389520/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 03:01:42 +0000 UTC FinishedAt: 2026-09-05 03:01:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 03:01:42 +0000 UTC FinishedAt: 2026-09-05 03:01:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 03:01:42 +0000 UTC FinishedAt: 2026-09-05 03:01:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 03:01:42 +0000 UTC FinishedAt: 2026-09-05 03:01:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-workflowvlqbn/series-workflowvlqbn-convert-artifact-1382833709/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 03:01:52 +0000 UTC FinishedAt: 2026-09-05 03:03:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 03:01:52 +0000 UTC FinishedAt: 2026-09-05 03:03:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e151547b-6ffb-4b64-b3c7-abc3e7a8907c,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-workflowvlqbn/series-workflowvlqbn-build-action-3032389520/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-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 03:03:49 +0000 UTC FinishedAt: 2026-09-05 03:03:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 03:03:49 +0000 UTC FinishedAt: 2026-09-05 03:03:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 03:03:49 +0000 UTC FinishedAt: 2026-09-05 03:23:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 03:03:49 +0000 UTC FinishedAt: 2026-09-05 03:23:00 +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:*20e811cf-0e32-4c62-b57c-ab7e2c00ac9a,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-workflowvlqbn/series-workflowvlqbn-convert-artifact-1382833709/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": "8dc6896f-66b2-46d3-8668-75a2c196b63b", "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-workflowvlqbn/series-workflowvlqbn-build-action-1135649417/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 03:03:49 +0000 UTC FinishedAt: 2026-09-05 03:22:50 +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:*20e811cf-0e32-4c62-b57c-ab7e2c00ac9a,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-workflowvlqbn/series-workflowvlqbn-convert-artifact-1382833709/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": "8dc6896f-66b2-46d3-8668-75a2c196b63b", "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-workflowvlqbn/series-workflowvlqbn-build-action-1135649417/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 03:23:00 +0000 UTC FinishedAt: 2026-09-05 03:23:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 03:23:00 +0000 UTC FinishedAt: 2026-09-05 03:23:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 03:23:00 +0000 UTC FinishedAt: 2026-09-05 03:24:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 03:23:00 +0000 UTC FinishedAt: 2026-09-05 03:24:48 +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:*8dc6896f-66b2-46d3-8668-75a2c196b63b,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-workflowvlqbn/series-workflowvlqbn-build-action-1135649417/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-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 03:24:58 +0000 UTC FinishedAt: 2026-09-05 04:22:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 03:24:58 +0000 UTC FinishedAt: 2026-09-05 04:22:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"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:*e151547b-6ffb-4b64-b3c7-abc3e7a8907c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8dc6896f-66b2-46d3-8668-75a2c196b63b,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-workflowvlqbn/series-workflowvlqbn-build-action-3032389520/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-workflowvlqbn/series-workflowvlqbn-build-action-1135649417/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 03:24:58 +0000 UTC FinishedAt: 2026-09-05 03:25:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 03:24:58 +0000 UTC FinishedAt: 2026-09-05 03:25:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"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-workflowvlqbn/series-workflowvlqbn-convert-artifact-1718693010/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 03:24:58 +0000 UTC FinishedAt: 2026-09-05 03:24:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 03:24:58 +0000 UTC FinishedAt: 2026-09-05 03:24:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 03:24:58 +0000 UTC FinishedAt: 2026-09-05 03:24:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 03:25:08 +0000 UTC FinishedAt: 2026-09-05 04:22:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlqbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath9k_rx_tasklet","ath9k_htc_rxep","ath_cmn_process_fft"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_HTC","ATH9K_HTC_DEBUGFS","ATH9K_COMMON_SPECTRAL"],"series_id":"2da910d4-c592-40bc-af85-81ad73ef8c2b","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-09-05 03:25:08 +0000 UTC FinishedAt: 2026-09-05 04:22:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e151547b-6ffb-4b64-b3c7-abc3e7a8907c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8dc6896f-66b2-46d3-8668-75a2c196b63b,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-workflowvlqbn/series-workflowvlqbn-build-action-3032389520/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-workflowvlqbn/series-workflowvlqbn-build-action-1135649417/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-workflowvlqbn/series-workflowvlqbn-convert-artifact-1718693010/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,}