Name: series-workflow6czl9 Phase: Succeeded StartedAt: 2026-07-29 09:15:21 +0000 UTC FinishedAt: 2026-07-29 13:24:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6czl9[0] Phase: Succeeded StartedAt: 2026-07-29 09:15:21 +0000 UTC FinishedAt: 2026-07-29 09:24:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6czl9[0].run-triage Phase: Succeeded StartedAt: 2026-07-29 09:15:21 +0000 UTC FinishedAt: 2026-07-29 09:24:26 +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": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_GADGET", "USB_CONFIGFS", "SND", "USB_CONFIGFS_F_MIDI2" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_GADGET", "USB_CONFIGFS", "SND", "USB_CONFIGFS_F_MIDI2" ], "series_id": "dffb511f-6ee1-43ed-8c4e-7fb553ab816e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "f_midi2_set_alt", "f_midi2_disable", "f_midi2_bind", "f_midi2_unbind" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9HQURHRVQmIzM0OywKICAgICYjMzQ7VVNCX0NPTkZJR0ZTJiMzNDssCiAgICAmIzM0O1NORCYjMzQ7LAogICAgJiMzNDtVU0JfQ09ORklHRlNfRl9NSURJMiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZfbWlkaTJfc2V0X2FsdCYjMzQ7LAogICAgJiMzNDtmX21pZGkyX2Rpc2FibGUmIzM0OywKICAgICYjMzQ7Zl9taWRpMl9iaW5kJiMzNDssCiAgICAmIzM0O2ZfbWlkaTJfdW5iaW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIG9mIGVuZHBvaW50IHJlcXVlc3RzIGluIHRoZSBVU0IgTUlESSAyLjAgZ2FkZ2V0IGZ1bmN0aW9uLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdGhyb3VnaCBVU0IgZ2FkZ2V0IGNvbmZpZ3VyYXRpb24gb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IHdoZW4gc2V0dGluZyBhbHRlcm5hdGUgc2V0dGluZ3MgKGZfbWlkaTJfc2V0X2FsdCkgYW5kIGRpc2FibGluZyB0aGUgZnVuY3Rpb24gKGZfbWlkaTJfZGlzYWJsZSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlMjFlOWZhNjljYjdkOTEyMTNmMzEwYmNlYWYyODdjZGNlNzNjNzNjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMDk6MjE6MzAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmNcbmluZGV4IDE5ZmRhYzAyNDM0MzkuLjVlNTRjZjk5NDcwN2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jXG5AQCAtMTE0NSw3ICYjNDM7MTE0NSw3IEBAIHN0YXRpYyBpbnQgZl9taWRpMl9hbGxvY19lcF9yZXFzKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqdXNiX2VwKVxuIFx0aWYgKCF1c2JfZXAtXHUwMDNlcmVxcylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtaWRpMi1cdTAwM2VpbmZvLm51bV9yZXFzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHVzYl9lcC1cdTAwM2VudW1fcmVxczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKHVzYl9lcC1cdTAwM2VyZXFzW2ldLnJlcSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0dXNiX2VwLVx1MDAzZXJlcXNbaV0ucmVxID0gYWxsb2NfZXBfcmVxKHVzYl9lcC1cdTAwM2V1c2JfZXAsXG5AQCAtMTE2MCwxMCAmIzQzOzExNjAsOSBAQCBzdGF0aWMgaW50IGZfbWlkaTJfYWxsb2NfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcbiAvKiBGcmVlIGFsbG9jYXRlZCByZXF1ZXN0cyAqL1xuIHN0YXRpYyB2b2lkIGZfbWlkaTJfZnJlZV9lcF9yZXFzKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqdXNiX2VwKVxuIHtcbi1cdHN0cnVjdCBmX21pZGkyICptaWRpMiA9IHVzYl9lcC1cdTAwM2VjYXJkO1xuIFx0aW50IGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtaWRpMi1cdTAwM2VpbmZvLm51bV9yZXFzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHVzYl9lcC1cdTAwM2VudW1fcmVxczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKCF1c2JfZXAtXHUwMDNlcmVxc1tpXS5yZXEpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGZyZWVfZXBfcmVxKHVzYl9lcC1cdTAwM2V1c2JfZXAsIHVzYl9lcC1cdTAwM2VyZXFzW2ldLnJlcSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9HQURHRVQmIzM0OywKICAgICYjMzQ7VVNCX0NPTkZJR0ZTJiMzNDssCiAgICAmIzM0O1NORCYjMzQ7LAogICAgJiMzNDtVU0JfQ09ORklHRlNfRl9NSURJMiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZfbWlkaTJfc2V0X2FsdCYjMzQ7LAogICAgJiMzNDtmX21pZGkyX2Rpc2FibGUmIzM0OywKICAgICYjMzQ7Zl9taWRpMl9iaW5kJiMzNDssCiAgICAmIzM0O2ZfbWlkaTJfdW5iaW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIG9mIGVuZHBvaW50IHJlcXVlc3RzIGluIHRoZSBVU0IgTUlESSAyLjAgZ2FkZ2V0IGZ1bmN0aW9uLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdGhyb3VnaCBVU0IgZ2FkZ2V0IGNvbmZpZ3VyYXRpb24gb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IHdoZW4gc2V0dGluZyBhbHRlcm5hdGUgc2V0dGluZ3MgKGZfbWlkaTJfc2V0X2FsdCkgYW5kIGRpc2FibGluZyB0aGUgZnVuY3Rpb24gKGZfbWlkaTJfZGlzYWJsZSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlMjFlOWZhNjljYjdkOTEyMTNmMzEwYmNlYWYyODdjZGNlNzNjNzNjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjkgMDk6MjE6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYwppbmRleCAxOWZkYWMwMjQzNDM5Li41ZTU0Y2Y5OTQ3MDdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMKQEAgLTExNDUsNyAmIzQzOzExNDUsNyBAQCBzdGF0aWMgaW50IGZfbWlkaTJfYWxsb2NfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcCkKIAlpZiAoIXVzYl9lcC0mZ3Q7cmVxcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgbWlkaTItJmd0O2luZm8ubnVtX3JlcXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB1c2JfZXAtJmd0O251bV9yZXFzOyBpJiM0MzsmIzQzOykgewogCQlpZiAodXNiX2VwLSZndDtyZXFzW2ldLnJlcSkKIAkJCWNvbnRpbnVlOwogCQl1c2JfZXAtJmd0O3JlcXNbaV0ucmVxID0gYWxsb2NfZXBfcmVxKHVzYl9lcC0mZ3Q7dXNiX2VwLApAQCAtMTE2MCwxMCAmIzQzOzExNjAsOSBAQCBzdGF0aWMgaW50IGZfbWlkaTJfYWxsb2NfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcCkKIC8qIEZyZWUgYWxsb2NhdGVkIHJlcXVlc3RzICovCiBzdGF0aWMgdm9pZCBmX21pZGkyX2ZyZWVfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcCkKIHsKLQlzdHJ1Y3QgZl9taWRpMiAqbWlkaTIgPSB1c2JfZXAtJmd0O2NhcmQ7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgbWlkaTItJmd0O2luZm8ubnVtX3JlcXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB1c2JfZXAtJmd0O251bV9yZXFzOyBpJiM0MzsmIzQzOykgewogCQlpZiAoIXVzYl9lcC0mZ3Q7cmVxc1tpXS5yZXEpCiAJCQljb250aW51ZTsKIAkJZnJlZV9lcF9yZXEodXNiX2VwLSZndDt1c2JfZXAsIHVzYl9lcC0mZ3Q7cmVxc1tpXS5yZXEpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzE5CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFVTQiBNSURJIEdhZGdldCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jYC4gSXQmIzM5O3MgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIG1vZGlmaWNhdGlvbiwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGBtaWRpMi0mZ3Q7aW5mby5udW1fcmVxc2AgdG8gYHVzYl9lcC0mZ3Q7bnVtX3JlcXNgIHdpdGhpbiB0aGUgYGZfbWlkaTJfYWxsb2NfZXBfcmVxc2AgYW5kIGBmX21pZGkyX2ZyZWVfZXBfcmVxc2AgZnVuY3Rpb25zLiBUaGF0IHJpZ2h0IHRoZXJlIHN1Z2dlc3RzIGEgYnVnIGZpeCDigJMgc29tZW9uZSB3YXMgdXNpbmcgdGhlIHdyb25nIHZhcmlhYmxlLCBwcm9iYWJseSBhIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlIHdpdGggcmVxdWVzdCBxdWV1ZXMuIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBtaWdodCBoYXZlIGxlZCB0byBwb3RlbnRpYWwgZW5kcG9pbnQgYWxsb2NhdGlvbiBvciBkZWFsbG9jYXRpb24gcHJvYmxlbXMuCgpUaGVzZSBmdW5jdGlvbnMsIGBmX21pZGkyX2FsbG9jX2VwX3JlcXNgIGFuZCBgZl9taWRpMl9mcmVlX2VwX3JlcXNgLCBhcmUgZGVjbGFyZWQgYXMgc3RhdGljLCB3aGljaCBpcyBnb29kLiBJdCBsaW1pdHMgdGhlaXIgc2NvcGUgYW5kIG1ha2VzIGl0IGVhc2llciB0byB0cmFjZSB0aGVpciB1c2FnZSB3aXRoaW4gdGhlIGZpbGUuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hlcmUgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgY2FsbGVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHRzIHdpdGhpbiB0aGUgbGFyZ2VyIE1JREkgZ2FkZ2V0IGZyYW1ld29yay4gSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBhbnkgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIG9yIHN5bWJvbCBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBpbmZsdWVuY2UgaG93IHRoaXMgY29kZSBnZXRzIGNvbXBpbGVkIG9yIGxpbmtlZCBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmX21pZGkyX2FsbG9jX2VwX3JlcXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTEyMj1zdGF0aWMgdm9pZCBmX21pZGkyX2Ryb3BfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTExMzctLyogQWxsb2NhdGUgcmVxdWVzdHMgZm9yIHRoZSBnaXZlbiBFUCAqL1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxMTM4OnN0YXRpYyBpbnQgZl9taWRpMl9hbGxvY19lcF9yZXFzKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqdXNiX2VwKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMTM5LXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTEyNDk9c3RhdGljIGludCBmX21pZGkyX3N0YXJ0X2VwcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKmVwX2luLFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTI2MS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTI2MjpcdGVyciA9IGZfbWlkaTJfYWxsb2NfZXBfcmVxcyhlcF9pbik7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyNjMtXHRpZiAoZXJyKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjY0LVx0XHRyZXR1cm4gZXJyO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxMjY1Olx0ZXJyID0gZl9taWRpMl9hbGxvY19lcF9yZXFzKGVwX291dCk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyNjYtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxODQKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKlRyYWNpbmcgdGhlIENhbGwgUGF0aDogZl9taWRpMl9zdGFydF9lcHMqKgoKT2theSwgc28gYGZfbWlkaTJfc3RhcnRfZXBzYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBpbml0aWF0ZWQgdGhpcyB3aG9sZSBwcm9jZXNzLiBUaGF0JiMzOTtzIG91ciBlbnRyeSBwb2ludCwgYW5kIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHRoYXQgZm9sbG93cyBmcm9tIHRoZXJlLiBUaW1lIHRvIGRpZyBpbiBhbmQgdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYGZfbWlkaTJfc3RhcnRfZXBzYCBjYWxscywgd2hhdCBkYXRhIGl0IHBhc3NlcywgYW5kIHdoZXJlIHRoZSBwcm9ncmFtIGdvZXMgbmV4dC4gVGhpcyBsZXZlbCBvZiBkZXRhaWwgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLiBUaGUgbmV4dCBzdGVwcyB3aWxsIGdpdmUgbWUgaW5zaWdodHMgdG8gdGhlIHJvb3QgY2F1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zl9taWRpMl9zdGFydF9lcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTIzOT1zdGF0aWMgdm9pZCBmX21pZGkyX3N0b3BfZXBzKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqZXBfaW4sXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjQ4LS8qIHN0YXJ0L3F1ZXVlIGJvdGggSU4gYW5kIE9VVCBFUHMgKi9cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTI0OTpzdGF0aWMgaW50IGZfbWlkaTJfc3RhcnRfZXBzKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqZXBfaW4sXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyNTAtXHRcdFx0ICAgICBzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKmVwX291dCxcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTEyNzQ9c3RhdGljIGludCBmX21pZGkyX3NldF9hbHQoc3RydWN0IHVzYl9mdW5jdGlvbiAqZm4sIHVuc2lnbmVkIGludCBpbnRmLFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTMwNC1cdGlmIChvcF9tb2RlID09IE1JRElfT1BfTU9ERV9NSURJMSlcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTMwNTpcdFx0cmV0dXJuIGZfbWlkaTJfc3RhcnRfZXBzKFx1MDAyNm1pZGkyLVx1MDAzZW1pZGkxX2VwX2luLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMzA2LVx0XHRcdFx0XHQgXHUwMDI2bWlkaTItXHUwMDNlbWlkaTFfZXBfb3V0LCBmbik7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMzExLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxMzEyOlx0XHRcdGVyciA9IGZfbWlkaTJfc3RhcnRfZXBzKFx1MDAyNmVwLVx1MDAzZWVwX2luLCBcdTAwMjZlcC1cdTAwM2VlcF9vdXQsIGZuKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTMxMy1cdFx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MjkKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1JREkgRnVuY3Rpb24gSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gYGZfbWlkaTJfc2V0X2FsdGAgaXMgYSBgdXNiX2Z1bmN0aW9uYCBjYWxsYmFjaywgd2hpY2ggbWVhbnMgaXQmIzM5O3MgYSBjcml0aWNhbCBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgVVNCIE1JREkgY29tbXVuaWNhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgZnJhbWV3b3JrLiBNeSBuZXh0IHN0ZXAsIGFuZCBxdWl0ZSBsb2dpY2FsbHksIGlzIHRvIGludmVzdGlnYXRlIGBmX21pZGkyX2ZyZWVfZXBfcmVxc2AuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIGVuZHBvaW50IHJlcXVlc3Qgc3RydWN0dXJlcyBhcmUgY2xlYW5lZCB1cCBvciBtYW5hZ2VkLCBwb3RlbnRpYWxseSBhZnRlciBhbiBhbHRlcm5hdGUgc2V0dGluZyBjaGFuZ2Ugb3IgYSBjb25maWd1cmF0aW9uIGFsdGVyYXRpb24gcmVsYXRlZCB0byB0aGlzIGZ1bmN0aW9uLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyByZXNvdXJjZXMgYXJlIGhhbmRsZWQgYW5kIGZyZWVkIGluIHJlbGF0aW9uIHRvIHRoaXMga2V5IGNhbGxiYWNrLCBzcGVjaWZpY2FsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zl9taWRpMl9mcmVlX2VwX3JlcXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTEzOD1zdGF0aWMgaW50IGZfbWlkaTJfYWxsb2NfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTExNjAtLyogRnJlZSBhbGxvY2F0ZWQgcmVxdWVzdHMgKi9cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTE2MTpzdGF0aWMgdm9pZCBmX21pZGkyX2ZyZWVfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTE2Mi17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0xMjAzPXN0YXRpYyB2b2lkIGZfbWlkaTJfZnJlZV9lcChzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyMDYtXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyMDc6XHRmX21pZGkyX2ZyZWVfZXBfcmVxcyh1c2JfZXApO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjA4LVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTIzOT1zdGF0aWMgdm9pZCBmX21pZGkyX3N0b3BfZXBzKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqZXBfaW4sXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjQzLVx0Zl9taWRpMl9kcm9wX3JlcXMoZXBfb3V0KTtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTI0NDpcdGZfbWlkaTJfZnJlZV9lcF9yZXFzKGVwX2luKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTI0NTpcdGZfbWlkaTJfZnJlZV9lcF9yZXFzKGVwX291dCk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyNDYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NDEKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipBbmFseXppbmcgTUlESSBFbmRwb2ludCBDbGVhbnVwKioKCk9rYXksIHNvIEkgc2VlIGBmX21pZGkyX2ZyZWVfZXBgIGFuZCBgZl9taWRpMl9zdG9wX2Vwc2AgYXJlIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucy4gVGhhdCYjMzk7cyBteSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgTUlESSBlbmRwb2ludHMgYXJlIG1hbmFnZWQgYW5kIHJlbGVhc2VkLiBJIG5lZWQgdG8gZGlnIGludG8gYGZfbWlkaTJfZnJlZV9lcGAgc3BlY2lmaWNhbGx5LiBNeSBmb2N1cyB3aWxsIGJlIG9uIHVuZGVyc3RhbmRpbmcgd2hhdCBpdCBkb2VzIGFuZCwgY3JpdGljYWxseSwgd2hvIGRlcGVuZHMgb24gaXQuIFdoYXQgcmVzb3VyY2VzIGRvZXMgaXQgcmVsZWFzZT8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGFmZmVjdGVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgbGlmZSBjeWNsZSBvZiBhbiBlbmRwb2ludC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdHJhY2luZyB0aGF0IGZ1bmN0aW9uIGFuZCBzZWVpbmcgd2hhdCBpdCBhY3R1YWxseSBkb2VzLiBJIHdhbnQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGhvdyB0aGVzZSBlbmRwb2ludHMgYXJlIGNsZWFuZWQgdXAgdG8gbWFrZSBzdXJlIG5vIHJlc291cmNlcyBhcmUgbGVha2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmX21pZGkyX2ZyZWVfZXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTEzOD1zdGF0aWMgaW50IGZfbWlkaTJfYWxsb2NfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTExNjAtLyogRnJlZSBhbGxvY2F0ZWQgcmVxdWVzdHMgKi9cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTE2MTpzdGF0aWMgdm9pZCBmX21pZGkyX2ZyZWVfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTE2Mi17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0xMTc0PXN0YXRpYyBpbnQgZl9taWRpMl9pbml0X2VwKHN0cnVjdCBmX21pZGkyICptaWRpMiwgc3RydWN0IGZfbWlkaTJfZXAgKmVwLFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTIwMi0vKiBGcmVlIEVQICovXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyMDM6c3RhdGljIHZvaWQgZl9taWRpMl9mcmVlX2VwKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqdXNiX2VwKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjA0LXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyMDYtXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyMDc6XHRmX21pZGkyX2ZyZWVfZXBfcmVxcyh1c2JfZXApO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjA4LVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTIzOT1zdGF0aWMgdm9pZCBmX21pZGkyX3N0b3BfZXBzKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqZXBfaW4sXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjQzLVx0Zl9taWRpMl9kcm9wX3JlcXMoZXBfb3V0KTtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTI0NDpcdGZfbWlkaTJfZnJlZV9lcF9yZXFzKGVwX2luKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTI0NTpcdGZfbWlkaTJfZnJlZV9lcF9yZXFzKGVwX291dCk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyNDYtfVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MjA1Nz1zdGF0aWMgdm9pZCBmX21pZGkyX3VuYmluZChzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0yMDYzLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoyMDY0Olx0Zl9taWRpMl9mcmVlX2VwKFx1MDAyNm1pZGkyLVx1MDAzZW1pZGkxX2VwX2luKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MjA2NTpcdGZfbWlkaTJfZnJlZV9lcChcdTAwMjZtaWRpMi1cdTAwM2VtaWRpMV9lcF9vdXQpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0yMDY2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWlkaTItXHUwMDNlbnVtX2VwczsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MjA2NzpcdFx0Zl9taWRpMl9mcmVlX2VwKFx1MDAyNm1pZGkyLVx1MDAzZW1pZGkyX2Vwc1tpXS5lcF9pbik7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjIwNjg6XHRcdGZfbWlkaTJfZnJlZV9lcChcdTAwMjZtaWRpMi1cdTAwM2VtaWRpMl9lcHNbaV0uZXBfb3V0KTtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMjA2OS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY5MAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgTUlESSBFbmRwb2ludCBDbGVhbnVwKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlc2UgTUlESSBlbmRwb2ludHMgYXJlIGJlaW5nIGNsZWFuZWQgdXAsIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLiBgZl9taWRpMl91bmJpbmRgIGRpcmVjdGx5IGNhbGxzIGBmX21pZGkyX2ZyZWVfZXBgLCB3aGljaCBtYWtlcyBzZW5zZSDigJMgdW5iaW5kaW5nIHRoZSBlbmRwb2ludCBpbXBsaWVzIGZyZWVpbmcgaXRzIHJlc291cmNlcy4gTm93LCBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHRoZSBicm9hZGVyIHN0b3BwaW5nIHByb2Nlc3MsIGFuZCBpdCBsb29rcyBsaWtlIGBmX21pZGkyX3N0b3BfZXBzYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRvIGV4YW1pbmUuIEZyb20gYSBxdWljayBnbGFuY2UsIGl0IGNhbGxzIGBmX21pZGkyX2ZyZWVfZXBfcmVxc2AuIFRoaXMgc3VnZ2VzdHMgdGhhdCBgZl9taWRpMl9zdG9wX2Vwc2AgaXMgcmVzcG9uc2libGUgZm9yIHN0b3BwaW5nIGFuZCBjbGVhbmluZyB1cCBhbGwgdGhlIHJlcXVlc3RzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZW5kcG9pbnRzLCB3aGljaCBpbiB0dXJuIGxlYWRzIHRvIGZyZWVpbmcgdGhlIGVuZHBvaW50cyB0aGVtc2VsdmVzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIGBmX21pZGkyX2ZyZWVfZXBfcmVxc2AgdG8gdW5kZXJzdGFuZCB0aGUgZ3JhbnVsYXIgYXNwZWN0cyBvZiB0aGlzIGNsZWFudXAgcHJvY2VkdXJlLCBzdWNoIGFzIHdoaWNoIHJlc291cmNlcyBhcmUgYmVpbmcgZnJlZWQgYW5kIHRoZSBvcmRlcmluZyBvZiB0aGUgb3BlcmF0aW9ucy4gSSBhc3N1bWUgdGhlIGByZXFzYCBhcmUgcmVxdWVzdCBvYmplY3RzIHJlbGF0ZWQgdG8gdGhlIGVuZHBvaW50cy4gVGhpcyB3aWxsIG5lZWQgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmX21pZGkyX3N0b3BfZXBzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTEyMTY9c3RhdGljIHZvaWQgZl9taWRpMl9xdWV1ZV9vdXRfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyMzgtLyogc3RvcCBib3RoIElOIGFuZCBPVVQgRVBzICovXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyMzk6c3RhdGljIHZvaWQgZl9taWRpMl9zdG9wX2VwcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKmVwX2luLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjQwLVx0XHRcdCAgICAgc3RydWN0IGZfbWlkaTJfdXNiX2VwICplcF9vdXQpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0xMjc0PXN0YXRpYyBpbnQgZl9taWRpMl9zZXRfYWx0KHN0cnVjdCB1c2JfZnVuY3Rpb24gKmZuLCB1bnNpZ25lZCBpbnQgaW50Zixcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyOTQtXHRpZiAob3BfbW9kZSAhPSBNSURJX09QX01PREVfTUlESTEpXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyOTU6XHRcdGZfbWlkaTJfc3RvcF9lcHMoXHUwMDI2bWlkaTItXHUwMDNlbWlkaTFfZXBfaW4sIFx1MDAyNm1pZGkyLVx1MDAzZW1pZGkxX2VwX291dCk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyOTYtXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjk5LVx0XHRcdGVwID0gXHUwMDI2bWlkaTItXHUwMDNlbWlkaTJfZXBzW2ldO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxMzAwOlx0XHRcdGZfbWlkaTJfc3RvcF9lcHMoXHUwMDI2ZXAtXHUwMDNlZXBfaW4sIFx1MDAyNmVwLVx1MDAzZWVwX291dCk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEzMDEtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ2OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVTQiBNSURJIEdhZGdldCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBmX21pZGkyX3NldF9hbHRgIGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlaW5nIGNhbGxlZCwgYW5kIEkgc2VlIGl0JiMzOTtzIGNhbGxpbmcgYm90aCBgZl9taWRpMl9zdG9wX2Vwc2AgYW5kIGBmX21pZGkyX3N0YXJ0X2Vwc2AuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IGl0IHNlZW1zIHRvIGJlIG1hbmFnaW5nIHRoZSBlbmRwb2ludHMuIFJpZ2h0LCBhbmQgdGhpcyBgZl9taWRpMl9zZXRfYWx0YCBpcyB0aGUgYHNldF9hbHRgIGNhbGxiYWNrIHdpdGhpbiB0aGUgYHVzYl9mdW5jdGlvbmAgc3RydWN0dXJlLiBUaGF0IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIFVTQiBnYWRnZXQgY29uZmlndXJhdGlvbiBpdHNlbGYuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIFRoZSBjb2RlIGlzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmNgLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggYGZfbWlkaTIuY2AgdG8gc2VlIGhvdyB0aGlzIGVuZHBvaW50IHN3aXRjaGluZyBpcyBiZWluZyB0cmlnZ2VyZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBgc2V0X2FsdGAgY2FsbGJhY2sgd2l0aGluIHRoZSBVU0IgY29uZmlndXJhdGlvbiBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmX21pZGkyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZT01MD1vYmotJChDT05GSUdfVVNCX0ZfTUlESSlcdCYjNDM7PSB1c2JfZl9taWRpLm9cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZTo1MTp1c2JfZl9taWRpMi15XHRcdFx0Oj0gZl9taWRpMi5vXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGU6NTI6b2JqLSQoQ09ORklHX1VTQl9GX01JREkyKVx0JiM0Mzs9IHVzYl9mX21pZGkyLm9cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZS01My11c2JfZl9oaWQteVx0XHRcdDo9IGZfaGlkLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk2MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgaXM6CgoqKkV4YW1pbmluZyBNSURJMiBVU0IgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgc3lzdGVtIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIGBDT05GSUdfVVNCX0ZfTUlESTJgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIEtjb25maWcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb25maWcgb3B0aW9uICphY3R1YWxseSogbWVhbnMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBzeXN0ZW0uIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBvdmVyIHRvIEtjb25maWcgdG8gc2VlIHdoYXQmIzM5O3MgZGVmaW5lZCBmb3IgYENPTkZJR19VU0JfRl9NSURJMmAuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSByZXN0IG9mIHRoZSBVU0Igc3RhY2sgYW5kLCBieSBleHRlbnNpb24sIGF1ZGlvIHByb2Nlc3Npbmc/IEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlIHRvIHVuZGVyc3RhbmQgdGhpcyBzaW5nbGUgc2V0dGluZy4gVGhpcyBpcyBnb2luZyB0byBiZSBpbnRlcmVzdGluZy4gTGV0JiMzOTtzIHNlZSB3aGF0IEtjb25maWcgaGFzIHRvIHNheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTQl9GX01JREkyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz0yMDk9Y29uZmlnIFVTQl9GX01JRElcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0yMTEtXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzoyMTI6Y29uZmlnIFVTQl9GX01JREkyXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0yMTMtXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjY5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYSBUcmlzdGF0ZSYjMzk7cyBBY3RpdmF0aW9uKioKCkFscmlnaHQsIHRoaXMgbG9va3MgbGlrZSBhIGNsZXZlcmx5IGNvbmNlYWxlZCB0cmlzdGF0ZSBjaXJjdWl0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIGRyaXZpbmcgdGhlIHNlbGVjdCBsaW5lcz8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBsb2dpYyB0aGF0JiMzOTtzIGRpY3RhdGluZyB3aGVuIHRoaXMgdGhpbmcgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhbmQgaW4gd2hpY2ggc3RhdGUuIElzIGl0IGEgc2ltcGxlIGNvbWJpbmF0aW9uIG9mIGlucHV0cywgb3IgaXMgdGhlcmUgYSBtb3JlIGNvbXBsZXggc3RhdGUgbWFjaGluZSBpbnZvbHZlZD8gSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBwb3RlbnRpYWwgc2NlbmFyaW9zOiBsYXRjaGluZyBjb25kaXRpb25zLCBhc3luY2hyb25vdXMgc2lnbmFscyB0aGF0IGNvdWxkIGJlIGNyZWF0aW5nIGdsaXRjaGVzLCBvciBtYXliZSBldmVuIHNvbWUgc3VidGxlIHRpbWluZyBpc3N1ZXMgdGhhdCBhcmUgY2F1c2luZyB1bmV4cGVjdGVkIGJlaGF2aW9yLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoaXMgdHJpc3RhdGUgaXMgYmVpbmcgdXNlZCB0byBzaGFyZSBhIGJ1cyBvciBtdWx0aXBsZXggc2lnbmFscyBhbmQgd2hpY2ggc2lnbmFscyBhcmUgYmVpbmcgbXVsdGlwbGV4ZWQgYW5kIHdoYXQgdGhlIHRpbWluZyBiZXR3ZWVuIHRoZXNlIGlzLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBzaWduYWxzIGJhY2sgdG8gdGhlaXIgc291cmNlIGFuZCBkZXRlcm1pbmUgdGhlIHByZWNpc2UgY29uZGl0aW9ucyB0aGF0IGFjdGl2YXRlIGVhY2ggc3RhdGUuIFRpbWUgdG8gZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgVVNCX0ZfTUlESTImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTQ0NT1jb25maWcgVVNCX0NPTkZJR0ZTX0ZfTUlESTJcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy00NDktXHRzZWxlY3QgVVNCX0xJQkNPTVBPU0lURVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6NDUwOlx0c2VsZWN0IFVTQl9GX01JREkyXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy00NTEtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2MTYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIE1JREkyIENvbmZpZ0ZTIERlcGVuZGVuY3kgTGFuZHNjYXBlKioKCkFscmlnaHQsIHNvIGBVU0JfQ09ORklHRlNfRl9NSURJMmAgaGFzIGJlZW4gc2VsZWN0ZWQuIFRoYXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBtZW50YWwgY2hlY2s6IHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgYW5kIGRlcGVuZGVuY2llcz8gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYFVTQl9GX01JREkyYCBpcyBhbHNvIHB1bGxlZCBpbi4gVGhpcyBpcyBhIHN0YW5kYXJkIHByb2NlZHVyZTsgSSYjMzk7bSBub3QgZ29pbmcgdG8ganVzdCBhc3N1bWUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gaXMgcGVyZmVjdGx5IGF1dG9tYXRlZCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgYXMgc3BlY2lmaWMgYW5kIG51YW5jZWQgYXMgTUlESSAyLiBJIG5lZWQgdG8gZXhwbGljaXRseSBjb25maXJtIHRoZSBkaXJlY3QgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXAgaGVyZS4gSXQmIzM5O3MgdG9vIGVhc3kgdG8gbWlzcyBzb21ldGhpbmcgaW4gYSBjb21wbGV4IGNvbmZpZyBzcGFjZS4gTXkgbmV4dCBhY3Rpb24gaXMgdG8gdmVyaWZ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX0NPTkZJR0ZTX0ZfTUlESTImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTQzMT1jb25maWcgVVNCX0NPTkZJR0ZTX0ZfTUlESVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTQ0NC1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjQ0NTpjb25maWcgVVNCX0NPTkZJR0ZTX0ZfTUlESTJcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTQ0Ni1cdGJvb2wgXCYjMzQ7TUlESSAyLjAgZnVuY3Rpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk1MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gVVNCIEdhZGdldCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFVTQiBnYWRnZXRzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGBkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZ2AgZmlsZSwgYXJvdW5kIGxpbmUgNDQ1LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSB2YXJpb3VzIGdhZGdldCBkcml2ZXJzIGFuZCB0aGVpciBjb25maWd1cmF0aW9uIHNldHRpbmdzLiBUaGVyZSYjMzk7cyBhIHBhcnRpY3VsYXIgdXNlIGNhc2UgSSYjMzk7bSB0YWNrbGluZywgYW5kIEkgc3VzcGVjdCB0aGUgYW5zd2VyIGxpZXMgd2l0aGluIHRob3NlIEtjb25maWcgb3B0aW9ucywgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkuIFRoZSBnb2FsIGlzIHRvIHNlZSB3aGljaCBwYXJhbWV0ZXJzIGFyZSBhdmFpbGFibGUsIHdoaWNoIGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiBkaWZmZXJlbnQgY2hvaWNlcyBtaWdodCBiZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgZ2FkZ2V0IHN0YWNrIGFzIGEgd2hvbGUuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzdGFydCBkaWdnaW5nIGludG8gdGhlIGRldGFpbHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ0MDpcdFx0ICBpbnB1dCBhbmQgb25lIE1JREkgb3V0cHV0LiBUaGVzZSBNSURJIGphY2tzIGFwcGVhciBhc1xuIDQ0MTpcdFx0ICBhIHNvdW5kIFwmIzM0O2NhcmRcJiMzNDsgaW4gdGhlIEFMU0Egc291bmQgc3lzdGVtLiBPdGhlciBNSURJXG4gNDQyOlx0XHQgIGNvbm5lY3Rpb25zIGNhbiB0aGVuIGJlIG1hZGUgb24gdGhlIGdhZGdldCBzeXN0ZW0sIHVzaW5nXG4gNDQzOlx0XHQgIEFMU0EmIzM5O3MgYWNvbm5lY3QgdXRpbGl0eSBldGMuXG4gNDQ0Olx0XG4gNDQ1Olx0Y29uZmlnIFVTQl9DT05GSUdGU19GX01JREkyXG4gNDQ2Olx0XHRib29sIFwmIzM0O01JREkgMi4wIGZ1bmN0aW9uXCYjMzQ7XG4gNDQ3Olx0XHRkZXBlbmRzIG9uIFVTQl9DT05GSUdGU1xuIDQ0ODpcdFx0ZGVwZW5kcyBvbiBTTkRcbiA0NDk6XHRcdHNlbGVjdCBVU0JfTElCQ09NUE9TSVRFXG4gNDUwOlx0XHRzZWxlY3QgVVNCX0ZfTUlESTJcbiA0NTE6XHRcdGhlbHBcbiA0NTI6XHRcdCAgVGhlIE1JREkgMi4wIGZ1bmN0aW9uIGRyaXZlciBwcm92aWRlcyB0aGUgZ2VuZXJpYyBlbXVsYXRlZFxuIDQ1MzpcdFx0ICBVU0IgTUlESSAyLjAgaW50ZXJmYWNlLCBsb29wZWQgYmFjayB0byBBTFNBIFVNUCByYXdtaWRpXG4gNDU0Olx0XHQgIGRldmljZSBvbiB0aGUgZ2FkZ2V0IGhvc3QuIEl0IHN1cHBvcnRzIFVNUCAxLjEgc3BlYyBhbmRcbiA0NTU6XHRcdCAgcmVzcG9uZHMgVU1QIFN0cmVhbSBtZXNzYWdlcyBmb3IgVU1QIEVuZHBvaW50IGFuZCBGdW5jdGlvblxuIDQ1NjpcdFx0ICBCbG9jayBpbmZvcm1hdGlvbiAvIGNvbmZpZ3VyYXRpb24uXG4gNDU3Olx0XG4gNDU4Olx0Y29uZmlnIFVTQl9DT05GSUdGU19GX0hJRFxuIDQ1OTpcdFx0Ym9vbCBcJiMzNDtISUQgZnVuY3Rpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUwMwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDI1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1JREkyIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgTUlESTIgY29uZmlndXJhdGlvbiBzZXR1cC4gVGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIHRoYXQgaXQmIzM5O3MgZnVuZGFtZW50YWxseSByZWxpYW50IG9uIGBVU0JfQ09ORklHRlNgIGFuZCBgU05EYC4gTWFrZXMgc2Vuc2UsIHdlJiMzOTtyZSBidWlsZGluZyBhIFVTQiBnYWRnZXQgY29uZmlndXJhdGlvbiB0aGF0IGludm9sdmVzIHNvdW5kLiBBbmQsIG9mIGNvdXJzZSwgdGhlIG5ldyBgVVNCX0NPTkZJR0ZTX0ZfTUlESTJgIGlzIGF0IHRoZSBoZWFydCBvZiB0aGlzLiBCZWZvcmUgSSBnbyB0b28gZmFyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciB1cHN0cmVhbSBkZXBlbmRlbmNpZXMuIFJpZ2h0LCBjaGVja2luZyBgVVNCX0NPTkZJR0ZTYCwgd2hpY2ggZGVwZW5kcyBvbiBgVVNCX0dBREdFVGAuIEdvdCBpdC4gQW5kIGBTTkRgIGlzIGp1c3QgdGhlIEFMU0Egc291bmQgc3Vic3lzdGVtLCBzbyB0aGF0JiMzOTtzIGNsZWFyLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdGhpcyBwYXRjaCBtb2RpZmllcy4gQWxyaWdodCwgaXQmIzM5O3MgbWVzc2luZyB3aXRoIGBmX21pZGkyX2FsbG9jX2VwX3JlcXNgIGFuZCBgZl9taWRpMl9mcmVlX2VwX3JlcXNgLiBUaGVzZSBhcmUgZGVmaW5pdGVseSBpbXBvcnRhbnQuIFRoZXkmIzM5O3JlIGludm9rZWQgd2l0aGluIGBmX21pZGkyX3N0YXJ0X2Vwc2AsIGBmX21pZGkyX3N0b3BfZXBzYCwgYW5kIGBmX21pZGkyX2ZyZWVfZXBgLiBPa2F5LCBzbyBgZl9taWRpMl9zdGFydF9lcHNgIGFuZCBgZl9taWRpMl9zdG9wX2Vwc2AgYXJlIGNhbGxlZCBmcm9tIGBmX21pZGkyX3NldF9hbHRgLiBFeGNlbGxlbnQsIGFuZCBgZl9taWRpMl9zZXRfYWx0YCBpcyBhIGBzZXRfYWx0YCBjYWxsYmFjayBvZiBgdXNiX2Z1bmN0aW9uYC4gSSB0aGluayB3ZSYjMzk7dmUgaGl0IHBheS1kaXJ0LiBgZl9taWRpMl9zZXRfYWx0YCBhcHBlYXJzIHRvIGJlIGEgZ29vZCBmb2NhbCBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0LiBCZWZvcmUgSSBzdGFydCBkaXNzZWN0aW5nIHRoZSBjb2RlLCBJIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZ1bmN0aW9uIGlzIHB1YmxpYy4gTGV0JiMzOTtzIHNlZSBpZiBgZl9taWRpMl9zZXRfYWx0YCBpcyBzdGF0aWMgb3Igbm90LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmX21pZGkyX3NldF9hbHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTI0OT1zdGF0aWMgaW50IGZfbWlkaTJfc3RhcnRfZXBzKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqZXBfaW4sXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjczLS8qIGdhZGdldCBmdW5jdGlvbiBzZXRfYWx0IGNhbGxiYWNrICovXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyNzQ6c3RhdGljIGludCBmX21pZGkyX3NldF9hbHQoc3RydWN0IHVzYl9mdW5jdGlvbiAqZm4sIHVuc2lnbmVkIGludCBpbnRmLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjc1LVx0XHRcdCAgIHVuc2lnbmVkIGludCBhbHQpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0yODA2PXN0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmX21pZGkyX2FsbG9jKHN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgKmZpKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMjgzNC1cdG1pZGkyLVx1MDAzZWZ1bmMuZ2V0X2FsdCA9IGZfbWlkaTJfZ2V0X2FsdDtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MjgzNTpcdG1pZGkyLVx1MDAzZWZ1bmMuc2V0X2FsdCA9IGZfbWlkaTJfc2V0X2FsdDtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMjgzNi1cdG1pZGkyLVx1MDAzZWZ1bmMuc2V0dXAgPSBmX21pZGkyX3NldHVwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTA3CgkJCQkJCQlvdXRwdXQ6IDcyCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBNSURJMiBDb2RlKioKCkFscmlnaHQsIHNvIGBmX21pZGkyX3NldF9hbHRgIGlzIGRlZmluZWQgYXMgYHN0YXRpY2AsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGludGVybmFsIHRvIGl0cyBjb21waWxhdGlvbiB1bml0LiBIb3dldmVyLCBpdCYjMzk7cyBiZWluZyAqYXNzaWduZWQqIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBzb21ld2hlcmUuIFRoYXQgcmFpc2VzIGEgcXVlc3Rpb24gaW4gbXkgbWluZDogQXJlIHdlIGRlYWxpbmcgd2l0aCBhbnkgKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucyB0aGF0IGdldCBpbnZvbHZlZCBpbiB0aGF0IGFzc2lnbm1lbnQsIG9yIGlzIGV2ZXJ5dGhpbmcgZW5jYXBzdWxhdGVkIHdpdGhpbiB0aGF0IHN0YXRpYyBzY29wZT8gSXQmIzM5O3MgZ29vZCBwcmFjdGljZSB0byB0cnkgYW5kIGxpbWl0IHRoZSB2aXNpYmlsaXR5IG9mIGZ1bmN0aW9ucyB3aGVyZSBwb3NzaWJsZSBmb3IgbW9kdWxhcml0eS4KClRoZW4gdGhlcmUgaXMgYGZfbWlkaTJfYWxsb2NgLCBpdCYjMzk7cyBhbHNvIGRlY2xhcmVkIGBzdGF0aWNgLiBTbywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYGZfbWlkaTIuY2AgZmlsZSBpdHNlbGYuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgaWRlbnRpZnkgYW55IGV4dGVybmFsbHktdmlzaWJsZSBjb21wb25lbnRzLCBhbmQgdGhlIHJlbGF0aW9uc2hpcHMgb2YgdGhlc2Ugc3RhdGljIGludGVybmFsIGZ1bmN0aW9ucy4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgaG93IHRoaXMgTUlESTIgbW9kdWxlIGlzIGludGVuZGVkIHRvIGZ1bmN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBleHRlcm5hbCBBUElzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTE4Njg9c3RhdGljIHZvaWQgZl9taWRpMl9mcmVlX3VzYl9jb25maWdzKHN0cnVjdCBmX21pZGkyX3VzYl9jb25maWcgKmNvbmZpZylcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTE4NzQtLyogYXMgd2UgdXNlIHRoZSBzdGF0aWMgZGVzY3JpcHRvcnMgZm9yIHNpbXBsaWNpdHksIHNlcmlhbGl6ZSBiaW5kIGNhbGwgKi9cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTg3NTpzdGF0aWMgREVGSU5FX01VVEVYKGZfbWlkaTJfZGVzY19tdXRleCk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTE4NzYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDE4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgeW91ciBzdW1tYXJ5OgoKKipRdWljayBSZWdleCBSZXRoaW5rKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFRoYXQgaW5pdGlhbCByZWd1bGFyIGV4cHJlc3Npb24gSSBjcmFmdGVkLi4uIGl0JiMzOTtzIHByb2JhYmx5IHRvbyBmcmFnaWxlLCB0b28gc3BlY2lmaWMuIEkgbmVlZCB0byBiZSBicm9hZGVyIGluIG15IGFwcHJvYWNoLiBJbnN0ZWFkIG9mIHRyeWluZyB0byBjb25zdHJ1Y3QgYSBjb21wbGV4IHBhdHRlcm4sIHdoeSBkb24mIzM5O3QgSSBqdXN0IGtlZXAgaXQgc2ltcGxlPyBJIGNhbiBqdXN0IGBncmVwYCBmb3IgdGhvc2UgY29yZSBrZXJuZWwgc3ltYm9scyB0aGF0IGFyZSBhbG1vc3QgYWx3YXlzIHBhcnQgb2YgYW4gaW50ZXJmYWNlIC0gdGhlIGVhc3kgd2lucy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYEVYUE9SVF9TWU1CT0xgLCBgbW9kdWxlX2luaXRgLCBgREVDTEFSRV9VU0JfRlVOQ1RJT05gLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCBhbmQgaWRlbnRpZnkgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZXMuIEkgY2FuIHJlZmluZSBpdCBsYXRlciBpZiB0aGlzIGZpcnN0IHBhc3MgaXNuJiMzOTt0IGV4aGF1c3RpdmUgZW5vdWdoLiBHb29kLCBmb2N1cyBvbiB0aGUgZnVuZGFtZW50YWxzLCB0aGVuIGl0ZXJhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RFQ0xBUkVfVVNCX0ZVTkNUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTI4MDY9c3RhdGljIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmZfbWlkaTJfYWxsb2Moc3RydWN0IHVzYl9mdW5jdGlvbl9pbnN0YW5jZSAqZmkpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0yODg3LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoyODg4OkRFQ0xBUkVfVVNCX0ZVTkNUSU9OX0lOSVQobWlkaTIsIGZfbWlkaTJfYWxsb2NfaW5zdCwgZl9taWRpMl9hbGxvYyk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTI4ODktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzk2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBNSURJMiBGdW5jdGlvbiBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gYERFQ0xBUkVfVVNCX0ZVTkNUSU9OX0lOSVRgIGlzIHJlc3BvbnNpYmxlIGZvciByZWdpc3RlcmluZyB0aGlzIHBhcnRpY3VsYXIgVVNCIGZ1bmN0aW9uLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhhdCBtZWFucyB0aGUgcmVhbCBlbnRyeSBwb2ludHMgZm9yIHRoaXMgZnVuY3Rpb24gYXJlIGdvaW5nIHRvIGJlIHRob3NlIGFsbG9jYXRpb24gZnVuY3Rpb25zOiBgZl9taWRpMl9hbGxvY19pbnN0YCwgYW5kIGBmX21pZGkyX2FsbG9jYCwgYWxvbmcgd2l0aCB0aGUgY2FsbGJhY2tzIGRlZmluZWQgd2l0aGluIHRoZW0uIFdlJiMzOTtyZSBsb29raW5nIGF0IHRoZSBhbGxvY2F0aW9uIHNpZGUgb2YgdGhpbmdzLCBzbyB0aG9zZSBhcmUga2V5LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgZl9taWRpMl9hbGxvY19pbnN0YCBhbmQgYGZfbWlkaTJfYWxsb2NgIGFuZCBzZWUgd2hhdCB0aGV5JiMzOTtyZSBhY3R1YWxseSBkb2luZy4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgc3RhcnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmX21pZGkyX2FsbG9jX2luc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MjYzNT1zdGF0aWMgdm9pZCBmX21pZGkyX2ZyZWVfaW5zdChzdHJ1Y3QgdXNiX2Z1bmN0aW9uX2luc3RhbmNlICpmKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMjY0NS0vKiBnYWRnZXQgYWxsb2NfaW5zdCAqL1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoyNjQ2OnN0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uX2luc3RhbmNlICpmX21pZGkyX2FsbG9jX2luc3Qodm9pZClcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMjY0Ny17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0yODA2PXN0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmX21pZGkyX2FsbG9jKHN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgKmZpKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMjg4Ny1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6Mjg4ODpERUNMQVJFX1VTQl9GVU5DVElPTl9JTklUKG1pZGkyLCBmX21pZGkyX2FsbG9jX2luc3QsIGZfbWlkaTJfYWxsb2MpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0yODg5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk1MAoJCQkJCQkJb3V0cHV0OiA3MgoJCQkJCQkJdGhvdWdodHM6IDIxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIE1JREkyOiBJbml0aWFsIEFzc2Vzc21lbnQgYW5kIFJlZmluZW1lbnQqKgoKT2theSwgc28gdGhlIGZ1bmN0aW9ucyBoZXJlIGFyZSBhbGwgc3RhdGljLCB3aGljaCBhdCBmaXJzdCBnbGFuY2Ugc3VnZ2VzdHMgbXkgdHlwaWNhbCB0b29scywgYGZfbWlkaTJfc2V0X2FsdGAsIGBmX21pZGkyX2FsbG9jYCwgYGZfbWlkaTJfYWxsb2NfaW5zdGAsIGBmX21pZGkyX3VuYmluZGAsIGFuZCBgZl9taWRpMl9iaW5kYCwgbWlnaHQgYmUgZGlyZWN0bHkgYXBwbGljYWJsZS4gQnV0IHdhaXQuLi4gU3l6a2FsbGVyLCB0aGUgd29ya2hvcnNlLCAqY2FuKiBhY3R1YWxseSBmdXp6IHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSYjMzk7cmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgYW5kIGludm9rZWQgZnJvbSBhIG5vbi1zdGF0aWMgY29udGV4dC4gU28sIEkgbmVlZCB0byBrZWVwIHRob3NlIGZ1bmN0aW9ucyBvbiBteSBsaXN0OiBgZl9taWRpMl9zZXRfYWx0YCwgYGZfbWlkaTJfdW5iaW5kYCwgYGZfbWlkaTJfYmluZGAsIGBmX21pZGkyX2FsbG9jYCwgYW5kIGBmX21pZGkyX2FsbG9jX2luc3RgLgoKSG9sZCBvbi4uLiBJIG5lZWQgdG8gcmV2aXNpdCB0aGUgZ3VpZGVsaW5lcy4gQWgsIHRoZSBkb2N1bWVudGF0aW9uIHNwZWNpZmllcyBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cyBvdmVyIGlubGluZWQgc3RhdGljIGhlbHBlcnMuIFRoYXQgbWFrZXMgc2Vuc2UsIGJlY2F1c2UgaW5saW5lZCBmdW5jdGlvbnMgbGFjayBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBGb3J0dW5hdGVseSwgaXQgbG9va3MgbGlrZSBgZl9taWRpMl9zZXRfYWx0YCAqaXNuJiMzOTt0KiBpbmxpbmVkIGJlY2F1c2UgaXQmIzM5O3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyBhdmFpbGFibGUgaW4gdGhlIGBmX21pZGkyLmNgIGZpbGUuIFRoaXMgd291bGQgYmUgZXZlbiBiZXR0ZXIgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTg2OD1zdGF0aWMgdm9pZCBmX21pZGkyX2ZyZWVfdXNiX2NvbmZpZ3Moc3RydWN0IGZfbWlkaTJfdXNiX2NvbmZpZyAqY29uZmlnKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTg3NC0vKiBhcyB3ZSB1c2UgdGhlIHN0YXRpYyBkZXNjcmlwdG9ycyBmb3Igc2ltcGxpY2l0eSwgc2VyaWFsaXplIGJpbmQgY2FsbCAqL1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxODc1OnN0YXRpYyBERUZJTkVfTVVURVgoZl9taWRpMl9kZXNjX211dGV4KTtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTg3Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2ODcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKlJlZmluaW5nIHRoZSBNSURJLW92ZXItVVNCIEZ1bmN0aW9uIEluaXRpYWxpemF0aW9uIFN0cmF0ZWd5KioKClJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgVVNCIGZ1bmN0aW9uIGluaXRpYWxpemF0aW9uLiBUaGF0IGBERUNMQVJFX1VTQl9GVU5DVElPTl9JTklUYCBtYWNyby4uLiBJIHJlbWVtYmVyIGl0IGV4cGFuZHMgdG8gYHVzYl9mdW5jdGlvbl9yZWdpc3RlcmAgYW5kIGB1c2JfZnVuY3Rpb25fdW5yZWdpc3RlcmAuIE5vdGhpbmcgcGFydGljdWxhcmx5IGdyb3VuZGJyZWFraW5nIHRoZXJlOyB0aGV5JiMzOTtyZSBzdGFuZGFyZCBVU0IgZnVuY3Rpb24gcmVnaXN0cmF0aW9uIHJvdXRpbmVzLCBhbmQgdGhleSYjMzk7cmUsIGltcG9ydGFudGx5LCAqbm9uLXN0YXRpYyosIG1ha2luZyB0aGVtIHZpc2libGUgYWNyb3NzIGNvbXBpbGF0aW9uIHVuaXRzLiBCdXQsIG15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIHRoZXJlJiMzOTtzIHByb2JhYmx5IGEgbW9yZSBzdHJlYW1saW5lZCwgZm9jdXNlZCBhcHByb2FjaCBmb3IgKnRoaXMqIHBhcnRpY3VsYXIgTUlESSBpbXBsZW1lbnRhdGlvbi4KCkluc3RlYWQgb2YgdGhpcyBnZW5lcmljIGFwcHJvYWNoLCBpdCBzZWVtcyBtb3JlIGRpcmVjdCB0byBsZXZlcmFnZSB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgbW9yZSBzcGVjaWZpYyB0byB0aGUgTUlESTIgZnVuY3Rpb246IGBmX21pZGkyX3NldF9hbHRgLCBgZl9taWRpMl9iaW5kYCwgYW5kIGBmX21pZGkyX3VuYmluZGAuIEkmIzM5O2QgcHJlZmVyIHRvIHVzZSB0aGUgZXhpc3RpbmcgaW50ZXJmYWNlcy4gVGhlc2Ugc2hvdWxkIGhhbmRsZSB0aGUgc3BlY2lmaWMgc2V0dXAsIGNvbm5lY3Rpb24sIGFuZCBkaXNjb25uZWN0aW9uIGxvZ2ljIGZvciB0aGUgTUlESSBlbmRwb2ludC4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGNoZWNrIHRoYXQgYERFQ0xBUkVfVVNCX0ZVTkNUSU9OX0lOSVRgIG1hY3JvIHRvIGJlIGNlcnRhaW4gdGhlcmUgaXNuJiMzOTt0IHNvbWUgaGlkZGVuIGNvbXBsZXhpdHkgdGhhdCBJJiMzOTttIG1pc3NpbmcuIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBmdWxseSByZXBsYWNlIGl0cyBiZWhhdmlvciwgb3RoZXJ3aXNlIGl0IHdpbGwgYWRkIHVubmVlZGVkIGNvbXBsZXhpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBERUNMQVJFX1VTQl9GVU5DVElPTl9JTklUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmg9NTk5PXZvaWQgdXNiX3JlbW92ZV9mdW5jdGlvbihzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpO1xuLS1cbmluY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oLTYwOS1cbmluY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oOjYxMDojZGVmaW5lIERFQ0xBUkVfVVNCX0ZVTkNUSU9OX0lOSVQoX25hbWUsIF9pbnN0X2FsbG9jLCBfZnVuY19hbGxvYylcdFxcXG5pbmNsdWRlL2xpbnV4L3VzYi9jb21wb3NpdGUuaC02MTEtXHRERUNMQVJFX1VTQl9GVU5DVElPTihfbmFtZSwgX2luc3RfYWxsb2MsIF9mdW5jX2FsbG9jKVx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIyNAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTUlESTIgTW9kdWxlIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIHRoaXMgY29kZSBkZWZpbmVzIGBtb2R1bGVfaW5pdGAgYW5kIGBtb2R1bGVfZXhpdGAuIFRoYXQgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBhbmQgY2xlYW51cCBwcm9jZWR1cmVzIGZvciBhIG1vZHVsZS4gSXQgc2VlbXMgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIHRoaXMgcGFydGljdWxhciBtb2R1bGUgYXJlIGBmX21pZGkyX2FsbG9jX2luc3RgLCBgZl9taWRpMl9hbGxvY2AsIGBmX21pZGkyX2JpbmRgLCBgZl9taWRpMl91bmJpbmRgLCBgZl9taWRpMl9zZXRfYWx0YCwgYGZfbWlkaTJfc2V0dXBgLCBhbmQgYGZfbWlkaTJfZGlzYWJsZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3QuIEdpdmVuIHRoZSBlbXBoYXNpcyBvbiBiaW5kaW5nIGFuZCB1bmJpbmRpbmcsIGBmX21pZGkyX2JpbmRgIGlzIGxpa2VseSBhIGNydWNpYWwgZnVuY3Rpb24gZm9yIGFzc29jaWF0aW5nIHRoZSBtb2R1bGUgd2l0aCByZWxldmFudCBoYXJkd2FyZSBvciByZXNvdXJjZXMuIExldCYjMzk7cyBzdGFydCBieSBjb25maXJtaW5nIHRoYXQgYGZfbWlkaTJfYmluZGAgaXMgYWN0dWFsbHkgZGVmaW5lZCwgYW5kIHRoZW4gZGl2ZSBpbnRvIHdoYXQgaXQgZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zl9taWRpMl9iaW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTE5MTE9c3RhdGljIGludCBmX21pZGkyX2luaXRfbWlkaTJfZXBfb3V0KHN0cnVjdCBmX21pZGkyICptaWRpMiwgaW50IGluZGV4KVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTkyNy0vKiBnYWRnZXQgZnVuY3Rpb24gYmluZCBjYWxsYmFjayAqL1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxOTI4OnN0YXRpYyBpbnQgZl9taWRpMl9iaW5kKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgc3RydWN0IHVzYl9mdW5jdGlvbiAqZilcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTkyOS17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0yODA2PXN0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmX21pZGkyX2FsbG9jKHN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgKmZpKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMjgzMS1cdG1pZGkyLVx1MDAzZWZ1bmMubmFtZSA9IFwmIzM0O21pZGkyX2Z1bmNcJiMzNDs7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjI4MzI6XHRtaWRpMi1cdTAwM2VmdW5jLmJpbmQgPSBmX21pZGkyX2JpbmQ7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTI4MzMtXHRtaWRpMi1cdTAwM2VmdW5jLnVuYmluZCA9IGZfbWlkaTJfdW5iaW5kO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg2MQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSYjMzk7bSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipDaGVja2luZyBNSURJIEZ1bmN0aW9uYWxpdHkqKgoKQWxyaWdodCwgY29uZmlybWVkLiBgZl9taWRpMl9iaW5kYCBkZWZpbml0ZWx5IGV4aXN0cywgdGhhdCBwYXJ0IG9mIHRoZSBjb2RlIGlzIGdvb2QuIE5vdywgbGV0JiMzOTtzIHBpdm90IGFuZCB0YWtlIGEgbG9vayBhdCBgZl9taWRpMl9kaXNhYmxlYC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBiaW5kaW5nIGZ1bmN0aW9uLCBhcyB0aGV5IGxpa2VseSBoYXZlIHNpZ25pZmljYW50IGludGVyZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gZW5zdXJlIE1JREkgZnVuY3Rpb25hbGl0eSBpcyB3b3JraW5nIGFzIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmX21pZGkyX2Rpc2FibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTQwNT1zdGF0aWMgaW50IGZfbWlkaTJfc2V0dXAoc3RydWN0IHVzYl9mdW5jdGlvbiAqZm4sXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xNDMxLS8qIGdhZGdldCBmdW5jdGlvbiBkaXNhYmxlIGNhbGxiYWNrICovXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjE0MzI6c3RhdGljIHZvaWQgZl9taWRpMl9kaXNhYmxlKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmZuKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xNDMzLXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTI4MDY9c3RhdGljIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmZfbWlkaTJfYWxsb2Moc3RydWN0IHVzYl9mdW5jdGlvbl9pbnN0YW5jZSAqZmkpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0yODM2LVx0bWlkaTItXHUwMDNlZnVuYy5zZXR1cCA9IGZfbWlkaTJfc2V0dXA7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjI4Mzc6XHRtaWRpMi1cdTAwM2VmdW5jLmRpc2FibGUgPSBmX21pZGkyX2Rpc2FibGU7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTI4MzgtXHRtaWRpMi1cdTAwM2VmdW5jLmZyZWVfZnVuYyA9IGZfbWlkaTJfZnJlZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNDAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgZl9taWRpMl9kaXNhYmxlYCBpcyBkZWZpbml0ZWx5IGEgdGhpbmcuIFRoYXQgbWVhbnMgbXkgZm9jdXMgc3ltYm9scyBuZWVkIHRvIGVuY29tcGFzcyB0aGUgZnVsbCBzZXQ6IGBmX21pZGkyX2JpbmRgLCBgZl9taWRpMl91bmJpbmRgLCBgZl9taWRpMl9zZXRfYWx0YCwgYW5kIGBmX21pZGkyX2Rpc2FibGVgLiBFeGNlbGxlbnQuCgpOb3csIGxldCYjMzk7cyBicmVhayBkb3duIHRoZSBjb25maWd1cmF0aW9uIGVsZW1lbnRzLiBJIGhhdmUgdGhlc2Uga2V5IGNvbmZpZ3MgdG8gY29uc2lkZXI6IGBVU0JfR0FER0VUYCwgYFVTQl9DT05GSUdGU2AsIGBTTkRgLCBhbmQgYFVTQl9DT05GSUdGU19GX01JREkyYC4gQWgsIHJpZ2h0LCBgVVNCX0ZfTUlESTJgIGlzIHNlbGVjdGVkIGJ5IGBVU0JfQ09ORklHRlNfRl9NSURJMmAuCgpJIHNob3VsZCBwcm9iYWJseSBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWdzIGZsb2F0aW5nIGFyb3VuZC4gTm9wZSwgYFVTQl9HQURHRVRgIGlzIHRoZSBtYWluIG9uZSBhbmQgZXZlcnl0aGluZyBlbHNlIHNlZW1zIHRvIGJ1aWxkIG9uIGl0LgoKQWxyaWdodCwgYFVTQl9DT05GSUdGU19GX01JREkyYCBpcyBkZXBlbmRlbnQgb24gYm90aCBgVVNCX0NPTkZJR0ZTYCBhbmQgYFNORGAuIFNvLCB0byBiZSBzYWZlIGFuZCBjb21wcmVoZW5zaXZlLCBJICpuZWVkKiB0byBpbmNsdWRlIGBVU0JfQ09ORklHRlNfRl9NSURJMmAsIGBVU0JfQ09ORklHRlNgLCBgU05EYCwgYW5kLCBvYnZpb3VzbHksIGBVU0JfR0FER0VUYC4gSSYjMzk7bGwgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgb24gdGhvc2UgYFVTQl9DT05GSUdGU19GX01JREkyYCBkZXBlbmRlbmNpZXMgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfQ09ORklHRlNfRl9NSURJMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9NDMxPWNvbmZpZyBVU0JfQ09ORklHRlNfRl9NSURJXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNDQ0LVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6NDQ1OmNvbmZpZyBVU0JfQ09ORklHRlNfRl9NSURJMlxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNDQ2LVx0Ym9vbCBcJiMzNDtNSURJIDIuMCBmdW5jdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk4OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBNSURJIDIuMCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQgc25pcHBldCBlYXJsaWVyLiBMZXQmIzM5O3MgcmVjYXA6IGBVU0JfQ09ORklHRlNfRl9NSURJMmAgZXNzZW50aWFsbHkgYWN0cyBhcyB0aGUgcHJpbWFyeSBlbmFibGVyIGZvciBgVVNCX0ZfTUlESTJgLiBJdCYjMzk7cyBkZXBlbmRlbnQgb24gYFVTQl9DT05GSUdGU2Agd2hpY2ggaXRzZWxmIHJlbGllcyBvbiBgU05EYCwgYW5kIGl0IHB1bGxzIGluIGBVU0JfTElCQ09NUE9TSVRFYCBhbmQgYFVTQl9GX01JREkyYC4gU28sIGF0IGEgbWluaW11bSwgdG8gaGF2ZSBNSURJIDIuMCBmdW5jdGlvbmFsaXR5LCB3ZSBuZWVkIHRvIGNvbnNpZGVyIGBVU0JfQ09ORklHRlNfRl9NSURJMmAsIGBVU0JfQ09ORklHRlNgLCBgU05EYCwgYW5kIG9mIGNvdXJzZSwgYFVTQl9HQURHRVRgLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXM6IGNhbiBgVVNCX0ZfTUlESTJgIGJlIGVuYWJsZWQgdGhyb3VnaCAqb3RoZXIqIG1lYW5zPyBEb2VzIGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbiBzZWxlY3QgYFVTQl9GX01JREkyYCBkaXJlY3RseT8gV2UgbmVlZCB0byB2ZXJpZnkgaWYgdGhpcyBpcyB0aGUgb25seSBwYXRoLCBvciBpZiB0aGVyZSBhcmUgYWx0ZXJuYXRpdmUgcm91dGVzIHRvIGFjaGlldmluZyB0aGUgc2FtZSBvdXRjb21lLiBVbmRlcnN0YW5kaW5nIHRoaXMgZGVwZW5kZW5jeSBpcyBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBVU0JfRl9NSURJMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9NDQ1PWNvbmZpZyBVU0JfQ09ORklHRlNfRl9NSURJMlxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTQ0OS1cdHNlbGVjdCBVU0JfTElCQ09NUE9TSVRFXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo0NTA6XHRzZWxlY3QgVVNCX0ZfTUlESTJcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTQ1MS1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MDQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1JREkyIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIE1JREkyIGNvbmZpZ3VyYXRpb24sIGFuZCBpbml0aWFsbHksIEkgdGhvdWdodCB0aGF0IG9ubHkgYFVTQl9DT05GSUdGU19GX01JREkyYCB3YXMgdGhlIGtleS4gQnV0IHdhaXQsIGBVU0JfRl9NSURJMmAgaXMgYSAqdHJpc3RhdGUqIHZhcmlhYmxlLCBtZWFuaW5nIGl0IGNhbiBiZSBjb21waWxlZCBhcyBhIG1vZHVsZSwgd2hpY2ggY2hhbmdlcyB0aGluZ3MuIElmIGBVU0JfQ09ORklHRlNfRl9NSURJMmAgaXMgYSBCb29sZWFuLCBpdCBpbXBsaWVzIHRoYXQgaXQgaXMgYnVpbHQtaW4gdG8gYHVzYl9mX21pZGkyYCB3aGVuIGBVU0JfQ09ORklHRlNgIGlzIGJ1aWx0IGluIGFuZCBtb2R1bGUgd2hlbiBgVVNCX0NPTkZJR0ZTYCBpcyBhIG1vZHVsZS4gSG1tLCBidXQgYFVTQl9DT05GSUdGU2AgaXMgYWxzbyBhICp0cmlzdGF0ZSouIE9rYXksIGdvdCBpdCAtIHNvIGBVU0JfQ09ORklHRlNfRl9NSURJMmAgaXMgYSBCb29sZWFuLCB3aGlsZSBgVVNCX0ZfTUlESTJgIGlzIGEgdHJpc3RhdGUuIElmIGBVU0JfQ09ORklHRlNgIGlzIGVuYWJsZWQgYXMgJiMzOTt5JiMzOTsgKGJ1aWx0LWluKSwgdGhlbiBgVVNCX0ZfTUlESTJgIHdpbGwgYWxzbyBiZSBmb3JjZWQgdG8gJiMzOTt5JiMzOTsuIFRoZXJlZm9yZSwgYFVTQl9DT05GSUdGU19GX01JREkyYCAqaXMqIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBlbmFibGUuCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgd2UgbmVlZCBgU05EX1VNUGAuIEhhbmcgb24uLi4gYGZfbWlkaTIuY2AgKmRvZXMqIHVzZSBVTVAsIGJ1dCBkb2VzIGl0IGV4cGxpY2l0bHkgZGVwZW5kIG9uIGBTTkRfVU1QYD8gVGhhdCYjMzk7cyB0aGUgbmV4dCBxdWVzdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U05EX1VNUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9MjEyPWNvbmZpZyBVU0JfRl9NSURJMlxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjEzLVx0dHJpc3RhdGVcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjIxNDpcdHNlbGVjdCBTTkRfVU1QXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzoyMTU6XHRzZWxlY3QgU05EX1VNUF9MRUdBQ1lfUkFXTUlESVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjE2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE4MAoJCQkJCQkJb3V0cHV0OiAxNjAKCQkJCQkJCXRob3VnaHRzOiA1MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVU0IgTUlESSAyLjAgR2FkZ2V0IEZ1bmN0aW9uIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIGBVU0JfRl9NSURJMmAgaW1wbGljaXRseSBlbmFibGVzIGBTTkRfVU1QYCBhbmQgYFNORF9VTVBfTEVHQUNZX1JBV01JRElgLiBHb29kIHRvIGtub3csIHNpbXBsaWZpZXMgdGhpbmdzLiBJJiMzOTttIGZvY3VzaW5nIG9uIGtleSBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhlIG1vZGlmaWVkIGNvZGUmIzM5O3MgZW50cnkgcG9pbnRzIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGVzZSBzeW1ib2xzOiBgZl9taWRpMl9iaW5kYCwgYGZfbWlkaTJfdW5iaW5kYCwgYGZfbWlkaTJfc2V0X2FsdGAsIGBmX21pZGkyX2Rpc2FibGVgLCBgZl9taWRpMl9zZXR1cGAsIGBmX21pZGkyX2FsbG9jX2luc3RgLCBhbmQgYGZfbWlkaTJfYWxsb2NgLgoKTm93LCBsZXQmIzM5O3MgdHJhY2UgdGhlIGFsbG9jYXRpb24gcGF0aC4gSSB3YW50ZWQgdG8gdmVyaWZ5IGlmIGBmX21pZGkyX2FsbG9jX2VwX3JlcXNgIHdhcyBkaXJlY3RseSBjYWxsZWQgZnJvbSBgZl9taWRpMl9iaW5kYC4gSXQgdHVybnMgb3V0IHRoYXQmIzM5O3Mgbm90IHRoZSBjYXNlLiBgZl9taWRpMl9iaW5kYCBjYWxscyBgZl9taWRpMl9pbml0X2VwYCwgYnV0IHRoYXQgZG9lc24mIzM5O3QgaGFuZGxlIHRoZSBhbGxvY2F0aW9uLiBUaGUgZW5kcG9pbnQgcmVxdWVzdHMgYXJlIGFsbG9jYXRlZCBpbiBgZl9taWRpMl9zdGFydF9lcHNgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGZfbWlkaTJfc2V0X2FsdGAuIFNvLCBgZl9taWRpMl9zZXRfYWx0YCBpcyB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgdG8gdGhlIGNvZGUgSSYjMzk7bSByZWFsbHkgaW50ZXJlc3RlZCBpbi4KCk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSBvdGhlciBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLiBgZl9taWRpMl9zZXR1cGAgaGFuZGxlcyBjb250cm9sIHJlcXVlc3RzLCBhbmQgYGZfbWlkaTJfZGlzYWJsZWAgc3RvcHMgdGhlIGVuZHBvaW50cy4KCkNvbnNpZGVyaW5nIGFsbCB0aGlzLCBteSBmb2N1cyBzeW1ib2xzIHJlZmluZSB0bzogYGZfbWlkaTJfc2V0X2FsdGAsIGBmX21pZGkyX2Rpc2FibGVgLCBgZl9taWRpMl9iaW5kYCwgYW5kIGBmX21pZGkyX3VuYmluZGAuIEkmIzM5O3ZlIGV4Y2x1ZGVkIGBmX21pZGkyX3NldHVwYCBzaW5jZSBpdCBkb2VzbiYjMzk7dCBzZWVtIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIGlzc3VlIGFuZCwgYXMgYSBjb250cm9sIGhhbmRsZXIsIHdpbGwgYmUgZnV6emluZyB3aXRoIGEgZGlmZmVyZW50IHNldCBvZiB0YXJnZXRzLgoKTm93LCBpcyBgZl9taWRpMl9zZXRfYWx0YCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nPyBZZXMsIGFic29sdXRlbHkuIEl0JiMzOTtzIGEgY2FsbGJhY2sgZm9yIHRoZSAmIzM0O3NldCBhbHRlcm5hdGUgc2V0dGluZyYjMzQ7IG9wZXJhdGlvbiwgdHJpZ2dlcmVkIGJ5IHRoZSBVU0IgaG9zdC4gVGhpcyBpcyBhIGNydWNpYWwgZW50cnkgcG9pbnQgZm9yIGZ1enppbmcgdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4KClRoZXJlZm9yZSwgdGhlIGZpbmFsIGFzc2Vzc21lbnQgaXM6CgpXb3J0aEZ1enppbmc6IFRydWUKRm9jdXNTeW1ib2xzOiBbJiMzNDtmX21pZGkyX3NldF9hbHQmIzM0OywgJiMzNDtmX21pZGkyX2Rpc2FibGUmIzM0OywgJiMzNDtmX21pZGkyX2JpbmQmIzM0OywgJiMzNDtmX21pZGkyX3VuYmluZCYjMzQ7XQpFbmFibGVDb25maWdzOiBbJiMzNDtVU0JfR0FER0VUJiMzNDssICYjMzQ7VVNCX0NPTkZJR0ZTJiMzNDssICYjMzQ7U05EJiMzNDssICYjMzQ7VVNCX0NPTkZJR0ZTX0ZfTUlESTImIzM0O10KUmVhc29uaW5nOiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiBlbmRwb2ludCByZXF1ZXN0cyBpbiB0aGUgVVNCIE1JREkgMi4wIGdhZGdldCBmdW5jdGlvbi4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHRocm91Z2ggVVNCIGdhZGdldCBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIHNldHRpbmcgYWx0ZXJuYXRlIHNldHRpbmdzIChmX21pZGkyX3NldF9hbHQpIGFuZCBkaXNhYmxpbmcgdGhlIGZ1bmN0aW9uIChmX21pZGkyX2Rpc2FibGUpLiYjMzQ7CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfR0FER0VUJiMzNDssCiAgICAmIzM0O1VTQl9DT05GSUdGUyYjMzQ7LAogICAgJiMzNDtTTkQmIzM0OywKICAgICYjMzQ7VVNCX0NPTkZJR0ZTX0ZfTUlESTImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmX21pZGkyX3NldF9hbHQmIzM0OywKICAgICYjMzQ7Zl9taWRpMl9kaXNhYmxlJiMzNDssCiAgICAmIzM0O2ZfbWlkaTJfYmluZCYjMzQ7LAogICAgJiMzNDtmX21pZGkyX3VuYmluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiBlbmRwb2ludCByZXF1ZXN0cyBpbiB0aGUgVVNCIE1JREkgMi4wIGdhZGdldCBmdW5jdGlvbi4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHRocm91Z2ggVVNCIGdhZGdldCBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIHNldHRpbmcgYWx0ZXJuYXRlIHNldHRpbmdzIChmX21pZGkyX3NldF9hbHQpIGFuZCBkaXNhYmxpbmcgdGhlIGZ1bmN0aW9uIChmX21pZGkyX2Rpc2FibGUpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfR0FER0VUJiMzNDssCiAgICAmIzM0O1VTQl9DT05GSUdGUyYjMzQ7LAogICAgJiMzNDtTTkQmIzM0OywKICAgICYjMzQ7VVNCX0NPTkZJR0ZTX0ZfTUlESTImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmX21pZGkyX3NldF9hbHQmIzM0OywKICAgICYjMzQ7Zl9taWRpMl9kaXNhYmxlJiMzNDssCiAgICAmIzM0O2ZfbWlkaTJfYmluZCYjMzQ7LAogICAgJiMzNDtmX21pZGkyX3VuYmluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiBlbmRwb2ludCByZXF1ZXN0cyBpbiB0aGUgVVNCIE1JREkgMi4wIGdhZGdldCBmdW5jdGlvbi4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHRocm91Z2ggVVNCIGdhZGdldCBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIHNldHRpbmcgYWx0ZXJuYXRlIHNldHRpbmdzIChmX21pZGkyX3NldF9hbHQpIGFuZCBkaXNhYmxpbmcgdGhlIGZ1bmN0aW9uIChmX21pZGkyX2Rpc2FibGUpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjlUMDk6MjE6MzEuMTc1NjMxMzYzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMzk0MTMxOTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9HQURHRVRcIixcbiAgICBcIlVTQl9DT05GSUdGU1wiLFxuICAgIFwiU05EXCIsXG4gICAgXCJVU0JfQ09ORklHRlNfRl9NSURJMlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZfbWlkaTJfc2V0X2FsdFwiLFxuICAgIFwiZl9taWRpMl9kaXNhYmxlXCIsXG4gICAgXCJmX21pZGkyX2JpbmRcIixcbiAgICBcImZfbWlkaTJfdW5iaW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgb2YgZW5kcG9pbnQgcmVxdWVzdHMgaW4gdGhlIFVTQiBNSURJIDIuMCBnYWRnZXQgZnVuY3Rpb24uIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIFVTQiBnYWRnZXQgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiBzZXR0aW5nIGFsdGVybmF0ZSBzZXR0aW5ncyAoZl9taWRpMl9zZXRfYWx0KSBhbmQgZGlzYWJsaW5nIHRoZSBmdW5jdGlvbiAoZl9taWRpMl9kaXNhYmxlKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDk6MjE6MzEuMTc1NjM2NzEzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTE2NTMzMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlMjFlOWZhNjljYjdkOTEyMTNmMzEwYmNlYWYyODdjZGNlNzNjNzNjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDI5IDA5OjIxOjMwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jXFxuaW5kZXggMTlmZGFjMDI0MzQzOS4uNWU1NGNmOTk0NzA3YSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jXFxuKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuY1xcbkBAIC0xMTQ1LDcgKzExNDUsNyBAQCBzdGF0aWMgaW50IGZfbWlkaTJfYWxsb2NfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcXG4gXFx0aWYgKCF1c2JfZXAtXFx1MDAzZXJlcXMpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG1pZGkyLVxcdTAwM2VpbmZvLm51bV9yZXFzOyBpKyspIHtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHVzYl9lcC1cXHUwMDNlbnVtX3JlcXM7IGkrKykge1xcbiBcXHRcXHRpZiAodXNiX2VwLVxcdTAwM2VyZXFzW2ldLnJlcSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdHVzYl9lcC1cXHUwMDNlcmVxc1tpXS5yZXEgPSBhbGxvY19lcF9yZXEodXNiX2VwLVxcdTAwM2V1c2JfZXAsXFxuQEAgLTExNjAsMTAgKzExNjAsOSBAQCBzdGF0aWMgaW50IGZfbWlkaTJfYWxsb2NfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcXG4gLyogRnJlZSBhbGxvY2F0ZWQgcmVxdWVzdHMgKi9cXG4gc3RhdGljIHZvaWQgZl9taWRpMl9mcmVlX2VwX3JlcXMoc3RydWN0IGZfbWlkaTJfdXNiX2VwICp1c2JfZXApXFxuIHtcXG4tXFx0c3RydWN0IGZfbWlkaTIgKm1pZGkyID0gdXNiX2VwLVxcdTAwM2VjYXJkO1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtaWRpMi1cXHUwMDNlaW5mby5udW1fcmVxczsgaSsrKSB7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB1c2JfZXAtXFx1MDAzZW51bV9yZXFzOyBpKyspIHtcXG4gXFx0XFx0aWYgKCF1c2JfZXAtXFx1MDAzZXJlcXNbaV0ucmVxKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0ZnJlZV9lcF9yZXEodXNiX2VwLVxcdTAwM2V1c2JfZXAsIHVzYl9lcC1cXHUwMDNlcmVxc1tpXS5yZXEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMTozMS45ODgwNDIzNjVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNjI1ODE3MDk5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0dBREdFVFwiLFxuICAgIFwiVVNCX0NPTkZJR0ZTXCIsXG4gICAgXCJTTkRcIixcbiAgICBcIlVTQl9DT05GSUdGU19GX01JREkyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZl9taWRpMl9zZXRfYWx0XCIsXG4gICAgXCJmX21pZGkyX2Rpc2FibGVcIixcbiAgICBcImZfbWlkaTJfYmluZFwiLFxuICAgIFwiZl9taWRpMl91bmJpbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiBlbmRwb2ludCByZXF1ZXN0cyBpbiB0aGUgVVNCIE1JREkgMi4wIGdhZGdldCBmdW5jdGlvbi4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHRocm91Z2ggVVNCIGdhZGdldCBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIHNldHRpbmcgYWx0ZXJuYXRlIHNldHRpbmdzIChmX21pZGkyX3NldF9hbHQpIGFuZCBkaXNhYmxpbmcgdGhlIGZ1bmN0aW9uIChmX21pZGkyX2Rpc2FibGUpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlMjFlOWZhNjljYjdkOTEyMTNmMzEwYmNlYWYyODdjZGNlNzNjNzNjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMDk6MjE6MzAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuY1xuaW5kZXggMTlmZGFjMDI0MzQzOS4uNWU1NGNmOTk0NzA3YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmNcbisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmNcbkBAIC0xMTQ1LDcgKzExNDUsNyBAQCBzdGF0aWMgaW50IGZfbWlkaTJfYWxsb2NfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcbiBcdGlmICghdXNiX2VwLVx1MDAzZXJlcXMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWlkaTItXHUwMDNlaW5mby5udW1fcmVxczsgaSsrKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB1c2JfZXAtXHUwMDNlbnVtX3JlcXM7IGkrKykge1xuIFx0XHRpZiAodXNiX2VwLVx1MDAzZXJlcXNbaV0ucmVxKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR1c2JfZXAtXHUwMDNlcmVxc1tpXS5yZXEgPSBhbGxvY19lcF9yZXEodXNiX2VwLVx1MDAzZXVzYl9lcCxcbkBAIC0xMTYwLDEwICsxMTYwLDkgQEAgc3RhdGljIGludCBmX21pZGkyX2FsbG9jX2VwX3JlcXMoc3RydWN0IGZfbWlkaTJfdXNiX2VwICp1c2JfZXApXG4gLyogRnJlZSBhbGxvY2F0ZWQgcmVxdWVzdHMgKi9cbiBzdGF0aWMgdm9pZCBmX21pZGkyX2ZyZWVfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcbiB7XG4tXHRzdHJ1Y3QgZl9taWRpMiAqbWlkaTIgPSB1c2JfZXAtXHUwMDNlY2FyZDtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWlkaTItXHUwMDNlaW5mby5udW1fcmVxczsgaSsrKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB1c2JfZXAtXHUwMDNlbnVtX3JlcXM7IGkrKykge1xuIFx0XHRpZiAoIXVzYl9lcC1cdTAwM2VyZXFzW2ldLnJlcSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0ZnJlZV9lcF9yZXEodXNiX2VwLVx1MDAzZXVzYl9lcCwgdXNiX2VwLVx1MDAzZXJlcXNbaV0ucmVxKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA5OjIxOjMxLjk4ODA0MzgzNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0OTMwNzg3NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVVNCIE1JREkgR2FkZ2V0IERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jYC4gSXQncyBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgbW9kaWZpY2F0aW9uLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgYG1pZGkyLVx1MDAzZWluZm8ubnVtX3JlcXNgIHRvIGB1c2JfZXAtXHUwMDNlbnVtX3JlcXNgIHdpdGhpbiB0aGUgYGZfbWlkaTJfYWxsb2NfZXBfcmVxc2AgYW5kIGBmX21pZGkyX2ZyZWVfZXBfcmVxc2AgZnVuY3Rpb25zLiBUaGF0IHJpZ2h0IHRoZXJlIHN1Z2dlc3RzIGEgYnVnIGZpeCDigJMgc29tZW9uZSB3YXMgdXNpbmcgdGhlIHdyb25nIHZhcmlhYmxlLCBwcm9iYWJseSBhIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlIHdpdGggcmVxdWVzdCBxdWV1ZXMuIEknbSBndWVzc2luZyB0aGlzIG1pZ2h0IGhhdmUgbGVkIHRvIHBvdGVudGlhbCBlbmRwb2ludCBhbGxvY2F0aW9uIG9yIGRlYWxsb2NhdGlvbiBwcm9ibGVtcy5cblxuVGhlc2UgZnVuY3Rpb25zLCBgZl9taWRpMl9hbGxvY19lcF9yZXFzYCBhbmQgYGZfbWlkaTJfZnJlZV9lcF9yZXFzYCwgYXJlIGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgZ29vZC4gSXQgbGltaXRzIHRoZWlyIHNjb3BlIGFuZCBtYWtlcyBpdCBlYXNpZXIgdG8gdHJhY2UgdGhlaXIgdXNhZ2Ugd2l0aGluIHRoZSBmaWxlLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBxdWlja2x5IGlkZW50aWZ5IHdoZXJlIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGNhbGxlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0cyB3aXRoaW4gdGhlIGxhcmdlciBNSURJIGdhZGdldCBmcmFtZXdvcmsuIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgYW55IHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBvciBzeW1ib2wgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGhvdyB0aGlzIGNvZGUgZ2V0cyBjb21waWxlZCBvciBsaW5rZWQgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTksIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMTozNi40ODExMjU4NzZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ1NzM2OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZl9taWRpMl9hbGxvY19lcF9yZXFzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0xMTIyPXN0YXRpYyB2b2lkIGZfbWlkaTJfZHJvcF9yZXFzKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqdXNiX2VwKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMTM3LS8qIEFsbG9jYXRlIHJlcXVlc3RzIGZvciB0aGUgZ2l2ZW4gRVAgKi9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjExMzg6c3RhdGljIGludCBmX21pZGkyX2FsbG9jX2VwX3JlcXMoc3RydWN0IGZfbWlkaTJfdXNiX2VwICp1c2JfZXApXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMTM5LXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTI0OT1zdGF0aWMgaW50IGZfbWlkaTJfc3RhcnRfZXBzKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqZXBfaW4sXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyNjEtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxMjYyOlxcdGVyciA9IGZfbWlkaTJfYWxsb2NfZXBfcmVxcyhlcF9pbik7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjYzLVxcdGlmIChlcnIpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjY0LVxcdFxcdHJldHVybiBlcnI7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxMjY1OlxcdGVyciA9IGZfbWlkaTJfYWxsb2NfZXBfcmVxcyhlcF9vdXQpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTI2Ni1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMTozNi41NzU3MDY1MjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjMwNDgyNjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKlRyYWNpbmcgdGhlIENhbGwgUGF0aDogZl9taWRpMl9zdGFydF9lcHMqKlxuXG5Pa2F5LCBzbyBgZl9taWRpMl9zdGFydF9lcHNgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGluaXRpYXRlZCB0aGlzIHdob2xlIHByb2Nlc3MuIFRoYXQncyBvdXIgZW50cnkgcG9pbnQsIGFuZCB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyB0aGF0IGZvbGxvd3MgZnJvbSB0aGVyZS4gVGltZSB0byBkaWcgaW4gYW5kIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gTGV0J3Mgc2VlIHdoYXQgYGZfbWlkaTJfc3RhcnRfZXBzYCBjYWxscywgd2hhdCBkYXRhIGl0IHBhc3NlcywgYW5kIHdoZXJlIHRoZSBwcm9ncmFtIGdvZXMgbmV4dC4gVGhpcyBsZXZlbCBvZiBkZXRhaWwgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLiBUaGUgbmV4dCBzdGVwcyB3aWxsIGdpdmUgbWUgaW5zaWdodHMgdG8gdGhlIHJvb3QgY2F1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxODQsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMTozOS4yMDYxOTEzNTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5MDQwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZl9taWRpMl9zdGFydF9lcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTEyMzk9c3RhdGljIHZvaWQgZl9taWRpMl9zdG9wX2VwcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKmVwX2luLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjQ4LS8qIHN0YXJ0L3F1ZXVlIGJvdGggSU4gYW5kIE9VVCBFUHMgKi9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyNDk6c3RhdGljIGludCBmX21pZGkyX3N0YXJ0X2VwcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKmVwX2luLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTI1MC1cXHRcXHRcXHQgICAgIHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqZXBfb3V0LFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0xMjc0PXN0YXRpYyBpbnQgZl9taWRpMl9zZXRfYWx0KHN0cnVjdCB1c2JfZnVuY3Rpb24gKmZuLCB1bnNpZ25lZCBpbnQgaW50ZixcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTMwNC1cXHRpZiAob3BfbW9kZSA9PSBNSURJX09QX01PREVfTUlESTEpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxMzA1OlxcdFxcdHJldHVybiBmX21pZGkyX3N0YXJ0X2VwcyhcXHUwMDI2bWlkaTItXFx1MDAzZW1pZGkxX2VwX2luLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTMwNi1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNm1pZGkyLVxcdTAwM2VtaWRpMV9lcF9vdXQsIGZuKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTMxMS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEzMTI6XFx0XFx0XFx0ZXJyID0gZl9taWRpMl9zdGFydF9lcHMoXFx1MDAyNmVwLVxcdTAwM2VlcF9pbiwgXFx1MDAyNmVwLVxcdTAwM2VlcF9vdXQsIGZuKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEzMTMtXFx0XFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDk6MjE6MzkuMjU1MTAwMDY1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyNzgyMDg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNSURJIEZ1bmN0aW9uIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gYGZfbWlkaTJfc2V0X2FsdGAgaXMgYSBgdXNiX2Z1bmN0aW9uYCBjYWxsYmFjaywgd2hpY2ggbWVhbnMgaXQncyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBVU0IgTUlESSBjb21tdW5pY2F0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBmcmFtZXdvcmsuIE15IG5leHQgc3RlcCwgYW5kIHF1aXRlIGxvZ2ljYWxseSwgaXMgdG8gaW52ZXN0aWdhdGUgYGZfbWlkaTJfZnJlZV9lcF9yZXFzYC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgZW5kcG9pbnQgcmVxdWVzdCBzdHJ1Y3R1cmVzIGFyZSBjbGVhbmVkIHVwIG9yIG1hbmFnZWQsIHBvdGVudGlhbGx5IGFmdGVyIGFuIGFsdGVybmF0ZSBzZXR0aW5nIGNoYW5nZSBvciBhIGNvbmZpZ3VyYXRpb24gYWx0ZXJhdGlvbiByZWxhdGVkIHRvIHRoaXMgZnVuY3Rpb24uIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgcmVzb3VyY2VzIGFyZSBoYW5kbGVkIGFuZCBmcmVlZCBpbiByZWxhdGlvbiB0byB0aGlzIGtleSBjYWxsYmFjaywgc3BlY2lmaWNhbGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozODI5LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDk6MjE6NDIuNDgyOTIzMDM0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTY0MjgxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmX21pZGkyX2ZyZWVfZXBfcmVxc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTEzOD1zdGF0aWMgaW50IGZfbWlkaTJfYWxsb2NfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTE2MC0vKiBGcmVlIGFsbG9jYXRlZCByZXF1ZXN0cyAqL1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTE2MTpzdGF0aWMgdm9pZCBmX21pZGkyX2ZyZWVfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTExNjIte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0xMjAzPXN0YXRpYyB2b2lkIGZfbWlkaTJfZnJlZV9lcChzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTIwNi1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyMDc6XFx0Zl9taWRpMl9mcmVlX2VwX3JlcXModXNiX2VwKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyMDgtXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTEyMzk9c3RhdGljIHZvaWQgZl9taWRpMl9zdG9wX2VwcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKmVwX2luLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjQzLVxcdGZfbWlkaTJfZHJvcF9yZXFzKGVwX291dCk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxMjQ0OlxcdGZfbWlkaTJfZnJlZV9lcF9yZXFzKGVwX2luKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyNDU6XFx0Zl9taWRpMl9mcmVlX2VwX3JlcXMoZXBfb3V0KTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyNDYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMTo0Mi42MTQ1NzA5NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMTkxMzU4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyBNSURJIEVuZHBvaW50IENsZWFudXAqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgZl9taWRpMl9mcmVlX2VwYCBhbmQgYGZfbWlkaTJfc3RvcF9lcHNgIGFyZSB0aGUgY2FsbGluZyBmdW5jdGlvbnMuIFRoYXQncyBteSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgTUlESSBlbmRwb2ludHMgYXJlIG1hbmFnZWQgYW5kIHJlbGVhc2VkLiBJIG5lZWQgdG8gZGlnIGludG8gYGZfbWlkaTJfZnJlZV9lcGAgc3BlY2lmaWNhbGx5LiBNeSBmb2N1cyB3aWxsIGJlIG9uIHVuZGVyc3RhbmRpbmcgd2hhdCBpdCBkb2VzIGFuZCwgY3JpdGljYWxseSwgd2hvIGRlcGVuZHMgb24gaXQuIFdoYXQgcmVzb3VyY2VzIGRvZXMgaXQgcmVsZWFzZT8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGFmZmVjdGVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgbGlmZSBjeWNsZSBvZiBhbiBlbmRwb2ludC4gTGV0J3Mgc3RhcnQgd2l0aCB0cmFjaW5nIHRoYXQgZnVuY3Rpb24gYW5kIHNlZWluZyB3aGF0IGl0IGFjdHVhbGx5IGRvZXMuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaG93IHRoZXNlIGVuZHBvaW50cyBhcmUgY2xlYW5lZCB1cCB0byBtYWtlIHN1cmUgbm8gcmVzb3VyY2VzIGFyZSBsZWFrZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NDEsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMTo0Ny44MzM3MTAxOTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MTMxNzE5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmX21pZGkyX2ZyZWVfZXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTExMzg9c3RhdGljIGludCBmX21pZGkyX2FsbG9jX2VwX3JlcXMoc3RydWN0IGZfbWlkaTJfdXNiX2VwICp1c2JfZXApXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTExNjAtLyogRnJlZSBhbGxvY2F0ZWQgcmVxdWVzdHMgKi9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjExNjE6c3RhdGljIHZvaWQgZl9taWRpMl9mcmVlX2VwX3JlcXMoc3RydWN0IGZfbWlkaTJfdXNiX2VwICp1c2JfZXApXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMTYyLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTE3ND1zdGF0aWMgaW50IGZfbWlkaTJfaW5pdF9lcChzdHJ1Y3QgZl9taWRpMiAqbWlkaTIsIHN0cnVjdCBmX21pZGkyX2VwICplcCxcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTIwMi0vKiBGcmVlIEVQICovXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxMjAzOnN0YXRpYyB2b2lkIGZfbWlkaTJfZnJlZV9lcChzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyMDQte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjA2LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTIwNzpcXHRmX21pZGkyX2ZyZWVfZXBfcmVxcyh1c2JfZXApO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTIwOC1cXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTIzOT1zdGF0aWMgdm9pZCBmX21pZGkyX3N0b3BfZXBzKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqZXBfaW4sXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyNDMtXFx0Zl9taWRpMl9kcm9wX3JlcXMoZXBfb3V0KTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyNDQ6XFx0Zl9taWRpMl9mcmVlX2VwX3JlcXMoZXBfaW4pO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTI0NTpcXHRmX21pZGkyX2ZyZWVfZXBfcmVxcyhlcF9vdXQpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTI0Ni19XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTIwNTc9c3RhdGljIHZvaWQgZl9taWRpMl91bmJpbmQoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0yMDYzLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MjA2NDpcXHRmX21pZGkyX2ZyZWVfZXAoXFx1MDAyNm1pZGkyLVxcdTAwM2VtaWRpMV9lcF9pbik7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoyMDY1OlxcdGZfbWlkaTJfZnJlZV9lcChcXHUwMDI2bWlkaTItXFx1MDAzZW1pZGkxX2VwX291dCk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0yMDY2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtaWRpMi1cXHUwMDNlbnVtX2VwczsgaSsrKSB7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoyMDY3OlxcdFxcdGZfbWlkaTJfZnJlZV9lcChcXHUwMDI2bWlkaTItXFx1MDAzZW1pZGkyX2Vwc1tpXS5lcF9pbik7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoyMDY4OlxcdFxcdGZfbWlkaTJfZnJlZV9lcChcXHUwMDI2bWlkaTItXFx1MDAzZW1pZGkyX2Vwc1tpXS5lcF9vdXQpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMjA2OS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA5OjIxOjQ4LjE3NTAzNzY1OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzI2MTIxNjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgTUlESSBFbmRwb2ludCBDbGVhbnVwKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZXNlIE1JREkgZW5kcG9pbnRzIGFyZSBiZWluZyBjbGVhbmVkIHVwLCBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBvbiB0aGUgc3VyZmFjZS4gYGZfbWlkaTJfdW5iaW5kYCBkaXJlY3RseSBjYWxscyBgZl9taWRpMl9mcmVlX2VwYCwgd2hpY2ggbWFrZXMgc2Vuc2Ug4oCTIHVuYmluZGluZyB0aGUgZW5kcG9pbnQgaW1wbGllcyBmcmVlaW5nIGl0cyByZXNvdXJjZXMuIE5vdywgSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHRoZSBicm9hZGVyIHN0b3BwaW5nIHByb2Nlc3MsIGFuZCBpdCBsb29rcyBsaWtlIGBmX21pZGkyX3N0b3BfZXBzYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRvIGV4YW1pbmUuIEZyb20gYSBxdWljayBnbGFuY2UsIGl0IGNhbGxzIGBmX21pZGkyX2ZyZWVfZXBfcmVxc2AuIFRoaXMgc3VnZ2VzdHMgdGhhdCBgZl9taWRpMl9zdG9wX2Vwc2AgaXMgcmVzcG9uc2libGUgZm9yIHN0b3BwaW5nIGFuZCBjbGVhbmluZyB1cCBhbGwgdGhlIHJlcXVlc3RzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZW5kcG9pbnRzLCB3aGljaCBpbiB0dXJuIGxlYWRzIHRvIGZyZWVpbmcgdGhlIGVuZHBvaW50cyB0aGVtc2VsdmVzLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgb2YgYGZfbWlkaTJfZnJlZV9lcF9yZXFzYCB0byB1bmRlcnN0YW5kIHRoZSBncmFudWxhciBhc3BlY3RzIG9mIHRoaXMgY2xlYW51cCBwcm9jZWR1cmUsIHN1Y2ggYXMgd2hpY2ggcmVzb3VyY2VzIGFyZSBiZWluZyBmcmVlZCBhbmQgdGhlIG9yZGVyaW5nIG9mIHRoZSBvcGVyYXRpb25zLiBJIGFzc3VtZSB0aGUgYHJlcXNgIGFyZSByZXF1ZXN0IG9iamVjdHMgcmVsYXRlZCB0byB0aGUgZW5kcG9pbnRzLiBUaGlzIHdpbGwgbmVlZCBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2OTAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMTo1MS45MDExNjI5NDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTAyODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZfbWlkaTJfc3RvcF9lcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTEyMTY9c3RhdGljIHZvaWQgZl9taWRpMl9xdWV1ZV9vdXRfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTIzOC0vKiBzdG9wIGJvdGggSU4gYW5kIE9VVCBFUHMgKi9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyMzk6c3RhdGljIHZvaWQgZl9taWRpMl9zdG9wX2VwcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKmVwX2luLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTI0MC1cXHRcXHRcXHQgICAgIHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqZXBfb3V0KVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0xMjc0PXN0YXRpYyBpbnQgZl9taWRpMl9zZXRfYWx0KHN0cnVjdCB1c2JfZnVuY3Rpb24gKmZuLCB1bnNpZ25lZCBpbnQgaW50ZixcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTI5NC1cXHRpZiAob3BfbW9kZSAhPSBNSURJX09QX01PREVfTUlESTEpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxMjk1OlxcdFxcdGZfbWlkaTJfc3RvcF9lcHMoXFx1MDAyNm1pZGkyLVxcdTAwM2VtaWRpMV9lcF9pbiwgXFx1MDAyNm1pZGkyLVxcdTAwM2VtaWRpMV9lcF9vdXQpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTI5Ni1cXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTI5OS1cXHRcXHRcXHRlcCA9IFxcdTAwMjZtaWRpMi1cXHUwMDNlbWlkaTJfZXBzW2ldO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTMwMDpcXHRcXHRcXHRmX21pZGkyX3N0b3BfZXBzKFxcdTAwMjZlcC1cXHUwMDNlZXBfaW4sIFxcdTAwMjZlcC1cXHUwMDNlZXBfb3V0KTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEzMDEtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMTo1MS45NDgwNzEyMjVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5NTUwMzk3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVTQiBNSURJIEdhZGdldCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYGZfbWlkaTJfc2V0X2FsdGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyBiZWluZyBjYWxsZWQsIGFuZCBJIHNlZSBpdCdzIGNhbGxpbmcgYm90aCBgZl9taWRpMl9zdG9wX2Vwc2AgYW5kIGBmX21pZGkyX3N0YXJ0X2Vwc2AuIFRoYXQncyBpbnRlcmVzdGluZzsgaXQgc2VlbXMgdG8gYmUgbWFuYWdpbmcgdGhlIGVuZHBvaW50cy4gUmlnaHQsIGFuZCB0aGlzIGBmX21pZGkyX3NldF9hbHRgIGlzIHRoZSBgc2V0X2FsdGAgY2FsbGJhY2sgd2l0aGluIHRoZSBgdXNiX2Z1bmN0aW9uYCBzdHJ1Y3R1cmUuIFRoYXQgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgVVNCIGdhZGdldCBjb25maWd1cmF0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4gVGhlIGNvZGUgaXMgbG9jYXRlZCBpbiBgZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuY2AsIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCdzIHRpbWUgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggYGZfbWlkaTIuY2AgdG8gc2VlIGhvdyB0aGlzIGVuZHBvaW50IHN3aXRjaGluZyBpcyBiZWluZyB0cmlnZ2VyZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBgc2V0X2FsdGAgY2FsbGJhY2sgd2l0aGluIHRoZSBVU0IgY29uZmlndXJhdGlvbiBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDY4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA5OjIxOjU1Ljc0MzU3OTE4MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE4ODg4MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZl9taWRpMlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlPTUwPW9iai0kKENPTkZJR19VU0JfRl9NSURJKVxcdCs9IHVzYl9mX21pZGkub1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZTo1MTp1c2JfZl9taWRpMi15XFx0XFx0XFx0Oj0gZl9taWRpMi5vXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlOjUyOm9iai0kKENPTkZJR19VU0JfRl9NSURJMilcXHQrPSB1c2JfZl9taWRpMi5vXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlLTUzLXVzYl9mX2hpZC15XFx0XFx0XFx0Oj0gZl9oaWQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMTo1NS43OTU0NzM3MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTkyNTAwNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBpczpcblxuKipFeGFtaW5pbmcgTUlESTIgVVNCIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgc3lzdGVtIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIGBDT05GSUdfVVNCX0ZfTUlESTJgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIEtjb25maWcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb25maWcgb3B0aW9uICphY3R1YWxseSogbWVhbnMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBzeXN0ZW0uIEknbSBnb2luZyB0byBoZWFkIHN0cmFpZ2h0IG92ZXIgdG8gS2NvbmZpZyB0byBzZWUgd2hhdCdzIGRlZmluZWQgZm9yIGBDT05GSUdfVVNCX0ZfTUlESTJgLiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUgcmVzdCBvZiB0aGUgVVNCIHN0YWNrIGFuZCwgYnkgZXh0ZW5zaW9uLCBhdWRpbyBwcm9jZXNzaW5nPyBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSB0byB1bmRlcnN0YW5kIHRoaXMgc2luZ2xlIHNldHRpbmcuIFRoaXMgaXMgZ29pbmcgdG8gYmUgaW50ZXJlc3RpbmcuIExldCdzIHNlZSB3aGF0IEtjb25maWcgaGFzIHRvIHNheS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk2MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA5OjIxOjU4Ljk4Nzk3NzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MjE0NjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0JfRl9NSURJMlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTIwOT1jb25maWcgVVNCX0ZfTUlESVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjExLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjIxMjpjb25maWcgVVNCX0ZfTUlESTJcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0yMTMtXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDk6MjE6NTkuMDM2MTk4MDY5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NDQxNTgwNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGEgVHJpc3RhdGUncyBBY3RpdmF0aW9uKipcblxuQWxyaWdodCwgdGhpcyBsb29rcyBsaWtlIGEgY2xldmVybHkgY29uY2VhbGVkIHRyaXN0YXRlIGNpcmN1aXQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQncyBkcml2aW5nIHRoZSBzZWxlY3QgbGluZXM/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgbG9naWMgdGhhdCdzIGRpY3RhdGluZyB3aGVuIHRoaXMgdGhpbmcgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhbmQgaW4gd2hpY2ggc3RhdGUuIElzIGl0IGEgc2ltcGxlIGNvbWJpbmF0aW9uIG9mIGlucHV0cywgb3IgaXMgdGhlcmUgYSBtb3JlIGNvbXBsZXggc3RhdGUgbWFjaGluZSBpbnZvbHZlZD8gSSdtIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHBvdGVudGlhbCBzY2VuYXJpb3M6IGxhdGNoaW5nIGNvbmRpdGlvbnMsIGFzeW5jaHJvbm91cyBzaWduYWxzIHRoYXQgY291bGQgYmUgY3JlYXRpbmcgZ2xpdGNoZXMsIG9yIG1heWJlIGV2ZW4gc29tZSBzdWJ0bGUgdGltaW5nIGlzc3VlcyB0aGF0IGFyZSBjYXVzaW5nIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGlzIHRyaXN0YXRlIGlzIGJlaW5nIHVzZWQgdG8gc2hhcmUgYSBidXMgb3IgbXVsdGlwbGV4IHNpZ25hbHMgYW5kIHdoaWNoIHNpZ25hbHMgYXJlIGJlaW5nIG11bHRpcGxleGVkIGFuZCB3aGF0IHRoZSB0aW1pbmcgYmV0d2VlbiB0aGVzZSBpcy4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBzaWduYWxzIGJhY2sgdG8gdGhlaXIgc291cmNlIGFuZCBkZXRlcm1pbmUgdGhlIHByZWNpc2UgY29uZGl0aW9ucyB0aGF0IGFjdGl2YXRlIGVhY2ggc3RhdGUuIFRpbWUgdG8gZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjY5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDk6MjI6MDMuNzgwMzU4NTk0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ2OTE3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgVVNCX0ZfTUlESTJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz00NDU9Y29uZmlnIFVTQl9DT05GSUdGU19GX01JREkyXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy00NDktXFx0c2VsZWN0IFVTQl9MSUJDT01QT1NJVEVcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo0NTA6XFx0c2VsZWN0IFVTQl9GX01JREkyXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNDUxLVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDk6MjI6MDMuODI5ODM1Mjg0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTA0MjM1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgTUlESTIgQ29uZmlnRlMgRGVwZW5kZW5jeSBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBzbyBgVVNCX0NPTkZJR0ZTX0ZfTUlESTJgIGhhcyBiZWVuIHNlbGVjdGVkLiBUaGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgbWVudGFsIGNoZWNrOiB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGFuZCBkZXBlbmRlbmNpZXM/IFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBVU0JfRl9NSURJMmAgaXMgYWxzbyBwdWxsZWQgaW4uIFRoaXMgaXMgYSBzdGFuZGFyZCBwcm9jZWR1cmU7IEknbSBub3QgZ29pbmcgdG8ganVzdCBhc3N1bWUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gaXMgcGVyZmVjdGx5IGF1dG9tYXRlZCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgYXMgc3BlY2lmaWMgYW5kIG51YW5jZWQgYXMgTUlESSAyLiBJIG5lZWQgdG8gZXhwbGljaXRseSBjb25maXJtIHRoZSBkaXJlY3QgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXAgaGVyZS4gSXQncyB0b28gZWFzeSB0byBtaXNzIHNvbWV0aGluZyBpbiBhIGNvbXBsZXggY29uZmlnIHNwYWNlLiBNeSBuZXh0IGFjdGlvbiBpcyB0byB2ZXJpZnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MTYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMjowNy4xODAyNjI1NTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDc5MDA5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX0NPTkZJR0ZTX0ZfTUlESTJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz00MzE9Y29uZmlnIFVTQl9DT05GSUdGU19GX01JRElcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTQ0NC1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo0NDU6Y29uZmlnIFVTQl9DT05GSUdGU19GX01JREkyXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNDQ2LVxcdGJvb2wgXFxcIk1JREkgMi4wIGZ1bmN0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMjowNy4yODUwNTg2MjdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3ODc3OTYzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBVU0IgR2FkZ2V0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFVTQiBnYWRnZXRzLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgYGRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnYCBmaWxlLCBhcm91bmQgbGluZSA0NDUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIHZhcmlvdXMgZ2FkZ2V0IGRyaXZlcnMgYW5kIHRoZWlyIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIFRoZXJlJ3MgYSBwYXJ0aWN1bGFyIHVzZSBjYXNlIEknbSB0YWNrbGluZywgYW5kIEkgc3VzcGVjdCB0aGUgYW5zd2VyIGxpZXMgd2l0aGluIHRob3NlIEtjb25maWcgb3B0aW9ucywgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkuIFRoZSBnb2FsIGlzIHRvIHNlZSB3aGljaCBwYXJhbWV0ZXJzIGFyZSBhdmFpbGFibGUsIHdoaWNoIGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiBkaWZmZXJlbnQgY2hvaWNlcyBtaWdodCBiZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgZ2FkZ2V0IHN0YWNrIGFzIGEgd2hvbGUuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzdGFydCBkaWdnaW5nIGludG8gdGhlIGRldGFpbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMjoxMC40NjM4NDEyMzdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDQwOlxcdFxcdCAgaW5wdXQgYW5kIG9uZSBNSURJIG91dHB1dC4gVGhlc2UgTUlESSBqYWNrcyBhcHBlYXIgYXNcXG4gNDQxOlxcdFxcdCAgYSBzb3VuZCBcXFwiY2FyZFxcXCIgaW4gdGhlIEFMU0Egc291bmQgc3lzdGVtLiBPdGhlciBNSURJXFxuIDQ0MjpcXHRcXHQgIGNvbm5lY3Rpb25zIGNhbiB0aGVuIGJlIG1hZGUgb24gdGhlIGdhZGdldCBzeXN0ZW0sIHVzaW5nXFxuIDQ0MzpcXHRcXHQgIEFMU0EncyBhY29ubmVjdCB1dGlsaXR5IGV0Yy5cXG4gNDQ0OlxcdFxcbiA0NDU6XFx0Y29uZmlnIFVTQl9DT05GSUdGU19GX01JREkyXFxuIDQ0NjpcXHRcXHRib29sIFxcXCJNSURJIDIuMCBmdW5jdGlvblxcXCJcXG4gNDQ3OlxcdFxcdGRlcGVuZHMgb24gVVNCX0NPTkZJR0ZTXFxuIDQ0ODpcXHRcXHRkZXBlbmRzIG9uIFNORFxcbiA0NDk6XFx0XFx0c2VsZWN0IFVTQl9MSUJDT01QT1NJVEVcXG4gNDUwOlxcdFxcdHNlbGVjdCBVU0JfRl9NSURJMlxcbiA0NTE6XFx0XFx0aGVscFxcbiA0NTI6XFx0XFx0ICBUaGUgTUlESSAyLjAgZnVuY3Rpb24gZHJpdmVyIHByb3ZpZGVzIHRoZSBnZW5lcmljIGVtdWxhdGVkXFxuIDQ1MzpcXHRcXHQgIFVTQiBNSURJIDIuMCBpbnRlcmZhY2UsIGxvb3BlZCBiYWNrIHRvIEFMU0EgVU1QIHJhd21pZGlcXG4gNDU0OlxcdFxcdCAgZGV2aWNlIG9uIHRoZSBnYWRnZXQgaG9zdC4gSXQgc3VwcG9ydHMgVU1QIDEuMSBzcGVjIGFuZFxcbiA0NTU6XFx0XFx0ICByZXNwb25kcyBVTVAgU3RyZWFtIG1lc3NhZ2VzIGZvciBVTVAgRW5kcG9pbnQgYW5kIEZ1bmN0aW9uXFxuIDQ1NjpcXHRcXHQgIEJsb2NrIGluZm9ybWF0aW9uIC8gY29uZmlndXJhdGlvbi5cXG4gNDU3OlxcdFxcbiA0NTg6XFx0Y29uZmlnIFVTQl9DT05GSUdGU19GX0hJRFxcbiA0NTk6XFx0XFx0Ym9vbCBcXFwiSElEIGZ1bmN0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMjoxMC40NjM5MjQ4NTdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIzMjA5NDQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1JREkyIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIE1JREkyIGNvbmZpZ3VyYXRpb24gc2V0dXAuIFRoZSBmaXJzdCB0aGluZyBJIHNlZSBpcyB0aGF0IGl0J3MgZnVuZGFtZW50YWxseSByZWxpYW50IG9uIGBVU0JfQ09ORklHRlNgIGFuZCBgU05EYC4gTWFrZXMgc2Vuc2UsIHdlJ3JlIGJ1aWxkaW5nIGEgVVNCIGdhZGdldCBjb25maWd1cmF0aW9uIHRoYXQgaW52b2x2ZXMgc291bmQuIEFuZCwgb2YgY291cnNlLCB0aGUgbmV3IGBVU0JfQ09ORklHRlNfRl9NSURJMmAgaXMgYXQgdGhlIGhlYXJ0IG9mIHRoaXMuIEJlZm9yZSBJIGdvIHRvbyBmYXIsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgdXBzdHJlYW0gZGVwZW5kZW5jaWVzLiBSaWdodCwgY2hlY2tpbmcgYFVTQl9DT05GSUdGU2AsIHdoaWNoIGRlcGVuZHMgb24gYFVTQl9HQURHRVRgLiBHb3QgaXQuIEFuZCBgU05EYCBpcyBqdXN0IHRoZSBBTFNBIHNvdW5kIHN1YnN5c3RlbSwgc28gdGhhdCdzIGNsZWFyLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggbW9kaWZpZXMuIEFscmlnaHQsIGl0J3MgbWVzc2luZyB3aXRoIGBmX21pZGkyX2FsbG9jX2VwX3JlcXNgIGFuZCBgZl9taWRpMl9mcmVlX2VwX3JlcXNgLiBUaGVzZSBhcmUgZGVmaW5pdGVseSBpbXBvcnRhbnQuIFRoZXkncmUgaW52b2tlZCB3aXRoaW4gYGZfbWlkaTJfc3RhcnRfZXBzYCwgYGZfbWlkaTJfc3RvcF9lcHNgLCBhbmQgYGZfbWlkaTJfZnJlZV9lcGAuIE9rYXksIHNvIGBmX21pZGkyX3N0YXJ0X2Vwc2AgYW5kIGBmX21pZGkyX3N0b3BfZXBzYCBhcmUgY2FsbGVkIGZyb20gYGZfbWlkaTJfc2V0X2FsdGAuIEV4Y2VsbGVudCwgYW5kIGBmX21pZGkyX3NldF9hbHRgIGlzIGEgYHNldF9hbHRgIGNhbGxiYWNrIG9mIGB1c2JfZnVuY3Rpb25gLiBJIHRoaW5rIHdlJ3ZlIGhpdCBwYXktZGlydC4gYGZfbWlkaTJfc2V0X2FsdGAgYXBwZWFycyB0byBiZSBhIGdvb2QgZm9jYWwgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHBhdGNoJ3MgaW1wYWN0LiBCZWZvcmUgSSBzdGFydCBkaXNzZWN0aW5nIHRoZSBjb2RlLCBJIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZ1bmN0aW9uIGlzIHB1YmxpYy4gTGV0J3Mgc2VlIGlmIGBmX21pZGkyX3NldF9hbHRgIGlzIHN0YXRpYyBvciBub3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MDMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMjoxNS42OTYwMjIxNzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzOTAyNjgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmX21pZGkyX3NldF9hbHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTEyNDk9c3RhdGljIGludCBmX21pZGkyX3N0YXJ0X2VwcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKmVwX2luLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjczLS8qIGdhZGdldCBmdW5jdGlvbiBzZXRfYWx0IGNhbGxiYWNrICovXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxMjc0OnN0YXRpYyBpbnQgZl9taWRpMl9zZXRfYWx0KHN0cnVjdCB1c2JfZnVuY3Rpb24gKmZuLCB1bnNpZ25lZCBpbnQgaW50ZixcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyNzUtXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IGFsdClcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MjgwNj1zdGF0aWMgc3RydWN0IHVzYl9mdW5jdGlvbiAqZl9taWRpMl9hbGxvYyhzdHJ1Y3QgdXNiX2Z1bmN0aW9uX2luc3RhbmNlICpmaSlcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMjgzNC1cXHRtaWRpMi1cXHUwMDNlZnVuYy5nZXRfYWx0ID0gZl9taWRpMl9nZXRfYWx0O1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MjgzNTpcXHRtaWRpMi1cXHUwMDNlZnVuYy5zZXRfYWx0ID0gZl9taWRpMl9zZXRfYWx0O1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMjgzNi1cXHRtaWRpMi1cXHUwMDNlZnVuYy5zZXR1cCA9IGZfbWlkaTJfc2V0dXA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA5OjIyOjE1LjkzNTA1NDkzN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTY2MDQ1OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gdGhlIE1JREkyIENvZGUqKlxuXG5BbHJpZ2h0LCBzbyBgZl9taWRpMl9zZXRfYWx0YCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCBtZWFucyBpdCdzIGludGVybmFsIHRvIGl0cyBjb21waWxhdGlvbiB1bml0LiBIb3dldmVyLCBpdCdzIGJlaW5nICphc3NpZ25lZCogdG8gYSBmdW5jdGlvbiBwb2ludGVyIHNvbWV3aGVyZS4gVGhhdCByYWlzZXMgYSBxdWVzdGlvbiBpbiBteSBtaW5kOiBBcmUgd2UgZGVhbGluZyB3aXRoIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIHRoYXQgZ2V0IGludm9sdmVkIGluIHRoYXQgYXNzaWdubWVudCwgb3IgaXMgZXZlcnl0aGluZyBlbmNhcHN1bGF0ZWQgd2l0aGluIHRoYXQgc3RhdGljIHNjb3BlPyBJdCdzIGdvb2QgcHJhY3RpY2UgdG8gdHJ5IGFuZCBsaW1pdCB0aGUgdmlzaWJpbGl0eSBvZiBmdW5jdGlvbnMgd2hlcmUgcG9zc2libGUgZm9yIG1vZHVsYXJpdHkuXG5cblRoZW4gdGhlcmUgaXMgYGZfbWlkaTJfYWxsb2NgLCBpdCdzIGFsc28gZGVjbGFyZWQgYHN0YXRpY2AuIFNvLCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBmX21pZGkyLmNgIGZpbGUgaXRzZWxmLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYW5kIGlkZW50aWZ5IGFueSBleHRlcm5hbGx5LXZpc2libGUgY29tcG9uZW50cywgYW5kIHRoZSByZWxhdGlvbnNoaXBzIG9mIHRoZXNlIHN0YXRpYyBpbnRlcm5hbCBmdW5jdGlvbnMuIFRoYXQnbGwgZ2l2ZSBtZSB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgaG93IHRoaXMgTUlESTIgbW9kdWxlIGlzIGludGVuZGVkIHRvIGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGV4dGVybmFsIEFQSXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MDcsIk91dHB1dFRva2VucyI6NzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMjoyMC45MDExMDMwNjdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTE0Nzc2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTE4Njg9c3RhdGljIHZvaWQgZl9taWRpMl9mcmVlX3VzYl9jb25maWdzKHN0cnVjdCBmX21pZGkyX3VzYl9jb25maWcgKmNvbmZpZylcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTg3NC0vKiBhcyB3ZSB1c2UgdGhlIHN0YXRpYyBkZXNjcmlwdG9ycyBmb3Igc2ltcGxpY2l0eSwgc2VyaWFsaXplIGJpbmQgY2FsbCAqL1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTg3NTpzdGF0aWMgREVGSU5FX01VVEVYKGZfbWlkaTJfZGVzY19tdXRleCk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xODc2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMjoyMS4xMTIyNjIyMTNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxNzE1NDMyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIHlvdXIgc3VtbWFyeTpcblxuKipRdWljayBSZWdleCBSZXRoaW5rKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gVGhhdCBpbml0aWFsIHJlZ3VsYXIgZXhwcmVzc2lvbiBJIGNyYWZ0ZWQuLi4gaXQncyBwcm9iYWJseSB0b28gZnJhZ2lsZSwgdG9vIHNwZWNpZmljLiBJIG5lZWQgdG8gYmUgYnJvYWRlciBpbiBteSBhcHByb2FjaC4gSW5zdGVhZCBvZiB0cnlpbmcgdG8gY29uc3RydWN0IGEgY29tcGxleCBwYXR0ZXJuLCB3aHkgZG9uJ3QgSSBqdXN0IGtlZXAgaXQgc2ltcGxlPyBJIGNhbiBqdXN0IGBncmVwYCBmb3IgdGhvc2UgY29yZSBrZXJuZWwgc3ltYm9scyB0aGF0IGFyZSBhbG1vc3QgYWx3YXlzIHBhcnQgb2YgYW4gaW50ZXJmYWNlIC0gdGhlIGVhc3kgd2lucy4gTGV0J3Mgc3RhcnQgd2l0aCBgRVhQT1JUX1NZTUJPTGAsIGBtb2R1bGVfaW5pdGAsIGBERUNMQVJFX1VTQl9GVU5DVElPTmAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IGFuZCBpZGVudGlmeSB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcy4gSSBjYW4gcmVmaW5lIGl0IGxhdGVyIGlmIHRoaXMgZmlyc3QgcGFzcyBpc24ndCBleGhhdXN0aXZlIGVub3VnaC4gR29vZCwgZm9jdXMgb24gdGhlIGZ1bmRhbWVudGFscywgdGhlbiBpdGVyYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDAxOCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA5OjIyOjI0LjcyOTQxOTY3M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2MzE4MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREVDTEFSRV9VU0JfRlVOQ1RJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTI4MDY9c3RhdGljIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmZfbWlkaTJfYWxsb2Moc3RydWN0IHVzYl9mdW5jdGlvbl9pbnN0YW5jZSAqZmkpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTI4ODctXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoyODg4OkRFQ0xBUkVfVVNCX0ZVTkNUSU9OX0lOSVQobWlkaTIsIGZfbWlkaTJfYWxsb2NfaW5zdCwgZl9taWRpMl9hbGxvYyk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0yODg5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMjoyNC43NzkwNTc0NjJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3Njc4NDQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE1JREkyIEZ1bmN0aW9uIERyaXZlciBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIGBERUNMQVJFX1VTQl9GVU5DVElPTl9JTklUYCBpcyByZXNwb25zaWJsZSBmb3IgcmVnaXN0ZXJpbmcgdGhpcyBwYXJ0aWN1bGFyIFVTQiBmdW5jdGlvbiwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoYXQgbWVhbnMgdGhlIHJlYWwgZW50cnkgcG9pbnRzIGZvciB0aGlzIGZ1bmN0aW9uIGFyZSBnb2luZyB0byBiZSB0aG9zZSBhbGxvY2F0aW9uIGZ1bmN0aW9uczogYGZfbWlkaTJfYWxsb2NfaW5zdGAsIGFuZCBgZl9taWRpMl9hbGxvY2AsIGFsb25nIHdpdGggdGhlIGNhbGxiYWNrcyBkZWZpbmVkIHdpdGhpbiB0aGVtLiBXZSdyZSBsb29raW5nIGF0IHRoZSBhbGxvY2F0aW9uIHNpZGUgb2YgdGhpbmdzLCBzbyB0aG9zZSBhcmUga2V5LiBMZXQncyBzdGFydCB3aXRoIGBmX21pZGkyX2FsbG9jX2luc3RgIGFuZCBgZl9taWRpMl9hbGxvY2AgYW5kIHNlZSB3aGF0IHRoZXkncmUgYWN0dWFsbHkgZG9pbmcuIFRoYXQncyB3aGVyZSB0aGUgbWFnaWMgc3RhcnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM5NiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA5OjIyOjI4LjQ1NTg0NTM5MVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwMjY5MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZl9taWRpMl9hbGxvY19pbnN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0yNjM1PXN0YXRpYyB2b2lkIGZfbWlkaTJfZnJlZV9pbnN0KHN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgKmYpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTI2NDUtLyogZ2FkZ2V0IGFsbG9jX2luc3QgKi9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjI2NDY6c3RhdGljIHN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgKmZfbWlkaTJfYWxsb2NfaW5zdCh2b2lkKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMjY0Ny17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTI4MDY9c3RhdGljIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmZfbWlkaTJfYWxsb2Moc3RydWN0IHVzYl9mdW5jdGlvbl9pbnN0YW5jZSAqZmkpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTI4ODctXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoyODg4OkRFQ0xBUkVfVVNCX0ZVTkNUSU9OX0lOSVQobWlkaTIsIGZfbWlkaTJfYWxsb2NfaW5zdCwgZl9taWRpMl9hbGxvYyk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0yODg5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMjoyOC41MDI4ODExMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTUzMDIyMTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgTUlESTI6IEluaXRpYWwgQXNzZXNzbWVudCBhbmQgUmVmaW5lbWVudCoqXG5cbk9rYXksIHNvIHRoZSBmdW5jdGlvbnMgaGVyZSBhcmUgYWxsIHN0YXRpYywgd2hpY2ggYXQgZmlyc3QgZ2xhbmNlIHN1Z2dlc3RzIG15IHR5cGljYWwgdG9vbHMsIGBmX21pZGkyX3NldF9hbHRgLCBgZl9taWRpMl9hbGxvY2AsIGBmX21pZGkyX2FsbG9jX2luc3RgLCBgZl9taWRpMl91bmJpbmRgLCBhbmQgYGZfbWlkaTJfYmluZGAsIG1pZ2h0IGJlIGRpcmVjdGx5IGFwcGxpY2FibGUuIEJ1dCB3YWl0Li4uIFN5emthbGxlciwgdGhlIHdvcmtob3JzZSwgKmNhbiogYWN0dWFsbHkgZnV6eiBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkncmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgYW5kIGludm9rZWQgZnJvbSBhIG5vbi1zdGF0aWMgY29udGV4dC4gU28sIEkgbmVlZCB0byBrZWVwIHRob3NlIGZ1bmN0aW9ucyBvbiBteSBsaXN0OiBgZl9taWRpMl9zZXRfYWx0YCwgYGZfbWlkaTJfdW5iaW5kYCwgYGZfbWlkaTJfYmluZGAsIGBmX21pZGkyX2FsbG9jYCwgYW5kIGBmX21pZGkyX2FsbG9jX2luc3RgLlxuXG5Ib2xkIG9uLi4uIEkgbmVlZCB0byByZXZpc2l0IHRoZSBndWlkZWxpbmVzLiBBaCwgdGhlIGRvY3VtZW50YXRpb24gc3BlY2lmaWVzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzIG92ZXIgaW5saW5lZCBzdGF0aWMgaGVscGVycy4gVGhhdCBtYWtlcyBzZW5zZSwgYmVjYXVzZSBpbmxpbmVkIGZ1bmN0aW9ucyBsYWNrIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIEZvcnR1bmF0ZWx5LCBpdCBsb29rcyBsaWtlIGBmX21pZGkyX3NldF9hbHRgICppc24ndCogaW5saW5lZCBiZWNhdXNlIGl0J3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGF2YWlsYWJsZSBpbiB0aGUgYGZfbWlkaTIuY2AgZmlsZS4gVGhpcyB3b3VsZCBiZSBldmVuIGJldHRlciBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5NTAsIk91dHB1dFRva2VucyI6NzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDk6MjI6MzMuNjU1OTA1OTc2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDI0MTQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTE4Njg9c3RhdGljIHZvaWQgZl9taWRpMl9mcmVlX3VzYl9jb25maWdzKHN0cnVjdCBmX21pZGkyX3VzYl9jb25maWcgKmNvbmZpZylcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTg3NC0vKiBhcyB3ZSB1c2UgdGhlIHN0YXRpYyBkZXNjcmlwdG9ycyBmb3Igc2ltcGxpY2l0eSwgc2VyaWFsaXplIGJpbmQgY2FsbCAqL1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTg3NTpzdGF0aWMgREVGSU5FX01VVEVYKGZfbWlkaTJfZGVzY19tdXRleCk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xODc2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMjozMy43MDYxNTcxMjZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzMjMzOTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKlJlZmluaW5nIHRoZSBNSURJLW92ZXItVVNCIEZ1bmN0aW9uIEluaXRpYWxpemF0aW9uIFN0cmF0ZWd5KipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIFVTQiBmdW5jdGlvbiBpbml0aWFsaXphdGlvbi4gVGhhdCBgREVDTEFSRV9VU0JfRlVOQ1RJT05fSU5JVGAgbWFjcm8uLi4gSSByZW1lbWJlciBpdCBleHBhbmRzIHRvIGB1c2JfZnVuY3Rpb25fcmVnaXN0ZXJgIGFuZCBgdXNiX2Z1bmN0aW9uX3VucmVnaXN0ZXJgLiBOb3RoaW5nIHBhcnRpY3VsYXJseSBncm91bmRicmVha2luZyB0aGVyZTsgdGhleSdyZSBzdGFuZGFyZCBVU0IgZnVuY3Rpb24gcmVnaXN0cmF0aW9uIHJvdXRpbmVzLCBhbmQgdGhleSdyZSwgaW1wb3J0YW50bHksICpub24tc3RhdGljKiwgbWFraW5nIHRoZW0gdmlzaWJsZSBhY3Jvc3MgY29tcGlsYXRpb24gdW5pdHMuIEJ1dCwgbXkgZ3V0IGZlZWxpbmcgdGVsbHMgbWUgdGhlcmUncyBwcm9iYWJseSBhIG1vcmUgc3RyZWFtbGluZWQsIGZvY3VzZWQgYXBwcm9hY2ggZm9yICp0aGlzKiBwYXJ0aWN1bGFyIE1JREkgaW1wbGVtZW50YXRpb24uXG5cbkluc3RlYWQgb2YgdGhpcyBnZW5lcmljIGFwcHJvYWNoLCBpdCBzZWVtcyBtb3JlIGRpcmVjdCB0byBsZXZlcmFnZSB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgbW9yZSBzcGVjaWZpYyB0byB0aGUgTUlESTIgZnVuY3Rpb246IGBmX21pZGkyX3NldF9hbHRgLCBgZl9taWRpMl9iaW5kYCwgYW5kIGBmX21pZGkyX3VuYmluZGAuIEknZCBwcmVmZXIgdG8gdXNlIHRoZSBleGlzdGluZyBpbnRlcmZhY2VzLiBUaGVzZSBzaG91bGQgaGFuZGxlIHRoZSBzcGVjaWZpYyBzZXR1cCwgY29ubmVjdGlvbiwgYW5kIGRpc2Nvbm5lY3Rpb24gbG9naWMgZm9yIHRoZSBNSURJIGVuZHBvaW50LiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBjaGVjayB0aGF0IGBERUNMQVJFX1VTQl9GVU5DVElPTl9JTklUYCBtYWNybyB0byBiZSBjZXJ0YWluIHRoZXJlIGlzbid0IHNvbWUgaGlkZGVuIGNvbXBsZXhpdHkgdGhhdCBJJ20gbWlzc2luZy4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGZ1bGx5IHJlcGxhY2UgaXRzIGJlaGF2aW9yLCBvdGhlcndpc2UgaXQgd2lsbCBhZGQgdW5uZWVkZWQgY29tcGxleGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2ODcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMjozNy43Mzg0OTk0MDZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MTc5Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBERUNMQVJFX1VTQl9GVU5DVElPTl9JTklUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oPTU5OT12b2lkIHVzYl9yZW1vdmVfZnVuY3Rpb24oc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oLTYwOS1cXG5pbmNsdWRlL2xpbnV4L3VzYi9jb21wb3NpdGUuaDo2MTA6I2RlZmluZSBERUNMQVJFX1VTQl9GVU5DVElPTl9JTklUKF9uYW1lLCBfaW5zdF9hbGxvYywgX2Z1bmNfYWxsb2MpXFx0XFxcXFxcbmluY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oLTYxMS1cXHRERUNMQVJFX1VTQl9GVU5DVElPTihfbmFtZSwgX2luc3RfYWxsb2MsIF9mdW5jX2FsbG9jKVxcdFxcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDk6MjI6MzcuNzk2Njg3ODk1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNzg5MTUwMzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTUlESTIgTW9kdWxlIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gdGhpcyBjb2RlIGRlZmluZXMgYG1vZHVsZV9pbml0YCBhbmQgYG1vZHVsZV9leGl0YC4gVGhhdCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gYW5kIGNsZWFudXAgcHJvY2VkdXJlcyBmb3IgYSBtb2R1bGUuIEl0IHNlZW1zIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlIGFyZSBgZl9taWRpMl9hbGxvY19pbnN0YCwgYGZfbWlkaTJfYWxsb2NgLCBgZl9taWRpMl9iaW5kYCwgYGZfbWlkaTJfdW5iaW5kYCwgYGZfbWlkaTJfc2V0X2FsdGAsIGBmX21pZGkyX3NldHVwYCwgYW5kIGBmX21pZGkyX2Rpc2FibGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LiBHaXZlbiB0aGUgZW1waGFzaXMgb24gYmluZGluZyBhbmQgdW5iaW5kaW5nLCBgZl9taWRpMl9iaW5kYCBpcyBsaWtlbHkgYSBjcnVjaWFsIGZ1bmN0aW9uIGZvciBhc3NvY2lhdGluZyB0aGUgbW9kdWxlIHdpdGggcmVsZXZhbnQgaGFyZHdhcmUgb3IgcmVzb3VyY2VzLiBMZXQncyBzdGFydCBieSBjb25maXJtaW5nIHRoYXQgYGZfbWlkaTJfYmluZGAgaXMgYWN0dWFsbHkgZGVmaW5lZCwgYW5kIHRoZW4gZGl2ZSBpbnRvIHdoYXQgaXQgZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMjQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMzo0MS41ODU4NDExN1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MjAxMDU0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmX21pZGkyX2JpbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTE5MTE9c3RhdGljIGludCBmX21pZGkyX2luaXRfbWlkaTJfZXBfb3V0KHN0cnVjdCBmX21pZGkyICptaWRpMiwgaW50IGluZGV4KVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xOTI3LS8qIGdhZGdldCBmdW5jdGlvbiBiaW5kIGNhbGxiYWNrICovXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxOTI4OnN0YXRpYyBpbnQgZl9taWRpMl9iaW5kKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgc3RydWN0IHVzYl9mdW5jdGlvbiAqZilcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTE5Mjkte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0yODA2PXN0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmX21pZGkyX2FsbG9jKHN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgKmZpKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0yODMxLVxcdG1pZGkyLVxcdTAwM2VmdW5jLm5hbWUgPSBcXFwibWlkaTJfZnVuY1xcXCI7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoyODMyOlxcdG1pZGkyLVxcdTAwM2VmdW5jLmJpbmQgPSBmX21pZGkyX2JpbmQ7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0yODMzLVxcdG1pZGkyLVxcdTAwM2VmdW5jLnVuYmluZCA9IGZfbWlkaTJfdW5iaW5kO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMzo0My4yNDc4NTg0MjRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjYzNDY2OTc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSdtIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqQ2hlY2tpbmcgTUlESSBGdW5jdGlvbmFsaXR5KipcblxuQWxyaWdodCwgY29uZmlybWVkLiBgZl9taWRpMl9iaW5kYCBkZWZpbml0ZWx5IGV4aXN0cywgdGhhdCBwYXJ0IG9mIHRoZSBjb2RlIGlzIGdvb2QuIE5vdywgbGV0J3MgcGl2b3QgYW5kIHRha2UgYSBsb29rIGF0IGBmX21pZGkyX2Rpc2FibGVgLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcywgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgYmluZGluZyBmdW5jdGlvbiwgYXMgdGhleSBsaWtlbHkgaGF2ZSBzaWduaWZpY2FudCBpbnRlcmRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIGVuc3VyZSBNSURJIGZ1bmN0aW9uYWxpdHkgaXMgd29ya2luZyBhcyBleHBlY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NjEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMzo0NS44ODI1MzE0OTZaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MzE0MTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZfbWlkaTJfZGlzYWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTQwNT1zdGF0aWMgaW50IGZfbWlkaTJfc2V0dXAoc3RydWN0IHVzYl9mdW5jdGlvbiAqZm4sXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTE0MzEtLyogZ2FkZ2V0IGZ1bmN0aW9uIGRpc2FibGUgY2FsbGJhY2sgKi9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjE0MzI6c3RhdGljIHZvaWQgZl9taWRpMl9kaXNhYmxlKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmZuKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTQzMy17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTI4MDY9c3RhdGljIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmZfbWlkaTJfYWxsb2Moc3RydWN0IHVzYl9mdW5jdGlvbl9pbnN0YW5jZSAqZmkpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTI4MzYtXFx0bWlkaTItXFx1MDAzZWZ1bmMuc2V0dXAgPSBmX21pZGkyX3NldHVwO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MjgzNzpcXHRtaWRpMi1cXHUwMDNlZnVuYy5kaXNhYmxlID0gZl9taWRpMl9kaXNhYmxlO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMjgzOC1cXHRtaWRpMi1cXHUwMDNlZnVuYy5mcmVlX2Z1bmMgPSBmX21pZGkyX2ZyZWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA5OjIzOjQ1LjkzMTg5OTc5NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTU4MTc2MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBmX21pZGkyX2Rpc2FibGVgIGlzIGRlZmluaXRlbHkgYSB0aGluZy4gVGhhdCBtZWFucyBteSBmb2N1cyBzeW1ib2xzIG5lZWQgdG8gZW5jb21wYXNzIHRoZSBmdWxsIHNldDogYGZfbWlkaTJfYmluZGAsIGBmX21pZGkyX3VuYmluZGAsIGBmX21pZGkyX3NldF9hbHRgLCBhbmQgYGZfbWlkaTJfZGlzYWJsZWAuIEV4Y2VsbGVudC5cblxuTm93LCBsZXQncyBicmVhayBkb3duIHRoZSBjb25maWd1cmF0aW9uIGVsZW1lbnRzLiBJIGhhdmUgdGhlc2Uga2V5IGNvbmZpZ3MgdG8gY29uc2lkZXI6IGBVU0JfR0FER0VUYCwgYFVTQl9DT05GSUdGU2AsIGBTTkRgLCBhbmQgYFVTQl9DT05GSUdGU19GX01JREkyYC4gQWgsIHJpZ2h0LCBgVVNCX0ZfTUlESTJgIGlzIHNlbGVjdGVkIGJ5IGBVU0JfQ09ORklHRlNfRl9NSURJMmAuXG5cbkkgc2hvdWxkIHByb2JhYmx5IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGNydWNpYWwgY29uZmlncyBmbG9hdGluZyBhcm91bmQuIE5vcGUsIGBVU0JfR0FER0VUYCBpcyB0aGUgbWFpbiBvbmUgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBzZWVtcyB0byBidWlsZCBvbiBpdC5cblxuQWxyaWdodCwgYFVTQl9DT05GSUdGU19GX01JREkyYCBpcyBkZXBlbmRlbnQgb24gYm90aCBgVVNCX0NPTkZJR0ZTYCBhbmQgYFNORGAuIFNvLCB0byBiZSBzYWZlIGFuZCBjb21wcmVoZW5zaXZlLCBJICpuZWVkKiB0byBpbmNsdWRlIGBVU0JfQ09ORklHRlNfRl9NSURJMmAsIGBVU0JfQ09ORklHRlNgLCBgU05EYCwgYW5kLCBvYnZpb3VzbHksIGBVU0JfR0FER0VUYC4gSSdsbCBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjayBvbiB0aG9zZSBgVVNCX0NPTkZJR0ZTX0ZfTUlESTJgIGRlcGVuZGVuY2llcyB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNDAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDk6MjM6NTAuODkwMDc4NTg1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDMzMzkxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9DT05GSUdGU19GX01JREkyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9NDMxPWNvbmZpZyBVU0JfQ09ORklHRlNfRl9NSURJXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy00NDQtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6NDQ1OmNvbmZpZyBVU0JfQ09ORklHRlNfRl9NSURJMlxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTQ0Ni1cXHRib29sIFxcXCJNSURJIDIuMCBmdW5jdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDk6MjM6NTEuMzkzNDI1OTE0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzOTgwOTExNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTUlESSAyLjAgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQgc25pcHBldCBlYXJsaWVyLiBMZXQncyByZWNhcDogYFVTQl9DT05GSUdGU19GX01JREkyYCBlc3NlbnRpYWxseSBhY3RzIGFzIHRoZSBwcmltYXJ5IGVuYWJsZXIgZm9yIGBVU0JfRl9NSURJMmAuIEl0J3MgZGVwZW5kZW50IG9uIGBVU0JfQ09ORklHRlNgIHdoaWNoIGl0c2VsZiByZWxpZXMgb24gYFNORGAsIGFuZCBpdCBwdWxscyBpbiBgVVNCX0xJQkNPTVBPU0lURWAgYW5kIGBVU0JfRl9NSURJMmAuIFNvLCBhdCBhIG1pbmltdW0sIHRvIGhhdmUgTUlESSAyLjAgZnVuY3Rpb25hbGl0eSwgd2UgbmVlZCB0byBjb25zaWRlciBgVVNCX0NPTkZJR0ZTX0ZfTUlESTJgLCBgVVNCX0NPTkZJR0ZTYCwgYFNORGAsIGFuZCBvZiBjb3Vyc2UsIGBVU0JfR0FER0VUYC5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXM6IGNhbiBgVVNCX0ZfTUlESTJgIGJlIGVuYWJsZWQgdGhyb3VnaCAqb3RoZXIqIG1lYW5zPyBEb2VzIGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbiBzZWxlY3QgYFVTQl9GX01JREkyYCBkaXJlY3RseT8gV2UgbmVlZCB0byB2ZXJpZnkgaWYgdGhpcyBpcyB0aGUgb25seSBwYXRoLCBvciBpZiB0aGVyZSBhcmUgYWx0ZXJuYXRpdmUgcm91dGVzIHRvIGFjaGlldmluZyB0aGUgc2FtZSBvdXRjb21lLiBVbmRlcnN0YW5kaW5nIHRoaXMgZGVwZW5kZW5jeSBpcyBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTg4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA5OjIzOjU5Ljc5MTUxOTc1OVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk1NzQ4OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IFVTQl9GX01JREkyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9NDQ1PWNvbmZpZyBVU0JfQ09ORklHRlNfRl9NSURJMlxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNDQ5LVxcdHNlbGVjdCBVU0JfTElCQ09NUE9TSVRFXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6NDUwOlxcdHNlbGVjdCBVU0JfRl9NSURJMlxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTQ1MS1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA5OjIzOjU5Ljg0MTEwMDkzOFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTg3MTQ3MjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNSURJMiBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgTUlESTIgY29uZmlndXJhdGlvbiwgYW5kIGluaXRpYWxseSwgSSB0aG91Z2h0IHRoYXQgb25seSBgVVNCX0NPTkZJR0ZTX0ZfTUlESTJgIHdhcyB0aGUga2V5LiBCdXQgd2FpdCwgYFVTQl9GX01JREkyYCBpcyBhICp0cmlzdGF0ZSogdmFyaWFibGUsIG1lYW5pbmcgaXQgY2FuIGJlIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCB3aGljaCBjaGFuZ2VzIHRoaW5ncy4gSWYgYFVTQl9DT05GSUdGU19GX01JREkyYCBpcyBhIEJvb2xlYW4sIGl0IGltcGxpZXMgdGhhdCBpdCBpcyBidWlsdC1pbiB0byBgdXNiX2ZfbWlkaTJgIHdoZW4gYFVTQl9DT05GSUdGU2AgaXMgYnVpbHQgaW4gYW5kIG1vZHVsZSB3aGVuIGBVU0JfQ09ORklHRlNgIGlzIGEgbW9kdWxlLiBIbW0sIGJ1dCBgVVNCX0NPTkZJR0ZTYCBpcyBhbHNvIGEgKnRyaXN0YXRlKi4gT2theSwgZ290IGl0IC0gc28gYFVTQl9DT05GSUdGU19GX01JREkyYCBpcyBhIEJvb2xlYW4sIHdoaWxlIGBVU0JfRl9NSURJMmAgaXMgYSB0cmlzdGF0ZS4gSWYgYFVTQl9DT05GSUdGU2AgaXMgZW5hYmxlZCBhcyAneScgKGJ1aWx0LWluKSwgdGhlbiBgVVNCX0ZfTUlESTJgIHdpbGwgYWxzbyBiZSBmb3JjZWQgdG8gJ3knLiBUaGVyZWZvcmUsIGBVU0JfQ09ORklHRlNfRl9NSURJMmAgKmlzKiB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZW5hYmxlLlxuXG5Ob3csIGxldCdzIHNlZSBpZiB3ZSBuZWVkIGBTTkRfVU1QYC4gSGFuZyBvbi4uLiBgZl9taWRpMi5jYCAqZG9lcyogdXNlIFVNUCwgYnV0IGRvZXMgaXQgZXhwbGljaXRseSBkZXBlbmQgb24gYFNORF9VTVBgPyBUaGF0J3MgdGhlIG5leHQgcXVlc3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTA0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA5OjI0OjA1LjAyODI1MDcyNFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzNjY0Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNORF9VTVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz0yMTI9Y29uZmlnIFVTQl9GX01JREkyXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjEzLVxcdHRyaXN0YXRlXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MjE0OlxcdHNlbGVjdCBTTkRfVU1QXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MjE1OlxcdHNlbGVjdCBTTkRfVU1QX0xFR0FDWV9SQVdNSURJXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjE2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyNDowNS41MTE5MjM5MzNaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk1ODU4NjI5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVTQiBNSURJIDIuMCBHYWRnZXQgRnVuY3Rpb24gZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBgVVNCX0ZfTUlESTJgIGltcGxpY2l0bHkgZW5hYmxlcyBgU05EX1VNUGAgYW5kIGBTTkRfVU1QX0xFR0FDWV9SQVdNSURJYC4gR29vZCB0byBrbm93LCBzaW1wbGlmaWVzIHRoaW5ncy4gSSdtIGZvY3VzaW5nIG9uIGtleSBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhlIG1vZGlmaWVkIGNvZGUncyBlbnRyeSBwb2ludHMgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuXG5cbk15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlc2Ugc3ltYm9sczogYGZfbWlkaTJfYmluZGAsIGBmX21pZGkyX3VuYmluZGAsIGBmX21pZGkyX3NldF9hbHRgLCBgZl9taWRpMl9kaXNhYmxlYCwgYGZfbWlkaTJfc2V0dXBgLCBgZl9taWRpMl9hbGxvY19pbnN0YCwgYW5kIGBmX21pZGkyX2FsbG9jYC5cblxuTm93LCBsZXQncyB0cmFjZSB0aGUgYWxsb2NhdGlvbiBwYXRoLiBJIHdhbnRlZCB0byB2ZXJpZnkgaWYgYGZfbWlkaTJfYWxsb2NfZXBfcmVxc2Agd2FzIGRpcmVjdGx5IGNhbGxlZCBmcm9tIGBmX21pZGkyX2JpbmRgLiBJdCB0dXJucyBvdXQgdGhhdCdzIG5vdCB0aGUgY2FzZS4gYGZfbWlkaTJfYmluZGAgY2FsbHMgYGZfbWlkaTJfaW5pdF9lcGAsIGJ1dCB0aGF0IGRvZXNuJ3QgaGFuZGxlIHRoZSBhbGxvY2F0aW9uLiBUaGUgZW5kcG9pbnQgcmVxdWVzdHMgYXJlIGFsbG9jYXRlZCBpbiBgZl9taWRpMl9zdGFydF9lcHNgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGZfbWlkaTJfc2V0X2FsdGAuIFNvLCBgZl9taWRpMl9zZXRfYWx0YCBpcyB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgdG8gdGhlIGNvZGUgSSdtIHJlYWxseSBpbnRlcmVzdGVkIGluLlxuXG5OZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgb3RoZXIgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gYGZfbWlkaTJfc2V0dXBgIGhhbmRsZXMgY29udHJvbCByZXF1ZXN0cywgYW5kIGBmX21pZGkyX2Rpc2FibGVgIHN0b3BzIHRoZSBlbmRwb2ludHMuXG5cbkNvbnNpZGVyaW5nIGFsbCB0aGlzLCBteSBmb2N1cyBzeW1ib2xzIHJlZmluZSB0bzogYGZfbWlkaTJfc2V0X2FsdGAsIGBmX21pZGkyX2Rpc2FibGVgLCBgZl9taWRpMl9iaW5kYCwgYW5kIGBmX21pZGkyX3VuYmluZGAuIEkndmUgZXhjbHVkZWQgYGZfbWlkaTJfc2V0dXBgIHNpbmNlIGl0IGRvZXNuJ3Qgc2VlbSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBpc3N1ZSBhbmQsIGFzIGEgY29udHJvbCBoYW5kbGVyLCB3aWxsIGJlIGZ1enppbmcgd2l0aCBhIGRpZmZlcmVudCBzZXQgb2YgdGFyZ2V0cy5cblxuTm93LCBpcyBgZl9taWRpMl9zZXRfYWx0YCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nPyBZZXMsIGFic29sdXRlbHkuIEl0J3MgYSBjYWxsYmFjayBmb3IgdGhlIFwic2V0IGFsdGVybmF0ZSBzZXR0aW5nXCIgb3BlcmF0aW9uLCB0cmlnZ2VyZWQgYnkgdGhlIFVTQiBob3N0LiBUaGlzIGlzIGEgY3J1Y2lhbCBlbnRyeSBwb2ludCBmb3IgZnV6emluZyB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzLlxuXG5UaGVyZWZvcmUsIHRoZSBmaW5hbCBhc3Nlc3NtZW50IGlzOlxuXG5Xb3J0aEZ1enppbmc6IFRydWVcbkZvY3VzU3ltYm9sczogW1wiZl9taWRpMl9zZXRfYWx0XCIsIFwiZl9taWRpMl9kaXNhYmxlXCIsIFwiZl9taWRpMl9iaW5kXCIsIFwiZl9taWRpMl91bmJpbmRcIl1cbkVuYWJsZUNvbmZpZ3M6IFtcIlVTQl9HQURHRVRcIiwgXCJVU0JfQ09ORklHRlNcIiwgXCJTTkRcIiwgXCJVU0JfQ09ORklHRlNfRl9NSURJMlwiXVxuUmVhc29uaW5nOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiBlbmRwb2ludCByZXF1ZXN0cyBpbiB0aGUgVVNCIE1JREkgMi4wIGdhZGdldCBmdW5jdGlvbi4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHRocm91Z2ggVVNCIGdhZGdldCBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIHNldHRpbmcgYWx0ZXJuYXRlIHNldHRpbmdzIChmX21pZGkyX3NldF9hbHQpIGFuZCBkaXNhYmxpbmcgdGhlIGZ1bmN0aW9uIChmX21pZGkyX2Rpc2FibGUpLlwiXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTgwLCJPdXRwdXRUb2tlbnMiOjE2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyNDoxNC40NzA1MTI3MzZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTIzNTg3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0dBREdFVFwiLFxuICAgIFwiVVNCX0NPTkZJR0ZTXCIsXG4gICAgXCJTTkRcIixcbiAgICBcIlVTQl9DT05GSUdGU19GX01JREkyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZl9taWRpMl9zZXRfYWx0XCIsXG4gICAgXCJmX21pZGkyX2Rpc2FibGVcIixcbiAgICBcImZfbWlkaTJfYmluZFwiLFxuICAgIFwiZl9taWRpMl91bmJpbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiBlbmRwb2ludCByZXF1ZXN0cyBpbiB0aGUgVVNCIE1JREkgMi4wIGdhZGdldCBmdW5jdGlvbi4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHRocm91Z2ggVVNCIGdhZGdldCBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIHNldHRpbmcgYWx0ZXJuYXRlIHNldHRpbmdzIChmX21pZGkyX3NldF9hbHQpIGFuZCBkaXNhYmxpbmcgdGhlIGZ1bmN0aW9uIChmX21pZGkyX2Rpc2FibGUpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9HQURHRVRcIixcbiAgICBcIlVTQl9DT05GSUdGU1wiLFxuICAgIFwiU05EXCIsXG4gICAgXCJVU0JfQ09ORklHRlNfRl9NSURJMlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZfbWlkaTJfc2V0X2FsdFwiLFxuICAgIFwiZl9taWRpMl9kaXNhYmxlXCIsXG4gICAgXCJmX21pZGkyX2JpbmRcIixcbiAgICBcImZfbWlkaTJfdW5iaW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgb2YgZW5kcG9pbnQgcmVxdWVzdHMgaW4gdGhlIFVTQiBNSURJIDIuMCBnYWRnZXQgZnVuY3Rpb24uIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIFVTQiBnYWRnZXQgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiBzZXR0aW5nIGFsdGVybmF0ZSBzZXR0aW5ncyAoZl9taWRpMl9zZXRfYWx0KSBhbmQgZGlzYWJsaW5nIHRoZSBmdW5jdGlvbiAoZl9taWRpMl9kaXNhYmxlKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6czl9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-29 09:15:21 +0000 UTC FinishedAt: 2026-07-29 09:24:16 +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": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_GADGET", "USB_CONFIGFS", "SND", "USB_CONFIGFS_F_MIDI2" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_GADGET", "USB_CONFIGFS", "SND", "USB_CONFIGFS_F_MIDI2" ], "series_id": "dffb511f-6ee1-43ed-8c4e-7fb553ab816e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "f_midi2_set_alt", "f_midi2_disable", "f_midi2_bind", "f_midi2_unbind" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9HQURHRVQmIzM0OywKICAgICYjMzQ7VVNCX0NPTkZJR0ZTJiMzNDssCiAgICAmIzM0O1NORCYjMzQ7LAogICAgJiMzNDtVU0JfQ09ORklHRlNfRl9NSURJMiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZfbWlkaTJfc2V0X2FsdCYjMzQ7LAogICAgJiMzNDtmX21pZGkyX2Rpc2FibGUmIzM0OywKICAgICYjMzQ7Zl9taWRpMl9iaW5kJiMzNDssCiAgICAmIzM0O2ZfbWlkaTJfdW5iaW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIG9mIGVuZHBvaW50IHJlcXVlc3RzIGluIHRoZSBVU0IgTUlESSAyLjAgZ2FkZ2V0IGZ1bmN0aW9uLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdGhyb3VnaCBVU0IgZ2FkZ2V0IGNvbmZpZ3VyYXRpb24gb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IHdoZW4gc2V0dGluZyBhbHRlcm5hdGUgc2V0dGluZ3MgKGZfbWlkaTJfc2V0X2FsdCkgYW5kIGRpc2FibGluZyB0aGUgZnVuY3Rpb24gKGZfbWlkaTJfZGlzYWJsZSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlMjFlOWZhNjljYjdkOTEyMTNmMzEwYmNlYWYyODdjZGNlNzNjNzNjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMDk6MjE6MzAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmNcbmluZGV4IDE5ZmRhYzAyNDM0MzkuLjVlNTRjZjk5NDcwN2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jXG5AQCAtMTE0NSw3ICYjNDM7MTE0NSw3IEBAIHN0YXRpYyBpbnQgZl9taWRpMl9hbGxvY19lcF9yZXFzKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqdXNiX2VwKVxuIFx0aWYgKCF1c2JfZXAtXHUwMDNlcmVxcylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtaWRpMi1cdTAwM2VpbmZvLm51bV9yZXFzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHVzYl9lcC1cdTAwM2VudW1fcmVxczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKHVzYl9lcC1cdTAwM2VyZXFzW2ldLnJlcSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0dXNiX2VwLVx1MDAzZXJlcXNbaV0ucmVxID0gYWxsb2NfZXBfcmVxKHVzYl9lcC1cdTAwM2V1c2JfZXAsXG5AQCAtMTE2MCwxMCAmIzQzOzExNjAsOSBAQCBzdGF0aWMgaW50IGZfbWlkaTJfYWxsb2NfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcbiAvKiBGcmVlIGFsbG9jYXRlZCByZXF1ZXN0cyAqL1xuIHN0YXRpYyB2b2lkIGZfbWlkaTJfZnJlZV9lcF9yZXFzKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqdXNiX2VwKVxuIHtcbi1cdHN0cnVjdCBmX21pZGkyICptaWRpMiA9IHVzYl9lcC1cdTAwM2VjYXJkO1xuIFx0aW50IGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtaWRpMi1cdTAwM2VpbmZvLm51bV9yZXFzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHVzYl9lcC1cdTAwM2VudW1fcmVxczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKCF1c2JfZXAtXHUwMDNlcmVxc1tpXS5yZXEpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGZyZWVfZXBfcmVxKHVzYl9lcC1cdTAwM2V1c2JfZXAsIHVzYl9lcC1cdTAwM2VyZXFzW2ldLnJlcSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9HQURHRVQmIzM0OywKICAgICYjMzQ7VVNCX0NPTkZJR0ZTJiMzNDssCiAgICAmIzM0O1NORCYjMzQ7LAogICAgJiMzNDtVU0JfQ09ORklHRlNfRl9NSURJMiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZfbWlkaTJfc2V0X2FsdCYjMzQ7LAogICAgJiMzNDtmX21pZGkyX2Rpc2FibGUmIzM0OywKICAgICYjMzQ7Zl9taWRpMl9iaW5kJiMzNDssCiAgICAmIzM0O2ZfbWlkaTJfdW5iaW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIG9mIGVuZHBvaW50IHJlcXVlc3RzIGluIHRoZSBVU0IgTUlESSAyLjAgZ2FkZ2V0IGZ1bmN0aW9uLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdGhyb3VnaCBVU0IgZ2FkZ2V0IGNvbmZpZ3VyYXRpb24gb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IHdoZW4gc2V0dGluZyBhbHRlcm5hdGUgc2V0dGluZ3MgKGZfbWlkaTJfc2V0X2FsdCkgYW5kIGRpc2FibGluZyB0aGUgZnVuY3Rpb24gKGZfbWlkaTJfZGlzYWJsZSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlMjFlOWZhNjljYjdkOTEyMTNmMzEwYmNlYWYyODdjZGNlNzNjNzNjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjkgMDk6MjE6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYwppbmRleCAxOWZkYWMwMjQzNDM5Li41ZTU0Y2Y5OTQ3MDdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMKQEAgLTExNDUsNyAmIzQzOzExNDUsNyBAQCBzdGF0aWMgaW50IGZfbWlkaTJfYWxsb2NfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcCkKIAlpZiAoIXVzYl9lcC0mZ3Q7cmVxcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgbWlkaTItJmd0O2luZm8ubnVtX3JlcXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB1c2JfZXAtJmd0O251bV9yZXFzOyBpJiM0MzsmIzQzOykgewogCQlpZiAodXNiX2VwLSZndDtyZXFzW2ldLnJlcSkKIAkJCWNvbnRpbnVlOwogCQl1c2JfZXAtJmd0O3JlcXNbaV0ucmVxID0gYWxsb2NfZXBfcmVxKHVzYl9lcC0mZ3Q7dXNiX2VwLApAQCAtMTE2MCwxMCAmIzQzOzExNjAsOSBAQCBzdGF0aWMgaW50IGZfbWlkaTJfYWxsb2NfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcCkKIC8qIEZyZWUgYWxsb2NhdGVkIHJlcXVlc3RzICovCiBzdGF0aWMgdm9pZCBmX21pZGkyX2ZyZWVfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcCkKIHsKLQlzdHJ1Y3QgZl9taWRpMiAqbWlkaTIgPSB1c2JfZXAtJmd0O2NhcmQ7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgbWlkaTItJmd0O2luZm8ubnVtX3JlcXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB1c2JfZXAtJmd0O251bV9yZXFzOyBpJiM0MzsmIzQzOykgewogCQlpZiAoIXVzYl9lcC0mZ3Q7cmVxc1tpXS5yZXEpCiAJCQljb250aW51ZTsKIAkJZnJlZV9lcF9yZXEodXNiX2VwLSZndDt1c2JfZXAsIHVzYl9lcC0mZ3Q7cmVxc1tpXS5yZXEpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzE5CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFVTQiBNSURJIEdhZGdldCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jYC4gSXQmIzM5O3MgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIG1vZGlmaWNhdGlvbiwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGBtaWRpMi0mZ3Q7aW5mby5udW1fcmVxc2AgdG8gYHVzYl9lcC0mZ3Q7bnVtX3JlcXNgIHdpdGhpbiB0aGUgYGZfbWlkaTJfYWxsb2NfZXBfcmVxc2AgYW5kIGBmX21pZGkyX2ZyZWVfZXBfcmVxc2AgZnVuY3Rpb25zLiBUaGF0IHJpZ2h0IHRoZXJlIHN1Z2dlc3RzIGEgYnVnIGZpeCDigJMgc29tZW9uZSB3YXMgdXNpbmcgdGhlIHdyb25nIHZhcmlhYmxlLCBwcm9iYWJseSBhIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlIHdpdGggcmVxdWVzdCBxdWV1ZXMuIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBtaWdodCBoYXZlIGxlZCB0byBwb3RlbnRpYWwgZW5kcG9pbnQgYWxsb2NhdGlvbiBvciBkZWFsbG9jYXRpb24gcHJvYmxlbXMuCgpUaGVzZSBmdW5jdGlvbnMsIGBmX21pZGkyX2FsbG9jX2VwX3JlcXNgIGFuZCBgZl9taWRpMl9mcmVlX2VwX3JlcXNgLCBhcmUgZGVjbGFyZWQgYXMgc3RhdGljLCB3aGljaCBpcyBnb29kLiBJdCBsaW1pdHMgdGhlaXIgc2NvcGUgYW5kIG1ha2VzIGl0IGVhc2llciB0byB0cmFjZSB0aGVpciB1c2FnZSB3aXRoaW4gdGhlIGZpbGUuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hlcmUgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgY2FsbGVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHRzIHdpdGhpbiB0aGUgbGFyZ2VyIE1JREkgZ2FkZ2V0IGZyYW1ld29yay4gSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBhbnkgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIG9yIHN5bWJvbCBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBpbmZsdWVuY2UgaG93IHRoaXMgY29kZSBnZXRzIGNvbXBpbGVkIG9yIGxpbmtlZCBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmX21pZGkyX2FsbG9jX2VwX3JlcXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTEyMj1zdGF0aWMgdm9pZCBmX21pZGkyX2Ryb3BfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTExMzctLyogQWxsb2NhdGUgcmVxdWVzdHMgZm9yIHRoZSBnaXZlbiBFUCAqL1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxMTM4OnN0YXRpYyBpbnQgZl9taWRpMl9hbGxvY19lcF9yZXFzKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqdXNiX2VwKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMTM5LXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTEyNDk9c3RhdGljIGludCBmX21pZGkyX3N0YXJ0X2VwcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKmVwX2luLFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTI2MS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTI2MjpcdGVyciA9IGZfbWlkaTJfYWxsb2NfZXBfcmVxcyhlcF9pbik7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyNjMtXHRpZiAoZXJyKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjY0LVx0XHRyZXR1cm4gZXJyO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxMjY1Olx0ZXJyID0gZl9taWRpMl9hbGxvY19lcF9yZXFzKGVwX291dCk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyNjYtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxODQKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKlRyYWNpbmcgdGhlIENhbGwgUGF0aDogZl9taWRpMl9zdGFydF9lcHMqKgoKT2theSwgc28gYGZfbWlkaTJfc3RhcnRfZXBzYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBpbml0aWF0ZWQgdGhpcyB3aG9sZSBwcm9jZXNzLiBUaGF0JiMzOTtzIG91ciBlbnRyeSBwb2ludCwgYW5kIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHRoYXQgZm9sbG93cyBmcm9tIHRoZXJlLiBUaW1lIHRvIGRpZyBpbiBhbmQgdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYGZfbWlkaTJfc3RhcnRfZXBzYCBjYWxscywgd2hhdCBkYXRhIGl0IHBhc3NlcywgYW5kIHdoZXJlIHRoZSBwcm9ncmFtIGdvZXMgbmV4dC4gVGhpcyBsZXZlbCBvZiBkZXRhaWwgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLiBUaGUgbmV4dCBzdGVwcyB3aWxsIGdpdmUgbWUgaW5zaWdodHMgdG8gdGhlIHJvb3QgY2F1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zl9taWRpMl9zdGFydF9lcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTIzOT1zdGF0aWMgdm9pZCBmX21pZGkyX3N0b3BfZXBzKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqZXBfaW4sXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjQ4LS8qIHN0YXJ0L3F1ZXVlIGJvdGggSU4gYW5kIE9VVCBFUHMgKi9cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTI0OTpzdGF0aWMgaW50IGZfbWlkaTJfc3RhcnRfZXBzKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqZXBfaW4sXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyNTAtXHRcdFx0ICAgICBzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKmVwX291dCxcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTEyNzQ9c3RhdGljIGludCBmX21pZGkyX3NldF9hbHQoc3RydWN0IHVzYl9mdW5jdGlvbiAqZm4sIHVuc2lnbmVkIGludCBpbnRmLFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTMwNC1cdGlmIChvcF9tb2RlID09IE1JRElfT1BfTU9ERV9NSURJMSlcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTMwNTpcdFx0cmV0dXJuIGZfbWlkaTJfc3RhcnRfZXBzKFx1MDAyNm1pZGkyLVx1MDAzZW1pZGkxX2VwX2luLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMzA2LVx0XHRcdFx0XHQgXHUwMDI2bWlkaTItXHUwMDNlbWlkaTFfZXBfb3V0LCBmbik7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMzExLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxMzEyOlx0XHRcdGVyciA9IGZfbWlkaTJfc3RhcnRfZXBzKFx1MDAyNmVwLVx1MDAzZWVwX2luLCBcdTAwMjZlcC1cdTAwM2VlcF9vdXQsIGZuKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTMxMy1cdFx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MjkKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1JREkgRnVuY3Rpb24gSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gYGZfbWlkaTJfc2V0X2FsdGAgaXMgYSBgdXNiX2Z1bmN0aW9uYCBjYWxsYmFjaywgd2hpY2ggbWVhbnMgaXQmIzM5O3MgYSBjcml0aWNhbCBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgVVNCIE1JREkgY29tbXVuaWNhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgZnJhbWV3b3JrLiBNeSBuZXh0IHN0ZXAsIGFuZCBxdWl0ZSBsb2dpY2FsbHksIGlzIHRvIGludmVzdGlnYXRlIGBmX21pZGkyX2ZyZWVfZXBfcmVxc2AuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIGVuZHBvaW50IHJlcXVlc3Qgc3RydWN0dXJlcyBhcmUgY2xlYW5lZCB1cCBvciBtYW5hZ2VkLCBwb3RlbnRpYWxseSBhZnRlciBhbiBhbHRlcm5hdGUgc2V0dGluZyBjaGFuZ2Ugb3IgYSBjb25maWd1cmF0aW9uIGFsdGVyYXRpb24gcmVsYXRlZCB0byB0aGlzIGZ1bmN0aW9uLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyByZXNvdXJjZXMgYXJlIGhhbmRsZWQgYW5kIGZyZWVkIGluIHJlbGF0aW9uIHRvIHRoaXMga2V5IGNhbGxiYWNrLCBzcGVjaWZpY2FsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zl9taWRpMl9mcmVlX2VwX3JlcXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTEzOD1zdGF0aWMgaW50IGZfbWlkaTJfYWxsb2NfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTExNjAtLyogRnJlZSBhbGxvY2F0ZWQgcmVxdWVzdHMgKi9cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTE2MTpzdGF0aWMgdm9pZCBmX21pZGkyX2ZyZWVfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTE2Mi17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0xMjAzPXN0YXRpYyB2b2lkIGZfbWlkaTJfZnJlZV9lcChzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyMDYtXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyMDc6XHRmX21pZGkyX2ZyZWVfZXBfcmVxcyh1c2JfZXApO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjA4LVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTIzOT1zdGF0aWMgdm9pZCBmX21pZGkyX3N0b3BfZXBzKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqZXBfaW4sXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjQzLVx0Zl9taWRpMl9kcm9wX3JlcXMoZXBfb3V0KTtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTI0NDpcdGZfbWlkaTJfZnJlZV9lcF9yZXFzKGVwX2luKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTI0NTpcdGZfbWlkaTJfZnJlZV9lcF9yZXFzKGVwX291dCk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyNDYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NDEKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipBbmFseXppbmcgTUlESSBFbmRwb2ludCBDbGVhbnVwKioKCk9rYXksIHNvIEkgc2VlIGBmX21pZGkyX2ZyZWVfZXBgIGFuZCBgZl9taWRpMl9zdG9wX2Vwc2AgYXJlIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucy4gVGhhdCYjMzk7cyBteSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgTUlESSBlbmRwb2ludHMgYXJlIG1hbmFnZWQgYW5kIHJlbGVhc2VkLiBJIG5lZWQgdG8gZGlnIGludG8gYGZfbWlkaTJfZnJlZV9lcGAgc3BlY2lmaWNhbGx5LiBNeSBmb2N1cyB3aWxsIGJlIG9uIHVuZGVyc3RhbmRpbmcgd2hhdCBpdCBkb2VzIGFuZCwgY3JpdGljYWxseSwgd2hvIGRlcGVuZHMgb24gaXQuIFdoYXQgcmVzb3VyY2VzIGRvZXMgaXQgcmVsZWFzZT8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGFmZmVjdGVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgbGlmZSBjeWNsZSBvZiBhbiBlbmRwb2ludC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdHJhY2luZyB0aGF0IGZ1bmN0aW9uIGFuZCBzZWVpbmcgd2hhdCBpdCBhY3R1YWxseSBkb2VzLiBJIHdhbnQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGhvdyB0aGVzZSBlbmRwb2ludHMgYXJlIGNsZWFuZWQgdXAgdG8gbWFrZSBzdXJlIG5vIHJlc291cmNlcyBhcmUgbGVha2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmX21pZGkyX2ZyZWVfZXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTEzOD1zdGF0aWMgaW50IGZfbWlkaTJfYWxsb2NfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTExNjAtLyogRnJlZSBhbGxvY2F0ZWQgcmVxdWVzdHMgKi9cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTE2MTpzdGF0aWMgdm9pZCBmX21pZGkyX2ZyZWVfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTE2Mi17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0xMTc0PXN0YXRpYyBpbnQgZl9taWRpMl9pbml0X2VwKHN0cnVjdCBmX21pZGkyICptaWRpMiwgc3RydWN0IGZfbWlkaTJfZXAgKmVwLFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTIwMi0vKiBGcmVlIEVQICovXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyMDM6c3RhdGljIHZvaWQgZl9taWRpMl9mcmVlX2VwKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqdXNiX2VwKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjA0LXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyMDYtXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyMDc6XHRmX21pZGkyX2ZyZWVfZXBfcmVxcyh1c2JfZXApO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjA4LVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTIzOT1zdGF0aWMgdm9pZCBmX21pZGkyX3N0b3BfZXBzKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqZXBfaW4sXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjQzLVx0Zl9taWRpMl9kcm9wX3JlcXMoZXBfb3V0KTtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTI0NDpcdGZfbWlkaTJfZnJlZV9lcF9yZXFzKGVwX2luKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTI0NTpcdGZfbWlkaTJfZnJlZV9lcF9yZXFzKGVwX291dCk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyNDYtfVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MjA1Nz1zdGF0aWMgdm9pZCBmX21pZGkyX3VuYmluZChzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0yMDYzLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoyMDY0Olx0Zl9taWRpMl9mcmVlX2VwKFx1MDAyNm1pZGkyLVx1MDAzZW1pZGkxX2VwX2luKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MjA2NTpcdGZfbWlkaTJfZnJlZV9lcChcdTAwMjZtaWRpMi1cdTAwM2VtaWRpMV9lcF9vdXQpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0yMDY2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWlkaTItXHUwMDNlbnVtX2VwczsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MjA2NzpcdFx0Zl9taWRpMl9mcmVlX2VwKFx1MDAyNm1pZGkyLVx1MDAzZW1pZGkyX2Vwc1tpXS5lcF9pbik7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjIwNjg6XHRcdGZfbWlkaTJfZnJlZV9lcChcdTAwMjZtaWRpMi1cdTAwM2VtaWRpMl9lcHNbaV0uZXBfb3V0KTtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMjA2OS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY5MAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgTUlESSBFbmRwb2ludCBDbGVhbnVwKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlc2UgTUlESSBlbmRwb2ludHMgYXJlIGJlaW5nIGNsZWFuZWQgdXAsIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLiBgZl9taWRpMl91bmJpbmRgIGRpcmVjdGx5IGNhbGxzIGBmX21pZGkyX2ZyZWVfZXBgLCB3aGljaCBtYWtlcyBzZW5zZSDigJMgdW5iaW5kaW5nIHRoZSBlbmRwb2ludCBpbXBsaWVzIGZyZWVpbmcgaXRzIHJlc291cmNlcy4gTm93LCBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHRoZSBicm9hZGVyIHN0b3BwaW5nIHByb2Nlc3MsIGFuZCBpdCBsb29rcyBsaWtlIGBmX21pZGkyX3N0b3BfZXBzYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRvIGV4YW1pbmUuIEZyb20gYSBxdWljayBnbGFuY2UsIGl0IGNhbGxzIGBmX21pZGkyX2ZyZWVfZXBfcmVxc2AuIFRoaXMgc3VnZ2VzdHMgdGhhdCBgZl9taWRpMl9zdG9wX2Vwc2AgaXMgcmVzcG9uc2libGUgZm9yIHN0b3BwaW5nIGFuZCBjbGVhbmluZyB1cCBhbGwgdGhlIHJlcXVlc3RzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZW5kcG9pbnRzLCB3aGljaCBpbiB0dXJuIGxlYWRzIHRvIGZyZWVpbmcgdGhlIGVuZHBvaW50cyB0aGVtc2VsdmVzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIGBmX21pZGkyX2ZyZWVfZXBfcmVxc2AgdG8gdW5kZXJzdGFuZCB0aGUgZ3JhbnVsYXIgYXNwZWN0cyBvZiB0aGlzIGNsZWFudXAgcHJvY2VkdXJlLCBzdWNoIGFzIHdoaWNoIHJlc291cmNlcyBhcmUgYmVpbmcgZnJlZWQgYW5kIHRoZSBvcmRlcmluZyBvZiB0aGUgb3BlcmF0aW9ucy4gSSBhc3N1bWUgdGhlIGByZXFzYCBhcmUgcmVxdWVzdCBvYmplY3RzIHJlbGF0ZWQgdG8gdGhlIGVuZHBvaW50cy4gVGhpcyB3aWxsIG5lZWQgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmX21pZGkyX3N0b3BfZXBzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTEyMTY9c3RhdGljIHZvaWQgZl9taWRpMl9xdWV1ZV9vdXRfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyMzgtLyogc3RvcCBib3RoIElOIGFuZCBPVVQgRVBzICovXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyMzk6c3RhdGljIHZvaWQgZl9taWRpMl9zdG9wX2VwcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKmVwX2luLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjQwLVx0XHRcdCAgICAgc3RydWN0IGZfbWlkaTJfdXNiX2VwICplcF9vdXQpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0xMjc0PXN0YXRpYyBpbnQgZl9taWRpMl9zZXRfYWx0KHN0cnVjdCB1c2JfZnVuY3Rpb24gKmZuLCB1bnNpZ25lZCBpbnQgaW50Zixcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyOTQtXHRpZiAob3BfbW9kZSAhPSBNSURJX09QX01PREVfTUlESTEpXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyOTU6XHRcdGZfbWlkaTJfc3RvcF9lcHMoXHUwMDI2bWlkaTItXHUwMDNlbWlkaTFfZXBfaW4sIFx1MDAyNm1pZGkyLVx1MDAzZW1pZGkxX2VwX291dCk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyOTYtXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjk5LVx0XHRcdGVwID0gXHUwMDI2bWlkaTItXHUwMDNlbWlkaTJfZXBzW2ldO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxMzAwOlx0XHRcdGZfbWlkaTJfc3RvcF9lcHMoXHUwMDI2ZXAtXHUwMDNlZXBfaW4sIFx1MDAyNmVwLVx1MDAzZWVwX291dCk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEzMDEtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ2OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVTQiBNSURJIEdhZGdldCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBmX21pZGkyX3NldF9hbHRgIGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlaW5nIGNhbGxlZCwgYW5kIEkgc2VlIGl0JiMzOTtzIGNhbGxpbmcgYm90aCBgZl9taWRpMl9zdG9wX2Vwc2AgYW5kIGBmX21pZGkyX3N0YXJ0X2Vwc2AuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IGl0IHNlZW1zIHRvIGJlIG1hbmFnaW5nIHRoZSBlbmRwb2ludHMuIFJpZ2h0LCBhbmQgdGhpcyBgZl9taWRpMl9zZXRfYWx0YCBpcyB0aGUgYHNldF9hbHRgIGNhbGxiYWNrIHdpdGhpbiB0aGUgYHVzYl9mdW5jdGlvbmAgc3RydWN0dXJlLiBUaGF0IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIFVTQiBnYWRnZXQgY29uZmlndXJhdGlvbiBpdHNlbGYuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIFRoZSBjb2RlIGlzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmNgLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggYGZfbWlkaTIuY2AgdG8gc2VlIGhvdyB0aGlzIGVuZHBvaW50IHN3aXRjaGluZyBpcyBiZWluZyB0cmlnZ2VyZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBgc2V0X2FsdGAgY2FsbGJhY2sgd2l0aGluIHRoZSBVU0IgY29uZmlndXJhdGlvbiBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmX21pZGkyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZT01MD1vYmotJChDT05GSUdfVVNCX0ZfTUlESSlcdCYjNDM7PSB1c2JfZl9taWRpLm9cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZTo1MTp1c2JfZl9taWRpMi15XHRcdFx0Oj0gZl9taWRpMi5vXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGU6NTI6b2JqLSQoQ09ORklHX1VTQl9GX01JREkyKVx0JiM0Mzs9IHVzYl9mX21pZGkyLm9cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZS01My11c2JfZl9oaWQteVx0XHRcdDo9IGZfaGlkLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk2MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgaXM6CgoqKkV4YW1pbmluZyBNSURJMiBVU0IgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgc3lzdGVtIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIGBDT05GSUdfVVNCX0ZfTUlESTJgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIEtjb25maWcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb25maWcgb3B0aW9uICphY3R1YWxseSogbWVhbnMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBzeXN0ZW0uIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBvdmVyIHRvIEtjb25maWcgdG8gc2VlIHdoYXQmIzM5O3MgZGVmaW5lZCBmb3IgYENPTkZJR19VU0JfRl9NSURJMmAuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSByZXN0IG9mIHRoZSBVU0Igc3RhY2sgYW5kLCBieSBleHRlbnNpb24sIGF1ZGlvIHByb2Nlc3Npbmc/IEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlIHRvIHVuZGVyc3RhbmQgdGhpcyBzaW5nbGUgc2V0dGluZy4gVGhpcyBpcyBnb2luZyB0byBiZSBpbnRlcmVzdGluZy4gTGV0JiMzOTtzIHNlZSB3aGF0IEtjb25maWcgaGFzIHRvIHNheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTQl9GX01JREkyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz0yMDk9Y29uZmlnIFVTQl9GX01JRElcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0yMTEtXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzoyMTI6Y29uZmlnIFVTQl9GX01JREkyXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0yMTMtXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjY5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYSBUcmlzdGF0ZSYjMzk7cyBBY3RpdmF0aW9uKioKCkFscmlnaHQsIHRoaXMgbG9va3MgbGlrZSBhIGNsZXZlcmx5IGNvbmNlYWxlZCB0cmlzdGF0ZSBjaXJjdWl0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIGRyaXZpbmcgdGhlIHNlbGVjdCBsaW5lcz8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBsb2dpYyB0aGF0JiMzOTtzIGRpY3RhdGluZyB3aGVuIHRoaXMgdGhpbmcgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhbmQgaW4gd2hpY2ggc3RhdGUuIElzIGl0IGEgc2ltcGxlIGNvbWJpbmF0aW9uIG9mIGlucHV0cywgb3IgaXMgdGhlcmUgYSBtb3JlIGNvbXBsZXggc3RhdGUgbWFjaGluZSBpbnZvbHZlZD8gSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBwb3RlbnRpYWwgc2NlbmFyaW9zOiBsYXRjaGluZyBjb25kaXRpb25zLCBhc3luY2hyb25vdXMgc2lnbmFscyB0aGF0IGNvdWxkIGJlIGNyZWF0aW5nIGdsaXRjaGVzLCBvciBtYXliZSBldmVuIHNvbWUgc3VidGxlIHRpbWluZyBpc3N1ZXMgdGhhdCBhcmUgY2F1c2luZyB1bmV4cGVjdGVkIGJlaGF2aW9yLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoaXMgdHJpc3RhdGUgaXMgYmVpbmcgdXNlZCB0byBzaGFyZSBhIGJ1cyBvciBtdWx0aXBsZXggc2lnbmFscyBhbmQgd2hpY2ggc2lnbmFscyBhcmUgYmVpbmcgbXVsdGlwbGV4ZWQgYW5kIHdoYXQgdGhlIHRpbWluZyBiZXR3ZWVuIHRoZXNlIGlzLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBzaWduYWxzIGJhY2sgdG8gdGhlaXIgc291cmNlIGFuZCBkZXRlcm1pbmUgdGhlIHByZWNpc2UgY29uZGl0aW9ucyB0aGF0IGFjdGl2YXRlIGVhY2ggc3RhdGUuIFRpbWUgdG8gZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgVVNCX0ZfTUlESTImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTQ0NT1jb25maWcgVVNCX0NPTkZJR0ZTX0ZfTUlESTJcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy00NDktXHRzZWxlY3QgVVNCX0xJQkNPTVBPU0lURVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6NDUwOlx0c2VsZWN0IFVTQl9GX01JREkyXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy00NTEtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2MTYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIE1JREkyIENvbmZpZ0ZTIERlcGVuZGVuY3kgTGFuZHNjYXBlKioKCkFscmlnaHQsIHNvIGBVU0JfQ09ORklHRlNfRl9NSURJMmAgaGFzIGJlZW4gc2VsZWN0ZWQuIFRoYXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBtZW50YWwgY2hlY2s6IHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgYW5kIGRlcGVuZGVuY2llcz8gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYFVTQl9GX01JREkyYCBpcyBhbHNvIHB1bGxlZCBpbi4gVGhpcyBpcyBhIHN0YW5kYXJkIHByb2NlZHVyZTsgSSYjMzk7bSBub3QgZ29pbmcgdG8ganVzdCBhc3N1bWUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gaXMgcGVyZmVjdGx5IGF1dG9tYXRlZCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgYXMgc3BlY2lmaWMgYW5kIG51YW5jZWQgYXMgTUlESSAyLiBJIG5lZWQgdG8gZXhwbGljaXRseSBjb25maXJtIHRoZSBkaXJlY3QgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXAgaGVyZS4gSXQmIzM5O3MgdG9vIGVhc3kgdG8gbWlzcyBzb21ldGhpbmcgaW4gYSBjb21wbGV4IGNvbmZpZyBzcGFjZS4gTXkgbmV4dCBhY3Rpb24gaXMgdG8gdmVyaWZ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX0NPTkZJR0ZTX0ZfTUlESTImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTQzMT1jb25maWcgVVNCX0NPTkZJR0ZTX0ZfTUlESVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTQ0NC1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjQ0NTpjb25maWcgVVNCX0NPTkZJR0ZTX0ZfTUlESTJcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTQ0Ni1cdGJvb2wgXCYjMzQ7TUlESSAyLjAgZnVuY3Rpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk1MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gVVNCIEdhZGdldCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFVTQiBnYWRnZXRzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGBkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZ2AgZmlsZSwgYXJvdW5kIGxpbmUgNDQ1LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSB2YXJpb3VzIGdhZGdldCBkcml2ZXJzIGFuZCB0aGVpciBjb25maWd1cmF0aW9uIHNldHRpbmdzLiBUaGVyZSYjMzk7cyBhIHBhcnRpY3VsYXIgdXNlIGNhc2UgSSYjMzk7bSB0YWNrbGluZywgYW5kIEkgc3VzcGVjdCB0aGUgYW5zd2VyIGxpZXMgd2l0aGluIHRob3NlIEtjb25maWcgb3B0aW9ucywgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkuIFRoZSBnb2FsIGlzIHRvIHNlZSB3aGljaCBwYXJhbWV0ZXJzIGFyZSBhdmFpbGFibGUsIHdoaWNoIGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiBkaWZmZXJlbnQgY2hvaWNlcyBtaWdodCBiZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgZ2FkZ2V0IHN0YWNrIGFzIGEgd2hvbGUuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzdGFydCBkaWdnaW5nIGludG8gdGhlIGRldGFpbHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ0MDpcdFx0ICBpbnB1dCBhbmQgb25lIE1JREkgb3V0cHV0LiBUaGVzZSBNSURJIGphY2tzIGFwcGVhciBhc1xuIDQ0MTpcdFx0ICBhIHNvdW5kIFwmIzM0O2NhcmRcJiMzNDsgaW4gdGhlIEFMU0Egc291bmQgc3lzdGVtLiBPdGhlciBNSURJXG4gNDQyOlx0XHQgIGNvbm5lY3Rpb25zIGNhbiB0aGVuIGJlIG1hZGUgb24gdGhlIGdhZGdldCBzeXN0ZW0sIHVzaW5nXG4gNDQzOlx0XHQgIEFMU0EmIzM5O3MgYWNvbm5lY3QgdXRpbGl0eSBldGMuXG4gNDQ0Olx0XG4gNDQ1Olx0Y29uZmlnIFVTQl9DT05GSUdGU19GX01JREkyXG4gNDQ2Olx0XHRib29sIFwmIzM0O01JREkgMi4wIGZ1bmN0aW9uXCYjMzQ7XG4gNDQ3Olx0XHRkZXBlbmRzIG9uIFVTQl9DT05GSUdGU1xuIDQ0ODpcdFx0ZGVwZW5kcyBvbiBTTkRcbiA0NDk6XHRcdHNlbGVjdCBVU0JfTElCQ09NUE9TSVRFXG4gNDUwOlx0XHRzZWxlY3QgVVNCX0ZfTUlESTJcbiA0NTE6XHRcdGhlbHBcbiA0NTI6XHRcdCAgVGhlIE1JREkgMi4wIGZ1bmN0aW9uIGRyaXZlciBwcm92aWRlcyB0aGUgZ2VuZXJpYyBlbXVsYXRlZFxuIDQ1MzpcdFx0ICBVU0IgTUlESSAyLjAgaW50ZXJmYWNlLCBsb29wZWQgYmFjayB0byBBTFNBIFVNUCByYXdtaWRpXG4gNDU0Olx0XHQgIGRldmljZSBvbiB0aGUgZ2FkZ2V0IGhvc3QuIEl0IHN1cHBvcnRzIFVNUCAxLjEgc3BlYyBhbmRcbiA0NTU6XHRcdCAgcmVzcG9uZHMgVU1QIFN0cmVhbSBtZXNzYWdlcyBmb3IgVU1QIEVuZHBvaW50IGFuZCBGdW5jdGlvblxuIDQ1NjpcdFx0ICBCbG9jayBpbmZvcm1hdGlvbiAvIGNvbmZpZ3VyYXRpb24uXG4gNDU3Olx0XG4gNDU4Olx0Y29uZmlnIFVTQl9DT05GSUdGU19GX0hJRFxuIDQ1OTpcdFx0Ym9vbCBcJiMzNDtISUQgZnVuY3Rpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUwMwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDI1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1JREkyIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgTUlESTIgY29uZmlndXJhdGlvbiBzZXR1cC4gVGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIHRoYXQgaXQmIzM5O3MgZnVuZGFtZW50YWxseSByZWxpYW50IG9uIGBVU0JfQ09ORklHRlNgIGFuZCBgU05EYC4gTWFrZXMgc2Vuc2UsIHdlJiMzOTtyZSBidWlsZGluZyBhIFVTQiBnYWRnZXQgY29uZmlndXJhdGlvbiB0aGF0IGludm9sdmVzIHNvdW5kLiBBbmQsIG9mIGNvdXJzZSwgdGhlIG5ldyBgVVNCX0NPTkZJR0ZTX0ZfTUlESTJgIGlzIGF0IHRoZSBoZWFydCBvZiB0aGlzLiBCZWZvcmUgSSBnbyB0b28gZmFyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciB1cHN0cmVhbSBkZXBlbmRlbmNpZXMuIFJpZ2h0LCBjaGVja2luZyBgVVNCX0NPTkZJR0ZTYCwgd2hpY2ggZGVwZW5kcyBvbiBgVVNCX0dBREdFVGAuIEdvdCBpdC4gQW5kIGBTTkRgIGlzIGp1c3QgdGhlIEFMU0Egc291bmQgc3Vic3lzdGVtLCBzbyB0aGF0JiMzOTtzIGNsZWFyLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdGhpcyBwYXRjaCBtb2RpZmllcy4gQWxyaWdodCwgaXQmIzM5O3MgbWVzc2luZyB3aXRoIGBmX21pZGkyX2FsbG9jX2VwX3JlcXNgIGFuZCBgZl9taWRpMl9mcmVlX2VwX3JlcXNgLiBUaGVzZSBhcmUgZGVmaW5pdGVseSBpbXBvcnRhbnQuIFRoZXkmIzM5O3JlIGludm9rZWQgd2l0aGluIGBmX21pZGkyX3N0YXJ0X2Vwc2AsIGBmX21pZGkyX3N0b3BfZXBzYCwgYW5kIGBmX21pZGkyX2ZyZWVfZXBgLiBPa2F5LCBzbyBgZl9taWRpMl9zdGFydF9lcHNgIGFuZCBgZl9taWRpMl9zdG9wX2Vwc2AgYXJlIGNhbGxlZCBmcm9tIGBmX21pZGkyX3NldF9hbHRgLiBFeGNlbGxlbnQsIGFuZCBgZl9taWRpMl9zZXRfYWx0YCBpcyBhIGBzZXRfYWx0YCBjYWxsYmFjayBvZiBgdXNiX2Z1bmN0aW9uYC4gSSB0aGluayB3ZSYjMzk7dmUgaGl0IHBheS1kaXJ0LiBgZl9taWRpMl9zZXRfYWx0YCBhcHBlYXJzIHRvIGJlIGEgZ29vZCBmb2NhbCBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0LiBCZWZvcmUgSSBzdGFydCBkaXNzZWN0aW5nIHRoZSBjb2RlLCBJIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZ1bmN0aW9uIGlzIHB1YmxpYy4gTGV0JiMzOTtzIHNlZSBpZiBgZl9taWRpMl9zZXRfYWx0YCBpcyBzdGF0aWMgb3Igbm90LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmX21pZGkyX3NldF9hbHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTI0OT1zdGF0aWMgaW50IGZfbWlkaTJfc3RhcnRfZXBzKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqZXBfaW4sXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjczLS8qIGdhZGdldCBmdW5jdGlvbiBzZXRfYWx0IGNhbGxiYWNrICovXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyNzQ6c3RhdGljIGludCBmX21pZGkyX3NldF9hbHQoc3RydWN0IHVzYl9mdW5jdGlvbiAqZm4sIHVuc2lnbmVkIGludCBpbnRmLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjc1LVx0XHRcdCAgIHVuc2lnbmVkIGludCBhbHQpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0yODA2PXN0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmX21pZGkyX2FsbG9jKHN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgKmZpKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMjgzNC1cdG1pZGkyLVx1MDAzZWZ1bmMuZ2V0X2FsdCA9IGZfbWlkaTJfZ2V0X2FsdDtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MjgzNTpcdG1pZGkyLVx1MDAzZWZ1bmMuc2V0X2FsdCA9IGZfbWlkaTJfc2V0X2FsdDtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMjgzNi1cdG1pZGkyLVx1MDAzZWZ1bmMuc2V0dXAgPSBmX21pZGkyX3NldHVwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTA3CgkJCQkJCQlvdXRwdXQ6IDcyCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBNSURJMiBDb2RlKioKCkFscmlnaHQsIHNvIGBmX21pZGkyX3NldF9hbHRgIGlzIGRlZmluZWQgYXMgYHN0YXRpY2AsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGludGVybmFsIHRvIGl0cyBjb21waWxhdGlvbiB1bml0LiBIb3dldmVyLCBpdCYjMzk7cyBiZWluZyAqYXNzaWduZWQqIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBzb21ld2hlcmUuIFRoYXQgcmFpc2VzIGEgcXVlc3Rpb24gaW4gbXkgbWluZDogQXJlIHdlIGRlYWxpbmcgd2l0aCBhbnkgKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucyB0aGF0IGdldCBpbnZvbHZlZCBpbiB0aGF0IGFzc2lnbm1lbnQsIG9yIGlzIGV2ZXJ5dGhpbmcgZW5jYXBzdWxhdGVkIHdpdGhpbiB0aGF0IHN0YXRpYyBzY29wZT8gSXQmIzM5O3MgZ29vZCBwcmFjdGljZSB0byB0cnkgYW5kIGxpbWl0IHRoZSB2aXNpYmlsaXR5IG9mIGZ1bmN0aW9ucyB3aGVyZSBwb3NzaWJsZSBmb3IgbW9kdWxhcml0eS4KClRoZW4gdGhlcmUgaXMgYGZfbWlkaTJfYWxsb2NgLCBpdCYjMzk7cyBhbHNvIGRlY2xhcmVkIGBzdGF0aWNgLiBTbywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYGZfbWlkaTIuY2AgZmlsZSBpdHNlbGYuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgaWRlbnRpZnkgYW55IGV4dGVybmFsbHktdmlzaWJsZSBjb21wb25lbnRzLCBhbmQgdGhlIHJlbGF0aW9uc2hpcHMgb2YgdGhlc2Ugc3RhdGljIGludGVybmFsIGZ1bmN0aW9ucy4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgaG93IHRoaXMgTUlESTIgbW9kdWxlIGlzIGludGVuZGVkIHRvIGZ1bmN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBleHRlcm5hbCBBUElzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTE4Njg9c3RhdGljIHZvaWQgZl9taWRpMl9mcmVlX3VzYl9jb25maWdzKHN0cnVjdCBmX21pZGkyX3VzYl9jb25maWcgKmNvbmZpZylcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTE4NzQtLyogYXMgd2UgdXNlIHRoZSBzdGF0aWMgZGVzY3JpcHRvcnMgZm9yIHNpbXBsaWNpdHksIHNlcmlhbGl6ZSBiaW5kIGNhbGwgKi9cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTg3NTpzdGF0aWMgREVGSU5FX01VVEVYKGZfbWlkaTJfZGVzY19tdXRleCk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTE4NzYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDE4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgeW91ciBzdW1tYXJ5OgoKKipRdWljayBSZWdleCBSZXRoaW5rKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFRoYXQgaW5pdGlhbCByZWd1bGFyIGV4cHJlc3Npb24gSSBjcmFmdGVkLi4uIGl0JiMzOTtzIHByb2JhYmx5IHRvbyBmcmFnaWxlLCB0b28gc3BlY2lmaWMuIEkgbmVlZCB0byBiZSBicm9hZGVyIGluIG15IGFwcHJvYWNoLiBJbnN0ZWFkIG9mIHRyeWluZyB0byBjb25zdHJ1Y3QgYSBjb21wbGV4IHBhdHRlcm4sIHdoeSBkb24mIzM5O3QgSSBqdXN0IGtlZXAgaXQgc2ltcGxlPyBJIGNhbiBqdXN0IGBncmVwYCBmb3IgdGhvc2UgY29yZSBrZXJuZWwgc3ltYm9scyB0aGF0IGFyZSBhbG1vc3QgYWx3YXlzIHBhcnQgb2YgYW4gaW50ZXJmYWNlIC0gdGhlIGVhc3kgd2lucy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYEVYUE9SVF9TWU1CT0xgLCBgbW9kdWxlX2luaXRgLCBgREVDTEFSRV9VU0JfRlVOQ1RJT05gLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCBhbmQgaWRlbnRpZnkgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZXMuIEkgY2FuIHJlZmluZSBpdCBsYXRlciBpZiB0aGlzIGZpcnN0IHBhc3MgaXNuJiMzOTt0IGV4aGF1c3RpdmUgZW5vdWdoLiBHb29kLCBmb2N1cyBvbiB0aGUgZnVuZGFtZW50YWxzLCB0aGVuIGl0ZXJhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RFQ0xBUkVfVVNCX0ZVTkNUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTI4MDY9c3RhdGljIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmZfbWlkaTJfYWxsb2Moc3RydWN0IHVzYl9mdW5jdGlvbl9pbnN0YW5jZSAqZmkpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0yODg3LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoyODg4OkRFQ0xBUkVfVVNCX0ZVTkNUSU9OX0lOSVQobWlkaTIsIGZfbWlkaTJfYWxsb2NfaW5zdCwgZl9taWRpMl9hbGxvYyk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTI4ODktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzk2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBNSURJMiBGdW5jdGlvbiBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gYERFQ0xBUkVfVVNCX0ZVTkNUSU9OX0lOSVRgIGlzIHJlc3BvbnNpYmxlIGZvciByZWdpc3RlcmluZyB0aGlzIHBhcnRpY3VsYXIgVVNCIGZ1bmN0aW9uLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhhdCBtZWFucyB0aGUgcmVhbCBlbnRyeSBwb2ludHMgZm9yIHRoaXMgZnVuY3Rpb24gYXJlIGdvaW5nIHRvIGJlIHRob3NlIGFsbG9jYXRpb24gZnVuY3Rpb25zOiBgZl9taWRpMl9hbGxvY19pbnN0YCwgYW5kIGBmX21pZGkyX2FsbG9jYCwgYWxvbmcgd2l0aCB0aGUgY2FsbGJhY2tzIGRlZmluZWQgd2l0aGluIHRoZW0uIFdlJiMzOTtyZSBsb29raW5nIGF0IHRoZSBhbGxvY2F0aW9uIHNpZGUgb2YgdGhpbmdzLCBzbyB0aG9zZSBhcmUga2V5LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgZl9taWRpMl9hbGxvY19pbnN0YCBhbmQgYGZfbWlkaTJfYWxsb2NgIGFuZCBzZWUgd2hhdCB0aGV5JiMzOTtyZSBhY3R1YWxseSBkb2luZy4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgc3RhcnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmX21pZGkyX2FsbG9jX2luc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MjYzNT1zdGF0aWMgdm9pZCBmX21pZGkyX2ZyZWVfaW5zdChzdHJ1Y3QgdXNiX2Z1bmN0aW9uX2luc3RhbmNlICpmKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMjY0NS0vKiBnYWRnZXQgYWxsb2NfaW5zdCAqL1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoyNjQ2OnN0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uX2luc3RhbmNlICpmX21pZGkyX2FsbG9jX2luc3Qodm9pZClcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMjY0Ny17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0yODA2PXN0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmX21pZGkyX2FsbG9jKHN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgKmZpKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMjg4Ny1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6Mjg4ODpERUNMQVJFX1VTQl9GVU5DVElPTl9JTklUKG1pZGkyLCBmX21pZGkyX2FsbG9jX2luc3QsIGZfbWlkaTJfYWxsb2MpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0yODg5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk1MAoJCQkJCQkJb3V0cHV0OiA3MgoJCQkJCQkJdGhvdWdodHM6IDIxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIE1JREkyOiBJbml0aWFsIEFzc2Vzc21lbnQgYW5kIFJlZmluZW1lbnQqKgoKT2theSwgc28gdGhlIGZ1bmN0aW9ucyBoZXJlIGFyZSBhbGwgc3RhdGljLCB3aGljaCBhdCBmaXJzdCBnbGFuY2Ugc3VnZ2VzdHMgbXkgdHlwaWNhbCB0b29scywgYGZfbWlkaTJfc2V0X2FsdGAsIGBmX21pZGkyX2FsbG9jYCwgYGZfbWlkaTJfYWxsb2NfaW5zdGAsIGBmX21pZGkyX3VuYmluZGAsIGFuZCBgZl9taWRpMl9iaW5kYCwgbWlnaHQgYmUgZGlyZWN0bHkgYXBwbGljYWJsZS4gQnV0IHdhaXQuLi4gU3l6a2FsbGVyLCB0aGUgd29ya2hvcnNlLCAqY2FuKiBhY3R1YWxseSBmdXp6IHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSYjMzk7cmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgYW5kIGludm9rZWQgZnJvbSBhIG5vbi1zdGF0aWMgY29udGV4dC4gU28sIEkgbmVlZCB0byBrZWVwIHRob3NlIGZ1bmN0aW9ucyBvbiBteSBsaXN0OiBgZl9taWRpMl9zZXRfYWx0YCwgYGZfbWlkaTJfdW5iaW5kYCwgYGZfbWlkaTJfYmluZGAsIGBmX21pZGkyX2FsbG9jYCwgYW5kIGBmX21pZGkyX2FsbG9jX2luc3RgLgoKSG9sZCBvbi4uLiBJIG5lZWQgdG8gcmV2aXNpdCB0aGUgZ3VpZGVsaW5lcy4gQWgsIHRoZSBkb2N1bWVudGF0aW9uIHNwZWNpZmllcyBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cyBvdmVyIGlubGluZWQgc3RhdGljIGhlbHBlcnMuIFRoYXQgbWFrZXMgc2Vuc2UsIGJlY2F1c2UgaW5saW5lZCBmdW5jdGlvbnMgbGFjayBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBGb3J0dW5hdGVseSwgaXQgbG9va3MgbGlrZSBgZl9taWRpMl9zZXRfYWx0YCAqaXNuJiMzOTt0KiBpbmxpbmVkIGJlY2F1c2UgaXQmIzM5O3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyBhdmFpbGFibGUgaW4gdGhlIGBmX21pZGkyLmNgIGZpbGUuIFRoaXMgd291bGQgYmUgZXZlbiBiZXR0ZXIgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTg2OD1zdGF0aWMgdm9pZCBmX21pZGkyX2ZyZWVfdXNiX2NvbmZpZ3Moc3RydWN0IGZfbWlkaTJfdXNiX2NvbmZpZyAqY29uZmlnKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTg3NC0vKiBhcyB3ZSB1c2UgdGhlIHN0YXRpYyBkZXNjcmlwdG9ycyBmb3Igc2ltcGxpY2l0eSwgc2VyaWFsaXplIGJpbmQgY2FsbCAqL1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxODc1OnN0YXRpYyBERUZJTkVfTVVURVgoZl9taWRpMl9kZXNjX211dGV4KTtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTg3Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2ODcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKlJlZmluaW5nIHRoZSBNSURJLW92ZXItVVNCIEZ1bmN0aW9uIEluaXRpYWxpemF0aW9uIFN0cmF0ZWd5KioKClJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgVVNCIGZ1bmN0aW9uIGluaXRpYWxpemF0aW9uLiBUaGF0IGBERUNMQVJFX1VTQl9GVU5DVElPTl9JTklUYCBtYWNyby4uLiBJIHJlbWVtYmVyIGl0IGV4cGFuZHMgdG8gYHVzYl9mdW5jdGlvbl9yZWdpc3RlcmAgYW5kIGB1c2JfZnVuY3Rpb25fdW5yZWdpc3RlcmAuIE5vdGhpbmcgcGFydGljdWxhcmx5IGdyb3VuZGJyZWFraW5nIHRoZXJlOyB0aGV5JiMzOTtyZSBzdGFuZGFyZCBVU0IgZnVuY3Rpb24gcmVnaXN0cmF0aW9uIHJvdXRpbmVzLCBhbmQgdGhleSYjMzk7cmUsIGltcG9ydGFudGx5LCAqbm9uLXN0YXRpYyosIG1ha2luZyB0aGVtIHZpc2libGUgYWNyb3NzIGNvbXBpbGF0aW9uIHVuaXRzLiBCdXQsIG15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIHRoZXJlJiMzOTtzIHByb2JhYmx5IGEgbW9yZSBzdHJlYW1saW5lZCwgZm9jdXNlZCBhcHByb2FjaCBmb3IgKnRoaXMqIHBhcnRpY3VsYXIgTUlESSBpbXBsZW1lbnRhdGlvbi4KCkluc3RlYWQgb2YgdGhpcyBnZW5lcmljIGFwcHJvYWNoLCBpdCBzZWVtcyBtb3JlIGRpcmVjdCB0byBsZXZlcmFnZSB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgbW9yZSBzcGVjaWZpYyB0byB0aGUgTUlESTIgZnVuY3Rpb246IGBmX21pZGkyX3NldF9hbHRgLCBgZl9taWRpMl9iaW5kYCwgYW5kIGBmX21pZGkyX3VuYmluZGAuIEkmIzM5O2QgcHJlZmVyIHRvIHVzZSB0aGUgZXhpc3RpbmcgaW50ZXJmYWNlcy4gVGhlc2Ugc2hvdWxkIGhhbmRsZSB0aGUgc3BlY2lmaWMgc2V0dXAsIGNvbm5lY3Rpb24sIGFuZCBkaXNjb25uZWN0aW9uIGxvZ2ljIGZvciB0aGUgTUlESSBlbmRwb2ludC4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGNoZWNrIHRoYXQgYERFQ0xBUkVfVVNCX0ZVTkNUSU9OX0lOSVRgIG1hY3JvIHRvIGJlIGNlcnRhaW4gdGhlcmUgaXNuJiMzOTt0IHNvbWUgaGlkZGVuIGNvbXBsZXhpdHkgdGhhdCBJJiMzOTttIG1pc3NpbmcuIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBmdWxseSByZXBsYWNlIGl0cyBiZWhhdmlvciwgb3RoZXJ3aXNlIGl0IHdpbGwgYWRkIHVubmVlZGVkIGNvbXBsZXhpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBERUNMQVJFX1VTQl9GVU5DVElPTl9JTklUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmg9NTk5PXZvaWQgdXNiX3JlbW92ZV9mdW5jdGlvbihzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpO1xuLS1cbmluY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oLTYwOS1cbmluY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oOjYxMDojZGVmaW5lIERFQ0xBUkVfVVNCX0ZVTkNUSU9OX0lOSVQoX25hbWUsIF9pbnN0X2FsbG9jLCBfZnVuY19hbGxvYylcdFxcXG5pbmNsdWRlL2xpbnV4L3VzYi9jb21wb3NpdGUuaC02MTEtXHRERUNMQVJFX1VTQl9GVU5DVElPTihfbmFtZSwgX2luc3RfYWxsb2MsIF9mdW5jX2FsbG9jKVx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIyNAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTUlESTIgTW9kdWxlIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIHRoaXMgY29kZSBkZWZpbmVzIGBtb2R1bGVfaW5pdGAgYW5kIGBtb2R1bGVfZXhpdGAuIFRoYXQgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBhbmQgY2xlYW51cCBwcm9jZWR1cmVzIGZvciBhIG1vZHVsZS4gSXQgc2VlbXMgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIHRoaXMgcGFydGljdWxhciBtb2R1bGUgYXJlIGBmX21pZGkyX2FsbG9jX2luc3RgLCBgZl9taWRpMl9hbGxvY2AsIGBmX21pZGkyX2JpbmRgLCBgZl9taWRpMl91bmJpbmRgLCBgZl9taWRpMl9zZXRfYWx0YCwgYGZfbWlkaTJfc2V0dXBgLCBhbmQgYGZfbWlkaTJfZGlzYWJsZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3QuIEdpdmVuIHRoZSBlbXBoYXNpcyBvbiBiaW5kaW5nIGFuZCB1bmJpbmRpbmcsIGBmX21pZGkyX2JpbmRgIGlzIGxpa2VseSBhIGNydWNpYWwgZnVuY3Rpb24gZm9yIGFzc29jaWF0aW5nIHRoZSBtb2R1bGUgd2l0aCByZWxldmFudCBoYXJkd2FyZSBvciByZXNvdXJjZXMuIExldCYjMzk7cyBzdGFydCBieSBjb25maXJtaW5nIHRoYXQgYGZfbWlkaTJfYmluZGAgaXMgYWN0dWFsbHkgZGVmaW5lZCwgYW5kIHRoZW4gZGl2ZSBpbnRvIHdoYXQgaXQgZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zl9taWRpMl9iaW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTE5MTE9c3RhdGljIGludCBmX21pZGkyX2luaXRfbWlkaTJfZXBfb3V0KHN0cnVjdCBmX21pZGkyICptaWRpMiwgaW50IGluZGV4KVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTkyNy0vKiBnYWRnZXQgZnVuY3Rpb24gYmluZCBjYWxsYmFjayAqL1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxOTI4OnN0YXRpYyBpbnQgZl9taWRpMl9iaW5kKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgc3RydWN0IHVzYl9mdW5jdGlvbiAqZilcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTkyOS17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0yODA2PXN0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmX21pZGkyX2FsbG9jKHN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgKmZpKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMjgzMS1cdG1pZGkyLVx1MDAzZWZ1bmMubmFtZSA9IFwmIzM0O21pZGkyX2Z1bmNcJiMzNDs7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjI4MzI6XHRtaWRpMi1cdTAwM2VmdW5jLmJpbmQgPSBmX21pZGkyX2JpbmQ7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTI4MzMtXHRtaWRpMi1cdTAwM2VmdW5jLnVuYmluZCA9IGZfbWlkaTJfdW5iaW5kO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg2MQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSYjMzk7bSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipDaGVja2luZyBNSURJIEZ1bmN0aW9uYWxpdHkqKgoKQWxyaWdodCwgY29uZmlybWVkLiBgZl9taWRpMl9iaW5kYCBkZWZpbml0ZWx5IGV4aXN0cywgdGhhdCBwYXJ0IG9mIHRoZSBjb2RlIGlzIGdvb2QuIE5vdywgbGV0JiMzOTtzIHBpdm90IGFuZCB0YWtlIGEgbG9vayBhdCBgZl9taWRpMl9kaXNhYmxlYC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBiaW5kaW5nIGZ1bmN0aW9uLCBhcyB0aGV5IGxpa2VseSBoYXZlIHNpZ25pZmljYW50IGludGVyZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gZW5zdXJlIE1JREkgZnVuY3Rpb25hbGl0eSBpcyB3b3JraW5nIGFzIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmX21pZGkyX2Rpc2FibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTQwNT1zdGF0aWMgaW50IGZfbWlkaTJfc2V0dXAoc3RydWN0IHVzYl9mdW5jdGlvbiAqZm4sXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xNDMxLS8qIGdhZGdldCBmdW5jdGlvbiBkaXNhYmxlIGNhbGxiYWNrICovXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjE0MzI6c3RhdGljIHZvaWQgZl9taWRpMl9kaXNhYmxlKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmZuKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xNDMzLXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTI4MDY9c3RhdGljIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmZfbWlkaTJfYWxsb2Moc3RydWN0IHVzYl9mdW5jdGlvbl9pbnN0YW5jZSAqZmkpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0yODM2LVx0bWlkaTItXHUwMDNlZnVuYy5zZXR1cCA9IGZfbWlkaTJfc2V0dXA7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjI4Mzc6XHRtaWRpMi1cdTAwM2VmdW5jLmRpc2FibGUgPSBmX21pZGkyX2Rpc2FibGU7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTI4MzgtXHRtaWRpMi1cdTAwM2VmdW5jLmZyZWVfZnVuYyA9IGZfbWlkaTJfZnJlZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNDAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgZl9taWRpMl9kaXNhYmxlYCBpcyBkZWZpbml0ZWx5IGEgdGhpbmcuIFRoYXQgbWVhbnMgbXkgZm9jdXMgc3ltYm9scyBuZWVkIHRvIGVuY29tcGFzcyB0aGUgZnVsbCBzZXQ6IGBmX21pZGkyX2JpbmRgLCBgZl9taWRpMl91bmJpbmRgLCBgZl9taWRpMl9zZXRfYWx0YCwgYW5kIGBmX21pZGkyX2Rpc2FibGVgLiBFeGNlbGxlbnQuCgpOb3csIGxldCYjMzk7cyBicmVhayBkb3duIHRoZSBjb25maWd1cmF0aW9uIGVsZW1lbnRzLiBJIGhhdmUgdGhlc2Uga2V5IGNvbmZpZ3MgdG8gY29uc2lkZXI6IGBVU0JfR0FER0VUYCwgYFVTQl9DT05GSUdGU2AsIGBTTkRgLCBhbmQgYFVTQl9DT05GSUdGU19GX01JREkyYC4gQWgsIHJpZ2h0LCBgVVNCX0ZfTUlESTJgIGlzIHNlbGVjdGVkIGJ5IGBVU0JfQ09ORklHRlNfRl9NSURJMmAuCgpJIHNob3VsZCBwcm9iYWJseSBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWdzIGZsb2F0aW5nIGFyb3VuZC4gTm9wZSwgYFVTQl9HQURHRVRgIGlzIHRoZSBtYWluIG9uZSBhbmQgZXZlcnl0aGluZyBlbHNlIHNlZW1zIHRvIGJ1aWxkIG9uIGl0LgoKQWxyaWdodCwgYFVTQl9DT05GSUdGU19GX01JREkyYCBpcyBkZXBlbmRlbnQgb24gYm90aCBgVVNCX0NPTkZJR0ZTYCBhbmQgYFNORGAuIFNvLCB0byBiZSBzYWZlIGFuZCBjb21wcmVoZW5zaXZlLCBJICpuZWVkKiB0byBpbmNsdWRlIGBVU0JfQ09ORklHRlNfRl9NSURJMmAsIGBVU0JfQ09ORklHRlNgLCBgU05EYCwgYW5kLCBvYnZpb3VzbHksIGBVU0JfR0FER0VUYC4gSSYjMzk7bGwgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgb24gdGhvc2UgYFVTQl9DT05GSUdGU19GX01JREkyYCBkZXBlbmRlbmNpZXMgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfQ09ORklHRlNfRl9NSURJMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9NDMxPWNvbmZpZyBVU0JfQ09ORklHRlNfRl9NSURJXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNDQ0LVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6NDQ1OmNvbmZpZyBVU0JfQ09ORklHRlNfRl9NSURJMlxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNDQ2LVx0Ym9vbCBcJiMzNDtNSURJIDIuMCBmdW5jdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk4OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBNSURJIDIuMCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQgc25pcHBldCBlYXJsaWVyLiBMZXQmIzM5O3MgcmVjYXA6IGBVU0JfQ09ORklHRlNfRl9NSURJMmAgZXNzZW50aWFsbHkgYWN0cyBhcyB0aGUgcHJpbWFyeSBlbmFibGVyIGZvciBgVVNCX0ZfTUlESTJgLiBJdCYjMzk7cyBkZXBlbmRlbnQgb24gYFVTQl9DT05GSUdGU2Agd2hpY2ggaXRzZWxmIHJlbGllcyBvbiBgU05EYCwgYW5kIGl0IHB1bGxzIGluIGBVU0JfTElCQ09NUE9TSVRFYCBhbmQgYFVTQl9GX01JREkyYC4gU28sIGF0IGEgbWluaW11bSwgdG8gaGF2ZSBNSURJIDIuMCBmdW5jdGlvbmFsaXR5LCB3ZSBuZWVkIHRvIGNvbnNpZGVyIGBVU0JfQ09ORklHRlNfRl9NSURJMmAsIGBVU0JfQ09ORklHRlNgLCBgU05EYCwgYW5kIG9mIGNvdXJzZSwgYFVTQl9HQURHRVRgLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXM6IGNhbiBgVVNCX0ZfTUlESTJgIGJlIGVuYWJsZWQgdGhyb3VnaCAqb3RoZXIqIG1lYW5zPyBEb2VzIGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbiBzZWxlY3QgYFVTQl9GX01JREkyYCBkaXJlY3RseT8gV2UgbmVlZCB0byB2ZXJpZnkgaWYgdGhpcyBpcyB0aGUgb25seSBwYXRoLCBvciBpZiB0aGVyZSBhcmUgYWx0ZXJuYXRpdmUgcm91dGVzIHRvIGFjaGlldmluZyB0aGUgc2FtZSBvdXRjb21lLiBVbmRlcnN0YW5kaW5nIHRoaXMgZGVwZW5kZW5jeSBpcyBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBVU0JfRl9NSURJMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9NDQ1PWNvbmZpZyBVU0JfQ09ORklHRlNfRl9NSURJMlxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTQ0OS1cdHNlbGVjdCBVU0JfTElCQ09NUE9TSVRFXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo0NTA6XHRzZWxlY3QgVVNCX0ZfTUlESTJcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTQ1MS1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MDQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1JREkyIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIE1JREkyIGNvbmZpZ3VyYXRpb24sIGFuZCBpbml0aWFsbHksIEkgdGhvdWdodCB0aGF0IG9ubHkgYFVTQl9DT05GSUdGU19GX01JREkyYCB3YXMgdGhlIGtleS4gQnV0IHdhaXQsIGBVU0JfRl9NSURJMmAgaXMgYSAqdHJpc3RhdGUqIHZhcmlhYmxlLCBtZWFuaW5nIGl0IGNhbiBiZSBjb21waWxlZCBhcyBhIG1vZHVsZSwgd2hpY2ggY2hhbmdlcyB0aGluZ3MuIElmIGBVU0JfQ09ORklHRlNfRl9NSURJMmAgaXMgYSBCb29sZWFuLCBpdCBpbXBsaWVzIHRoYXQgaXQgaXMgYnVpbHQtaW4gdG8gYHVzYl9mX21pZGkyYCB3aGVuIGBVU0JfQ09ORklHRlNgIGlzIGJ1aWx0IGluIGFuZCBtb2R1bGUgd2hlbiBgVVNCX0NPTkZJR0ZTYCBpcyBhIG1vZHVsZS4gSG1tLCBidXQgYFVTQl9DT05GSUdGU2AgaXMgYWxzbyBhICp0cmlzdGF0ZSouIE9rYXksIGdvdCBpdCAtIHNvIGBVU0JfQ09ORklHRlNfRl9NSURJMmAgaXMgYSBCb29sZWFuLCB3aGlsZSBgVVNCX0ZfTUlESTJgIGlzIGEgdHJpc3RhdGUuIElmIGBVU0JfQ09ORklHRlNgIGlzIGVuYWJsZWQgYXMgJiMzOTt5JiMzOTsgKGJ1aWx0LWluKSwgdGhlbiBgVVNCX0ZfTUlESTJgIHdpbGwgYWxzbyBiZSBmb3JjZWQgdG8gJiMzOTt5JiMzOTsuIFRoZXJlZm9yZSwgYFVTQl9DT05GSUdGU19GX01JREkyYCAqaXMqIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBlbmFibGUuCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgd2UgbmVlZCBgU05EX1VNUGAuIEhhbmcgb24uLi4gYGZfbWlkaTIuY2AgKmRvZXMqIHVzZSBVTVAsIGJ1dCBkb2VzIGl0IGV4cGxpY2l0bHkgZGVwZW5kIG9uIGBTTkRfVU1QYD8gVGhhdCYjMzk7cyB0aGUgbmV4dCBxdWVzdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDk6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U05EX1VNUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9MjEyPWNvbmZpZyBVU0JfRl9NSURJMlxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjEzLVx0dHJpc3RhdGVcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjIxNDpcdHNlbGVjdCBTTkRfVU1QXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzoyMTU6XHRzZWxlY3QgU05EX1VNUF9MRUdBQ1lfUkFXTUlESVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjE2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE4MAoJCQkJCQkJb3V0cHV0OiAxNjAKCQkJCQkJCXRob3VnaHRzOiA1MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVU0IgTUlESSAyLjAgR2FkZ2V0IEZ1bmN0aW9uIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIGBVU0JfRl9NSURJMmAgaW1wbGljaXRseSBlbmFibGVzIGBTTkRfVU1QYCBhbmQgYFNORF9VTVBfTEVHQUNZX1JBV01JRElgLiBHb29kIHRvIGtub3csIHNpbXBsaWZpZXMgdGhpbmdzLiBJJiMzOTttIGZvY3VzaW5nIG9uIGtleSBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhlIG1vZGlmaWVkIGNvZGUmIzM5O3MgZW50cnkgcG9pbnRzIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGVzZSBzeW1ib2xzOiBgZl9taWRpMl9iaW5kYCwgYGZfbWlkaTJfdW5iaW5kYCwgYGZfbWlkaTJfc2V0X2FsdGAsIGBmX21pZGkyX2Rpc2FibGVgLCBgZl9taWRpMl9zZXR1cGAsIGBmX21pZGkyX2FsbG9jX2luc3RgLCBhbmQgYGZfbWlkaTJfYWxsb2NgLgoKTm93LCBsZXQmIzM5O3MgdHJhY2UgdGhlIGFsbG9jYXRpb24gcGF0aC4gSSB3YW50ZWQgdG8gdmVyaWZ5IGlmIGBmX21pZGkyX2FsbG9jX2VwX3JlcXNgIHdhcyBkaXJlY3RseSBjYWxsZWQgZnJvbSBgZl9taWRpMl9iaW5kYC4gSXQgdHVybnMgb3V0IHRoYXQmIzM5O3Mgbm90IHRoZSBjYXNlLiBgZl9taWRpMl9iaW5kYCBjYWxscyBgZl9taWRpMl9pbml0X2VwYCwgYnV0IHRoYXQgZG9lc24mIzM5O3QgaGFuZGxlIHRoZSBhbGxvY2F0aW9uLiBUaGUgZW5kcG9pbnQgcmVxdWVzdHMgYXJlIGFsbG9jYXRlZCBpbiBgZl9taWRpMl9zdGFydF9lcHNgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGZfbWlkaTJfc2V0X2FsdGAuIFNvLCBgZl9taWRpMl9zZXRfYWx0YCBpcyB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgdG8gdGhlIGNvZGUgSSYjMzk7bSByZWFsbHkgaW50ZXJlc3RlZCBpbi4KCk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSBvdGhlciBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLiBgZl9taWRpMl9zZXR1cGAgaGFuZGxlcyBjb250cm9sIHJlcXVlc3RzLCBhbmQgYGZfbWlkaTJfZGlzYWJsZWAgc3RvcHMgdGhlIGVuZHBvaW50cy4KCkNvbnNpZGVyaW5nIGFsbCB0aGlzLCBteSBmb2N1cyBzeW1ib2xzIHJlZmluZSB0bzogYGZfbWlkaTJfc2V0X2FsdGAsIGBmX21pZGkyX2Rpc2FibGVgLCBgZl9taWRpMl9iaW5kYCwgYW5kIGBmX21pZGkyX3VuYmluZGAuIEkmIzM5O3ZlIGV4Y2x1ZGVkIGBmX21pZGkyX3NldHVwYCBzaW5jZSBpdCBkb2VzbiYjMzk7dCBzZWVtIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIGlzc3VlIGFuZCwgYXMgYSBjb250cm9sIGhhbmRsZXIsIHdpbGwgYmUgZnV6emluZyB3aXRoIGEgZGlmZmVyZW50IHNldCBvZiB0YXJnZXRzLgoKTm93LCBpcyBgZl9taWRpMl9zZXRfYWx0YCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nPyBZZXMsIGFic29sdXRlbHkuIEl0JiMzOTtzIGEgY2FsbGJhY2sgZm9yIHRoZSAmIzM0O3NldCBhbHRlcm5hdGUgc2V0dGluZyYjMzQ7IG9wZXJhdGlvbiwgdHJpZ2dlcmVkIGJ5IHRoZSBVU0IgaG9zdC4gVGhpcyBpcyBhIGNydWNpYWwgZW50cnkgcG9pbnQgZm9yIGZ1enppbmcgdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4KClRoZXJlZm9yZSwgdGhlIGZpbmFsIGFzc2Vzc21lbnQgaXM6CgpXb3J0aEZ1enppbmc6IFRydWUKRm9jdXNTeW1ib2xzOiBbJiMzNDtmX21pZGkyX3NldF9hbHQmIzM0OywgJiMzNDtmX21pZGkyX2Rpc2FibGUmIzM0OywgJiMzNDtmX21pZGkyX2JpbmQmIzM0OywgJiMzNDtmX21pZGkyX3VuYmluZCYjMzQ7XQpFbmFibGVDb25maWdzOiBbJiMzNDtVU0JfR0FER0VUJiMzNDssICYjMzQ7VVNCX0NPTkZJR0ZTJiMzNDssICYjMzQ7U05EJiMzNDssICYjMzQ7VVNCX0NPTkZJR0ZTX0ZfTUlESTImIzM0O10KUmVhc29uaW5nOiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiBlbmRwb2ludCByZXF1ZXN0cyBpbiB0aGUgVVNCIE1JREkgMi4wIGdhZGdldCBmdW5jdGlvbi4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHRocm91Z2ggVVNCIGdhZGdldCBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIHNldHRpbmcgYWx0ZXJuYXRlIHNldHRpbmdzIChmX21pZGkyX3NldF9hbHQpIGFuZCBkaXNhYmxpbmcgdGhlIGZ1bmN0aW9uIChmX21pZGkyX2Rpc2FibGUpLiYjMzQ7CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA5OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfR0FER0VUJiMzNDssCiAgICAmIzM0O1VTQl9DT05GSUdGUyYjMzQ7LAogICAgJiMzNDtTTkQmIzM0OywKICAgICYjMzQ7VVNCX0NPTkZJR0ZTX0ZfTUlESTImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmX21pZGkyX3NldF9hbHQmIzM0OywKICAgICYjMzQ7Zl9taWRpMl9kaXNhYmxlJiMzNDssCiAgICAmIzM0O2ZfbWlkaTJfYmluZCYjMzQ7LAogICAgJiMzNDtmX21pZGkyX3VuYmluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiBlbmRwb2ludCByZXF1ZXN0cyBpbiB0aGUgVVNCIE1JREkgMi4wIGdhZGdldCBmdW5jdGlvbi4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHRocm91Z2ggVVNCIGdhZGdldCBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIHNldHRpbmcgYWx0ZXJuYXRlIHNldHRpbmdzIChmX21pZGkyX3NldF9hbHQpIGFuZCBkaXNhYmxpbmcgdGhlIGZ1bmN0aW9uIChmX21pZGkyX2Rpc2FibGUpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfR0FER0VUJiMzNDssCiAgICAmIzM0O1VTQl9DT05GSUdGUyYjMzQ7LAogICAgJiMzNDtTTkQmIzM0OywKICAgICYjMzQ7VVNCX0NPTkZJR0ZTX0ZfTUlESTImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmX21pZGkyX3NldF9hbHQmIzM0OywKICAgICYjMzQ7Zl9taWRpMl9kaXNhYmxlJiMzNDssCiAgICAmIzM0O2ZfbWlkaTJfYmluZCYjMzQ7LAogICAgJiMzNDtmX21pZGkyX3VuYmluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiBlbmRwb2ludCByZXF1ZXN0cyBpbiB0aGUgVVNCIE1JREkgMi4wIGdhZGdldCBmdW5jdGlvbi4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHRocm91Z2ggVVNCIGdhZGdldCBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIHNldHRpbmcgYWx0ZXJuYXRlIHNldHRpbmdzIChmX21pZGkyX3NldF9hbHQpIGFuZCBkaXNhYmxpbmcgdGhlIGZ1bmN0aW9uIChmX21pZGkyX2Rpc2FibGUpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjlUMDk6MjE6MzEuMTc1NjMxMzYzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMzk0MTMxOTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9HQURHRVRcIixcbiAgICBcIlVTQl9DT05GSUdGU1wiLFxuICAgIFwiU05EXCIsXG4gICAgXCJVU0JfQ09ORklHRlNfRl9NSURJMlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZfbWlkaTJfc2V0X2FsdFwiLFxuICAgIFwiZl9taWRpMl9kaXNhYmxlXCIsXG4gICAgXCJmX21pZGkyX2JpbmRcIixcbiAgICBcImZfbWlkaTJfdW5iaW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgb2YgZW5kcG9pbnQgcmVxdWVzdHMgaW4gdGhlIFVTQiBNSURJIDIuMCBnYWRnZXQgZnVuY3Rpb24uIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIFVTQiBnYWRnZXQgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiBzZXR0aW5nIGFsdGVybmF0ZSBzZXR0aW5ncyAoZl9taWRpMl9zZXRfYWx0KSBhbmQgZGlzYWJsaW5nIHRoZSBmdW5jdGlvbiAoZl9taWRpMl9kaXNhYmxlKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDk6MjE6MzEuMTc1NjM2NzEzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTE2NTMzMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlMjFlOWZhNjljYjdkOTEyMTNmMzEwYmNlYWYyODdjZGNlNzNjNzNjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDI5IDA5OjIxOjMwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jXFxuaW5kZXggMTlmZGFjMDI0MzQzOS4uNWU1NGNmOTk0NzA3YSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jXFxuKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuY1xcbkBAIC0xMTQ1LDcgKzExNDUsNyBAQCBzdGF0aWMgaW50IGZfbWlkaTJfYWxsb2NfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcXG4gXFx0aWYgKCF1c2JfZXAtXFx1MDAzZXJlcXMpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG1pZGkyLVxcdTAwM2VpbmZvLm51bV9yZXFzOyBpKyspIHtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHVzYl9lcC1cXHUwMDNlbnVtX3JlcXM7IGkrKykge1xcbiBcXHRcXHRpZiAodXNiX2VwLVxcdTAwM2VyZXFzW2ldLnJlcSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdHVzYl9lcC1cXHUwMDNlcmVxc1tpXS5yZXEgPSBhbGxvY19lcF9yZXEodXNiX2VwLVxcdTAwM2V1c2JfZXAsXFxuQEAgLTExNjAsMTAgKzExNjAsOSBAQCBzdGF0aWMgaW50IGZfbWlkaTJfYWxsb2NfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcXG4gLyogRnJlZSBhbGxvY2F0ZWQgcmVxdWVzdHMgKi9cXG4gc3RhdGljIHZvaWQgZl9taWRpMl9mcmVlX2VwX3JlcXMoc3RydWN0IGZfbWlkaTJfdXNiX2VwICp1c2JfZXApXFxuIHtcXG4tXFx0c3RydWN0IGZfbWlkaTIgKm1pZGkyID0gdXNiX2VwLVxcdTAwM2VjYXJkO1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtaWRpMi1cXHUwMDNlaW5mby5udW1fcmVxczsgaSsrKSB7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB1c2JfZXAtXFx1MDAzZW51bV9yZXFzOyBpKyspIHtcXG4gXFx0XFx0aWYgKCF1c2JfZXAtXFx1MDAzZXJlcXNbaV0ucmVxKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0ZnJlZV9lcF9yZXEodXNiX2VwLVxcdTAwM2V1c2JfZXAsIHVzYl9lcC1cXHUwMDNlcmVxc1tpXS5yZXEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMTozMS45ODgwNDIzNjVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNjI1ODE3MDk5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0dBREdFVFwiLFxuICAgIFwiVVNCX0NPTkZJR0ZTXCIsXG4gICAgXCJTTkRcIixcbiAgICBcIlVTQl9DT05GSUdGU19GX01JREkyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZl9taWRpMl9zZXRfYWx0XCIsXG4gICAgXCJmX21pZGkyX2Rpc2FibGVcIixcbiAgICBcImZfbWlkaTJfYmluZFwiLFxuICAgIFwiZl9taWRpMl91bmJpbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiBlbmRwb2ludCByZXF1ZXN0cyBpbiB0aGUgVVNCIE1JREkgMi4wIGdhZGdldCBmdW5jdGlvbi4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHRocm91Z2ggVVNCIGdhZGdldCBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIHNldHRpbmcgYWx0ZXJuYXRlIHNldHRpbmdzIChmX21pZGkyX3NldF9hbHQpIGFuZCBkaXNhYmxpbmcgdGhlIGZ1bmN0aW9uIChmX21pZGkyX2Rpc2FibGUpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlMjFlOWZhNjljYjdkOTEyMTNmMzEwYmNlYWYyODdjZGNlNzNjNzNjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMDk6MjE6MzAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuY1xuaW5kZXggMTlmZGFjMDI0MzQzOS4uNWU1NGNmOTk0NzA3YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmNcbisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmNcbkBAIC0xMTQ1LDcgKzExNDUsNyBAQCBzdGF0aWMgaW50IGZfbWlkaTJfYWxsb2NfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcbiBcdGlmICghdXNiX2VwLVx1MDAzZXJlcXMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWlkaTItXHUwMDNlaW5mby5udW1fcmVxczsgaSsrKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB1c2JfZXAtXHUwMDNlbnVtX3JlcXM7IGkrKykge1xuIFx0XHRpZiAodXNiX2VwLVx1MDAzZXJlcXNbaV0ucmVxKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR1c2JfZXAtXHUwMDNlcmVxc1tpXS5yZXEgPSBhbGxvY19lcF9yZXEodXNiX2VwLVx1MDAzZXVzYl9lcCxcbkBAIC0xMTYwLDEwICsxMTYwLDkgQEAgc3RhdGljIGludCBmX21pZGkyX2FsbG9jX2VwX3JlcXMoc3RydWN0IGZfbWlkaTJfdXNiX2VwICp1c2JfZXApXG4gLyogRnJlZSBhbGxvY2F0ZWQgcmVxdWVzdHMgKi9cbiBzdGF0aWMgdm9pZCBmX21pZGkyX2ZyZWVfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcbiB7XG4tXHRzdHJ1Y3QgZl9taWRpMiAqbWlkaTIgPSB1c2JfZXAtXHUwMDNlY2FyZDtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWlkaTItXHUwMDNlaW5mby5udW1fcmVxczsgaSsrKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB1c2JfZXAtXHUwMDNlbnVtX3JlcXM7IGkrKykge1xuIFx0XHRpZiAoIXVzYl9lcC1cdTAwM2VyZXFzW2ldLnJlcSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0ZnJlZV9lcF9yZXEodXNiX2VwLVx1MDAzZXVzYl9lcCwgdXNiX2VwLVx1MDAzZXJlcXNbaV0ucmVxKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA5OjIxOjMxLjk4ODA0MzgzNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0OTMwNzg3NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVVNCIE1JREkgR2FkZ2V0IERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jYC4gSXQncyBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgbW9kaWZpY2F0aW9uLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgYG1pZGkyLVx1MDAzZWluZm8ubnVtX3JlcXNgIHRvIGB1c2JfZXAtXHUwMDNlbnVtX3JlcXNgIHdpdGhpbiB0aGUgYGZfbWlkaTJfYWxsb2NfZXBfcmVxc2AgYW5kIGBmX21pZGkyX2ZyZWVfZXBfcmVxc2AgZnVuY3Rpb25zLiBUaGF0IHJpZ2h0IHRoZXJlIHN1Z2dlc3RzIGEgYnVnIGZpeCDigJMgc29tZW9uZSB3YXMgdXNpbmcgdGhlIHdyb25nIHZhcmlhYmxlLCBwcm9iYWJseSBhIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlIHdpdGggcmVxdWVzdCBxdWV1ZXMuIEknbSBndWVzc2luZyB0aGlzIG1pZ2h0IGhhdmUgbGVkIHRvIHBvdGVudGlhbCBlbmRwb2ludCBhbGxvY2F0aW9uIG9yIGRlYWxsb2NhdGlvbiBwcm9ibGVtcy5cblxuVGhlc2UgZnVuY3Rpb25zLCBgZl9taWRpMl9hbGxvY19lcF9yZXFzYCBhbmQgYGZfbWlkaTJfZnJlZV9lcF9yZXFzYCwgYXJlIGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgZ29vZC4gSXQgbGltaXRzIHRoZWlyIHNjb3BlIGFuZCBtYWtlcyBpdCBlYXNpZXIgdG8gdHJhY2UgdGhlaXIgdXNhZ2Ugd2l0aGluIHRoZSBmaWxlLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBxdWlja2x5IGlkZW50aWZ5IHdoZXJlIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGNhbGxlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0cyB3aXRoaW4gdGhlIGxhcmdlciBNSURJIGdhZGdldCBmcmFtZXdvcmsuIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgYW55IHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBvciBzeW1ib2wgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGhvdyB0aGlzIGNvZGUgZ2V0cyBjb21waWxlZCBvciBsaW5rZWQgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTksIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMTozNi40ODExMjU4NzZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ1NzM2OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZl9taWRpMl9hbGxvY19lcF9yZXFzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0xMTIyPXN0YXRpYyB2b2lkIGZfbWlkaTJfZHJvcF9yZXFzKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqdXNiX2VwKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMTM3LS8qIEFsbG9jYXRlIHJlcXVlc3RzIGZvciB0aGUgZ2l2ZW4gRVAgKi9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjExMzg6c3RhdGljIGludCBmX21pZGkyX2FsbG9jX2VwX3JlcXMoc3RydWN0IGZfbWlkaTJfdXNiX2VwICp1c2JfZXApXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMTM5LXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTI0OT1zdGF0aWMgaW50IGZfbWlkaTJfc3RhcnRfZXBzKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqZXBfaW4sXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyNjEtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxMjYyOlxcdGVyciA9IGZfbWlkaTJfYWxsb2NfZXBfcmVxcyhlcF9pbik7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjYzLVxcdGlmIChlcnIpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjY0LVxcdFxcdHJldHVybiBlcnI7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxMjY1OlxcdGVyciA9IGZfbWlkaTJfYWxsb2NfZXBfcmVxcyhlcF9vdXQpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTI2Ni1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMTozNi41NzU3MDY1MjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjMwNDgyNjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKlRyYWNpbmcgdGhlIENhbGwgUGF0aDogZl9taWRpMl9zdGFydF9lcHMqKlxuXG5Pa2F5LCBzbyBgZl9taWRpMl9zdGFydF9lcHNgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGluaXRpYXRlZCB0aGlzIHdob2xlIHByb2Nlc3MuIFRoYXQncyBvdXIgZW50cnkgcG9pbnQsIGFuZCB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyB0aGF0IGZvbGxvd3MgZnJvbSB0aGVyZS4gVGltZSB0byBkaWcgaW4gYW5kIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gTGV0J3Mgc2VlIHdoYXQgYGZfbWlkaTJfc3RhcnRfZXBzYCBjYWxscywgd2hhdCBkYXRhIGl0IHBhc3NlcywgYW5kIHdoZXJlIHRoZSBwcm9ncmFtIGdvZXMgbmV4dC4gVGhpcyBsZXZlbCBvZiBkZXRhaWwgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLiBUaGUgbmV4dCBzdGVwcyB3aWxsIGdpdmUgbWUgaW5zaWdodHMgdG8gdGhlIHJvb3QgY2F1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxODQsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMTozOS4yMDYxOTEzNTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5MDQwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZl9taWRpMl9zdGFydF9lcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTEyMzk9c3RhdGljIHZvaWQgZl9taWRpMl9zdG9wX2VwcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKmVwX2luLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjQ4LS8qIHN0YXJ0L3F1ZXVlIGJvdGggSU4gYW5kIE9VVCBFUHMgKi9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyNDk6c3RhdGljIGludCBmX21pZGkyX3N0YXJ0X2VwcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKmVwX2luLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTI1MC1cXHRcXHRcXHQgICAgIHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqZXBfb3V0LFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0xMjc0PXN0YXRpYyBpbnQgZl9taWRpMl9zZXRfYWx0KHN0cnVjdCB1c2JfZnVuY3Rpb24gKmZuLCB1bnNpZ25lZCBpbnQgaW50ZixcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTMwNC1cXHRpZiAob3BfbW9kZSA9PSBNSURJX09QX01PREVfTUlESTEpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxMzA1OlxcdFxcdHJldHVybiBmX21pZGkyX3N0YXJ0X2VwcyhcXHUwMDI2bWlkaTItXFx1MDAzZW1pZGkxX2VwX2luLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTMwNi1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNm1pZGkyLVxcdTAwM2VtaWRpMV9lcF9vdXQsIGZuKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTMxMS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEzMTI6XFx0XFx0XFx0ZXJyID0gZl9taWRpMl9zdGFydF9lcHMoXFx1MDAyNmVwLVxcdTAwM2VlcF9pbiwgXFx1MDAyNmVwLVxcdTAwM2VlcF9vdXQsIGZuKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEzMTMtXFx0XFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDk6MjE6MzkuMjU1MTAwMDY1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyNzgyMDg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNSURJIEZ1bmN0aW9uIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gYGZfbWlkaTJfc2V0X2FsdGAgaXMgYSBgdXNiX2Z1bmN0aW9uYCBjYWxsYmFjaywgd2hpY2ggbWVhbnMgaXQncyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBVU0IgTUlESSBjb21tdW5pY2F0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBmcmFtZXdvcmsuIE15IG5leHQgc3RlcCwgYW5kIHF1aXRlIGxvZ2ljYWxseSwgaXMgdG8gaW52ZXN0aWdhdGUgYGZfbWlkaTJfZnJlZV9lcF9yZXFzYC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgZW5kcG9pbnQgcmVxdWVzdCBzdHJ1Y3R1cmVzIGFyZSBjbGVhbmVkIHVwIG9yIG1hbmFnZWQsIHBvdGVudGlhbGx5IGFmdGVyIGFuIGFsdGVybmF0ZSBzZXR0aW5nIGNoYW5nZSBvciBhIGNvbmZpZ3VyYXRpb24gYWx0ZXJhdGlvbiByZWxhdGVkIHRvIHRoaXMgZnVuY3Rpb24uIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgcmVzb3VyY2VzIGFyZSBoYW5kbGVkIGFuZCBmcmVlZCBpbiByZWxhdGlvbiB0byB0aGlzIGtleSBjYWxsYmFjaywgc3BlY2lmaWNhbGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozODI5LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDk6MjE6NDIuNDgyOTIzMDM0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTY0MjgxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmX21pZGkyX2ZyZWVfZXBfcmVxc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTEzOD1zdGF0aWMgaW50IGZfbWlkaTJfYWxsb2NfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTE2MC0vKiBGcmVlIGFsbG9jYXRlZCByZXF1ZXN0cyAqL1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTE2MTpzdGF0aWMgdm9pZCBmX21pZGkyX2ZyZWVfZXBfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTExNjIte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0xMjAzPXN0YXRpYyB2b2lkIGZfbWlkaTJfZnJlZV9lcChzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTIwNi1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyMDc6XFx0Zl9taWRpMl9mcmVlX2VwX3JlcXModXNiX2VwKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyMDgtXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTEyMzk9c3RhdGljIHZvaWQgZl9taWRpMl9zdG9wX2VwcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKmVwX2luLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjQzLVxcdGZfbWlkaTJfZHJvcF9yZXFzKGVwX291dCk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxMjQ0OlxcdGZfbWlkaTJfZnJlZV9lcF9yZXFzKGVwX2luKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyNDU6XFx0Zl9taWRpMl9mcmVlX2VwX3JlcXMoZXBfb3V0KTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyNDYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMTo0Mi42MTQ1NzA5NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMTkxMzU4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyBNSURJIEVuZHBvaW50IENsZWFudXAqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgZl9taWRpMl9mcmVlX2VwYCBhbmQgYGZfbWlkaTJfc3RvcF9lcHNgIGFyZSB0aGUgY2FsbGluZyBmdW5jdGlvbnMuIFRoYXQncyBteSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgTUlESSBlbmRwb2ludHMgYXJlIG1hbmFnZWQgYW5kIHJlbGVhc2VkLiBJIG5lZWQgdG8gZGlnIGludG8gYGZfbWlkaTJfZnJlZV9lcGAgc3BlY2lmaWNhbGx5LiBNeSBmb2N1cyB3aWxsIGJlIG9uIHVuZGVyc3RhbmRpbmcgd2hhdCBpdCBkb2VzIGFuZCwgY3JpdGljYWxseSwgd2hvIGRlcGVuZHMgb24gaXQuIFdoYXQgcmVzb3VyY2VzIGRvZXMgaXQgcmVsZWFzZT8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGFmZmVjdGVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgbGlmZSBjeWNsZSBvZiBhbiBlbmRwb2ludC4gTGV0J3Mgc3RhcnQgd2l0aCB0cmFjaW5nIHRoYXQgZnVuY3Rpb24gYW5kIHNlZWluZyB3aGF0IGl0IGFjdHVhbGx5IGRvZXMuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaG93IHRoZXNlIGVuZHBvaW50cyBhcmUgY2xlYW5lZCB1cCB0byBtYWtlIHN1cmUgbm8gcmVzb3VyY2VzIGFyZSBsZWFrZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NDEsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMTo0Ny44MzM3MTAxOTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MTMxNzE5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmX21pZGkyX2ZyZWVfZXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTExMzg9c3RhdGljIGludCBmX21pZGkyX2FsbG9jX2VwX3JlcXMoc3RydWN0IGZfbWlkaTJfdXNiX2VwICp1c2JfZXApXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTExNjAtLyogRnJlZSBhbGxvY2F0ZWQgcmVxdWVzdHMgKi9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjExNjE6c3RhdGljIHZvaWQgZl9taWRpMl9mcmVlX2VwX3JlcXMoc3RydWN0IGZfbWlkaTJfdXNiX2VwICp1c2JfZXApXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMTYyLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTE3ND1zdGF0aWMgaW50IGZfbWlkaTJfaW5pdF9lcChzdHJ1Y3QgZl9taWRpMiAqbWlkaTIsIHN0cnVjdCBmX21pZGkyX2VwICplcCxcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTIwMi0vKiBGcmVlIEVQICovXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxMjAzOnN0YXRpYyB2b2lkIGZfbWlkaTJfZnJlZV9lcChzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyMDQte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjA2LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTIwNzpcXHRmX21pZGkyX2ZyZWVfZXBfcmVxcyh1c2JfZXApO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTIwOC1cXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTIzOT1zdGF0aWMgdm9pZCBmX21pZGkyX3N0b3BfZXBzKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqZXBfaW4sXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyNDMtXFx0Zl9taWRpMl9kcm9wX3JlcXMoZXBfb3V0KTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyNDQ6XFx0Zl9taWRpMl9mcmVlX2VwX3JlcXMoZXBfaW4pO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTI0NTpcXHRmX21pZGkyX2ZyZWVfZXBfcmVxcyhlcF9vdXQpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTI0Ni19XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTIwNTc9c3RhdGljIHZvaWQgZl9taWRpMl91bmJpbmQoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0yMDYzLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MjA2NDpcXHRmX21pZGkyX2ZyZWVfZXAoXFx1MDAyNm1pZGkyLVxcdTAwM2VtaWRpMV9lcF9pbik7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoyMDY1OlxcdGZfbWlkaTJfZnJlZV9lcChcXHUwMDI2bWlkaTItXFx1MDAzZW1pZGkxX2VwX291dCk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0yMDY2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtaWRpMi1cXHUwMDNlbnVtX2VwczsgaSsrKSB7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoyMDY3OlxcdFxcdGZfbWlkaTJfZnJlZV9lcChcXHUwMDI2bWlkaTItXFx1MDAzZW1pZGkyX2Vwc1tpXS5lcF9pbik7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoyMDY4OlxcdFxcdGZfbWlkaTJfZnJlZV9lcChcXHUwMDI2bWlkaTItXFx1MDAzZW1pZGkyX2Vwc1tpXS5lcF9vdXQpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMjA2OS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA5OjIxOjQ4LjE3NTAzNzY1OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzI2MTIxNjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgTUlESSBFbmRwb2ludCBDbGVhbnVwKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZXNlIE1JREkgZW5kcG9pbnRzIGFyZSBiZWluZyBjbGVhbmVkIHVwLCBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBvbiB0aGUgc3VyZmFjZS4gYGZfbWlkaTJfdW5iaW5kYCBkaXJlY3RseSBjYWxscyBgZl9taWRpMl9mcmVlX2VwYCwgd2hpY2ggbWFrZXMgc2Vuc2Ug4oCTIHVuYmluZGluZyB0aGUgZW5kcG9pbnQgaW1wbGllcyBmcmVlaW5nIGl0cyByZXNvdXJjZXMuIE5vdywgSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHRoZSBicm9hZGVyIHN0b3BwaW5nIHByb2Nlc3MsIGFuZCBpdCBsb29rcyBsaWtlIGBmX21pZGkyX3N0b3BfZXBzYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRvIGV4YW1pbmUuIEZyb20gYSBxdWljayBnbGFuY2UsIGl0IGNhbGxzIGBmX21pZGkyX2ZyZWVfZXBfcmVxc2AuIFRoaXMgc3VnZ2VzdHMgdGhhdCBgZl9taWRpMl9zdG9wX2Vwc2AgaXMgcmVzcG9uc2libGUgZm9yIHN0b3BwaW5nIGFuZCBjbGVhbmluZyB1cCBhbGwgdGhlIHJlcXVlc3RzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZW5kcG9pbnRzLCB3aGljaCBpbiB0dXJuIGxlYWRzIHRvIGZyZWVpbmcgdGhlIGVuZHBvaW50cyB0aGVtc2VsdmVzLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgb2YgYGZfbWlkaTJfZnJlZV9lcF9yZXFzYCB0byB1bmRlcnN0YW5kIHRoZSBncmFudWxhciBhc3BlY3RzIG9mIHRoaXMgY2xlYW51cCBwcm9jZWR1cmUsIHN1Y2ggYXMgd2hpY2ggcmVzb3VyY2VzIGFyZSBiZWluZyBmcmVlZCBhbmQgdGhlIG9yZGVyaW5nIG9mIHRoZSBvcGVyYXRpb25zLiBJIGFzc3VtZSB0aGUgYHJlcXNgIGFyZSByZXF1ZXN0IG9iamVjdHMgcmVsYXRlZCB0byB0aGUgZW5kcG9pbnRzLiBUaGlzIHdpbGwgbmVlZCBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2OTAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMTo1MS45MDExNjI5NDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTAyODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZfbWlkaTJfc3RvcF9lcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTEyMTY9c3RhdGljIHZvaWQgZl9taWRpMl9xdWV1ZV9vdXRfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTIzOC0vKiBzdG9wIGJvdGggSU4gYW5kIE9VVCBFUHMgKi9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyMzk6c3RhdGljIHZvaWQgZl9taWRpMl9zdG9wX2VwcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKmVwX2luLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTI0MC1cXHRcXHRcXHQgICAgIHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqZXBfb3V0KVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0xMjc0PXN0YXRpYyBpbnQgZl9taWRpMl9zZXRfYWx0KHN0cnVjdCB1c2JfZnVuY3Rpb24gKmZuLCB1bnNpZ25lZCBpbnQgaW50ZixcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTI5NC1cXHRpZiAob3BfbW9kZSAhPSBNSURJX09QX01PREVfTUlESTEpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxMjk1OlxcdFxcdGZfbWlkaTJfc3RvcF9lcHMoXFx1MDAyNm1pZGkyLVxcdTAwM2VtaWRpMV9lcF9pbiwgXFx1MDAyNm1pZGkyLVxcdTAwM2VtaWRpMV9lcF9vdXQpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTI5Ni1cXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTI5OS1cXHRcXHRcXHRlcCA9IFxcdTAwMjZtaWRpMi1cXHUwMDNlbWlkaTJfZXBzW2ldO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTMwMDpcXHRcXHRcXHRmX21pZGkyX3N0b3BfZXBzKFxcdTAwMjZlcC1cXHUwMDNlZXBfaW4sIFxcdTAwMjZlcC1cXHUwMDNlZXBfb3V0KTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEzMDEtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMTo1MS45NDgwNzEyMjVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5NTUwMzk3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVTQiBNSURJIEdhZGdldCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYGZfbWlkaTJfc2V0X2FsdGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyBiZWluZyBjYWxsZWQsIGFuZCBJIHNlZSBpdCdzIGNhbGxpbmcgYm90aCBgZl9taWRpMl9zdG9wX2Vwc2AgYW5kIGBmX21pZGkyX3N0YXJ0X2Vwc2AuIFRoYXQncyBpbnRlcmVzdGluZzsgaXQgc2VlbXMgdG8gYmUgbWFuYWdpbmcgdGhlIGVuZHBvaW50cy4gUmlnaHQsIGFuZCB0aGlzIGBmX21pZGkyX3NldF9hbHRgIGlzIHRoZSBgc2V0X2FsdGAgY2FsbGJhY2sgd2l0aGluIHRoZSBgdXNiX2Z1bmN0aW9uYCBzdHJ1Y3R1cmUuIFRoYXQgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgVVNCIGdhZGdldCBjb25maWd1cmF0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4gVGhlIGNvZGUgaXMgbG9jYXRlZCBpbiBgZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuY2AsIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCdzIHRpbWUgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggYGZfbWlkaTIuY2AgdG8gc2VlIGhvdyB0aGlzIGVuZHBvaW50IHN3aXRjaGluZyBpcyBiZWluZyB0cmlnZ2VyZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBgc2V0X2FsdGAgY2FsbGJhY2sgd2l0aGluIHRoZSBVU0IgY29uZmlndXJhdGlvbiBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDY4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA5OjIxOjU1Ljc0MzU3OTE4MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE4ODg4MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZl9taWRpMlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlPTUwPW9iai0kKENPTkZJR19VU0JfRl9NSURJKVxcdCs9IHVzYl9mX21pZGkub1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZTo1MTp1c2JfZl9taWRpMi15XFx0XFx0XFx0Oj0gZl9taWRpMi5vXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlOjUyOm9iai0kKENPTkZJR19VU0JfRl9NSURJMilcXHQrPSB1c2JfZl9taWRpMi5vXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlLTUzLXVzYl9mX2hpZC15XFx0XFx0XFx0Oj0gZl9oaWQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMTo1NS43OTU0NzM3MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTkyNTAwNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBpczpcblxuKipFeGFtaW5pbmcgTUlESTIgVVNCIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgc3lzdGVtIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIGBDT05GSUdfVVNCX0ZfTUlESTJgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIEtjb25maWcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb25maWcgb3B0aW9uICphY3R1YWxseSogbWVhbnMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBzeXN0ZW0uIEknbSBnb2luZyB0byBoZWFkIHN0cmFpZ2h0IG92ZXIgdG8gS2NvbmZpZyB0byBzZWUgd2hhdCdzIGRlZmluZWQgZm9yIGBDT05GSUdfVVNCX0ZfTUlESTJgLiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUgcmVzdCBvZiB0aGUgVVNCIHN0YWNrIGFuZCwgYnkgZXh0ZW5zaW9uLCBhdWRpbyBwcm9jZXNzaW5nPyBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSB0byB1bmRlcnN0YW5kIHRoaXMgc2luZ2xlIHNldHRpbmcuIFRoaXMgaXMgZ29pbmcgdG8gYmUgaW50ZXJlc3RpbmcuIExldCdzIHNlZSB3aGF0IEtjb25maWcgaGFzIHRvIHNheS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk2MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA5OjIxOjU4Ljk4Nzk3NzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MjE0NjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0JfRl9NSURJMlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTIwOT1jb25maWcgVVNCX0ZfTUlESVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjExLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjIxMjpjb25maWcgVVNCX0ZfTUlESTJcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0yMTMtXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDk6MjE6NTkuMDM2MTk4MDY5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NDQxNTgwNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGEgVHJpc3RhdGUncyBBY3RpdmF0aW9uKipcblxuQWxyaWdodCwgdGhpcyBsb29rcyBsaWtlIGEgY2xldmVybHkgY29uY2VhbGVkIHRyaXN0YXRlIGNpcmN1aXQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQncyBkcml2aW5nIHRoZSBzZWxlY3QgbGluZXM/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgbG9naWMgdGhhdCdzIGRpY3RhdGluZyB3aGVuIHRoaXMgdGhpbmcgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhbmQgaW4gd2hpY2ggc3RhdGUuIElzIGl0IGEgc2ltcGxlIGNvbWJpbmF0aW9uIG9mIGlucHV0cywgb3IgaXMgdGhlcmUgYSBtb3JlIGNvbXBsZXggc3RhdGUgbWFjaGluZSBpbnZvbHZlZD8gSSdtIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHBvdGVudGlhbCBzY2VuYXJpb3M6IGxhdGNoaW5nIGNvbmRpdGlvbnMsIGFzeW5jaHJvbm91cyBzaWduYWxzIHRoYXQgY291bGQgYmUgY3JlYXRpbmcgZ2xpdGNoZXMsIG9yIG1heWJlIGV2ZW4gc29tZSBzdWJ0bGUgdGltaW5nIGlzc3VlcyB0aGF0IGFyZSBjYXVzaW5nIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGlzIHRyaXN0YXRlIGlzIGJlaW5nIHVzZWQgdG8gc2hhcmUgYSBidXMgb3IgbXVsdGlwbGV4IHNpZ25hbHMgYW5kIHdoaWNoIHNpZ25hbHMgYXJlIGJlaW5nIG11bHRpcGxleGVkIGFuZCB3aGF0IHRoZSB0aW1pbmcgYmV0d2VlbiB0aGVzZSBpcy4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBzaWduYWxzIGJhY2sgdG8gdGhlaXIgc291cmNlIGFuZCBkZXRlcm1pbmUgdGhlIHByZWNpc2UgY29uZGl0aW9ucyB0aGF0IGFjdGl2YXRlIGVhY2ggc3RhdGUuIFRpbWUgdG8gZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjY5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDk6MjI6MDMuNzgwMzU4NTk0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ2OTE3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgVVNCX0ZfTUlESTJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz00NDU9Y29uZmlnIFVTQl9DT05GSUdGU19GX01JREkyXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy00NDktXFx0c2VsZWN0IFVTQl9MSUJDT01QT1NJVEVcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo0NTA6XFx0c2VsZWN0IFVTQl9GX01JREkyXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNDUxLVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDk6MjI6MDMuODI5ODM1Mjg0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTA0MjM1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgTUlESTIgQ29uZmlnRlMgRGVwZW5kZW5jeSBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBzbyBgVVNCX0NPTkZJR0ZTX0ZfTUlESTJgIGhhcyBiZWVuIHNlbGVjdGVkLiBUaGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgbWVudGFsIGNoZWNrOiB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGFuZCBkZXBlbmRlbmNpZXM/IFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBVU0JfRl9NSURJMmAgaXMgYWxzbyBwdWxsZWQgaW4uIFRoaXMgaXMgYSBzdGFuZGFyZCBwcm9jZWR1cmU7IEknbSBub3QgZ29pbmcgdG8ganVzdCBhc3N1bWUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gaXMgcGVyZmVjdGx5IGF1dG9tYXRlZCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgYXMgc3BlY2lmaWMgYW5kIG51YW5jZWQgYXMgTUlESSAyLiBJIG5lZWQgdG8gZXhwbGljaXRseSBjb25maXJtIHRoZSBkaXJlY3QgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXAgaGVyZS4gSXQncyB0b28gZWFzeSB0byBtaXNzIHNvbWV0aGluZyBpbiBhIGNvbXBsZXggY29uZmlnIHNwYWNlLiBNeSBuZXh0IGFjdGlvbiBpcyB0byB2ZXJpZnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MTYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMjowNy4xODAyNjI1NTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDc5MDA5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX0NPTkZJR0ZTX0ZfTUlESTJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz00MzE9Y29uZmlnIFVTQl9DT05GSUdGU19GX01JRElcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTQ0NC1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo0NDU6Y29uZmlnIFVTQl9DT05GSUdGU19GX01JREkyXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNDQ2LVxcdGJvb2wgXFxcIk1JREkgMi4wIGZ1bmN0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMjowNy4yODUwNTg2MjdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3ODc3OTYzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBVU0IgR2FkZ2V0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFVTQiBnYWRnZXRzLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgYGRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnYCBmaWxlLCBhcm91bmQgbGluZSA0NDUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIHZhcmlvdXMgZ2FkZ2V0IGRyaXZlcnMgYW5kIHRoZWlyIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIFRoZXJlJ3MgYSBwYXJ0aWN1bGFyIHVzZSBjYXNlIEknbSB0YWNrbGluZywgYW5kIEkgc3VzcGVjdCB0aGUgYW5zd2VyIGxpZXMgd2l0aGluIHRob3NlIEtjb25maWcgb3B0aW9ucywgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkuIFRoZSBnb2FsIGlzIHRvIHNlZSB3aGljaCBwYXJhbWV0ZXJzIGFyZSBhdmFpbGFibGUsIHdoaWNoIGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiBkaWZmZXJlbnQgY2hvaWNlcyBtaWdodCBiZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgZ2FkZ2V0IHN0YWNrIGFzIGEgd2hvbGUuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzdGFydCBkaWdnaW5nIGludG8gdGhlIGRldGFpbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMjoxMC40NjM4NDEyMzdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDQwOlxcdFxcdCAgaW5wdXQgYW5kIG9uZSBNSURJIG91dHB1dC4gVGhlc2UgTUlESSBqYWNrcyBhcHBlYXIgYXNcXG4gNDQxOlxcdFxcdCAgYSBzb3VuZCBcXFwiY2FyZFxcXCIgaW4gdGhlIEFMU0Egc291bmQgc3lzdGVtLiBPdGhlciBNSURJXFxuIDQ0MjpcXHRcXHQgIGNvbm5lY3Rpb25zIGNhbiB0aGVuIGJlIG1hZGUgb24gdGhlIGdhZGdldCBzeXN0ZW0sIHVzaW5nXFxuIDQ0MzpcXHRcXHQgIEFMU0EncyBhY29ubmVjdCB1dGlsaXR5IGV0Yy5cXG4gNDQ0OlxcdFxcbiA0NDU6XFx0Y29uZmlnIFVTQl9DT05GSUdGU19GX01JREkyXFxuIDQ0NjpcXHRcXHRib29sIFxcXCJNSURJIDIuMCBmdW5jdGlvblxcXCJcXG4gNDQ3OlxcdFxcdGRlcGVuZHMgb24gVVNCX0NPTkZJR0ZTXFxuIDQ0ODpcXHRcXHRkZXBlbmRzIG9uIFNORFxcbiA0NDk6XFx0XFx0c2VsZWN0IFVTQl9MSUJDT01QT1NJVEVcXG4gNDUwOlxcdFxcdHNlbGVjdCBVU0JfRl9NSURJMlxcbiA0NTE6XFx0XFx0aGVscFxcbiA0NTI6XFx0XFx0ICBUaGUgTUlESSAyLjAgZnVuY3Rpb24gZHJpdmVyIHByb3ZpZGVzIHRoZSBnZW5lcmljIGVtdWxhdGVkXFxuIDQ1MzpcXHRcXHQgIFVTQiBNSURJIDIuMCBpbnRlcmZhY2UsIGxvb3BlZCBiYWNrIHRvIEFMU0EgVU1QIHJhd21pZGlcXG4gNDU0OlxcdFxcdCAgZGV2aWNlIG9uIHRoZSBnYWRnZXQgaG9zdC4gSXQgc3VwcG9ydHMgVU1QIDEuMSBzcGVjIGFuZFxcbiA0NTU6XFx0XFx0ICByZXNwb25kcyBVTVAgU3RyZWFtIG1lc3NhZ2VzIGZvciBVTVAgRW5kcG9pbnQgYW5kIEZ1bmN0aW9uXFxuIDQ1NjpcXHRcXHQgIEJsb2NrIGluZm9ybWF0aW9uIC8gY29uZmlndXJhdGlvbi5cXG4gNDU3OlxcdFxcbiA0NTg6XFx0Y29uZmlnIFVTQl9DT05GSUdGU19GX0hJRFxcbiA0NTk6XFx0XFx0Ym9vbCBcXFwiSElEIGZ1bmN0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMjoxMC40NjM5MjQ4NTdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIzMjA5NDQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1JREkyIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIE1JREkyIGNvbmZpZ3VyYXRpb24gc2V0dXAuIFRoZSBmaXJzdCB0aGluZyBJIHNlZSBpcyB0aGF0IGl0J3MgZnVuZGFtZW50YWxseSByZWxpYW50IG9uIGBVU0JfQ09ORklHRlNgIGFuZCBgU05EYC4gTWFrZXMgc2Vuc2UsIHdlJ3JlIGJ1aWxkaW5nIGEgVVNCIGdhZGdldCBjb25maWd1cmF0aW9uIHRoYXQgaW52b2x2ZXMgc291bmQuIEFuZCwgb2YgY291cnNlLCB0aGUgbmV3IGBVU0JfQ09ORklHRlNfRl9NSURJMmAgaXMgYXQgdGhlIGhlYXJ0IG9mIHRoaXMuIEJlZm9yZSBJIGdvIHRvbyBmYXIsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgdXBzdHJlYW0gZGVwZW5kZW5jaWVzLiBSaWdodCwgY2hlY2tpbmcgYFVTQl9DT05GSUdGU2AsIHdoaWNoIGRlcGVuZHMgb24gYFVTQl9HQURHRVRgLiBHb3QgaXQuIEFuZCBgU05EYCBpcyBqdXN0IHRoZSBBTFNBIHNvdW5kIHN1YnN5c3RlbSwgc28gdGhhdCdzIGNsZWFyLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggbW9kaWZpZXMuIEFscmlnaHQsIGl0J3MgbWVzc2luZyB3aXRoIGBmX21pZGkyX2FsbG9jX2VwX3JlcXNgIGFuZCBgZl9taWRpMl9mcmVlX2VwX3JlcXNgLiBUaGVzZSBhcmUgZGVmaW5pdGVseSBpbXBvcnRhbnQuIFRoZXkncmUgaW52b2tlZCB3aXRoaW4gYGZfbWlkaTJfc3RhcnRfZXBzYCwgYGZfbWlkaTJfc3RvcF9lcHNgLCBhbmQgYGZfbWlkaTJfZnJlZV9lcGAuIE9rYXksIHNvIGBmX21pZGkyX3N0YXJ0X2Vwc2AgYW5kIGBmX21pZGkyX3N0b3BfZXBzYCBhcmUgY2FsbGVkIGZyb20gYGZfbWlkaTJfc2V0X2FsdGAuIEV4Y2VsbGVudCwgYW5kIGBmX21pZGkyX3NldF9hbHRgIGlzIGEgYHNldF9hbHRgIGNhbGxiYWNrIG9mIGB1c2JfZnVuY3Rpb25gLiBJIHRoaW5rIHdlJ3ZlIGhpdCBwYXktZGlydC4gYGZfbWlkaTJfc2V0X2FsdGAgYXBwZWFycyB0byBiZSBhIGdvb2QgZm9jYWwgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHBhdGNoJ3MgaW1wYWN0LiBCZWZvcmUgSSBzdGFydCBkaXNzZWN0aW5nIHRoZSBjb2RlLCBJIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZ1bmN0aW9uIGlzIHB1YmxpYy4gTGV0J3Mgc2VlIGlmIGBmX21pZGkyX3NldF9hbHRgIGlzIHN0YXRpYyBvciBub3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MDMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMjoxNS42OTYwMjIxNzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzOTAyNjgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmX21pZGkyX3NldF9hbHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTEyNDk9c3RhdGljIGludCBmX21pZGkyX3N0YXJ0X2VwcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKmVwX2luLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjczLS8qIGdhZGdldCBmdW5jdGlvbiBzZXRfYWx0IGNhbGxiYWNrICovXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxMjc0OnN0YXRpYyBpbnQgZl9taWRpMl9zZXRfYWx0KHN0cnVjdCB1c2JfZnVuY3Rpb24gKmZuLCB1bnNpZ25lZCBpbnQgaW50ZixcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyNzUtXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IGFsdClcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MjgwNj1zdGF0aWMgc3RydWN0IHVzYl9mdW5jdGlvbiAqZl9taWRpMl9hbGxvYyhzdHJ1Y3QgdXNiX2Z1bmN0aW9uX2luc3RhbmNlICpmaSlcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMjgzNC1cXHRtaWRpMi1cXHUwMDNlZnVuYy5nZXRfYWx0ID0gZl9taWRpMl9nZXRfYWx0O1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MjgzNTpcXHRtaWRpMi1cXHUwMDNlZnVuYy5zZXRfYWx0ID0gZl9taWRpMl9zZXRfYWx0O1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMjgzNi1cXHRtaWRpMi1cXHUwMDNlZnVuYy5zZXR1cCA9IGZfbWlkaTJfc2V0dXA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA5OjIyOjE1LjkzNTA1NDkzN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTY2MDQ1OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gdGhlIE1JREkyIENvZGUqKlxuXG5BbHJpZ2h0LCBzbyBgZl9taWRpMl9zZXRfYWx0YCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCBtZWFucyBpdCdzIGludGVybmFsIHRvIGl0cyBjb21waWxhdGlvbiB1bml0LiBIb3dldmVyLCBpdCdzIGJlaW5nICphc3NpZ25lZCogdG8gYSBmdW5jdGlvbiBwb2ludGVyIHNvbWV3aGVyZS4gVGhhdCByYWlzZXMgYSBxdWVzdGlvbiBpbiBteSBtaW5kOiBBcmUgd2UgZGVhbGluZyB3aXRoIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIHRoYXQgZ2V0IGludm9sdmVkIGluIHRoYXQgYXNzaWdubWVudCwgb3IgaXMgZXZlcnl0aGluZyBlbmNhcHN1bGF0ZWQgd2l0aGluIHRoYXQgc3RhdGljIHNjb3BlPyBJdCdzIGdvb2QgcHJhY3RpY2UgdG8gdHJ5IGFuZCBsaW1pdCB0aGUgdmlzaWJpbGl0eSBvZiBmdW5jdGlvbnMgd2hlcmUgcG9zc2libGUgZm9yIG1vZHVsYXJpdHkuXG5cblRoZW4gdGhlcmUgaXMgYGZfbWlkaTJfYWxsb2NgLCBpdCdzIGFsc28gZGVjbGFyZWQgYHN0YXRpY2AuIFNvLCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBmX21pZGkyLmNgIGZpbGUgaXRzZWxmLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYW5kIGlkZW50aWZ5IGFueSBleHRlcm5hbGx5LXZpc2libGUgY29tcG9uZW50cywgYW5kIHRoZSByZWxhdGlvbnNoaXBzIG9mIHRoZXNlIHN0YXRpYyBpbnRlcm5hbCBmdW5jdGlvbnMuIFRoYXQnbGwgZ2l2ZSBtZSB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgaG93IHRoaXMgTUlESTIgbW9kdWxlIGlzIGludGVuZGVkIHRvIGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGV4dGVybmFsIEFQSXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MDcsIk91dHB1dFRva2VucyI6NzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMjoyMC45MDExMDMwNjdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTE0Nzc2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTE4Njg9c3RhdGljIHZvaWQgZl9taWRpMl9mcmVlX3VzYl9jb25maWdzKHN0cnVjdCBmX21pZGkyX3VzYl9jb25maWcgKmNvbmZpZylcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTg3NC0vKiBhcyB3ZSB1c2UgdGhlIHN0YXRpYyBkZXNjcmlwdG9ycyBmb3Igc2ltcGxpY2l0eSwgc2VyaWFsaXplIGJpbmQgY2FsbCAqL1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTg3NTpzdGF0aWMgREVGSU5FX01VVEVYKGZfbWlkaTJfZGVzY19tdXRleCk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xODc2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMjoyMS4xMTIyNjIyMTNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxNzE1NDMyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIHlvdXIgc3VtbWFyeTpcblxuKipRdWljayBSZWdleCBSZXRoaW5rKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gVGhhdCBpbml0aWFsIHJlZ3VsYXIgZXhwcmVzc2lvbiBJIGNyYWZ0ZWQuLi4gaXQncyBwcm9iYWJseSB0b28gZnJhZ2lsZSwgdG9vIHNwZWNpZmljLiBJIG5lZWQgdG8gYmUgYnJvYWRlciBpbiBteSBhcHByb2FjaC4gSW5zdGVhZCBvZiB0cnlpbmcgdG8gY29uc3RydWN0IGEgY29tcGxleCBwYXR0ZXJuLCB3aHkgZG9uJ3QgSSBqdXN0IGtlZXAgaXQgc2ltcGxlPyBJIGNhbiBqdXN0IGBncmVwYCBmb3IgdGhvc2UgY29yZSBrZXJuZWwgc3ltYm9scyB0aGF0IGFyZSBhbG1vc3QgYWx3YXlzIHBhcnQgb2YgYW4gaW50ZXJmYWNlIC0gdGhlIGVhc3kgd2lucy4gTGV0J3Mgc3RhcnQgd2l0aCBgRVhQT1JUX1NZTUJPTGAsIGBtb2R1bGVfaW5pdGAsIGBERUNMQVJFX1VTQl9GVU5DVElPTmAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IGFuZCBpZGVudGlmeSB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcy4gSSBjYW4gcmVmaW5lIGl0IGxhdGVyIGlmIHRoaXMgZmlyc3QgcGFzcyBpc24ndCBleGhhdXN0aXZlIGVub3VnaC4gR29vZCwgZm9jdXMgb24gdGhlIGZ1bmRhbWVudGFscywgdGhlbiBpdGVyYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDAxOCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA5OjIyOjI0LjcyOTQxOTY3M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2MzE4MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREVDTEFSRV9VU0JfRlVOQ1RJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTI4MDY9c3RhdGljIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmZfbWlkaTJfYWxsb2Moc3RydWN0IHVzYl9mdW5jdGlvbl9pbnN0YW5jZSAqZmkpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTI4ODctXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoyODg4OkRFQ0xBUkVfVVNCX0ZVTkNUSU9OX0lOSVQobWlkaTIsIGZfbWlkaTJfYWxsb2NfaW5zdCwgZl9taWRpMl9hbGxvYyk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0yODg5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMjoyNC43NzkwNTc0NjJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3Njc4NDQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE1JREkyIEZ1bmN0aW9uIERyaXZlciBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIGBERUNMQVJFX1VTQl9GVU5DVElPTl9JTklUYCBpcyByZXNwb25zaWJsZSBmb3IgcmVnaXN0ZXJpbmcgdGhpcyBwYXJ0aWN1bGFyIFVTQiBmdW5jdGlvbiwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoYXQgbWVhbnMgdGhlIHJlYWwgZW50cnkgcG9pbnRzIGZvciB0aGlzIGZ1bmN0aW9uIGFyZSBnb2luZyB0byBiZSB0aG9zZSBhbGxvY2F0aW9uIGZ1bmN0aW9uczogYGZfbWlkaTJfYWxsb2NfaW5zdGAsIGFuZCBgZl9taWRpMl9hbGxvY2AsIGFsb25nIHdpdGggdGhlIGNhbGxiYWNrcyBkZWZpbmVkIHdpdGhpbiB0aGVtLiBXZSdyZSBsb29raW5nIGF0IHRoZSBhbGxvY2F0aW9uIHNpZGUgb2YgdGhpbmdzLCBzbyB0aG9zZSBhcmUga2V5LiBMZXQncyBzdGFydCB3aXRoIGBmX21pZGkyX2FsbG9jX2luc3RgIGFuZCBgZl9taWRpMl9hbGxvY2AgYW5kIHNlZSB3aGF0IHRoZXkncmUgYWN0dWFsbHkgZG9pbmcuIFRoYXQncyB3aGVyZSB0aGUgbWFnaWMgc3RhcnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM5NiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA5OjIyOjI4LjQ1NTg0NTM5MVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwMjY5MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZl9taWRpMl9hbGxvY19pbnN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0yNjM1PXN0YXRpYyB2b2lkIGZfbWlkaTJfZnJlZV9pbnN0KHN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgKmYpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTI2NDUtLyogZ2FkZ2V0IGFsbG9jX2luc3QgKi9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjI2NDY6c3RhdGljIHN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgKmZfbWlkaTJfYWxsb2NfaW5zdCh2b2lkKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMjY0Ny17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTI4MDY9c3RhdGljIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmZfbWlkaTJfYWxsb2Moc3RydWN0IHVzYl9mdW5jdGlvbl9pbnN0YW5jZSAqZmkpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTI4ODctXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoyODg4OkRFQ0xBUkVfVVNCX0ZVTkNUSU9OX0lOSVQobWlkaTIsIGZfbWlkaTJfYWxsb2NfaW5zdCwgZl9taWRpMl9hbGxvYyk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0yODg5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMjoyOC41MDI4ODExMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTUzMDIyMTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgTUlESTI6IEluaXRpYWwgQXNzZXNzbWVudCBhbmQgUmVmaW5lbWVudCoqXG5cbk9rYXksIHNvIHRoZSBmdW5jdGlvbnMgaGVyZSBhcmUgYWxsIHN0YXRpYywgd2hpY2ggYXQgZmlyc3QgZ2xhbmNlIHN1Z2dlc3RzIG15IHR5cGljYWwgdG9vbHMsIGBmX21pZGkyX3NldF9hbHRgLCBgZl9taWRpMl9hbGxvY2AsIGBmX21pZGkyX2FsbG9jX2luc3RgLCBgZl9taWRpMl91bmJpbmRgLCBhbmQgYGZfbWlkaTJfYmluZGAsIG1pZ2h0IGJlIGRpcmVjdGx5IGFwcGxpY2FibGUuIEJ1dCB3YWl0Li4uIFN5emthbGxlciwgdGhlIHdvcmtob3JzZSwgKmNhbiogYWN0dWFsbHkgZnV6eiBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkncmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgYW5kIGludm9rZWQgZnJvbSBhIG5vbi1zdGF0aWMgY29udGV4dC4gU28sIEkgbmVlZCB0byBrZWVwIHRob3NlIGZ1bmN0aW9ucyBvbiBteSBsaXN0OiBgZl9taWRpMl9zZXRfYWx0YCwgYGZfbWlkaTJfdW5iaW5kYCwgYGZfbWlkaTJfYmluZGAsIGBmX21pZGkyX2FsbG9jYCwgYW5kIGBmX21pZGkyX2FsbG9jX2luc3RgLlxuXG5Ib2xkIG9uLi4uIEkgbmVlZCB0byByZXZpc2l0IHRoZSBndWlkZWxpbmVzLiBBaCwgdGhlIGRvY3VtZW50YXRpb24gc3BlY2lmaWVzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzIG92ZXIgaW5saW5lZCBzdGF0aWMgaGVscGVycy4gVGhhdCBtYWtlcyBzZW5zZSwgYmVjYXVzZSBpbmxpbmVkIGZ1bmN0aW9ucyBsYWNrIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIEZvcnR1bmF0ZWx5LCBpdCBsb29rcyBsaWtlIGBmX21pZGkyX3NldF9hbHRgICppc24ndCogaW5saW5lZCBiZWNhdXNlIGl0J3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGF2YWlsYWJsZSBpbiB0aGUgYGZfbWlkaTIuY2AgZmlsZS4gVGhpcyB3b3VsZCBiZSBldmVuIGJldHRlciBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5NTAsIk91dHB1dFRva2VucyI6NzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDk6MjI6MzMuNjU1OTA1OTc2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDI0MTQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTE4Njg9c3RhdGljIHZvaWQgZl9taWRpMl9mcmVlX3VzYl9jb25maWdzKHN0cnVjdCBmX21pZGkyX3VzYl9jb25maWcgKmNvbmZpZylcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTg3NC0vKiBhcyB3ZSB1c2UgdGhlIHN0YXRpYyBkZXNjcmlwdG9ycyBmb3Igc2ltcGxpY2l0eSwgc2VyaWFsaXplIGJpbmQgY2FsbCAqL1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTg3NTpzdGF0aWMgREVGSU5FX01VVEVYKGZfbWlkaTJfZGVzY19tdXRleCk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xODc2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMjozMy43MDYxNTcxMjZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzMjMzOTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKlJlZmluaW5nIHRoZSBNSURJLW92ZXItVVNCIEZ1bmN0aW9uIEluaXRpYWxpemF0aW9uIFN0cmF0ZWd5KipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIFVTQiBmdW5jdGlvbiBpbml0aWFsaXphdGlvbi4gVGhhdCBgREVDTEFSRV9VU0JfRlVOQ1RJT05fSU5JVGAgbWFjcm8uLi4gSSByZW1lbWJlciBpdCBleHBhbmRzIHRvIGB1c2JfZnVuY3Rpb25fcmVnaXN0ZXJgIGFuZCBgdXNiX2Z1bmN0aW9uX3VucmVnaXN0ZXJgLiBOb3RoaW5nIHBhcnRpY3VsYXJseSBncm91bmRicmVha2luZyB0aGVyZTsgdGhleSdyZSBzdGFuZGFyZCBVU0IgZnVuY3Rpb24gcmVnaXN0cmF0aW9uIHJvdXRpbmVzLCBhbmQgdGhleSdyZSwgaW1wb3J0YW50bHksICpub24tc3RhdGljKiwgbWFraW5nIHRoZW0gdmlzaWJsZSBhY3Jvc3MgY29tcGlsYXRpb24gdW5pdHMuIEJ1dCwgbXkgZ3V0IGZlZWxpbmcgdGVsbHMgbWUgdGhlcmUncyBwcm9iYWJseSBhIG1vcmUgc3RyZWFtbGluZWQsIGZvY3VzZWQgYXBwcm9hY2ggZm9yICp0aGlzKiBwYXJ0aWN1bGFyIE1JREkgaW1wbGVtZW50YXRpb24uXG5cbkluc3RlYWQgb2YgdGhpcyBnZW5lcmljIGFwcHJvYWNoLCBpdCBzZWVtcyBtb3JlIGRpcmVjdCB0byBsZXZlcmFnZSB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgbW9yZSBzcGVjaWZpYyB0byB0aGUgTUlESTIgZnVuY3Rpb246IGBmX21pZGkyX3NldF9hbHRgLCBgZl9taWRpMl9iaW5kYCwgYW5kIGBmX21pZGkyX3VuYmluZGAuIEknZCBwcmVmZXIgdG8gdXNlIHRoZSBleGlzdGluZyBpbnRlcmZhY2VzLiBUaGVzZSBzaG91bGQgaGFuZGxlIHRoZSBzcGVjaWZpYyBzZXR1cCwgY29ubmVjdGlvbiwgYW5kIGRpc2Nvbm5lY3Rpb24gbG9naWMgZm9yIHRoZSBNSURJIGVuZHBvaW50LiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBjaGVjayB0aGF0IGBERUNMQVJFX1VTQl9GVU5DVElPTl9JTklUYCBtYWNybyB0byBiZSBjZXJ0YWluIHRoZXJlIGlzbid0IHNvbWUgaGlkZGVuIGNvbXBsZXhpdHkgdGhhdCBJJ20gbWlzc2luZy4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGZ1bGx5IHJlcGxhY2UgaXRzIGJlaGF2aW9yLCBvdGhlcndpc2UgaXQgd2lsbCBhZGQgdW5uZWVkZWQgY29tcGxleGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2ODcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMjozNy43Mzg0OTk0MDZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MTc5Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBERUNMQVJFX1VTQl9GVU5DVElPTl9JTklUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oPTU5OT12b2lkIHVzYl9yZW1vdmVfZnVuY3Rpb24oc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oLTYwOS1cXG5pbmNsdWRlL2xpbnV4L3VzYi9jb21wb3NpdGUuaDo2MTA6I2RlZmluZSBERUNMQVJFX1VTQl9GVU5DVElPTl9JTklUKF9uYW1lLCBfaW5zdF9hbGxvYywgX2Z1bmNfYWxsb2MpXFx0XFxcXFxcbmluY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oLTYxMS1cXHRERUNMQVJFX1VTQl9GVU5DVElPTihfbmFtZSwgX2luc3RfYWxsb2MsIF9mdW5jX2FsbG9jKVxcdFxcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDk6MjI6MzcuNzk2Njg3ODk1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNzg5MTUwMzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTUlESTIgTW9kdWxlIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gdGhpcyBjb2RlIGRlZmluZXMgYG1vZHVsZV9pbml0YCBhbmQgYG1vZHVsZV9leGl0YC4gVGhhdCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gYW5kIGNsZWFudXAgcHJvY2VkdXJlcyBmb3IgYSBtb2R1bGUuIEl0IHNlZW1zIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlIGFyZSBgZl9taWRpMl9hbGxvY19pbnN0YCwgYGZfbWlkaTJfYWxsb2NgLCBgZl9taWRpMl9iaW5kYCwgYGZfbWlkaTJfdW5iaW5kYCwgYGZfbWlkaTJfc2V0X2FsdGAsIGBmX21pZGkyX3NldHVwYCwgYW5kIGBmX21pZGkyX2Rpc2FibGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LiBHaXZlbiB0aGUgZW1waGFzaXMgb24gYmluZGluZyBhbmQgdW5iaW5kaW5nLCBgZl9taWRpMl9iaW5kYCBpcyBsaWtlbHkgYSBjcnVjaWFsIGZ1bmN0aW9uIGZvciBhc3NvY2lhdGluZyB0aGUgbW9kdWxlIHdpdGggcmVsZXZhbnQgaGFyZHdhcmUgb3IgcmVzb3VyY2VzLiBMZXQncyBzdGFydCBieSBjb25maXJtaW5nIHRoYXQgYGZfbWlkaTJfYmluZGAgaXMgYWN0dWFsbHkgZGVmaW5lZCwgYW5kIHRoZW4gZGl2ZSBpbnRvIHdoYXQgaXQgZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMjQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMzo0MS41ODU4NDExN1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MjAxMDU0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmX21pZGkyX2JpbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTE5MTE9c3RhdGljIGludCBmX21pZGkyX2luaXRfbWlkaTJfZXBfb3V0KHN0cnVjdCBmX21pZGkyICptaWRpMiwgaW50IGluZGV4KVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xOTI3LS8qIGdhZGdldCBmdW5jdGlvbiBiaW5kIGNhbGxiYWNrICovXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxOTI4OnN0YXRpYyBpbnQgZl9taWRpMl9iaW5kKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgc3RydWN0IHVzYl9mdW5jdGlvbiAqZilcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTE5Mjkte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0yODA2PXN0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmX21pZGkyX2FsbG9jKHN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgKmZpKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0yODMxLVxcdG1pZGkyLVxcdTAwM2VmdW5jLm5hbWUgPSBcXFwibWlkaTJfZnVuY1xcXCI7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoyODMyOlxcdG1pZGkyLVxcdTAwM2VmdW5jLmJpbmQgPSBmX21pZGkyX2JpbmQ7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0yODMzLVxcdG1pZGkyLVxcdTAwM2VmdW5jLnVuYmluZCA9IGZfbWlkaTJfdW5iaW5kO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMzo0My4yNDc4NTg0MjRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjYzNDY2OTc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSdtIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqQ2hlY2tpbmcgTUlESSBGdW5jdGlvbmFsaXR5KipcblxuQWxyaWdodCwgY29uZmlybWVkLiBgZl9taWRpMl9iaW5kYCBkZWZpbml0ZWx5IGV4aXN0cywgdGhhdCBwYXJ0IG9mIHRoZSBjb2RlIGlzIGdvb2QuIE5vdywgbGV0J3MgcGl2b3QgYW5kIHRha2UgYSBsb29rIGF0IGBmX21pZGkyX2Rpc2FibGVgLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcywgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgYmluZGluZyBmdW5jdGlvbiwgYXMgdGhleSBsaWtlbHkgaGF2ZSBzaWduaWZpY2FudCBpbnRlcmRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIGVuc3VyZSBNSURJIGZ1bmN0aW9uYWxpdHkgaXMgd29ya2luZyBhcyBleHBlY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NjEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyMzo0NS44ODI1MzE0OTZaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MzE0MTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZfbWlkaTJfZGlzYWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTQwNT1zdGF0aWMgaW50IGZfbWlkaTJfc2V0dXAoc3RydWN0IHVzYl9mdW5jdGlvbiAqZm4sXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTE0MzEtLyogZ2FkZ2V0IGZ1bmN0aW9uIGRpc2FibGUgY2FsbGJhY2sgKi9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjE0MzI6c3RhdGljIHZvaWQgZl9taWRpMl9kaXNhYmxlKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmZuKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTQzMy17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTI4MDY9c3RhdGljIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmZfbWlkaTJfYWxsb2Moc3RydWN0IHVzYl9mdW5jdGlvbl9pbnN0YW5jZSAqZmkpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTI4MzYtXFx0bWlkaTItXFx1MDAzZWZ1bmMuc2V0dXAgPSBmX21pZGkyX3NldHVwO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MjgzNzpcXHRtaWRpMi1cXHUwMDNlZnVuYy5kaXNhYmxlID0gZl9taWRpMl9kaXNhYmxlO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMjgzOC1cXHRtaWRpMi1cXHUwMDNlZnVuYy5mcmVlX2Z1bmMgPSBmX21pZGkyX2ZyZWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA5OjIzOjQ1LjkzMTg5OTc5NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTU4MTc2MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBmX21pZGkyX2Rpc2FibGVgIGlzIGRlZmluaXRlbHkgYSB0aGluZy4gVGhhdCBtZWFucyBteSBmb2N1cyBzeW1ib2xzIG5lZWQgdG8gZW5jb21wYXNzIHRoZSBmdWxsIHNldDogYGZfbWlkaTJfYmluZGAsIGBmX21pZGkyX3VuYmluZGAsIGBmX21pZGkyX3NldF9hbHRgLCBhbmQgYGZfbWlkaTJfZGlzYWJsZWAuIEV4Y2VsbGVudC5cblxuTm93LCBsZXQncyBicmVhayBkb3duIHRoZSBjb25maWd1cmF0aW9uIGVsZW1lbnRzLiBJIGhhdmUgdGhlc2Uga2V5IGNvbmZpZ3MgdG8gY29uc2lkZXI6IGBVU0JfR0FER0VUYCwgYFVTQl9DT05GSUdGU2AsIGBTTkRgLCBhbmQgYFVTQl9DT05GSUdGU19GX01JREkyYC4gQWgsIHJpZ2h0LCBgVVNCX0ZfTUlESTJgIGlzIHNlbGVjdGVkIGJ5IGBVU0JfQ09ORklHRlNfRl9NSURJMmAuXG5cbkkgc2hvdWxkIHByb2JhYmx5IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGNydWNpYWwgY29uZmlncyBmbG9hdGluZyBhcm91bmQuIE5vcGUsIGBVU0JfR0FER0VUYCBpcyB0aGUgbWFpbiBvbmUgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBzZWVtcyB0byBidWlsZCBvbiBpdC5cblxuQWxyaWdodCwgYFVTQl9DT05GSUdGU19GX01JREkyYCBpcyBkZXBlbmRlbnQgb24gYm90aCBgVVNCX0NPTkZJR0ZTYCBhbmQgYFNORGAuIFNvLCB0byBiZSBzYWZlIGFuZCBjb21wcmVoZW5zaXZlLCBJICpuZWVkKiB0byBpbmNsdWRlIGBVU0JfQ09ORklHRlNfRl9NSURJMmAsIGBVU0JfQ09ORklHRlNgLCBgU05EYCwgYW5kLCBvYnZpb3VzbHksIGBVU0JfR0FER0VUYC4gSSdsbCBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjayBvbiB0aG9zZSBgVVNCX0NPTkZJR0ZTX0ZfTUlESTJgIGRlcGVuZGVuY2llcyB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNDAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDk6MjM6NTAuODkwMDc4NTg1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDMzMzkxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9DT05GSUdGU19GX01JREkyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9NDMxPWNvbmZpZyBVU0JfQ09ORklHRlNfRl9NSURJXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy00NDQtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6NDQ1OmNvbmZpZyBVU0JfQ09ORklHRlNfRl9NSURJMlxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTQ0Ni1cXHRib29sIFxcXCJNSURJIDIuMCBmdW5jdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDk6MjM6NTEuMzkzNDI1OTE0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzOTgwOTExNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTUlESSAyLjAgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQgc25pcHBldCBlYXJsaWVyLiBMZXQncyByZWNhcDogYFVTQl9DT05GSUdGU19GX01JREkyYCBlc3NlbnRpYWxseSBhY3RzIGFzIHRoZSBwcmltYXJ5IGVuYWJsZXIgZm9yIGBVU0JfRl9NSURJMmAuIEl0J3MgZGVwZW5kZW50IG9uIGBVU0JfQ09ORklHRlNgIHdoaWNoIGl0c2VsZiByZWxpZXMgb24gYFNORGAsIGFuZCBpdCBwdWxscyBpbiBgVVNCX0xJQkNPTVBPU0lURWAgYW5kIGBVU0JfRl9NSURJMmAuIFNvLCBhdCBhIG1pbmltdW0sIHRvIGhhdmUgTUlESSAyLjAgZnVuY3Rpb25hbGl0eSwgd2UgbmVlZCB0byBjb25zaWRlciBgVVNCX0NPTkZJR0ZTX0ZfTUlESTJgLCBgVVNCX0NPTkZJR0ZTYCwgYFNORGAsIGFuZCBvZiBjb3Vyc2UsIGBVU0JfR0FER0VUYC5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXM6IGNhbiBgVVNCX0ZfTUlESTJgIGJlIGVuYWJsZWQgdGhyb3VnaCAqb3RoZXIqIG1lYW5zPyBEb2VzIGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbiBzZWxlY3QgYFVTQl9GX01JREkyYCBkaXJlY3RseT8gV2UgbmVlZCB0byB2ZXJpZnkgaWYgdGhpcyBpcyB0aGUgb25seSBwYXRoLCBvciBpZiB0aGVyZSBhcmUgYWx0ZXJuYXRpdmUgcm91dGVzIHRvIGFjaGlldmluZyB0aGUgc2FtZSBvdXRjb21lLiBVbmRlcnN0YW5kaW5nIHRoaXMgZGVwZW5kZW5jeSBpcyBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTg4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA5OjIzOjU5Ljc5MTUxOTc1OVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk1NzQ4OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IFVTQl9GX01JREkyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9NDQ1PWNvbmZpZyBVU0JfQ09ORklHRlNfRl9NSURJMlxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNDQ5LVxcdHNlbGVjdCBVU0JfTElCQ09NUE9TSVRFXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6NDUwOlxcdHNlbGVjdCBVU0JfRl9NSURJMlxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTQ1MS1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA5OjIzOjU5Ljg0MTEwMDkzOFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTg3MTQ3MjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNSURJMiBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgTUlESTIgY29uZmlndXJhdGlvbiwgYW5kIGluaXRpYWxseSwgSSB0aG91Z2h0IHRoYXQgb25seSBgVVNCX0NPTkZJR0ZTX0ZfTUlESTJgIHdhcyB0aGUga2V5LiBCdXQgd2FpdCwgYFVTQl9GX01JREkyYCBpcyBhICp0cmlzdGF0ZSogdmFyaWFibGUsIG1lYW5pbmcgaXQgY2FuIGJlIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCB3aGljaCBjaGFuZ2VzIHRoaW5ncy4gSWYgYFVTQl9DT05GSUdGU19GX01JREkyYCBpcyBhIEJvb2xlYW4sIGl0IGltcGxpZXMgdGhhdCBpdCBpcyBidWlsdC1pbiB0byBgdXNiX2ZfbWlkaTJgIHdoZW4gYFVTQl9DT05GSUdGU2AgaXMgYnVpbHQgaW4gYW5kIG1vZHVsZSB3aGVuIGBVU0JfQ09ORklHRlNgIGlzIGEgbW9kdWxlLiBIbW0sIGJ1dCBgVVNCX0NPTkZJR0ZTYCBpcyBhbHNvIGEgKnRyaXN0YXRlKi4gT2theSwgZ290IGl0IC0gc28gYFVTQl9DT05GSUdGU19GX01JREkyYCBpcyBhIEJvb2xlYW4sIHdoaWxlIGBVU0JfRl9NSURJMmAgaXMgYSB0cmlzdGF0ZS4gSWYgYFVTQl9DT05GSUdGU2AgaXMgZW5hYmxlZCBhcyAneScgKGJ1aWx0LWluKSwgdGhlbiBgVVNCX0ZfTUlESTJgIHdpbGwgYWxzbyBiZSBmb3JjZWQgdG8gJ3knLiBUaGVyZWZvcmUsIGBVU0JfQ09ORklHRlNfRl9NSURJMmAgKmlzKiB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZW5hYmxlLlxuXG5Ob3csIGxldCdzIHNlZSBpZiB3ZSBuZWVkIGBTTkRfVU1QYC4gSGFuZyBvbi4uLiBgZl9taWRpMi5jYCAqZG9lcyogdXNlIFVNUCwgYnV0IGRvZXMgaXQgZXhwbGljaXRseSBkZXBlbmQgb24gYFNORF9VTVBgPyBUaGF0J3MgdGhlIG5leHQgcXVlc3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTA0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA5OjI0OjA1LjAyODI1MDcyNFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzNjY0Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNORF9VTVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz0yMTI9Y29uZmlnIFVTQl9GX01JREkyXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjEzLVxcdHRyaXN0YXRlXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MjE0OlxcdHNlbGVjdCBTTkRfVU1QXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MjE1OlxcdHNlbGVjdCBTTkRfVU1QX0xFR0FDWV9SQVdNSURJXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjE2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyNDowNS41MTE5MjM5MzNaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk1ODU4NjI5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVTQiBNSURJIDIuMCBHYWRnZXQgRnVuY3Rpb24gZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBgVVNCX0ZfTUlESTJgIGltcGxpY2l0bHkgZW5hYmxlcyBgU05EX1VNUGAgYW5kIGBTTkRfVU1QX0xFR0FDWV9SQVdNSURJYC4gR29vZCB0byBrbm93LCBzaW1wbGlmaWVzIHRoaW5ncy4gSSdtIGZvY3VzaW5nIG9uIGtleSBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhlIG1vZGlmaWVkIGNvZGUncyBlbnRyeSBwb2ludHMgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuXG5cbk15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlc2Ugc3ltYm9sczogYGZfbWlkaTJfYmluZGAsIGBmX21pZGkyX3VuYmluZGAsIGBmX21pZGkyX3NldF9hbHRgLCBgZl9taWRpMl9kaXNhYmxlYCwgYGZfbWlkaTJfc2V0dXBgLCBgZl9taWRpMl9hbGxvY19pbnN0YCwgYW5kIGBmX21pZGkyX2FsbG9jYC5cblxuTm93LCBsZXQncyB0cmFjZSB0aGUgYWxsb2NhdGlvbiBwYXRoLiBJIHdhbnRlZCB0byB2ZXJpZnkgaWYgYGZfbWlkaTJfYWxsb2NfZXBfcmVxc2Agd2FzIGRpcmVjdGx5IGNhbGxlZCBmcm9tIGBmX21pZGkyX2JpbmRgLiBJdCB0dXJucyBvdXQgdGhhdCdzIG5vdCB0aGUgY2FzZS4gYGZfbWlkaTJfYmluZGAgY2FsbHMgYGZfbWlkaTJfaW5pdF9lcGAsIGJ1dCB0aGF0IGRvZXNuJ3QgaGFuZGxlIHRoZSBhbGxvY2F0aW9uLiBUaGUgZW5kcG9pbnQgcmVxdWVzdHMgYXJlIGFsbG9jYXRlZCBpbiBgZl9taWRpMl9zdGFydF9lcHNgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGZfbWlkaTJfc2V0X2FsdGAuIFNvLCBgZl9taWRpMl9zZXRfYWx0YCBpcyB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgdG8gdGhlIGNvZGUgSSdtIHJlYWxseSBpbnRlcmVzdGVkIGluLlxuXG5OZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgb3RoZXIgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gYGZfbWlkaTJfc2V0dXBgIGhhbmRsZXMgY29udHJvbCByZXF1ZXN0cywgYW5kIGBmX21pZGkyX2Rpc2FibGVgIHN0b3BzIHRoZSBlbmRwb2ludHMuXG5cbkNvbnNpZGVyaW5nIGFsbCB0aGlzLCBteSBmb2N1cyBzeW1ib2xzIHJlZmluZSB0bzogYGZfbWlkaTJfc2V0X2FsdGAsIGBmX21pZGkyX2Rpc2FibGVgLCBgZl9taWRpMl9iaW5kYCwgYW5kIGBmX21pZGkyX3VuYmluZGAuIEkndmUgZXhjbHVkZWQgYGZfbWlkaTJfc2V0dXBgIHNpbmNlIGl0IGRvZXNuJ3Qgc2VlbSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBpc3N1ZSBhbmQsIGFzIGEgY29udHJvbCBoYW5kbGVyLCB3aWxsIGJlIGZ1enppbmcgd2l0aCBhIGRpZmZlcmVudCBzZXQgb2YgdGFyZ2V0cy5cblxuTm93LCBpcyBgZl9taWRpMl9zZXRfYWx0YCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nPyBZZXMsIGFic29sdXRlbHkuIEl0J3MgYSBjYWxsYmFjayBmb3IgdGhlIFwic2V0IGFsdGVybmF0ZSBzZXR0aW5nXCIgb3BlcmF0aW9uLCB0cmlnZ2VyZWQgYnkgdGhlIFVTQiBob3N0LiBUaGlzIGlzIGEgY3J1Y2lhbCBlbnRyeSBwb2ludCBmb3IgZnV6emluZyB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzLlxuXG5UaGVyZWZvcmUsIHRoZSBmaW5hbCBhc3Nlc3NtZW50IGlzOlxuXG5Xb3J0aEZ1enppbmc6IFRydWVcbkZvY3VzU3ltYm9sczogW1wiZl9taWRpMl9zZXRfYWx0XCIsIFwiZl9taWRpMl9kaXNhYmxlXCIsIFwiZl9taWRpMl9iaW5kXCIsIFwiZl9taWRpMl91bmJpbmRcIl1cbkVuYWJsZUNvbmZpZ3M6IFtcIlVTQl9HQURHRVRcIiwgXCJVU0JfQ09ORklHRlNcIiwgXCJTTkRcIiwgXCJVU0JfQ09ORklHRlNfRl9NSURJMlwiXVxuUmVhc29uaW5nOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiBlbmRwb2ludCByZXF1ZXN0cyBpbiB0aGUgVVNCIE1JREkgMi4wIGdhZGdldCBmdW5jdGlvbi4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHRocm91Z2ggVVNCIGdhZGdldCBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIHNldHRpbmcgYWx0ZXJuYXRlIHNldHRpbmdzIChmX21pZGkyX3NldF9hbHQpIGFuZCBkaXNhYmxpbmcgdGhlIGZ1bmN0aW9uIChmX21pZGkyX2Rpc2FibGUpLlwiXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTgwLCJPdXRwdXRUb2tlbnMiOjE2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwOToyNDoxNC40NzA1MTI3MzZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTIzNTg3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0dBREdFVFwiLFxuICAgIFwiVVNCX0NPTkZJR0ZTXCIsXG4gICAgXCJTTkRcIixcbiAgICBcIlVTQl9DT05GSUdGU19GX01JREkyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZl9taWRpMl9zZXRfYWx0XCIsXG4gICAgXCJmX21pZGkyX2Rpc2FibGVcIixcbiAgICBcImZfbWlkaTJfYmluZFwiLFxuICAgIFwiZl9taWRpMl91bmJpbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiBlbmRwb2ludCByZXF1ZXN0cyBpbiB0aGUgVVNCIE1JREkgMi4wIGdhZGdldCBmdW5jdGlvbi4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHRocm91Z2ggVVNCIGdhZGdldCBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIHNldHRpbmcgYWx0ZXJuYXRlIHNldHRpbmdzIChmX21pZGkyX3NldF9hbHQpIGFuZCBkaXNhYmxpbmcgdGhlIGZ1bmN0aW9uIChmX21pZGkyX2Rpc2FibGUpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9HQURHRVRcIixcbiAgICBcIlVTQl9DT05GSUdGU1wiLFxuICAgIFwiU05EXCIsXG4gICAgXCJVU0JfQ09ORklHRlNfRl9NSURJMlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZfbWlkaTJfc2V0X2FsdFwiLFxuICAgIFwiZl9taWRpMl9kaXNhYmxlXCIsXG4gICAgXCJmX21pZGkyX2JpbmRcIixcbiAgICBcImZfbWlkaTJfdW5iaW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgb2YgZW5kcG9pbnQgcmVxdWVzdHMgaW4gdGhlIFVTQiBNSURJIDIuMCBnYWRnZXQgZnVuY3Rpb24uIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIFVTQiBnYWRnZXQgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiBzZXR0aW5nIGFsdGVybmF0ZSBzZXR0aW5ncyAoZl9taWRpMl9zZXRfYWx0KSBhbmQgZGlzYWJsaW5nIHRoZSBmdW5jdGlvbiAoZl9taWRpMl9kaXNhYmxlKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6czl9[1] Phase: Succeeded StartedAt: 2026-07-29 09:24:26 +0000 UTC FinishedAt: 2026-07-29 09:24:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6czl9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-29 09:24:26 +0000 UTC FinishedAt: 2026-07-29 09:24:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6czl9[2] Phase: Succeeded StartedAt: 2026-07-29 09:24:26 +0000 UTC FinishedAt: 2026-07-29 13:24:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 09:24:26 +0000 UTC FinishedAt: 2026-07-29 13:24:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 09:24:27 +0000 UTC FinishedAt: 2026-07-29 09:25:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 09:24:27 +0000 UTC FinishedAt: 2026-07-29 09:24:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"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-workflow6czl9/series-workflow6czl9-convert-artifact-111090618/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 09:25:04 +0000 UTC FinishedAt: 2026-07-29 09:46:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 09:25:05 +0000 UTC FinishedAt: 2026-07-29 09:46:47 +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:*71607244-80ad-4b22-baf8-0a4d9c0674fa,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-workflow6czl9/series-workflow6czl9-convert-artifact-111090618/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": "e63bd746-7148-40bb-a628-31493bed8383", "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-workflow6czl9/series-workflow6czl9-build-action-1088180584/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 09:25:05 +0000 UTC FinishedAt: 2026-07-29 09:46:37 +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:*71607244-80ad-4b22-baf8-0a4d9c0674fa,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-workflow6czl9/series-workflow6czl9-convert-artifact-111090618/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": "e63bd746-7148-40bb-a628-31493bed8383", "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-workflow6czl9/series-workflow6czl9-build-action-1088180584/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 09:46:47 +0000 UTC FinishedAt: 2026-07-29 09:46:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 09:46:47 +0000 UTC FinishedAt: 2026-07-29 09:46:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 09:46:47 +0000 UTC FinishedAt: 2026-07-29 09:46:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 09:46:47 +0000 UTC FinishedAt: 2026-07-29 09:46:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-workflow6czl9/series-workflow6czl9-convert-artifact-3676389653/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 09:46:57 +0000 UTC FinishedAt: 2026-07-29 09:48:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 09:46:57 +0000 UTC FinishedAt: 2026-07-29 09:48:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e63bd746-7148-40bb-a628-31493bed8383,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-workflow6czl9/series-workflow6czl9-build-action-1088180584/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-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 09:48:57 +0000 UTC FinishedAt: 2026-07-29 09:48:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 09:48:57 +0000 UTC FinishedAt: 2026-07-29 09:48:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 09:48:57 +0000 UTC FinishedAt: 2026-07-29 10:17:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 09:48:57 +0000 UTC FinishedAt: 2026-07-29 10:17:24 +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:*71607244-80ad-4b22-baf8-0a4d9c0674fa,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-workflow6czl9/series-workflow6czl9-convert-artifact-3676389653/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": "ef7e56e1-5dce-4f66-bc53-944e5cc5f0f4", "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-workflow6czl9/series-workflow6czl9-build-action-3790596001/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 09:48:57 +0000 UTC FinishedAt: 2026-07-29 10:16:49 +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:*71607244-80ad-4b22-baf8-0a4d9c0674fa,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-workflow6czl9/series-workflow6czl9-convert-artifact-3676389653/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": "ef7e56e1-5dce-4f66-bc53-944e5cc5f0f4", "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-workflow6czl9/series-workflow6czl9-build-action-3790596001/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 10:17:24 +0000 UTC FinishedAt: 2026-07-29 10:17:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 10:17:24 +0000 UTC FinishedAt: 2026-07-29 10:17:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 10:17:24 +0000 UTC FinishedAt: 2026-07-29 10:19:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 10:17:24 +0000 UTC FinishedAt: 2026-07-29 10:19:18 +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:*ef7e56e1-5dce-4f66-bc53-944e5cc5f0f4,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-workflow6czl9/series-workflow6czl9-build-action-3790596001/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-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 10:19:28 +0000 UTC FinishedAt: 2026-07-29 13:24:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 10:19:28 +0000 UTC FinishedAt: 2026-07-29 13:24:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"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:*e63bd746-7148-40bb-a628-31493bed8383,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ef7e56e1-5dce-4f66-bc53-944e5cc5f0f4,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-workflow6czl9/series-workflow6czl9-build-action-1088180584/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-workflow6czl9/series-workflow6czl9-build-action-3790596001/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 10:19:28 +0000 UTC FinishedAt: 2026-07-29 10:19:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 10:19:28 +0000 UTC FinishedAt: 2026-07-29 10:19:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"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-workflow6czl9/series-workflow6czl9-convert-artifact-646784250/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 10:19:28 +0000 UTC FinishedAt: 2026-07-29 10:19:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 10:19:28 +0000 UTC FinishedAt: 2026-07-29 10:19:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 10:19:28 +0000 UTC FinishedAt: 2026-07-29 10:19:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 10:19:38 +0000 UTC FinishedAt: 2026-07-29 13:24:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6czl9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["f_midi2_set_alt","f_midi2_disable","f_midi2_bind","f_midi2_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","SND","USB_CONFIGFS_F_MIDI2"],"series_id":"dffb511f-6ee1-43ed-8c4e-7fb553ab816e","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-07-29 10:19:38 +0000 UTC FinishedAt: 2026-07-29 13:24:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e63bd746-7148-40bb-a628-31493bed8383,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ef7e56e1-5dce-4f66-bc53-944e5cc5f0f4,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-workflow6czl9/series-workflow6czl9-build-action-1088180584/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-workflow6czl9/series-workflow6czl9-build-action-3790596001/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-workflow6czl9/series-workflow6czl9-convert-artifact-646784250/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,}