Name: series-workflowxsbpt Phase: Succeeded StartedAt: 2026-08-31 06:42:12 +0000 UTC FinishedAt: 2026-08-31 10:57:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxsbpt[0] Phase: Succeeded StartedAt: 2026-08-31 06:42:12 +0000 UTC FinishedAt: 2026-08-31 07:16:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxsbpt[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 06:42:12 +0000 UTC FinishedAt: 2026-08-31 07:16:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SKB_EXTENSIONS", "XFRM", "MCTP", "MCTP_FLOWS", "MCTP_TRANSPORT_I2C" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SKB_EXTENSIONS", "XFRM", "MCTP", "MCTP_FLOWS", "MCTP_TRANSPORT_I2C" ], "series_id": "2dd6003a-8634-4ba1-bfb1-02961777d345" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__skb_ext_del", "__skb_ext_put" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NLQl9FWFRFTlNJT05TJiMzNDssCiAgICAmIzM0O1hGUk0mIzM0OywKICAgICYjMzQ7TUNUUCYjMzQ7LAogICAgJiMzNDtNQ1RQX0ZMT1dTJiMzNDssCiAgICAmIzM0O01DVFBfVFJBTlNQT1JUX0kyQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc2tiX2V4dF9kZWwmIzM0OywKICAgICYjMzQ7X19za2JfZXh0X3B1dCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX3NrYl9leHRfZGVsKClgIGFuZCBoZWxwZXIgZnVuY3Rpb25zIGBza2JfZXh0X3B1dF9zcCgpYCAvIGBza2JfZXh0X3B1dF9tY3RwKClgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AgdG8gcHJvcGVybHkgcmVsZWFzZSByZWZlcmVuY2VzIChgbWN0cF9rZXlfdW5yZWZgIGFuZCBgeGZybV9zdGF0ZV9wdXRgKSBhbmQgemVybyBvdXQgZmllbGRzIChgc3AtXHUwMDNlbGVuID0gMGAsIGBmbG93LVx1MDAzZWtleSA9IE5VTExgKSB3aGVuIHNrYiBleHRlbnNpb25zIGFyZSByZW1vdmVkLlxuXG5UaGVzZSBjaGFuZ2VzIHBlcnRhaW4gc3RyaWN0bHkgdG8gcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsaWZlY3ljbGUvY2xlYW51cCBtYW5hZ2VtZW50IG9mIHNrYiBleHRlbnNpb24gZGF0YS4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGFsbG9jYXRpb25zLCBkYXRhIGV4cG9zdXJlIHRvIHVzZXIgc3BhY2UsIG9yIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uLiBBbnkgcG90ZW50aWFsIGRlZmVjdHMgaW4gdGhpcyBjb2RlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgdW5yZWYsIG9yIG1lbW9yeSBsZWFrcykgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4gb3Igc3RhbmRhcmQgcmVmY291bnQgdHJhY2tpbmcsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBza2IgZXh0ZW5zaW9uIGRlbGV0aW9uIGFuZCBjbGVhbnVwIGxvZ2ljIGluIGBfX3NrYl9leHRfZGVsYCwgYHNrYl9leHRfcHV0X3NwYCwgYW5kIGBza2JfZXh0X3B1dF9tY3RwYCwgcHJvcGVybHkgaGFuZGxpbmcgcmVmZXJlbmNlIGNvdW50cyBhbmQgcmVzb3VyY2UgZGVhbGxvY2F0aW9uIGZvciBNQ1RQIGZsb3dzIGFuZCBJUHNlYy9YRlJNIHNlY3VyaXR5IHBhdGhzIHdoZW4gcmVtb3ZpbmcgYWN0aXZlIGV4dGVuc2lvbnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWNkYzlmNDhmNDE1YTlmZmU5MjJlMGIyNzEyYWVmOGNlZTU4YmE4OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDA3OjE0OjM4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IDk2NmFmM2JlZWQ5NGQuLmFiMTk1Yjk5Yzg1MzAgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC03MjM2LDE2ICYjNDM7NzIzNiwyMyBAQCBzdGF0aWMgdm9pZCBza2JfZXh0X3B1dF9zcChzdHJ1Y3Qgc2VjX3BhdGggKnNwKVxuIHtcbiBcdHVuc2lnbmVkIGludCBpO1xuIFxuJiM0MztcdGlmICghc3AtXHUwMDNlbGVuKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNwLVx1MDAzZWxlbjsgaSYjNDM7JiM0MzspXG4gXHRcdHhmcm1fc3RhdGVfcHV0KHNwLVx1MDAzZXh2ZWNbaV0pO1xuJiM0MztcdHNwLVx1MDAzZWxlbiA9IDA7XG4gfVxuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfTUNUUF9GTE9XU1xuIHN0YXRpYyB2b2lkIHNrYl9leHRfcHV0X21jdHAoc3RydWN0IG1jdHBfZmxvdyAqZmxvdylcbiB7XG4tXHRpZiAoZmxvdy1cdTAwM2VrZXkpXG4tXHRcdG1jdHBfa2V5X3VucmVmKGZsb3ctXHUwMDNla2V5KTtcbiYjNDM7XHRpZiAoIWZsb3ctXHUwMDNla2V5KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRtY3RwX2tleV91bnJlZihmbG93LVx1MDAzZWtleSk7XG4mIzQzO1x0Zmxvdy1cdTAwM2VrZXkgPSBOVUxMO1xuIH1cbiAjZW5kaWZcbiBcbkBAIC03MjU3LDE1ICYjNDM7NzI2NCwyMCBAQCB2b2lkIF9fc2tiX2V4dF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxuIFx0aWYgKHNrYi1cdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyA9PSAwKSB7XG4gXHRcdHNrYi1cdTAwM2VleHRlbnNpb25zID0gTlVMTDtcbiBcdFx0X19za2JfZXh0X3B1dChleHQpO1xuLSNpZmRlZiBDT05GSUdfWEZSTVxuLVx0fSBlbHNlIGlmIChpZCA9PSBTS0JfRVhUX1NFQ19QQVRIIFx1MDAyNlx1MDAyNlxuLVx0XHQgICByZWZjb3VudF9yZWFkKFx1MDAyNmV4dC1cdTAwM2VyZWZjbnQpID09IDEpIHtcbi1cdFx0c3RydWN0IHNlY19wYXRoICpzcCA9IHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfU0VDX1BBVEgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcbi1cdFx0c2tiX2V4dF9wdXRfc3Aoc3ApO1xuLVx0XHRzcC1cdTAwM2VsZW4gPSAwO1xuJiM0MztcdGlmIChyZWZjb3VudF9yZWFkKFx1MDAyNmV4dC1cdTAwM2VyZWZjbnQpIFx1MDAzZSAxKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19YRlJNXG4mIzQzO1x0aWYgKGlkID09IFNLQl9FWFRfU0VDX1BBVEgpXG4mIzQzO1x0XHRza2JfZXh0X3B1dF9zcChza2JfZXh0X2dldF9wdHIoZXh0LCBTS0JfRVhUX1NFQ19QQVRIKSk7XG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZkZWYgQ09ORklHX01DVFBfRkxPV1NcbiYjNDM7XHRpZiAoaWQgPT0gU0tCX0VYVF9NQ1RQKVxuJiM0MztcdFx0c2tiX2V4dF9wdXRfbWN0cChza2JfZXh0X2dldF9wdHIoZXh0LCBTS0JfRVhUX01DVFApKTtcbiAjZW5kaWZcbi1cdH1cbiB9XG4gRVhQT1JUX1NZTUJPTChfX3NrYl9leHRfZGVsKTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTS0JfRVhURU5TSU9OUyYjMzQ7LAogICAgJiMzNDtYRlJNJiMzNDssCiAgICAmIzM0O01DVFAmIzM0OywKICAgICYjMzQ7TUNUUF9GTE9XUyYjMzQ7LAogICAgJiMzNDtNQ1RQX1RSQU5TUE9SVF9JMkMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3NrYl9leHRfZGVsJiMzNDssCiAgICAmIzM0O19fc2tiX2V4dF9wdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBza2IgZXh0ZW5zaW9uIGRlbGV0aW9uIGFuZCBjbGVhbnVwIGxvZ2ljIGluIGBfX3NrYl9leHRfZGVsYCwgYHNrYl9leHRfcHV0X3NwYCwgYW5kIGBza2JfZXh0X3B1dF9tY3RwYCwgcHJvcGVybHkgaGFuZGxpbmcgcmVmZXJlbmNlIGNvdW50cyBhbmQgcmVzb3VyY2UgZGVhbGxvY2F0aW9uIGZvciBNQ1RQIGZsb3dzIGFuZCBJUHNlYy9YRlJNIHNlY3VyaXR5IHBhdGhzIHdoZW4gcmVtb3ZpbmcgYWN0aXZlIGV4dGVuc2lvbnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWNkYzlmNDhmNDE1YTlmZmU5MjJlMGIyNzEyYWVmOGNlZTU4YmE4OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDA3OjE0OjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCA5NjZhZjNiZWVkOTRkLi5hYjE5NWI5OWM4NTMwIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtNzIzNiwxNiAmIzQzOzcyMzYsMjMgQEAgc3RhdGljIHZvaWQgc2tiX2V4dF9wdXRfc3Aoc3RydWN0IHNlY19wYXRoICpzcCkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAomIzQzOwlpZiAoIXNwLSZndDtsZW4pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IHNwLSZndDtsZW47IGkmIzQzOyYjNDM7KQogCQl4ZnJtX3N0YXRlX3B1dChzcC0mZ3Q7eHZlY1tpXSk7CiYjNDM7CXNwLSZndDtsZW4gPSAwOwogfQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTUNUUF9GTE9XUwogc3RhdGljIHZvaWQgc2tiX2V4dF9wdXRfbWN0cChzdHJ1Y3QgbWN0cF9mbG93ICpmbG93KQogewotCWlmIChmbG93LSZndDtrZXkpCi0JCW1jdHBfa2V5X3VucmVmKGZsb3ctJmd0O2tleSk7CiYjNDM7CWlmICghZmxvdy0mZ3Q7a2V5KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltY3RwX2tleV91bnJlZihmbG93LSZndDtrZXkpOwomIzQzOwlmbG93LSZndDtrZXkgPSBOVUxMOwogfQogI2VuZGlmCiAKQEAgLTcyNTcsMTUgJiM0Mzs3MjY0LDIwIEBAIHZvaWQgX19za2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpCiAJaWYgKHNrYi0mZ3Q7YWN0aXZlX2V4dGVuc2lvbnMgPT0gMCkgewogCQlza2ItJmd0O2V4dGVuc2lvbnMgPSBOVUxMOwogCQlfX3NrYl9leHRfcHV0KGV4dCk7Ci0jaWZkZWYgQ09ORklHX1hGUk0KLQl9IGVsc2UgaWYgKGlkID09IFNLQl9FWFRfU0VDX1BBVEggJmFtcDsmYW1wOwotCQkgICByZWZjb3VudF9yZWFkKCZhbXA7ZXh0LSZndDtyZWZjbnQpID09IDEpIHsKLQkJc3RydWN0IHNlY19wYXRoICpzcCA9IHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfU0VDX1BBVEgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiAKLQkJc2tiX2V4dF9wdXRfc3Aoc3ApOwotCQlzcC0mZ3Q7bGVuID0gMDsKJiM0MzsJaWYgKHJlZmNvdW50X3JlYWQoJmFtcDtleHQtJmd0O3JlZmNudCkgJmd0OyAxKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfWEZSTQomIzQzOwlpZiAoaWQgPT0gU0tCX0VYVF9TRUNfUEFUSCkKJiM0MzsJCXNrYl9leHRfcHV0X3NwKHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfU0VDX1BBVEgpKTsKJiM0MzsjZW5kaWYKJiM0MzsjaWZkZWYgQ09ORklHX01DVFBfRkxPV1MKJiM0MzsJaWYgKGlkID09IFNLQl9FWFRfTUNUUCkKJiM0MzsJCXNrYl9leHRfcHV0X21jdHAoc2tiX2V4dF9nZXRfcHRyKGV4dCwgU0tCX0VYVF9NQ1RQKSk7CiAjZW5kaWYKLQl9CiB9CiBFWFBPUlRfU1lNQk9MKF9fc2tiX2V4dF9kZWwpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGlzIHBhdGNoLCBhcyBpZiBJIHdlcmUgcHJvY2Vzc2luZyBpdCBteXNlbGY6CgoqKlBhdGNoIEFuYWx5c2lzIGFuZCBDb250ZXh0dWFsIFJldmlldyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L2NvcmUvc2tidWZmLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMsIHBhcnRpY3VsYXJseSBzaW5jZSBpdCBzZWVtcyB0byBiZSBhZmZlY3RpbmcgYHNrYl9leHRfcHV0X3NwYCwgYHNrYl9leHRfcHV0X21jdHBgLCBhbmQgYF9fc2tiX2V4dF9kZWxgLiBUaG9zZSBmdW5jdGlvbnMgYXJlIGtleSwgc28gSSBpbW1lZGlhdGVseSB3YW50IHRvIGdyYXNwIHRoZWlyIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIFNLQiAoU29ja2V0IEJ1ZmZlcikgYXJjaGl0ZWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIGhvdyBleHRlbnNpb25zIGFuZCBtZXRhZGF0YSBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIFNLQiBzdHJ1Y3R1cmUuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IHNvbWUgbW9yZSBpbmZvIG9uIGV4YWN0bHkgd2hhdCYjMzk7cyBiZWluZyB0d2Vha2VkLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIHplcm8gaW4gb24gdGhlIGFyZWEgb2YgYG5ldC9jb3JlL3NrYnVmZi5jYCBhcm91bmQgbGluZSA3MjM2LiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSBhbmQgcGlucG9pbnQgcHJlY2lzZWx5IHdoZXJlIHRoZSBjaGFuZ2VzIGFyZSBiZWluZyBtYWRlLCBzbyBJIGNhbiBzdGFydCBmb3JtdWxhdGluZyBhIGh5cG90aGVzaXMgYWJvdXQgd2hhdCB0aGUgcGF0Y2ggaXMgdHJ5aW5nIHRvIGFjaGlldmUgYW5kIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBJIGFudGljaXBhdGUgdGhhdCB0aGUgY29kZSBpbiB0aGUgaW1tZWRpYXRlIHZpY2luaXR5IGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgdW5kZXJseWluZyBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcyMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzIyMDpcdFx0XHRcdHJldHVybiBOVUxMO1xuNzIyMTpcdFx0fVxuNzIyMjpcdFxuNzIyMzpcdFx0bmV3bGVuID0gbmV3b2ZmICYjNDM7IHNrYl9leHRfdHlwZV9sZW5baWRdO1xuNzIyNDpcdFx0bmV3LVx1MDAzZWNodW5rcyA9IG5ld2xlbjtcbjcyMjU6XHRcdG5ldy1cdTAwM2VvZmZzZXRbaWRdID0gbmV3b2ZmO1xuNzIyNjpcdHNldF9hY3RpdmU6XG43MjI3Olx0XHRza2ItXHUwMDNlc2xvd19ncm8gPSAxO1xuNzIyODpcdFx0c2tiLVx1MDAzZWV4dGVuc2lvbnMgPSBuZXc7XG43MjI5Olx0XHRza2ItXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgfD0gMSBcdTAwM2NcdTAwM2MgaWQ7XG43MjMwOlx0XHRyZXR1cm4gc2tiX2V4dF9nZXRfcHRyKG5ldywgaWQpO1xuNzIzMTpcdH1cbjcyMzI6XHRFWFBPUlRfU1lNQk9MKHNrYl9leHRfYWRkKTtcbjcyMzM6XHRcbjcyMzQ6XHQjaWZkZWYgQ09ORklHX1hGUk1cbjcyMzU6XHRzdGF0aWMgdm9pZCBza2JfZXh0X3B1dF9zcChzdHJ1Y3Qgc2VjX3BhdGggKnNwKVxuNzIzNjpcdHtcbjcyMzc6XHRcdHVuc2lnbmVkIGludCBpO1xuNzIzODpcdFxuNzIzOTpcdFx0aWYgKCFzcC1cdTAwM2VsZW4pXG43MjQwOlx0XHRcdHJldHVybjtcbjcyNDE6XHRcbjcyNDI6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNwLVx1MDAzZWxlbjsgaSYjNDM7JiM0MzspXG43MjQzOlx0XHRcdHhmcm1fc3RhdGVfcHV0KHNwLVx1MDAzZXh2ZWNbaV0pO1xuNzI0NDpcdFx0c3AtXHUwMDNlbGVuID0gMDtcbjcyNDU6XHR9XG43MjQ2Olx0I2VuZGlmXG43MjQ3Olx0XG43MjQ4Olx0I2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXG43MjQ5Olx0c3RhdGljIHZvaWQgc2tiX2V4dF9wdXRfbWN0cChzdHJ1Y3QgbWN0cF9mbG93ICpmbG93KVxuNzI1MDpcdHtcbjcyNTE6XHRcdGlmICghZmxvdy1cdTAwM2VrZXkpXG43MjUyOlx0XHRcdHJldHVybjtcbjcyNTM6XHRcbjcyNTQ6XHRcdG1jdHBfa2V5X3VucmVmKGZsb3ctXHUwMDNla2V5KTtcbjcyNTU6XHRcdGZsb3ctXHUwMDNla2V5ID0gTlVMTDtcbjcyNTY6XHR9XG43MjU3Olx0I2VuZGlmXG43MjU4Olx0XG43MjU5Olx0dm9pZCBfX3NrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcbjcyNjA6XHR7XG43MjYxOlx0XHRzdHJ1Y3Qgc2tiX2V4dCAqZXh0ID0gc2tiLVx1MDAzZWV4dGVuc2lvbnM7XG43MjYyOlx0XG43MjYzOlx0XHRza2ItXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgXHUwMDI2PSB+KDEgXHUwMDNjXHUwMDNjIGlkKTtcbjcyNjQ6XHRcdGlmIChza2ItXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgPT0gMCkge1xuNzI2NTpcdFx0XHRza2ItXHUwMDNlZXh0ZW5zaW9ucyA9IE5VTEw7XG43MjY2Olx0XHRcdF9fc2tiX2V4dF9wdXQoZXh0KTtcbjcyNjc6XHRcdFx0cmV0dXJuO1xuNzI2ODpcdFx0fVxuNzI2OTpcdFxuNzI3MDpcdFx0aWYgKHJlZmNvdW50X3JlYWQoXHUwMDI2ZXh0LVx1MDAzZXJlZmNudCkgXHUwMDNlIDEpXG43MjcxOlx0XHRcdHJldHVybjtcbjcyNzI6XHRcbjcyNzM6XHQjaWZkZWYgQ09ORklHX1hGUk1cbjcyNzQ6XHRcdGlmIChpZCA9PSBTS0JfRVhUX1NFQ19QQVRIKVxuNzI3NTpcdFx0XHRza2JfZXh0X3B1dF9zcChza2JfZXh0X2dldF9wdHIoZXh0LCBTS0JfRVhUX1NFQ19QQVRIKSk7XG43Mjc2Olx0I2VuZGlmXG43Mjc3Olx0I2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXG43Mjc4Olx0XHRpZiAoaWQgPT0gU0tCX0VYVF9NQ1RQKVxuNzI3OTpcdFx0XHRza2JfZXh0X3B1dF9tY3RwKHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfTUNUUCkpO1xuNzI4MDpcdCNlbmRpZlxuNzI4MTpcdH1cbjcyODI6XHRFWFBPUlRfU1lNQk9MKF9fc2tiX2V4dF9kZWwpO1xuNzI4MzpcdFxuNzI4NDpcdHZvaWQgX19za2JfZXh0X3B1dChzdHJ1Y3Qgc2tiX2V4dCAqZXh0KVxuNzI4NTpcdHtcbjcyODY6XHRcdC8qIElmIHRoaXMgaXMgbGFzdCBjbG9uZSwgbm90aGluZyBjYW4gaW5jcmVtZW50XG43Mjg3Olx0XHQgKiBpdCBhZnRlciBjaGVjayBwYXNzZXMuICBBdm9pZHMgb25lIGF0b21pYyBvcC5cbjcyODg6XHRcdCAqL1xuNzI4OTpcdFx0aWYgKHJlZmNvdW50X3JlYWQoXHUwMDI2ZXh0LVx1MDAzZXJlZmNudCkgPT0gMSlcbjcyOTA6XHRcdFx0Z290byBmcmVlX25vdztcbjcyOTE6XHRcbjcyOTI6XHRcdGlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmV4dC1cdTAwM2VyZWZjbnQpKVxuNzI5MzpcdFx0XHRyZXR1cm47XG43Mjk0Olx0ZnJlZV9ub3c6XG43Mjk1Olx0I2lmZGVmIENPTkZJR19YRlJNXG43Mjk2Olx0XHRpZiAoX19za2JfZXh0X2V4aXN0KGV4dCwgU0tCX0VYVF9TRUNfUEFUSCkpXG43Mjk3Olx0XHRcdHNrYl9leHRfcHV0X3NwKHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfU0VDX1BBVEgpKTtcbjcyOTg6XHQjZW5kaWZcbjcyOTk6XHQjaWZkZWYgQ09ORklHX01DVFBfRkxPV1NcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTA4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIElzc3VlcyB3aXRoIGBfX3NrYl9leHRfZGVsYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGBfX3NrYl9leHRfZGVsYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGFsbCB0aGUgY2FsbGVycyBvZiBgX19za2JfZXh0X2RlbGAgYW5kIGBza2JfZXh0X2RlbGAgZGlyZWN0bHkuIFRoYXQmIzM5O3MgdGhlIG1vc3Qgb2J2aW91cyBzdGFydGluZyBwb2ludCB0byBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkIGFuZCwgdGhlcmVmb3JlLCB3aGVyZSBhbnkgaXNzdWVzIG1pZ2h0IG1hbmlmZXN0LgoKQmV5b25kIGEgZGlyZWN0IGNhbGwgYW5hbHlzaXMsIEkgc2hvdWxkIGNvbnNpZGVyIHRoZSBicm9hZGVyIGNvbnRleHQgb2Ygc29tZSByZWxldmFudCBjb25maWd1cmF0aW9ucywgc3BlY2lmaWNhbGx5IGhvdyB0aGlzIG1pZ2h0IGludGVyYWN0IHdpdGggU2VjdXJpdHkgQ29udGV4dHMsIGFuZCBwb3RlbnRpYWxseSB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgTXVsdGljYXN0IERhdGEgQ2hhbm5lbCBvdmVyIFRyYW5zcG9ydCBQcm90b2NvbCwgb3IgTUNUUCBmbG93cywgYW5kIGFsc28gd2l0aCBYRlJNLCBhbmQgU0tCIEV4dGVuc2lvbnMuCgpUbyBzdGFydCwgSSYjMzk7bGwgbmVlZCB0byBydW4gYSBgZ3JlcGAgZm9yIGJvdGggYF9fc2tiX2V4dF9kZWxgIGFuZCBgc2tiX2V4dF9kZWxgIHRocm91Z2hvdXQgdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2ggYW5kIHByZWNpc2UgdG8gaWRlbnRpZnkgYWxsIGluc3RhbmNlcy4gVGhpcyB3aWxsIGhvcGVmdWxseSBwcm92aWRlIGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGl0cyB1c2FnZSBhbmQgYXNzaXN0IGluIHBpbnBvaW50aW5nIHRoZSBjcml0aWNhbCBhcmVhcyB0byBmb2N1cyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfZXh0X2RlbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTUwODM9dm9pZCAqc2tiX2V4dF9hZGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA4NDp2b2lkIF9fc2tiX2V4dF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA4NS12b2lkIF9fc2tiX2V4dF9wdXQoc3RydWN0IHNrYl9leHQgKmV4dCk7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MTE3PXN0YXRpYyBpbmxpbmUgYm9vbCBza2JfZXh0X2V4aXN0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMjEtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxMjI6c3RhdGljIGlubGluZSB2b2lkIHNrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEyMy17XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMjQtXHRpZiAoc2tiX2V4dF9leGlzdChza2IsIGlkKSlcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTEyNTpcdFx0X19za2JfZXh0X2RlbChza2IsIGlkKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEyNi19XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MTU0PXN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X3Jlc2V0KHN0cnVjdCBza19idWZmICpza2IpIHt9XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxNTU6c3RhdGljIGlubGluZSB2b2lkIHNrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGludCB1bnVzZWQpIHt9XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxNTYtc3RhdGljIGlubGluZSB2b2lkIF9fc2tiX2V4dF9jb3B5KHN0cnVjdCBza19idWZmICpkLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqcykge31cbi0tXG5pbmNsdWRlL25ldC94ZnJtLmg9MTE5Nz1zZWNwYXRoX3Jlc2V0KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9uZXQveGZybS5oLTExOTktI2lmZGVmIENPTkZJR19YRlJNXG5pbmNsdWRlL25ldC94ZnJtLmg6MTIwMDpcdHNrYl9leHRfZGVsKHNrYiwgU0tCX0VYVF9TRUNfUEFUSCk7XG5pbmNsdWRlL25ldC94ZnJtLmgtMTIwMS0jZW5kaWZcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTE1NT1zdGF0aWMgdm9pZCBuZl9icmlkZ2VfaW5mb19mcmVlKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE1Ni17XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjE1NzpcdHNrYl9leHRfZGVsKHNrYiwgU0tCX0VYVF9CUklER0VfTkYpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xNTgtfVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTcyNDk9c3RhdGljIHZvaWQgc2tiX2V4dF9wdXRfbWN0cChzdHJ1Y3QgbWN0cF9mbG93ICpmbG93KVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTcyNTgtXG5uZXQvY29yZS9za2J1ZmYuYzo3MjU5OnZvaWQgX19za2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpXG5uZXQvY29yZS9za2J1ZmYuYy03MjYwLXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MjgxLX1cbm5ldC9jb3JlL3NrYnVmZi5jOjcyODI6RVhQT1JUX1NZTUJPTChfX3NrYl9leHRfZGVsKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTcyODMtXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xMTEzPXN0YXRpYyBlbnVtIG1hcHBpbmdfc3RhdHVzIGdldF9tYXBwaW5nX3N0YXR1cyhzdHJ1Y3Qgc29jayAqc3NrLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTE3NC1cdFx0XHRcdCAqL1xubmV0L21wdGNwL3N1YmZsb3cuYzoxMTc1Olx0XHRcdFx0c2tiX2V4dF9kZWwoc2tiLCBTS0JfRVhUX01QVENQKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTE3Ni1cdFx0XHRcdHJldHVybiBNQVBQSU5HX09LO1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTIwOS1cdFx0ICAgIHN1YmZsb3ctXHUwMDNlbWFwX2NzdW1fcmVxZCA9PSBtcGV4dC1cdTAwM2Vjc3VtX3JlcWQpIHtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTIxMDpcdFx0XHRza2JfZXh0X2RlbChza2IsIFNLQl9FWFRfTVBUQ1ApO1xubmV0L21wdGNwL3N1YmZsb3cuYy0xMjExLVx0XHRcdGdvdG8gdmFsaWRhdGVfY3N1bTtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEyNTMtXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjEyNTQ6XHRza2JfZXh0X2RlbChza2IsIFNLQl9FWFRfTVBUQ1ApO1xubmV0L21wdGNwL3N1YmZsb3cuYy0xMjU1LVxuLS1cbm5ldC9zY2hlZC9jbHNfYXBpLmM9MTgyMD1pbnQgdGNmX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYy0xODY3LVx0XHRcdC8qIENvbnN1bWUsIHNvIGNsb25lZC9yZWRpcmVjdCBza2JzIHdvbiYjMzk7dCBpbmhlcml0IGV4dCAqL1xubmV0L3NjaGVkL2Nsc19hcGkuYzoxODY4Olx0XHRcdHNrYl9leHRfZGVsKHNrYiwgVENfU0tCX0VYVCk7XG5uZXQvc2NoZWQvY2xzX2FwaS5jLTE4NjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY3MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNLQiBFeHRlbnNpb24gRGVsZXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IG1vZGlmaWVzIGhvdyB3ZSBoYW5kbGUgU0tCIChTb2NrZXQgQnVmZmVyKSBleHRlbnNpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgX19za2JfZXh0X2RlbGAgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCBjb2RlIGhhcyBhIGNvdXBsZSBvZiBjb25kaXRpb25hbCBibG9ja3MsIG9uZSBkZWFsaW5nIHdpdGggYFNLQl9FWFRfU0VDX1BBVEhgIChzZWN1cml0eSBwYXRoIGV4dGVuc2lvbnMpLCBhbmQgaXQgbG9va3MgbGlrZSBhIHNpbWlsYXIgY29uZGl0aW9uYWwgaXMgYmVpbmcgYWRkZWQgZm9yIGBNQ1RQYCBmbG93cy4KClRoZSBjb3JlIGNoYW5nZSBpbiBgX19za2JfZXh0X2RlbGAgc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB3ZSBkZWNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBhbmQgd2hlbiB3ZSBhY3R1YWxseSByZWxlYXNlIHRoZSBleHRlbnNpb24gZGF0YS4gQmVmb3JlLCBpZiBgc2tiLSZndDthY3RpdmVfZXh0ZW5zaW9uc2AgYmVjYW1lIHplcm8sIGluZGljYXRpbmcgdGhlIGxhc3QgZXh0ZW5zaW9uIHdhcyBiZWluZyByZW1vdmVkLCB3ZSYjMzk7ZCBpbW1lZGlhdGVseSBjbGVhbiB1cCB0aGUgZXh0ZW5zaW9uIGFuZCwgc3BlY2lmaWNhbGx5IGZvciBgU0tCX0VYVF9TRUNfUEFUSGAsIHJlc2V0IHRoZSBgc3AtJmd0O2xlbmAgaWYgdGhlIHJlZmNvdW50IHdhcyBvbmUuIE5vdywgdGhlcmUgYXJlIGFkZGl0aW9uYWwgY2hlY2tzIHRvIGJhaWwgb3V0IGlmIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGV4dGVuc2lvbiBibG9jayBpcyBncmVhdGVyIHRoYW4gb25lLiBUaGUgY29uZGl0aW9uYWwgYmxvY2sgZm9yIGBTS0JfRVhUX1NFQ19QQVRIYCBoYXMgYmVlbiBtb2RpZmllZCwgYW5kIGEgc2ltaWxhciBibG9jayBoYXMgYmVlbiBhZGRlZCBmb3IgYE1DVFBfRkxPV1NgLCB3aGVyZSB3ZSBhcmUgbm93IGhhbmRsaW5nIHRoZSB1bnJlZiBhbmQgTlVMTGluZyBvZiBgZmxvdy0mZ3Q7a2V5YC4KClRoZSBtb3N0IHNpZ25pZmljYW50IGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgaW50cm9kdWN0aW9uIG9mIGFuIGVhcmx5IHJldHVybiBpZiB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIGdyZWF0ZXIgdGhhbiBvbmUuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9yIGJ1ZyBmaXguIFBlcmhhcHMgd2Ugd2VyZSBwcmVtYXR1cmVseSByZWxlYXNpbmcgZGF0YSB0aGF0IHdhcyBzdGlsbCBpbiB1c2UsIGxlYWRpbmcgdG8gc29tZSBraW5kIG9mIGNvcnJ1cHRpb24gb3IgZG91YmxlLWZyZWUgc2l0dWF0aW9uLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gd2hlbiB3b3JraW5nIHdpdGggcmVmZXJlbmNlLWNvdW50ZWQgbWVtb3J5IG1hbmFnZW1lbnQuCgpJJiMzOTttIGFsc28gc2VlaW5nIHNvbWUgYWRkaXRpb25hbCBtb2RpZmljYXRpb25zIGluIGBza2JfZXh0X3B1dF9zcGAgYW5kIGBza2JfZXh0X3B1dF9tY3RwYCwgd2hpY2ggYXJlIHRoZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IHJlbGVhc2luZyB0aGUgc2VjdXJpdHkgcGF0aCBhbmQgTUNUUCBmbG93IGRhdGEsIHJlc3BlY3RpdmVseS4gSW4gdGhlIGBza2JfZXh0X3B1dF9zcGAgZnVuY3Rpb24gdGhlcmUgaXMgbm93IGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgdGhlIHNlY3VyaXR5IHBhdGggaXMgdmFsaWQgYmVmb3JlIHByb2NlZWRpbmcgd2l0aCBpdCYjMzk7cyBkZWxldGlvbi4gVGhlIGltcG9ydGFudCBjaGFuZ2UgaW4gYHNrYl9leHRfcHV0X21jdHBgIGhhbmRsZXMgdGhlIHVucmVmZXJlbmNpbmcgYW5kIG51bGxpbmcgb2YgdGhlIGBmbG93LSZndDtrZXlgLCBhbmQgZ2l2ZW4gdGhhdCB0aGlzIHNlY3Rpb24gb2YgY29kZSBpcyBuZXcsIGl0IGlzIGxpa2VseSBsaW5rZWQgdG8gdGhlIGFkZGl0aW9uIG9mIGBNQ1RQX0ZMT1dTYCBpbnRvIHRoZSBgX19za2JfZXh0X2RlbGAgZnVuY3Rpb24uCgpJIHNob3VsZCBwcm9iYWJseSBhbHNvIHRha2UgYSBxdWljayBsb29rIGF0IGBfX3NrYl9leHRfcHV0YCB0byBlbnN1cmUgdGhhdCB0aGlzIHBhdGNoIGlzIGNvbnNpc3RlbnQgd2l0aCBob3cgdGhlIFNLQiBleHRlbnNpb25zIGFyZSBiZWluZyBtYW5hZ2VkIGFjcm9zcyB0aGUgYm9hcmQuIE92ZXJhbGwsIHRoaXMgbG9va3MgbGlrZSBhIGNhcmVmdWwgcmVmaW5lbWVudCBvZiB0aGUgU0tCIGV4dGVuc2lvbiBtYW5hZ2VtZW50LCBsaWtlbHkgYWltaW5nIGZvciBpbmNyZWFzZWQgcm9idXN0bmVzcyBhbmQgcG90ZW50aWFsbHkgYWRkcmVzc2luZyBhIHN1YnRsZSBjb25jdXJyZW5jeSBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3MjkwOlx0XHRcdGdvdG8gZnJlZV9ub3c7XG43MjkxOlx0XG43MjkyOlx0XHRpZiAoIXJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZleHQtXHUwMDNlcmVmY250KSlcbjcyOTM6XHRcdFx0cmV0dXJuO1xuNzI5NDpcdGZyZWVfbm93OlxuNzI5NTpcdCNpZmRlZiBDT05GSUdfWEZSTVxuNzI5NjpcdFx0aWYgKF9fc2tiX2V4dF9leGlzdChleHQsIFNLQl9FWFRfU0VDX1BBVEgpKVxuNzI5NzpcdFx0XHRza2JfZXh0X3B1dF9zcChza2JfZXh0X2dldF9wdHIoZXh0LCBTS0JfRVhUX1NFQ19QQVRIKSk7XG43Mjk4Olx0I2VuZGlmXG43Mjk5Olx0I2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXG43MzAwOlx0XHRpZiAoX19za2JfZXh0X2V4aXN0KGV4dCwgU0tCX0VYVF9NQ1RQKSlcbjczMDE6XHRcdFx0c2tiX2V4dF9wdXRfbWN0cChza2JfZXh0X2dldF9wdHIoZXh0LCBTS0JfRVhUX01DVFApKTtcbjczMDI6XHQjZW5kaWZcbjczMDM6XHRcbjczMDQ6XHRcdGttZW1fY2FjaGVfZnJlZShza2J1ZmZfZXh0X2NhY2hlLCBleHQpO1xuNzMwNTpcdH1cbjczMDY6XHRFWFBPUlRfU1lNQk9MKF9fc2tiX2V4dF9wdXQpO1xuNzMwNzpcdCNlbmRpZiAvKiBDT05GSUdfU0tCX0VYVEVOU0lPTlMgKi9cbjczMDg6XHRcbjczMDk6XHRzdGF0aWMgdm9pZCBrZnJlZV9za2JfbmFwaV9jYWNoZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuNzMxMDpcdHtcbjczMTE6XHRcdC8qIGlmIFNLQiBpcyBhIGNsb25lLCBkb24mIzM5O3QgaGFuZGxlIHRoaXMgY2FzZSAqL1xuNzMxMjpcdFx0aWYgKHNrYi1cdTAwM2VmY2xvbmUgIT0gU0tCX0ZDTE9ORV9VTkFWQUlMQUJMRSkge1xuNzMxMzpcdFx0XHRfX2tmcmVlX3NrYihza2IpO1xuNzMxNDpcdFx0XHRyZXR1cm47XG43MzE1Olx0XHR9XG43MzE2Olx0XG43MzE3Olx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG43MzE4Olx0XHRfX25hcGlfa2ZyZWVfc2tiKHNrYiwgU0tCX0NPTlNVTUVEKTtcbjczMTk6XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNDYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyB0aGUgS2NvbmZpZyBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlIHJlbGF0ZWQgdG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgcXVpY2sgc2Nhbi4gT2theSwgbG9va3MgbGlrZSB3ZSBoYXZlIGBDT05GSUdfU0tCX0VYVEVOU0lPTlNgLCBgQ09ORklHX1hGUk1gLCBgQ09ORklHX01DVFBfRkxPV1NgLCBhbmQgYENPTkZJR19NQ1RQYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBrZXkgcGxheWVycy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zICphY3R1YWxseSogZG8sIHNvIEkgc2hvdWxkIGRpdmUgaW50byB0aGUgS2NvbmZpZyBkZWZpbml0aW9ucyBmb3IgYFNLQl9FWFRFTlNJT05TYCwgYE1DVFBfRkxPV1NgLCBhbmQgYFhGUk1gIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlaXIgcHVycG9zZS4gVGhpcyYjMzk7bGwgaGVscCBtZSBmaWd1cmUgb3V0IGhvdyB0aGV5IGludGVyYWN0IGFuZCB0aGUgaW1wYWN0IG9mIGVhY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAoU0tCX0VYVEVOU0lPTlN8TUNUUF9GTE9XU3xNQ1RQfFhGUk0pJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZz00PW1lbnUgXCYjMzQ7TUNUUCBEZXZpY2UgRHJpdmVyc1wmIzM0O1xuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6Njpjb25maWcgTUNUUF9TRVJJQUxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7TUNUUCBzZXJpYWwgdHJhbnNwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTIzLVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjI0OmNvbmZpZyBNQ1RQX1NFUklBTF9URVNUXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctMjUtICAgICAgICBib29sIFwmIzM0O01DVFAgc2VyaWFsIHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctMjgtXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6Mjk6Y29uZmlnIE1DVFBfVFJBTlNQT1JUX0kyQ1xuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTMwLVx0dHJpc3RhdGUgXCYjMzQ7TUNUUCBTTUJ1cy9JMkMgdHJhbnNwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTQwLVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjQxOmNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JM0NcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy00Mi1cdHRyaXN0YXRlIFwmIzM0O01DVFAgSTNDIHRyYW5zcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy00OS1cbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzo1MDpjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCTElCXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNTEtXHR0cmlzdGF0ZSBcJiMzNDtNQ1RQIG92ZXIgVVNCIGNvbW1vbiBsaWJyYXJ5XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTU5LVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjYwOmNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTYxLSAgICAgICAgYm9vbCBcJiMzNDtNQ1RQIHVzYmxpYiB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTY0LVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjY1OmNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy02Ni1cdHRyaXN0YXRlIFwmIzM0O01DVFAgVVNCIHRyYW5zcG9ydFwmIzM0O1xuLS1cbm5ldC9LY29uZmlnPTYzPWNvbmZpZyBTS0JfREVDUllQVEVEXG4tLVxubmV0L0tjb25maWctNjUtXG5uZXQvS2NvbmZpZzo2Njpjb25maWcgU0tCX0VYVEVOU0lPTlNcbm5ldC9LY29uZmlnLTY3LVx0Ym9vbFxuLS1cbm5ldC9tY3RwL0tjb25maWctMS1cbm5ldC9tY3RwL0tjb25maWc6MjptZW51Y29uZmlnIE1DVFBcbm5ldC9tY3RwL0tjb25maWctMy1cdGRlcGVuZHMgb24gTkVUXG4tLVxubmV0L21jdHAvS2NvbmZpZy0xNC1cbm5ldC9tY3RwL0tjb25maWc6MTU6Y29uZmlnIE1DVFBfVEVTVFxubmV0L21jdHAvS2NvbmZpZy0xNi0gICAgICAgIGJvb2wgXCYjMzQ7TUNUUCBjb3JlIHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5uZXQvbWN0cC9LY29uZmlnLTIwLVxubmV0L21jdHAvS2NvbmZpZzoyMTpjb25maWcgTUNUUF9GTE9XU1xubmV0L21jdHAvS2NvbmZpZy0yMi1cdGJvb2xcbi0tXG5uZXQveGZybS9LY29uZmlnLTQtI1xubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXG5uZXQveGZybS9LY29uZmlnLTYtXHRib29sXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xMC1cbm5ldC94ZnJtL0tjb25maWc6MTE6Y29uZmlnIFhGUk1fT0ZGTE9BRFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cdGJvb2xcbm5ldC94ZnJtL0tjb25maWctMTMtXG5uZXQveGZybS9LY29uZmlnOjE0OmNvbmZpZyBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctMTUtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXG5uZXQveGZybS9LY29uZmlnLTI0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctMzEtXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXG5uZXQveGZybS9LY29uZmlnLTMzLVx0dHJpc3RhdGUgXCYjMzQ7Q29tcGF0aWJsZSBBQkkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNDItXG5uZXQveGZybS9LY29uZmlnOjQzOmNvbmZpZyBYRlJNX0lOVEVSRkFDRVxubmV0L3hmcm0vS2NvbmZpZy00NC1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHZpcnR1YWwgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy01MC1cbm5ldC94ZnJtL0tjb25maWc6NTE6Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxubmV0L3hmcm0vS2NvbmZpZy01Mi1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gc3ViIHBvbGljeSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy02MC1cbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxubmV0L3hmcm0vS2NvbmZpZy02Mi1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNzEtXG5uZXQveGZybS9LY29uZmlnOjcyOmNvbmZpZyBYRlJNX1NUQVRJU1RJQ1Ncbm5ldC94ZnJtL0tjb25maWctNzMtXHRib29sIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHN0YXRpc3RpY3NcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTgzLSMgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cbm5ldC94ZnJtL0tjb25maWc6ODQ6Y29uZmlnIFhGUk1fQUhcbm5ldC94ZnJtL0tjb25maWctODUtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWctOTItIyBhbGdvcml0aG1zIHRoYXQgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cbm5ldC94ZnJtL0tjb25maWc6OTM6Y29uZmlnIFhGUk1fRVNQXG5uZXQveGZybS9LY29uZmlnLTk0LVx0dHJpc3RhdGVcbi0tXG5uZXQveGZybS9LY29uZmlnLTEwNS1cbm5ldC94ZnJtL0tjb25maWc6MTA2OmNvbmZpZyBYRlJNX0lQQ09NUFxubmV0L3hmcm0vS2NvbmZpZy0xMDctXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWc9MTI1PWNvbmZpZyBORVRfS0VZX01JR1JBVEVcbi0tXG5uZXQveGZybS9LY29uZmlnLTE0MC1cbm5ldC94ZnJtL0tjb25maWc6MTQxOmNvbmZpZyBYRlJNX0lQVEZTXG5uZXQveGZybS9LY29uZmlnLTE0Mi1cdHRyaXN0YXRlIFwmIzM0O0lQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXG5uZXQveGZybS9LY29uZmlnOjE1Nzpjb25maWcgWEZSTV9FU1BJTlRDUFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNDQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyBEZXBlbmRlbmNpZXMgYW5kIEludGVyc2VjdGlvbnMqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbnRlcmFjdGlvbnMgb2YgYSBmZXcga2V5IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHNlZSB3aGljaCBvdGhlciBvcHRpb25zIGFyZSBhY3RpdmF0ZWQgb3IgcmVxdWlyZWQgd2hlbiBgQ09ORklHX01DVFBfRkxPV1NgLCBgQ09ORklHX1NLQl9FWFRFTlNJT05TYCwgYW5kIGBDT05GSUdfWEZSTWAgYXJlIGVuYWJsZWQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHJpcHBsZSBlZmZlY3RzIOKAkyB3aGljaCBmZWF0dXJlcyBhcmUgcHVsbGVkIGluLCB3aGljaCBhc3N1bXB0aW9ucyBhcmUgbWFkZSwgYW5kIHVsdGltYXRlbHksIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyIGFyY2hpdGVjdHVyYWxseS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBvcHRpbWl6aW5nIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgdHJvdWJsZXNob290aW5nIGNvbmZsaWN0cywgYW5kIGdhaW5pbmcgYSBjb21wcmVoZW5zaXZlIGdyYXNwIG9mIHRoZSBzeXN0ZW0mIzM5O3MgZGVzaWduLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIGludGVyZXN0aW5nIGNvbm5lY3Rpb25zLCBlc3BlY2lhbGx5IGFyb3VuZCBuZXR3b3JrIGluZnJhc3RydWN0dXJlLCBidXQgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMgdG8ga25vdyB3aGF0IGlzIGVuYWJsZWQvZGlzYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCAoU0tCX0VYVEVOU0lPTlN8TUNUUF9GTE9XU3xYRlJNKSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTE5ND1jb25maWcgSVhHQkVfSVBTRUNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTE5OC1cdGRlZmF1bHQgeVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoxOTk6XHRzZWxlY3QgWEZSTV9BTEdPXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIwMC1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTIyMD1jb25maWcgSVhHQkVWRl9JUFNFQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjI0LVx0ZGVmYXVsdCB5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjIyNTpcdHNlbGVjdCBYRlJNX0FMR09cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjI2LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZz0yOT1jb25maWcgTUNUUF9UUkFOU1BPUlRfSTJDXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTM0LVx0ZGVwZW5kcyBvbiBJMkNfU0xBVkVcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzozNTpcdHNlbGVjdCBNQ1RQX0ZMT1dTXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctMzYtXHRoZWxwXG4tLVxubmV0L0tjb25maWc9MjMxPWNvbmZpZyBCUklER0VfTkVURklMVEVSXG4tLVxubmV0L0tjb25maWctMjM2LVx0c2VsZWN0IE5FVEZJTFRFUl9GQU1JTFlfQlJJREdFXG5uZXQvS2NvbmZpZzoyMzc6XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbm5ldC9LY29uZmlnLTIzOC1cdGhlbHBcbi0tXG5uZXQvY2FuL0tjb25maWc9Nj1tZW51Y29uZmlnIENBTlxubmV0L2Nhbi9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtDQU4gYnVzIHN1YnN5c3RlbSBzdXBwb3J0XCYjMzQ7XG5uZXQvY2FuL0tjb25maWc6ODpcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xubmV0L2Nhbi9LY29uZmlnLTktXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zMDQ9Y29uZmlnIE5FVF9JUFZUSVxuLS1cbm5ldC9pcHY0L0tjb25maWctMzA3LVx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcbm5ldC9pcHY0L0tjb25maWc6MzA4Olx0c2VsZWN0IFhGUk1cbm5ldC9pcHY0L0tjb25maWctMzA5LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzM5PWNvbmZpZyBJTkVUX0FIXG5uZXQvaXB2NC9LY29uZmlnLTM0MC1cdHRyaXN0YXRlIFwmIzM0O0lQOiBBSCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xubmV0L2lwdjQvS2NvbmZpZzozNDE6XHRzZWxlY3QgWEZSTV9BSFxubmV0L2lwdjQvS2NvbmZpZy0zNDItXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zNTQ9Y29uZmlnIElORVRfRVNQXG5uZXQvaXB2NC9LY29uZmlnLTM1NS1cdHRyaXN0YXRlIFwmIzM0O0lQOiBFU1AgdHJhbnNmb3JtYXRpb25cJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MzU2Olx0c2VsZWN0IFhGUk1fRVNQXG5uZXQvaXB2NC9LY29uZmlnLTM1Ny1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTM2OT1jb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzcxLVx0ZGVwZW5kcyBvbiBJTkVUX0VTUFxubmV0L2lwdjQvS2NvbmZpZzozNzI6XHRzZWxlY3QgWEZSTV9PRkZMT0FEXG5uZXQvaXB2NC9LY29uZmlnLTM3My1cdGRlZmF1bHQgblxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzgyPWNvbmZpZyBJTkVUX0VTUElOVENQXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zODYtXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2NC9LY29uZmlnOjM4NzpcdHNlbGVjdCBYRlJNX0VTUElOVENQXG5uZXQvaXB2NC9LY29uZmlnLTM4OC1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTM5ND1jb25maWcgSU5FVF9JUENPTVBcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM5Ni1cdHNlbGVjdCBJTkVUX1hGUk1fVFVOTkVMXG5uZXQvaXB2NC9LY29uZmlnOjM5NzpcdHNlbGVjdCBYRlJNX0lQQ09NUFxubmV0L2lwdjQvS2NvbmZpZy0zOTgtXHRoZWxwXG4tLVxubmV0L2lwdjYvS2NvbmZpZz00Nz1jb25maWcgSU5FVDZfQUhcbm5ldC9pcHY2L0tjb25maWctNDgtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBBSCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xubmV0L2lwdjYvS2NvbmZpZzo0OTpcdHNlbGVjdCBYRlJNX0FIXG5uZXQvaXB2Ni9LY29uZmlnLTUwLVx0aGVscFxuLS1cbm5ldC9pcHY2L0tjb25maWc9NjI9Y29uZmlnIElORVQ2X0VTUFxubmV0L2lwdjYvS2NvbmZpZy02My1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IEVTUCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xubmV0L2lwdjYvS2NvbmZpZzo2NDpcdHNlbGVjdCBYRlJNX0VTUFxubmV0L2lwdjYvS2NvbmZpZy02NS1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTc3PWNvbmZpZyBJTkVUNl9FU1BfT0ZGTE9BRFxuLS1cbm5ldC9pcHY2L0tjb25maWctNzktXHRkZXBlbmRzIG9uIElORVQ2X0VTUFxubmV0L2lwdjYvS2NvbmZpZzo4MDpcdHNlbGVjdCBYRlJNX09GRkxPQURcbm5ldC9pcHY2L0tjb25maWctODEtXHRkZWZhdWx0IG5cbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTkwPWNvbmZpZyBJTkVUNl9FU1BJTlRDUFxuLS1cbm5ldC9pcHY2L0tjb25maWctOTQtXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2Ni9LY29uZmlnOjk1Olx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbm5ldC9pcHY2L0tjb25maWctOTYtXHRoZWxwXG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xMDI9Y29uZmlnIElORVQ2X0lQQ09NUFxuLS1cbm5ldC9pcHY2L0tjb25maWctMTA0LVx0c2VsZWN0IElORVQ2X1hGUk1fVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnOjEwNTpcdHNlbGVjdCBYRlJNX0lQQ09NUFxubmV0L2lwdjYvS2NvbmZpZy0xMDYtXHRoZWxwXG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xMTI9Y29uZmlnIElQVjZfTUlQNlxubmV0L2lwdjYvS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBNb2JpbGl0eVwmIzM0O1xubmV0L2lwdjYvS2NvbmZpZzoxMTQ6XHRzZWxlY3QgWEZSTVxubmV0L2lwdjYvS2NvbmZpZy0xMTUtXHRoZWxwXG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xNTA9Y29uZmlnIElQVjZfVlRJXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNTMtXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZzoxNTQ6XHRzZWxlY3QgWEZSTVxubmV0L2lwdjYvS2NvbmZpZy0xNTUtXHRoZWxwXG4tLVxubmV0L21jdHAvS2NvbmZpZz0xNT1jb25maWcgTUNUUF9URVNUXG5uZXQvbWN0cC9LY29uZmlnLTE2LSAgICAgICAgYm9vbCBcJiMzNDtNQ1RQIGNvcmUgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubmV0L21jdHAvS2NvbmZpZzoxNzogICAgICAgIHNlbGVjdCBNQ1RQX0ZMT1dTXG5uZXQvbWN0cC9LY29uZmlnLTE4LSAgICAgICAgZGVwZW5kcyBvbiBNQ1RQPXkgXHUwMDI2XHUwMDI2IEtVTklUPXlcbi0tXG5uZXQvbWN0cC9LY29uZmlnPTIxPWNvbmZpZyBNQ1RQX0ZMT1dTXG4tLVxubmV0L21jdHAvS2NvbmZpZy0yMy1cdGRlcGVuZHMgb24gTUNUUFxubmV0L21jdHAvS2NvbmZpZzoyNDpcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnPTI9Y29uZmlnIE1QVENQXG4tLVxubmV0L21wdGNwL0tjb25maWctNC1cdGRlcGVuZHMgb24gSU5FVFxubmV0L21wdGNwL0tjb25maWc6NTpcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xubmV0L21wdGNwL0tjb25maWctNi1cdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuLS1cbm5ldC9wc3AvS2NvbmZpZz01PWNvbmZpZyBJTkVUX1BTUFxuLS1cbm5ldC9wc3AvS2NvbmZpZy04LVx0c2VsZWN0IFNLQl9ERUNSWVBURURcbm5ldC9wc3AvS2NvbmZpZzo5Olx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG5uZXQvcHNwL0tjb25maWctMTAtXHRzZWxlY3QgU09DS19WQUxJREFURV9YTUlUXG4tLVxubmV0L3NjaGVkL0tjb25maWc9OTU0PWNvbmZpZyBORVRfVENfU0tCX0VYVFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTk1Ni1cdGRlcGVuZHMgb24gTkVUX0NMU19BQ1Rcbm5ldC9zY2hlZC9LY29uZmlnOjk1NzpcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xubmV0L3NjaGVkL0tjb25maWctOTU4LVxuLS1cbm5ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxuLS1cbm5ldC94ZnJtL0tjb25maWctOC1cdHNlbGVjdCBHUk9fQ0VMTFNcbm5ldC94ZnJtL0tjb25maWc6OTpcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xubmV0L3hmcm0vS2NvbmZpZy0xMC1cbi0tXG5uZXQveGZybS9LY29uZmlnPTE0PWNvbmZpZyBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctMTUtXHR0cmlzdGF0ZVxubmV0L3hmcm0vS2NvbmZpZzoxNjpcdHNlbGVjdCBYRlJNXG5uZXQveGZybS9LY29uZmlnLTE3LVx0c2VsZWN0IENSWVBUT1xuLS1cbm5ldC94ZnJtL0tjb25maWc9MjM9Y29uZmlnIFhGUk1fVVNFUlxubmV0L3hmcm0vS2NvbmZpZy0yNC1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcJiMzNDtcbm5ldC94ZnJtL0tjb25maWc6MjU6XHRzZWxlY3QgWEZSTV9BTEdPXG5uZXQveGZybS9LY29uZmlnLTI2LVx0aGVscFxuLS1cbm5ldC94ZnJtL0tjb25maWc9ODQ9Y29uZmlnIFhGUk1fQUhcbm5ldC94ZnJtL0tjb25maWctODUtXHR0cmlzdGF0ZVxubmV0L3hmcm0vS2NvbmZpZzo4NjpcdHNlbGVjdCBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctODctXHRzZWxlY3QgQ1JZUFRPXG4tLVxubmV0L3hmcm0vS2NvbmZpZz05Mz1jb25maWcgWEZSTV9FU1Bcbm5ldC94ZnJtL0tjb25maWctOTQtXHR0cmlzdGF0ZVxubmV0L3hmcm0vS2NvbmZpZzo5NTpcdHNlbGVjdCBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctOTYtXHRzZWxlY3QgQ1JZUFRPXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0xMDY9Y29uZmlnIFhGUk1fSVBDT01QXG5uZXQveGZybS9LY29uZmlnLTEwNy1cdHRyaXN0YXRlXG5uZXQveGZybS9LY29uZmlnOjEwODpcdHNlbGVjdCBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctMTA5LVx0c2VsZWN0IENSWVBUT1xuLS1cbm5ldC94ZnJtL0tjb25maWc9MTEyPWNvbmZpZyBORVRfS0VZXG5uZXQveGZybS9LY29uZmlnLTExMy1cdHRyaXN0YXRlIFwmIzM0O1BGX0tFWSBzb2NrZXRzIChkZXByZWNhdGVkKVwmIzM0O1xubmV0L3hmcm0vS2NvbmZpZzoxMTQ6XHRzZWxlY3QgWEZSTV9BTEdPXG5uZXQveGZybS9LY29uZmlnLTExNS1cdGhlbHBcbi0tXG5uZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xMjctXHRkZXBlbmRzIG9uIE5FVF9LRVlcbm5ldC94ZnJtL0tjb25maWc6MTI4Olx0c2VsZWN0IFhGUk1fTUlHUkFURVxubmV0L3hmcm0vS2NvbmZpZy0xMjktXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzIxCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBOZXR3b3JraW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgZml4IGFuZCB0aGUgdW5kZXJseWluZyBtZWNoYW5pY3MuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgYF9fc2tiX2V4dF9kZWxgIGFuZCBhIGNvdXBsZSBvZiBoZWxwZXIgZnVuY3Rpb25zLCBgc2tiX2V4dF9wdXRfc3BgIGFuZCBgc2tiX2V4dF9wdXRfbWN0cGAuIEVzc2VudGlhbGx5LCBpdCBjb25jZXJucyB0aGUgZGVsZXRpb24gb2YgZXh0ZW5zaW9ucyBmcm9tIGEgc29ja2V0IGJ1ZmZlciAoc2tiKS4gVGhlIGNvcmUgbG9naWMgaW4gYF9fc2tiX2V4dF9kZWxgIGlzIHdoYXQgaW50ZXJlc3RzIG1lOiB3aGVuIGFuIGV4dGVuc2lvbiBpcyByZW1vdmVkLCBpdCBjaGVja3MgaWYgYGFjdGl2ZV9leHRlbnNpb25zYCBoaXRzIHplcm8uIElmIGl0IGRvZXMsIGBfX3NrYl9leHRfcHV0KGV4dClgIGlzIGNhbGxlZCwgd2hpY2ggaGFuZGxlcyByZXNvdXJjZSByZWxlYXNlLiBJZiBgYWN0aXZlX2V4dGVuc2lvbnNgIGlzIG5vbi16ZXJvLCBidXQgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBkb3duIHRvIDEgKG1lYW5pbmcgdGhlIGN1cnJlbnQgc2tiIGhhcyBleGNsdXNpdmUgYWNjZXNzKSwgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlbW92ZWQgZXh0ZW5zaW9uIGFyZSBleHBsaWNpdGx5IGZyZWVkLgoKTm93LCBoZXJlJiMzOTtzIHRoZSBraWNrZXI6IEFwcGFyZW50bHksIHRoZSBNQ1RQIGV4dGVuc2lvbiAoYFNLQl9FWFRfTUNUUGApIHdhc24mIzM5O3QgaGFuZGxlZCBpbiBgX19za2JfZXh0X2RlbGAgcHJldmlvdXNseS4gVGhhdCBtZWFucyByZW1vdmluZyBpdCBpbiBjZXJ0YWluIHNjZW5hcmlvcyB3b3VsZCBsZWFkIHRvIGEgbWVtb3J5IGxlYWsgYmVjYXVzZSBgZmxvdy0mZ3Q7a2V5YCB3YXNuJiMzOTt0IGJlaW5nIHVucmVmZXJlbmNlZC4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIG92ZXJzaWdodCEgVGhpcyBwYXRjaCBjb3JyZWN0cyB0aGF0LiBJdCB1bnJlZnMgdGhlIGZsb3cga2V5IHdoZW4gZGVsZXRpbmcgYW4gTUNUUCBleHRlbnNpb24uCgpJJiMzOTttIGFsc28gc2VlaW5nIHNvbWUgbWlub3IgdHdlYWtzIHRvIGBza2JfZXh0X3B1dF9zcGAsIGVhcmx5IHJldHVybnMgd2hlbiBgc3AtJmd0O2xlbiA9PSAwYCBhbmQgc2V0dGluZyBsZW4gdG8gemVybyBpbnRlcm5hbGx5LiBBbHNvLCB3aXRoaW4gYHNrYl9leHRfcHV0X21jdHBgLCBgZmxvdy0mZ3Q7a2V5YCBpcyB1bnJlZmVyZW5jZWQgYW5kIHNldCB0byBgTlVMTGAuCgpBbHJpZ2h0LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGV2YWx1YXRlIGl0cyBmdXp6YWJpbGl0eS4gRG9lcyB0aGlzIGNoYW5nZSBhZmZlY3Qgc2lnbmlmaWNhbnQgY29yZSBrZXJuZWwgbG9naWM/IFllcywgaXQgZG9lcy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYG5ldC9jb3JlL3NrYnVmZi5jYCwgcGFydGljdWxhcmx5IGBfX3NrYl9leHRfZGVsYCwgd2hpY2ggaXMgaW50ZWdyYWwgdG8gc2tiIGV4dGVuc2lvbiBtYW5hZ2VtZW50IGFuZCwgaW1wb3J0YW50bHksIHRvdWNoZXMgWEZSTS9JUHNlYyBhbmQgTUNUUCBzdWJzeXN0ZW1zLiBBbmQgeWVzLCB0aGlzIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIGluIFFFTVUgYW5kIEdDRSwgbWFraW5nIGl0IHN1aXRhYmxlIGZvciBmdXp6aW5nIHZpYSBzdGFuZGFyZCBuZXR3b3JraW5nLCBJUHNlYywgYW5kIE1DVFAuIEl0JiMzOTtzIG5vdCBqdXN0IGNvbW1lbnRzIG9yIHRyaXZpYWwgY2hhbmdlcywgaXQgaW52b2x2ZXMgZnVuY3Rpb25hbCByZWZjb3VudGluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgY29ycmVjdGlvbnMuIEZ1cnRoZXJtb3JlLCBgX19za2JfZXh0X2RlbGAgaXNuJiMzOTt0IHN0YXRpYyBhbmQgaXMgZXhwb3J0ZWQuIEFsc28gYHNrYl9leHRfZGVsYCBpcyBpbmxpbmUsIHNvIGl0IGNhbGxzIHRoZSBmdW5jdGlvbiBkaXJlY3RseS4gYHNlY3BhdGhfcmVzZXRgIGFsc28gY2FsbHMgYHNrYl9leHRfZGVsKHNrYiwgU0tCX0VYVF9TRUNfUEFUSClgLiBOb3cgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGBTS0JfRVhUX01DVFBgIGlzIGJlaW5nIGFkZGVkL2RlbGV0ZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiB0aGUgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTS0JfRVhUX01DVFAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9tY3RwLWkyYy5jPTM2Nj1tY3RwX2kyY19nZXRfdHhfZmxvd19zdGF0ZShzdHJ1Y3QgbWN0cF9pMmNfZGV2ICptaWRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtaTJjLmMtMzcyLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLWkyYy5jOjM3MzpcdGZsb3cgPSBza2JfZXh0X2ZpbmQoc2tiLCBTS0JfRVhUX01DVFApO1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLWkyYy5jLTM3NC1cdGlmICghZmxvdylcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtaTJjLmM9NDU0PXN0YXRpYyB2b2lkIG1jdHBfaTJjX2ludmFsaWRhdGVfdHhfZmxvdyhzdHJ1Y3QgbWN0cF9pMmNfZGV2ICptaWRldixcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtaTJjLmMtNDYxLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLWkyYy5jOjQ2MjpcdGZsb3cgPSBza2JfZXh0X2ZpbmQoc2tiLCBTS0JfRVhUX01DVFApO1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLWkyYy5jLTQ2My1cdGlmICghZmxvdylcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTUwMzg9ZW51bSBza2JfZXh0X2lkIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwNTEtI2lmIElTX0VOQUJMRUQoQ09ORklHX01DVFBfRkxPV1MpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwNTI6XHRTS0JfRVhUX01DVFAsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwNTMtI2VuZGlmXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NTE1MD1zdGF0aWMgY29uc3QgdTggc2tiX2V4dF90eXBlX2xlbltdID0ge1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTUxNjMtI2lmIElTX0VOQUJMRUQoQ09ORklHX01DVFBfRkxPV1MpXG5uZXQvY29yZS9za2J1ZmYuYzo1MTY0Olx0W1NLQl9FWFRfTUNUUF0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBtY3RwX2Zsb3cpLFxubmV0L2NvcmUvc2tidWZmLmMtNTE2NS0jZW5kaWZcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03MTI0PXN0YXRpYyBzdHJ1Y3Qgc2tiX2V4dCAqc2tiX2V4dF9tYXliZV9jb3coc3RydWN0IHNrYl9leHQgKm9sZCxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MTQ4LSNpZmRlZiBDT05GSUdfTUNUUF9GTE9XU1xubmV0L2NvcmUvc2tidWZmLmM6NzE0OTpcdGlmIChvbGRfYWN0aXZlIFx1MDAyNiAoMSBcdTAwM2NcdTAwM2MgU0tCX0VYVF9NQ1RQKSkge1xubmV0L2NvcmUvc2tidWZmLmM6NzE1MDpcdFx0c3RydWN0IG1jdHBfZmxvdyAqZmxvdyA9IHNrYl9leHRfZ2V0X3B0cihvbGQsIFNLQl9FWFRfTUNUUCk7XG5uZXQvY29yZS9za2J1ZmYuYy03MTUxLVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTcyNTk9dm9pZCBfX3NrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03Mjc3LSNpZmRlZiBDT05GSUdfTUNUUF9GTE9XU1xubmV0L2NvcmUvc2tidWZmLmM6NzI3ODpcdGlmIChpZCA9PSBTS0JfRVhUX01DVFApXG5uZXQvY29yZS9za2J1ZmYuYzo3Mjc5Olx0XHRza2JfZXh0X3B1dF9tY3RwKHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfTUNUUCkpO1xubmV0L2NvcmUvc2tidWZmLmMtNzI4MC0jZW5kaWZcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03Mjg0PXZvaWQgX19za2JfZXh0X3B1dChzdHJ1Y3Qgc2tiX2V4dCAqZXh0KVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTcyOTktI2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXG5uZXQvY29yZS9za2J1ZmYuYzo3MzAwOlx0aWYgKF9fc2tiX2V4dF9leGlzdChleHQsIFNLQl9FWFRfTUNUUCkpXG5uZXQvY29yZS9za2J1ZmYuYzo3MzAxOlx0XHRza2JfZXh0X3B1dF9tY3RwKHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfTUNUUCkpO1xubmV0L2NvcmUvc2tidWZmLmMtNzMwMi0jZW5kaWZcbi0tXG5uZXQvbWN0cC9yb3V0ZS5jPTM0Nj1zdGF0aWMgdm9pZCBtY3RwX3NrYl9zZXRfZmxvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWN0cF9za19rZXkgKmtleSlcbi0tXG5uZXQvbWN0cC9yb3V0ZS5jLTM0OS1cbm5ldC9tY3RwL3JvdXRlLmM6MzUwOlx0ZmxvdyA9IHNrYl9leHRfYWRkKHNrYiwgU0tCX0VYVF9NQ1RQKTtcbm5ldC9tY3RwL3JvdXRlLmMtMzUxLVx0aWYgKCFmbG93KVxuLS1cbm5ldC9tY3RwL3JvdXRlLmM9MzU4PXN0YXRpYyB2b2lkIG1jdHBfZmxvd19wcmVwYXJlX291dHB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWN0cF9kZXYgKmRldilcbi0tXG5uZXQvbWN0cC9yb3V0ZS5jLTM2My1cbm5ldC9tY3RwL3JvdXRlLmM6MzY0Olx0ZmxvdyA9IHNrYl9leHRfZmluZChza2IsIFNLQl9FWFRfTUNUUCk7XG5uZXQvbWN0cC9yb3V0ZS5jLTM2NS1cdGlmICghZmxvdylcbi0tXG5uZXQvbWN0cC90ZXN0L3JvdXRlLXRlc3QuYz05OTM9c3RhdGljIHZvaWQgbWN0cF90ZXN0X3BhY2tldF9mbG93KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5uZXQvbWN0cC90ZXN0L3JvdXRlLXRlc3QuYy0xMDEzLVxubmV0L21jdHAvdGVzdC9yb3V0ZS10ZXN0LmM6MTAxNDpcdGZsb3cgPSBza2JfZXh0X2ZpbmQoc2tiMiwgU0tCX0VYVF9NQ1RQKTtcbm5ldC9tY3RwL3Rlc3Qvcm91dGUtdGVzdC5jLTEwMTUtXHRLVU5JVF9BU1NFUlRfTk9UX0VSUl9PUl9OVUxMKHRlc3QsIGZsb3cpO1xuLS1cbm5ldC9tY3RwL3Rlc3Qvcm91dGUtdGVzdC5jPTEwMjY9c3RhdGljIHZvaWQgbWN0cF90ZXN0X2ZyYWdtZW50X2Zsb3coc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm5ldC9tY3RwL3Rlc3Qvcm91dGUtdGVzdC5jLTEwNTEtXG5uZXQvbWN0cC90ZXN0L3JvdXRlLXRlc3QuYzoxMDUyOlx0Zmxvd3NbMF0gPSBza2JfZXh0X2ZpbmQodHhfc2tic1swXSwgU0tCX0VYVF9NQ1RQKTtcbm5ldC9tY3RwL3Rlc3Qvcm91dGUtdGVzdC5jLTEwNTMtXHRLVU5JVF9BU1NFUlRfTk9UX0VSUl9PUl9OVUxMKHRlc3QsIGZsb3dzWzBdKTtcbi0tXG5uZXQvbWN0cC90ZXN0L3JvdXRlLXRlc3QuYy0xMDU2LVxubmV0L21jdHAvdGVzdC9yb3V0ZS10ZXN0LmM6MTA1NzpcdGZsb3dzWzFdID0gc2tiX2V4dF9maW5kKHR4X3NrYnNbMV0sIFNLQl9FWFRfTUNUUCk7XG5uZXQvbWN0cC90ZXN0L3JvdXRlLXRlc3QuYy0xMDU4LVx0S1VOSVRfQVNTRVJUX05PVF9FUlJfT1JfTlVMTCh0ZXN0LCBmbG93c1sxXSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTU3CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBzZWNwYXRoX3Jlc2V0YCBhbmQgSXRzIENhbGxlcnMqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgc2VjcGF0aF9yZXNldGAuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gSSYjMzk7bGwgc3RhcnQgYnkgbWFraW5nIHN1cmUgSSBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGBzZWNwYXRoX3Jlc2V0YCAqZG9lcyog4oCTIHRoZSBpbnRlbmRlZCBvdXRjb21lLCB0aGUgaW5wdXRzLCBhbmQgdGhlIGFzc3VtcHRpb25zIGl0IG1ha2VzLiBUaGVuLCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IHRyYWNlIGFsbCB0aGUgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBrbm93ICp3aHkqIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIGVhY2ggbG9jYXRpb24sIHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIHRoZSBjYWxscywgYW5kIG1vc3QgaW1wb3J0YW50bHksIHdoYXQgdGhlIGV4cGVjdGVkIHN0YXRlIGlzIGJlZm9yZSBhbmQgYWZ0ZXIgZWFjaCBjYWxsLiBUaGlzIHJlcXVpcmVzIHVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgY29kZS4gSXMgaXQgc2VjdXJpdHktcmVsYXRlZD8gV2hhdCBraW5kIG9mIGRhdGEgaXMgYmVpbmcgaGFuZGxlZD8gS25vd2luZyB0aGUgY2FsbGVycyB3aWxsIGhlbHAgbWUgZ3Jhc3AgdGhlIGNyaXRpY2FsIHBhdGggdGhhdCBpcyBiZWluZyBtYW5hZ2VkIGJ5IHRoaXMgZnVuY3Rpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGluZWZmaWNpZW5jaWVzLCBvciBhbnkgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMuIFVsdGltYXRlbHksIEkgd2FudCB0byBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGlzIGZ1bmN0aW9uLCBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgYmVpbmcgdXNlZCBjb3JyZWN0bHksIGFuZCBpZGVudGlmeSBhbnkgYXJlYXMgdGhhdCBtaWdodCByZXF1aXJlIGZ1cnRoZXIgc2NydXRpbnkgb3IgcG90ZW50aWFsIG9wdGltaXphdGlvbi4gQSB0aG9yb3VnaCBpbnZlc3RpZ2F0aW9uIG9mIHRoZSBmdW5jdGlvbiBhbmQgaXRzIGNhbGxlcnMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIHBsYWNlIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlY3BhdGhfcmVzZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX3J4dHguYz0zMDc9dm9pZCBtbHg1ZV9pcHNlY19vZmZsb2FkX2hhbmRsZV9yeF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvaXBzZWNfcnh0eC5jLTMzMi1cdFx0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvaXBzZWNfcnh0eC5jOjMzMzpcdFx0c2VjcGF0aF9yZXNldChza2IpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX3J4dHguYy0zMzQtXHRcdHJldHVybjtcbi0tXG5pbmNsdWRlL25ldC90Y3AuaD03OTc9c3RhdGljIGlubGluZSB2b2lkIHRjcF9jbGVhbnVwX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTc5OS1cdHNrYl9kc3RfZHJvcChza2IpO1xuaW5jbHVkZS9uZXQvdGNwLmg6ODAwOlx0c2VjcGF0aF9yZXNldChza2IpO1xuaW5jbHVkZS9uZXQvdGNwLmgtODAxLX1cbi0tXG5pbmNsdWRlL25ldC94ZnJtLmg9MTE5Nj1zdGF0aWMgaW5saW5lIHZvaWRcbmluY2x1ZGUvbmV0L3hmcm0uaDoxMTk3OnNlY3BhdGhfcmVzZXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbmV0L3hmcm0uaC0xMTk4LXtcbi0tXG5pbmNsdWRlL25ldC94ZnJtLmg9MTI5MD1zdGF0aWMgaW5saW5lIGludCBfX3hmcm1fcG9saWN5X2NoZWNrMihzdHJ1Y3Qgc29jayAqc2ssIGludCBkaXIsXG4tLVxuaW5jbHVkZS9uZXQveGZybS5oLTEzMTMtXHRcdFx0ICovXG5pbmNsdWRlL25ldC94ZnJtLmg6MTMxNDpcdFx0XHRzZWNwYXRoX3Jlc2V0KHNrYik7XG5pbmNsdWRlL25ldC94ZnJtLmgtMTMxNS1cdFx0XHRyZXR1cm4gY2hlY2s7XG4tLVxubmV0L2lwdjQvZXNwNC5jPTIxMD1zdGF0aWMgdm9pZCBlc3Bfb3V0cHV0X2RvbmUodm9pZCAqZGF0YSwgaW50IGVycilcbi0tXG5uZXQvaXB2NC9lc3A0LmMtMjM2LVx0XHRza2JfcHVzaChza2IsIHNrYi1cdTAwM2VkYXRhIC0gc2tiX21hY19oZWFkZXIoc2tiKSk7XG5uZXQvaXB2NC9lc3A0LmM6MjM3Olx0XHRzZWNwYXRoX3Jlc2V0KHNrYik7XG5uZXQvaXB2NC9lc3A0LmMtMjM4LVx0XHR4ZnJtX2Rldl9yZXN1bWUoc2tiKTtcbi0tXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYz0zMD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmVzcDRfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbi0tXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYy05NC1vdXRfcmVzZXQ6XG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYzo5NTpcdHNlY3BhdGhfcmVzZXQoc2tiKTtcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTk2LW91dDpcbi0tXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYz0yNjU9c3RhdGljIGludCBlc3BfeG1pdChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuLS1cbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTM2OS1cbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jOjM3MDpcdHNlY3BhdGhfcmVzZXQoc2tiKTtcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTM3MS1cbi0tXG5uZXQvaXB2Ni9lc3A2LmM9MjQ1PXN0YXRpYyB2b2lkIGVzcF9vdXRwdXRfZG9uZSh2b2lkICpkYXRhLCBpbnQgZXJyKVxuLS1cbm5ldC9pcHY2L2VzcDYuYy0yNzMtXHRcdHNrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZWRhdGEgLSBza2JfbWFjX2hlYWRlcihza2IpKTtcbm5ldC9pcHY2L2VzcDYuYzoyNzQ6XHRcdHNlY3BhdGhfcmVzZXQoc2tiKTtcbm5ldC9pcHY2L2VzcDYuYy0yNzUtXHRcdHhmcm1fZGV2X3Jlc3VtZShza2IpO1xuLS1cbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jPTUzPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZXNwNl9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuLS1cbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jLTEyMy1vdXRfcmVzZXQ6XG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYzoxMjQ6XHRzZWNwYXRoX3Jlc2V0KHNrYik7XG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYy0xMjUtb3V0OlxuLS1cbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jPTMwMz1zdGF0aWMgaW50IGVzcDZfeG1pdChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuLS1cbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jLTM5MC1cbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jOjM5MTpcdHNlY3BhdGhfcmVzZXQoc2tiKTtcbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jLTM5Mi1cbi0tXG5uZXQvbDJ0cC9sMnRwX2V0aC5jPTEwNz1zdGF0aWMgdm9pZCBsMnRwX2V0aF9kZXZfcmVjdihzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZGF0YV9sZW4pXG4tLVxubmV0L2wydHAvbDJ0cF9ldGguYy0xMTQtXG5uZXQvbDJ0cC9sMnRwX2V0aC5jOjExNTpcdHNlY3BhdGhfcmVzZXQoc2tiKTtcbm5ldC9sMnRwL2wydHBfZXRoLmMtMTE2LVxuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYz00NjY9aW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYy01NzYtXHRpZiAoIXNwaSBcdTAwMjZcdTAwMjYgeGZybV9wYXJzZV9zcGkoc2tiLCBuZXh0aGRyLCBcdTAwMjZzcGksIFx1MDAyNnNlcSkpIHtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo1Nzc6XHRcdHNlY3BhdGhfcmVzZXQoc2tiKTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy01NzgtXHRcdFhGUk1fSU5DX1NUQVRTKG5ldCwgTElOVVhfTUlCX1hGUk1JTkhEUkVSUk9SKTtcbi0tXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNTg3LVx0XHRpZiAoc3AtXHUwMDNlbGVuID09IFhGUk1fTUFYX0RFUFRIKSB7XG5uZXQveGZybS94ZnJtX2lucHV0LmM6NTg4Olx0XHRcdHNlY3BhdGhfcmVzZXQoc2tiKTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy01ODktXHRcdFx0WEZSTV9JTkNfU1RBVFMobmV0LCBMSU5VWF9NSUJfWEZSTUlOQlVGRkVSRVJST1IpO1xuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYy01OTQtXHRcdGlmICh4ID09IE5VTEwpIHtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo1OTU6XHRcdFx0c2VjcGF0aF9yZXNldChza2IpO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTU5Ni1cdFx0XHRYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5OT1NUQVRFUyk7XG4tLVxubmV0L3hmcm0veGZybV9pbnB1dC5jLTYwMS1cdFx0aWYgKHVubGlrZWx5KHgtXHUwMDNlZGlyIFx1MDAyNlx1MDAyNiB4LVx1MDAzZWRpciAhPSBYRlJNX1NBX0RJUl9JTikpIHtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo2MDI6XHRcdFx0c2VjcGF0aF9yZXNldChza2IpO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTYwMy1cdFx0XHRYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5TVEFURURJUkVSUk9SKTtcbi0tXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmM9MjkzPXN0YXRpYyB2b2lkIHhmcm1pX3NjcnViX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIHhuZXQpXG4tLVxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jLTMwNi1cdGlwdnNfcmVzZXQoc2tiKTtcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYzozMDc6XHRzZWNwYXRoX3Jlc2V0KHNrYik7XG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmMtMzA4LVx0c2tiX29ycGhhbihza2IpO1xuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NzQ4PWludCB4ZnJtX291dHB1dChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy03OTAtXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjc5MTpcdHNlY3BhdGhfcmVzZXQoc2tiKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNzkyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgxNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFNLQiBFeHRlbnNpb24gTWFuYWdlbWVudCBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGludHJpY2FjaWVzIG9mIFNLQiBleHRlbnNpb24gbWFuYWdlbWVudCwgYW5kIEkmIzM5O3ZlIGZsYWdnZWQgYF9fc2tiX2V4dF9kZWxgIGFuZCBgX19za2JfZXh0X3B1dGAgYXMgbXkgaW5pdGlhbCBmb2N1cyBwb2ludHMuIFRob3NlIGZ1bmN0aW9ucyBhcmUgZGVmaW5pdGVseSBhdCB0aGUgaGVhcnQgb2YgdGhpcy4gU2luY2UgSSBrbm93IHRoZXNlIGZ1bmN0aW9ucyB3b3JrIHRvZ2V0aGVyLCBJJiMzOTtsbCBhbHNvIGJlIGNvbnNpZGVyaW5nIGBza2JfZXh0X2FkZGAgYXMgaXQgY291bGQgYWxzbyBiZSBpbXBvcnRhbnQuIE15IG9iamVjdGl2ZSBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSByZWxhdGUgdG8gZGlmZmVyZW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29uZmlndXJhdGlvbnMgcmVxdWlyZSB0aGVzZSBmdW5jdGlvbnMuIFRoZSBrZXkgY29uZmlncyBJJiMzOTttIGxvb2tpbmcgYXQgYXJlIGBDT05GSUdfTUNUUF9GTE9XU2AgYW5kIGBDT05GSUdfWEZSTWAsIHNpbmNlIEkga25vdyBib3RoIG9mIHRob3NlIGhhdmUgdG8gZG8gd2l0aCBuZXR3b3JrIGRhdGEgaGFuZGxpbmcuIEkmIzM5O2xsIG5lZWQgdG8gd29yayBiYWNrd2FyZCBmcm9tIHRob3NlIGNvbmZpZ3MuCgpMZXQmIzM5O3Mgc2VlLCBgTUNUUF9GTE9XU2AuIExvb2tzIGxpa2UgdGhhdCYjMzk7cyBlbmFibGVkIHRocm91Z2ggdGhlIGBNQ1RQYCBLY29uZmlnIGVudHJ5LiBQZWVraW5nIGF0IGBuZXQvbWN0cC9LY29uZmlnYCwgSSBzZWUgdGhhdCBgTUNUUF9GTE9XU2AgaXMgYSBib29sZWFuIHRoYXQgZGVwZW5kcyBvbiBgTUNUUGAgYW5kICpzZWxlY3RzKiBgU0tCX0VYVEVOU0lPTlNgLiBTbyBmYXIsIHNvIGdvb2QsIGEgY2xlYXIgbGluay4gSXQgbG9va3MgbGlrZSBgTUNUUF9GTE9XU2AgaXMgc2VsZWN0ZWQgYnkgYE1DVFBfVFJBTlNQT1JUX0kyQ2AgYW5kIGBNQ1RQX1RFU1RgLiBgTUNUUF9UUkFOU1BPUlRfSTJDYCBpdHNlbGYgZGVwZW5kcyBvbiBgSTJDX1NMQVZFYCBhbmQgYE1DVFBgLgoKVGhlbiB0aGVyZSYjMzk7cyBgWEZSTWAuIFRoYXQmIzM5O3MgYSBiaXQgbW9yZSBpbnZvbHZlZCwgYXMgaXTigJlzIHNlbGVjdGVkIGJ5IGEgd2hvbGUgYnVuY2ggb2YgdGhpbmdzOiBgWEZSTV9BTEdPYCwgYElORVRfQUhgLCBgSU5FVF9FU1BgLCBhbmQgYSBsb3QgbW9yZS4gVGhlIHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBmYWN0IHRoYXQgYFNLQl9FWFRFTlNJT05TYCBpcyBzZWxlY3RlZCBieSBgWEZSTWAgZGlyZWN0bHksIGFzIHdlbGwgYXMgYnkgYE1DVFBfRkxPV1NgLiBGdXJ0aGVyIGludmVzdGlnYXRpb24gbWlnaHQgYmUgbmVlZGVkIG9uIHdoaWNoIGNvbmZpZyBvcHRpb25zIGRlcGVuZCBvbiBgU0tCX0VYVEVOU0lPTlNgIGRpcmVjdGx5LiBgTVBUQ1BgLCBgQlJJREdFX05FVEZJTFRFUmAsIGFuZCBgTkVUX1RDX1NLQl9FWFRgIGFyZSBhbHNvIG9uIHRoZSBsaXN0IG9mIGNvbmZpZ3MgdGhhdCBzZWxlY3QgYFNLQl9FWFRFTlNJT05TYC4KCkkmIzM5O20gbWFraW5nIGEgbWVudGFsIG5vdGUgdG8gZG91YmxlLWNoZWNrIHRoZXNlIHJlbGF0aW9uc2hpcHMsIGVuc3VyaW5nIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBjcnVjaWFsIGRlcGVuZGVuY2llcyBvciBzaWRlIGVmZmVjdHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbmZpZ3VyYXRpb24gbWF0cml4LCBwYXJ0aWN1bGFybHkgZm9yIGBNQ1RQYCwgYE1DVFBfRkxPV1NgLCBgWEZSTWAsIGBTS0JfRVhURU5TSU9OU2AsIGBNQ1RQX1RSQU5TUE9SVF9JMkNgLCBhbmQgYEkyQ19TTEFWRWAsIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMgb24gdGhlIGJlaGF2aW9yIG9mIHRoZXNlIGV4dGVuc2lvbiBmdW5jdGlvbnMuIEkmIzM5O2xsIHN0YXJ0IGJ5IGRvdWJsZSBjaGVja2luZyBgTUNUUF9UUkFOU1BPUlRfSTJDYCBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01DVFBfVFJBTlNQT1JUX0kyQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tY3RwL0tjb25maWc9MjQ9Y29uZmlnIE1DVFBfU0VSSUFMX1RFU1Rcbi0tXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctMjgtXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6Mjk6Y29uZmlnIE1DVFBfVFJBTlNQT1JUX0kyQ1xuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTMwLVx0dHJpc3RhdGUgXCYjMzQ7TUNUUCBTTUJ1cy9JMkMgdHJhbnNwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDE2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIE1DVFAgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIE1DVFAgbmV0d29yayBkcml2ZXIuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI5LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUsIHRvcC1sZXZlbCBzZXR0aW5ncyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5kYW1lbnRhbCBrbm9icyBhbmQgbGV2ZXJzIHRoYXQgY29udHJvbCB3aGV0aGVyIHRoaXMgZHJpdmVyIGlzIGV2ZW4gKmluY2x1ZGVkKiBpbiB0aGUgYnVpbGQsIGFuZCBtYXliZSBzb21lIG9mIGl0cyBiYXNpYyBmZWF0dXJlIGZsYWdzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBlc3NlbnRpYWwgYnVpbGRpbmcgYmxvY2tzIOKAkyB0aGUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIHN1YnN5c3RlbXMsIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCBhbmQgYW55IHBsYXRmb3JtLXNwZWNpZmljIGNvbnN0cmFpbnRzIHRoYXQgYXJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGRyaXZlciBpbnRlZ3JhdGVzIGludG8gdGhlIHN5c3RlbS4gS25vd2luZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgbGV0IG1lIHNlZSB3aGljaCBNQ1RQIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUsIGhvdyB0byBlbmFibGUgdGhlbSwgYW5kIHdoYXQgcGxhdGZvcm0gcmVzb3VyY2VzIGFyZSByZXF1aXJlZC4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBsYXRlciwgd2hlbiBJIHN0YXJ0IGRlYnVnZ2luZyBvciB0cnlpbmcgdG8gb3B0aW1pemUgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdCAgICAgICAgYm9vbCBcJiMzNDtNQ1RQIHNlcmlhbCB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDI2Olx0ICAgICAgICBkZXBlbmRzIG9uIE1DVFBfU0VSSUFMPXkgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgMjc6XHQgICAgICAgIGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDI4Olx0XG4gIDI5Olx0Y29uZmlnIE1DVFBfVFJBTlNQT1JUX0kyQ1xuICAzMDpcdFx0dHJpc3RhdGUgXCYjMzQ7TUNUUCBTTUJ1cy9JMkMgdHJhbnNwb3J0XCYjMzQ7XG4gIDMxOlx0XHQjIGkyYy1tdXggaXMgb3B0aW9uYWwsIGJ1dCB3ZSBtdXN0IGJ1aWxkIGFzIGEgbW9kdWxlIGlmIGkyYy1tdXggaXMgYSBtb2R1bGVcbiAgMzI6XHRcdGRlcGVuZHMgb24gSTJDX01VWCB8fCAhSTJDX01VWFxuICAzMzpcdFx0ZGVwZW5kcyBvbiBJMkNcbiAgMzQ6XHRcdGRlcGVuZHMgb24gSTJDX1NMQVZFXG4gIDM1Olx0XHRzZWxlY3QgTUNUUF9GTE9XU1xuICAzNjpcdFx0aGVscFxuICAzNzpcdFx0ICBQcm92aWRlcyBhIGRyaXZlciB0byBhY2Nlc3MgTUNUUCBkZXZpY2VzIG92ZXIgU01CdXMvSTJDIHRyYW5zcG9ydCxcbiAgMzg6XHRcdCAgZnJvbSBETVRGIHNwZWNpZmljYXRpb24gRFNQMDIzNy4gQSBNQ1RQIHByb3RvY29sIG5ldHdvcmsgZGV2aWNlIGlzXG4gIDM5Olx0XHQgIGNyZWF0ZWQgZm9yIGVhY2ggSTJDIGJ1cyB0aGF0IGhhcyBiZWVuIGFzc2lnbmVkIGEgbWN0cC1pMmMgZGV2aWNlLlxuICA0MDpcdFxuICA0MTpcdGNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JM0NcbiAgNDI6XHRcdHRyaXN0YXRlIFwmIzM0O01DVFAgSTNDIHRyYW5zcG9ydFwmIzM0O1xuICA0MzpcdFx0ZGVwZW5kcyBvbiBJM0NcbiAgNDQ6XHRcdGhlbHBcbiAgNDU6XHRcdCAgUHJvdmlkZXMgYSBkcml2ZXIgdG8gYWNjZXNzIE1DVFAgZGV2aWNlcyBvdmVyIEkzQyB0cmFuc3BvcnQsXG4gIDQ2Olx0XHQgIGZyb20gRE1URiBzcGVjaWZpY2F0aW9uIERTUDAyMzMuXG4gIDQ3Olx0XHQgIEEgTUNUUCBwcm90b2NvbCBuZXR3b3JrIGRldmljZSBpcyBjcmVhdGVkIGZvciBlYWNoIEkzQyBidXNcbiAgNDg6XHRcdCAgaGF2aW5nIGEgXCYjMzQ7bWN0cC1jb250cm9sbGVyXCYjMzQ7IGRldmljZXRyZWUgcHJvcGVydHkuXG4gIDQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzEzCgkJCQkJCQlvdXRwdXQ6IDE3NAoJCQkJCQkJdGhvdWdodHM6IDQxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIGBDT05GSUdfTUNUUGAgaXMgdXNlci1jb25maWd1cmFibGUuIEEgcXVpY2sgY2hlY2sgd2l0aGluIGBuZXQvbWN0cC9LY29uZmlnYCBjb25maXJtcyBpdDsgdGhlIGBtZW51Y29uZmlnIE1DVFBgIGVudHJ5IHdpdGggYSBgZGVwZW5kcyBvbiBORVRgIGNsYXVzZSBtZWFucyBpdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IGNhbiBiZSB0b2dnbGVkLiBOb3csIEkgc2hvdWxkIGFsc28gZmxhZyBpdHMgZGVwZW5kZW5jaWVzLCB3aGljaCBpbmNsdWRlIHRoaW5ncyBsaWtlIGBDT05GSUdfTUNUUF9GTE9XU2AsIHBvdGVudGlhbGx5IGBDT05GSUdfTUNUUF9UUkFOU1BPUlRfSTJDYCAod2hpY2ggbGVhZHMgaW50byBgQ09ORklHX0kyQ2AgYW5kIGBDT05GSUdfSTJDX1NMQVZFYCksIGFuZCBgQ09ORklHX1hGUk1gIHdpdGggaXRzIHJlbGF0ZWQgY29uZmlnIG9wdGlvbnMgc3VjaCBhcyBgQ09ORklHX1hGUk1fVVNFUmAsIGBDT05GSUdfSU5FVF9FU1BgLCBgQ09ORklHX0lORVRfQUhgLCBgQ09ORklHX05FVF9LRVlgLgoKTmV4dCwgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBjaGFuZ2VzJiMzOTsgcG90ZW50aWFsIGZvciBmdXp6aW5nLCBzcGVjaWZpY2FsbHkgYmFzZWQgb24gdGhlIGBXb3J0aEZ1enppbmdgIGNyaXRlcmlhLiBUaGVzZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIGNsZWFudXAgbG9naWMsIHNwZWNpZmljYWxseSB3aXRoaW4gYF9fc2tiX2V4dF9kZWxgLCBgc2tiX2V4dF9wdXRfc3BgLCBhbmQgYHNrYl9leHRfcHV0X21jdHBgLiBUaGV5JiMzOTtyZSBhZGRyZXNzaW5nIGlzc3VlcyByZWxhdGVkIHRvIGRlbGV0aW5nIGBza2JgIGV4dGVuc2lvbnMsIHdoaWNoIGludm9sdmVzIHJlc2V0dGluZyByZWZlcmVuY2UgY291bnRzLCBwcm9wZXJseSB1bnJlZmVyZW5jaW5nIGBmbG93LSZndDtrZXlgLCBhbmQgemVyb2luZyBgc3AtJmd0O2xlbmAuIFRoaXMga2luZCBvZiBtb2RpZmljYXRpb24gaW4gY29yZSBgc2tidWZmYCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIG5ldHdvcmtpbmcsIElQc2VjLCBhbmQgTUNUUCwgaXMgcHJpbWUgZnV6emluZyB0ZXJyaXRvcnkuIEl0IGFmZmVjdHMgZnVuZGFtZW50YWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRhdGEgc3RydWN0dXJlcy4gSXQmIzM5O3MgZnVsbHkgdGVzdGFibGUgYW5kIGZ1enphYmxlLCBzbyBgV29ydGhGdXp6aW5nYCBpcyBkZWZpbml0ZWx5IHRydWUuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb25zIGFyZToKCiogICBgV29ydGhGdXp6aW5nYDogdHJ1ZQoqICAgYEZvY3VzU3ltYm9sc2A6IEkmIzM5O2xsIGZvY3VzIG9uIGBfX3NrYl9leHRfZGVsYCBhbmQgYF9fc2tiX2V4dF9wdXRgLgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBgU0tCX0VYVEVOU0lPTlNgLCBgWEZSTWAsIGBNQ1RQYCwgYE1DVFBfRkxPV1NgLCBhbmQsIGlmIHJlbGV2YW50LCBgTUNUUF9UUkFOU1BPUlRfSTJDYC4KCk5vdywgSSBqdXN0IG5lZWQgdG8gY29uc3RydWN0IHRoZSBgc2V0LXJlc3VsdHNgIGNhbGw6CgoqICAgYFdvcnRoRnV6emluZ2A6IHRydWUKKiAgIGBGb2N1c1N5bWJvbHNgOiBgWyYjMzQ7X19za2JfZXh0X2RlbCYjMzQ7LCAmIzM0O19fc2tiX2V4dF9wdXQmIzM0O11gCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtTS0JfRVhURU5TSU9OUyYjMzQ7LCAmIzM0O1hGUk0mIzM0OywgJiMzNDtNQ1RQJiMzNDssICYjMzQ7TUNUUF9GTE9XUyYjMzQ7XWAgKEkmIzM5O2xsIGtlZXAgYE1DVFBfVFJBTlNQT1JUX0kyQ2Agb24gc3RhbmRieSB1bmxlc3MgaXQmIzM5O3MgZXhwbGljaXRseSBuZWVkZWQpLgoqICAgYFJlYXNvbmluZ2A6IENvbmNpc2UgZXhwbGFuYXRpb24sIHdoaWNoIEkmIzM5O3ZlIGVzc2VudGlhbGx5IGFscmVhZHkgZG9uZS4KCk5vdyBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NLQl9FWFRFTlNJT05TJiMzNDssCiAgICAmIzM0O1hGUk0mIzM0OywKICAgICYjMzQ7TUNUUCYjMzQ7LAogICAgJiMzNDtNQ1RQX0ZMT1dTJiMzNDssCiAgICAmIzM0O01DVFBfVFJBTlNQT1JUX0kyQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc2tiX2V4dF9kZWwmIzM0OywKICAgICYjMzQ7X19za2JfZXh0X3B1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHNrYiBleHRlbnNpb24gZGVsZXRpb24gYW5kIGNsZWFudXAgbG9naWMgaW4gYF9fc2tiX2V4dF9kZWxgLCBgc2tiX2V4dF9wdXRfc3BgLCBhbmQgYHNrYl9leHRfcHV0X21jdHBgLCBwcm9wZXJseSBoYW5kbGluZyByZWZlcmVuY2UgY291bnRzIGFuZCByZXNvdXJjZSBkZWFsbG9jYXRpb24gZm9yIE1DVFAgZmxvd3MgYW5kIElQc2VjL1hGUk0gc2VjdXJpdHkgcGF0aHMgd2hlbiByZW1vdmluZyBhY3RpdmUgZXh0ZW5zaW9ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NLQl9FWFRFTlNJT05TJiMzNDssCiAgICAmIzM0O1hGUk0mIzM0OywKICAgICYjMzQ7TUNUUCYjMzQ7LAogICAgJiMzNDtNQ1RQX0ZMT1dTJiMzNDssCiAgICAmIzM0O01DVFBfVFJBTlNQT1JUX0kyQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc2tiX2V4dF9kZWwmIzM0OywKICAgICYjMzQ7X19za2JfZXh0X3B1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHNrYiBleHRlbnNpb24gZGVsZXRpb24gYW5kIGNsZWFudXAgbG9naWMgaW4gYF9fc2tiX2V4dF9kZWxgLCBgc2tiX2V4dF9wdXRfc3BgLCBhbmQgYHNrYl9leHRfcHV0X21jdHBgLCBwcm9wZXJseSBoYW5kbGluZyByZWZlcmVuY2UgY291bnRzIGFuZCByZXNvdXJjZSBkZWFsbG9jYXRpb24gZm9yIE1DVFAgZmxvd3MgYW5kIElQc2VjL1hGUk0gc2VjdXJpdHkgcGF0aHMgd2hlbiByZW1vdmluZyBhY3RpdmUgZXh0ZW5zaW9ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19za2JfZXh0X2RlbCgpYCBhbmQgaGVscGVyIGZ1bmN0aW9ucyBgc2tiX2V4dF9wdXRfc3AoKWAgLyBgc2tiX2V4dF9wdXRfbWN0cCgpYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIHRvIHByb3Blcmx5IHJlbGVhc2UgcmVmZXJlbmNlcyAoYG1jdHBfa2V5X3VucmVmYCBhbmQgYHhmcm1fc3RhdGVfcHV0YCkgYW5kIHplcm8gb3V0IGZpZWxkcyAoYHNwLVx1MDAzZWxlbiA9IDBgLCBgZmxvdy1cdTAwM2VrZXkgPSBOVUxMYCkgd2hlbiBza2IgZXh0ZW5zaW9ucyBhcmUgcmVtb3ZlZC5cblxuVGhlc2UgY2hhbmdlcyBwZXJ0YWluIHN0cmljdGx5IHRvIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbGlmZWN5Y2xlL2NsZWFudXAgbWFuYWdlbWVudCBvZiBza2IgZXh0ZW5zaW9uIGRhdGEuIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgZGF0YSBleHBvc3VyZSB0byB1c2VyIHNwYWNlLCBvciB2YXJpYWJsZSBpbml0aWFsaXphdGlvbi4gQW55IHBvdGVudGlhbCBkZWZlY3RzIGluIHRoaXMgY29kZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIHVucmVmLCBvciBtZW1vcnkgbGVha3MpIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHJlZmNvdW50IHRyYWNraW5nLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDljZGM5ZjQ4ZjQxNWE5ZmZlOTIyZTBiMjcxMmFlZjhjZWU1OGJhODgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAwNzoxNDozOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggOTY2YWYzYmVlZDk0ZC4uYWIxOTViOTljODUzMCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTcyMzYsMTYgJiM0Mzs3MjM2LDIzIEBAIHN0YXRpYyB2b2lkIHNrYl9leHRfcHV0X3NwKHN0cnVjdCBzZWNfcGF0aCAqc3ApCiB7CiAJdW5zaWduZWQgaW50IGk7CiAKJiM0MzsJaWYgKCFzcC0mZ3Q7bGVuKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWZvciAoaSA9IDA7IGkgJmx0OyBzcC0mZ3Q7bGVuOyBpJiM0MzsmIzQzOykKIAkJeGZybV9zdGF0ZV9wdXQoc3AtJmd0O3h2ZWNbaV0pOwomIzQzOwlzcC0mZ3Q7bGVuID0gMDsKIH0KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX01DVFBfRkxPV1MKIHN0YXRpYyB2b2lkIHNrYl9leHRfcHV0X21jdHAoc3RydWN0IG1jdHBfZmxvdyAqZmxvdykKIHsKLQlpZiAoZmxvdy0mZ3Q7a2V5KQotCQltY3RwX2tleV91bnJlZihmbG93LSZndDtrZXkpOwomIzQzOwlpZiAoIWZsb3ctJmd0O2tleSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbWN0cF9rZXlfdW5yZWYoZmxvdy0mZ3Q7a2V5KTsKJiM0MzsJZmxvdy0mZ3Q7a2V5ID0gTlVMTDsKIH0KICNlbmRpZgogCkBAIC03MjU3LDE1ICYjNDM7NzI2NCwyMCBAQCB2b2lkIF9fc2tiX2V4dF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKQogCWlmIChza2ItJmd0O2FjdGl2ZV9leHRlbnNpb25zID09IDApIHsKIAkJc2tiLSZndDtleHRlbnNpb25zID0gTlVMTDsKIAkJX19za2JfZXh0X3B1dChleHQpOwotI2lmZGVmIENPTkZJR19YRlJNCi0JfSBlbHNlIGlmIChpZCA9PSBTS0JfRVhUX1NFQ19QQVRIICZhbXA7JmFtcDsKLQkJICAgcmVmY291bnRfcmVhZCgmYW1wO2V4dC0mZ3Q7cmVmY250KSA9PSAxKSB7Ci0JCXN0cnVjdCBzZWNfcGF0aCAqc3AgPSBza2JfZXh0X2dldF9wdHIoZXh0LCBTS0JfRVhUX1NFQ19QQVRIKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQogCi0JCXNrYl9leHRfcHV0X3NwKHNwKTsKLQkJc3AtJmd0O2xlbiA9IDA7CiYjNDM7CWlmIChyZWZjb3VudF9yZWFkKCZhbXA7ZXh0LSZndDtyZWZjbnQpICZndDsgMSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX1hGUk0KJiM0MzsJaWYgKGlkID09IFNLQl9FWFRfU0VDX1BBVEgpCiYjNDM7CQlza2JfZXh0X3B1dF9zcChza2JfZXh0X2dldF9wdHIoZXh0LCBTS0JfRVhUX1NFQ19QQVRIKSk7CiYjNDM7I2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTCiYjNDM7CWlmIChpZCA9PSBTS0JfRVhUX01DVFApCiYjNDM7CQlza2JfZXh0X3B1dF9tY3RwKHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfTUNUUCkpOwogI2VuZGlmCi0JfQogfQogRVhQT1JUX1NZTUJPTChfX3NrYl9leHRfZGVsKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUzMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNLQiBFeHRlbnNpb24gRGVsZXRpb24gaW4gbmV0L2NvcmUvc2tidWZmLmMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBuZXQvY29yZS9za2J1ZmYuY2AgZGlmZiBhbmQgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNoYW5nZWQgaW4gYF9fc2tiX2V4dF9kZWxgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBoYW5kbGluZyB0aGUgY2xlYW51cCBvZiBTS0IgKFNvY2tldCBCdWZmZXIpIGV4dGVuc2lvbnMuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLCBzbyBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYXJvdW5kIGxpbmUgNzIzNi4KCkZpcnN0LCBJIHNlZSB0aGUgY2hhbmdlcyBtb2RpZnkgYHNrYl9leHRfcHV0X3NwYCBhbmQgYHNrYl9leHRfcHV0X21jdHBgLiBJdCBsb29rcyBsaWtlIGJvdGggb2YgdGhlc2UgYXJlIG5vdyBjaGVja2luZyB0byBzZWUgaWYgdGhlIHN0cnVjdHVyZSBtZW1iZXIgYHNwLSZndDtsZW5gIG9yIGBmbG93LSZndDtrZXlgIGFyZSBub24temVyby9ub24tbnVsbCBiZWZvcmUgYXR0ZW1wdGluZyB0aGUgY2xlYW51cC4gSW4gdGhlIGNhc2Ugb2YgdGhlIGBzcGAgb2JqZWN0LCBpZiBgc3AtJmd0O2xlbmAgaXMgemVybywgdGhlcmUgaXMgYSBgcmV0dXJuO2Agc3RhdGVtZW50OyBpZiBub3QsIHRoZW4gdGhlIHJlZmVyZW5jZSBjb3VudGVkIGVudHJpZXMsIGBzcC0mZ3Q7eHZlY1tpXWAsIGFyZSBkZWNyZW1lbnRlZC4gIFRoZSBgc3AtJmd0O2xlbmAgaXMgdGhlbiBzZXQgdG8gYDBgLiAgSW4gdGhlIGNhc2Ugb2YgYGZsb3ctJmd0O2tleWAsIGlmIGBmbG93LSZndDtrZXlgIGlzIG51bGwsIHRoZXJlIGlzIGEgYHJldHVybjtgIHN0YXRlbWVudDsgaWYgbm90LCB0aGVuIHRoZSByZWZlcmVuY2UgY291bnRlZCBlbnRyeSwgYGZsb3ctJmd0O2tleWAsIGlzIGRlY3JlbWVudGVkLCB0aGVuIGlzIHNldCB0byBOVUxMLgoKVGhlbiwgaW5zaWRlIGBfX3NrYl9leHRfZGVsYCwgdGhlIGRpZmYgbW9kaWZpZXMgdGhlIGxvZ2ljIGJhc2VkIG9uIHRoZSBleHRlbnNpb24gYGlkYC4gVGhlIGNoYW5nZXMgc2ltcGxpZnkgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGZvciByZWxlYXNpbmcgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBzZWN1cml0eSBwYXRocyAoYFNLQl9FWFRfU0VDX1BBVEhgKSBhbmQgTUNUUCBmbG93cyAoYFNLQl9FWFRfTUNUUGApLiBJdCBub3cgY2hlY2tzIHRoZSBgcmVmY250YCBvZiB0aGUgZXh0ZW5zaW9uLiAgSWYgdGhlIGByZWZjbnRgIGlzIGdyZWF0ZXIgdGhhbiAxLCB0aGVuIHRoZSBjb2RlIHJldHVybnMuICBPdGhlcndpc2UsIHRoZSBjb2RlIGNhbGxzIHRoZSBzcGVjaWFsaXplZCBwdXQgZnVuY3Rpb25zIGZvciB0aGUgc3BlY2lmaWVkIGV4dGVuc2lvbi4gU3BlY2lmaWNhbGx5OgoKKiAgIEZvciBgU0tCX0VYVF9TRUNfUEFUSGAsIGl0IGNhbGxzIGBza2JfZXh0X3B1dF9zcGAgdG8gcmVsZWFzZSB0aGUgc2VjdXJpdHkgcGF0aCByZXNvdXJjZXMuCiogICBGb3IgYFNLQl9FWFRfTUNUUGAsIGl0IGNhbGxzIGBza2JfZXh0X3B1dF9tY3RwYCB0byByZWxlYXNlIHRoZSBNQ1RQIGZsb3cgcmVzb3VyY2VzLgoKVGhpcyBhbGwgcG9pbnRzIHRvIG1vcmUgcm9idXN0IGhhbmRsaW5nIG9mIHRoZSByZWZlcmVuY2UgY291bnRzIGFuZCBhdm9pZGluZyBwb3RlbnRpYWwgZG91YmxlIGZyZWVzIG9yIHJlc291cmNlIGxlYWtzIHdoZW4gZGVhbGluZyB3aXRoIHRoZXNlIFNLQiBleHRlbnNpb25zLiBUaGVzZSB0eXBlcyBvZiBjaGFuZ2VzIGFyZSBnb29kIHRvIHNlZS4gSSBzaG91bGQgdmVyaWZ5IHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgbG9ja2luZyByZXF1aXJlbWVudHMgb3IgaW50cm9kdWNlIGFueSBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcyMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzIyMDpcdFx0XHRcdHJldHVybiBOVUxMO1xuNzIyMTpcdFx0fVxuNzIyMjpcdFxuNzIyMzpcdFx0bmV3bGVuID0gbmV3b2ZmICYjNDM7IHNrYl9leHRfdHlwZV9sZW5baWRdO1xuNzIyNDpcdFx0bmV3LVx1MDAzZWNodW5rcyA9IG5ld2xlbjtcbjcyMjU6XHRcdG5ldy1cdTAwM2VvZmZzZXRbaWRdID0gbmV3b2ZmO1xuNzIyNjpcdHNldF9hY3RpdmU6XG43MjI3Olx0XHRza2ItXHUwMDNlc2xvd19ncm8gPSAxO1xuNzIyODpcdFx0c2tiLVx1MDAzZWV4dGVuc2lvbnMgPSBuZXc7XG43MjI5Olx0XHRza2ItXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgfD0gMSBcdTAwM2NcdTAwM2MgaWQ7XG43MjMwOlx0XHRyZXR1cm4gc2tiX2V4dF9nZXRfcHRyKG5ldywgaWQpO1xuNzIzMTpcdH1cbjcyMzI6XHRFWFBPUlRfU1lNQk9MKHNrYl9leHRfYWRkKTtcbjcyMzM6XHRcbjcyMzQ6XHQjaWZkZWYgQ09ORklHX1hGUk1cbjcyMzU6XHRzdGF0aWMgdm9pZCBza2JfZXh0X3B1dF9zcChzdHJ1Y3Qgc2VjX3BhdGggKnNwKVxuNzIzNjpcdHtcbjcyMzc6XHRcdHVuc2lnbmVkIGludCBpO1xuNzIzODpcdFxuNzIzOTpcdFx0aWYgKCFzcC1cdTAwM2VsZW4pXG43MjQwOlx0XHRcdHJldHVybjtcbjcyNDE6XHRcbjcyNDI6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNwLVx1MDAzZWxlbjsgaSYjNDM7JiM0MzspXG43MjQzOlx0XHRcdHhmcm1fc3RhdGVfcHV0KHNwLVx1MDAzZXh2ZWNbaV0pO1xuNzI0NDpcdFx0c3AtXHUwMDNlbGVuID0gMDtcbjcyNDU6XHR9XG43MjQ2Olx0I2VuZGlmXG43MjQ3Olx0XG43MjQ4Olx0I2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXG43MjQ5Olx0c3RhdGljIHZvaWQgc2tiX2V4dF9wdXRfbWN0cChzdHJ1Y3QgbWN0cF9mbG93ICpmbG93KVxuNzI1MDpcdHtcbjcyNTE6XHRcdGlmICghZmxvdy1cdTAwM2VrZXkpXG43MjUyOlx0XHRcdHJldHVybjtcbjcyNTM6XHRcbjcyNTQ6XHRcdG1jdHBfa2V5X3VucmVmKGZsb3ctXHUwMDNla2V5KTtcbjcyNTU6XHRcdGZsb3ctXHUwMDNla2V5ID0gTlVMTDtcbjcyNTY6XHR9XG43MjU3Olx0I2VuZGlmXG43MjU4Olx0XG43MjU5Olx0dm9pZCBfX3NrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcbjcyNjA6XHR7XG43MjYxOlx0XHRzdHJ1Y3Qgc2tiX2V4dCAqZXh0ID0gc2tiLVx1MDAzZWV4dGVuc2lvbnM7XG43MjYyOlx0XG43MjYzOlx0XHRza2ItXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgXHUwMDI2PSB+KDEgXHUwMDNjXHUwMDNjIGlkKTtcbjcyNjQ6XHRcdGlmIChza2ItXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgPT0gMCkge1xuNzI2NTpcdFx0XHRza2ItXHUwMDNlZXh0ZW5zaW9ucyA9IE5VTEw7XG43MjY2Olx0XHRcdF9fc2tiX2V4dF9wdXQoZXh0KTtcbjcyNjc6XHRcdFx0cmV0dXJuO1xuNzI2ODpcdFx0fVxuNzI2OTpcdFxuNzI3MDpcdFx0aWYgKHJlZmNvdW50X3JlYWQoXHUwMDI2ZXh0LVx1MDAzZXJlZmNudCkgXHUwMDNlIDEpXG43MjcxOlx0XHRcdHJldHVybjtcbjcyNzI6XHRcbjcyNzM6XHQjaWZkZWYgQ09ORklHX1hGUk1cbjcyNzQ6XHRcdGlmIChpZCA9PSBTS0JfRVhUX1NFQ19QQVRIKVxuNzI3NTpcdFx0XHRza2JfZXh0X3B1dF9zcChza2JfZXh0X2dldF9wdHIoZXh0LCBTS0JfRVhUX1NFQ19QQVRIKSk7XG43Mjc2Olx0I2VuZGlmXG43Mjc3Olx0I2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXG43Mjc4Olx0XHRpZiAoaWQgPT0gU0tCX0VYVF9NQ1RQKVxuNzI3OTpcdFx0XHRza2JfZXh0X3B1dF9tY3RwKHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfTUNUUCkpO1xuNzI4MDpcdCNlbmRpZlxuNzI4MTpcdH1cbjcyODI6XHRFWFBPUlRfU1lNQk9MKF9fc2tiX2V4dF9kZWwpO1xuNzI4MzpcdFxuNzI4NDpcdHZvaWQgX19za2JfZXh0X3B1dChzdHJ1Y3Qgc2tiX2V4dCAqZXh0KVxuNzI4NTpcdHtcbjcyODY6XHRcdC8qIElmIHRoaXMgaXMgbGFzdCBjbG9uZSwgbm90aGluZyBjYW4gaW5jcmVtZW50XG43Mjg3Olx0XHQgKiBpdCBhZnRlciBjaGVjayBwYXNzZXMuICBBdm9pZHMgb25lIGF0b21pYyBvcC5cbjcyODg6XHRcdCAqL1xuNzI4OTpcdFx0aWYgKHJlZmNvdW50X3JlYWQoXHUwMDI2ZXh0LVx1MDAzZXJlZmNudCkgPT0gMSlcbjcyOTA6XHRcdFx0Z290byBmcmVlX25vdztcbjcyOTE6XHRcbjcyOTI6XHRcdGlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmV4dC1cdTAwM2VyZWZjbnQpKVxuNzI5MzpcdFx0XHRyZXR1cm47XG43Mjk0Olx0ZnJlZV9ub3c6XG43Mjk1Olx0I2lmZGVmIENPTkZJR19YRlJNXG43Mjk2Olx0XHRpZiAoX19za2JfZXh0X2V4aXN0KGV4dCwgU0tCX0VYVF9TRUNfUEFUSCkpXG43Mjk3Olx0XHRcdHNrYl9leHRfcHV0X3NwKHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfU0VDX1BBVEgpKTtcbjcyOTg6XHQjZW5kaWZcbjcyOTk6XHQjaWZkZWYgQ09ORklHX01DVFBfRkxPV1NcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAyNgoJCQkJCQkJb3V0cHV0OiAyMTcKCQkJCQkJCXRob3VnaHRzOiA5ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogU0tCIEV4dGVuc2lvbiBDbGVhbnVwKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyBhbmQgd2h5IEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gVGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGNsZWFuaW5nIHVwIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggU0tCIGV4dGVuc2lvbnMsIHNwZWNpZmljYWxseSB3aGVuIGFuIGV4dGVuc2lvbiBpcyByZW1vdmVkIHZpYSBgX19za2JfZXh0X2RlbGAuIFRoZSBmdW5jdGlvbiBgX19za2JfZXh0X2RlbGAgaXMgY2FsbGVkIHdoZW4gYW4gYGlkYCBpcyByZW1vdmVkIGZyb20gdGhlIGBza2JgLiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBhY3RpdmUgZXh0ZW5zaW9ucywgdGhlIGVudGlyZSBleHRlbnNpb24gc3RydWN0dXJlIGdldHMgY2xlYW5lZCB1cCB3aXRoIGBfX3NrYl9leHRfcHV0YCBhbmQgYHNrYi0mZ3Q7ZXh0ZW5zaW9uc2AgaXMgc2V0IHRvIE5VTEwuCgpUaGUgaW50ZXJlc3RpbmcgcGFydCwgZm9yIG91ciBwdXJwb3NlcywgaGFwcGVucyB3aGVuIHRoZXJlIGFyZSAqb3RoZXIqIGFjdGl2ZSBleHRlbnNpb25zIHN0aWxsIG9uIHRoZSBTS0IuICBJZiB0aGUgZXh0ZW5zaW9uJiMzOTtzIHJlZmVyZW5jZSBjb3VudCBpcyAxIChtZWFuaW5nIGl0JiMzOTtzIG5vdCBzaGFyZWQgd2l0aCBhbnkgY2xvbmVkIFNLQnMpLCB0aGVuIHRoZSBwYXRjaCYjMzk7cyBsb2dpYyBraWNrcyBpbi4gUHJldmlvdXNseSwgaXQgaGFuZGxlZCB0aGUgYFNLQl9FWFRfU0VDX1BBVEhgIGJ5IHB1dHRpbmcgdGhlIHhmcm0gc3RhdGVzIGFuZCBjbGVhcmluZyBgc3AtJmd0O2xlbmAuIE5vdyBpdCBhbHNvIGhhbmRsZXMgYFNLQl9FWFRfTUNUUGAgYnkgcHV0dGluZyB0aGUgYGZsb3ctJmd0O2tleWAgYW5kIHNldHRpbmcgYGZsb3ctJmd0O2tleSA9IE5VTExgLiBJbiB0aGUgY29ycmVzcG9uZGluZyBgc2tiX2V4dF9wdXRfc3BgIGFuZCBgc2tiX2V4dF9wdXRfbWN0cGAgZnVuY3Rpb25zLCB0aGVyZSBhcmUgY2hlY2tzIHRvIGF2b2lkIGRvdWJsZS1mcmVlaW5nIHRoZXNlIHJlc291cmNlcy4KClRoZSByYXRpb25hbGUgaXMgY2xlYXI6IHdoZW4gYF9fc2tiX2V4dF9kZWxgIGlzIGNhbGxlZCBmb3IgTUNUUCBvciBYRlJNIGFuZCBvdGhlciBleHRlbnNpb25zIHJlbWFpbiBhY3RpdmUgb24gdGhlIFNLQiwgdGhlIGV4dGVuc2lvbiBzdHJ1Y3R1cmUgaXRzZWxmIHN0YXlzIGF0dGFjaGVkIHRvIHRoZSBTS0IuIEJ1dCwgdGhlIHNwZWNpZmljIGV4dGVuc2lvbiBgaWRgIGlzIGRlbGV0ZWQsIHNvIHRoZSByZXNvdXJjZXMgaXQgd2FzIHVzaW5nIChsaWtlIHRoZSB4ZnJtX3N0YXRlIG9yIG1jdHBfa2V5KSBtdXN0IGJlIHJlbGVhc2VkIHByb21wdGx5ICh3aGVuIHJlZmNvdW50ID09IDEpLCBhdm9pZGluZyBsZWFrcy4gU2V0dGluZyBgc3AtJmd0O2xlbiA9IDBgIC8gYGZsb3ctJmd0O2tleSA9IE5VTExgIHdoZW4gYF9fc2tiX2V4dF9wdXRgIGlzIGxhdGVyIGNhbGxlZCBwcmV2ZW50cyB0aGUgZG91YmxlLWZyZWUvZG91YmxlLXVucmVmIGlzc3VlLgoKTm93LCB0aGUgS01TQU4gcXVlc3Rpb24uICBMZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY3JpdGVyaWE6CgoqICAgKipLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZToqKiBOb3BlLiBUaGlzIHBhdGNoIGlzbiYjMzk7dCB0b3VjaGluZyBhbnkgZGF0YSB0aGF0IGdldHMgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2VyIHNwYWNlLgoqICAgKipCcmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogTm8uIGBzcC0mZ3Q7bGVuYCBhbmQgYGZsb3ctJmd0O2tleWAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIG1lbWJlcnMgb2YgdGhlIGBzZWNfcGF0aGAgYW5kIGBtY3RwX2Zsb3dgIHN0cnVjdHVyZXMuCiogICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHM6KiogTm8uIEl0JiMzOTtzIGZvY3VzZWQgb24gY2xlYW51cCwgbm90IGludHJvZHVjaW5nIG5ldyBjb21wbGV4IHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGRhdGEuCiogICAqKkJvdW5kcyBjaGVja3MvYnVmZmVyIGxlbmd0aHMgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBkYXRhOioqIE5vdCBhcHBsaWNhYmxlLgoKVGhpcyBwYXRjaCBpcyBhYm91dCByZWZlcmVuY2UgY2xlYW51cCwgcmVzb3VyY2UgbWFuYWdlbWVudC4gVGhlIHJpc2tzIGhlcmUgYXJlIHJlc291cmNlIGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBBbGwgdGhlc2UgYXJlIGV4YWN0bHkgdGhlIHR5cGUgb2YgYnVncyB0aGF0IEtBU0FOLCByZWZjb3VudCBjaGVja2luZywgYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlICpkZXNpZ25lZCogdG8gY2F0Y2guIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFRoZXJlZm9yZSwgdGhlcmUmIzM5O3Mgbm8gbmVlZCBmb3IgS01TQU4gaGVyZS4KCkkmIzM5O2xsIHByb2NlZWQgdG8gbWFyayB0aGlzIHdpdGggYE5lZWRzS01TQU46IGZhbHNlYCBhbmQgbWFrZSBzdXJlIHRoZSByZWFzb25pbmcgaXMgY2xlYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX3NrYl9leHRfZGVsKClgIGFuZCBoZWxwZXIgZnVuY3Rpb25zIGBza2JfZXh0X3B1dF9zcCgpYCAvIGBza2JfZXh0X3B1dF9tY3RwKClgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AgdG8gcHJvcGVybHkgcmVsZWFzZSByZWZlcmVuY2VzIChgbWN0cF9rZXlfdW5yZWZgIGFuZCBgeGZybV9zdGF0ZV9wdXRgKSBhbmQgemVybyBvdXQgZmllbGRzIChgc3AtXHUwMDNlbGVuID0gMGAsIGBmbG93LVx1MDAzZWtleSA9IE5VTExgKSB3aGVuIHNrYiBleHRlbnNpb25zIGFyZSByZW1vdmVkLlxuXG5UaGVzZSBjaGFuZ2VzIHBlcnRhaW4gc3RyaWN0bHkgdG8gcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsaWZlY3ljbGUvY2xlYW51cCBtYW5hZ2VtZW50IG9mIHNrYiBleHRlbnNpb24gZGF0YS4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGFsbG9jYXRpb25zLCBkYXRhIGV4cG9zdXJlIHRvIHVzZXIgc3BhY2UsIG9yIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uLiBBbnkgcG90ZW50aWFsIGRlZmVjdHMgaW4gdGhpcyBjb2RlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgdW5yZWYsIG9yIG1lbW9yeSBsZWFrcykgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4gb3Igc3RhbmRhcmQgcmVmY291bnQgdHJhY2tpbmcsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX3NrYl9leHRfZGVsKClgIGFuZCBoZWxwZXIgZnVuY3Rpb25zIGBza2JfZXh0X3B1dF9zcCgpYCAvIGBza2JfZXh0X3B1dF9tY3RwKClgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AgdG8gcHJvcGVybHkgcmVsZWFzZSByZWZlcmVuY2VzIChgbWN0cF9rZXlfdW5yZWZgIGFuZCBgeGZybV9zdGF0ZV9wdXRgKSBhbmQgemVybyBvdXQgZmllbGRzIChgc3AtXHUwMDNlbGVuID0gMGAsIGBmbG93LVx1MDAzZWtleSA9IE5VTExgKSB3aGVuIHNrYiBleHRlbnNpb25zIGFyZSByZW1vdmVkLlxuXG5UaGVzZSBjaGFuZ2VzIHBlcnRhaW4gc3RyaWN0bHkgdG8gcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsaWZlY3ljbGUvY2xlYW51cCBtYW5hZ2VtZW50IG9mIHNrYiBleHRlbnNpb24gZGF0YS4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGFsbG9jYXRpb25zLCBkYXRhIGV4cG9zdXJlIHRvIHVzZXIgc3BhY2UsIG9yIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uLiBBbnkgcG90ZW50aWFsIGRlZmVjdHMgaW4gdGhpcyBjb2RlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgdW5yZWYsIG9yIG1lbW9yeSBsZWFrcykgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4gb3Igc3RhbmRhcmQgcmVmY291bnQgdHJhY2tpbmcsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MTQ6MzkuMTA2ODkwMTY5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkwOTE2NzQyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0tCX0VYVEVOU0lPTlNcIixcbiAgICBcIlhGUk1cIixcbiAgICBcIk1DVFBcIixcbiAgICBcIk1DVFBfRkxPV1NcIixcbiAgICBcIk1DVFBfVFJBTlNQT1JUX0kyQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc2tiX2V4dF9kZWxcIixcbiAgICBcIl9fc2tiX2V4dF9wdXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBfX3NrYl9leHRfZGVsKClgIGFuZCBoZWxwZXIgZnVuY3Rpb25zIGBza2JfZXh0X3B1dF9zcCgpYCAvIGBza2JfZXh0X3B1dF9tY3RwKClgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AgdG8gcHJvcGVybHkgcmVsZWFzZSByZWZlcmVuY2VzIChgbWN0cF9rZXlfdW5yZWZgIGFuZCBgeGZybV9zdGF0ZV9wdXRgKSBhbmQgemVybyBvdXQgZmllbGRzIChgc3AtXFx1MDAzZWxlbiA9IDBgLCBgZmxvdy1cXHUwMDNla2V5ID0gTlVMTGApIHdoZW4gc2tiIGV4dGVuc2lvbnMgYXJlIHJlbW92ZWQuXFxuXFxuVGhlc2UgY2hhbmdlcyBwZXJ0YWluIHN0cmljdGx5IHRvIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbGlmZWN5Y2xlL2NsZWFudXAgbWFuYWdlbWVudCBvZiBza2IgZXh0ZW5zaW9uIGRhdGEuIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgZGF0YSBleHBvc3VyZSB0byB1c2VyIHNwYWNlLCBvciB2YXJpYWJsZSBpbml0aWFsaXphdGlvbi4gQW55IHBvdGVudGlhbCBkZWZlY3RzIGluIHRoaXMgY29kZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIHVucmVmLCBvciBtZW1vcnkgbGVha3MpIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHJlZmNvdW50IHRyYWNraW5nLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBza2IgZXh0ZW5zaW9uIGRlbGV0aW9uIGFuZCBjbGVhbnVwIGxvZ2ljIGluIGBfX3NrYl9leHRfZGVsYCwgYHNrYl9leHRfcHV0X3NwYCwgYW5kIGBza2JfZXh0X3B1dF9tY3RwYCwgcHJvcGVybHkgaGFuZGxpbmcgcmVmZXJlbmNlIGNvdW50cyBhbmQgcmVzb3VyY2UgZGVhbGxvY2F0aW9uIGZvciBNQ1RQIGZsb3dzIGFuZCBJUHNlYy9YRlJNIHNlY3VyaXR5IHBhdGhzIHdoZW4gcmVtb3ZpbmcgYWN0aXZlIGV4dGVuc2lvbnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoxNDozOS4xMDY4OTQ4MDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjE2MDYyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDljZGM5ZjQ4ZjQxNWE5ZmZlOTIyZTBiMjcxMmFlZjhjZWU1OGJhODhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDc6MTQ6MzggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xcbmluZGV4IDk2NmFmM2JlZWQ5NGQuLmFiMTk1Yjk5Yzg1MzAgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcXG4rKysgYi9uZXQvY29yZS9za2J1ZmYuY1xcbkBAIC03MjM2LDE2ICs3MjM2LDIzIEBAIHN0YXRpYyB2b2lkIHNrYl9leHRfcHV0X3NwKHN0cnVjdCBzZWNfcGF0aCAqc3ApXFxuIHtcXG4gXFx0dW5zaWduZWQgaW50IGk7XFxuIFxcbitcXHRpZiAoIXNwLVxcdTAwM2VsZW4pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzcC1cXHUwMDNlbGVuOyBpKyspXFxuIFxcdFxcdHhmcm1fc3RhdGVfcHV0KHNwLVxcdTAwM2V4dmVjW2ldKTtcXG4rXFx0c3AtXFx1MDAzZWxlbiA9IDA7XFxuIH1cXG4gI2VuZGlmXFxuIFxcbiAjaWZkZWYgQ09ORklHX01DVFBfRkxPV1NcXG4gc3RhdGljIHZvaWQgc2tiX2V4dF9wdXRfbWN0cChzdHJ1Y3QgbWN0cF9mbG93ICpmbG93KVxcbiB7XFxuLVxcdGlmIChmbG93LVxcdTAwM2VrZXkpXFxuLVxcdFxcdG1jdHBfa2V5X3VucmVmKGZsb3ctXFx1MDAzZWtleSk7XFxuK1xcdGlmICghZmxvdy1cXHUwMDNla2V5KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRtY3RwX2tleV91bnJlZihmbG93LVxcdTAwM2VrZXkpO1xcbitcXHRmbG93LVxcdTAwM2VrZXkgPSBOVUxMO1xcbiB9XFxuICNlbmRpZlxcbiBcXG5AQCAtNzI1NywxNSArNzI2NCwyMCBAQCB2b2lkIF9fc2tiX2V4dF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxcbiBcXHRpZiAoc2tiLVxcdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyA9PSAwKSB7XFxuIFxcdFxcdHNrYi1cXHUwMDNlZXh0ZW5zaW9ucyA9IE5VTEw7XFxuIFxcdFxcdF9fc2tiX2V4dF9wdXQoZXh0KTtcXG4tI2lmZGVmIENPTkZJR19YRlJNXFxuLVxcdH0gZWxzZSBpZiAoaWQgPT0gU0tCX0VYVF9TRUNfUEFUSCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICByZWZjb3VudF9yZWFkKFxcdTAwMjZleHQtXFx1MDAzZXJlZmNudCkgPT0gMSkge1xcbi1cXHRcXHRzdHJ1Y3Qgc2VjX3BhdGggKnNwID0gc2tiX2V4dF9nZXRfcHRyKGV4dCwgU0tCX0VYVF9TRUNfUEFUSCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbiBcXG4tXFx0XFx0c2tiX2V4dF9wdXRfc3Aoc3ApO1xcbi1cXHRcXHRzcC1cXHUwMDNlbGVuID0gMDtcXG4rXFx0aWYgKHJlZmNvdW50X3JlYWQoXFx1MDAyNmV4dC1cXHUwMDNlcmVmY250KSBcXHUwMDNlIDEpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuKyNpZmRlZiBDT05GSUdfWEZSTVxcbitcXHRpZiAoaWQgPT0gU0tCX0VYVF9TRUNfUEFUSClcXG4rXFx0XFx0c2tiX2V4dF9wdXRfc3Aoc2tiX2V4dF9nZXRfcHRyKGV4dCwgU0tCX0VYVF9TRUNfUEFUSCkpO1xcbisjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXFxuK1xcdGlmIChpZCA9PSBTS0JfRVhUX01DVFApXFxuK1xcdFxcdHNrYl9leHRfcHV0X21jdHAoc2tiX2V4dF9nZXRfcHRyKGV4dCwgU0tCX0VYVF9NQ1RQKSk7XFxuICNlbmRpZlxcbi1cXHR9XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChfX3NrYl9leHRfZGVsKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjE0OjM5LjUzOTczMDkzN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzU2MjY0MjYzMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0tCX0VYVEVOU0lPTlNcIixcbiAgICBcIlhGUk1cIixcbiAgICBcIk1DVFBcIixcbiAgICBcIk1DVFBfRkxPV1NcIixcbiAgICBcIk1DVFBfVFJBTlNQT1JUX0kyQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc2tiX2V4dF9kZWxcIixcbiAgICBcIl9fc2tiX2V4dF9wdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHNrYiBleHRlbnNpb24gZGVsZXRpb24gYW5kIGNsZWFudXAgbG9naWMgaW4gYF9fc2tiX2V4dF9kZWxgLCBgc2tiX2V4dF9wdXRfc3BgLCBhbmQgYHNrYl9leHRfcHV0X21jdHBgLCBwcm9wZXJseSBoYW5kbGluZyByZWZlcmVuY2UgY291bnRzIGFuZCByZXNvdXJjZSBkZWFsbG9jYXRpb24gZm9yIE1DVFAgZmxvd3MgYW5kIElQc2VjL1hGUk0gc2VjdXJpdHkgcGF0aHMgd2hlbiByZW1vdmluZyBhY3RpdmUgZXh0ZW5zaW9ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDljZGM5ZjQ4ZjQxNWE5ZmZlOTIyZTBiMjcxMmFlZjhjZWU1OGJhODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwNzoxNDozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IDk2NmFmM2JlZWQ5NGQuLmFiMTk1Yjk5Yzg1MzAgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC03MjM2LDE2ICs3MjM2LDIzIEBAIHN0YXRpYyB2b2lkIHNrYl9leHRfcHV0X3NwKHN0cnVjdCBzZWNfcGF0aCAqc3ApXG4ge1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXG4rXHRpZiAoIXNwLVx1MDAzZWxlbilcbitcdFx0cmV0dXJuO1xuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3AtXHUwMDNlbGVuOyBpKyspXG4gXHRcdHhmcm1fc3RhdGVfcHV0KHNwLVx1MDAzZXh2ZWNbaV0pO1xuK1x0c3AtXHUwMDNlbGVuID0gMDtcbiB9XG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXG4gc3RhdGljIHZvaWQgc2tiX2V4dF9wdXRfbWN0cChzdHJ1Y3QgbWN0cF9mbG93ICpmbG93KVxuIHtcbi1cdGlmIChmbG93LVx1MDAzZWtleSlcbi1cdFx0bWN0cF9rZXlfdW5yZWYoZmxvdy1cdTAwM2VrZXkpO1xuK1x0aWYgKCFmbG93LVx1MDAzZWtleSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0bWN0cF9rZXlfdW5yZWYoZmxvdy1cdTAwM2VrZXkpO1xuK1x0Zmxvdy1cdTAwM2VrZXkgPSBOVUxMO1xuIH1cbiAjZW5kaWZcbiBcbkBAIC03MjU3LDE1ICs3MjY0LDIwIEBAIHZvaWQgX19za2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpXG4gXHRpZiAoc2tiLVx1MDAzZWFjdGl2ZV9leHRlbnNpb25zID09IDApIHtcbiBcdFx0c2tiLVx1MDAzZWV4dGVuc2lvbnMgPSBOVUxMO1xuIFx0XHRfX3NrYl9leHRfcHV0KGV4dCk7XG4tI2lmZGVmIENPTkZJR19YRlJNXG4tXHR9IGVsc2UgaWYgKGlkID09IFNLQl9FWFRfU0VDX1BBVEggXHUwMDI2XHUwMDI2XG4tXHRcdCAgIHJlZmNvdW50X3JlYWQoXHUwMDI2ZXh0LVx1MDAzZXJlZmNudCkgPT0gMSkge1xuLVx0XHRzdHJ1Y3Qgc2VjX3BhdGggKnNwID0gc2tiX2V4dF9nZXRfcHRyKGV4dCwgU0tCX0VYVF9TRUNfUEFUSCk7XG4rXHRcdHJldHVybjtcbitcdH1cbiBcbi1cdFx0c2tiX2V4dF9wdXRfc3Aoc3ApO1xuLVx0XHRzcC1cdTAwM2VsZW4gPSAwO1xuK1x0aWYgKHJlZmNvdW50X3JlYWQoXHUwMDI2ZXh0LVx1MDAzZXJlZmNudCkgXHUwMDNlIDEpXG4rXHRcdHJldHVybjtcbitcbisjaWZkZWYgQ09ORklHX1hGUk1cbitcdGlmIChpZCA9PSBTS0JfRVhUX1NFQ19QQVRIKVxuK1x0XHRza2JfZXh0X3B1dF9zcChza2JfZXh0X2dldF9wdHIoZXh0LCBTS0JfRVhUX1NFQ19QQVRIKSk7XG4rI2VuZGlmXG4rI2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXG4rXHRpZiAoaWQgPT0gU0tCX0VYVF9NQ1RQKVxuK1x0XHRza2JfZXh0X3B1dF9tY3RwKHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfTUNUUCkpO1xuICNlbmRpZlxuLVx0fVxuIH1cbiBFWFBPUlRfU1lNQk9MKF9fc2tiX2V4dF9kZWwpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MTQ6MzkuNTM5NzMyNDk3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM1OTY3MjQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoaXMgcGF0Y2gsIGFzIGlmIEkgd2VyZSBwcm9jZXNzaW5nIGl0IG15c2VsZjpcblxuKipQYXRjaCBBbmFseXNpcyBhbmQgQ29udGV4dHVhbCBSZXZpZXcqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvY29yZS9za2J1ZmYuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcywgcGFydGljdWxhcmx5IHNpbmNlIGl0IHNlZW1zIHRvIGJlIGFmZmVjdGluZyBgc2tiX2V4dF9wdXRfc3BgLCBgc2tiX2V4dF9wdXRfbWN0cGAsIGFuZCBgX19za2JfZXh0X2RlbGAuIFRob3NlIGZ1bmN0aW9ucyBhcmUga2V5LCBzbyBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gZ3Jhc3AgdGhlaXIgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgU0tCIChTb2NrZXQgQnVmZmVyKSBhcmNoaXRlY3R1cmUuIEknbGwgbmVlZCB0byByZW1lbWJlciBob3cgZXh0ZW5zaW9ucyBhbmQgbWV0YWRhdGEgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBTS0Igc3RydWN0dXJlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IHNvbWUgbW9yZSBpbmZvIG9uIGV4YWN0bHkgd2hhdCdzIGJlaW5nIHR3ZWFrZWQuIEknbGwgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIHRoZSBhcmVhIG9mIGBuZXQvY29yZS9za2J1ZmYuY2AgYXJvdW5kIGxpbmUgNzIzNi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW1tZWRpYXRlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHBpbnBvaW50IHByZWNpc2VseSB3aGVyZSB0aGUgY2hhbmdlcyBhcmUgYmVpbmcgbWFkZSwgc28gSSBjYW4gc3RhcnQgZm9ybXVsYXRpbmcgYSBoeXBvdGhlc2lzIGFib3V0IHdoYXQgdGhlIHBhdGNoIGlzIHRyeWluZyB0byBhY2hpZXZlIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gSSBhbnRpY2lwYXRlIHRoYXQgdGhlIGNvZGUgaW4gdGhlIGltbWVkaWF0ZSB2aWNpbml0eSBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoxNDo0NC44OTk0MDg2NjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDczMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzIyMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzIyMDpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG43MjIxOlxcdFxcdH1cXG43MjIyOlxcdFxcbjcyMjM6XFx0XFx0bmV3bGVuID0gbmV3b2ZmICsgc2tiX2V4dF90eXBlX2xlbltpZF07XFxuNzIyNDpcXHRcXHRuZXctXFx1MDAzZWNodW5rcyA9IG5ld2xlbjtcXG43MjI1OlxcdFxcdG5ldy1cXHUwMDNlb2Zmc2V0W2lkXSA9IG5ld29mZjtcXG43MjI2OlxcdHNldF9hY3RpdmU6XFxuNzIyNzpcXHRcXHRza2ItXFx1MDAzZXNsb3dfZ3JvID0gMTtcXG43MjI4OlxcdFxcdHNrYi1cXHUwMDNlZXh0ZW5zaW9ucyA9IG5ldztcXG43MjI5OlxcdFxcdHNrYi1cXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgfD0gMSBcXHUwMDNjXFx1MDAzYyBpZDtcXG43MjMwOlxcdFxcdHJldHVybiBza2JfZXh0X2dldF9wdHIobmV3LCBpZCk7XFxuNzIzMTpcXHR9XFxuNzIzMjpcXHRFWFBPUlRfU1lNQk9MKHNrYl9leHRfYWRkKTtcXG43MjMzOlxcdFxcbjcyMzQ6XFx0I2lmZGVmIENPTkZJR19YRlJNXFxuNzIzNTpcXHRzdGF0aWMgdm9pZCBza2JfZXh0X3B1dF9zcChzdHJ1Y3Qgc2VjX3BhdGggKnNwKVxcbjcyMzY6XFx0e1xcbjcyMzc6XFx0XFx0dW5zaWduZWQgaW50IGk7XFxuNzIzODpcXHRcXG43MjM5OlxcdFxcdGlmICghc3AtXFx1MDAzZWxlbilcXG43MjQwOlxcdFxcdFxcdHJldHVybjtcXG43MjQxOlxcdFxcbjcyNDI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNwLVxcdTAwM2VsZW47IGkrKylcXG43MjQzOlxcdFxcdFxcdHhmcm1fc3RhdGVfcHV0KHNwLVxcdTAwM2V4dmVjW2ldKTtcXG43MjQ0OlxcdFxcdHNwLVxcdTAwM2VsZW4gPSAwO1xcbjcyNDU6XFx0fVxcbjcyNDY6XFx0I2VuZGlmXFxuNzI0NzpcXHRcXG43MjQ4OlxcdCNpZmRlZiBDT05GSUdfTUNUUF9GTE9XU1xcbjcyNDk6XFx0c3RhdGljIHZvaWQgc2tiX2V4dF9wdXRfbWN0cChzdHJ1Y3QgbWN0cF9mbG93ICpmbG93KVxcbjcyNTA6XFx0e1xcbjcyNTE6XFx0XFx0aWYgKCFmbG93LVxcdTAwM2VrZXkpXFxuNzI1MjpcXHRcXHRcXHRyZXR1cm47XFxuNzI1MzpcXHRcXG43MjU0OlxcdFxcdG1jdHBfa2V5X3VucmVmKGZsb3ctXFx1MDAzZWtleSk7XFxuNzI1NTpcXHRcXHRmbG93LVxcdTAwM2VrZXkgPSBOVUxMO1xcbjcyNTY6XFx0fVxcbjcyNTc6XFx0I2VuZGlmXFxuNzI1ODpcXHRcXG43MjU5OlxcdHZvaWQgX19za2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpXFxuNzI2MDpcXHR7XFxuNzI2MTpcXHRcXHRzdHJ1Y3Qgc2tiX2V4dCAqZXh0ID0gc2tiLVxcdTAwM2VleHRlbnNpb25zO1xcbjcyNjI6XFx0XFxuNzI2MzpcXHRcXHRza2ItXFx1MDAzZWFjdGl2ZV9leHRlbnNpb25zIFxcdTAwMjY9IH4oMSBcXHUwMDNjXFx1MDAzYyBpZCk7XFxuNzI2NDpcXHRcXHRpZiAoc2tiLVxcdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyA9PSAwKSB7XFxuNzI2NTpcXHRcXHRcXHRza2ItXFx1MDAzZWV4dGVuc2lvbnMgPSBOVUxMO1xcbjcyNjY6XFx0XFx0XFx0X19za2JfZXh0X3B1dChleHQpO1xcbjcyNjc6XFx0XFx0XFx0cmV0dXJuO1xcbjcyNjg6XFx0XFx0fVxcbjcyNjk6XFx0XFxuNzI3MDpcXHRcXHRpZiAocmVmY291bnRfcmVhZChcXHUwMDI2ZXh0LVxcdTAwM2VyZWZjbnQpIFxcdTAwM2UgMSlcXG43MjcxOlxcdFxcdFxcdHJldHVybjtcXG43MjcyOlxcdFxcbjcyNzM6XFx0I2lmZGVmIENPTkZJR19YRlJNXFxuNzI3NDpcXHRcXHRpZiAoaWQgPT0gU0tCX0VYVF9TRUNfUEFUSClcXG43Mjc1OlxcdFxcdFxcdHNrYl9leHRfcHV0X3NwKHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfU0VDX1BBVEgpKTtcXG43Mjc2OlxcdCNlbmRpZlxcbjcyNzc6XFx0I2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXFxuNzI3ODpcXHRcXHRpZiAoaWQgPT0gU0tCX0VYVF9NQ1RQKVxcbjcyNzk6XFx0XFx0XFx0c2tiX2V4dF9wdXRfbWN0cChza2JfZXh0X2dldF9wdHIoZXh0LCBTS0JfRVhUX01DVFApKTtcXG43MjgwOlxcdCNlbmRpZlxcbjcyODE6XFx0fVxcbjcyODI6XFx0RVhQT1JUX1NZTUJPTChfX3NrYl9leHRfZGVsKTtcXG43MjgzOlxcdFxcbjcyODQ6XFx0dm9pZCBfX3NrYl9leHRfcHV0KHN0cnVjdCBza2JfZXh0ICpleHQpXFxuNzI4NTpcXHR7XFxuNzI4NjpcXHRcXHQvKiBJZiB0aGlzIGlzIGxhc3QgY2xvbmUsIG5vdGhpbmcgY2FuIGluY3JlbWVudFxcbjcyODc6XFx0XFx0ICogaXQgYWZ0ZXIgY2hlY2sgcGFzc2VzLiAgQXZvaWRzIG9uZSBhdG9taWMgb3AuXFxuNzI4ODpcXHRcXHQgKi9cXG43Mjg5OlxcdFxcdGlmIChyZWZjb3VudF9yZWFkKFxcdTAwMjZleHQtXFx1MDAzZXJlZmNudCkgPT0gMSlcXG43MjkwOlxcdFxcdFxcdGdvdG8gZnJlZV9ub3c7XFxuNzI5MTpcXHRcXG43MjkyOlxcdFxcdGlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZleHQtXFx1MDAzZXJlZmNudCkpXFxuNzI5MzpcXHRcXHRcXHRyZXR1cm47XFxuNzI5NDpcXHRmcmVlX25vdzpcXG43Mjk1OlxcdCNpZmRlZiBDT05GSUdfWEZSTVxcbjcyOTY6XFx0XFx0aWYgKF9fc2tiX2V4dF9leGlzdChleHQsIFNLQl9FWFRfU0VDX1BBVEgpKVxcbjcyOTc6XFx0XFx0XFx0c2tiX2V4dF9wdXRfc3Aoc2tiX2V4dF9nZXRfcHRyKGV4dCwgU0tCX0VYVF9TRUNfUEFUSCkpO1xcbjcyOTg6XFx0I2VuZGlmXFxuNzI5OTpcXHQjaWZkZWYgQ09ORklHX01DVFBfRkxPV1NcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MTQ6NDQuODk5NjU4NDUyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEyMTEwNzg4NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIElzc3VlcyB3aXRoIGBfX3NrYl9leHRfZGVsYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYF9fc2tiX2V4dF9kZWxgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgYWxsIHRoZSBjYWxsZXJzIG9mIGBfX3NrYl9leHRfZGVsYCBhbmQgYHNrYl9leHRfZGVsYCBkaXJlY3RseS4gVGhhdCdzIHRoZSBtb3N0IG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgdG8gc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCBhbmQsIHRoZXJlZm9yZSwgd2hlcmUgYW55IGlzc3VlcyBtaWdodCBtYW5pZmVzdC5cblxuQmV5b25kIGEgZGlyZWN0IGNhbGwgYW5hbHlzaXMsIEkgc2hvdWxkIGNvbnNpZGVyIHRoZSBicm9hZGVyIGNvbnRleHQgb2Ygc29tZSByZWxldmFudCBjb25maWd1cmF0aW9ucywgc3BlY2lmaWNhbGx5IGhvdyB0aGlzIG1pZ2h0IGludGVyYWN0IHdpdGggU2VjdXJpdHkgQ29udGV4dHMsIGFuZCBwb3RlbnRpYWxseSB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgTXVsdGljYXN0IERhdGEgQ2hhbm5lbCBvdmVyIFRyYW5zcG9ydCBQcm90b2NvbCwgb3IgTUNUUCBmbG93cywgYW5kIGFsc28gd2l0aCBYRlJNLCBhbmQgU0tCIEV4dGVuc2lvbnMuXG5cblRvIHN0YXJ0LCBJJ2xsIG5lZWQgdG8gcnVuIGEgYGdyZXBgIGZvciBib3RoIGBfX3NrYl9leHRfZGVsYCBhbmQgYHNrYl9leHRfZGVsYCB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZS4gSSBuZWVkIHRvIGJlIHRob3JvdWdoIGFuZCBwcmVjaXNlIHRvIGlkZW50aWZ5IGFsbCBpbnN0YW5jZXMuIFRoaXMgd2lsbCBob3BlZnVsbHkgcHJvdmlkZSBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBpdHMgdXNhZ2UgYW5kIGFzc2lzdCBpbiBwaW5wb2ludGluZyB0aGUgY3JpdGljYWwgYXJlYXMgdG8gZm9jdXMgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMDgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjE0OjU2LjExMDc0MDA0NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI3MDcyNTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9leHRfZGVsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmg9NTA4Mz12b2lkICpza2JfZXh0X2FkZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA4NDp2b2lkIF9fc2tiX2V4dF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwODUtdm9pZCBfX3NrYl9leHRfcHV0KHN0cnVjdCBza2JfZXh0ICpleHQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MTE3PXN0YXRpYyBpbmxpbmUgYm9vbCBza2JfZXh0X2V4aXN0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEyMS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxMjI6c3RhdGljIGlubGluZSB2b2lkIHNrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMjMte1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEyNC1cXHRpZiAoc2tiX2V4dF9leGlzdChza2IsIGlkKSlcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxMjU6XFx0XFx0X19za2JfZXh0X2RlbChza2IsIGlkKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMjYtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MTU0PXN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X3Jlc2V0KHN0cnVjdCBza19idWZmICpza2IpIHt9XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTU1OnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdW51c2VkKSB7fVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTE1Ni1zdGF0aWMgaW5saW5lIHZvaWQgX19za2JfZXh0X2NvcHkoc3RydWN0IHNrX2J1ZmYgKmQsIGNvbnN0IHN0cnVjdCBza19idWZmICpzKSB7fVxcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oPTExOTc9c2VjcGF0aF9yZXNldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oLTExOTktI2lmZGVmIENPTkZJR19YRlJNXFxuaW5jbHVkZS9uZXQveGZybS5oOjEyMDA6XFx0c2tiX2V4dF9kZWwoc2tiLCBTS0JfRVhUX1NFQ19QQVRIKTtcXG5pbmNsdWRlL25ldC94ZnJtLmgtMTIwMS0jZW5kaWZcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTU1PXN0YXRpYyB2b2lkIG5mX2JyaWRnZV9pbmZvX2ZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE1Ni17XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxNTc6XFx0c2tiX2V4dF9kZWwoc2tiLCBTS0JfRVhUX0JSSURHRV9ORik7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xNTgtfVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NzI0OT1zdGF0aWMgdm9pZCBza2JfZXh0X3B1dF9tY3RwKHN0cnVjdCBtY3RwX2Zsb3cgKmZsb3cpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03MjU4LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjcyNTk6dm9pZCBfX3NrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcXG5uZXQvY29yZS9za2J1ZmYuYy03MjYwLXtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcyODEtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjcyODI6RVhQT1JUX1NZTUJPTChfX3NrYl9leHRfZGVsKTtcXG5uZXQvY29yZS9za2J1ZmYuYy03MjgzLVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0xMTEzPXN0YXRpYyBlbnVtIG1hcHBpbmdfc3RhdHVzIGdldF9tYXBwaW5nX3N0YXR1cyhzdHJ1Y3Qgc29jayAqc3NrLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xMTc0LVxcdFxcdFxcdFxcdCAqL1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTE3NTpcXHRcXHRcXHRcXHRza2JfZXh0X2RlbChza2IsIFNLQl9FWFRfTVBUQ1ApO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTE3Ni1cXHRcXHRcXHRcXHRyZXR1cm4gTUFQUElOR19PSztcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTIwOS1cXHRcXHQgICAgc3ViZmxvdy1cXHUwMDNlbWFwX2NzdW1fcmVxZCA9PSBtcGV4dC1cXHUwMDNlY3N1bV9yZXFkKSB7XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxMjEwOlxcdFxcdFxcdHNrYl9leHRfZGVsKHNrYiwgU0tCX0VYVF9NUFRDUCk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0xMjExLVxcdFxcdFxcdGdvdG8gdmFsaWRhdGVfY3N1bTtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTI1My1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjEyNTQ6XFx0c2tiX2V4dF9kZWwoc2tiLCBTS0JfRVhUX01QVENQKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEyNTUtXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTE4MjA9aW50IHRjZl9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19hcGkuYy0xODY3LVxcdFxcdFxcdC8qIENvbnN1bWUsIHNvIGNsb25lZC9yZWRpcmVjdCBza2JzIHdvbid0IGluaGVyaXQgZXh0ICovXFxubmV0L3NjaGVkL2Nsc19hcGkuYzoxODY4OlxcdFxcdFxcdHNrYl9leHRfZGVsKHNrYiwgVENfU0tCX0VYVCk7XFxubmV0L3NjaGVkL2Nsc19hcGkuYy0xODY5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoxNDo1Ny42Mzc4MTcwNjFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTQ3NzU1MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0tCIEV4dGVuc2lvbiBEZWxldGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgd2UncmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgbW9kaWZpZXMgaG93IHdlIGhhbmRsZSBTS0IgKFNvY2tldCBCdWZmZXIpIGV4dGVuc2lvbnMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBfX3NrYl9leHRfZGVsYCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgaGFzIGEgY291cGxlIG9mIGNvbmRpdGlvbmFsIGJsb2Nrcywgb25lIGRlYWxpbmcgd2l0aCBgU0tCX0VYVF9TRUNfUEFUSGAgKHNlY3VyaXR5IHBhdGggZXh0ZW5zaW9ucyksIGFuZCBpdCBsb29rcyBsaWtlIGEgc2ltaWxhciBjb25kaXRpb25hbCBpcyBiZWluZyBhZGRlZCBmb3IgYE1DVFBgIGZsb3dzLlxuXG5UaGUgY29yZSBjaGFuZ2UgaW4gYF9fc2tiX2V4dF9kZWxgIHNlZW1zIHRvIGJlIGFyb3VuZCBob3cgd2UgZGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgYW5kIHdoZW4gd2UgYWN0dWFsbHkgcmVsZWFzZSB0aGUgZXh0ZW5zaW9uIGRhdGEuIEJlZm9yZSwgaWYgYHNrYi1cdTAwM2VhY3RpdmVfZXh0ZW5zaW9uc2AgYmVjYW1lIHplcm8sIGluZGljYXRpbmcgdGhlIGxhc3QgZXh0ZW5zaW9uIHdhcyBiZWluZyByZW1vdmVkLCB3ZSdkIGltbWVkaWF0ZWx5IGNsZWFuIHVwIHRoZSBleHRlbnNpb24gYW5kLCBzcGVjaWZpY2FsbHkgZm9yIGBTS0JfRVhUX1NFQ19QQVRIYCwgcmVzZXQgdGhlIGBzcC1cdTAwM2VsZW5gIGlmIHRoZSByZWZjb3VudCB3YXMgb25lLiBOb3csIHRoZXJlIGFyZSBhZGRpdGlvbmFsIGNoZWNrcyB0byBiYWlsIG91dCBpZiB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBleHRlbnNpb24gYmxvY2sgaXMgZ3JlYXRlciB0aGFuIG9uZS4gVGhlIGNvbmRpdGlvbmFsIGJsb2NrIGZvciBgU0tCX0VYVF9TRUNfUEFUSGAgaGFzIGJlZW4gbW9kaWZpZWQsIGFuZCBhIHNpbWlsYXIgYmxvY2sgaGFzIGJlZW4gYWRkZWQgZm9yIGBNQ1RQX0ZMT1dTYCwgd2hlcmUgd2UgYXJlIG5vdyBoYW5kbGluZyB0aGUgdW5yZWYgYW5kIE5VTExpbmcgb2YgYGZsb3ctXHUwMDNla2V5YC5cblxuVGhlIG1vc3Qgc2lnbmlmaWNhbnQgY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYW4gZWFybHkgcmV0dXJuIGlmIHRoZSByZWZlcmVuY2UgY291bnQgaXMgZ3JlYXRlciB0aGFuIG9uZS4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gb3IgYnVnIGZpeC4gUGVyaGFwcyB3ZSB3ZXJlIHByZW1hdHVyZWx5IHJlbGVhc2luZyBkYXRhIHRoYXQgd2FzIHN0aWxsIGluIHVzZSwgbGVhZGluZyB0byBzb21lIGtpbmQgb2YgY29ycnVwdGlvbiBvciBkb3VibGUtZnJlZSBzaXR1YXRpb24uIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiB3aGVuIHdvcmtpbmcgd2l0aCByZWZlcmVuY2UtY291bnRlZCBtZW1vcnkgbWFuYWdlbWVudC5cblxuSSdtIGFsc28gc2VlaW5nIHNvbWUgYWRkaXRpb25hbCBtb2RpZmljYXRpb25zIGluIGBza2JfZXh0X3B1dF9zcGAgYW5kIGBza2JfZXh0X3B1dF9tY3RwYCwgd2hpY2ggYXJlIHRoZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IHJlbGVhc2luZyB0aGUgc2VjdXJpdHkgcGF0aCBhbmQgTUNUUCBmbG93IGRhdGEsIHJlc3BlY3RpdmVseS4gSW4gdGhlIGBza2JfZXh0X3B1dF9zcGAgZnVuY3Rpb24gdGhlcmUgaXMgbm93IGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgdGhlIHNlY3VyaXR5IHBhdGggaXMgdmFsaWQgYmVmb3JlIHByb2NlZWRpbmcgd2l0aCBpdCdzIGRlbGV0aW9uLiBUaGUgaW1wb3J0YW50IGNoYW5nZSBpbiBgc2tiX2V4dF9wdXRfbWN0cGAgaGFuZGxlcyB0aGUgdW5yZWZlcmVuY2luZyBhbmQgbnVsbGluZyBvZiB0aGUgYGZsb3ctXHUwMDNla2V5YCwgYW5kIGdpdmVuIHRoYXQgdGhpcyBzZWN0aW9uIG9mIGNvZGUgaXMgbmV3LCBpdCBpcyBsaWtlbHkgbGlua2VkIHRvIHRoZSBhZGRpdGlvbiBvZiBgTUNUUF9GTE9XU2AgaW50byB0aGUgYF9fc2tiX2V4dF9kZWxgIGZ1bmN0aW9uLlxuXG5JIHNob3VsZCBwcm9iYWJseSBhbHNvIHRha2UgYSBxdWljayBsb29rIGF0IGBfX3NrYl9leHRfcHV0YCB0byBlbnN1cmUgdGhhdCB0aGlzIHBhdGNoIGlzIGNvbnNpc3RlbnQgd2l0aCBob3cgdGhlIFNLQiBleHRlbnNpb25zIGFyZSBiZWluZyBtYW5hZ2VkIGFjcm9zcyB0aGUgYm9hcmQuIE92ZXJhbGwsIHRoaXMgbG9va3MgbGlrZSBhIGNhcmVmdWwgcmVmaW5lbWVudCBvZiB0aGUgU0tCIGV4dGVuc2lvbiBtYW5hZ2VtZW50LCBsaWtlbHkgYWltaW5nIGZvciBpbmNyZWFzZWQgcm9idXN0bmVzcyBhbmQgcG90ZW50aWFsbHkgYWRkcmVzc2luZyBhIHN1YnRsZSBjb25jdXJyZW5jeSBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY3MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoxNTowMi4xODU1NzQ4NDZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzI1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzI5MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzI5MDpcXHRcXHRcXHRnb3RvIGZyZWVfbm93O1xcbjcyOTE6XFx0XFxuNzI5MjpcXHRcXHRpZiAoIXJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2ZXh0LVxcdTAwM2VyZWZjbnQpKVxcbjcyOTM6XFx0XFx0XFx0cmV0dXJuO1xcbjcyOTQ6XFx0ZnJlZV9ub3c6XFxuNzI5NTpcXHQjaWZkZWYgQ09ORklHX1hGUk1cXG43Mjk2OlxcdFxcdGlmIChfX3NrYl9leHRfZXhpc3QoZXh0LCBTS0JfRVhUX1NFQ19QQVRIKSlcXG43Mjk3OlxcdFxcdFxcdHNrYl9leHRfcHV0X3NwKHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfU0VDX1BBVEgpKTtcXG43Mjk4OlxcdCNlbmRpZlxcbjcyOTk6XFx0I2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXFxuNzMwMDpcXHRcXHRpZiAoX19za2JfZXh0X2V4aXN0KGV4dCwgU0tCX0VYVF9NQ1RQKSlcXG43MzAxOlxcdFxcdFxcdHNrYl9leHRfcHV0X21jdHAoc2tiX2V4dF9nZXRfcHRyKGV4dCwgU0tCX0VYVF9NQ1RQKSk7XFxuNzMwMjpcXHQjZW5kaWZcXG43MzAzOlxcdFxcbjczMDQ6XFx0XFx0a21lbV9jYWNoZV9mcmVlKHNrYnVmZl9leHRfY2FjaGUsIGV4dCk7XFxuNzMwNTpcXHR9XFxuNzMwNjpcXHRFWFBPUlRfU1lNQk9MKF9fc2tiX2V4dF9wdXQpO1xcbjczMDc6XFx0I2VuZGlmIC8qIENPTkZJR19TS0JfRVhURU5TSU9OUyAqL1xcbjczMDg6XFx0XFxuNzMwOTpcXHRzdGF0aWMgdm9pZCBrZnJlZV9za2JfbmFwaV9jYWNoZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjczMTA6XFx0e1xcbjczMTE6XFx0XFx0LyogaWYgU0tCIGlzIGEgY2xvbmUsIGRvbid0IGhhbmRsZSB0aGlzIGNhc2UgKi9cXG43MzEyOlxcdFxcdGlmIChza2ItXFx1MDAzZWZjbG9uZSAhPSBTS0JfRkNMT05FX1VOQVZBSUxBQkxFKSB7XFxuNzMxMzpcXHRcXHRcXHRfX2tmcmVlX3NrYihza2IpO1xcbjczMTQ6XFx0XFx0XFx0cmV0dXJuO1xcbjczMTU6XFx0XFx0fVxcbjczMTY6XFx0XFxuNzMxNzpcXHRcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuNzMxODpcXHRcXHRfX25hcGlfa2ZyZWVfc2tiKHNrYiwgU0tCX0NPTlNVTUVEKTtcXG43MzE5OlxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoxNTowMi4xODU4NDk2NTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTU3MzQ4MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgS2NvbmZpZyBMYW5kc2NhcGUqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UgcmVsYXRlZCB0byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gTGV0J3Mgc3RhcnQgd2l0aCBhIHF1aWNrIHNjYW4uIE9rYXksIGxvb2tzIGxpa2Ugd2UgaGF2ZSBgQ09ORklHX1NLQl9FWFRFTlNJT05TYCwgYENPTkZJR19YRlJNYCwgYENPTkZJR19NQ1RQX0ZMT1dTYCwgYW5kIGBDT05GSUdfTUNUUGAuIFRoZXNlIHNlZW0gbGlrZSB0aGUga2V5IHBsYXllcnMuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGVzZSBjb25maWd1cmF0aW9ucyAqYWN0dWFsbHkqIGRvLCBzbyBJIHNob3VsZCBkaXZlIGludG8gdGhlIEtjb25maWcgZGVmaW5pdGlvbnMgZm9yIGBTS0JfRVhURU5TSU9OU2AsIGBNQ1RQX0ZMT1dTYCwgYW5kIGBYRlJNYCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZWlyIHB1cnBvc2UuIFRoaXMnbGwgaGVscCBtZSBmaWd1cmUgb3V0IGhvdyB0aGV5IGludGVyYWN0IGFuZCB0aGUgaW1wYWN0IG9mIGVhY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNDYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjE1OjA1LjM0MzIwMDAzM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxMTM2NDMwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgKFNLQl9FWFRFTlNJT05TfE1DVFBfRkxPV1N8TUNUUHxYRlJNKVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tY3RwL0tjb25maWc9ND1tZW51IFxcXCJNQ1RQIERldmljZSBEcml2ZXJzXFxcIlxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy01LVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzo2OmNvbmZpZyBNQ1RQX1NFUklBTFxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJNQ1RQIHNlcmlhbCB0cmFuc3BvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctMjMtXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjI0OmNvbmZpZyBNQ1RQX1NFUklBTF9URVNUXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTI1LSAgICAgICAgYm9vbCBcXFwiTUNUUCBzZXJpYWwgdGVzdHNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy0yOC1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6Mjk6Y29uZmlnIE1DVFBfVFJBTlNQT1JUX0kyQ1xcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy0zMC1cXHR0cmlzdGF0ZSBcXFwiTUNUUCBTTUJ1cy9JMkMgdHJhbnNwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTQwLVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzo0MTpjb25maWcgTUNUUF9UUkFOU1BPUlRfSTNDXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTQyLVxcdHRyaXN0YXRlIFxcXCJNQ1RQIEkzQyB0cmFuc3BvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNDktXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjUwOmNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJcXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNTEtXFx0dHJpc3RhdGUgXFxcIk1DVFAgb3ZlciBVU0IgY29tbW9uIGxpYnJhcnlcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNTktXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjYwOmNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVFxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy02MS0gICAgICAgIGJvb2wgXFxcIk1DVFAgdXNibGliIHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNjQtXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjY1OmNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JcXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNjYtXFx0dHJpc3RhdGUgXFxcIk1DVFAgVVNCIHRyYW5zcG9ydFxcXCJcXG4tLVxcbm5ldC9LY29uZmlnPTYzPWNvbmZpZyBTS0JfREVDUllQVEVEXFxuLS1cXG5uZXQvS2NvbmZpZy02NS1cXG5uZXQvS2NvbmZpZzo2Njpjb25maWcgU0tCX0VYVEVOU0lPTlNcXG5uZXQvS2NvbmZpZy02Ny1cXHRib29sXFxuLS1cXG5uZXQvbWN0cC9LY29uZmlnLTEtXFxubmV0L21jdHAvS2NvbmZpZzoyOm1lbnVjb25maWcgTUNUUFxcbm5ldC9tY3RwL0tjb25maWctMy1cXHRkZXBlbmRzIG9uIE5FVFxcbi0tXFxubmV0L21jdHAvS2NvbmZpZy0xNC1cXG5uZXQvbWN0cC9LY29uZmlnOjE1OmNvbmZpZyBNQ1RQX1RFU1RcXG5uZXQvbWN0cC9LY29uZmlnLTE2LSAgICAgICAgYm9vbCBcXFwiTUNUUCBjb3JlIHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5uZXQvbWN0cC9LY29uZmlnLTIwLVxcbm5ldC9tY3RwL0tjb25maWc6MjE6Y29uZmlnIE1DVFBfRkxPV1NcXG5uZXQvbWN0cC9LY29uZmlnLTIyLVxcdGJvb2xcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNC0jXFxubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXFxubmV0L3hmcm0vS2NvbmZpZy02LVxcdGJvb2xcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTAtXFxubmV0L3hmcm0vS2NvbmZpZzoxMTpjb25maWcgWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cXHRib29sXFxubmV0L3hmcm0vS2NvbmZpZy0xMy1cXG5uZXQveGZybS9LY29uZmlnOjE0OmNvbmZpZyBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTIyPWlmIElORVRcXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcXG5uZXQveGZybS9LY29uZmlnLTI0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0zMS1cXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcGF0aWJsZSBBQkkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNDItXFxubmV0L3hmcm0vS2NvbmZpZzo0Mzpjb25maWcgWEZSTV9JTlRFUkZBQ0VcXG5uZXQveGZybS9LY29uZmlnLTQ0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB2aXJ0dWFsIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNTAtXFxubmV0L3hmcm0vS2NvbmZpZzo1MTpjb25maWcgWEZSTV9TVUJfUE9MSUNZXFxubmV0L3hmcm0vS2NvbmZpZy01Mi1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTYwLVxcbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctNjItXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNzEtXFxubmV0L3hmcm0vS2NvbmZpZzo3Mjpjb25maWcgWEZSTV9TVEFUSVNUSUNTXFxubmV0L3hmcm0vS2NvbmZpZy03My1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdGF0aXN0aWNzXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy04My0jIFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmUgaW1wbGVtZW50ZWQuXFxubmV0L3hmcm0vS2NvbmZpZzo4NDpjb25maWcgWEZSTV9BSFxcbm5ldC94ZnJtL0tjb25maWctODUtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctOTItIyBhbGdvcml0aG1zIHRoYXQgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cXG5uZXQveGZybS9LY29uZmlnOjkzOmNvbmZpZyBYRlJNX0VTUFxcbm5ldC94ZnJtL0tjb25maWctOTQtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTA1LVxcbm5ldC94ZnJtL0tjb25maWc6MTA2OmNvbmZpZyBYRlJNX0lQQ09NUFxcbm5ldC94ZnJtL0tjb25maWctMTA3LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTE0MC1cXG5uZXQveGZybS9LY29uZmlnOjE0MTpjb25maWcgWEZSTV9JUFRGU1xcbm5ldC94ZnJtL0tjb25maWctMTQyLVxcdHRyaXN0YXRlIFxcXCJJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTU2LVxcbm5ldC94ZnJtL0tjb25maWc6MTU3OmNvbmZpZyBYRlJNX0VTUElOVENQXFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoxNTowNy41NTQ1NzIyNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTA0MTY2OTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIERlcGVuZGVuY2llcyBhbmQgSW50ZXJzZWN0aW9ucyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW50ZXJhY3Rpb25zIG9mIGEgZmV3IGtleSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzZWUgd2hpY2ggb3RoZXIgb3B0aW9ucyBhcmUgYWN0aXZhdGVkIG9yIHJlcXVpcmVkIHdoZW4gYENPTkZJR19NQ1RQX0ZMT1dTYCwgYENPTkZJR19TS0JfRVhURU5TSU9OU2AsIGFuZCBgQ09ORklHX1hGUk1gIGFyZSBlbmFibGVkLiBJJ20gbG9va2luZyBmb3IgdGhlIHJpcHBsZSBlZmZlY3RzIOKAkyB3aGljaCBmZWF0dXJlcyBhcmUgcHVsbGVkIGluLCB3aGljaCBhc3N1bXB0aW9ucyBhcmUgbWFkZSwgYW5kIHVsdGltYXRlbHksIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyIGFyY2hpdGVjdHVyYWxseS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBvcHRpbWl6aW5nIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgdHJvdWJsZXNob290aW5nIGNvbmZsaWN0cywgYW5kIGdhaW5pbmcgYSBjb21wcmVoZW5zaXZlIGdyYXNwIG9mIHRoZSBzeXN0ZW0ncyBkZXNpZ24uIEknbSBleHBlY3Rpbmcgc29tZSBpbnRlcmVzdGluZyBjb25uZWN0aW9ucywgZXNwZWNpYWxseSBhcm91bmQgbmV0d29yayBpbmZyYXN0cnVjdHVyZSwgYnV0IEknbGwgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMgdG8ga25vdyB3aGF0IGlzIGVuYWJsZWQvZGlzYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwNDQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoxNTowOS42NTg3NDA4NDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDk3MTIyODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IChTS0JfRVhURU5TSU9OU3xNQ1RQX0ZMT1dTfFhGUk0pXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MTk0PWNvbmZpZyBJWEdCRV9JUFNFQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0xOTgtXFx0ZGVmYXVsdCB5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoxOTk6XFx0c2VsZWN0IFhGUk1fQUxHT1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjAwLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjIwPWNvbmZpZyBJWEdCRVZGX0lQU0VDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIyNC1cXHRkZWZhdWx0IHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjIyNTpcXHRzZWxlY3QgWEZSTV9BTEdPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yMjYtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnPTI5PWNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JMkNcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy0zNC1cXHRkZXBlbmRzIG9uIEkyQ19TTEFWRVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzozNTpcXHRzZWxlY3QgTUNUUF9GTE9XU1xcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy0zNi1cXHRoZWxwXFxuLS1cXG5uZXQvS2NvbmZpZz0yMzE9Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcXG4tLVxcbm5ldC9LY29uZmlnLTIzNi1cXHRzZWxlY3QgTkVURklMVEVSX0ZBTUlMWV9CUklER0VcXG5uZXQvS2NvbmZpZzoyMzc6XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxubmV0L0tjb25maWctMjM4LVxcdGhlbHBcXG4tLVxcbm5ldC9jYW4vS2NvbmZpZz02PW1lbnVjb25maWcgQ0FOXFxubmV0L2Nhbi9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIkNBTiBidXMgc3Vic3lzdGVtIHN1cHBvcnRcXFwiXFxubmV0L2Nhbi9LY29uZmlnOjg6XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxubmV0L2Nhbi9LY29uZmlnLTktXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zMDQ9Y29uZmlnIE5FVF9JUFZUSVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zMDctXFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnOjMwODpcXHRzZWxlY3QgWEZSTVxcbm5ldC9pcHY0L0tjb25maWctMzA5LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzM5PWNvbmZpZyBJTkVUX0FIXFxubmV0L2lwdjQvS2NvbmZpZy0zNDAtXFx0dHJpc3RhdGUgXFxcIklQOiBBSCB0cmFuc2Zvcm1hdGlvblxcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjM0MTpcXHRzZWxlY3QgWEZSTV9BSFxcbm5ldC9pcHY0L0tjb25maWctMzQyLVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzU0PWNvbmZpZyBJTkVUX0VTUFxcbm5ldC9pcHY0L0tjb25maWctMzU1LVxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uXFxcIlxcbm5ldC9pcHY0L0tjb25maWc6MzU2OlxcdHNlbGVjdCBYRlJNX0VTUFxcbm5ldC9pcHY0L0tjb25maWctMzU3LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzY5PWNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM3MS1cXHRkZXBlbmRzIG9uIElORVRfRVNQXFxubmV0L2lwdjQvS2NvbmZpZzozNzI6XFx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxcbm5ldC9pcHY0L0tjb25maWctMzczLVxcdGRlZmF1bHQgblxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzg2LVxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2NC9LY29uZmlnOjM4NzpcXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbm5ldC9pcHY0L0tjb25maWctMzg4LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9Mzk0PWNvbmZpZyBJTkVUX0lQQ09NUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zOTYtXFx0c2VsZWN0IElORVRfWEZSTV9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnOjM5NzpcXHRzZWxlY3QgWEZSTV9JUENPTVBcXG5uZXQvaXB2NC9LY29uZmlnLTM5OC1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTQ3PWNvbmZpZyBJTkVUNl9BSFxcbm5ldC9pcHY2L0tjb25maWctNDgtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEFIIHRyYW5zZm9ybWF0aW9uXFxcIlxcbm5ldC9pcHY2L0tjb25maWc6NDk6XFx0c2VsZWN0IFhGUk1fQUhcXG5uZXQvaXB2Ni9LY29uZmlnLTUwLVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9NjI9Y29uZmlnIElORVQ2X0VTUFxcbm5ldC9pcHY2L0tjb25maWctNjMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG5uZXQvaXB2Ni9LY29uZmlnOjY0OlxcdHNlbGVjdCBYRlJNX0VTUFxcbm5ldC9pcHY2L0tjb25maWctNjUtXFx0aGVscFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz03Nz1jb25maWcgSU5FVDZfRVNQX09GRkxPQURcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctNzktXFx0ZGVwZW5kcyBvbiBJTkVUNl9FU1BcXG5uZXQvaXB2Ni9LY29uZmlnOjgwOlxcdHNlbGVjdCBYRlJNX09GRkxPQURcXG5uZXQvaXB2Ni9LY29uZmlnLTgxLVxcdGRlZmF1bHQgblxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctOTQtXFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY2L0tjb25maWc6OTU6XFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG5uZXQvaXB2Ni9LY29uZmlnLTk2LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTA0LVxcdHNlbGVjdCBJTkVUNl9YRlJNX1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWc6MTA1OlxcdHNlbGVjdCBYRlJNX0lQQ09NUFxcbm5ldC9pcHY2L0tjb25maWctMTA2LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTEyPWNvbmZpZyBJUFY2X01JUDZcXG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogTW9iaWxpdHlcXFwiXFxubmV0L2lwdjYvS2NvbmZpZzoxMTQ6XFx0c2VsZWN0IFhGUk1cXG5uZXQvaXB2Ni9LY29uZmlnLTExNS1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE1MD1jb25maWcgSVBWNl9WVElcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTUzLVxcdHNlbGVjdCBORVRfSVBfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZzoxNTQ6XFx0c2VsZWN0IFhGUk1cXG5uZXQvaXB2Ni9LY29uZmlnLTE1NS1cXHRoZWxwXFxuLS1cXG5uZXQvbWN0cC9LY29uZmlnPTE1PWNvbmZpZyBNQ1RQX1RFU1RcXG5uZXQvbWN0cC9LY29uZmlnLTE2LSAgICAgICAgYm9vbCBcXFwiTUNUUCBjb3JlIHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxubmV0L21jdHAvS2NvbmZpZzoxNzogICAgICAgIHNlbGVjdCBNQ1RQX0ZMT1dTXFxubmV0L21jdHAvS2NvbmZpZy0xOC0gICAgICAgIGRlcGVuZHMgb24gTUNUUD15IFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4tLVxcbm5ldC9tY3RwL0tjb25maWc9MjE9Y29uZmlnIE1DVFBfRkxPV1NcXG4tLVxcbm5ldC9tY3RwL0tjb25maWctMjMtXFx0ZGVwZW5kcyBvbiBNQ1RQXFxubmV0L21jdHAvS2NvbmZpZzoyNDpcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnPTI9Y29uZmlnIE1QVENQXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy00LVxcdGRlcGVuZHMgb24gSU5FVFxcbm5ldC9tcHRjcC9LY29uZmlnOjU6XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxubmV0L21wdGNwL0tjb25maWctNi1cXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcXG4tLVxcbm5ldC9wc3AvS2NvbmZpZz01PWNvbmZpZyBJTkVUX1BTUFxcbi0tXFxubmV0L3BzcC9LY29uZmlnLTgtXFx0c2VsZWN0IFNLQl9ERUNSWVBURURcXG5uZXQvcHNwL0tjb25maWc6OTpcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG5uZXQvcHNwL0tjb25maWctMTAtXFx0c2VsZWN0IFNPQ0tfVkFMSURBVEVfWE1JVFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWc9OTU0PWNvbmZpZyBORVRfVENfU0tCX0VYVFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctOTU2LVxcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcXG5uZXQvc2NoZWQvS2NvbmZpZzo5NTc6XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxubmV0L3NjaGVkL0tjb25maWctOTU4LVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz01PWNvbmZpZyBYRlJNXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTgtXFx0c2VsZWN0IEdST19DRUxMU1xcbm5ldC94ZnJtL0tjb25maWc6OTpcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG5uZXQveGZybS9LY29uZmlnLTEwLVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0xND1jb25maWcgWEZSTV9BTEdPXFxubmV0L3hmcm0vS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZVxcbm5ldC94ZnJtL0tjb25maWc6MTY6XFx0c2VsZWN0IFhGUk1cXG5uZXQveGZybS9LY29uZmlnLTE3LVxcdHNlbGVjdCBDUllQVE9cXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9MjM9Y29uZmlnIFhGUk1fVVNFUlxcbm5ldC94ZnJtL0tjb25maWctMjQtXFx0dHJpc3RhdGUgXFxcIlRyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcXFwiXFxubmV0L3hmcm0vS2NvbmZpZzoyNTpcXHRzZWxlY3QgWEZSTV9BTEdPXFxubmV0L3hmcm0vS2NvbmZpZy0yNi1cXHRoZWxwXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTg0PWNvbmZpZyBYRlJNX0FIXFxubmV0L3hmcm0vS2NvbmZpZy04NS1cXHR0cmlzdGF0ZVxcbm5ldC94ZnJtL0tjb25maWc6ODY6XFx0c2VsZWN0IFhGUk1fQUxHT1xcbm5ldC94ZnJtL0tjb25maWctODctXFx0c2VsZWN0IENSWVBUT1xcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz05Mz1jb25maWcgWEZSTV9FU1BcXG5uZXQveGZybS9LY29uZmlnLTk0LVxcdHRyaXN0YXRlXFxubmV0L3hmcm0vS2NvbmZpZzo5NTpcXHRzZWxlY3QgWEZSTV9BTEdPXFxubmV0L3hmcm0vS2NvbmZpZy05Ni1cXHRzZWxlY3QgQ1JZUFRPXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTEwNj1jb25maWcgWEZSTV9JUENPTVBcXG5uZXQveGZybS9LY29uZmlnLTEwNy1cXHR0cmlzdGF0ZVxcbm5ldC94ZnJtL0tjb25maWc6MTA4OlxcdHNlbGVjdCBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTEwOS1cXHRzZWxlY3QgQ1JZUFRPXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTExMj1jb25maWcgTkVUX0tFWVxcbm5ldC94ZnJtL0tjb25maWctMTEzLVxcdHRyaXN0YXRlIFxcXCJQRl9LRVkgc29ja2V0cyAoZGVwcmVjYXRlZClcXFwiXFxubmV0L3hmcm0vS2NvbmZpZzoxMTQ6XFx0c2VsZWN0IFhGUk1fQUxHT1xcbm5ldC94ZnJtL0tjb25maWctMTE1LVxcdGhlbHBcXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9MTI1PWNvbmZpZyBORVRfS0VZX01JR1JBVEVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTI3LVxcdGRlcGVuZHMgb24gTkVUX0tFWVxcbm5ldC94ZnJtL0tjb25maWc6MTI4OlxcdHNlbGVjdCBYRlJNX01JR1JBVEVcXG5uZXQveGZybS9LY29uZmlnLTEyOS1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjE1OjExLjc2ODQ1OTk5OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3Mjc3MzU1MDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBOZXR3b3JraW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGZpeCBhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaWNzLiBJdCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgYF9fc2tiX2V4dF9kZWxgIGFuZCBhIGNvdXBsZSBvZiBoZWxwZXIgZnVuY3Rpb25zLCBgc2tiX2V4dF9wdXRfc3BgIGFuZCBgc2tiX2V4dF9wdXRfbWN0cGAuIEVzc2VudGlhbGx5LCBpdCBjb25jZXJucyB0aGUgZGVsZXRpb24gb2YgZXh0ZW5zaW9ucyBmcm9tIGEgc29ja2V0IGJ1ZmZlciAoc2tiKS4gVGhlIGNvcmUgbG9naWMgaW4gYF9fc2tiX2V4dF9kZWxgIGlzIHdoYXQgaW50ZXJlc3RzIG1lOiB3aGVuIGFuIGV4dGVuc2lvbiBpcyByZW1vdmVkLCBpdCBjaGVja3MgaWYgYGFjdGl2ZV9leHRlbnNpb25zYCBoaXRzIHplcm8uIElmIGl0IGRvZXMsIGBfX3NrYl9leHRfcHV0KGV4dClgIGlzIGNhbGxlZCwgd2hpY2ggaGFuZGxlcyByZXNvdXJjZSByZWxlYXNlLiBJZiBgYWN0aXZlX2V4dGVuc2lvbnNgIGlzIG5vbi16ZXJvLCBidXQgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBkb3duIHRvIDEgKG1lYW5pbmcgdGhlIGN1cnJlbnQgc2tiIGhhcyBleGNsdXNpdmUgYWNjZXNzKSwgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlbW92ZWQgZXh0ZW5zaW9uIGFyZSBleHBsaWNpdGx5IGZyZWVkLlxuXG5Ob3csIGhlcmUncyB0aGUga2lja2VyOiBBcHBhcmVudGx5LCB0aGUgTUNUUCBleHRlbnNpb24gKGBTS0JfRVhUX01DVFBgKSB3YXNuJ3QgaGFuZGxlZCBpbiBgX19za2JfZXh0X2RlbGAgcHJldmlvdXNseS4gVGhhdCBtZWFucyByZW1vdmluZyBpdCBpbiBjZXJ0YWluIHNjZW5hcmlvcyB3b3VsZCBsZWFkIHRvIGEgbWVtb3J5IGxlYWsgYmVjYXVzZSBgZmxvdy1cdTAwM2VrZXlgIHdhc24ndCBiZWluZyB1bnJlZmVyZW5jZWQuIFRoYXQncyBhIGRlZmluaXRlIG92ZXJzaWdodCEgVGhpcyBwYXRjaCBjb3JyZWN0cyB0aGF0LiBJdCB1bnJlZnMgdGhlIGZsb3cga2V5IHdoZW4gZGVsZXRpbmcgYW4gTUNUUCBleHRlbnNpb24uXG5cbkknbSBhbHNvIHNlZWluZyBzb21lIG1pbm9yIHR3ZWFrcyB0byBgc2tiX2V4dF9wdXRfc3BgLCBlYXJseSByZXR1cm5zIHdoZW4gYHNwLVx1MDAzZWxlbiA9PSAwYCBhbmQgc2V0dGluZyBsZW4gdG8gemVybyBpbnRlcm5hbGx5LiBBbHNvLCB3aXRoaW4gYHNrYl9leHRfcHV0X21jdHBgLCBgZmxvdy1cdTAwM2VrZXlgIGlzIHVucmVmZXJlbmNlZCBhbmQgc2V0IHRvIGBOVUxMYC5cblxuQWxyaWdodCwgdGhlIG5leHQgc3RlcCBpcyB0byBldmFsdWF0ZSBpdHMgZnV6emFiaWxpdHkuIERvZXMgdGhpcyBjaGFuZ2UgYWZmZWN0IHNpZ25pZmljYW50IGNvcmUga2VybmVsIGxvZ2ljPyBZZXMsIGl0IGRvZXMuIFdlJ3JlIGxvb2tpbmcgYXQgYG5ldC9jb3JlL3NrYnVmZi5jYCwgcGFydGljdWxhcmx5IGBfX3NrYl9leHRfZGVsYCwgd2hpY2ggaXMgaW50ZWdyYWwgdG8gc2tiIGV4dGVuc2lvbiBtYW5hZ2VtZW50IGFuZCwgaW1wb3J0YW50bHksIHRvdWNoZXMgWEZSTS9JUHNlYyBhbmQgTUNUUCBzdWJzeXN0ZW1zLiBBbmQgeWVzLCB0aGlzIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIGluIFFFTVUgYW5kIEdDRSwgbWFraW5nIGl0IHN1aXRhYmxlIGZvciBmdXp6aW5nIHZpYSBzdGFuZGFyZCBuZXR3b3JraW5nLCBJUHNlYywgYW5kIE1DVFAuIEl0J3Mgbm90IGp1c3QgY29tbWVudHMgb3IgdHJpdmlhbCBjaGFuZ2VzLCBpdCBpbnZvbHZlcyBmdW5jdGlvbmFsIHJlZmNvdW50aW5nIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBjb3JyZWN0aW9ucy4gRnVydGhlcm1vcmUsIGBfX3NrYl9leHRfZGVsYCBpc24ndCBzdGF0aWMgYW5kIGlzIGV4cG9ydGVkLiBBbHNvIGBza2JfZXh0X2RlbGAgaXMgaW5saW5lLCBzbyBpdCBjYWxscyB0aGUgZnVuY3Rpb24gZGlyZWN0bHkuIGBzZWNwYXRoX3Jlc2V0YCBhbHNvIGNhbGxzIGBza2JfZXh0X2RlbChza2IsIFNLQl9FWFRfU0VDX1BBVEgpYC4gTm93IEkgbmVlZCB0byBjaGVjayB3aGVyZSBgU0tCX0VYVF9NQ1RQYCBpcyBiZWluZyBhZGRlZC9kZWxldGVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgdGhlIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3MjEsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MTU6MTkuMDQ1ODE3MzgyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTEwMDMxODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNLQl9FWFRfTUNUUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tY3RwL21jdHAtaTJjLmM9MzY2PW1jdHBfaTJjX2dldF90eF9mbG93X3N0YXRlKHN0cnVjdCBtY3RwX2kyY19kZXYgKm1pZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLWkyYy5jLTM3Mi1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtaTJjLmM6MzczOlxcdGZsb3cgPSBza2JfZXh0X2ZpbmQoc2tiLCBTS0JfRVhUX01DVFApO1xcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1pMmMuYy0zNzQtXFx0aWYgKCFmbG93KVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLWkyYy5jPTQ1ND1zdGF0aWMgdm9pZCBtY3RwX2kyY19pbnZhbGlkYXRlX3R4X2Zsb3coc3RydWN0IG1jdHBfaTJjX2RldiAqbWlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtaTJjLmMtNDYxLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1pMmMuYzo0NjI6XFx0ZmxvdyA9IHNrYl9leHRfZmluZChza2IsIFNLQl9FWFRfTUNUUCk7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLWkyYy5jLTQ2My1cXHRpZiAoIWZsb3cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTUwMzg9ZW51bSBza2JfZXh0X2lkIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA1MS0jaWYgSVNfRU5BQkxFRChDT05GSUdfTUNUUF9GTE9XUylcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwNTI6XFx0U0tCX0VYVF9NQ1RQLFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA1My0jZW5kaWZcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTUxNTA9c3RhdGljIGNvbnN0IHU4IHNrYl9leHRfdHlwZV9sZW5bXSA9IHtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTUxNjMtI2lmIElTX0VOQUJMRUQoQ09ORklHX01DVFBfRkxPV1MpXFxubmV0L2NvcmUvc2tidWZmLmM6NTE2NDpcXHRbU0tCX0VYVF9NQ1RQXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IG1jdHBfZmxvdyksXFxubmV0L2NvcmUvc2tidWZmLmMtNTE2NS0jZW5kaWZcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTcxMjQ9c3RhdGljIHN0cnVjdCBza2JfZXh0ICpza2JfZXh0X21heWJlX2NvdyhzdHJ1Y3Qgc2tiX2V4dCAqb2xkLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzE0OC0jaWZkZWYgQ09ORklHX01DVFBfRkxPV1NcXG5uZXQvY29yZS9za2J1ZmYuYzo3MTQ5OlxcdGlmIChvbGRfYWN0aXZlIFxcdTAwMjYgKDEgXFx1MDAzY1xcdTAwM2MgU0tCX0VYVF9NQ1RQKSkge1xcbm5ldC9jb3JlL3NrYnVmZi5jOjcxNTA6XFx0XFx0c3RydWN0IG1jdHBfZmxvdyAqZmxvdyA9IHNrYl9leHRfZ2V0X3B0cihvbGQsIFNLQl9FWFRfTUNUUCk7XFxubmV0L2NvcmUvc2tidWZmLmMtNzE1MS1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTcyNTk9dm9pZCBfX3NrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcyNzctI2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXFxubmV0L2NvcmUvc2tidWZmLmM6NzI3ODpcXHRpZiAoaWQgPT0gU0tCX0VYVF9NQ1RQKVxcbm5ldC9jb3JlL3NrYnVmZi5jOjcyNzk6XFx0XFx0c2tiX2V4dF9wdXRfbWN0cChza2JfZXh0X2dldF9wdHIoZXh0LCBTS0JfRVhUX01DVFApKTtcXG5uZXQvY29yZS9za2J1ZmYuYy03MjgwLSNlbmRpZlxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NzI4ND12b2lkIF9fc2tiX2V4dF9wdXQoc3RydWN0IHNrYl9leHQgKmV4dClcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcyOTktI2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXFxubmV0L2NvcmUvc2tidWZmLmM6NzMwMDpcXHRpZiAoX19za2JfZXh0X2V4aXN0KGV4dCwgU0tCX0VYVF9NQ1RQKSlcXG5uZXQvY29yZS9za2J1ZmYuYzo3MzAxOlxcdFxcdHNrYl9leHRfcHV0X21jdHAoc2tiX2V4dF9nZXRfcHRyKGV4dCwgU0tCX0VYVF9NQ1RQKSk7XFxubmV0L2NvcmUvc2tidWZmLmMtNzMwMi0jZW5kaWZcXG4tLVxcbm5ldC9tY3RwL3JvdXRlLmM9MzQ2PXN0YXRpYyB2b2lkIG1jdHBfc2tiX3NldF9mbG93KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtY3RwX3NrX2tleSAqa2V5KVxcbi0tXFxubmV0L21jdHAvcm91dGUuYy0zNDktXFxubmV0L21jdHAvcm91dGUuYzozNTA6XFx0ZmxvdyA9IHNrYl9leHRfYWRkKHNrYiwgU0tCX0VYVF9NQ1RQKTtcXG5uZXQvbWN0cC9yb3V0ZS5jLTM1MS1cXHRpZiAoIWZsb3cpXFxuLS1cXG5uZXQvbWN0cC9yb3V0ZS5jPTM1OD1zdGF0aWMgdm9pZCBtY3RwX2Zsb3dfcHJlcGFyZV9vdXRwdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG1jdHBfZGV2ICpkZXYpXFxuLS1cXG5uZXQvbWN0cC9yb3V0ZS5jLTM2My1cXG5uZXQvbWN0cC9yb3V0ZS5jOjM2NDpcXHRmbG93ID0gc2tiX2V4dF9maW5kKHNrYiwgU0tCX0VYVF9NQ1RQKTtcXG5uZXQvbWN0cC9yb3V0ZS5jLTM2NS1cXHRpZiAoIWZsb3cpXFxuLS1cXG5uZXQvbWN0cC90ZXN0L3JvdXRlLXRlc3QuYz05OTM9c3RhdGljIHZvaWQgbWN0cF90ZXN0X3BhY2tldF9mbG93KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm5ldC9tY3RwL3Rlc3Qvcm91dGUtdGVzdC5jLTEwMTMtXFxubmV0L21jdHAvdGVzdC9yb3V0ZS10ZXN0LmM6MTAxNDpcXHRmbG93ID0gc2tiX2V4dF9maW5kKHNrYjIsIFNLQl9FWFRfTUNUUCk7XFxubmV0L21jdHAvdGVzdC9yb3V0ZS10ZXN0LmMtMTAxNS1cXHRLVU5JVF9BU1NFUlRfTk9UX0VSUl9PUl9OVUxMKHRlc3QsIGZsb3cpO1xcbi0tXFxubmV0L21jdHAvdGVzdC9yb3V0ZS10ZXN0LmM9MTAyNj1zdGF0aWMgdm9pZCBtY3RwX3Rlc3RfZnJhZ21lbnRfZmxvdyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5uZXQvbWN0cC90ZXN0L3JvdXRlLXRlc3QuYy0xMDUxLVxcbm5ldC9tY3RwL3Rlc3Qvcm91dGUtdGVzdC5jOjEwNTI6XFx0Zmxvd3NbMF0gPSBza2JfZXh0X2ZpbmQodHhfc2tic1swXSwgU0tCX0VYVF9NQ1RQKTtcXG5uZXQvbWN0cC90ZXN0L3JvdXRlLXRlc3QuYy0xMDUzLVxcdEtVTklUX0FTU0VSVF9OT1RfRVJSX09SX05VTEwodGVzdCwgZmxvd3NbMF0pO1xcbi0tXFxubmV0L21jdHAvdGVzdC9yb3V0ZS10ZXN0LmMtMTA1Ni1cXG5uZXQvbWN0cC90ZXN0L3JvdXRlLXRlc3QuYzoxMDU3OlxcdGZsb3dzWzFdID0gc2tiX2V4dF9maW5kKHR4X3NrYnNbMV0sIFNLQl9FWFRfTUNUUCk7XFxubmV0L21jdHAvdGVzdC9yb3V0ZS10ZXN0LmMtMTA1OC1cXHRLVU5JVF9BU1NFUlRfTk9UX0VSUl9PUl9OVUxMKHRlc3QsIGZsb3dzWzFdKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MTU6MjAuNTU1ODU1OTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1OTMwNjAwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBzZWNwYXRoX3Jlc2V0YCBhbmQgSXRzIENhbGxlcnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBzZWNwYXRoX3Jlc2V0YC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUgYW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQuIEknbGwgc3RhcnQgYnkgbWFraW5nIHN1cmUgSSBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGBzZWNwYXRoX3Jlc2V0YCAqZG9lcyog4oCTIHRoZSBpbnRlbmRlZCBvdXRjb21lLCB0aGUgaW5wdXRzLCBhbmQgdGhlIGFzc3VtcHRpb25zIGl0IG1ha2VzLiBUaGVuLCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IHRyYWNlIGFsbCB0aGUgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIGtub3cgKndoeSogaXQncyBiZWluZyBjYWxsZWQgZnJvbSBlYWNoIGxvY2F0aW9uLCB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciB0aGUgY2FsbHMsIGFuZCBtb3N0IGltcG9ydGFudGx5LCB3aGF0IHRoZSBleHBlY3RlZCBzdGF0ZSBpcyBiZWZvcmUgYW5kIGFmdGVyIGVhY2ggY2FsbC4gVGhpcyByZXF1aXJlcyB1bmRlcnN0YW5kaW5nIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIGNvZGUuIElzIGl0IHNlY3VyaXR5LXJlbGF0ZWQ/IFdoYXQga2luZCBvZiBkYXRhIGlzIGJlaW5nIGhhbmRsZWQ/IEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBoZWxwIG1lIGdyYXNwIHRoZSBjcml0aWNhbCBwYXRoIHRoYXQgaXMgYmVpbmcgbWFuYWdlZCBieSB0aGlzIGZ1bmN0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGluZWZmaWNpZW5jaWVzLCBvciBhbnkgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMuIFVsdGltYXRlbHksIEkgd2FudCB0byBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGlzIGZ1bmN0aW9uLCBkZXRlcm1pbmUgaWYgaXQncyBiZWluZyB1c2VkIGNvcnJlY3RseSwgYW5kIGlkZW50aWZ5IGFueSBhcmVhcyB0aGF0IG1pZ2h0IHJlcXVpcmUgZnVydGhlciBzY3J1dGlueSBvciBwb3RlbnRpYWwgb3B0aW1pemF0aW9uLiBBIHRob3JvdWdoIGludmVzdGlnYXRpb24gb2YgdGhlIGZ1bmN0aW9uIGFuZCBpdHMgY2FsbGVycyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcGxhY2Ugd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1NTcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoxNToyMi44MTUxNjQ3ODNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjI1NDcyMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VjcGF0aF9yZXNldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvaXBzZWNfcnh0eC5jPTMwNz12b2lkIG1seDVlX2lwc2VjX29mZmxvYWRfaGFuZGxlX3J4X3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX3J4dHguYy0zMzItXFx0XFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX3J4dHguYzozMzM6XFx0XFx0c2VjcGF0aF9yZXNldChza2IpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19yeHR4LmMtMzM0LVxcdFxcdHJldHVybjtcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oPTc5Nz1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX2NsZWFudXBfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC03OTktXFx0c2tiX2RzdF9kcm9wKHNrYik7XFxuaW5jbHVkZS9uZXQvdGNwLmg6ODAwOlxcdHNlY3BhdGhfcmVzZXQoc2tiKTtcXG5pbmNsdWRlL25ldC90Y3AuaC04MDEtfVxcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oPTExOTY9c3RhdGljIGlubGluZSB2b2lkXFxuaW5jbHVkZS9uZXQveGZybS5oOjExOTc6c2VjcGF0aF9yZXNldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbmV0L3hmcm0uaC0xMTk4LXtcXG4tLVxcbmluY2x1ZGUvbmV0L3hmcm0uaD0xMjkwPXN0YXRpYyBpbmxpbmUgaW50IF9feGZybV9wb2xpY3lfY2hlY2syKHN0cnVjdCBzb2NrICpzaywgaW50IGRpcixcXG4tLVxcbmluY2x1ZGUvbmV0L3hmcm0uaC0xMzEzLVxcdFxcdFxcdCAqL1xcbmluY2x1ZGUvbmV0L3hmcm0uaDoxMzE0OlxcdFxcdFxcdHNlY3BhdGhfcmVzZXQoc2tiKTtcXG5pbmNsdWRlL25ldC94ZnJtLmgtMTMxNS1cXHRcXHRcXHRyZXR1cm4gY2hlY2s7XFxuLS1cXG5uZXQvaXB2NC9lc3A0LmM9MjEwPXN0YXRpYyB2b2lkIGVzcF9vdXRwdXRfZG9uZSh2b2lkICpkYXRhLCBpbnQgZXJyKVxcbi0tXFxubmV0L2lwdjQvZXNwNC5jLTIzNi1cXHRcXHRza2JfcHVzaChza2IsIHNrYi1cXHUwMDNlZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHNrYikpO1xcbm5ldC9pcHY0L2VzcDQuYzoyMzc6XFx0XFx0c2VjcGF0aF9yZXNldChza2IpO1xcbm5ldC9pcHY0L2VzcDQuYy0yMzgtXFx0XFx0eGZybV9kZXZfcmVzdW1lKHNrYik7XFxuLS1cXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYz0zMD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmVzcDRfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcXG4tLVxcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTk0LW91dF9yZXNldDpcXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYzo5NTpcXHRzZWNwYXRoX3Jlc2V0KHNrYik7XFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtOTYtb3V0Olxcbi0tXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmM9MjY1PXN0YXRpYyBpbnQgZXNwX3htaXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcXG4tLVxcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTM2OS1cXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYzozNzA6XFx0c2VjcGF0aF9yZXNldChza2IpO1xcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTM3MS1cXG4tLVxcbm5ldC9pcHY2L2VzcDYuYz0yNDU9c3RhdGljIHZvaWQgZXNwX291dHB1dF9kb25lKHZvaWQgKmRhdGEsIGludCBlcnIpXFxuLS1cXG5uZXQvaXB2Ni9lc3A2LmMtMjczLVxcdFxcdHNrYl9wdXNoKHNrYiwgc2tiLVxcdTAwM2VkYXRhIC0gc2tiX21hY19oZWFkZXIoc2tiKSk7XFxubmV0L2lwdjYvZXNwNi5jOjI3NDpcXHRcXHRzZWNwYXRoX3Jlc2V0KHNrYik7XFxubmV0L2lwdjYvZXNwNi5jLTI3NS1cXHRcXHR4ZnJtX2Rldl9yZXN1bWUoc2tiKTtcXG4tLVxcbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jPTUzPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZXNwNl9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbi0tXFxubmV0L2lwdjYvZXNwNl9vZmZsb2FkLmMtMTIzLW91dF9yZXNldDpcXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYzoxMjQ6XFx0c2VjcGF0aF9yZXNldChza2IpO1xcbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jLTEyNS1vdXQ6XFxuLS1cXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYz0zMDM9c3RhdGljIGludCBlc3A2X3htaXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcXG4tLVxcbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jLTM5MC1cXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYzozOTE6XFx0c2VjcGF0aF9yZXNldChza2IpO1xcbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jLTM5Mi1cXG4tLVxcbm5ldC9sMnRwL2wydHBfZXRoLmM9MTA3PXN0YXRpYyB2b2lkIGwydHBfZXRoX2Rldl9yZWN2KHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sIHN0cnVjdCBza19idWZmICpza2IsIGludCBkYXRhX2xlbilcXG4tLVxcbm5ldC9sMnRwL2wydHBfZXRoLmMtMTE0LVxcbm5ldC9sMnRwL2wydHBfZXRoLmM6MTE1OlxcdHNlY3BhdGhfcmVzZXQoc2tiKTtcXG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTExNi1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYz00NjY9aW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxcbi0tXFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTU3Ni1cXHRpZiAoIXNwaSBcXHUwMDI2XFx1MDAyNiB4ZnJtX3BhcnNlX3NwaShza2IsIG5leHRoZHIsIFxcdTAwMjZzcGksIFxcdTAwMjZzZXEpKSB7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjU3NzpcXHRcXHRzZWNwYXRoX3Jlc2V0KHNrYik7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTU3OC1cXHRcXHRYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5IRFJFUlJPUik7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNTg3LVxcdFxcdGlmIChzcC1cXHUwMDNlbGVuID09IFhGUk1fTUFYX0RFUFRIKSB7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjU4ODpcXHRcXHRcXHRzZWNwYXRoX3Jlc2V0KHNrYik7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTU4OS1cXHRcXHRcXHRYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5CVUZGRVJFUlJPUik7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNTk0LVxcdFxcdGlmICh4ID09IE5VTEwpIHtcXG5uZXQveGZybS94ZnJtX2lucHV0LmM6NTk1OlxcdFxcdFxcdHNlY3BhdGhfcmVzZXQoc2tiKTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNTk2LVxcdFxcdFxcdFhGUk1fSU5DX1NUQVRTKG5ldCwgTElOVVhfTUlCX1hGUk1JTk5PU1RBVEVTKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy02MDEtXFx0XFx0aWYgKHVubGlrZWx5KHgtXFx1MDAzZWRpciBcXHUwMDI2XFx1MDAyNiB4LVxcdTAwM2VkaXIgIT0gWEZSTV9TQV9ESVJfSU4pKSB7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjYwMjpcXHRcXHRcXHRzZWNwYXRoX3Jlc2V0KHNrYik7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTYwMy1cXHRcXHRcXHRYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5TVEFURURJUkVSUk9SKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYz0yOTM9c3RhdGljIHZvaWQgeGZybWlfc2NydWJfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgeG5ldClcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy0zMDYtXFx0aXB2c19yZXNldChza2IpO1xcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYzozMDc6XFx0c2VjcGF0aF9yZXNldChza2IpO1xcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy0zMDgtXFx0c2tiX29ycGhhbihza2IpO1xcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYz03NDg9aW50IHhmcm1fb3V0cHV0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNzkwLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NzkxOlxcdHNlY3BhdGhfcmVzZXQoc2tiKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTc5Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MTU6MjQuMzM3NzIwNTMxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcyMDUzODU5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBTS0IgRXh0ZW5zaW9uIE1hbmFnZW1lbnQgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgaW50cmljYWNpZXMgb2YgU0tCIGV4dGVuc2lvbiBtYW5hZ2VtZW50LCBhbmQgSSd2ZSBmbGFnZ2VkIGBfX3NrYl9leHRfZGVsYCBhbmQgYF9fc2tiX2V4dF9wdXRgIGFzIG15IGluaXRpYWwgZm9jdXMgcG9pbnRzLiBUaG9zZSBmdW5jdGlvbnMgYXJlIGRlZmluaXRlbHkgYXQgdGhlIGhlYXJ0IG9mIHRoaXMuIFNpbmNlIEkga25vdyB0aGVzZSBmdW5jdGlvbnMgd29yayB0b2dldGhlciwgSSdsbCBhbHNvIGJlIGNvbnNpZGVyaW5nIGBza2JfZXh0X2FkZGAgYXMgaXQgY291bGQgYWxzbyBiZSBpbXBvcnRhbnQuIE15IG9iamVjdGl2ZSBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSByZWxhdGUgdG8gZGlmZmVyZW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb25maWd1cmF0aW9ucyByZXF1aXJlIHRoZXNlIGZ1bmN0aW9ucy4gVGhlIGtleSBjb25maWdzIEknbSBsb29raW5nIGF0IGFyZSBgQ09ORklHX01DVFBfRkxPV1NgIGFuZCBgQ09ORklHX1hGUk1gLCBzaW5jZSBJIGtub3cgYm90aCBvZiB0aG9zZSBoYXZlIHRvIGRvIHdpdGggbmV0d29yayBkYXRhIGhhbmRsaW5nLiBJJ2xsIG5lZWQgdG8gd29yayBiYWNrd2FyZCBmcm9tIHRob3NlIGNvbmZpZ3MuXG5cbkxldCdzIHNlZSwgYE1DVFBfRkxPV1NgLiBMb29rcyBsaWtlIHRoYXQncyBlbmFibGVkIHRocm91Z2ggdGhlIGBNQ1RQYCBLY29uZmlnIGVudHJ5LiBQZWVraW5nIGF0IGBuZXQvbWN0cC9LY29uZmlnYCwgSSBzZWUgdGhhdCBgTUNUUF9GTE9XU2AgaXMgYSBib29sZWFuIHRoYXQgZGVwZW5kcyBvbiBgTUNUUGAgYW5kICpzZWxlY3RzKiBgU0tCX0VYVEVOU0lPTlNgLiBTbyBmYXIsIHNvIGdvb2QsIGEgY2xlYXIgbGluay4gSXQgbG9va3MgbGlrZSBgTUNUUF9GTE9XU2AgaXMgc2VsZWN0ZWQgYnkgYE1DVFBfVFJBTlNQT1JUX0kyQ2AgYW5kIGBNQ1RQX1RFU1RgLiBgTUNUUF9UUkFOU1BPUlRfSTJDYCBpdHNlbGYgZGVwZW5kcyBvbiBgSTJDX1NMQVZFYCBhbmQgYE1DVFBgLlxuXG5UaGVuIHRoZXJlJ3MgYFhGUk1gLiBUaGF0J3MgYSBiaXQgbW9yZSBpbnZvbHZlZCwgYXMgaXTigJlzIHNlbGVjdGVkIGJ5IGEgd2hvbGUgYnVuY2ggb2YgdGhpbmdzOiBgWEZSTV9BTEdPYCwgYElORVRfQUhgLCBgSU5FVF9FU1BgLCBhbmQgYSBsb3QgbW9yZS4gVGhlIHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBmYWN0IHRoYXQgYFNLQl9FWFRFTlNJT05TYCBpcyBzZWxlY3RlZCBieSBgWEZSTWAgZGlyZWN0bHksIGFzIHdlbGwgYXMgYnkgYE1DVFBfRkxPV1NgLiBGdXJ0aGVyIGludmVzdGlnYXRpb24gbWlnaHQgYmUgbmVlZGVkIG9uIHdoaWNoIGNvbmZpZyBvcHRpb25zIGRlcGVuZCBvbiBgU0tCX0VYVEVOU0lPTlNgIGRpcmVjdGx5LiBgTVBUQ1BgLCBgQlJJREdFX05FVEZJTFRFUmAsIGFuZCBgTkVUX1RDX1NLQl9FWFRgIGFyZSBhbHNvIG9uIHRoZSBsaXN0IG9mIGNvbmZpZ3MgdGhhdCBzZWxlY3QgYFNLQl9FWFRFTlNJT05TYC5cblxuSSdtIG1ha2luZyBhIG1lbnRhbCBub3RlIHRvIGRvdWJsZS1jaGVjayB0aGVzZSByZWxhdGlvbnNoaXBzLCBlbnN1cmluZyBJIGhhdmVuJ3QgbWlzc2VkIGFueSBjcnVjaWFsIGRlcGVuZGVuY2llcyBvciBzaWRlIGVmZmVjdHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbmZpZ3VyYXRpb24gbWF0cml4LCBwYXJ0aWN1bGFybHkgZm9yIGBNQ1RQYCwgYE1DVFBfRkxPV1NgLCBgWEZSTWAsIGBTS0JfRVhURU5TSU9OU2AsIGBNQ1RQX1RSQU5TUE9SVF9JMkNgLCBhbmQgYEkyQ19TTEFWRWAsIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMgb24gdGhlIGJlaGF2aW9yIG9mIHRoZXNlIGV4dGVuc2lvbiBmdW5jdGlvbnMuIEknbGwgc3RhcnQgYnkgZG91YmxlIGNoZWNraW5nIGBNQ1RQX1RSQU5TUE9SVF9JMkNgIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MTQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MTU6MzEuNTQzMTA5MTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2OTQ3OTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1DVFBfVFJBTlNQT1JUX0kyQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tY3RwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnPTI0PWNvbmZpZyBNQ1RQX1NFUklBTF9URVNUXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctMjgtXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjI5OmNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JMkNcXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctMzAtXFx0dHJpc3RhdGUgXFxcIk1DVFAgU01CdXMvSTJDIHRyYW5zcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MTU6MzEuNjQwMDYyNjUyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgyMDk1Mjc4ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBNQ1RQIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMgTUNUUCBuZXR3b3JrIGRyaXZlci4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGBkcml2ZXJzL25ldC9tY3RwL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjkuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlLCB0b3AtbGV2ZWwgc2V0dGluZ3MgYW5kIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdG8gZmluZCB0aGUgZnVuZGFtZW50YWwga25vYnMgYW5kIGxldmVycyB0aGF0IGNvbnRyb2wgd2hldGhlciB0aGlzIGRyaXZlciBpcyBldmVuICppbmNsdWRlZCogaW4gdGhlIGJ1aWxkLCBhbmQgbWF5YmUgc29tZSBvZiBpdHMgYmFzaWMgZmVhdHVyZSBmbGFncy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBlc3NlbnRpYWwgYnVpbGRpbmcgYmxvY2tzIOKAkyB0aGUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIHN1YnN5c3RlbXMsIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCBhbmQgYW55IHBsYXRmb3JtLXNwZWNpZmljIGNvbnN0cmFpbnRzIHRoYXQgYXJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGRyaXZlciBpbnRlZ3JhdGVzIGludG8gdGhlIHN5c3RlbS4gS25vd2luZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgbGV0IG1lIHNlZSB3aGljaCBNQ1RQIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUsIGhvdyB0byBlbmFibGUgdGhlbSwgYW5kIHdoYXQgcGxhdGZvcm0gcmVzb3VyY2VzIGFyZSByZXF1aXJlZC4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBsYXRlciwgd2hlbiBJIHN0YXJ0IGRlYnVnZ2luZyBvciB0cnlpbmcgdG8gb3B0aW1pemUgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDE2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MTU6MzkuODQ5NTkyNzE2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHQgICAgICAgIGJvb2wgXFxcIk1DVFAgc2VyaWFsIHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyNjpcXHQgICAgICAgIGRlcGVuZHMgb24gTUNUUF9TRVJJQUw9eSBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICAyNzpcXHQgICAgICAgIGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JMkNcXG4gIDMwOlxcdFxcdHRyaXN0YXRlIFxcXCJNQ1RQIFNNQnVzL0kyQyB0cmFuc3BvcnRcXFwiXFxuICAzMTpcXHRcXHQjIGkyYy1tdXggaXMgb3B0aW9uYWwsIGJ1dCB3ZSBtdXN0IGJ1aWxkIGFzIGEgbW9kdWxlIGlmIGkyYy1tdXggaXMgYSBtb2R1bGVcXG4gIDMyOlxcdFxcdGRlcGVuZHMgb24gSTJDX01VWCB8fCAhSTJDX01VWFxcbiAgMzM6XFx0XFx0ZGVwZW5kcyBvbiBJMkNcXG4gIDM0OlxcdFxcdGRlcGVuZHMgb24gSTJDX1NMQVZFXFxuICAzNTpcXHRcXHRzZWxlY3QgTUNUUF9GTE9XU1xcbiAgMzY6XFx0XFx0aGVscFxcbiAgMzc6XFx0XFx0ICBQcm92aWRlcyBhIGRyaXZlciB0byBhY2Nlc3MgTUNUUCBkZXZpY2VzIG92ZXIgU01CdXMvSTJDIHRyYW5zcG9ydCxcXG4gIDM4OlxcdFxcdCAgZnJvbSBETVRGIHNwZWNpZmljYXRpb24gRFNQMDIzNy4gQSBNQ1RQIHByb3RvY29sIG5ldHdvcmsgZGV2aWNlIGlzXFxuICAzOTpcXHRcXHQgIGNyZWF0ZWQgZm9yIGVhY2ggSTJDIGJ1cyB0aGF0IGhhcyBiZWVuIGFzc2lnbmVkIGEgbWN0cC1pMmMgZGV2aWNlLlxcbiAgNDA6XFx0XFxuICA0MTpcXHRjb25maWcgTUNUUF9UUkFOU1BPUlRfSTNDXFxuICA0MjpcXHRcXHR0cmlzdGF0ZSBcXFwiTUNUUCBJM0MgdHJhbnNwb3J0XFxcIlxcbiAgNDM6XFx0XFx0ZGVwZW5kcyBvbiBJM0NcXG4gIDQ0OlxcdFxcdGhlbHBcXG4gIDQ1OlxcdFxcdCAgUHJvdmlkZXMgYSBkcml2ZXIgdG8gYWNjZXNzIE1DVFAgZGV2aWNlcyBvdmVyIEkzQyB0cmFuc3BvcnQsXFxuICA0NjpcXHRcXHQgIGZyb20gRE1URiBzcGVjaWZpY2F0aW9uIERTUDAyMzMuXFxuICA0NzpcXHRcXHQgIEEgTUNUUCBwcm90b2NvbCBuZXR3b3JrIGRldmljZSBpcyBjcmVhdGVkIGZvciBlYWNoIEkzQyBidXNcXG4gIDQ4OlxcdFxcdCAgaGF2aW5nIGEgXFxcIm1jdHAtY29udHJvbGxlclxcXCIgZGV2aWNldHJlZSBwcm9wZXJ0eS5cXG4gIDQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoxNTozOS44NDk2NTU4NTZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTUyMzYxMTA4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgS2VybmVsIENvbmZpZ3VyYXRpb24gYW5kIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYENPTkZJR19NQ1RQYCBpcyB1c2VyLWNvbmZpZ3VyYWJsZS4gQSBxdWljayBjaGVjayB3aXRoaW4gYG5ldC9tY3RwL0tjb25maWdgIGNvbmZpcm1zIGl0OyB0aGUgYG1lbnVjb25maWcgTUNUUGAgZW50cnkgd2l0aCBhIGBkZXBlbmRzIG9uIE5FVGAgY2xhdXNlIG1lYW5zIGl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBjYW4gYmUgdG9nZ2xlZC4gTm93LCBJIHNob3VsZCBhbHNvIGZsYWcgaXRzIGRlcGVuZGVuY2llcywgd2hpY2ggaW5jbHVkZSB0aGluZ3MgbGlrZSBgQ09ORklHX01DVFBfRkxPV1NgLCBwb3RlbnRpYWxseSBgQ09ORklHX01DVFBfVFJBTlNQT1JUX0kyQ2AgKHdoaWNoIGxlYWRzIGludG8gYENPTkZJR19JMkNgIGFuZCBgQ09ORklHX0kyQ19TTEFWRWApLCBhbmQgYENPTkZJR19YRlJNYCB3aXRoIGl0cyByZWxhdGVkIGNvbmZpZyBvcHRpb25zIHN1Y2ggYXMgYENPTkZJR19YRlJNX1VTRVJgLCBgQ09ORklHX0lORVRfRVNQYCwgYENPTkZJR19JTkVUX0FIYCwgYENPTkZJR19ORVRfS0VZYC5cblxuTmV4dCwgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBjaGFuZ2VzJyBwb3RlbnRpYWwgZm9yIGZ1enppbmcsIHNwZWNpZmljYWxseSBiYXNlZCBvbiB0aGUgYFdvcnRoRnV6emluZ2AgY3JpdGVyaWEuIFRoZXNlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gY2xlYW51cCBsb2dpYywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgX19za2JfZXh0X2RlbGAsIGBza2JfZXh0X3B1dF9zcGAsIGFuZCBgc2tiX2V4dF9wdXRfbWN0cGAuIFRoZXkncmUgYWRkcmVzc2luZyBpc3N1ZXMgcmVsYXRlZCB0byBkZWxldGluZyBgc2tiYCBleHRlbnNpb25zLCB3aGljaCBpbnZvbHZlcyByZXNldHRpbmcgcmVmZXJlbmNlIGNvdW50cywgcHJvcGVybHkgdW5yZWZlcmVuY2luZyBgZmxvdy1cdTAwM2VrZXlgLCBhbmQgemVyb2luZyBgc3AtXHUwMDNlbGVuYC4gVGhpcyBraW5kIG9mIG1vZGlmaWNhdGlvbiBpbiBjb3JlIGBza2J1ZmZgIGxpZmVjeWNsZSBtYW5hZ2VtZW50LCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggbmV0d29ya2luZywgSVBzZWMsIGFuZCBNQ1RQLCBpcyBwcmltZSBmdXp6aW5nIHRlcnJpdG9yeS4gSXQgYWZmZWN0cyBmdW5kYW1lbnRhbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGF0YSBzdHJ1Y3R1cmVzLiBJdCdzIGZ1bGx5IHRlc3RhYmxlIGFuZCBmdXp6YWJsZSwgc28gYFdvcnRoRnV6emluZ2AgaXMgZGVmaW5pdGVseSB0cnVlLlxuXG5UaGVyZWZvcmUsIG15IGNvbmNsdXNpb25zIGFyZTpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiB0cnVlXG4qICAgYEZvY3VzU3ltYm9sc2A6IEknbGwgZm9jdXMgb24gYF9fc2tiX2V4dF9kZWxgIGFuZCBgX19za2JfZXh0X3B1dGAuXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBJJ2xsIG5lZWQgdG8gZW5hYmxlIGBTS0JfRVhURU5TSU9OU2AsIGBYRlJNYCwgYE1DVFBgLCBgTUNUUF9GTE9XU2AsIGFuZCwgaWYgcmVsZXZhbnQsIGBNQ1RQX1RSQU5TUE9SVF9JMkNgLlxuXG5Ob3csIEkganVzdCBuZWVkIHRvIGNvbnN0cnVjdCB0aGUgYHNldC1yZXN1bHRzYCBjYWxsOlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IHRydWVcbiogICBgRm9jdXNTeW1ib2xzYDogYFtcIl9fc2tiX2V4dF9kZWxcIiwgXCJfX3NrYl9leHRfcHV0XCJdYFxuKiAgIGBFbmFibGVDb25maWdzYDogYFtcIlNLQl9FWFRFTlNJT05TXCIsIFwiWEZSTVwiLCBcIk1DVFBcIiwgXCJNQ1RQX0ZMT1dTXCJdYCAoSSdsbCBrZWVwIGBNQ1RQX1RSQU5TUE9SVF9JMkNgIG9uIHN0YW5kYnkgdW5sZXNzIGl0J3MgZXhwbGljaXRseSBuZWVkZWQpLlxuKiAgIGBSZWFzb25pbmdgOiBDb25jaXNlIGV4cGxhbmF0aW9uLCB3aGljaCBJJ3ZlIGVzc2VudGlhbGx5IGFscmVhZHkgZG9uZS5cblxuTm93IEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzEzLCJPdXRwdXRUb2tlbnMiOjE3NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjE1OjU1LjA4NTc2OTE5MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMzg0NDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTS0JfRVhURU5TSU9OU1wiLFxuICAgIFwiWEZSTVwiLFxuICAgIFwiTUNUUFwiLFxuICAgIFwiTUNUUF9GTE9XU1wiLFxuICAgIFwiTUNUUF9UUkFOU1BPUlRfSTJDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19za2JfZXh0X2RlbFwiLFxuICAgIFwiX19za2JfZXh0X3B1dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgc2tiIGV4dGVuc2lvbiBkZWxldGlvbiBhbmQgY2xlYW51cCBsb2dpYyBpbiBgX19za2JfZXh0X2RlbGAsIGBza2JfZXh0X3B1dF9zcGAsIGFuZCBgc2tiX2V4dF9wdXRfbWN0cGAsIHByb3Blcmx5IGhhbmRsaW5nIHJlZmVyZW5jZSBjb3VudHMgYW5kIHJlc291cmNlIGRlYWxsb2NhdGlvbiBmb3IgTUNUUCBmbG93cyBhbmQgSVBzZWMvWEZSTSBzZWN1cml0eSBwYXRocyB3aGVuIHJlbW92aW5nIGFjdGl2ZSBleHRlbnNpb25zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTS0JfRVhURU5TSU9OU1wiLFxuICAgIFwiWEZSTVwiLFxuICAgIFwiTUNUUFwiLFxuICAgIFwiTUNUUF9GTE9XU1wiLFxuICAgIFwiTUNUUF9UUkFOU1BPUlRfSTJDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19za2JfZXh0X2RlbFwiLFxuICAgIFwiX19za2JfZXh0X3B1dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgc2tiIGV4dGVuc2lvbiBkZWxldGlvbiBhbmQgY2xlYW51cCBsb2dpYyBpbiBgX19za2JfZXh0X2RlbGAsIGBza2JfZXh0X3B1dF9zcGAsIGFuZCBgc2tiX2V4dF9wdXRfbWN0cGAsIHByb3Blcmx5IGhhbmRsaW5nIHJlZmVyZW5jZSBjb3VudHMgYW5kIHJlc291cmNlIGRlYWxsb2NhdGlvbiBmb3IgTUNUUCBmbG93cyBhbmQgSVBzZWMvWEZSTSBzZWN1cml0eSBwYXRocyB3aGVuIHJlbW92aW5nIGFjdGl2ZSBleHRlbnNpb25zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MTU6NTUuMTY2MTYxMjk2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAzMjM5MjI1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjE1OjU1LjE2NjY0MjcyNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEzMDMxOTA2NTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19za2JfZXh0X2RlbCgpYCBhbmQgaGVscGVyIGZ1bmN0aW9ucyBgc2tiX2V4dF9wdXRfc3AoKWAgLyBgc2tiX2V4dF9wdXRfbWN0cCgpYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIHRvIHByb3Blcmx5IHJlbGVhc2UgcmVmZXJlbmNlcyAoYG1jdHBfa2V5X3VucmVmYCBhbmQgYHhmcm1fc3RhdGVfcHV0YCkgYW5kIHplcm8gb3V0IGZpZWxkcyAoYHNwLVxcdTAwM2VsZW4gPSAwYCwgYGZsb3ctXFx1MDAzZWtleSA9IE5VTExgKSB3aGVuIHNrYiBleHRlbnNpb25zIGFyZSByZW1vdmVkLlxcblxcblRoZXNlIGNoYW5nZXMgcGVydGFpbiBzdHJpY3RseSB0byByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmVjeWNsZS9jbGVhbnVwIG1hbmFnZW1lbnQgb2Ygc2tiIGV4dGVuc2lvbiBkYXRhLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgYWxsb2NhdGlvbnMsIGRhdGEgZXhwb3N1cmUgdG8gdXNlciBzcGFjZSwgb3IgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24uIEFueSBwb3RlbnRpYWwgZGVmZWN0cyBpbiB0aGlzIGNvZGUgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSB1bnJlZiwgb3IgbWVtb3J5IGxlYWtzKSBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTiBvciBzdGFuZGFyZCByZWZjb3VudCB0cmFja2luZywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDljZGM5ZjQ4ZjQxNWE5ZmZlOTIyZTBiMjcxMmFlZjhjZWU1OGJhODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwNzoxNDozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IDk2NmFmM2JlZWQ5NGQuLmFiMTk1Yjk5Yzg1MzAgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC03MjM2LDE2ICs3MjM2LDIzIEBAIHN0YXRpYyB2b2lkIHNrYl9leHRfcHV0X3NwKHN0cnVjdCBzZWNfcGF0aCAqc3ApXG4ge1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXG4rXHRpZiAoIXNwLVx1MDAzZWxlbilcbitcdFx0cmV0dXJuO1xuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3AtXHUwMDNlbGVuOyBpKyspXG4gXHRcdHhmcm1fc3RhdGVfcHV0KHNwLVx1MDAzZXh2ZWNbaV0pO1xuK1x0c3AtXHUwMDNlbGVuID0gMDtcbiB9XG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXG4gc3RhdGljIHZvaWQgc2tiX2V4dF9wdXRfbWN0cChzdHJ1Y3QgbWN0cF9mbG93ICpmbG93KVxuIHtcbi1cdGlmIChmbG93LVx1MDAzZWtleSlcbi1cdFx0bWN0cF9rZXlfdW5yZWYoZmxvdy1cdTAwM2VrZXkpO1xuK1x0aWYgKCFmbG93LVx1MDAzZWtleSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0bWN0cF9rZXlfdW5yZWYoZmxvdy1cdTAwM2VrZXkpO1xuK1x0Zmxvdy1cdTAwM2VrZXkgPSBOVUxMO1xuIH1cbiAjZW5kaWZcbiBcbkBAIC03MjU3LDE1ICs3MjY0LDIwIEBAIHZvaWQgX19za2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpXG4gXHRpZiAoc2tiLVx1MDAzZWFjdGl2ZV9leHRlbnNpb25zID09IDApIHtcbiBcdFx0c2tiLVx1MDAzZWV4dGVuc2lvbnMgPSBOVUxMO1xuIFx0XHRfX3NrYl9leHRfcHV0KGV4dCk7XG4tI2lmZGVmIENPTkZJR19YRlJNXG4tXHR9IGVsc2UgaWYgKGlkID09IFNLQl9FWFRfU0VDX1BBVEggXHUwMDI2XHUwMDI2XG4tXHRcdCAgIHJlZmNvdW50X3JlYWQoXHUwMDI2ZXh0LVx1MDAzZXJlZmNudCkgPT0gMSkge1xuLVx0XHRzdHJ1Y3Qgc2VjX3BhdGggKnNwID0gc2tiX2V4dF9nZXRfcHRyKGV4dCwgU0tCX0VYVF9TRUNfUEFUSCk7XG4rXHRcdHJldHVybjtcbitcdH1cbiBcbi1cdFx0c2tiX2V4dF9wdXRfc3Aoc3ApO1xuLVx0XHRzcC1cdTAwM2VsZW4gPSAwO1xuK1x0aWYgKHJlZmNvdW50X3JlYWQoXHUwMDI2ZXh0LVx1MDAzZXJlZmNudCkgXHUwMDNlIDEpXG4rXHRcdHJldHVybjtcbitcbisjaWZkZWYgQ09ORklHX1hGUk1cbitcdGlmIChpZCA9PSBTS0JfRVhUX1NFQ19QQVRIKVxuK1x0XHRza2JfZXh0X3B1dF9zcChza2JfZXh0X2dldF9wdHIoZXh0LCBTS0JfRVhUX1NFQ19QQVRIKSk7XG4rI2VuZGlmXG4rI2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXG4rXHRpZiAoaWQgPT0gU0tCX0VYVF9NQ1RQKVxuK1x0XHRza2JfZXh0X3B1dF9tY3RwKHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfTUNUUCkpO1xuICNlbmRpZlxuLVx0fVxuIH1cbiBFWFBPUlRfU1lNQk9MKF9fc2tiX2V4dF9kZWwpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MTU6NTUuMTY2NjQ0MTQ2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0ODI1NzM4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTS0IgRXh0ZW5zaW9uIERlbGV0aW9uIGluIG5ldC9jb3JlL3NrYnVmZi5jKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG5ldC9jb3JlL3NrYnVmZi5jYCBkaWZmIGFuZCB1bmRlcnN0YW5kIHdoYXQncyBjaGFuZ2VkIGluIGBfX3NrYl9leHRfZGVsYC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBoYW5kbGluZyB0aGUgY2xlYW51cCBvZiBTS0IgKFNvY2tldCBCdWZmZXIpIGV4dGVuc2lvbnMuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLCBzbyBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBhcm91bmQgbGluZSA3MjM2LlxuXG5GaXJzdCwgSSBzZWUgdGhlIGNoYW5nZXMgbW9kaWZ5IGBza2JfZXh0X3B1dF9zcGAgYW5kIGBza2JfZXh0X3B1dF9tY3RwYC4gSXQgbG9va3MgbGlrZSBib3RoIG9mIHRoZXNlIGFyZSBub3cgY2hlY2tpbmcgdG8gc2VlIGlmIHRoZSBzdHJ1Y3R1cmUgbWVtYmVyIGBzcC1cdTAwM2VsZW5gIG9yIGBmbG93LVx1MDAzZWtleWAgYXJlIG5vbi16ZXJvL25vbi1udWxsIGJlZm9yZSBhdHRlbXB0aW5nIHRoZSBjbGVhbnVwLiBJbiB0aGUgY2FzZSBvZiB0aGUgYHNwYCBvYmplY3QsIGlmIGBzcC1cdTAwM2VsZW5gIGlzIHplcm8sIHRoZXJlIGlzIGEgYHJldHVybjtgIHN0YXRlbWVudDsgaWYgbm90LCB0aGVuIHRoZSByZWZlcmVuY2UgY291bnRlZCBlbnRyaWVzLCBgc3AtXHUwMDNleHZlY1tpXWAsIGFyZSBkZWNyZW1lbnRlZC4gIFRoZSBgc3AtXHUwMDNlbGVuYCBpcyB0aGVuIHNldCB0byBgMGAuICBJbiB0aGUgY2FzZSBvZiBgZmxvdy1cdTAwM2VrZXlgLCBpZiBgZmxvdy1cdTAwM2VrZXlgIGlzIG51bGwsIHRoZXJlIGlzIGEgYHJldHVybjtgIHN0YXRlbWVudDsgaWYgbm90LCB0aGVuIHRoZSByZWZlcmVuY2UgY291bnRlZCBlbnRyeSwgYGZsb3ctXHUwMDNla2V5YCwgaXMgZGVjcmVtZW50ZWQsIHRoZW4gaXMgc2V0IHRvIE5VTEwuXG5cblRoZW4sIGluc2lkZSBgX19za2JfZXh0X2RlbGAsIHRoZSBkaWZmIG1vZGlmaWVzIHRoZSBsb2dpYyBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIGBpZGAuIFRoZSBjaGFuZ2VzIHNpbXBsaWZ5IHRoZSBjb25kaXRpb25hbCBsb2dpYyBmb3IgcmVsZWFzaW5nIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggc2VjdXJpdHkgcGF0aHMgKGBTS0JfRVhUX1NFQ19QQVRIYCkgYW5kIE1DVFAgZmxvd3MgKGBTS0JfRVhUX01DVFBgKS4gSXQgbm93IGNoZWNrcyB0aGUgYHJlZmNudGAgb2YgdGhlIGV4dGVuc2lvbi4gIElmIHRoZSBgcmVmY250YCBpcyBncmVhdGVyIHRoYW4gMSwgdGhlbiB0aGUgY29kZSByZXR1cm5zLiAgT3RoZXJ3aXNlLCB0aGUgY29kZSBjYWxscyB0aGUgc3BlY2lhbGl6ZWQgcHV0IGZ1bmN0aW9ucyBmb3IgdGhlIHNwZWNpZmllZCBleHRlbnNpb24uIFNwZWNpZmljYWxseTpcblxuKiAgIEZvciBgU0tCX0VYVF9TRUNfUEFUSGAsIGl0IGNhbGxzIGBza2JfZXh0X3B1dF9zcGAgdG8gcmVsZWFzZSB0aGUgc2VjdXJpdHkgcGF0aCByZXNvdXJjZXMuXG4qICAgRm9yIGBTS0JfRVhUX01DVFBgLCBpdCBjYWxscyBgc2tiX2V4dF9wdXRfbWN0cGAgdG8gcmVsZWFzZSB0aGUgTUNUUCBmbG93IHJlc291cmNlcy5cblxuVGhpcyBhbGwgcG9pbnRzIHRvIG1vcmUgcm9idXN0IGhhbmRsaW5nIG9mIHRoZSByZWZlcmVuY2UgY291bnRzIGFuZCBhdm9pZGluZyBwb3RlbnRpYWwgZG91YmxlIGZyZWVzIG9yIHJlc291cmNlIGxlYWtzIHdoZW4gZGVhbGluZyB3aXRoIHRoZXNlIFNLQiBleHRlbnNpb25zLiBUaGVzZSB0eXBlcyBvZiBjaGFuZ2VzIGFyZSBnb29kIHRvIHNlZS4gSSBzaG91bGQgdmVyaWZ5IHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBsb2NraW5nIHJlcXVpcmVtZW50cyBvciBpbnRyb2R1Y2UgYW55IHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTMzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MTY6MDEuNjQ5MjIxMzI4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNzMzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MjIwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MjIwOlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjcyMjE6XFx0XFx0fVxcbjcyMjI6XFx0XFxuNzIyMzpcXHRcXHRuZXdsZW4gPSBuZXdvZmYgKyBza2JfZXh0X3R5cGVfbGVuW2lkXTtcXG43MjI0OlxcdFxcdG5ldy1cXHUwMDNlY2h1bmtzID0gbmV3bGVuO1xcbjcyMjU6XFx0XFx0bmV3LVxcdTAwM2VvZmZzZXRbaWRdID0gbmV3b2ZmO1xcbjcyMjY6XFx0c2V0X2FjdGl2ZTpcXG43MjI3OlxcdFxcdHNrYi1cXHUwMDNlc2xvd19ncm8gPSAxO1xcbjcyMjg6XFx0XFx0c2tiLVxcdTAwM2VleHRlbnNpb25zID0gbmV3O1xcbjcyMjk6XFx0XFx0c2tiLVxcdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyB8PSAxIFxcdTAwM2NcXHUwMDNjIGlkO1xcbjcyMzA6XFx0XFx0cmV0dXJuIHNrYl9leHRfZ2V0X3B0cihuZXcsIGlkKTtcXG43MjMxOlxcdH1cXG43MjMyOlxcdEVYUE9SVF9TWU1CT0woc2tiX2V4dF9hZGQpO1xcbjcyMzM6XFx0XFxuNzIzNDpcXHQjaWZkZWYgQ09ORklHX1hGUk1cXG43MjM1OlxcdHN0YXRpYyB2b2lkIHNrYl9leHRfcHV0X3NwKHN0cnVjdCBzZWNfcGF0aCAqc3ApXFxuNzIzNjpcXHR7XFxuNzIzNzpcXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG43MjM4OlxcdFxcbjcyMzk6XFx0XFx0aWYgKCFzcC1cXHUwMDNlbGVuKVxcbjcyNDA6XFx0XFx0XFx0cmV0dXJuO1xcbjcyNDE6XFx0XFxuNzI0MjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc3AtXFx1MDAzZWxlbjsgaSsrKVxcbjcyNDM6XFx0XFx0XFx0eGZybV9zdGF0ZV9wdXQoc3AtXFx1MDAzZXh2ZWNbaV0pO1xcbjcyNDQ6XFx0XFx0c3AtXFx1MDAzZWxlbiA9IDA7XFxuNzI0NTpcXHR9XFxuNzI0NjpcXHQjZW5kaWZcXG43MjQ3OlxcdFxcbjcyNDg6XFx0I2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXFxuNzI0OTpcXHRzdGF0aWMgdm9pZCBza2JfZXh0X3B1dF9tY3RwKHN0cnVjdCBtY3RwX2Zsb3cgKmZsb3cpXFxuNzI1MDpcXHR7XFxuNzI1MTpcXHRcXHRpZiAoIWZsb3ctXFx1MDAzZWtleSlcXG43MjUyOlxcdFxcdFxcdHJldHVybjtcXG43MjUzOlxcdFxcbjcyNTQ6XFx0XFx0bWN0cF9rZXlfdW5yZWYoZmxvdy1cXHUwMDNla2V5KTtcXG43MjU1OlxcdFxcdGZsb3ctXFx1MDAzZWtleSA9IE5VTEw7XFxuNzI1NjpcXHR9XFxuNzI1NzpcXHQjZW5kaWZcXG43MjU4OlxcdFxcbjcyNTk6XFx0dm9pZCBfX3NrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcXG43MjYwOlxcdHtcXG43MjYxOlxcdFxcdHN0cnVjdCBza2JfZXh0ICpleHQgPSBza2ItXFx1MDAzZWV4dGVuc2lvbnM7XFxuNzI2MjpcXHRcXG43MjYzOlxcdFxcdHNrYi1cXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgXFx1MDAyNj0gfigxIFxcdTAwM2NcXHUwMDNjIGlkKTtcXG43MjY0OlxcdFxcdGlmIChza2ItXFx1MDAzZWFjdGl2ZV9leHRlbnNpb25zID09IDApIHtcXG43MjY1OlxcdFxcdFxcdHNrYi1cXHUwMDNlZXh0ZW5zaW9ucyA9IE5VTEw7XFxuNzI2NjpcXHRcXHRcXHRfX3NrYl9leHRfcHV0KGV4dCk7XFxuNzI2NzpcXHRcXHRcXHRyZXR1cm47XFxuNzI2ODpcXHRcXHR9XFxuNzI2OTpcXHRcXG43MjcwOlxcdFxcdGlmIChyZWZjb3VudF9yZWFkKFxcdTAwMjZleHQtXFx1MDAzZXJlZmNudCkgXFx1MDAzZSAxKVxcbjcyNzE6XFx0XFx0XFx0cmV0dXJuO1xcbjcyNzI6XFx0XFxuNzI3MzpcXHQjaWZkZWYgQ09ORklHX1hGUk1cXG43Mjc0OlxcdFxcdGlmIChpZCA9PSBTS0JfRVhUX1NFQ19QQVRIKVxcbjcyNzU6XFx0XFx0XFx0c2tiX2V4dF9wdXRfc3Aoc2tiX2V4dF9nZXRfcHRyKGV4dCwgU0tCX0VYVF9TRUNfUEFUSCkpO1xcbjcyNzY6XFx0I2VuZGlmXFxuNzI3NzpcXHQjaWZkZWYgQ09ORklHX01DVFBfRkxPV1NcXG43Mjc4OlxcdFxcdGlmIChpZCA9PSBTS0JfRVhUX01DVFApXFxuNzI3OTpcXHRcXHRcXHRza2JfZXh0X3B1dF9tY3RwKHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfTUNUUCkpO1xcbjcyODA6XFx0I2VuZGlmXFxuNzI4MTpcXHR9XFxuNzI4MjpcXHRFWFBPUlRfU1lNQk9MKF9fc2tiX2V4dF9kZWwpO1xcbjcyODM6XFx0XFxuNzI4NDpcXHR2b2lkIF9fc2tiX2V4dF9wdXQoc3RydWN0IHNrYl9leHQgKmV4dClcXG43Mjg1OlxcdHtcXG43Mjg2OlxcdFxcdC8qIElmIHRoaXMgaXMgbGFzdCBjbG9uZSwgbm90aGluZyBjYW4gaW5jcmVtZW50XFxuNzI4NzpcXHRcXHQgKiBpdCBhZnRlciBjaGVjayBwYXNzZXMuICBBdm9pZHMgb25lIGF0b21pYyBvcC5cXG43Mjg4OlxcdFxcdCAqL1xcbjcyODk6XFx0XFx0aWYgKHJlZmNvdW50X3JlYWQoXFx1MDAyNmV4dC1cXHUwMDNlcmVmY250KSA9PSAxKVxcbjcyOTA6XFx0XFx0XFx0Z290byBmcmVlX25vdztcXG43MjkxOlxcdFxcbjcyOTI6XFx0XFx0aWYgKCFyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmV4dC1cXHUwMDNlcmVmY250KSlcXG43MjkzOlxcdFxcdFxcdHJldHVybjtcXG43Mjk0OlxcdGZyZWVfbm93OlxcbjcyOTU6XFx0I2lmZGVmIENPTkZJR19YRlJNXFxuNzI5NjpcXHRcXHRpZiAoX19za2JfZXh0X2V4aXN0KGV4dCwgU0tCX0VYVF9TRUNfUEFUSCkpXFxuNzI5NzpcXHRcXHRcXHRza2JfZXh0X3B1dF9zcChza2JfZXh0X2dldF9wdHIoZXh0LCBTS0JfRVhUX1NFQ19QQVRIKSk7XFxuNzI5ODpcXHQjZW5kaWZcXG43Mjk5OlxcdCNpZmRlZiBDT05GSUdfTUNUUF9GTE9XU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoxNjowMS42NDk1NTA2ODhaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjU0ODk3NjExNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBTS0IgRXh0ZW5zaW9uIENsZWFudXAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyBhbmQgd2h5IEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgY29yZSBvZiB0aGlzIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgY2xlYW5pbmcgdXAgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBTS0IgZXh0ZW5zaW9ucywgc3BlY2lmaWNhbGx5IHdoZW4gYW4gZXh0ZW5zaW9uIGlzIHJlbW92ZWQgdmlhIGBfX3NrYl9leHRfZGVsYC4gVGhlIGZ1bmN0aW9uIGBfX3NrYl9leHRfZGVsYCBpcyBjYWxsZWQgd2hlbiBhbiBgaWRgIGlzIHJlbW92ZWQgZnJvbSB0aGUgYHNrYmAuIElmIHRoZXJlIGFyZSBubyBtb3JlIGFjdGl2ZSBleHRlbnNpb25zLCB0aGUgZW50aXJlIGV4dGVuc2lvbiBzdHJ1Y3R1cmUgZ2V0cyBjbGVhbmVkIHVwIHdpdGggYF9fc2tiX2V4dF9wdXRgIGFuZCBgc2tiLVx1MDAzZWV4dGVuc2lvbnNgIGlzIHNldCB0byBOVUxMLlxuXG5UaGUgaW50ZXJlc3RpbmcgcGFydCwgZm9yIG91ciBwdXJwb3NlcywgaGFwcGVucyB3aGVuIHRoZXJlIGFyZSAqb3RoZXIqIGFjdGl2ZSBleHRlbnNpb25zIHN0aWxsIG9uIHRoZSBTS0IuICBJZiB0aGUgZXh0ZW5zaW9uJ3MgcmVmZXJlbmNlIGNvdW50IGlzIDEgKG1lYW5pbmcgaXQncyBub3Qgc2hhcmVkIHdpdGggYW55IGNsb25lZCBTS0JzKSwgdGhlbiB0aGUgcGF0Y2gncyBsb2dpYyBraWNrcyBpbi4gUHJldmlvdXNseSwgaXQgaGFuZGxlZCB0aGUgYFNLQl9FWFRfU0VDX1BBVEhgIGJ5IHB1dHRpbmcgdGhlIHhmcm0gc3RhdGVzIGFuZCBjbGVhcmluZyBgc3AtXHUwMDNlbGVuYC4gTm93IGl0IGFsc28gaGFuZGxlcyBgU0tCX0VYVF9NQ1RQYCBieSBwdXR0aW5nIHRoZSBgZmxvdy1cdTAwM2VrZXlgIGFuZCBzZXR0aW5nIGBmbG93LVx1MDAzZWtleSA9IE5VTExgLiBJbiB0aGUgY29ycmVzcG9uZGluZyBgc2tiX2V4dF9wdXRfc3BgIGFuZCBgc2tiX2V4dF9wdXRfbWN0cGAgZnVuY3Rpb25zLCB0aGVyZSBhcmUgY2hlY2tzIHRvIGF2b2lkIGRvdWJsZS1mcmVlaW5nIHRoZXNlIHJlc291cmNlcy5cblxuVGhlIHJhdGlvbmFsZSBpcyBjbGVhcjogd2hlbiBgX19za2JfZXh0X2RlbGAgaXMgY2FsbGVkIGZvciBNQ1RQIG9yIFhGUk0gYW5kIG90aGVyIGV4dGVuc2lvbnMgcmVtYWluIGFjdGl2ZSBvbiB0aGUgU0tCLCB0aGUgZXh0ZW5zaW9uIHN0cnVjdHVyZSBpdHNlbGYgc3RheXMgYXR0YWNoZWQgdG8gdGhlIFNLQi4gQnV0LCB0aGUgc3BlY2lmaWMgZXh0ZW5zaW9uIGBpZGAgaXMgZGVsZXRlZCwgc28gdGhlIHJlc291cmNlcyBpdCB3YXMgdXNpbmcgKGxpa2UgdGhlIHhmcm1fc3RhdGUgb3IgbWN0cF9rZXkpIG11c3QgYmUgcmVsZWFzZWQgcHJvbXB0bHkgKHdoZW4gcmVmY291bnQgPT0gMSksIGF2b2lkaW5nIGxlYWtzLiBTZXR0aW5nIGBzcC1cdTAwM2VsZW4gPSAwYCAvIGBmbG93LVx1MDAzZWtleSA9IE5VTExgIHdoZW4gYF9fc2tiX2V4dF9wdXRgIGlzIGxhdGVyIGNhbGxlZCBwcmV2ZW50cyB0aGUgZG91YmxlLWZyZWUvZG91YmxlLXVucmVmIGlzc3VlLlxuXG5Ob3csIHRoZSBLTVNBTiBxdWVzdGlvbi4gIExldCdzIGdvIHRocm91Z2ggdGhlIGNyaXRlcmlhOlxuXG4qICAgKipLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZToqKiBOb3BlLiBUaGlzIHBhdGNoIGlzbid0IHRvdWNoaW5nIGFueSBkYXRhIHRoYXQgZ2V0cyBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXIgc3BhY2UuXG4qICAgKipCcmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogTm8uIGBzcC1cdTAwM2VsZW5gIGFuZCBgZmxvdy1cdTAwM2VrZXlgIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBtZW1iZXJzIG9mIHRoZSBgc2VjX3BhdGhgIGFuZCBgbWN0cF9mbG93YCBzdHJ1Y3R1cmVzLlxuKiAgICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkczoqKiBOby4gSXQncyBmb2N1c2VkIG9uIGNsZWFudXAsIG5vdCBpbnRyb2R1Y2luZyBuZXcgY29tcGxleCBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBkYXRhLlxuKiAgICoqQm91bmRzIGNoZWNrcy9idWZmZXIgbGVuZ3RocyBleHBvc2luZyB1bmluaXRpYWxpemVkIGRhdGE6KiogTm90IGFwcGxpY2FibGUuXG5cblRoaXMgcGF0Y2ggaXMgYWJvdXQgcmVmZXJlbmNlIGNsZWFudXAsIHJlc291cmNlIG1hbmFnZW1lbnQuIFRoZSByaXNrcyBoZXJlIGFyZSByZXNvdXJjZSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcy4gQWxsIHRoZXNlIGFyZSBleGFjdGx5IHRoZSB0eXBlIG9mIGJ1Z3MgdGhhdCBLQVNBTiwgcmVmY291bnQgY2hlY2tpbmcsIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSAqZGVzaWduZWQqIHRvIGNhdGNoLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBUaGVyZWZvcmUsIHRoZXJlJ3Mgbm8gbmVlZCBmb3IgS01TQU4gaGVyZS5cblxuSSdsbCBwcm9jZWVkIHRvIG1hcmsgdGhpcyB3aXRoIGBOZWVkc0tNU0FOOiBmYWxzZWAgYW5kIG1ha2Ugc3VyZSB0aGUgcmVhc29uaW5nIGlzIGNsZWFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDI2LCJPdXRwdXRUb2tlbnMiOjIxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjE2OjA4LjE5ODUyOTgwNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fc2tiX2V4dF9kZWwoKWAgYW5kIGhlbHBlciBmdW5jdGlvbnMgYHNrYl9leHRfcHV0X3NwKClgIC8gYHNrYl9leHRfcHV0X21jdHAoKWAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCB0byBwcm9wZXJseSByZWxlYXNlIHJlZmVyZW5jZXMgKGBtY3RwX2tleV91bnJlZmAgYW5kIGB4ZnJtX3N0YXRlX3B1dGApIGFuZCB6ZXJvIG91dCBmaWVsZHMgKGBzcC1cXHUwMDNlbGVuID0gMGAsIGBmbG93LVxcdTAwM2VrZXkgPSBOVUxMYCkgd2hlbiBza2IgZXh0ZW5zaW9ucyBhcmUgcmVtb3ZlZC5cXG5cXG5UaGVzZSBjaGFuZ2VzIHBlcnRhaW4gc3RyaWN0bHkgdG8gcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsaWZlY3ljbGUvY2xlYW51cCBtYW5hZ2VtZW50IG9mIHNrYiBleHRlbnNpb24gZGF0YS4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGFsbG9jYXRpb25zLCBkYXRhIGV4cG9zdXJlIHRvIHVzZXIgc3BhY2UsIG9yIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uLiBBbnkgcG90ZW50aWFsIGRlZmVjdHMgaW4gdGhpcyBjb2RlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgdW5yZWYsIG9yIG1lbW9yeSBsZWFrcykgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4gb3Igc3RhbmRhcmQgcmVmY291bnQgdHJhY2tpbmcsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19za2JfZXh0X2RlbCgpYCBhbmQgaGVscGVyIGZ1bmN0aW9ucyBgc2tiX2V4dF9wdXRfc3AoKWAgLyBgc2tiX2V4dF9wdXRfbWN0cCgpYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIHRvIHByb3Blcmx5IHJlbGVhc2UgcmVmZXJlbmNlcyAoYG1jdHBfa2V5X3VucmVmYCBhbmQgYHhmcm1fc3RhdGVfcHV0YCkgYW5kIHplcm8gb3V0IGZpZWxkcyAoYHNwLVxcdTAwM2VsZW4gPSAwYCwgYGZsb3ctXFx1MDAzZWtleSA9IE5VTExgKSB3aGVuIHNrYiBleHRlbnNpb25zIGFyZSByZW1vdmVkLlxcblxcblRoZXNlIGNoYW5nZXMgcGVydGFpbiBzdHJpY3RseSB0byByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmVjeWNsZS9jbGVhbnVwIG1hbmFnZW1lbnQgb2Ygc2tiIGV4dGVuc2lvbiBkYXRhLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgYWxsb2NhdGlvbnMsIGRhdGEgZXhwb3N1cmUgdG8gdXNlciBzcGFjZSwgb3IgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24uIEFueSBwb3RlbnRpYWwgZGVmZWN0cyBpbiB0aGlzIGNvZGUgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSB1bnJlZiwgb3IgbWVtb3J5IGxlYWtzKSBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTiBvciBzdGFuZGFyZCByZWZjb3VudCB0cmFja2luZywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxsbpt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 06:42:12 +0000 UTC FinishedAt: 2026-08-31 07:16:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SKB_EXTENSIONS", "XFRM", "MCTP", "MCTP_FLOWS", "MCTP_TRANSPORT_I2C" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SKB_EXTENSIONS", "XFRM", "MCTP", "MCTP_FLOWS", "MCTP_TRANSPORT_I2C" ], "series_id": "2dd6003a-8634-4ba1-bfb1-02961777d345" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__skb_ext_del", "__skb_ext_put" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NLQl9FWFRFTlNJT05TJiMzNDssCiAgICAmIzM0O1hGUk0mIzM0OywKICAgICYjMzQ7TUNUUCYjMzQ7LAogICAgJiMzNDtNQ1RQX0ZMT1dTJiMzNDssCiAgICAmIzM0O01DVFBfVFJBTlNQT1JUX0kyQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc2tiX2V4dF9kZWwmIzM0OywKICAgICYjMzQ7X19za2JfZXh0X3B1dCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX3NrYl9leHRfZGVsKClgIGFuZCBoZWxwZXIgZnVuY3Rpb25zIGBza2JfZXh0X3B1dF9zcCgpYCAvIGBza2JfZXh0X3B1dF9tY3RwKClgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AgdG8gcHJvcGVybHkgcmVsZWFzZSByZWZlcmVuY2VzIChgbWN0cF9rZXlfdW5yZWZgIGFuZCBgeGZybV9zdGF0ZV9wdXRgKSBhbmQgemVybyBvdXQgZmllbGRzIChgc3AtXHUwMDNlbGVuID0gMGAsIGBmbG93LVx1MDAzZWtleSA9IE5VTExgKSB3aGVuIHNrYiBleHRlbnNpb25zIGFyZSByZW1vdmVkLlxuXG5UaGVzZSBjaGFuZ2VzIHBlcnRhaW4gc3RyaWN0bHkgdG8gcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsaWZlY3ljbGUvY2xlYW51cCBtYW5hZ2VtZW50IG9mIHNrYiBleHRlbnNpb24gZGF0YS4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGFsbG9jYXRpb25zLCBkYXRhIGV4cG9zdXJlIHRvIHVzZXIgc3BhY2UsIG9yIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uLiBBbnkgcG90ZW50aWFsIGRlZmVjdHMgaW4gdGhpcyBjb2RlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgdW5yZWYsIG9yIG1lbW9yeSBsZWFrcykgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4gb3Igc3RhbmRhcmQgcmVmY291bnQgdHJhY2tpbmcsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBza2IgZXh0ZW5zaW9uIGRlbGV0aW9uIGFuZCBjbGVhbnVwIGxvZ2ljIGluIGBfX3NrYl9leHRfZGVsYCwgYHNrYl9leHRfcHV0X3NwYCwgYW5kIGBza2JfZXh0X3B1dF9tY3RwYCwgcHJvcGVybHkgaGFuZGxpbmcgcmVmZXJlbmNlIGNvdW50cyBhbmQgcmVzb3VyY2UgZGVhbGxvY2F0aW9uIGZvciBNQ1RQIGZsb3dzIGFuZCBJUHNlYy9YRlJNIHNlY3VyaXR5IHBhdGhzIHdoZW4gcmVtb3ZpbmcgYWN0aXZlIGV4dGVuc2lvbnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWNkYzlmNDhmNDE1YTlmZmU5MjJlMGIyNzEyYWVmOGNlZTU4YmE4OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDA3OjE0OjM4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IDk2NmFmM2JlZWQ5NGQuLmFiMTk1Yjk5Yzg1MzAgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC03MjM2LDE2ICYjNDM7NzIzNiwyMyBAQCBzdGF0aWMgdm9pZCBza2JfZXh0X3B1dF9zcChzdHJ1Y3Qgc2VjX3BhdGggKnNwKVxuIHtcbiBcdHVuc2lnbmVkIGludCBpO1xuIFxuJiM0MztcdGlmICghc3AtXHUwMDNlbGVuKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNwLVx1MDAzZWxlbjsgaSYjNDM7JiM0MzspXG4gXHRcdHhmcm1fc3RhdGVfcHV0KHNwLVx1MDAzZXh2ZWNbaV0pO1xuJiM0MztcdHNwLVx1MDAzZWxlbiA9IDA7XG4gfVxuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfTUNUUF9GTE9XU1xuIHN0YXRpYyB2b2lkIHNrYl9leHRfcHV0X21jdHAoc3RydWN0IG1jdHBfZmxvdyAqZmxvdylcbiB7XG4tXHRpZiAoZmxvdy1cdTAwM2VrZXkpXG4tXHRcdG1jdHBfa2V5X3VucmVmKGZsb3ctXHUwMDNla2V5KTtcbiYjNDM7XHRpZiAoIWZsb3ctXHUwMDNla2V5KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRtY3RwX2tleV91bnJlZihmbG93LVx1MDAzZWtleSk7XG4mIzQzO1x0Zmxvdy1cdTAwM2VrZXkgPSBOVUxMO1xuIH1cbiAjZW5kaWZcbiBcbkBAIC03MjU3LDE1ICYjNDM7NzI2NCwyMCBAQCB2b2lkIF9fc2tiX2V4dF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxuIFx0aWYgKHNrYi1cdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyA9PSAwKSB7XG4gXHRcdHNrYi1cdTAwM2VleHRlbnNpb25zID0gTlVMTDtcbiBcdFx0X19za2JfZXh0X3B1dChleHQpO1xuLSNpZmRlZiBDT05GSUdfWEZSTVxuLVx0fSBlbHNlIGlmIChpZCA9PSBTS0JfRVhUX1NFQ19QQVRIIFx1MDAyNlx1MDAyNlxuLVx0XHQgICByZWZjb3VudF9yZWFkKFx1MDAyNmV4dC1cdTAwM2VyZWZjbnQpID09IDEpIHtcbi1cdFx0c3RydWN0IHNlY19wYXRoICpzcCA9IHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfU0VDX1BBVEgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcbi1cdFx0c2tiX2V4dF9wdXRfc3Aoc3ApO1xuLVx0XHRzcC1cdTAwM2VsZW4gPSAwO1xuJiM0MztcdGlmIChyZWZjb3VudF9yZWFkKFx1MDAyNmV4dC1cdTAwM2VyZWZjbnQpIFx1MDAzZSAxKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19YRlJNXG4mIzQzO1x0aWYgKGlkID09IFNLQl9FWFRfU0VDX1BBVEgpXG4mIzQzO1x0XHRza2JfZXh0X3B1dF9zcChza2JfZXh0X2dldF9wdHIoZXh0LCBTS0JfRVhUX1NFQ19QQVRIKSk7XG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZkZWYgQ09ORklHX01DVFBfRkxPV1NcbiYjNDM7XHRpZiAoaWQgPT0gU0tCX0VYVF9NQ1RQKVxuJiM0MztcdFx0c2tiX2V4dF9wdXRfbWN0cChza2JfZXh0X2dldF9wdHIoZXh0LCBTS0JfRVhUX01DVFApKTtcbiAjZW5kaWZcbi1cdH1cbiB9XG4gRVhQT1JUX1NZTUJPTChfX3NrYl9leHRfZGVsKTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTS0JfRVhURU5TSU9OUyYjMzQ7LAogICAgJiMzNDtYRlJNJiMzNDssCiAgICAmIzM0O01DVFAmIzM0OywKICAgICYjMzQ7TUNUUF9GTE9XUyYjMzQ7LAogICAgJiMzNDtNQ1RQX1RSQU5TUE9SVF9JMkMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3NrYl9leHRfZGVsJiMzNDssCiAgICAmIzM0O19fc2tiX2V4dF9wdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBza2IgZXh0ZW5zaW9uIGRlbGV0aW9uIGFuZCBjbGVhbnVwIGxvZ2ljIGluIGBfX3NrYl9leHRfZGVsYCwgYHNrYl9leHRfcHV0X3NwYCwgYW5kIGBza2JfZXh0X3B1dF9tY3RwYCwgcHJvcGVybHkgaGFuZGxpbmcgcmVmZXJlbmNlIGNvdW50cyBhbmQgcmVzb3VyY2UgZGVhbGxvY2F0aW9uIGZvciBNQ1RQIGZsb3dzIGFuZCBJUHNlYy9YRlJNIHNlY3VyaXR5IHBhdGhzIHdoZW4gcmVtb3ZpbmcgYWN0aXZlIGV4dGVuc2lvbnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWNkYzlmNDhmNDE1YTlmZmU5MjJlMGIyNzEyYWVmOGNlZTU4YmE4OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDA3OjE0OjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCA5NjZhZjNiZWVkOTRkLi5hYjE5NWI5OWM4NTMwIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtNzIzNiwxNiAmIzQzOzcyMzYsMjMgQEAgc3RhdGljIHZvaWQgc2tiX2V4dF9wdXRfc3Aoc3RydWN0IHNlY19wYXRoICpzcCkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAomIzQzOwlpZiAoIXNwLSZndDtsZW4pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IHNwLSZndDtsZW47IGkmIzQzOyYjNDM7KQogCQl4ZnJtX3N0YXRlX3B1dChzcC0mZ3Q7eHZlY1tpXSk7CiYjNDM7CXNwLSZndDtsZW4gPSAwOwogfQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTUNUUF9GTE9XUwogc3RhdGljIHZvaWQgc2tiX2V4dF9wdXRfbWN0cChzdHJ1Y3QgbWN0cF9mbG93ICpmbG93KQogewotCWlmIChmbG93LSZndDtrZXkpCi0JCW1jdHBfa2V5X3VucmVmKGZsb3ctJmd0O2tleSk7CiYjNDM7CWlmICghZmxvdy0mZ3Q7a2V5KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltY3RwX2tleV91bnJlZihmbG93LSZndDtrZXkpOwomIzQzOwlmbG93LSZndDtrZXkgPSBOVUxMOwogfQogI2VuZGlmCiAKQEAgLTcyNTcsMTUgJiM0Mzs3MjY0LDIwIEBAIHZvaWQgX19za2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpCiAJaWYgKHNrYi0mZ3Q7YWN0aXZlX2V4dGVuc2lvbnMgPT0gMCkgewogCQlza2ItJmd0O2V4dGVuc2lvbnMgPSBOVUxMOwogCQlfX3NrYl9leHRfcHV0KGV4dCk7Ci0jaWZkZWYgQ09ORklHX1hGUk0KLQl9IGVsc2UgaWYgKGlkID09IFNLQl9FWFRfU0VDX1BBVEggJmFtcDsmYW1wOwotCQkgICByZWZjb3VudF9yZWFkKCZhbXA7ZXh0LSZndDtyZWZjbnQpID09IDEpIHsKLQkJc3RydWN0IHNlY19wYXRoICpzcCA9IHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfU0VDX1BBVEgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiAKLQkJc2tiX2V4dF9wdXRfc3Aoc3ApOwotCQlzcC0mZ3Q7bGVuID0gMDsKJiM0MzsJaWYgKHJlZmNvdW50X3JlYWQoJmFtcDtleHQtJmd0O3JlZmNudCkgJmd0OyAxKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfWEZSTQomIzQzOwlpZiAoaWQgPT0gU0tCX0VYVF9TRUNfUEFUSCkKJiM0MzsJCXNrYl9leHRfcHV0X3NwKHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfU0VDX1BBVEgpKTsKJiM0MzsjZW5kaWYKJiM0MzsjaWZkZWYgQ09ORklHX01DVFBfRkxPV1MKJiM0MzsJaWYgKGlkID09IFNLQl9FWFRfTUNUUCkKJiM0MzsJCXNrYl9leHRfcHV0X21jdHAoc2tiX2V4dF9nZXRfcHRyKGV4dCwgU0tCX0VYVF9NQ1RQKSk7CiAjZW5kaWYKLQl9CiB9CiBFWFBPUlRfU1lNQk9MKF9fc2tiX2V4dF9kZWwpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGlzIHBhdGNoLCBhcyBpZiBJIHdlcmUgcHJvY2Vzc2luZyBpdCBteXNlbGY6CgoqKlBhdGNoIEFuYWx5c2lzIGFuZCBDb250ZXh0dWFsIFJldmlldyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L2NvcmUvc2tidWZmLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMsIHBhcnRpY3VsYXJseSBzaW5jZSBpdCBzZWVtcyB0byBiZSBhZmZlY3RpbmcgYHNrYl9leHRfcHV0X3NwYCwgYHNrYl9leHRfcHV0X21jdHBgLCBhbmQgYF9fc2tiX2V4dF9kZWxgLiBUaG9zZSBmdW5jdGlvbnMgYXJlIGtleSwgc28gSSBpbW1lZGlhdGVseSB3YW50IHRvIGdyYXNwIHRoZWlyIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIFNLQiAoU29ja2V0IEJ1ZmZlcikgYXJjaGl0ZWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIGhvdyBleHRlbnNpb25zIGFuZCBtZXRhZGF0YSBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIFNLQiBzdHJ1Y3R1cmUuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IHNvbWUgbW9yZSBpbmZvIG9uIGV4YWN0bHkgd2hhdCYjMzk7cyBiZWluZyB0d2Vha2VkLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIHplcm8gaW4gb24gdGhlIGFyZWEgb2YgYG5ldC9jb3JlL3NrYnVmZi5jYCBhcm91bmQgbGluZSA3MjM2LiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSBhbmQgcGlucG9pbnQgcHJlY2lzZWx5IHdoZXJlIHRoZSBjaGFuZ2VzIGFyZSBiZWluZyBtYWRlLCBzbyBJIGNhbiBzdGFydCBmb3JtdWxhdGluZyBhIGh5cG90aGVzaXMgYWJvdXQgd2hhdCB0aGUgcGF0Y2ggaXMgdHJ5aW5nIHRvIGFjaGlldmUgYW5kIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBJIGFudGljaXBhdGUgdGhhdCB0aGUgY29kZSBpbiB0aGUgaW1tZWRpYXRlIHZpY2luaXR5IGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgdW5kZXJseWluZyBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcyMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzIyMDpcdFx0XHRcdHJldHVybiBOVUxMO1xuNzIyMTpcdFx0fVxuNzIyMjpcdFxuNzIyMzpcdFx0bmV3bGVuID0gbmV3b2ZmICYjNDM7IHNrYl9leHRfdHlwZV9sZW5baWRdO1xuNzIyNDpcdFx0bmV3LVx1MDAzZWNodW5rcyA9IG5ld2xlbjtcbjcyMjU6XHRcdG5ldy1cdTAwM2VvZmZzZXRbaWRdID0gbmV3b2ZmO1xuNzIyNjpcdHNldF9hY3RpdmU6XG43MjI3Olx0XHRza2ItXHUwMDNlc2xvd19ncm8gPSAxO1xuNzIyODpcdFx0c2tiLVx1MDAzZWV4dGVuc2lvbnMgPSBuZXc7XG43MjI5Olx0XHRza2ItXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgfD0gMSBcdTAwM2NcdTAwM2MgaWQ7XG43MjMwOlx0XHRyZXR1cm4gc2tiX2V4dF9nZXRfcHRyKG5ldywgaWQpO1xuNzIzMTpcdH1cbjcyMzI6XHRFWFBPUlRfU1lNQk9MKHNrYl9leHRfYWRkKTtcbjcyMzM6XHRcbjcyMzQ6XHQjaWZkZWYgQ09ORklHX1hGUk1cbjcyMzU6XHRzdGF0aWMgdm9pZCBza2JfZXh0X3B1dF9zcChzdHJ1Y3Qgc2VjX3BhdGggKnNwKVxuNzIzNjpcdHtcbjcyMzc6XHRcdHVuc2lnbmVkIGludCBpO1xuNzIzODpcdFxuNzIzOTpcdFx0aWYgKCFzcC1cdTAwM2VsZW4pXG43MjQwOlx0XHRcdHJldHVybjtcbjcyNDE6XHRcbjcyNDI6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNwLVx1MDAzZWxlbjsgaSYjNDM7JiM0MzspXG43MjQzOlx0XHRcdHhmcm1fc3RhdGVfcHV0KHNwLVx1MDAzZXh2ZWNbaV0pO1xuNzI0NDpcdFx0c3AtXHUwMDNlbGVuID0gMDtcbjcyNDU6XHR9XG43MjQ2Olx0I2VuZGlmXG43MjQ3Olx0XG43MjQ4Olx0I2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXG43MjQ5Olx0c3RhdGljIHZvaWQgc2tiX2V4dF9wdXRfbWN0cChzdHJ1Y3QgbWN0cF9mbG93ICpmbG93KVxuNzI1MDpcdHtcbjcyNTE6XHRcdGlmICghZmxvdy1cdTAwM2VrZXkpXG43MjUyOlx0XHRcdHJldHVybjtcbjcyNTM6XHRcbjcyNTQ6XHRcdG1jdHBfa2V5X3VucmVmKGZsb3ctXHUwMDNla2V5KTtcbjcyNTU6XHRcdGZsb3ctXHUwMDNla2V5ID0gTlVMTDtcbjcyNTY6XHR9XG43MjU3Olx0I2VuZGlmXG43MjU4Olx0XG43MjU5Olx0dm9pZCBfX3NrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcbjcyNjA6XHR7XG43MjYxOlx0XHRzdHJ1Y3Qgc2tiX2V4dCAqZXh0ID0gc2tiLVx1MDAzZWV4dGVuc2lvbnM7XG43MjYyOlx0XG43MjYzOlx0XHRza2ItXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgXHUwMDI2PSB+KDEgXHUwMDNjXHUwMDNjIGlkKTtcbjcyNjQ6XHRcdGlmIChza2ItXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgPT0gMCkge1xuNzI2NTpcdFx0XHRza2ItXHUwMDNlZXh0ZW5zaW9ucyA9IE5VTEw7XG43MjY2Olx0XHRcdF9fc2tiX2V4dF9wdXQoZXh0KTtcbjcyNjc6XHRcdFx0cmV0dXJuO1xuNzI2ODpcdFx0fVxuNzI2OTpcdFxuNzI3MDpcdFx0aWYgKHJlZmNvdW50X3JlYWQoXHUwMDI2ZXh0LVx1MDAzZXJlZmNudCkgXHUwMDNlIDEpXG43MjcxOlx0XHRcdHJldHVybjtcbjcyNzI6XHRcbjcyNzM6XHQjaWZkZWYgQ09ORklHX1hGUk1cbjcyNzQ6XHRcdGlmIChpZCA9PSBTS0JfRVhUX1NFQ19QQVRIKVxuNzI3NTpcdFx0XHRza2JfZXh0X3B1dF9zcChza2JfZXh0X2dldF9wdHIoZXh0LCBTS0JfRVhUX1NFQ19QQVRIKSk7XG43Mjc2Olx0I2VuZGlmXG43Mjc3Olx0I2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXG43Mjc4Olx0XHRpZiAoaWQgPT0gU0tCX0VYVF9NQ1RQKVxuNzI3OTpcdFx0XHRza2JfZXh0X3B1dF9tY3RwKHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfTUNUUCkpO1xuNzI4MDpcdCNlbmRpZlxuNzI4MTpcdH1cbjcyODI6XHRFWFBPUlRfU1lNQk9MKF9fc2tiX2V4dF9kZWwpO1xuNzI4MzpcdFxuNzI4NDpcdHZvaWQgX19za2JfZXh0X3B1dChzdHJ1Y3Qgc2tiX2V4dCAqZXh0KVxuNzI4NTpcdHtcbjcyODY6XHRcdC8qIElmIHRoaXMgaXMgbGFzdCBjbG9uZSwgbm90aGluZyBjYW4gaW5jcmVtZW50XG43Mjg3Olx0XHQgKiBpdCBhZnRlciBjaGVjayBwYXNzZXMuICBBdm9pZHMgb25lIGF0b21pYyBvcC5cbjcyODg6XHRcdCAqL1xuNzI4OTpcdFx0aWYgKHJlZmNvdW50X3JlYWQoXHUwMDI2ZXh0LVx1MDAzZXJlZmNudCkgPT0gMSlcbjcyOTA6XHRcdFx0Z290byBmcmVlX25vdztcbjcyOTE6XHRcbjcyOTI6XHRcdGlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmV4dC1cdTAwM2VyZWZjbnQpKVxuNzI5MzpcdFx0XHRyZXR1cm47XG43Mjk0Olx0ZnJlZV9ub3c6XG43Mjk1Olx0I2lmZGVmIENPTkZJR19YRlJNXG43Mjk2Olx0XHRpZiAoX19za2JfZXh0X2V4aXN0KGV4dCwgU0tCX0VYVF9TRUNfUEFUSCkpXG43Mjk3Olx0XHRcdHNrYl9leHRfcHV0X3NwKHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfU0VDX1BBVEgpKTtcbjcyOTg6XHQjZW5kaWZcbjcyOTk6XHQjaWZkZWYgQ09ORklHX01DVFBfRkxPV1NcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTA4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIElzc3VlcyB3aXRoIGBfX3NrYl9leHRfZGVsYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGBfX3NrYl9leHRfZGVsYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGFsbCB0aGUgY2FsbGVycyBvZiBgX19za2JfZXh0X2RlbGAgYW5kIGBza2JfZXh0X2RlbGAgZGlyZWN0bHkuIFRoYXQmIzM5O3MgdGhlIG1vc3Qgb2J2aW91cyBzdGFydGluZyBwb2ludCB0byBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkIGFuZCwgdGhlcmVmb3JlLCB3aGVyZSBhbnkgaXNzdWVzIG1pZ2h0IG1hbmlmZXN0LgoKQmV5b25kIGEgZGlyZWN0IGNhbGwgYW5hbHlzaXMsIEkgc2hvdWxkIGNvbnNpZGVyIHRoZSBicm9hZGVyIGNvbnRleHQgb2Ygc29tZSByZWxldmFudCBjb25maWd1cmF0aW9ucywgc3BlY2lmaWNhbGx5IGhvdyB0aGlzIG1pZ2h0IGludGVyYWN0IHdpdGggU2VjdXJpdHkgQ29udGV4dHMsIGFuZCBwb3RlbnRpYWxseSB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgTXVsdGljYXN0IERhdGEgQ2hhbm5lbCBvdmVyIFRyYW5zcG9ydCBQcm90b2NvbCwgb3IgTUNUUCBmbG93cywgYW5kIGFsc28gd2l0aCBYRlJNLCBhbmQgU0tCIEV4dGVuc2lvbnMuCgpUbyBzdGFydCwgSSYjMzk7bGwgbmVlZCB0byBydW4gYSBgZ3JlcGAgZm9yIGJvdGggYF9fc2tiX2V4dF9kZWxgIGFuZCBgc2tiX2V4dF9kZWxgIHRocm91Z2hvdXQgdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2ggYW5kIHByZWNpc2UgdG8gaWRlbnRpZnkgYWxsIGluc3RhbmNlcy4gVGhpcyB3aWxsIGhvcGVmdWxseSBwcm92aWRlIGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGl0cyB1c2FnZSBhbmQgYXNzaXN0IGluIHBpbnBvaW50aW5nIHRoZSBjcml0aWNhbCBhcmVhcyB0byBmb2N1cyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfZXh0X2RlbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTUwODM9dm9pZCAqc2tiX2V4dF9hZGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA4NDp2b2lkIF9fc2tiX2V4dF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA4NS12b2lkIF9fc2tiX2V4dF9wdXQoc3RydWN0IHNrYl9leHQgKmV4dCk7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MTE3PXN0YXRpYyBpbmxpbmUgYm9vbCBza2JfZXh0X2V4aXN0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMjEtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxMjI6c3RhdGljIGlubGluZSB2b2lkIHNrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEyMy17XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMjQtXHRpZiAoc2tiX2V4dF9leGlzdChza2IsIGlkKSlcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTEyNTpcdFx0X19za2JfZXh0X2RlbChza2IsIGlkKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEyNi19XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MTU0PXN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X3Jlc2V0KHN0cnVjdCBza19idWZmICpza2IpIHt9XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxNTU6c3RhdGljIGlubGluZSB2b2lkIHNrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGludCB1bnVzZWQpIHt9XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxNTYtc3RhdGljIGlubGluZSB2b2lkIF9fc2tiX2V4dF9jb3B5KHN0cnVjdCBza19idWZmICpkLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqcykge31cbi0tXG5pbmNsdWRlL25ldC94ZnJtLmg9MTE5Nz1zZWNwYXRoX3Jlc2V0KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9uZXQveGZybS5oLTExOTktI2lmZGVmIENPTkZJR19YRlJNXG5pbmNsdWRlL25ldC94ZnJtLmg6MTIwMDpcdHNrYl9leHRfZGVsKHNrYiwgU0tCX0VYVF9TRUNfUEFUSCk7XG5pbmNsdWRlL25ldC94ZnJtLmgtMTIwMS0jZW5kaWZcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTE1NT1zdGF0aWMgdm9pZCBuZl9icmlkZ2VfaW5mb19mcmVlKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE1Ni17XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjE1NzpcdHNrYl9leHRfZGVsKHNrYiwgU0tCX0VYVF9CUklER0VfTkYpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xNTgtfVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTcyNDk9c3RhdGljIHZvaWQgc2tiX2V4dF9wdXRfbWN0cChzdHJ1Y3QgbWN0cF9mbG93ICpmbG93KVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTcyNTgtXG5uZXQvY29yZS9za2J1ZmYuYzo3MjU5OnZvaWQgX19za2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpXG5uZXQvY29yZS9za2J1ZmYuYy03MjYwLXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MjgxLX1cbm5ldC9jb3JlL3NrYnVmZi5jOjcyODI6RVhQT1JUX1NZTUJPTChfX3NrYl9leHRfZGVsKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTcyODMtXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xMTEzPXN0YXRpYyBlbnVtIG1hcHBpbmdfc3RhdHVzIGdldF9tYXBwaW5nX3N0YXR1cyhzdHJ1Y3Qgc29jayAqc3NrLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTE3NC1cdFx0XHRcdCAqL1xubmV0L21wdGNwL3N1YmZsb3cuYzoxMTc1Olx0XHRcdFx0c2tiX2V4dF9kZWwoc2tiLCBTS0JfRVhUX01QVENQKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTE3Ni1cdFx0XHRcdHJldHVybiBNQVBQSU5HX09LO1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTIwOS1cdFx0ICAgIHN1YmZsb3ctXHUwMDNlbWFwX2NzdW1fcmVxZCA9PSBtcGV4dC1cdTAwM2Vjc3VtX3JlcWQpIHtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTIxMDpcdFx0XHRza2JfZXh0X2RlbChza2IsIFNLQl9FWFRfTVBUQ1ApO1xubmV0L21wdGNwL3N1YmZsb3cuYy0xMjExLVx0XHRcdGdvdG8gdmFsaWRhdGVfY3N1bTtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEyNTMtXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjEyNTQ6XHRza2JfZXh0X2RlbChza2IsIFNLQl9FWFRfTVBUQ1ApO1xubmV0L21wdGNwL3N1YmZsb3cuYy0xMjU1LVxuLS1cbm5ldC9zY2hlZC9jbHNfYXBpLmM9MTgyMD1pbnQgdGNmX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYy0xODY3LVx0XHRcdC8qIENvbnN1bWUsIHNvIGNsb25lZC9yZWRpcmVjdCBza2JzIHdvbiYjMzk7dCBpbmhlcml0IGV4dCAqL1xubmV0L3NjaGVkL2Nsc19hcGkuYzoxODY4Olx0XHRcdHNrYl9leHRfZGVsKHNrYiwgVENfU0tCX0VYVCk7XG5uZXQvc2NoZWQvY2xzX2FwaS5jLTE4NjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY3MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNLQiBFeHRlbnNpb24gRGVsZXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IG1vZGlmaWVzIGhvdyB3ZSBoYW5kbGUgU0tCIChTb2NrZXQgQnVmZmVyKSBleHRlbnNpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgX19za2JfZXh0X2RlbGAgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCBjb2RlIGhhcyBhIGNvdXBsZSBvZiBjb25kaXRpb25hbCBibG9ja3MsIG9uZSBkZWFsaW5nIHdpdGggYFNLQl9FWFRfU0VDX1BBVEhgIChzZWN1cml0eSBwYXRoIGV4dGVuc2lvbnMpLCBhbmQgaXQgbG9va3MgbGlrZSBhIHNpbWlsYXIgY29uZGl0aW9uYWwgaXMgYmVpbmcgYWRkZWQgZm9yIGBNQ1RQYCBmbG93cy4KClRoZSBjb3JlIGNoYW5nZSBpbiBgX19za2JfZXh0X2RlbGAgc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB3ZSBkZWNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBhbmQgd2hlbiB3ZSBhY3R1YWxseSByZWxlYXNlIHRoZSBleHRlbnNpb24gZGF0YS4gQmVmb3JlLCBpZiBgc2tiLSZndDthY3RpdmVfZXh0ZW5zaW9uc2AgYmVjYW1lIHplcm8sIGluZGljYXRpbmcgdGhlIGxhc3QgZXh0ZW5zaW9uIHdhcyBiZWluZyByZW1vdmVkLCB3ZSYjMzk7ZCBpbW1lZGlhdGVseSBjbGVhbiB1cCB0aGUgZXh0ZW5zaW9uIGFuZCwgc3BlY2lmaWNhbGx5IGZvciBgU0tCX0VYVF9TRUNfUEFUSGAsIHJlc2V0IHRoZSBgc3AtJmd0O2xlbmAgaWYgdGhlIHJlZmNvdW50IHdhcyBvbmUuIE5vdywgdGhlcmUgYXJlIGFkZGl0aW9uYWwgY2hlY2tzIHRvIGJhaWwgb3V0IGlmIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGV4dGVuc2lvbiBibG9jayBpcyBncmVhdGVyIHRoYW4gb25lLiBUaGUgY29uZGl0aW9uYWwgYmxvY2sgZm9yIGBTS0JfRVhUX1NFQ19QQVRIYCBoYXMgYmVlbiBtb2RpZmllZCwgYW5kIGEgc2ltaWxhciBibG9jayBoYXMgYmVlbiBhZGRlZCBmb3IgYE1DVFBfRkxPV1NgLCB3aGVyZSB3ZSBhcmUgbm93IGhhbmRsaW5nIHRoZSB1bnJlZiBhbmQgTlVMTGluZyBvZiBgZmxvdy0mZ3Q7a2V5YC4KClRoZSBtb3N0IHNpZ25pZmljYW50IGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgaW50cm9kdWN0aW9uIG9mIGFuIGVhcmx5IHJldHVybiBpZiB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIGdyZWF0ZXIgdGhhbiBvbmUuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9yIGJ1ZyBmaXguIFBlcmhhcHMgd2Ugd2VyZSBwcmVtYXR1cmVseSByZWxlYXNpbmcgZGF0YSB0aGF0IHdhcyBzdGlsbCBpbiB1c2UsIGxlYWRpbmcgdG8gc29tZSBraW5kIG9mIGNvcnJ1cHRpb24gb3IgZG91YmxlLWZyZWUgc2l0dWF0aW9uLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gd2hlbiB3b3JraW5nIHdpdGggcmVmZXJlbmNlLWNvdW50ZWQgbWVtb3J5IG1hbmFnZW1lbnQuCgpJJiMzOTttIGFsc28gc2VlaW5nIHNvbWUgYWRkaXRpb25hbCBtb2RpZmljYXRpb25zIGluIGBza2JfZXh0X3B1dF9zcGAgYW5kIGBza2JfZXh0X3B1dF9tY3RwYCwgd2hpY2ggYXJlIHRoZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IHJlbGVhc2luZyB0aGUgc2VjdXJpdHkgcGF0aCBhbmQgTUNUUCBmbG93IGRhdGEsIHJlc3BlY3RpdmVseS4gSW4gdGhlIGBza2JfZXh0X3B1dF9zcGAgZnVuY3Rpb24gdGhlcmUgaXMgbm93IGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgdGhlIHNlY3VyaXR5IHBhdGggaXMgdmFsaWQgYmVmb3JlIHByb2NlZWRpbmcgd2l0aCBpdCYjMzk7cyBkZWxldGlvbi4gVGhlIGltcG9ydGFudCBjaGFuZ2UgaW4gYHNrYl9leHRfcHV0X21jdHBgIGhhbmRsZXMgdGhlIHVucmVmZXJlbmNpbmcgYW5kIG51bGxpbmcgb2YgdGhlIGBmbG93LSZndDtrZXlgLCBhbmQgZ2l2ZW4gdGhhdCB0aGlzIHNlY3Rpb24gb2YgY29kZSBpcyBuZXcsIGl0IGlzIGxpa2VseSBsaW5rZWQgdG8gdGhlIGFkZGl0aW9uIG9mIGBNQ1RQX0ZMT1dTYCBpbnRvIHRoZSBgX19za2JfZXh0X2RlbGAgZnVuY3Rpb24uCgpJIHNob3VsZCBwcm9iYWJseSBhbHNvIHRha2UgYSBxdWljayBsb29rIGF0IGBfX3NrYl9leHRfcHV0YCB0byBlbnN1cmUgdGhhdCB0aGlzIHBhdGNoIGlzIGNvbnNpc3RlbnQgd2l0aCBob3cgdGhlIFNLQiBleHRlbnNpb25zIGFyZSBiZWluZyBtYW5hZ2VkIGFjcm9zcyB0aGUgYm9hcmQuIE92ZXJhbGwsIHRoaXMgbG9va3MgbGlrZSBhIGNhcmVmdWwgcmVmaW5lbWVudCBvZiB0aGUgU0tCIGV4dGVuc2lvbiBtYW5hZ2VtZW50LCBsaWtlbHkgYWltaW5nIGZvciBpbmNyZWFzZWQgcm9idXN0bmVzcyBhbmQgcG90ZW50aWFsbHkgYWRkcmVzc2luZyBhIHN1YnRsZSBjb25jdXJyZW5jeSBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3MjkwOlx0XHRcdGdvdG8gZnJlZV9ub3c7XG43MjkxOlx0XG43MjkyOlx0XHRpZiAoIXJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZleHQtXHUwMDNlcmVmY250KSlcbjcyOTM6XHRcdFx0cmV0dXJuO1xuNzI5NDpcdGZyZWVfbm93OlxuNzI5NTpcdCNpZmRlZiBDT05GSUdfWEZSTVxuNzI5NjpcdFx0aWYgKF9fc2tiX2V4dF9leGlzdChleHQsIFNLQl9FWFRfU0VDX1BBVEgpKVxuNzI5NzpcdFx0XHRza2JfZXh0X3B1dF9zcChza2JfZXh0X2dldF9wdHIoZXh0LCBTS0JfRVhUX1NFQ19QQVRIKSk7XG43Mjk4Olx0I2VuZGlmXG43Mjk5Olx0I2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXG43MzAwOlx0XHRpZiAoX19za2JfZXh0X2V4aXN0KGV4dCwgU0tCX0VYVF9NQ1RQKSlcbjczMDE6XHRcdFx0c2tiX2V4dF9wdXRfbWN0cChza2JfZXh0X2dldF9wdHIoZXh0LCBTS0JfRVhUX01DVFApKTtcbjczMDI6XHQjZW5kaWZcbjczMDM6XHRcbjczMDQ6XHRcdGttZW1fY2FjaGVfZnJlZShza2J1ZmZfZXh0X2NhY2hlLCBleHQpO1xuNzMwNTpcdH1cbjczMDY6XHRFWFBPUlRfU1lNQk9MKF9fc2tiX2V4dF9wdXQpO1xuNzMwNzpcdCNlbmRpZiAvKiBDT05GSUdfU0tCX0VYVEVOU0lPTlMgKi9cbjczMDg6XHRcbjczMDk6XHRzdGF0aWMgdm9pZCBrZnJlZV9za2JfbmFwaV9jYWNoZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuNzMxMDpcdHtcbjczMTE6XHRcdC8qIGlmIFNLQiBpcyBhIGNsb25lLCBkb24mIzM5O3QgaGFuZGxlIHRoaXMgY2FzZSAqL1xuNzMxMjpcdFx0aWYgKHNrYi1cdTAwM2VmY2xvbmUgIT0gU0tCX0ZDTE9ORV9VTkFWQUlMQUJMRSkge1xuNzMxMzpcdFx0XHRfX2tmcmVlX3NrYihza2IpO1xuNzMxNDpcdFx0XHRyZXR1cm47XG43MzE1Olx0XHR9XG43MzE2Olx0XG43MzE3Olx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG43MzE4Olx0XHRfX25hcGlfa2ZyZWVfc2tiKHNrYiwgU0tCX0NPTlNVTUVEKTtcbjczMTk6XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNDYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyB0aGUgS2NvbmZpZyBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlIHJlbGF0ZWQgdG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgcXVpY2sgc2Nhbi4gT2theSwgbG9va3MgbGlrZSB3ZSBoYXZlIGBDT05GSUdfU0tCX0VYVEVOU0lPTlNgLCBgQ09ORklHX1hGUk1gLCBgQ09ORklHX01DVFBfRkxPV1NgLCBhbmQgYENPTkZJR19NQ1RQYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBrZXkgcGxheWVycy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zICphY3R1YWxseSogZG8sIHNvIEkgc2hvdWxkIGRpdmUgaW50byB0aGUgS2NvbmZpZyBkZWZpbml0aW9ucyBmb3IgYFNLQl9FWFRFTlNJT05TYCwgYE1DVFBfRkxPV1NgLCBhbmQgYFhGUk1gIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlaXIgcHVycG9zZS4gVGhpcyYjMzk7bGwgaGVscCBtZSBmaWd1cmUgb3V0IGhvdyB0aGV5IGludGVyYWN0IGFuZCB0aGUgaW1wYWN0IG9mIGVhY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAoU0tCX0VYVEVOU0lPTlN8TUNUUF9GTE9XU3xNQ1RQfFhGUk0pJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZz00PW1lbnUgXCYjMzQ7TUNUUCBEZXZpY2UgRHJpdmVyc1wmIzM0O1xuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6Njpjb25maWcgTUNUUF9TRVJJQUxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7TUNUUCBzZXJpYWwgdHJhbnNwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTIzLVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjI0OmNvbmZpZyBNQ1RQX1NFUklBTF9URVNUXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctMjUtICAgICAgICBib29sIFwmIzM0O01DVFAgc2VyaWFsIHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctMjgtXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6Mjk6Y29uZmlnIE1DVFBfVFJBTlNQT1JUX0kyQ1xuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTMwLVx0dHJpc3RhdGUgXCYjMzQ7TUNUUCBTTUJ1cy9JMkMgdHJhbnNwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTQwLVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjQxOmNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JM0NcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy00Mi1cdHRyaXN0YXRlIFwmIzM0O01DVFAgSTNDIHRyYW5zcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy00OS1cbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzo1MDpjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCTElCXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNTEtXHR0cmlzdGF0ZSBcJiMzNDtNQ1RQIG92ZXIgVVNCIGNvbW1vbiBsaWJyYXJ5XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTU5LVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjYwOmNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTYxLSAgICAgICAgYm9vbCBcJiMzNDtNQ1RQIHVzYmxpYiB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTY0LVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjY1OmNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy02Ni1cdHRyaXN0YXRlIFwmIzM0O01DVFAgVVNCIHRyYW5zcG9ydFwmIzM0O1xuLS1cbm5ldC9LY29uZmlnPTYzPWNvbmZpZyBTS0JfREVDUllQVEVEXG4tLVxubmV0L0tjb25maWctNjUtXG5uZXQvS2NvbmZpZzo2Njpjb25maWcgU0tCX0VYVEVOU0lPTlNcbm5ldC9LY29uZmlnLTY3LVx0Ym9vbFxuLS1cbm5ldC9tY3RwL0tjb25maWctMS1cbm5ldC9tY3RwL0tjb25maWc6MjptZW51Y29uZmlnIE1DVFBcbm5ldC9tY3RwL0tjb25maWctMy1cdGRlcGVuZHMgb24gTkVUXG4tLVxubmV0L21jdHAvS2NvbmZpZy0xNC1cbm5ldC9tY3RwL0tjb25maWc6MTU6Y29uZmlnIE1DVFBfVEVTVFxubmV0L21jdHAvS2NvbmZpZy0xNi0gICAgICAgIGJvb2wgXCYjMzQ7TUNUUCBjb3JlIHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5uZXQvbWN0cC9LY29uZmlnLTIwLVxubmV0L21jdHAvS2NvbmZpZzoyMTpjb25maWcgTUNUUF9GTE9XU1xubmV0L21jdHAvS2NvbmZpZy0yMi1cdGJvb2xcbi0tXG5uZXQveGZybS9LY29uZmlnLTQtI1xubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXG5uZXQveGZybS9LY29uZmlnLTYtXHRib29sXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xMC1cbm5ldC94ZnJtL0tjb25maWc6MTE6Y29uZmlnIFhGUk1fT0ZGTE9BRFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cdGJvb2xcbm5ldC94ZnJtL0tjb25maWctMTMtXG5uZXQveGZybS9LY29uZmlnOjE0OmNvbmZpZyBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctMTUtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXG5uZXQveGZybS9LY29uZmlnLTI0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctMzEtXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXG5uZXQveGZybS9LY29uZmlnLTMzLVx0dHJpc3RhdGUgXCYjMzQ7Q29tcGF0aWJsZSBBQkkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNDItXG5uZXQveGZybS9LY29uZmlnOjQzOmNvbmZpZyBYRlJNX0lOVEVSRkFDRVxubmV0L3hmcm0vS2NvbmZpZy00NC1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHZpcnR1YWwgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy01MC1cbm5ldC94ZnJtL0tjb25maWc6NTE6Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxubmV0L3hmcm0vS2NvbmZpZy01Mi1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gc3ViIHBvbGljeSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy02MC1cbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxubmV0L3hmcm0vS2NvbmZpZy02Mi1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNzEtXG5uZXQveGZybS9LY29uZmlnOjcyOmNvbmZpZyBYRlJNX1NUQVRJU1RJQ1Ncbm5ldC94ZnJtL0tjb25maWctNzMtXHRib29sIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHN0YXRpc3RpY3NcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTgzLSMgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cbm5ldC94ZnJtL0tjb25maWc6ODQ6Y29uZmlnIFhGUk1fQUhcbm5ldC94ZnJtL0tjb25maWctODUtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWctOTItIyBhbGdvcml0aG1zIHRoYXQgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cbm5ldC94ZnJtL0tjb25maWc6OTM6Y29uZmlnIFhGUk1fRVNQXG5uZXQveGZybS9LY29uZmlnLTk0LVx0dHJpc3RhdGVcbi0tXG5uZXQveGZybS9LY29uZmlnLTEwNS1cbm5ldC94ZnJtL0tjb25maWc6MTA2OmNvbmZpZyBYRlJNX0lQQ09NUFxubmV0L3hmcm0vS2NvbmZpZy0xMDctXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWc9MTI1PWNvbmZpZyBORVRfS0VZX01JR1JBVEVcbi0tXG5uZXQveGZybS9LY29uZmlnLTE0MC1cbm5ldC94ZnJtL0tjb25maWc6MTQxOmNvbmZpZyBYRlJNX0lQVEZTXG5uZXQveGZybS9LY29uZmlnLTE0Mi1cdHRyaXN0YXRlIFwmIzM0O0lQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXG5uZXQveGZybS9LY29uZmlnOjE1Nzpjb25maWcgWEZSTV9FU1BJTlRDUFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNDQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyBEZXBlbmRlbmNpZXMgYW5kIEludGVyc2VjdGlvbnMqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbnRlcmFjdGlvbnMgb2YgYSBmZXcga2V5IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHNlZSB3aGljaCBvdGhlciBvcHRpb25zIGFyZSBhY3RpdmF0ZWQgb3IgcmVxdWlyZWQgd2hlbiBgQ09ORklHX01DVFBfRkxPV1NgLCBgQ09ORklHX1NLQl9FWFRFTlNJT05TYCwgYW5kIGBDT05GSUdfWEZSTWAgYXJlIGVuYWJsZWQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHJpcHBsZSBlZmZlY3RzIOKAkyB3aGljaCBmZWF0dXJlcyBhcmUgcHVsbGVkIGluLCB3aGljaCBhc3N1bXB0aW9ucyBhcmUgbWFkZSwgYW5kIHVsdGltYXRlbHksIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyIGFyY2hpdGVjdHVyYWxseS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBvcHRpbWl6aW5nIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgdHJvdWJsZXNob290aW5nIGNvbmZsaWN0cywgYW5kIGdhaW5pbmcgYSBjb21wcmVoZW5zaXZlIGdyYXNwIG9mIHRoZSBzeXN0ZW0mIzM5O3MgZGVzaWduLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIGludGVyZXN0aW5nIGNvbm5lY3Rpb25zLCBlc3BlY2lhbGx5IGFyb3VuZCBuZXR3b3JrIGluZnJhc3RydWN0dXJlLCBidXQgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMgdG8ga25vdyB3aGF0IGlzIGVuYWJsZWQvZGlzYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCAoU0tCX0VYVEVOU0lPTlN8TUNUUF9GTE9XU3xYRlJNKSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTE5ND1jb25maWcgSVhHQkVfSVBTRUNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTE5OC1cdGRlZmF1bHQgeVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoxOTk6XHRzZWxlY3QgWEZSTV9BTEdPXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIwMC1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTIyMD1jb25maWcgSVhHQkVWRl9JUFNFQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjI0LVx0ZGVmYXVsdCB5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjIyNTpcdHNlbGVjdCBYRlJNX0FMR09cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjI2LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZz0yOT1jb25maWcgTUNUUF9UUkFOU1BPUlRfSTJDXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTM0LVx0ZGVwZW5kcyBvbiBJMkNfU0xBVkVcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzozNTpcdHNlbGVjdCBNQ1RQX0ZMT1dTXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctMzYtXHRoZWxwXG4tLVxubmV0L0tjb25maWc9MjMxPWNvbmZpZyBCUklER0VfTkVURklMVEVSXG4tLVxubmV0L0tjb25maWctMjM2LVx0c2VsZWN0IE5FVEZJTFRFUl9GQU1JTFlfQlJJREdFXG5uZXQvS2NvbmZpZzoyMzc6XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbm5ldC9LY29uZmlnLTIzOC1cdGhlbHBcbi0tXG5uZXQvY2FuL0tjb25maWc9Nj1tZW51Y29uZmlnIENBTlxubmV0L2Nhbi9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtDQU4gYnVzIHN1YnN5c3RlbSBzdXBwb3J0XCYjMzQ7XG5uZXQvY2FuL0tjb25maWc6ODpcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xubmV0L2Nhbi9LY29uZmlnLTktXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zMDQ9Y29uZmlnIE5FVF9JUFZUSVxuLS1cbm5ldC9pcHY0L0tjb25maWctMzA3LVx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcbm5ldC9pcHY0L0tjb25maWc6MzA4Olx0c2VsZWN0IFhGUk1cbm5ldC9pcHY0L0tjb25maWctMzA5LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzM5PWNvbmZpZyBJTkVUX0FIXG5uZXQvaXB2NC9LY29uZmlnLTM0MC1cdHRyaXN0YXRlIFwmIzM0O0lQOiBBSCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xubmV0L2lwdjQvS2NvbmZpZzozNDE6XHRzZWxlY3QgWEZSTV9BSFxubmV0L2lwdjQvS2NvbmZpZy0zNDItXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zNTQ9Y29uZmlnIElORVRfRVNQXG5uZXQvaXB2NC9LY29uZmlnLTM1NS1cdHRyaXN0YXRlIFwmIzM0O0lQOiBFU1AgdHJhbnNmb3JtYXRpb25cJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MzU2Olx0c2VsZWN0IFhGUk1fRVNQXG5uZXQvaXB2NC9LY29uZmlnLTM1Ny1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTM2OT1jb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzcxLVx0ZGVwZW5kcyBvbiBJTkVUX0VTUFxubmV0L2lwdjQvS2NvbmZpZzozNzI6XHRzZWxlY3QgWEZSTV9PRkZMT0FEXG5uZXQvaXB2NC9LY29uZmlnLTM3My1cdGRlZmF1bHQgblxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzgyPWNvbmZpZyBJTkVUX0VTUElOVENQXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zODYtXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2NC9LY29uZmlnOjM4NzpcdHNlbGVjdCBYRlJNX0VTUElOVENQXG5uZXQvaXB2NC9LY29uZmlnLTM4OC1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTM5ND1jb25maWcgSU5FVF9JUENPTVBcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM5Ni1cdHNlbGVjdCBJTkVUX1hGUk1fVFVOTkVMXG5uZXQvaXB2NC9LY29uZmlnOjM5NzpcdHNlbGVjdCBYRlJNX0lQQ09NUFxubmV0L2lwdjQvS2NvbmZpZy0zOTgtXHRoZWxwXG4tLVxubmV0L2lwdjYvS2NvbmZpZz00Nz1jb25maWcgSU5FVDZfQUhcbm5ldC9pcHY2L0tjb25maWctNDgtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBBSCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xubmV0L2lwdjYvS2NvbmZpZzo0OTpcdHNlbGVjdCBYRlJNX0FIXG5uZXQvaXB2Ni9LY29uZmlnLTUwLVx0aGVscFxuLS1cbm5ldC9pcHY2L0tjb25maWc9NjI9Y29uZmlnIElORVQ2X0VTUFxubmV0L2lwdjYvS2NvbmZpZy02My1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IEVTUCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xubmV0L2lwdjYvS2NvbmZpZzo2NDpcdHNlbGVjdCBYRlJNX0VTUFxubmV0L2lwdjYvS2NvbmZpZy02NS1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTc3PWNvbmZpZyBJTkVUNl9FU1BfT0ZGTE9BRFxuLS1cbm5ldC9pcHY2L0tjb25maWctNzktXHRkZXBlbmRzIG9uIElORVQ2X0VTUFxubmV0L2lwdjYvS2NvbmZpZzo4MDpcdHNlbGVjdCBYRlJNX09GRkxPQURcbm5ldC9pcHY2L0tjb25maWctODEtXHRkZWZhdWx0IG5cbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTkwPWNvbmZpZyBJTkVUNl9FU1BJTlRDUFxuLS1cbm5ldC9pcHY2L0tjb25maWctOTQtXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2Ni9LY29uZmlnOjk1Olx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbm5ldC9pcHY2L0tjb25maWctOTYtXHRoZWxwXG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xMDI9Y29uZmlnIElORVQ2X0lQQ09NUFxuLS1cbm5ldC9pcHY2L0tjb25maWctMTA0LVx0c2VsZWN0IElORVQ2X1hGUk1fVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnOjEwNTpcdHNlbGVjdCBYRlJNX0lQQ09NUFxubmV0L2lwdjYvS2NvbmZpZy0xMDYtXHRoZWxwXG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xMTI9Y29uZmlnIElQVjZfTUlQNlxubmV0L2lwdjYvS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBNb2JpbGl0eVwmIzM0O1xubmV0L2lwdjYvS2NvbmZpZzoxMTQ6XHRzZWxlY3QgWEZSTVxubmV0L2lwdjYvS2NvbmZpZy0xMTUtXHRoZWxwXG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xNTA9Y29uZmlnIElQVjZfVlRJXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNTMtXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZzoxNTQ6XHRzZWxlY3QgWEZSTVxubmV0L2lwdjYvS2NvbmZpZy0xNTUtXHRoZWxwXG4tLVxubmV0L21jdHAvS2NvbmZpZz0xNT1jb25maWcgTUNUUF9URVNUXG5uZXQvbWN0cC9LY29uZmlnLTE2LSAgICAgICAgYm9vbCBcJiMzNDtNQ1RQIGNvcmUgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubmV0L21jdHAvS2NvbmZpZzoxNzogICAgICAgIHNlbGVjdCBNQ1RQX0ZMT1dTXG5uZXQvbWN0cC9LY29uZmlnLTE4LSAgICAgICAgZGVwZW5kcyBvbiBNQ1RQPXkgXHUwMDI2XHUwMDI2IEtVTklUPXlcbi0tXG5uZXQvbWN0cC9LY29uZmlnPTIxPWNvbmZpZyBNQ1RQX0ZMT1dTXG4tLVxubmV0L21jdHAvS2NvbmZpZy0yMy1cdGRlcGVuZHMgb24gTUNUUFxubmV0L21jdHAvS2NvbmZpZzoyNDpcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnPTI9Y29uZmlnIE1QVENQXG4tLVxubmV0L21wdGNwL0tjb25maWctNC1cdGRlcGVuZHMgb24gSU5FVFxubmV0L21wdGNwL0tjb25maWc6NTpcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xubmV0L21wdGNwL0tjb25maWctNi1cdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuLS1cbm5ldC9wc3AvS2NvbmZpZz01PWNvbmZpZyBJTkVUX1BTUFxuLS1cbm5ldC9wc3AvS2NvbmZpZy04LVx0c2VsZWN0IFNLQl9ERUNSWVBURURcbm5ldC9wc3AvS2NvbmZpZzo5Olx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG5uZXQvcHNwL0tjb25maWctMTAtXHRzZWxlY3QgU09DS19WQUxJREFURV9YTUlUXG4tLVxubmV0L3NjaGVkL0tjb25maWc9OTU0PWNvbmZpZyBORVRfVENfU0tCX0VYVFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTk1Ni1cdGRlcGVuZHMgb24gTkVUX0NMU19BQ1Rcbm5ldC9zY2hlZC9LY29uZmlnOjk1NzpcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xubmV0L3NjaGVkL0tjb25maWctOTU4LVxuLS1cbm5ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxuLS1cbm5ldC94ZnJtL0tjb25maWctOC1cdHNlbGVjdCBHUk9fQ0VMTFNcbm5ldC94ZnJtL0tjb25maWc6OTpcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xubmV0L3hmcm0vS2NvbmZpZy0xMC1cbi0tXG5uZXQveGZybS9LY29uZmlnPTE0PWNvbmZpZyBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctMTUtXHR0cmlzdGF0ZVxubmV0L3hmcm0vS2NvbmZpZzoxNjpcdHNlbGVjdCBYRlJNXG5uZXQveGZybS9LY29uZmlnLTE3LVx0c2VsZWN0IENSWVBUT1xuLS1cbm5ldC94ZnJtL0tjb25maWc9MjM9Y29uZmlnIFhGUk1fVVNFUlxubmV0L3hmcm0vS2NvbmZpZy0yNC1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcJiMzNDtcbm5ldC94ZnJtL0tjb25maWc6MjU6XHRzZWxlY3QgWEZSTV9BTEdPXG5uZXQveGZybS9LY29uZmlnLTI2LVx0aGVscFxuLS1cbm5ldC94ZnJtL0tjb25maWc9ODQ9Y29uZmlnIFhGUk1fQUhcbm5ldC94ZnJtL0tjb25maWctODUtXHR0cmlzdGF0ZVxubmV0L3hmcm0vS2NvbmZpZzo4NjpcdHNlbGVjdCBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctODctXHRzZWxlY3QgQ1JZUFRPXG4tLVxubmV0L3hmcm0vS2NvbmZpZz05Mz1jb25maWcgWEZSTV9FU1Bcbm5ldC94ZnJtL0tjb25maWctOTQtXHR0cmlzdGF0ZVxubmV0L3hmcm0vS2NvbmZpZzo5NTpcdHNlbGVjdCBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctOTYtXHRzZWxlY3QgQ1JZUFRPXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0xMDY9Y29uZmlnIFhGUk1fSVBDT01QXG5uZXQveGZybS9LY29uZmlnLTEwNy1cdHRyaXN0YXRlXG5uZXQveGZybS9LY29uZmlnOjEwODpcdHNlbGVjdCBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctMTA5LVx0c2VsZWN0IENSWVBUT1xuLS1cbm5ldC94ZnJtL0tjb25maWc9MTEyPWNvbmZpZyBORVRfS0VZXG5uZXQveGZybS9LY29uZmlnLTExMy1cdHRyaXN0YXRlIFwmIzM0O1BGX0tFWSBzb2NrZXRzIChkZXByZWNhdGVkKVwmIzM0O1xubmV0L3hmcm0vS2NvbmZpZzoxMTQ6XHRzZWxlY3QgWEZSTV9BTEdPXG5uZXQveGZybS9LY29uZmlnLTExNS1cdGhlbHBcbi0tXG5uZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xMjctXHRkZXBlbmRzIG9uIE5FVF9LRVlcbm5ldC94ZnJtL0tjb25maWc6MTI4Olx0c2VsZWN0IFhGUk1fTUlHUkFURVxubmV0L3hmcm0vS2NvbmZpZy0xMjktXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzIxCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBOZXR3b3JraW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgZml4IGFuZCB0aGUgdW5kZXJseWluZyBtZWNoYW5pY3MuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgYF9fc2tiX2V4dF9kZWxgIGFuZCBhIGNvdXBsZSBvZiBoZWxwZXIgZnVuY3Rpb25zLCBgc2tiX2V4dF9wdXRfc3BgIGFuZCBgc2tiX2V4dF9wdXRfbWN0cGAuIEVzc2VudGlhbGx5LCBpdCBjb25jZXJucyB0aGUgZGVsZXRpb24gb2YgZXh0ZW5zaW9ucyBmcm9tIGEgc29ja2V0IGJ1ZmZlciAoc2tiKS4gVGhlIGNvcmUgbG9naWMgaW4gYF9fc2tiX2V4dF9kZWxgIGlzIHdoYXQgaW50ZXJlc3RzIG1lOiB3aGVuIGFuIGV4dGVuc2lvbiBpcyByZW1vdmVkLCBpdCBjaGVja3MgaWYgYGFjdGl2ZV9leHRlbnNpb25zYCBoaXRzIHplcm8uIElmIGl0IGRvZXMsIGBfX3NrYl9leHRfcHV0KGV4dClgIGlzIGNhbGxlZCwgd2hpY2ggaGFuZGxlcyByZXNvdXJjZSByZWxlYXNlLiBJZiBgYWN0aXZlX2V4dGVuc2lvbnNgIGlzIG5vbi16ZXJvLCBidXQgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBkb3duIHRvIDEgKG1lYW5pbmcgdGhlIGN1cnJlbnQgc2tiIGhhcyBleGNsdXNpdmUgYWNjZXNzKSwgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlbW92ZWQgZXh0ZW5zaW9uIGFyZSBleHBsaWNpdGx5IGZyZWVkLgoKTm93LCBoZXJlJiMzOTtzIHRoZSBraWNrZXI6IEFwcGFyZW50bHksIHRoZSBNQ1RQIGV4dGVuc2lvbiAoYFNLQl9FWFRfTUNUUGApIHdhc24mIzM5O3QgaGFuZGxlZCBpbiBgX19za2JfZXh0X2RlbGAgcHJldmlvdXNseS4gVGhhdCBtZWFucyByZW1vdmluZyBpdCBpbiBjZXJ0YWluIHNjZW5hcmlvcyB3b3VsZCBsZWFkIHRvIGEgbWVtb3J5IGxlYWsgYmVjYXVzZSBgZmxvdy0mZ3Q7a2V5YCB3YXNuJiMzOTt0IGJlaW5nIHVucmVmZXJlbmNlZC4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIG92ZXJzaWdodCEgVGhpcyBwYXRjaCBjb3JyZWN0cyB0aGF0LiBJdCB1bnJlZnMgdGhlIGZsb3cga2V5IHdoZW4gZGVsZXRpbmcgYW4gTUNUUCBleHRlbnNpb24uCgpJJiMzOTttIGFsc28gc2VlaW5nIHNvbWUgbWlub3IgdHdlYWtzIHRvIGBza2JfZXh0X3B1dF9zcGAsIGVhcmx5IHJldHVybnMgd2hlbiBgc3AtJmd0O2xlbiA9PSAwYCBhbmQgc2V0dGluZyBsZW4gdG8gemVybyBpbnRlcm5hbGx5LiBBbHNvLCB3aXRoaW4gYHNrYl9leHRfcHV0X21jdHBgLCBgZmxvdy0mZ3Q7a2V5YCBpcyB1bnJlZmVyZW5jZWQgYW5kIHNldCB0byBgTlVMTGAuCgpBbHJpZ2h0LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGV2YWx1YXRlIGl0cyBmdXp6YWJpbGl0eS4gRG9lcyB0aGlzIGNoYW5nZSBhZmZlY3Qgc2lnbmlmaWNhbnQgY29yZSBrZXJuZWwgbG9naWM/IFllcywgaXQgZG9lcy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYG5ldC9jb3JlL3NrYnVmZi5jYCwgcGFydGljdWxhcmx5IGBfX3NrYl9leHRfZGVsYCwgd2hpY2ggaXMgaW50ZWdyYWwgdG8gc2tiIGV4dGVuc2lvbiBtYW5hZ2VtZW50IGFuZCwgaW1wb3J0YW50bHksIHRvdWNoZXMgWEZSTS9JUHNlYyBhbmQgTUNUUCBzdWJzeXN0ZW1zLiBBbmQgeWVzLCB0aGlzIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIGluIFFFTVUgYW5kIEdDRSwgbWFraW5nIGl0IHN1aXRhYmxlIGZvciBmdXp6aW5nIHZpYSBzdGFuZGFyZCBuZXR3b3JraW5nLCBJUHNlYywgYW5kIE1DVFAuIEl0JiMzOTtzIG5vdCBqdXN0IGNvbW1lbnRzIG9yIHRyaXZpYWwgY2hhbmdlcywgaXQgaW52b2x2ZXMgZnVuY3Rpb25hbCByZWZjb3VudGluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgY29ycmVjdGlvbnMuIEZ1cnRoZXJtb3JlLCBgX19za2JfZXh0X2RlbGAgaXNuJiMzOTt0IHN0YXRpYyBhbmQgaXMgZXhwb3J0ZWQuIEFsc28gYHNrYl9leHRfZGVsYCBpcyBpbmxpbmUsIHNvIGl0IGNhbGxzIHRoZSBmdW5jdGlvbiBkaXJlY3RseS4gYHNlY3BhdGhfcmVzZXRgIGFsc28gY2FsbHMgYHNrYl9leHRfZGVsKHNrYiwgU0tCX0VYVF9TRUNfUEFUSClgLiBOb3cgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGBTS0JfRVhUX01DVFBgIGlzIGJlaW5nIGFkZGVkL2RlbGV0ZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiB0aGUgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTS0JfRVhUX01DVFAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9tY3RwLWkyYy5jPTM2Nj1tY3RwX2kyY19nZXRfdHhfZmxvd19zdGF0ZShzdHJ1Y3QgbWN0cF9pMmNfZGV2ICptaWRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtaTJjLmMtMzcyLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLWkyYy5jOjM3MzpcdGZsb3cgPSBza2JfZXh0X2ZpbmQoc2tiLCBTS0JfRVhUX01DVFApO1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLWkyYy5jLTM3NC1cdGlmICghZmxvdylcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtaTJjLmM9NDU0PXN0YXRpYyB2b2lkIG1jdHBfaTJjX2ludmFsaWRhdGVfdHhfZmxvdyhzdHJ1Y3QgbWN0cF9pMmNfZGV2ICptaWRldixcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtaTJjLmMtNDYxLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLWkyYy5jOjQ2MjpcdGZsb3cgPSBza2JfZXh0X2ZpbmQoc2tiLCBTS0JfRVhUX01DVFApO1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLWkyYy5jLTQ2My1cdGlmICghZmxvdylcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTUwMzg9ZW51bSBza2JfZXh0X2lkIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwNTEtI2lmIElTX0VOQUJMRUQoQ09ORklHX01DVFBfRkxPV1MpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwNTI6XHRTS0JfRVhUX01DVFAsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwNTMtI2VuZGlmXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NTE1MD1zdGF0aWMgY29uc3QgdTggc2tiX2V4dF90eXBlX2xlbltdID0ge1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTUxNjMtI2lmIElTX0VOQUJMRUQoQ09ORklHX01DVFBfRkxPV1MpXG5uZXQvY29yZS9za2J1ZmYuYzo1MTY0Olx0W1NLQl9FWFRfTUNUUF0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBtY3RwX2Zsb3cpLFxubmV0L2NvcmUvc2tidWZmLmMtNTE2NS0jZW5kaWZcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03MTI0PXN0YXRpYyBzdHJ1Y3Qgc2tiX2V4dCAqc2tiX2V4dF9tYXliZV9jb3coc3RydWN0IHNrYl9leHQgKm9sZCxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MTQ4LSNpZmRlZiBDT05GSUdfTUNUUF9GTE9XU1xubmV0L2NvcmUvc2tidWZmLmM6NzE0OTpcdGlmIChvbGRfYWN0aXZlIFx1MDAyNiAoMSBcdTAwM2NcdTAwM2MgU0tCX0VYVF9NQ1RQKSkge1xubmV0L2NvcmUvc2tidWZmLmM6NzE1MDpcdFx0c3RydWN0IG1jdHBfZmxvdyAqZmxvdyA9IHNrYl9leHRfZ2V0X3B0cihvbGQsIFNLQl9FWFRfTUNUUCk7XG5uZXQvY29yZS9za2J1ZmYuYy03MTUxLVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTcyNTk9dm9pZCBfX3NrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03Mjc3LSNpZmRlZiBDT05GSUdfTUNUUF9GTE9XU1xubmV0L2NvcmUvc2tidWZmLmM6NzI3ODpcdGlmIChpZCA9PSBTS0JfRVhUX01DVFApXG5uZXQvY29yZS9za2J1ZmYuYzo3Mjc5Olx0XHRza2JfZXh0X3B1dF9tY3RwKHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfTUNUUCkpO1xubmV0L2NvcmUvc2tidWZmLmMtNzI4MC0jZW5kaWZcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03Mjg0PXZvaWQgX19za2JfZXh0X3B1dChzdHJ1Y3Qgc2tiX2V4dCAqZXh0KVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTcyOTktI2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXG5uZXQvY29yZS9za2J1ZmYuYzo3MzAwOlx0aWYgKF9fc2tiX2V4dF9leGlzdChleHQsIFNLQl9FWFRfTUNUUCkpXG5uZXQvY29yZS9za2J1ZmYuYzo3MzAxOlx0XHRza2JfZXh0X3B1dF9tY3RwKHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfTUNUUCkpO1xubmV0L2NvcmUvc2tidWZmLmMtNzMwMi0jZW5kaWZcbi0tXG5uZXQvbWN0cC9yb3V0ZS5jPTM0Nj1zdGF0aWMgdm9pZCBtY3RwX3NrYl9zZXRfZmxvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWN0cF9za19rZXkgKmtleSlcbi0tXG5uZXQvbWN0cC9yb3V0ZS5jLTM0OS1cbm5ldC9tY3RwL3JvdXRlLmM6MzUwOlx0ZmxvdyA9IHNrYl9leHRfYWRkKHNrYiwgU0tCX0VYVF9NQ1RQKTtcbm5ldC9tY3RwL3JvdXRlLmMtMzUxLVx0aWYgKCFmbG93KVxuLS1cbm5ldC9tY3RwL3JvdXRlLmM9MzU4PXN0YXRpYyB2b2lkIG1jdHBfZmxvd19wcmVwYXJlX291dHB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWN0cF9kZXYgKmRldilcbi0tXG5uZXQvbWN0cC9yb3V0ZS5jLTM2My1cbm5ldC9tY3RwL3JvdXRlLmM6MzY0Olx0ZmxvdyA9IHNrYl9leHRfZmluZChza2IsIFNLQl9FWFRfTUNUUCk7XG5uZXQvbWN0cC9yb3V0ZS5jLTM2NS1cdGlmICghZmxvdylcbi0tXG5uZXQvbWN0cC90ZXN0L3JvdXRlLXRlc3QuYz05OTM9c3RhdGljIHZvaWQgbWN0cF90ZXN0X3BhY2tldF9mbG93KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5uZXQvbWN0cC90ZXN0L3JvdXRlLXRlc3QuYy0xMDEzLVxubmV0L21jdHAvdGVzdC9yb3V0ZS10ZXN0LmM6MTAxNDpcdGZsb3cgPSBza2JfZXh0X2ZpbmQoc2tiMiwgU0tCX0VYVF9NQ1RQKTtcbm5ldC9tY3RwL3Rlc3Qvcm91dGUtdGVzdC5jLTEwMTUtXHRLVU5JVF9BU1NFUlRfTk9UX0VSUl9PUl9OVUxMKHRlc3QsIGZsb3cpO1xuLS1cbm5ldC9tY3RwL3Rlc3Qvcm91dGUtdGVzdC5jPTEwMjY9c3RhdGljIHZvaWQgbWN0cF90ZXN0X2ZyYWdtZW50X2Zsb3coc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm5ldC9tY3RwL3Rlc3Qvcm91dGUtdGVzdC5jLTEwNTEtXG5uZXQvbWN0cC90ZXN0L3JvdXRlLXRlc3QuYzoxMDUyOlx0Zmxvd3NbMF0gPSBza2JfZXh0X2ZpbmQodHhfc2tic1swXSwgU0tCX0VYVF9NQ1RQKTtcbm5ldC9tY3RwL3Rlc3Qvcm91dGUtdGVzdC5jLTEwNTMtXHRLVU5JVF9BU1NFUlRfTk9UX0VSUl9PUl9OVUxMKHRlc3QsIGZsb3dzWzBdKTtcbi0tXG5uZXQvbWN0cC90ZXN0L3JvdXRlLXRlc3QuYy0xMDU2LVxubmV0L21jdHAvdGVzdC9yb3V0ZS10ZXN0LmM6MTA1NzpcdGZsb3dzWzFdID0gc2tiX2V4dF9maW5kKHR4X3NrYnNbMV0sIFNLQl9FWFRfTUNUUCk7XG5uZXQvbWN0cC90ZXN0L3JvdXRlLXRlc3QuYy0xMDU4LVx0S1VOSVRfQVNTRVJUX05PVF9FUlJfT1JfTlVMTCh0ZXN0LCBmbG93c1sxXSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTU3CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBzZWNwYXRoX3Jlc2V0YCBhbmQgSXRzIENhbGxlcnMqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgc2VjcGF0aF9yZXNldGAuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gSSYjMzk7bGwgc3RhcnQgYnkgbWFraW5nIHN1cmUgSSBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGBzZWNwYXRoX3Jlc2V0YCAqZG9lcyog4oCTIHRoZSBpbnRlbmRlZCBvdXRjb21lLCB0aGUgaW5wdXRzLCBhbmQgdGhlIGFzc3VtcHRpb25zIGl0IG1ha2VzLiBUaGVuLCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IHRyYWNlIGFsbCB0aGUgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBrbm93ICp3aHkqIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIGVhY2ggbG9jYXRpb24sIHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIHRoZSBjYWxscywgYW5kIG1vc3QgaW1wb3J0YW50bHksIHdoYXQgdGhlIGV4cGVjdGVkIHN0YXRlIGlzIGJlZm9yZSBhbmQgYWZ0ZXIgZWFjaCBjYWxsLiBUaGlzIHJlcXVpcmVzIHVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgY29kZS4gSXMgaXQgc2VjdXJpdHktcmVsYXRlZD8gV2hhdCBraW5kIG9mIGRhdGEgaXMgYmVpbmcgaGFuZGxlZD8gS25vd2luZyB0aGUgY2FsbGVycyB3aWxsIGhlbHAgbWUgZ3Jhc3AgdGhlIGNyaXRpY2FsIHBhdGggdGhhdCBpcyBiZWluZyBtYW5hZ2VkIGJ5IHRoaXMgZnVuY3Rpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGluZWZmaWNpZW5jaWVzLCBvciBhbnkgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMuIFVsdGltYXRlbHksIEkgd2FudCB0byBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGlzIGZ1bmN0aW9uLCBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgYmVpbmcgdXNlZCBjb3JyZWN0bHksIGFuZCBpZGVudGlmeSBhbnkgYXJlYXMgdGhhdCBtaWdodCByZXF1aXJlIGZ1cnRoZXIgc2NydXRpbnkgb3IgcG90ZW50aWFsIG9wdGltaXphdGlvbi4gQSB0aG9yb3VnaCBpbnZlc3RpZ2F0aW9uIG9mIHRoZSBmdW5jdGlvbiBhbmQgaXRzIGNhbGxlcnMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIHBsYWNlIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlY3BhdGhfcmVzZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX3J4dHguYz0zMDc9dm9pZCBtbHg1ZV9pcHNlY19vZmZsb2FkX2hhbmRsZV9yeF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvaXBzZWNfcnh0eC5jLTMzMi1cdFx0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvaXBzZWNfcnh0eC5jOjMzMzpcdFx0c2VjcGF0aF9yZXNldChza2IpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX3J4dHguYy0zMzQtXHRcdHJldHVybjtcbi0tXG5pbmNsdWRlL25ldC90Y3AuaD03OTc9c3RhdGljIGlubGluZSB2b2lkIHRjcF9jbGVhbnVwX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTc5OS1cdHNrYl9kc3RfZHJvcChza2IpO1xuaW5jbHVkZS9uZXQvdGNwLmg6ODAwOlx0c2VjcGF0aF9yZXNldChza2IpO1xuaW5jbHVkZS9uZXQvdGNwLmgtODAxLX1cbi0tXG5pbmNsdWRlL25ldC94ZnJtLmg9MTE5Nj1zdGF0aWMgaW5saW5lIHZvaWRcbmluY2x1ZGUvbmV0L3hmcm0uaDoxMTk3OnNlY3BhdGhfcmVzZXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbmV0L3hmcm0uaC0xMTk4LXtcbi0tXG5pbmNsdWRlL25ldC94ZnJtLmg9MTI5MD1zdGF0aWMgaW5saW5lIGludCBfX3hmcm1fcG9saWN5X2NoZWNrMihzdHJ1Y3Qgc29jayAqc2ssIGludCBkaXIsXG4tLVxuaW5jbHVkZS9uZXQveGZybS5oLTEzMTMtXHRcdFx0ICovXG5pbmNsdWRlL25ldC94ZnJtLmg6MTMxNDpcdFx0XHRzZWNwYXRoX3Jlc2V0KHNrYik7XG5pbmNsdWRlL25ldC94ZnJtLmgtMTMxNS1cdFx0XHRyZXR1cm4gY2hlY2s7XG4tLVxubmV0L2lwdjQvZXNwNC5jPTIxMD1zdGF0aWMgdm9pZCBlc3Bfb3V0cHV0X2RvbmUodm9pZCAqZGF0YSwgaW50IGVycilcbi0tXG5uZXQvaXB2NC9lc3A0LmMtMjM2LVx0XHRza2JfcHVzaChza2IsIHNrYi1cdTAwM2VkYXRhIC0gc2tiX21hY19oZWFkZXIoc2tiKSk7XG5uZXQvaXB2NC9lc3A0LmM6MjM3Olx0XHRzZWNwYXRoX3Jlc2V0KHNrYik7XG5uZXQvaXB2NC9lc3A0LmMtMjM4LVx0XHR4ZnJtX2Rldl9yZXN1bWUoc2tiKTtcbi0tXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYz0zMD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmVzcDRfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbi0tXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYy05NC1vdXRfcmVzZXQ6XG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYzo5NTpcdHNlY3BhdGhfcmVzZXQoc2tiKTtcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTk2LW91dDpcbi0tXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYz0yNjU9c3RhdGljIGludCBlc3BfeG1pdChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuLS1cbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTM2OS1cbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jOjM3MDpcdHNlY3BhdGhfcmVzZXQoc2tiKTtcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTM3MS1cbi0tXG5uZXQvaXB2Ni9lc3A2LmM9MjQ1PXN0YXRpYyB2b2lkIGVzcF9vdXRwdXRfZG9uZSh2b2lkICpkYXRhLCBpbnQgZXJyKVxuLS1cbm5ldC9pcHY2L2VzcDYuYy0yNzMtXHRcdHNrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZWRhdGEgLSBza2JfbWFjX2hlYWRlcihza2IpKTtcbm5ldC9pcHY2L2VzcDYuYzoyNzQ6XHRcdHNlY3BhdGhfcmVzZXQoc2tiKTtcbm5ldC9pcHY2L2VzcDYuYy0yNzUtXHRcdHhmcm1fZGV2X3Jlc3VtZShza2IpO1xuLS1cbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jPTUzPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZXNwNl9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuLS1cbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jLTEyMy1vdXRfcmVzZXQ6XG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYzoxMjQ6XHRzZWNwYXRoX3Jlc2V0KHNrYik7XG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYy0xMjUtb3V0OlxuLS1cbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jPTMwMz1zdGF0aWMgaW50IGVzcDZfeG1pdChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuLS1cbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jLTM5MC1cbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jOjM5MTpcdHNlY3BhdGhfcmVzZXQoc2tiKTtcbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jLTM5Mi1cbi0tXG5uZXQvbDJ0cC9sMnRwX2V0aC5jPTEwNz1zdGF0aWMgdm9pZCBsMnRwX2V0aF9kZXZfcmVjdihzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZGF0YV9sZW4pXG4tLVxubmV0L2wydHAvbDJ0cF9ldGguYy0xMTQtXG5uZXQvbDJ0cC9sMnRwX2V0aC5jOjExNTpcdHNlY3BhdGhfcmVzZXQoc2tiKTtcbm5ldC9sMnRwL2wydHBfZXRoLmMtMTE2LVxuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYz00NjY9aW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYy01NzYtXHRpZiAoIXNwaSBcdTAwMjZcdTAwMjYgeGZybV9wYXJzZV9zcGkoc2tiLCBuZXh0aGRyLCBcdTAwMjZzcGksIFx1MDAyNnNlcSkpIHtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo1Nzc6XHRcdHNlY3BhdGhfcmVzZXQoc2tiKTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy01NzgtXHRcdFhGUk1fSU5DX1NUQVRTKG5ldCwgTElOVVhfTUlCX1hGUk1JTkhEUkVSUk9SKTtcbi0tXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNTg3LVx0XHRpZiAoc3AtXHUwMDNlbGVuID09IFhGUk1fTUFYX0RFUFRIKSB7XG5uZXQveGZybS94ZnJtX2lucHV0LmM6NTg4Olx0XHRcdHNlY3BhdGhfcmVzZXQoc2tiKTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy01ODktXHRcdFx0WEZSTV9JTkNfU1RBVFMobmV0LCBMSU5VWF9NSUJfWEZSTUlOQlVGRkVSRVJST1IpO1xuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYy01OTQtXHRcdGlmICh4ID09IE5VTEwpIHtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo1OTU6XHRcdFx0c2VjcGF0aF9yZXNldChza2IpO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTU5Ni1cdFx0XHRYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5OT1NUQVRFUyk7XG4tLVxubmV0L3hmcm0veGZybV9pbnB1dC5jLTYwMS1cdFx0aWYgKHVubGlrZWx5KHgtXHUwMDNlZGlyIFx1MDAyNlx1MDAyNiB4LVx1MDAzZWRpciAhPSBYRlJNX1NBX0RJUl9JTikpIHtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo2MDI6XHRcdFx0c2VjcGF0aF9yZXNldChza2IpO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTYwMy1cdFx0XHRYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5TVEFURURJUkVSUk9SKTtcbi0tXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmM9MjkzPXN0YXRpYyB2b2lkIHhmcm1pX3NjcnViX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIHhuZXQpXG4tLVxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jLTMwNi1cdGlwdnNfcmVzZXQoc2tiKTtcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYzozMDc6XHRzZWNwYXRoX3Jlc2V0KHNrYik7XG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmMtMzA4LVx0c2tiX29ycGhhbihza2IpO1xuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NzQ4PWludCB4ZnJtX291dHB1dChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy03OTAtXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjc5MTpcdHNlY3BhdGhfcmVzZXQoc2tiKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNzkyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgxNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFNLQiBFeHRlbnNpb24gTWFuYWdlbWVudCBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGludHJpY2FjaWVzIG9mIFNLQiBleHRlbnNpb24gbWFuYWdlbWVudCwgYW5kIEkmIzM5O3ZlIGZsYWdnZWQgYF9fc2tiX2V4dF9kZWxgIGFuZCBgX19za2JfZXh0X3B1dGAgYXMgbXkgaW5pdGlhbCBmb2N1cyBwb2ludHMuIFRob3NlIGZ1bmN0aW9ucyBhcmUgZGVmaW5pdGVseSBhdCB0aGUgaGVhcnQgb2YgdGhpcy4gU2luY2UgSSBrbm93IHRoZXNlIGZ1bmN0aW9ucyB3b3JrIHRvZ2V0aGVyLCBJJiMzOTtsbCBhbHNvIGJlIGNvbnNpZGVyaW5nIGBza2JfZXh0X2FkZGAgYXMgaXQgY291bGQgYWxzbyBiZSBpbXBvcnRhbnQuIE15IG9iamVjdGl2ZSBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSByZWxhdGUgdG8gZGlmZmVyZW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29uZmlndXJhdGlvbnMgcmVxdWlyZSB0aGVzZSBmdW5jdGlvbnMuIFRoZSBrZXkgY29uZmlncyBJJiMzOTttIGxvb2tpbmcgYXQgYXJlIGBDT05GSUdfTUNUUF9GTE9XU2AgYW5kIGBDT05GSUdfWEZSTWAsIHNpbmNlIEkga25vdyBib3RoIG9mIHRob3NlIGhhdmUgdG8gZG8gd2l0aCBuZXR3b3JrIGRhdGEgaGFuZGxpbmcuIEkmIzM5O2xsIG5lZWQgdG8gd29yayBiYWNrd2FyZCBmcm9tIHRob3NlIGNvbmZpZ3MuCgpMZXQmIzM5O3Mgc2VlLCBgTUNUUF9GTE9XU2AuIExvb2tzIGxpa2UgdGhhdCYjMzk7cyBlbmFibGVkIHRocm91Z2ggdGhlIGBNQ1RQYCBLY29uZmlnIGVudHJ5LiBQZWVraW5nIGF0IGBuZXQvbWN0cC9LY29uZmlnYCwgSSBzZWUgdGhhdCBgTUNUUF9GTE9XU2AgaXMgYSBib29sZWFuIHRoYXQgZGVwZW5kcyBvbiBgTUNUUGAgYW5kICpzZWxlY3RzKiBgU0tCX0VYVEVOU0lPTlNgLiBTbyBmYXIsIHNvIGdvb2QsIGEgY2xlYXIgbGluay4gSXQgbG9va3MgbGlrZSBgTUNUUF9GTE9XU2AgaXMgc2VsZWN0ZWQgYnkgYE1DVFBfVFJBTlNQT1JUX0kyQ2AgYW5kIGBNQ1RQX1RFU1RgLiBgTUNUUF9UUkFOU1BPUlRfSTJDYCBpdHNlbGYgZGVwZW5kcyBvbiBgSTJDX1NMQVZFYCBhbmQgYE1DVFBgLgoKVGhlbiB0aGVyZSYjMzk7cyBgWEZSTWAuIFRoYXQmIzM5O3MgYSBiaXQgbW9yZSBpbnZvbHZlZCwgYXMgaXTigJlzIHNlbGVjdGVkIGJ5IGEgd2hvbGUgYnVuY2ggb2YgdGhpbmdzOiBgWEZSTV9BTEdPYCwgYElORVRfQUhgLCBgSU5FVF9FU1BgLCBhbmQgYSBsb3QgbW9yZS4gVGhlIHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBmYWN0IHRoYXQgYFNLQl9FWFRFTlNJT05TYCBpcyBzZWxlY3RlZCBieSBgWEZSTWAgZGlyZWN0bHksIGFzIHdlbGwgYXMgYnkgYE1DVFBfRkxPV1NgLiBGdXJ0aGVyIGludmVzdGlnYXRpb24gbWlnaHQgYmUgbmVlZGVkIG9uIHdoaWNoIGNvbmZpZyBvcHRpb25zIGRlcGVuZCBvbiBgU0tCX0VYVEVOU0lPTlNgIGRpcmVjdGx5LiBgTVBUQ1BgLCBgQlJJREdFX05FVEZJTFRFUmAsIGFuZCBgTkVUX1RDX1NLQl9FWFRgIGFyZSBhbHNvIG9uIHRoZSBsaXN0IG9mIGNvbmZpZ3MgdGhhdCBzZWxlY3QgYFNLQl9FWFRFTlNJT05TYC4KCkkmIzM5O20gbWFraW5nIGEgbWVudGFsIG5vdGUgdG8gZG91YmxlLWNoZWNrIHRoZXNlIHJlbGF0aW9uc2hpcHMsIGVuc3VyaW5nIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBjcnVjaWFsIGRlcGVuZGVuY2llcyBvciBzaWRlIGVmZmVjdHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbmZpZ3VyYXRpb24gbWF0cml4LCBwYXJ0aWN1bGFybHkgZm9yIGBNQ1RQYCwgYE1DVFBfRkxPV1NgLCBgWEZSTWAsIGBTS0JfRVhURU5TSU9OU2AsIGBNQ1RQX1RSQU5TUE9SVF9JMkNgLCBhbmQgYEkyQ19TTEFWRWAsIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMgb24gdGhlIGJlaGF2aW9yIG9mIHRoZXNlIGV4dGVuc2lvbiBmdW5jdGlvbnMuIEkmIzM5O2xsIHN0YXJ0IGJ5IGRvdWJsZSBjaGVja2luZyBgTUNUUF9UUkFOU1BPUlRfSTJDYCBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01DVFBfVFJBTlNQT1JUX0kyQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tY3RwL0tjb25maWc9MjQ9Y29uZmlnIE1DVFBfU0VSSUFMX1RFU1Rcbi0tXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctMjgtXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6Mjk6Y29uZmlnIE1DVFBfVFJBTlNQT1JUX0kyQ1xuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTMwLVx0dHJpc3RhdGUgXCYjMzQ7TUNUUCBTTUJ1cy9JMkMgdHJhbnNwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDE2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIE1DVFAgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIE1DVFAgbmV0d29yayBkcml2ZXIuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI5LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUsIHRvcC1sZXZlbCBzZXR0aW5ncyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5kYW1lbnRhbCBrbm9icyBhbmQgbGV2ZXJzIHRoYXQgY29udHJvbCB3aGV0aGVyIHRoaXMgZHJpdmVyIGlzIGV2ZW4gKmluY2x1ZGVkKiBpbiB0aGUgYnVpbGQsIGFuZCBtYXliZSBzb21lIG9mIGl0cyBiYXNpYyBmZWF0dXJlIGZsYWdzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBlc3NlbnRpYWwgYnVpbGRpbmcgYmxvY2tzIOKAkyB0aGUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIHN1YnN5c3RlbXMsIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCBhbmQgYW55IHBsYXRmb3JtLXNwZWNpZmljIGNvbnN0cmFpbnRzIHRoYXQgYXJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGRyaXZlciBpbnRlZ3JhdGVzIGludG8gdGhlIHN5c3RlbS4gS25vd2luZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgbGV0IG1lIHNlZSB3aGljaCBNQ1RQIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUsIGhvdyB0byBlbmFibGUgdGhlbSwgYW5kIHdoYXQgcGxhdGZvcm0gcmVzb3VyY2VzIGFyZSByZXF1aXJlZC4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBsYXRlciwgd2hlbiBJIHN0YXJ0IGRlYnVnZ2luZyBvciB0cnlpbmcgdG8gb3B0aW1pemUgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdCAgICAgICAgYm9vbCBcJiMzNDtNQ1RQIHNlcmlhbCB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDI2Olx0ICAgICAgICBkZXBlbmRzIG9uIE1DVFBfU0VSSUFMPXkgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgMjc6XHQgICAgICAgIGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDI4Olx0XG4gIDI5Olx0Y29uZmlnIE1DVFBfVFJBTlNQT1JUX0kyQ1xuICAzMDpcdFx0dHJpc3RhdGUgXCYjMzQ7TUNUUCBTTUJ1cy9JMkMgdHJhbnNwb3J0XCYjMzQ7XG4gIDMxOlx0XHQjIGkyYy1tdXggaXMgb3B0aW9uYWwsIGJ1dCB3ZSBtdXN0IGJ1aWxkIGFzIGEgbW9kdWxlIGlmIGkyYy1tdXggaXMgYSBtb2R1bGVcbiAgMzI6XHRcdGRlcGVuZHMgb24gSTJDX01VWCB8fCAhSTJDX01VWFxuICAzMzpcdFx0ZGVwZW5kcyBvbiBJMkNcbiAgMzQ6XHRcdGRlcGVuZHMgb24gSTJDX1NMQVZFXG4gIDM1Olx0XHRzZWxlY3QgTUNUUF9GTE9XU1xuICAzNjpcdFx0aGVscFxuICAzNzpcdFx0ICBQcm92aWRlcyBhIGRyaXZlciB0byBhY2Nlc3MgTUNUUCBkZXZpY2VzIG92ZXIgU01CdXMvSTJDIHRyYW5zcG9ydCxcbiAgMzg6XHRcdCAgZnJvbSBETVRGIHNwZWNpZmljYXRpb24gRFNQMDIzNy4gQSBNQ1RQIHByb3RvY29sIG5ldHdvcmsgZGV2aWNlIGlzXG4gIDM5Olx0XHQgIGNyZWF0ZWQgZm9yIGVhY2ggSTJDIGJ1cyB0aGF0IGhhcyBiZWVuIGFzc2lnbmVkIGEgbWN0cC1pMmMgZGV2aWNlLlxuICA0MDpcdFxuICA0MTpcdGNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JM0NcbiAgNDI6XHRcdHRyaXN0YXRlIFwmIzM0O01DVFAgSTNDIHRyYW5zcG9ydFwmIzM0O1xuICA0MzpcdFx0ZGVwZW5kcyBvbiBJM0NcbiAgNDQ6XHRcdGhlbHBcbiAgNDU6XHRcdCAgUHJvdmlkZXMgYSBkcml2ZXIgdG8gYWNjZXNzIE1DVFAgZGV2aWNlcyBvdmVyIEkzQyB0cmFuc3BvcnQsXG4gIDQ2Olx0XHQgIGZyb20gRE1URiBzcGVjaWZpY2F0aW9uIERTUDAyMzMuXG4gIDQ3Olx0XHQgIEEgTUNUUCBwcm90b2NvbCBuZXR3b3JrIGRldmljZSBpcyBjcmVhdGVkIGZvciBlYWNoIEkzQyBidXNcbiAgNDg6XHRcdCAgaGF2aW5nIGEgXCYjMzQ7bWN0cC1jb250cm9sbGVyXCYjMzQ7IGRldmljZXRyZWUgcHJvcGVydHkuXG4gIDQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzEzCgkJCQkJCQlvdXRwdXQ6IDE3NAoJCQkJCQkJdGhvdWdodHM6IDQxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIGBDT05GSUdfTUNUUGAgaXMgdXNlci1jb25maWd1cmFibGUuIEEgcXVpY2sgY2hlY2sgd2l0aGluIGBuZXQvbWN0cC9LY29uZmlnYCBjb25maXJtcyBpdDsgdGhlIGBtZW51Y29uZmlnIE1DVFBgIGVudHJ5IHdpdGggYSBgZGVwZW5kcyBvbiBORVRgIGNsYXVzZSBtZWFucyBpdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IGNhbiBiZSB0b2dnbGVkLiBOb3csIEkgc2hvdWxkIGFsc28gZmxhZyBpdHMgZGVwZW5kZW5jaWVzLCB3aGljaCBpbmNsdWRlIHRoaW5ncyBsaWtlIGBDT05GSUdfTUNUUF9GTE9XU2AsIHBvdGVudGlhbGx5IGBDT05GSUdfTUNUUF9UUkFOU1BPUlRfSTJDYCAod2hpY2ggbGVhZHMgaW50byBgQ09ORklHX0kyQ2AgYW5kIGBDT05GSUdfSTJDX1NMQVZFYCksIGFuZCBgQ09ORklHX1hGUk1gIHdpdGggaXRzIHJlbGF0ZWQgY29uZmlnIG9wdGlvbnMgc3VjaCBhcyBgQ09ORklHX1hGUk1fVVNFUmAsIGBDT05GSUdfSU5FVF9FU1BgLCBgQ09ORklHX0lORVRfQUhgLCBgQ09ORklHX05FVF9LRVlgLgoKTmV4dCwgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBjaGFuZ2VzJiMzOTsgcG90ZW50aWFsIGZvciBmdXp6aW5nLCBzcGVjaWZpY2FsbHkgYmFzZWQgb24gdGhlIGBXb3J0aEZ1enppbmdgIGNyaXRlcmlhLiBUaGVzZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIGNsZWFudXAgbG9naWMsIHNwZWNpZmljYWxseSB3aXRoaW4gYF9fc2tiX2V4dF9kZWxgLCBgc2tiX2V4dF9wdXRfc3BgLCBhbmQgYHNrYl9leHRfcHV0X21jdHBgLiBUaGV5JiMzOTtyZSBhZGRyZXNzaW5nIGlzc3VlcyByZWxhdGVkIHRvIGRlbGV0aW5nIGBza2JgIGV4dGVuc2lvbnMsIHdoaWNoIGludm9sdmVzIHJlc2V0dGluZyByZWZlcmVuY2UgY291bnRzLCBwcm9wZXJseSB1bnJlZmVyZW5jaW5nIGBmbG93LSZndDtrZXlgLCBhbmQgemVyb2luZyBgc3AtJmd0O2xlbmAuIFRoaXMga2luZCBvZiBtb2RpZmljYXRpb24gaW4gY29yZSBgc2tidWZmYCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIG5ldHdvcmtpbmcsIElQc2VjLCBhbmQgTUNUUCwgaXMgcHJpbWUgZnV6emluZyB0ZXJyaXRvcnkuIEl0IGFmZmVjdHMgZnVuZGFtZW50YWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRhdGEgc3RydWN0dXJlcy4gSXQmIzM5O3MgZnVsbHkgdGVzdGFibGUgYW5kIGZ1enphYmxlLCBzbyBgV29ydGhGdXp6aW5nYCBpcyBkZWZpbml0ZWx5IHRydWUuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb25zIGFyZToKCiogICBgV29ydGhGdXp6aW5nYDogdHJ1ZQoqICAgYEZvY3VzU3ltYm9sc2A6IEkmIzM5O2xsIGZvY3VzIG9uIGBfX3NrYl9leHRfZGVsYCBhbmQgYF9fc2tiX2V4dF9wdXRgLgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBgU0tCX0VYVEVOU0lPTlNgLCBgWEZSTWAsIGBNQ1RQYCwgYE1DVFBfRkxPV1NgLCBhbmQsIGlmIHJlbGV2YW50LCBgTUNUUF9UUkFOU1BPUlRfSTJDYC4KCk5vdywgSSBqdXN0IG5lZWQgdG8gY29uc3RydWN0IHRoZSBgc2V0LXJlc3VsdHNgIGNhbGw6CgoqICAgYFdvcnRoRnV6emluZ2A6IHRydWUKKiAgIGBGb2N1c1N5bWJvbHNgOiBgWyYjMzQ7X19za2JfZXh0X2RlbCYjMzQ7LCAmIzM0O19fc2tiX2V4dF9wdXQmIzM0O11gCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtTS0JfRVhURU5TSU9OUyYjMzQ7LCAmIzM0O1hGUk0mIzM0OywgJiMzNDtNQ1RQJiMzNDssICYjMzQ7TUNUUF9GTE9XUyYjMzQ7XWAgKEkmIzM5O2xsIGtlZXAgYE1DVFBfVFJBTlNQT1JUX0kyQ2Agb24gc3RhbmRieSB1bmxlc3MgaXQmIzM5O3MgZXhwbGljaXRseSBuZWVkZWQpLgoqICAgYFJlYXNvbmluZ2A6IENvbmNpc2UgZXhwbGFuYXRpb24sIHdoaWNoIEkmIzM5O3ZlIGVzc2VudGlhbGx5IGFscmVhZHkgZG9uZS4KCk5vdyBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NLQl9FWFRFTlNJT05TJiMzNDssCiAgICAmIzM0O1hGUk0mIzM0OywKICAgICYjMzQ7TUNUUCYjMzQ7LAogICAgJiMzNDtNQ1RQX0ZMT1dTJiMzNDssCiAgICAmIzM0O01DVFBfVFJBTlNQT1JUX0kyQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc2tiX2V4dF9kZWwmIzM0OywKICAgICYjMzQ7X19za2JfZXh0X3B1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHNrYiBleHRlbnNpb24gZGVsZXRpb24gYW5kIGNsZWFudXAgbG9naWMgaW4gYF9fc2tiX2V4dF9kZWxgLCBgc2tiX2V4dF9wdXRfc3BgLCBhbmQgYHNrYl9leHRfcHV0X21jdHBgLCBwcm9wZXJseSBoYW5kbGluZyByZWZlcmVuY2UgY291bnRzIGFuZCByZXNvdXJjZSBkZWFsbG9jYXRpb24gZm9yIE1DVFAgZmxvd3MgYW5kIElQc2VjL1hGUk0gc2VjdXJpdHkgcGF0aHMgd2hlbiByZW1vdmluZyBhY3RpdmUgZXh0ZW5zaW9ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NLQl9FWFRFTlNJT05TJiMzNDssCiAgICAmIzM0O1hGUk0mIzM0OywKICAgICYjMzQ7TUNUUCYjMzQ7LAogICAgJiMzNDtNQ1RQX0ZMT1dTJiMzNDssCiAgICAmIzM0O01DVFBfVFJBTlNQT1JUX0kyQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc2tiX2V4dF9kZWwmIzM0OywKICAgICYjMzQ7X19za2JfZXh0X3B1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHNrYiBleHRlbnNpb24gZGVsZXRpb24gYW5kIGNsZWFudXAgbG9naWMgaW4gYF9fc2tiX2V4dF9kZWxgLCBgc2tiX2V4dF9wdXRfc3BgLCBhbmQgYHNrYl9leHRfcHV0X21jdHBgLCBwcm9wZXJseSBoYW5kbGluZyByZWZlcmVuY2UgY291bnRzIGFuZCByZXNvdXJjZSBkZWFsbG9jYXRpb24gZm9yIE1DVFAgZmxvd3MgYW5kIElQc2VjL1hGUk0gc2VjdXJpdHkgcGF0aHMgd2hlbiByZW1vdmluZyBhY3RpdmUgZXh0ZW5zaW9ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19za2JfZXh0X2RlbCgpYCBhbmQgaGVscGVyIGZ1bmN0aW9ucyBgc2tiX2V4dF9wdXRfc3AoKWAgLyBgc2tiX2V4dF9wdXRfbWN0cCgpYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIHRvIHByb3Blcmx5IHJlbGVhc2UgcmVmZXJlbmNlcyAoYG1jdHBfa2V5X3VucmVmYCBhbmQgYHhmcm1fc3RhdGVfcHV0YCkgYW5kIHplcm8gb3V0IGZpZWxkcyAoYHNwLVx1MDAzZWxlbiA9IDBgLCBgZmxvdy1cdTAwM2VrZXkgPSBOVUxMYCkgd2hlbiBza2IgZXh0ZW5zaW9ucyBhcmUgcmVtb3ZlZC5cblxuVGhlc2UgY2hhbmdlcyBwZXJ0YWluIHN0cmljdGx5IHRvIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbGlmZWN5Y2xlL2NsZWFudXAgbWFuYWdlbWVudCBvZiBza2IgZXh0ZW5zaW9uIGRhdGEuIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgZGF0YSBleHBvc3VyZSB0byB1c2VyIHNwYWNlLCBvciB2YXJpYWJsZSBpbml0aWFsaXphdGlvbi4gQW55IHBvdGVudGlhbCBkZWZlY3RzIGluIHRoaXMgY29kZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIHVucmVmLCBvciBtZW1vcnkgbGVha3MpIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHJlZmNvdW50IHRyYWNraW5nLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDljZGM5ZjQ4ZjQxNWE5ZmZlOTIyZTBiMjcxMmFlZjhjZWU1OGJhODgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAwNzoxNDozOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggOTY2YWYzYmVlZDk0ZC4uYWIxOTViOTljODUzMCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTcyMzYsMTYgJiM0Mzs3MjM2LDIzIEBAIHN0YXRpYyB2b2lkIHNrYl9leHRfcHV0X3NwKHN0cnVjdCBzZWNfcGF0aCAqc3ApCiB7CiAJdW5zaWduZWQgaW50IGk7CiAKJiM0MzsJaWYgKCFzcC0mZ3Q7bGVuKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWZvciAoaSA9IDA7IGkgJmx0OyBzcC0mZ3Q7bGVuOyBpJiM0MzsmIzQzOykKIAkJeGZybV9zdGF0ZV9wdXQoc3AtJmd0O3h2ZWNbaV0pOwomIzQzOwlzcC0mZ3Q7bGVuID0gMDsKIH0KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX01DVFBfRkxPV1MKIHN0YXRpYyB2b2lkIHNrYl9leHRfcHV0X21jdHAoc3RydWN0IG1jdHBfZmxvdyAqZmxvdykKIHsKLQlpZiAoZmxvdy0mZ3Q7a2V5KQotCQltY3RwX2tleV91bnJlZihmbG93LSZndDtrZXkpOwomIzQzOwlpZiAoIWZsb3ctJmd0O2tleSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbWN0cF9rZXlfdW5yZWYoZmxvdy0mZ3Q7a2V5KTsKJiM0MzsJZmxvdy0mZ3Q7a2V5ID0gTlVMTDsKIH0KICNlbmRpZgogCkBAIC03MjU3LDE1ICYjNDM7NzI2NCwyMCBAQCB2b2lkIF9fc2tiX2V4dF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKQogCWlmIChza2ItJmd0O2FjdGl2ZV9leHRlbnNpb25zID09IDApIHsKIAkJc2tiLSZndDtleHRlbnNpb25zID0gTlVMTDsKIAkJX19za2JfZXh0X3B1dChleHQpOwotI2lmZGVmIENPTkZJR19YRlJNCi0JfSBlbHNlIGlmIChpZCA9PSBTS0JfRVhUX1NFQ19QQVRIICZhbXA7JmFtcDsKLQkJICAgcmVmY291bnRfcmVhZCgmYW1wO2V4dC0mZ3Q7cmVmY250KSA9PSAxKSB7Ci0JCXN0cnVjdCBzZWNfcGF0aCAqc3AgPSBza2JfZXh0X2dldF9wdHIoZXh0LCBTS0JfRVhUX1NFQ19QQVRIKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQogCi0JCXNrYl9leHRfcHV0X3NwKHNwKTsKLQkJc3AtJmd0O2xlbiA9IDA7CiYjNDM7CWlmIChyZWZjb3VudF9yZWFkKCZhbXA7ZXh0LSZndDtyZWZjbnQpICZndDsgMSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX1hGUk0KJiM0MzsJaWYgKGlkID09IFNLQl9FWFRfU0VDX1BBVEgpCiYjNDM7CQlza2JfZXh0X3B1dF9zcChza2JfZXh0X2dldF9wdHIoZXh0LCBTS0JfRVhUX1NFQ19QQVRIKSk7CiYjNDM7I2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTCiYjNDM7CWlmIChpZCA9PSBTS0JfRVhUX01DVFApCiYjNDM7CQlza2JfZXh0X3B1dF9tY3RwKHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfTUNUUCkpOwogI2VuZGlmCi0JfQogfQogRVhQT1JUX1NZTUJPTChfX3NrYl9leHRfZGVsKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUzMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNLQiBFeHRlbnNpb24gRGVsZXRpb24gaW4gbmV0L2NvcmUvc2tidWZmLmMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBuZXQvY29yZS9za2J1ZmYuY2AgZGlmZiBhbmQgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNoYW5nZWQgaW4gYF9fc2tiX2V4dF9kZWxgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBoYW5kbGluZyB0aGUgY2xlYW51cCBvZiBTS0IgKFNvY2tldCBCdWZmZXIpIGV4dGVuc2lvbnMuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLCBzbyBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYXJvdW5kIGxpbmUgNzIzNi4KCkZpcnN0LCBJIHNlZSB0aGUgY2hhbmdlcyBtb2RpZnkgYHNrYl9leHRfcHV0X3NwYCBhbmQgYHNrYl9leHRfcHV0X21jdHBgLiBJdCBsb29rcyBsaWtlIGJvdGggb2YgdGhlc2UgYXJlIG5vdyBjaGVja2luZyB0byBzZWUgaWYgdGhlIHN0cnVjdHVyZSBtZW1iZXIgYHNwLSZndDtsZW5gIG9yIGBmbG93LSZndDtrZXlgIGFyZSBub24temVyby9ub24tbnVsbCBiZWZvcmUgYXR0ZW1wdGluZyB0aGUgY2xlYW51cC4gSW4gdGhlIGNhc2Ugb2YgdGhlIGBzcGAgb2JqZWN0LCBpZiBgc3AtJmd0O2xlbmAgaXMgemVybywgdGhlcmUgaXMgYSBgcmV0dXJuO2Agc3RhdGVtZW50OyBpZiBub3QsIHRoZW4gdGhlIHJlZmVyZW5jZSBjb3VudGVkIGVudHJpZXMsIGBzcC0mZ3Q7eHZlY1tpXWAsIGFyZSBkZWNyZW1lbnRlZC4gIFRoZSBgc3AtJmd0O2xlbmAgaXMgdGhlbiBzZXQgdG8gYDBgLiAgSW4gdGhlIGNhc2Ugb2YgYGZsb3ctJmd0O2tleWAsIGlmIGBmbG93LSZndDtrZXlgIGlzIG51bGwsIHRoZXJlIGlzIGEgYHJldHVybjtgIHN0YXRlbWVudDsgaWYgbm90LCB0aGVuIHRoZSByZWZlcmVuY2UgY291bnRlZCBlbnRyeSwgYGZsb3ctJmd0O2tleWAsIGlzIGRlY3JlbWVudGVkLCB0aGVuIGlzIHNldCB0byBOVUxMLgoKVGhlbiwgaW5zaWRlIGBfX3NrYl9leHRfZGVsYCwgdGhlIGRpZmYgbW9kaWZpZXMgdGhlIGxvZ2ljIGJhc2VkIG9uIHRoZSBleHRlbnNpb24gYGlkYC4gVGhlIGNoYW5nZXMgc2ltcGxpZnkgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGZvciByZWxlYXNpbmcgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBzZWN1cml0eSBwYXRocyAoYFNLQl9FWFRfU0VDX1BBVEhgKSBhbmQgTUNUUCBmbG93cyAoYFNLQl9FWFRfTUNUUGApLiBJdCBub3cgY2hlY2tzIHRoZSBgcmVmY250YCBvZiB0aGUgZXh0ZW5zaW9uLiAgSWYgdGhlIGByZWZjbnRgIGlzIGdyZWF0ZXIgdGhhbiAxLCB0aGVuIHRoZSBjb2RlIHJldHVybnMuICBPdGhlcndpc2UsIHRoZSBjb2RlIGNhbGxzIHRoZSBzcGVjaWFsaXplZCBwdXQgZnVuY3Rpb25zIGZvciB0aGUgc3BlY2lmaWVkIGV4dGVuc2lvbi4gU3BlY2lmaWNhbGx5OgoKKiAgIEZvciBgU0tCX0VYVF9TRUNfUEFUSGAsIGl0IGNhbGxzIGBza2JfZXh0X3B1dF9zcGAgdG8gcmVsZWFzZSB0aGUgc2VjdXJpdHkgcGF0aCByZXNvdXJjZXMuCiogICBGb3IgYFNLQl9FWFRfTUNUUGAsIGl0IGNhbGxzIGBza2JfZXh0X3B1dF9tY3RwYCB0byByZWxlYXNlIHRoZSBNQ1RQIGZsb3cgcmVzb3VyY2VzLgoKVGhpcyBhbGwgcG9pbnRzIHRvIG1vcmUgcm9idXN0IGhhbmRsaW5nIG9mIHRoZSByZWZlcmVuY2UgY291bnRzIGFuZCBhdm9pZGluZyBwb3RlbnRpYWwgZG91YmxlIGZyZWVzIG9yIHJlc291cmNlIGxlYWtzIHdoZW4gZGVhbGluZyB3aXRoIHRoZXNlIFNLQiBleHRlbnNpb25zLiBUaGVzZSB0eXBlcyBvZiBjaGFuZ2VzIGFyZSBnb29kIHRvIHNlZS4gSSBzaG91bGQgdmVyaWZ5IHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgbG9ja2luZyByZXF1aXJlbWVudHMgb3IgaW50cm9kdWNlIGFueSBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcyMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzIyMDpcdFx0XHRcdHJldHVybiBOVUxMO1xuNzIyMTpcdFx0fVxuNzIyMjpcdFxuNzIyMzpcdFx0bmV3bGVuID0gbmV3b2ZmICYjNDM7IHNrYl9leHRfdHlwZV9sZW5baWRdO1xuNzIyNDpcdFx0bmV3LVx1MDAzZWNodW5rcyA9IG5ld2xlbjtcbjcyMjU6XHRcdG5ldy1cdTAwM2VvZmZzZXRbaWRdID0gbmV3b2ZmO1xuNzIyNjpcdHNldF9hY3RpdmU6XG43MjI3Olx0XHRza2ItXHUwMDNlc2xvd19ncm8gPSAxO1xuNzIyODpcdFx0c2tiLVx1MDAzZWV4dGVuc2lvbnMgPSBuZXc7XG43MjI5Olx0XHRza2ItXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgfD0gMSBcdTAwM2NcdTAwM2MgaWQ7XG43MjMwOlx0XHRyZXR1cm4gc2tiX2V4dF9nZXRfcHRyKG5ldywgaWQpO1xuNzIzMTpcdH1cbjcyMzI6XHRFWFBPUlRfU1lNQk9MKHNrYl9leHRfYWRkKTtcbjcyMzM6XHRcbjcyMzQ6XHQjaWZkZWYgQ09ORklHX1hGUk1cbjcyMzU6XHRzdGF0aWMgdm9pZCBza2JfZXh0X3B1dF9zcChzdHJ1Y3Qgc2VjX3BhdGggKnNwKVxuNzIzNjpcdHtcbjcyMzc6XHRcdHVuc2lnbmVkIGludCBpO1xuNzIzODpcdFxuNzIzOTpcdFx0aWYgKCFzcC1cdTAwM2VsZW4pXG43MjQwOlx0XHRcdHJldHVybjtcbjcyNDE6XHRcbjcyNDI6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNwLVx1MDAzZWxlbjsgaSYjNDM7JiM0MzspXG43MjQzOlx0XHRcdHhmcm1fc3RhdGVfcHV0KHNwLVx1MDAzZXh2ZWNbaV0pO1xuNzI0NDpcdFx0c3AtXHUwMDNlbGVuID0gMDtcbjcyNDU6XHR9XG43MjQ2Olx0I2VuZGlmXG43MjQ3Olx0XG43MjQ4Olx0I2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXG43MjQ5Olx0c3RhdGljIHZvaWQgc2tiX2V4dF9wdXRfbWN0cChzdHJ1Y3QgbWN0cF9mbG93ICpmbG93KVxuNzI1MDpcdHtcbjcyNTE6XHRcdGlmICghZmxvdy1cdTAwM2VrZXkpXG43MjUyOlx0XHRcdHJldHVybjtcbjcyNTM6XHRcbjcyNTQ6XHRcdG1jdHBfa2V5X3VucmVmKGZsb3ctXHUwMDNla2V5KTtcbjcyNTU6XHRcdGZsb3ctXHUwMDNla2V5ID0gTlVMTDtcbjcyNTY6XHR9XG43MjU3Olx0I2VuZGlmXG43MjU4Olx0XG43MjU5Olx0dm9pZCBfX3NrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcbjcyNjA6XHR7XG43MjYxOlx0XHRzdHJ1Y3Qgc2tiX2V4dCAqZXh0ID0gc2tiLVx1MDAzZWV4dGVuc2lvbnM7XG43MjYyOlx0XG43MjYzOlx0XHRza2ItXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgXHUwMDI2PSB+KDEgXHUwMDNjXHUwMDNjIGlkKTtcbjcyNjQ6XHRcdGlmIChza2ItXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgPT0gMCkge1xuNzI2NTpcdFx0XHRza2ItXHUwMDNlZXh0ZW5zaW9ucyA9IE5VTEw7XG43MjY2Olx0XHRcdF9fc2tiX2V4dF9wdXQoZXh0KTtcbjcyNjc6XHRcdFx0cmV0dXJuO1xuNzI2ODpcdFx0fVxuNzI2OTpcdFxuNzI3MDpcdFx0aWYgKHJlZmNvdW50X3JlYWQoXHUwMDI2ZXh0LVx1MDAzZXJlZmNudCkgXHUwMDNlIDEpXG43MjcxOlx0XHRcdHJldHVybjtcbjcyNzI6XHRcbjcyNzM6XHQjaWZkZWYgQ09ORklHX1hGUk1cbjcyNzQ6XHRcdGlmIChpZCA9PSBTS0JfRVhUX1NFQ19QQVRIKVxuNzI3NTpcdFx0XHRza2JfZXh0X3B1dF9zcChza2JfZXh0X2dldF9wdHIoZXh0LCBTS0JfRVhUX1NFQ19QQVRIKSk7XG43Mjc2Olx0I2VuZGlmXG43Mjc3Olx0I2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXG43Mjc4Olx0XHRpZiAoaWQgPT0gU0tCX0VYVF9NQ1RQKVxuNzI3OTpcdFx0XHRza2JfZXh0X3B1dF9tY3RwKHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfTUNUUCkpO1xuNzI4MDpcdCNlbmRpZlxuNzI4MTpcdH1cbjcyODI6XHRFWFBPUlRfU1lNQk9MKF9fc2tiX2V4dF9kZWwpO1xuNzI4MzpcdFxuNzI4NDpcdHZvaWQgX19za2JfZXh0X3B1dChzdHJ1Y3Qgc2tiX2V4dCAqZXh0KVxuNzI4NTpcdHtcbjcyODY6XHRcdC8qIElmIHRoaXMgaXMgbGFzdCBjbG9uZSwgbm90aGluZyBjYW4gaW5jcmVtZW50XG43Mjg3Olx0XHQgKiBpdCBhZnRlciBjaGVjayBwYXNzZXMuICBBdm9pZHMgb25lIGF0b21pYyBvcC5cbjcyODg6XHRcdCAqL1xuNzI4OTpcdFx0aWYgKHJlZmNvdW50X3JlYWQoXHUwMDI2ZXh0LVx1MDAzZXJlZmNudCkgPT0gMSlcbjcyOTA6XHRcdFx0Z290byBmcmVlX25vdztcbjcyOTE6XHRcbjcyOTI6XHRcdGlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmV4dC1cdTAwM2VyZWZjbnQpKVxuNzI5MzpcdFx0XHRyZXR1cm47XG43Mjk0Olx0ZnJlZV9ub3c6XG43Mjk1Olx0I2lmZGVmIENPTkZJR19YRlJNXG43Mjk2Olx0XHRpZiAoX19za2JfZXh0X2V4aXN0KGV4dCwgU0tCX0VYVF9TRUNfUEFUSCkpXG43Mjk3Olx0XHRcdHNrYl9leHRfcHV0X3NwKHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfU0VDX1BBVEgpKTtcbjcyOTg6XHQjZW5kaWZcbjcyOTk6XHQjaWZkZWYgQ09ORklHX01DVFBfRkxPV1NcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAyNgoJCQkJCQkJb3V0cHV0OiAyMTcKCQkJCQkJCXRob3VnaHRzOiA5ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogU0tCIEV4dGVuc2lvbiBDbGVhbnVwKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyBhbmQgd2h5IEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gVGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGNsZWFuaW5nIHVwIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggU0tCIGV4dGVuc2lvbnMsIHNwZWNpZmljYWxseSB3aGVuIGFuIGV4dGVuc2lvbiBpcyByZW1vdmVkIHZpYSBgX19za2JfZXh0X2RlbGAuIFRoZSBmdW5jdGlvbiBgX19za2JfZXh0X2RlbGAgaXMgY2FsbGVkIHdoZW4gYW4gYGlkYCBpcyByZW1vdmVkIGZyb20gdGhlIGBza2JgLiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBhY3RpdmUgZXh0ZW5zaW9ucywgdGhlIGVudGlyZSBleHRlbnNpb24gc3RydWN0dXJlIGdldHMgY2xlYW5lZCB1cCB3aXRoIGBfX3NrYl9leHRfcHV0YCBhbmQgYHNrYi0mZ3Q7ZXh0ZW5zaW9uc2AgaXMgc2V0IHRvIE5VTEwuCgpUaGUgaW50ZXJlc3RpbmcgcGFydCwgZm9yIG91ciBwdXJwb3NlcywgaGFwcGVucyB3aGVuIHRoZXJlIGFyZSAqb3RoZXIqIGFjdGl2ZSBleHRlbnNpb25zIHN0aWxsIG9uIHRoZSBTS0IuICBJZiB0aGUgZXh0ZW5zaW9uJiMzOTtzIHJlZmVyZW5jZSBjb3VudCBpcyAxIChtZWFuaW5nIGl0JiMzOTtzIG5vdCBzaGFyZWQgd2l0aCBhbnkgY2xvbmVkIFNLQnMpLCB0aGVuIHRoZSBwYXRjaCYjMzk7cyBsb2dpYyBraWNrcyBpbi4gUHJldmlvdXNseSwgaXQgaGFuZGxlZCB0aGUgYFNLQl9FWFRfU0VDX1BBVEhgIGJ5IHB1dHRpbmcgdGhlIHhmcm0gc3RhdGVzIGFuZCBjbGVhcmluZyBgc3AtJmd0O2xlbmAuIE5vdyBpdCBhbHNvIGhhbmRsZXMgYFNLQl9FWFRfTUNUUGAgYnkgcHV0dGluZyB0aGUgYGZsb3ctJmd0O2tleWAgYW5kIHNldHRpbmcgYGZsb3ctJmd0O2tleSA9IE5VTExgLiBJbiB0aGUgY29ycmVzcG9uZGluZyBgc2tiX2V4dF9wdXRfc3BgIGFuZCBgc2tiX2V4dF9wdXRfbWN0cGAgZnVuY3Rpb25zLCB0aGVyZSBhcmUgY2hlY2tzIHRvIGF2b2lkIGRvdWJsZS1mcmVlaW5nIHRoZXNlIHJlc291cmNlcy4KClRoZSByYXRpb25hbGUgaXMgY2xlYXI6IHdoZW4gYF9fc2tiX2V4dF9kZWxgIGlzIGNhbGxlZCBmb3IgTUNUUCBvciBYRlJNIGFuZCBvdGhlciBleHRlbnNpb25zIHJlbWFpbiBhY3RpdmUgb24gdGhlIFNLQiwgdGhlIGV4dGVuc2lvbiBzdHJ1Y3R1cmUgaXRzZWxmIHN0YXlzIGF0dGFjaGVkIHRvIHRoZSBTS0IuIEJ1dCwgdGhlIHNwZWNpZmljIGV4dGVuc2lvbiBgaWRgIGlzIGRlbGV0ZWQsIHNvIHRoZSByZXNvdXJjZXMgaXQgd2FzIHVzaW5nIChsaWtlIHRoZSB4ZnJtX3N0YXRlIG9yIG1jdHBfa2V5KSBtdXN0IGJlIHJlbGVhc2VkIHByb21wdGx5ICh3aGVuIHJlZmNvdW50ID09IDEpLCBhdm9pZGluZyBsZWFrcy4gU2V0dGluZyBgc3AtJmd0O2xlbiA9IDBgIC8gYGZsb3ctJmd0O2tleSA9IE5VTExgIHdoZW4gYF9fc2tiX2V4dF9wdXRgIGlzIGxhdGVyIGNhbGxlZCBwcmV2ZW50cyB0aGUgZG91YmxlLWZyZWUvZG91YmxlLXVucmVmIGlzc3VlLgoKTm93LCB0aGUgS01TQU4gcXVlc3Rpb24uICBMZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY3JpdGVyaWE6CgoqICAgKipLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZToqKiBOb3BlLiBUaGlzIHBhdGNoIGlzbiYjMzk7dCB0b3VjaGluZyBhbnkgZGF0YSB0aGF0IGdldHMgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2VyIHNwYWNlLgoqICAgKipCcmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogTm8uIGBzcC0mZ3Q7bGVuYCBhbmQgYGZsb3ctJmd0O2tleWAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIG1lbWJlcnMgb2YgdGhlIGBzZWNfcGF0aGAgYW5kIGBtY3RwX2Zsb3dgIHN0cnVjdHVyZXMuCiogICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHM6KiogTm8uIEl0JiMzOTtzIGZvY3VzZWQgb24gY2xlYW51cCwgbm90IGludHJvZHVjaW5nIG5ldyBjb21wbGV4IHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGRhdGEuCiogICAqKkJvdW5kcyBjaGVja3MvYnVmZmVyIGxlbmd0aHMgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBkYXRhOioqIE5vdCBhcHBsaWNhYmxlLgoKVGhpcyBwYXRjaCBpcyBhYm91dCByZWZlcmVuY2UgY2xlYW51cCwgcmVzb3VyY2UgbWFuYWdlbWVudC4gVGhlIHJpc2tzIGhlcmUgYXJlIHJlc291cmNlIGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBBbGwgdGhlc2UgYXJlIGV4YWN0bHkgdGhlIHR5cGUgb2YgYnVncyB0aGF0IEtBU0FOLCByZWZjb3VudCBjaGVja2luZywgYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlICpkZXNpZ25lZCogdG8gY2F0Y2guIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFRoZXJlZm9yZSwgdGhlcmUmIzM5O3Mgbm8gbmVlZCBmb3IgS01TQU4gaGVyZS4KCkkmIzM5O2xsIHByb2NlZWQgdG8gbWFyayB0aGlzIHdpdGggYE5lZWRzS01TQU46IGZhbHNlYCBhbmQgbWFrZSBzdXJlIHRoZSByZWFzb25pbmcgaXMgY2xlYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX3NrYl9leHRfZGVsKClgIGFuZCBoZWxwZXIgZnVuY3Rpb25zIGBza2JfZXh0X3B1dF9zcCgpYCAvIGBza2JfZXh0X3B1dF9tY3RwKClgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AgdG8gcHJvcGVybHkgcmVsZWFzZSByZWZlcmVuY2VzIChgbWN0cF9rZXlfdW5yZWZgIGFuZCBgeGZybV9zdGF0ZV9wdXRgKSBhbmQgemVybyBvdXQgZmllbGRzIChgc3AtXHUwMDNlbGVuID0gMGAsIGBmbG93LVx1MDAzZWtleSA9IE5VTExgKSB3aGVuIHNrYiBleHRlbnNpb25zIGFyZSByZW1vdmVkLlxuXG5UaGVzZSBjaGFuZ2VzIHBlcnRhaW4gc3RyaWN0bHkgdG8gcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsaWZlY3ljbGUvY2xlYW51cCBtYW5hZ2VtZW50IG9mIHNrYiBleHRlbnNpb24gZGF0YS4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGFsbG9jYXRpb25zLCBkYXRhIGV4cG9zdXJlIHRvIHVzZXIgc3BhY2UsIG9yIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uLiBBbnkgcG90ZW50aWFsIGRlZmVjdHMgaW4gdGhpcyBjb2RlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgdW5yZWYsIG9yIG1lbW9yeSBsZWFrcykgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4gb3Igc3RhbmRhcmQgcmVmY291bnQgdHJhY2tpbmcsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX3NrYl9leHRfZGVsKClgIGFuZCBoZWxwZXIgZnVuY3Rpb25zIGBza2JfZXh0X3B1dF9zcCgpYCAvIGBza2JfZXh0X3B1dF9tY3RwKClgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AgdG8gcHJvcGVybHkgcmVsZWFzZSByZWZlcmVuY2VzIChgbWN0cF9rZXlfdW5yZWZgIGFuZCBgeGZybV9zdGF0ZV9wdXRgKSBhbmQgemVybyBvdXQgZmllbGRzIChgc3AtXHUwMDNlbGVuID0gMGAsIGBmbG93LVx1MDAzZWtleSA9IE5VTExgKSB3aGVuIHNrYiBleHRlbnNpb25zIGFyZSByZW1vdmVkLlxuXG5UaGVzZSBjaGFuZ2VzIHBlcnRhaW4gc3RyaWN0bHkgdG8gcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsaWZlY3ljbGUvY2xlYW51cCBtYW5hZ2VtZW50IG9mIHNrYiBleHRlbnNpb24gZGF0YS4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGFsbG9jYXRpb25zLCBkYXRhIGV4cG9zdXJlIHRvIHVzZXIgc3BhY2UsIG9yIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uLiBBbnkgcG90ZW50aWFsIGRlZmVjdHMgaW4gdGhpcyBjb2RlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgdW5yZWYsIG9yIG1lbW9yeSBsZWFrcykgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4gb3Igc3RhbmRhcmQgcmVmY291bnQgdHJhY2tpbmcsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MTQ6MzkuMTA2ODkwMTY5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkwOTE2NzQyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0tCX0VYVEVOU0lPTlNcIixcbiAgICBcIlhGUk1cIixcbiAgICBcIk1DVFBcIixcbiAgICBcIk1DVFBfRkxPV1NcIixcbiAgICBcIk1DVFBfVFJBTlNQT1JUX0kyQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc2tiX2V4dF9kZWxcIixcbiAgICBcIl9fc2tiX2V4dF9wdXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBfX3NrYl9leHRfZGVsKClgIGFuZCBoZWxwZXIgZnVuY3Rpb25zIGBza2JfZXh0X3B1dF9zcCgpYCAvIGBza2JfZXh0X3B1dF9tY3RwKClgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AgdG8gcHJvcGVybHkgcmVsZWFzZSByZWZlcmVuY2VzIChgbWN0cF9rZXlfdW5yZWZgIGFuZCBgeGZybV9zdGF0ZV9wdXRgKSBhbmQgemVybyBvdXQgZmllbGRzIChgc3AtXFx1MDAzZWxlbiA9IDBgLCBgZmxvdy1cXHUwMDNla2V5ID0gTlVMTGApIHdoZW4gc2tiIGV4dGVuc2lvbnMgYXJlIHJlbW92ZWQuXFxuXFxuVGhlc2UgY2hhbmdlcyBwZXJ0YWluIHN0cmljdGx5IHRvIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbGlmZWN5Y2xlL2NsZWFudXAgbWFuYWdlbWVudCBvZiBza2IgZXh0ZW5zaW9uIGRhdGEuIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgZGF0YSBleHBvc3VyZSB0byB1c2VyIHNwYWNlLCBvciB2YXJpYWJsZSBpbml0aWFsaXphdGlvbi4gQW55IHBvdGVudGlhbCBkZWZlY3RzIGluIHRoaXMgY29kZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIHVucmVmLCBvciBtZW1vcnkgbGVha3MpIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHJlZmNvdW50IHRyYWNraW5nLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBza2IgZXh0ZW5zaW9uIGRlbGV0aW9uIGFuZCBjbGVhbnVwIGxvZ2ljIGluIGBfX3NrYl9leHRfZGVsYCwgYHNrYl9leHRfcHV0X3NwYCwgYW5kIGBza2JfZXh0X3B1dF9tY3RwYCwgcHJvcGVybHkgaGFuZGxpbmcgcmVmZXJlbmNlIGNvdW50cyBhbmQgcmVzb3VyY2UgZGVhbGxvY2F0aW9uIGZvciBNQ1RQIGZsb3dzIGFuZCBJUHNlYy9YRlJNIHNlY3VyaXR5IHBhdGhzIHdoZW4gcmVtb3ZpbmcgYWN0aXZlIGV4dGVuc2lvbnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoxNDozOS4xMDY4OTQ4MDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjE2MDYyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDljZGM5ZjQ4ZjQxNWE5ZmZlOTIyZTBiMjcxMmFlZjhjZWU1OGJhODhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDc6MTQ6MzggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xcbmluZGV4IDk2NmFmM2JlZWQ5NGQuLmFiMTk1Yjk5Yzg1MzAgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcXG4rKysgYi9uZXQvY29yZS9za2J1ZmYuY1xcbkBAIC03MjM2LDE2ICs3MjM2LDIzIEBAIHN0YXRpYyB2b2lkIHNrYl9leHRfcHV0X3NwKHN0cnVjdCBzZWNfcGF0aCAqc3ApXFxuIHtcXG4gXFx0dW5zaWduZWQgaW50IGk7XFxuIFxcbitcXHRpZiAoIXNwLVxcdTAwM2VsZW4pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzcC1cXHUwMDNlbGVuOyBpKyspXFxuIFxcdFxcdHhmcm1fc3RhdGVfcHV0KHNwLVxcdTAwM2V4dmVjW2ldKTtcXG4rXFx0c3AtXFx1MDAzZWxlbiA9IDA7XFxuIH1cXG4gI2VuZGlmXFxuIFxcbiAjaWZkZWYgQ09ORklHX01DVFBfRkxPV1NcXG4gc3RhdGljIHZvaWQgc2tiX2V4dF9wdXRfbWN0cChzdHJ1Y3QgbWN0cF9mbG93ICpmbG93KVxcbiB7XFxuLVxcdGlmIChmbG93LVxcdTAwM2VrZXkpXFxuLVxcdFxcdG1jdHBfa2V5X3VucmVmKGZsb3ctXFx1MDAzZWtleSk7XFxuK1xcdGlmICghZmxvdy1cXHUwMDNla2V5KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRtY3RwX2tleV91bnJlZihmbG93LVxcdTAwM2VrZXkpO1xcbitcXHRmbG93LVxcdTAwM2VrZXkgPSBOVUxMO1xcbiB9XFxuICNlbmRpZlxcbiBcXG5AQCAtNzI1NywxNSArNzI2NCwyMCBAQCB2b2lkIF9fc2tiX2V4dF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxcbiBcXHRpZiAoc2tiLVxcdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyA9PSAwKSB7XFxuIFxcdFxcdHNrYi1cXHUwMDNlZXh0ZW5zaW9ucyA9IE5VTEw7XFxuIFxcdFxcdF9fc2tiX2V4dF9wdXQoZXh0KTtcXG4tI2lmZGVmIENPTkZJR19YRlJNXFxuLVxcdH0gZWxzZSBpZiAoaWQgPT0gU0tCX0VYVF9TRUNfUEFUSCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICByZWZjb3VudF9yZWFkKFxcdTAwMjZleHQtXFx1MDAzZXJlZmNudCkgPT0gMSkge1xcbi1cXHRcXHRzdHJ1Y3Qgc2VjX3BhdGggKnNwID0gc2tiX2V4dF9nZXRfcHRyKGV4dCwgU0tCX0VYVF9TRUNfUEFUSCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbiBcXG4tXFx0XFx0c2tiX2V4dF9wdXRfc3Aoc3ApO1xcbi1cXHRcXHRzcC1cXHUwMDNlbGVuID0gMDtcXG4rXFx0aWYgKHJlZmNvdW50X3JlYWQoXFx1MDAyNmV4dC1cXHUwMDNlcmVmY250KSBcXHUwMDNlIDEpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuKyNpZmRlZiBDT05GSUdfWEZSTVxcbitcXHRpZiAoaWQgPT0gU0tCX0VYVF9TRUNfUEFUSClcXG4rXFx0XFx0c2tiX2V4dF9wdXRfc3Aoc2tiX2V4dF9nZXRfcHRyKGV4dCwgU0tCX0VYVF9TRUNfUEFUSCkpO1xcbisjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXFxuK1xcdGlmIChpZCA9PSBTS0JfRVhUX01DVFApXFxuK1xcdFxcdHNrYl9leHRfcHV0X21jdHAoc2tiX2V4dF9nZXRfcHRyKGV4dCwgU0tCX0VYVF9NQ1RQKSk7XFxuICNlbmRpZlxcbi1cXHR9XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChfX3NrYl9leHRfZGVsKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjE0OjM5LjUzOTczMDkzN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzU2MjY0MjYzMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0tCX0VYVEVOU0lPTlNcIixcbiAgICBcIlhGUk1cIixcbiAgICBcIk1DVFBcIixcbiAgICBcIk1DVFBfRkxPV1NcIixcbiAgICBcIk1DVFBfVFJBTlNQT1JUX0kyQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc2tiX2V4dF9kZWxcIixcbiAgICBcIl9fc2tiX2V4dF9wdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHNrYiBleHRlbnNpb24gZGVsZXRpb24gYW5kIGNsZWFudXAgbG9naWMgaW4gYF9fc2tiX2V4dF9kZWxgLCBgc2tiX2V4dF9wdXRfc3BgLCBhbmQgYHNrYl9leHRfcHV0X21jdHBgLCBwcm9wZXJseSBoYW5kbGluZyByZWZlcmVuY2UgY291bnRzIGFuZCByZXNvdXJjZSBkZWFsbG9jYXRpb24gZm9yIE1DVFAgZmxvd3MgYW5kIElQc2VjL1hGUk0gc2VjdXJpdHkgcGF0aHMgd2hlbiByZW1vdmluZyBhY3RpdmUgZXh0ZW5zaW9ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDljZGM5ZjQ4ZjQxNWE5ZmZlOTIyZTBiMjcxMmFlZjhjZWU1OGJhODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwNzoxNDozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IDk2NmFmM2JlZWQ5NGQuLmFiMTk1Yjk5Yzg1MzAgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC03MjM2LDE2ICs3MjM2LDIzIEBAIHN0YXRpYyB2b2lkIHNrYl9leHRfcHV0X3NwKHN0cnVjdCBzZWNfcGF0aCAqc3ApXG4ge1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXG4rXHRpZiAoIXNwLVx1MDAzZWxlbilcbitcdFx0cmV0dXJuO1xuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3AtXHUwMDNlbGVuOyBpKyspXG4gXHRcdHhmcm1fc3RhdGVfcHV0KHNwLVx1MDAzZXh2ZWNbaV0pO1xuK1x0c3AtXHUwMDNlbGVuID0gMDtcbiB9XG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXG4gc3RhdGljIHZvaWQgc2tiX2V4dF9wdXRfbWN0cChzdHJ1Y3QgbWN0cF9mbG93ICpmbG93KVxuIHtcbi1cdGlmIChmbG93LVx1MDAzZWtleSlcbi1cdFx0bWN0cF9rZXlfdW5yZWYoZmxvdy1cdTAwM2VrZXkpO1xuK1x0aWYgKCFmbG93LVx1MDAzZWtleSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0bWN0cF9rZXlfdW5yZWYoZmxvdy1cdTAwM2VrZXkpO1xuK1x0Zmxvdy1cdTAwM2VrZXkgPSBOVUxMO1xuIH1cbiAjZW5kaWZcbiBcbkBAIC03MjU3LDE1ICs3MjY0LDIwIEBAIHZvaWQgX19za2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpXG4gXHRpZiAoc2tiLVx1MDAzZWFjdGl2ZV9leHRlbnNpb25zID09IDApIHtcbiBcdFx0c2tiLVx1MDAzZWV4dGVuc2lvbnMgPSBOVUxMO1xuIFx0XHRfX3NrYl9leHRfcHV0KGV4dCk7XG4tI2lmZGVmIENPTkZJR19YRlJNXG4tXHR9IGVsc2UgaWYgKGlkID09IFNLQl9FWFRfU0VDX1BBVEggXHUwMDI2XHUwMDI2XG4tXHRcdCAgIHJlZmNvdW50X3JlYWQoXHUwMDI2ZXh0LVx1MDAzZXJlZmNudCkgPT0gMSkge1xuLVx0XHRzdHJ1Y3Qgc2VjX3BhdGggKnNwID0gc2tiX2V4dF9nZXRfcHRyKGV4dCwgU0tCX0VYVF9TRUNfUEFUSCk7XG4rXHRcdHJldHVybjtcbitcdH1cbiBcbi1cdFx0c2tiX2V4dF9wdXRfc3Aoc3ApO1xuLVx0XHRzcC1cdTAwM2VsZW4gPSAwO1xuK1x0aWYgKHJlZmNvdW50X3JlYWQoXHUwMDI2ZXh0LVx1MDAzZXJlZmNudCkgXHUwMDNlIDEpXG4rXHRcdHJldHVybjtcbitcbisjaWZkZWYgQ09ORklHX1hGUk1cbitcdGlmIChpZCA9PSBTS0JfRVhUX1NFQ19QQVRIKVxuK1x0XHRza2JfZXh0X3B1dF9zcChza2JfZXh0X2dldF9wdHIoZXh0LCBTS0JfRVhUX1NFQ19QQVRIKSk7XG4rI2VuZGlmXG4rI2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXG4rXHRpZiAoaWQgPT0gU0tCX0VYVF9NQ1RQKVxuK1x0XHRza2JfZXh0X3B1dF9tY3RwKHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfTUNUUCkpO1xuICNlbmRpZlxuLVx0fVxuIH1cbiBFWFBPUlRfU1lNQk9MKF9fc2tiX2V4dF9kZWwpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MTQ6MzkuNTM5NzMyNDk3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM1OTY3MjQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoaXMgcGF0Y2gsIGFzIGlmIEkgd2VyZSBwcm9jZXNzaW5nIGl0IG15c2VsZjpcblxuKipQYXRjaCBBbmFseXNpcyBhbmQgQ29udGV4dHVhbCBSZXZpZXcqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvY29yZS9za2J1ZmYuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcywgcGFydGljdWxhcmx5IHNpbmNlIGl0IHNlZW1zIHRvIGJlIGFmZmVjdGluZyBgc2tiX2V4dF9wdXRfc3BgLCBgc2tiX2V4dF9wdXRfbWN0cGAsIGFuZCBgX19za2JfZXh0X2RlbGAuIFRob3NlIGZ1bmN0aW9ucyBhcmUga2V5LCBzbyBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gZ3Jhc3AgdGhlaXIgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgU0tCIChTb2NrZXQgQnVmZmVyKSBhcmNoaXRlY3R1cmUuIEknbGwgbmVlZCB0byByZW1lbWJlciBob3cgZXh0ZW5zaW9ucyBhbmQgbWV0YWRhdGEgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBTS0Igc3RydWN0dXJlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IHNvbWUgbW9yZSBpbmZvIG9uIGV4YWN0bHkgd2hhdCdzIGJlaW5nIHR3ZWFrZWQuIEknbGwgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIHRoZSBhcmVhIG9mIGBuZXQvY29yZS9za2J1ZmYuY2AgYXJvdW5kIGxpbmUgNzIzNi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW1tZWRpYXRlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHBpbnBvaW50IHByZWNpc2VseSB3aGVyZSB0aGUgY2hhbmdlcyBhcmUgYmVpbmcgbWFkZSwgc28gSSBjYW4gc3RhcnQgZm9ybXVsYXRpbmcgYSBoeXBvdGhlc2lzIGFib3V0IHdoYXQgdGhlIHBhdGNoIGlzIHRyeWluZyB0byBhY2hpZXZlIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gSSBhbnRpY2lwYXRlIHRoYXQgdGhlIGNvZGUgaW4gdGhlIGltbWVkaWF0ZSB2aWNpbml0eSBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoxNDo0NC44OTk0MDg2NjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDczMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzIyMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzIyMDpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG43MjIxOlxcdFxcdH1cXG43MjIyOlxcdFxcbjcyMjM6XFx0XFx0bmV3bGVuID0gbmV3b2ZmICsgc2tiX2V4dF90eXBlX2xlbltpZF07XFxuNzIyNDpcXHRcXHRuZXctXFx1MDAzZWNodW5rcyA9IG5ld2xlbjtcXG43MjI1OlxcdFxcdG5ldy1cXHUwMDNlb2Zmc2V0W2lkXSA9IG5ld29mZjtcXG43MjI2OlxcdHNldF9hY3RpdmU6XFxuNzIyNzpcXHRcXHRza2ItXFx1MDAzZXNsb3dfZ3JvID0gMTtcXG43MjI4OlxcdFxcdHNrYi1cXHUwMDNlZXh0ZW5zaW9ucyA9IG5ldztcXG43MjI5OlxcdFxcdHNrYi1cXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgfD0gMSBcXHUwMDNjXFx1MDAzYyBpZDtcXG43MjMwOlxcdFxcdHJldHVybiBza2JfZXh0X2dldF9wdHIobmV3LCBpZCk7XFxuNzIzMTpcXHR9XFxuNzIzMjpcXHRFWFBPUlRfU1lNQk9MKHNrYl9leHRfYWRkKTtcXG43MjMzOlxcdFxcbjcyMzQ6XFx0I2lmZGVmIENPTkZJR19YRlJNXFxuNzIzNTpcXHRzdGF0aWMgdm9pZCBza2JfZXh0X3B1dF9zcChzdHJ1Y3Qgc2VjX3BhdGggKnNwKVxcbjcyMzY6XFx0e1xcbjcyMzc6XFx0XFx0dW5zaWduZWQgaW50IGk7XFxuNzIzODpcXHRcXG43MjM5OlxcdFxcdGlmICghc3AtXFx1MDAzZWxlbilcXG43MjQwOlxcdFxcdFxcdHJldHVybjtcXG43MjQxOlxcdFxcbjcyNDI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNwLVxcdTAwM2VsZW47IGkrKylcXG43MjQzOlxcdFxcdFxcdHhmcm1fc3RhdGVfcHV0KHNwLVxcdTAwM2V4dmVjW2ldKTtcXG43MjQ0OlxcdFxcdHNwLVxcdTAwM2VsZW4gPSAwO1xcbjcyNDU6XFx0fVxcbjcyNDY6XFx0I2VuZGlmXFxuNzI0NzpcXHRcXG43MjQ4OlxcdCNpZmRlZiBDT05GSUdfTUNUUF9GTE9XU1xcbjcyNDk6XFx0c3RhdGljIHZvaWQgc2tiX2V4dF9wdXRfbWN0cChzdHJ1Y3QgbWN0cF9mbG93ICpmbG93KVxcbjcyNTA6XFx0e1xcbjcyNTE6XFx0XFx0aWYgKCFmbG93LVxcdTAwM2VrZXkpXFxuNzI1MjpcXHRcXHRcXHRyZXR1cm47XFxuNzI1MzpcXHRcXG43MjU0OlxcdFxcdG1jdHBfa2V5X3VucmVmKGZsb3ctXFx1MDAzZWtleSk7XFxuNzI1NTpcXHRcXHRmbG93LVxcdTAwM2VrZXkgPSBOVUxMO1xcbjcyNTY6XFx0fVxcbjcyNTc6XFx0I2VuZGlmXFxuNzI1ODpcXHRcXG43MjU5OlxcdHZvaWQgX19za2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpXFxuNzI2MDpcXHR7XFxuNzI2MTpcXHRcXHRzdHJ1Y3Qgc2tiX2V4dCAqZXh0ID0gc2tiLVxcdTAwM2VleHRlbnNpb25zO1xcbjcyNjI6XFx0XFxuNzI2MzpcXHRcXHRza2ItXFx1MDAzZWFjdGl2ZV9leHRlbnNpb25zIFxcdTAwMjY9IH4oMSBcXHUwMDNjXFx1MDAzYyBpZCk7XFxuNzI2NDpcXHRcXHRpZiAoc2tiLVxcdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyA9PSAwKSB7XFxuNzI2NTpcXHRcXHRcXHRza2ItXFx1MDAzZWV4dGVuc2lvbnMgPSBOVUxMO1xcbjcyNjY6XFx0XFx0XFx0X19za2JfZXh0X3B1dChleHQpO1xcbjcyNjc6XFx0XFx0XFx0cmV0dXJuO1xcbjcyNjg6XFx0XFx0fVxcbjcyNjk6XFx0XFxuNzI3MDpcXHRcXHRpZiAocmVmY291bnRfcmVhZChcXHUwMDI2ZXh0LVxcdTAwM2VyZWZjbnQpIFxcdTAwM2UgMSlcXG43MjcxOlxcdFxcdFxcdHJldHVybjtcXG43MjcyOlxcdFxcbjcyNzM6XFx0I2lmZGVmIENPTkZJR19YRlJNXFxuNzI3NDpcXHRcXHRpZiAoaWQgPT0gU0tCX0VYVF9TRUNfUEFUSClcXG43Mjc1OlxcdFxcdFxcdHNrYl9leHRfcHV0X3NwKHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfU0VDX1BBVEgpKTtcXG43Mjc2OlxcdCNlbmRpZlxcbjcyNzc6XFx0I2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXFxuNzI3ODpcXHRcXHRpZiAoaWQgPT0gU0tCX0VYVF9NQ1RQKVxcbjcyNzk6XFx0XFx0XFx0c2tiX2V4dF9wdXRfbWN0cChza2JfZXh0X2dldF9wdHIoZXh0LCBTS0JfRVhUX01DVFApKTtcXG43MjgwOlxcdCNlbmRpZlxcbjcyODE6XFx0fVxcbjcyODI6XFx0RVhQT1JUX1NZTUJPTChfX3NrYl9leHRfZGVsKTtcXG43MjgzOlxcdFxcbjcyODQ6XFx0dm9pZCBfX3NrYl9leHRfcHV0KHN0cnVjdCBza2JfZXh0ICpleHQpXFxuNzI4NTpcXHR7XFxuNzI4NjpcXHRcXHQvKiBJZiB0aGlzIGlzIGxhc3QgY2xvbmUsIG5vdGhpbmcgY2FuIGluY3JlbWVudFxcbjcyODc6XFx0XFx0ICogaXQgYWZ0ZXIgY2hlY2sgcGFzc2VzLiAgQXZvaWRzIG9uZSBhdG9taWMgb3AuXFxuNzI4ODpcXHRcXHQgKi9cXG43Mjg5OlxcdFxcdGlmIChyZWZjb3VudF9yZWFkKFxcdTAwMjZleHQtXFx1MDAzZXJlZmNudCkgPT0gMSlcXG43MjkwOlxcdFxcdFxcdGdvdG8gZnJlZV9ub3c7XFxuNzI5MTpcXHRcXG43MjkyOlxcdFxcdGlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZleHQtXFx1MDAzZXJlZmNudCkpXFxuNzI5MzpcXHRcXHRcXHRyZXR1cm47XFxuNzI5NDpcXHRmcmVlX25vdzpcXG43Mjk1OlxcdCNpZmRlZiBDT05GSUdfWEZSTVxcbjcyOTY6XFx0XFx0aWYgKF9fc2tiX2V4dF9leGlzdChleHQsIFNLQl9FWFRfU0VDX1BBVEgpKVxcbjcyOTc6XFx0XFx0XFx0c2tiX2V4dF9wdXRfc3Aoc2tiX2V4dF9nZXRfcHRyKGV4dCwgU0tCX0VYVF9TRUNfUEFUSCkpO1xcbjcyOTg6XFx0I2VuZGlmXFxuNzI5OTpcXHQjaWZkZWYgQ09ORklHX01DVFBfRkxPV1NcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MTQ6NDQuODk5NjU4NDUyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEyMTEwNzg4NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIElzc3VlcyB3aXRoIGBfX3NrYl9leHRfZGVsYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYF9fc2tiX2V4dF9kZWxgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgYWxsIHRoZSBjYWxsZXJzIG9mIGBfX3NrYl9leHRfZGVsYCBhbmQgYHNrYl9leHRfZGVsYCBkaXJlY3RseS4gVGhhdCdzIHRoZSBtb3N0IG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgdG8gc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCBhbmQsIHRoZXJlZm9yZSwgd2hlcmUgYW55IGlzc3VlcyBtaWdodCBtYW5pZmVzdC5cblxuQmV5b25kIGEgZGlyZWN0IGNhbGwgYW5hbHlzaXMsIEkgc2hvdWxkIGNvbnNpZGVyIHRoZSBicm9hZGVyIGNvbnRleHQgb2Ygc29tZSByZWxldmFudCBjb25maWd1cmF0aW9ucywgc3BlY2lmaWNhbGx5IGhvdyB0aGlzIG1pZ2h0IGludGVyYWN0IHdpdGggU2VjdXJpdHkgQ29udGV4dHMsIGFuZCBwb3RlbnRpYWxseSB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgTXVsdGljYXN0IERhdGEgQ2hhbm5lbCBvdmVyIFRyYW5zcG9ydCBQcm90b2NvbCwgb3IgTUNUUCBmbG93cywgYW5kIGFsc28gd2l0aCBYRlJNLCBhbmQgU0tCIEV4dGVuc2lvbnMuXG5cblRvIHN0YXJ0LCBJJ2xsIG5lZWQgdG8gcnVuIGEgYGdyZXBgIGZvciBib3RoIGBfX3NrYl9leHRfZGVsYCBhbmQgYHNrYl9leHRfZGVsYCB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZS4gSSBuZWVkIHRvIGJlIHRob3JvdWdoIGFuZCBwcmVjaXNlIHRvIGlkZW50aWZ5IGFsbCBpbnN0YW5jZXMuIFRoaXMgd2lsbCBob3BlZnVsbHkgcHJvdmlkZSBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBpdHMgdXNhZ2UgYW5kIGFzc2lzdCBpbiBwaW5wb2ludGluZyB0aGUgY3JpdGljYWwgYXJlYXMgdG8gZm9jdXMgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMDgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjE0OjU2LjExMDc0MDA0NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI3MDcyNTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9leHRfZGVsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmg9NTA4Mz12b2lkICpza2JfZXh0X2FkZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA4NDp2b2lkIF9fc2tiX2V4dF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwODUtdm9pZCBfX3NrYl9leHRfcHV0KHN0cnVjdCBza2JfZXh0ICpleHQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MTE3PXN0YXRpYyBpbmxpbmUgYm9vbCBza2JfZXh0X2V4aXN0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEyMS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxMjI6c3RhdGljIGlubGluZSB2b2lkIHNrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMjMte1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEyNC1cXHRpZiAoc2tiX2V4dF9leGlzdChza2IsIGlkKSlcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxMjU6XFx0XFx0X19za2JfZXh0X2RlbChza2IsIGlkKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMjYtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MTU0PXN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X3Jlc2V0KHN0cnVjdCBza19idWZmICpza2IpIHt9XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTU1OnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdW51c2VkKSB7fVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTE1Ni1zdGF0aWMgaW5saW5lIHZvaWQgX19za2JfZXh0X2NvcHkoc3RydWN0IHNrX2J1ZmYgKmQsIGNvbnN0IHN0cnVjdCBza19idWZmICpzKSB7fVxcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oPTExOTc9c2VjcGF0aF9yZXNldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oLTExOTktI2lmZGVmIENPTkZJR19YRlJNXFxuaW5jbHVkZS9uZXQveGZybS5oOjEyMDA6XFx0c2tiX2V4dF9kZWwoc2tiLCBTS0JfRVhUX1NFQ19QQVRIKTtcXG5pbmNsdWRlL25ldC94ZnJtLmgtMTIwMS0jZW5kaWZcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTU1PXN0YXRpYyB2b2lkIG5mX2JyaWRnZV9pbmZvX2ZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE1Ni17XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxNTc6XFx0c2tiX2V4dF9kZWwoc2tiLCBTS0JfRVhUX0JSSURHRV9ORik7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xNTgtfVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NzI0OT1zdGF0aWMgdm9pZCBza2JfZXh0X3B1dF9tY3RwKHN0cnVjdCBtY3RwX2Zsb3cgKmZsb3cpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03MjU4LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjcyNTk6dm9pZCBfX3NrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcXG5uZXQvY29yZS9za2J1ZmYuYy03MjYwLXtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcyODEtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjcyODI6RVhQT1JUX1NZTUJPTChfX3NrYl9leHRfZGVsKTtcXG5uZXQvY29yZS9za2J1ZmYuYy03MjgzLVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0xMTEzPXN0YXRpYyBlbnVtIG1hcHBpbmdfc3RhdHVzIGdldF9tYXBwaW5nX3N0YXR1cyhzdHJ1Y3Qgc29jayAqc3NrLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xMTc0LVxcdFxcdFxcdFxcdCAqL1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTE3NTpcXHRcXHRcXHRcXHRza2JfZXh0X2RlbChza2IsIFNLQl9FWFRfTVBUQ1ApO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTE3Ni1cXHRcXHRcXHRcXHRyZXR1cm4gTUFQUElOR19PSztcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTIwOS1cXHRcXHQgICAgc3ViZmxvdy1cXHUwMDNlbWFwX2NzdW1fcmVxZCA9PSBtcGV4dC1cXHUwMDNlY3N1bV9yZXFkKSB7XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxMjEwOlxcdFxcdFxcdHNrYl9leHRfZGVsKHNrYiwgU0tCX0VYVF9NUFRDUCk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0xMjExLVxcdFxcdFxcdGdvdG8gdmFsaWRhdGVfY3N1bTtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTI1My1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjEyNTQ6XFx0c2tiX2V4dF9kZWwoc2tiLCBTS0JfRVhUX01QVENQKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEyNTUtXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTE4MjA9aW50IHRjZl9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19hcGkuYy0xODY3LVxcdFxcdFxcdC8qIENvbnN1bWUsIHNvIGNsb25lZC9yZWRpcmVjdCBza2JzIHdvbid0IGluaGVyaXQgZXh0ICovXFxubmV0L3NjaGVkL2Nsc19hcGkuYzoxODY4OlxcdFxcdFxcdHNrYl9leHRfZGVsKHNrYiwgVENfU0tCX0VYVCk7XFxubmV0L3NjaGVkL2Nsc19hcGkuYy0xODY5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoxNDo1Ny42Mzc4MTcwNjFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTQ3NzU1MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0tCIEV4dGVuc2lvbiBEZWxldGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgd2UncmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgbW9kaWZpZXMgaG93IHdlIGhhbmRsZSBTS0IgKFNvY2tldCBCdWZmZXIpIGV4dGVuc2lvbnMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBfX3NrYl9leHRfZGVsYCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgaGFzIGEgY291cGxlIG9mIGNvbmRpdGlvbmFsIGJsb2Nrcywgb25lIGRlYWxpbmcgd2l0aCBgU0tCX0VYVF9TRUNfUEFUSGAgKHNlY3VyaXR5IHBhdGggZXh0ZW5zaW9ucyksIGFuZCBpdCBsb29rcyBsaWtlIGEgc2ltaWxhciBjb25kaXRpb25hbCBpcyBiZWluZyBhZGRlZCBmb3IgYE1DVFBgIGZsb3dzLlxuXG5UaGUgY29yZSBjaGFuZ2UgaW4gYF9fc2tiX2V4dF9kZWxgIHNlZW1zIHRvIGJlIGFyb3VuZCBob3cgd2UgZGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgYW5kIHdoZW4gd2UgYWN0dWFsbHkgcmVsZWFzZSB0aGUgZXh0ZW5zaW9uIGRhdGEuIEJlZm9yZSwgaWYgYHNrYi1cdTAwM2VhY3RpdmVfZXh0ZW5zaW9uc2AgYmVjYW1lIHplcm8sIGluZGljYXRpbmcgdGhlIGxhc3QgZXh0ZW5zaW9uIHdhcyBiZWluZyByZW1vdmVkLCB3ZSdkIGltbWVkaWF0ZWx5IGNsZWFuIHVwIHRoZSBleHRlbnNpb24gYW5kLCBzcGVjaWZpY2FsbHkgZm9yIGBTS0JfRVhUX1NFQ19QQVRIYCwgcmVzZXQgdGhlIGBzcC1cdTAwM2VsZW5gIGlmIHRoZSByZWZjb3VudCB3YXMgb25lLiBOb3csIHRoZXJlIGFyZSBhZGRpdGlvbmFsIGNoZWNrcyB0byBiYWlsIG91dCBpZiB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBleHRlbnNpb24gYmxvY2sgaXMgZ3JlYXRlciB0aGFuIG9uZS4gVGhlIGNvbmRpdGlvbmFsIGJsb2NrIGZvciBgU0tCX0VYVF9TRUNfUEFUSGAgaGFzIGJlZW4gbW9kaWZpZWQsIGFuZCBhIHNpbWlsYXIgYmxvY2sgaGFzIGJlZW4gYWRkZWQgZm9yIGBNQ1RQX0ZMT1dTYCwgd2hlcmUgd2UgYXJlIG5vdyBoYW5kbGluZyB0aGUgdW5yZWYgYW5kIE5VTExpbmcgb2YgYGZsb3ctXHUwMDNla2V5YC5cblxuVGhlIG1vc3Qgc2lnbmlmaWNhbnQgY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYW4gZWFybHkgcmV0dXJuIGlmIHRoZSByZWZlcmVuY2UgY291bnQgaXMgZ3JlYXRlciB0aGFuIG9uZS4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gb3IgYnVnIGZpeC4gUGVyaGFwcyB3ZSB3ZXJlIHByZW1hdHVyZWx5IHJlbGVhc2luZyBkYXRhIHRoYXQgd2FzIHN0aWxsIGluIHVzZSwgbGVhZGluZyB0byBzb21lIGtpbmQgb2YgY29ycnVwdGlvbiBvciBkb3VibGUtZnJlZSBzaXR1YXRpb24uIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiB3aGVuIHdvcmtpbmcgd2l0aCByZWZlcmVuY2UtY291bnRlZCBtZW1vcnkgbWFuYWdlbWVudC5cblxuSSdtIGFsc28gc2VlaW5nIHNvbWUgYWRkaXRpb25hbCBtb2RpZmljYXRpb25zIGluIGBza2JfZXh0X3B1dF9zcGAgYW5kIGBza2JfZXh0X3B1dF9tY3RwYCwgd2hpY2ggYXJlIHRoZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IHJlbGVhc2luZyB0aGUgc2VjdXJpdHkgcGF0aCBhbmQgTUNUUCBmbG93IGRhdGEsIHJlc3BlY3RpdmVseS4gSW4gdGhlIGBza2JfZXh0X3B1dF9zcGAgZnVuY3Rpb24gdGhlcmUgaXMgbm93IGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgdGhlIHNlY3VyaXR5IHBhdGggaXMgdmFsaWQgYmVmb3JlIHByb2NlZWRpbmcgd2l0aCBpdCdzIGRlbGV0aW9uLiBUaGUgaW1wb3J0YW50IGNoYW5nZSBpbiBgc2tiX2V4dF9wdXRfbWN0cGAgaGFuZGxlcyB0aGUgdW5yZWZlcmVuY2luZyBhbmQgbnVsbGluZyBvZiB0aGUgYGZsb3ctXHUwMDNla2V5YCwgYW5kIGdpdmVuIHRoYXQgdGhpcyBzZWN0aW9uIG9mIGNvZGUgaXMgbmV3LCBpdCBpcyBsaWtlbHkgbGlua2VkIHRvIHRoZSBhZGRpdGlvbiBvZiBgTUNUUF9GTE9XU2AgaW50byB0aGUgYF9fc2tiX2V4dF9kZWxgIGZ1bmN0aW9uLlxuXG5JIHNob3VsZCBwcm9iYWJseSBhbHNvIHRha2UgYSBxdWljayBsb29rIGF0IGBfX3NrYl9leHRfcHV0YCB0byBlbnN1cmUgdGhhdCB0aGlzIHBhdGNoIGlzIGNvbnNpc3RlbnQgd2l0aCBob3cgdGhlIFNLQiBleHRlbnNpb25zIGFyZSBiZWluZyBtYW5hZ2VkIGFjcm9zcyB0aGUgYm9hcmQuIE92ZXJhbGwsIHRoaXMgbG9va3MgbGlrZSBhIGNhcmVmdWwgcmVmaW5lbWVudCBvZiB0aGUgU0tCIGV4dGVuc2lvbiBtYW5hZ2VtZW50LCBsaWtlbHkgYWltaW5nIGZvciBpbmNyZWFzZWQgcm9idXN0bmVzcyBhbmQgcG90ZW50aWFsbHkgYWRkcmVzc2luZyBhIHN1YnRsZSBjb25jdXJyZW5jeSBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY3MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoxNTowMi4xODU1NzQ4NDZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzI1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzI5MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzI5MDpcXHRcXHRcXHRnb3RvIGZyZWVfbm93O1xcbjcyOTE6XFx0XFxuNzI5MjpcXHRcXHRpZiAoIXJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2ZXh0LVxcdTAwM2VyZWZjbnQpKVxcbjcyOTM6XFx0XFx0XFx0cmV0dXJuO1xcbjcyOTQ6XFx0ZnJlZV9ub3c6XFxuNzI5NTpcXHQjaWZkZWYgQ09ORklHX1hGUk1cXG43Mjk2OlxcdFxcdGlmIChfX3NrYl9leHRfZXhpc3QoZXh0LCBTS0JfRVhUX1NFQ19QQVRIKSlcXG43Mjk3OlxcdFxcdFxcdHNrYl9leHRfcHV0X3NwKHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfU0VDX1BBVEgpKTtcXG43Mjk4OlxcdCNlbmRpZlxcbjcyOTk6XFx0I2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXFxuNzMwMDpcXHRcXHRpZiAoX19za2JfZXh0X2V4aXN0KGV4dCwgU0tCX0VYVF9NQ1RQKSlcXG43MzAxOlxcdFxcdFxcdHNrYl9leHRfcHV0X21jdHAoc2tiX2V4dF9nZXRfcHRyKGV4dCwgU0tCX0VYVF9NQ1RQKSk7XFxuNzMwMjpcXHQjZW5kaWZcXG43MzAzOlxcdFxcbjczMDQ6XFx0XFx0a21lbV9jYWNoZV9mcmVlKHNrYnVmZl9leHRfY2FjaGUsIGV4dCk7XFxuNzMwNTpcXHR9XFxuNzMwNjpcXHRFWFBPUlRfU1lNQk9MKF9fc2tiX2V4dF9wdXQpO1xcbjczMDc6XFx0I2VuZGlmIC8qIENPTkZJR19TS0JfRVhURU5TSU9OUyAqL1xcbjczMDg6XFx0XFxuNzMwOTpcXHRzdGF0aWMgdm9pZCBrZnJlZV9za2JfbmFwaV9jYWNoZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjczMTA6XFx0e1xcbjczMTE6XFx0XFx0LyogaWYgU0tCIGlzIGEgY2xvbmUsIGRvbid0IGhhbmRsZSB0aGlzIGNhc2UgKi9cXG43MzEyOlxcdFxcdGlmIChza2ItXFx1MDAzZWZjbG9uZSAhPSBTS0JfRkNMT05FX1VOQVZBSUxBQkxFKSB7XFxuNzMxMzpcXHRcXHRcXHRfX2tmcmVlX3NrYihza2IpO1xcbjczMTQ6XFx0XFx0XFx0cmV0dXJuO1xcbjczMTU6XFx0XFx0fVxcbjczMTY6XFx0XFxuNzMxNzpcXHRcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuNzMxODpcXHRcXHRfX25hcGlfa2ZyZWVfc2tiKHNrYiwgU0tCX0NPTlNVTUVEKTtcXG43MzE5OlxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoxNTowMi4xODU4NDk2NTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTU3MzQ4MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgS2NvbmZpZyBMYW5kc2NhcGUqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UgcmVsYXRlZCB0byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gTGV0J3Mgc3RhcnQgd2l0aCBhIHF1aWNrIHNjYW4uIE9rYXksIGxvb2tzIGxpa2Ugd2UgaGF2ZSBgQ09ORklHX1NLQl9FWFRFTlNJT05TYCwgYENPTkZJR19YRlJNYCwgYENPTkZJR19NQ1RQX0ZMT1dTYCwgYW5kIGBDT05GSUdfTUNUUGAuIFRoZXNlIHNlZW0gbGlrZSB0aGUga2V5IHBsYXllcnMuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGVzZSBjb25maWd1cmF0aW9ucyAqYWN0dWFsbHkqIGRvLCBzbyBJIHNob3VsZCBkaXZlIGludG8gdGhlIEtjb25maWcgZGVmaW5pdGlvbnMgZm9yIGBTS0JfRVhURU5TSU9OU2AsIGBNQ1RQX0ZMT1dTYCwgYW5kIGBYRlJNYCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZWlyIHB1cnBvc2UuIFRoaXMnbGwgaGVscCBtZSBmaWd1cmUgb3V0IGhvdyB0aGV5IGludGVyYWN0IGFuZCB0aGUgaW1wYWN0IG9mIGVhY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNDYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjE1OjA1LjM0MzIwMDAzM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxMTM2NDMwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgKFNLQl9FWFRFTlNJT05TfE1DVFBfRkxPV1N8TUNUUHxYRlJNKVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tY3RwL0tjb25maWc9ND1tZW51IFxcXCJNQ1RQIERldmljZSBEcml2ZXJzXFxcIlxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy01LVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzo2OmNvbmZpZyBNQ1RQX1NFUklBTFxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJNQ1RQIHNlcmlhbCB0cmFuc3BvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctMjMtXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjI0OmNvbmZpZyBNQ1RQX1NFUklBTF9URVNUXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTI1LSAgICAgICAgYm9vbCBcXFwiTUNUUCBzZXJpYWwgdGVzdHNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy0yOC1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6Mjk6Y29uZmlnIE1DVFBfVFJBTlNQT1JUX0kyQ1xcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy0zMC1cXHR0cmlzdGF0ZSBcXFwiTUNUUCBTTUJ1cy9JMkMgdHJhbnNwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTQwLVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzo0MTpjb25maWcgTUNUUF9UUkFOU1BPUlRfSTNDXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTQyLVxcdHRyaXN0YXRlIFxcXCJNQ1RQIEkzQyB0cmFuc3BvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNDktXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjUwOmNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJcXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNTEtXFx0dHJpc3RhdGUgXFxcIk1DVFAgb3ZlciBVU0IgY29tbW9uIGxpYnJhcnlcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNTktXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjYwOmNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVFxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy02MS0gICAgICAgIGJvb2wgXFxcIk1DVFAgdXNibGliIHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNjQtXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjY1OmNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JcXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNjYtXFx0dHJpc3RhdGUgXFxcIk1DVFAgVVNCIHRyYW5zcG9ydFxcXCJcXG4tLVxcbm5ldC9LY29uZmlnPTYzPWNvbmZpZyBTS0JfREVDUllQVEVEXFxuLS1cXG5uZXQvS2NvbmZpZy02NS1cXG5uZXQvS2NvbmZpZzo2Njpjb25maWcgU0tCX0VYVEVOU0lPTlNcXG5uZXQvS2NvbmZpZy02Ny1cXHRib29sXFxuLS1cXG5uZXQvbWN0cC9LY29uZmlnLTEtXFxubmV0L21jdHAvS2NvbmZpZzoyOm1lbnVjb25maWcgTUNUUFxcbm5ldC9tY3RwL0tjb25maWctMy1cXHRkZXBlbmRzIG9uIE5FVFxcbi0tXFxubmV0L21jdHAvS2NvbmZpZy0xNC1cXG5uZXQvbWN0cC9LY29uZmlnOjE1OmNvbmZpZyBNQ1RQX1RFU1RcXG5uZXQvbWN0cC9LY29uZmlnLTE2LSAgICAgICAgYm9vbCBcXFwiTUNUUCBjb3JlIHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5uZXQvbWN0cC9LY29uZmlnLTIwLVxcbm5ldC9tY3RwL0tjb25maWc6MjE6Y29uZmlnIE1DVFBfRkxPV1NcXG5uZXQvbWN0cC9LY29uZmlnLTIyLVxcdGJvb2xcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNC0jXFxubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXFxubmV0L3hmcm0vS2NvbmZpZy02LVxcdGJvb2xcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTAtXFxubmV0L3hmcm0vS2NvbmZpZzoxMTpjb25maWcgWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cXHRib29sXFxubmV0L3hmcm0vS2NvbmZpZy0xMy1cXG5uZXQveGZybS9LY29uZmlnOjE0OmNvbmZpZyBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTIyPWlmIElORVRcXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcXG5uZXQveGZybS9LY29uZmlnLTI0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0zMS1cXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcGF0aWJsZSBBQkkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNDItXFxubmV0L3hmcm0vS2NvbmZpZzo0Mzpjb25maWcgWEZSTV9JTlRFUkZBQ0VcXG5uZXQveGZybS9LY29uZmlnLTQ0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB2aXJ0dWFsIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNTAtXFxubmV0L3hmcm0vS2NvbmZpZzo1MTpjb25maWcgWEZSTV9TVUJfUE9MSUNZXFxubmV0L3hmcm0vS2NvbmZpZy01Mi1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTYwLVxcbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctNjItXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNzEtXFxubmV0L3hmcm0vS2NvbmZpZzo3Mjpjb25maWcgWEZSTV9TVEFUSVNUSUNTXFxubmV0L3hmcm0vS2NvbmZpZy03My1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdGF0aXN0aWNzXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy04My0jIFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmUgaW1wbGVtZW50ZWQuXFxubmV0L3hmcm0vS2NvbmZpZzo4NDpjb25maWcgWEZSTV9BSFxcbm5ldC94ZnJtL0tjb25maWctODUtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctOTItIyBhbGdvcml0aG1zIHRoYXQgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cXG5uZXQveGZybS9LY29uZmlnOjkzOmNvbmZpZyBYRlJNX0VTUFxcbm5ldC94ZnJtL0tjb25maWctOTQtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTA1LVxcbm5ldC94ZnJtL0tjb25maWc6MTA2OmNvbmZpZyBYRlJNX0lQQ09NUFxcbm5ldC94ZnJtL0tjb25maWctMTA3LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTE0MC1cXG5uZXQveGZybS9LY29uZmlnOjE0MTpjb25maWcgWEZSTV9JUFRGU1xcbm5ldC94ZnJtL0tjb25maWctMTQyLVxcdHRyaXN0YXRlIFxcXCJJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTU2LVxcbm5ldC94ZnJtL0tjb25maWc6MTU3OmNvbmZpZyBYRlJNX0VTUElOVENQXFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoxNTowNy41NTQ1NzIyNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTA0MTY2OTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIERlcGVuZGVuY2llcyBhbmQgSW50ZXJzZWN0aW9ucyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW50ZXJhY3Rpb25zIG9mIGEgZmV3IGtleSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzZWUgd2hpY2ggb3RoZXIgb3B0aW9ucyBhcmUgYWN0aXZhdGVkIG9yIHJlcXVpcmVkIHdoZW4gYENPTkZJR19NQ1RQX0ZMT1dTYCwgYENPTkZJR19TS0JfRVhURU5TSU9OU2AsIGFuZCBgQ09ORklHX1hGUk1gIGFyZSBlbmFibGVkLiBJJ20gbG9va2luZyBmb3IgdGhlIHJpcHBsZSBlZmZlY3RzIOKAkyB3aGljaCBmZWF0dXJlcyBhcmUgcHVsbGVkIGluLCB3aGljaCBhc3N1bXB0aW9ucyBhcmUgbWFkZSwgYW5kIHVsdGltYXRlbHksIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyIGFyY2hpdGVjdHVyYWxseS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBvcHRpbWl6aW5nIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgdHJvdWJsZXNob290aW5nIGNvbmZsaWN0cywgYW5kIGdhaW5pbmcgYSBjb21wcmVoZW5zaXZlIGdyYXNwIG9mIHRoZSBzeXN0ZW0ncyBkZXNpZ24uIEknbSBleHBlY3Rpbmcgc29tZSBpbnRlcmVzdGluZyBjb25uZWN0aW9ucywgZXNwZWNpYWxseSBhcm91bmQgbmV0d29yayBpbmZyYXN0cnVjdHVyZSwgYnV0IEknbGwgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMgdG8ga25vdyB3aGF0IGlzIGVuYWJsZWQvZGlzYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwNDQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoxNTowOS42NTg3NDA4NDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDk3MTIyODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IChTS0JfRVhURU5TSU9OU3xNQ1RQX0ZMT1dTfFhGUk0pXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MTk0PWNvbmZpZyBJWEdCRV9JUFNFQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0xOTgtXFx0ZGVmYXVsdCB5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoxOTk6XFx0c2VsZWN0IFhGUk1fQUxHT1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjAwLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjIwPWNvbmZpZyBJWEdCRVZGX0lQU0VDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIyNC1cXHRkZWZhdWx0IHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjIyNTpcXHRzZWxlY3QgWEZSTV9BTEdPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yMjYtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnPTI5PWNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JMkNcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy0zNC1cXHRkZXBlbmRzIG9uIEkyQ19TTEFWRVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzozNTpcXHRzZWxlY3QgTUNUUF9GTE9XU1xcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy0zNi1cXHRoZWxwXFxuLS1cXG5uZXQvS2NvbmZpZz0yMzE9Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcXG4tLVxcbm5ldC9LY29uZmlnLTIzNi1cXHRzZWxlY3QgTkVURklMVEVSX0ZBTUlMWV9CUklER0VcXG5uZXQvS2NvbmZpZzoyMzc6XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxubmV0L0tjb25maWctMjM4LVxcdGhlbHBcXG4tLVxcbm5ldC9jYW4vS2NvbmZpZz02PW1lbnVjb25maWcgQ0FOXFxubmV0L2Nhbi9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIkNBTiBidXMgc3Vic3lzdGVtIHN1cHBvcnRcXFwiXFxubmV0L2Nhbi9LY29uZmlnOjg6XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxubmV0L2Nhbi9LY29uZmlnLTktXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zMDQ9Y29uZmlnIE5FVF9JUFZUSVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zMDctXFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnOjMwODpcXHRzZWxlY3QgWEZSTVxcbm5ldC9pcHY0L0tjb25maWctMzA5LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzM5PWNvbmZpZyBJTkVUX0FIXFxubmV0L2lwdjQvS2NvbmZpZy0zNDAtXFx0dHJpc3RhdGUgXFxcIklQOiBBSCB0cmFuc2Zvcm1hdGlvblxcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjM0MTpcXHRzZWxlY3QgWEZSTV9BSFxcbm5ldC9pcHY0L0tjb25maWctMzQyLVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzU0PWNvbmZpZyBJTkVUX0VTUFxcbm5ldC9pcHY0L0tjb25maWctMzU1LVxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uXFxcIlxcbm5ldC9pcHY0L0tjb25maWc6MzU2OlxcdHNlbGVjdCBYRlJNX0VTUFxcbm5ldC9pcHY0L0tjb25maWctMzU3LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzY5PWNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM3MS1cXHRkZXBlbmRzIG9uIElORVRfRVNQXFxubmV0L2lwdjQvS2NvbmZpZzozNzI6XFx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxcbm5ldC9pcHY0L0tjb25maWctMzczLVxcdGRlZmF1bHQgblxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzg2LVxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2NC9LY29uZmlnOjM4NzpcXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbm5ldC9pcHY0L0tjb25maWctMzg4LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9Mzk0PWNvbmZpZyBJTkVUX0lQQ09NUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zOTYtXFx0c2VsZWN0IElORVRfWEZSTV9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnOjM5NzpcXHRzZWxlY3QgWEZSTV9JUENPTVBcXG5uZXQvaXB2NC9LY29uZmlnLTM5OC1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTQ3PWNvbmZpZyBJTkVUNl9BSFxcbm5ldC9pcHY2L0tjb25maWctNDgtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEFIIHRyYW5zZm9ybWF0aW9uXFxcIlxcbm5ldC9pcHY2L0tjb25maWc6NDk6XFx0c2VsZWN0IFhGUk1fQUhcXG5uZXQvaXB2Ni9LY29uZmlnLTUwLVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9NjI9Y29uZmlnIElORVQ2X0VTUFxcbm5ldC9pcHY2L0tjb25maWctNjMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG5uZXQvaXB2Ni9LY29uZmlnOjY0OlxcdHNlbGVjdCBYRlJNX0VTUFxcbm5ldC9pcHY2L0tjb25maWctNjUtXFx0aGVscFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz03Nz1jb25maWcgSU5FVDZfRVNQX09GRkxPQURcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctNzktXFx0ZGVwZW5kcyBvbiBJTkVUNl9FU1BcXG5uZXQvaXB2Ni9LY29uZmlnOjgwOlxcdHNlbGVjdCBYRlJNX09GRkxPQURcXG5uZXQvaXB2Ni9LY29uZmlnLTgxLVxcdGRlZmF1bHQgblxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctOTQtXFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY2L0tjb25maWc6OTU6XFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG5uZXQvaXB2Ni9LY29uZmlnLTk2LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTA0LVxcdHNlbGVjdCBJTkVUNl9YRlJNX1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWc6MTA1OlxcdHNlbGVjdCBYRlJNX0lQQ09NUFxcbm5ldC9pcHY2L0tjb25maWctMTA2LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTEyPWNvbmZpZyBJUFY2X01JUDZcXG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogTW9iaWxpdHlcXFwiXFxubmV0L2lwdjYvS2NvbmZpZzoxMTQ6XFx0c2VsZWN0IFhGUk1cXG5uZXQvaXB2Ni9LY29uZmlnLTExNS1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE1MD1jb25maWcgSVBWNl9WVElcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTUzLVxcdHNlbGVjdCBORVRfSVBfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZzoxNTQ6XFx0c2VsZWN0IFhGUk1cXG5uZXQvaXB2Ni9LY29uZmlnLTE1NS1cXHRoZWxwXFxuLS1cXG5uZXQvbWN0cC9LY29uZmlnPTE1PWNvbmZpZyBNQ1RQX1RFU1RcXG5uZXQvbWN0cC9LY29uZmlnLTE2LSAgICAgICAgYm9vbCBcXFwiTUNUUCBjb3JlIHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxubmV0L21jdHAvS2NvbmZpZzoxNzogICAgICAgIHNlbGVjdCBNQ1RQX0ZMT1dTXFxubmV0L21jdHAvS2NvbmZpZy0xOC0gICAgICAgIGRlcGVuZHMgb24gTUNUUD15IFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4tLVxcbm5ldC9tY3RwL0tjb25maWc9MjE9Y29uZmlnIE1DVFBfRkxPV1NcXG4tLVxcbm5ldC9tY3RwL0tjb25maWctMjMtXFx0ZGVwZW5kcyBvbiBNQ1RQXFxubmV0L21jdHAvS2NvbmZpZzoyNDpcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnPTI9Y29uZmlnIE1QVENQXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy00LVxcdGRlcGVuZHMgb24gSU5FVFxcbm5ldC9tcHRjcC9LY29uZmlnOjU6XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxubmV0L21wdGNwL0tjb25maWctNi1cXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcXG4tLVxcbm5ldC9wc3AvS2NvbmZpZz01PWNvbmZpZyBJTkVUX1BTUFxcbi0tXFxubmV0L3BzcC9LY29uZmlnLTgtXFx0c2VsZWN0IFNLQl9ERUNSWVBURURcXG5uZXQvcHNwL0tjb25maWc6OTpcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG5uZXQvcHNwL0tjb25maWctMTAtXFx0c2VsZWN0IFNPQ0tfVkFMSURBVEVfWE1JVFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWc9OTU0PWNvbmZpZyBORVRfVENfU0tCX0VYVFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctOTU2LVxcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcXG5uZXQvc2NoZWQvS2NvbmZpZzo5NTc6XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxubmV0L3NjaGVkL0tjb25maWctOTU4LVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz01PWNvbmZpZyBYRlJNXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTgtXFx0c2VsZWN0IEdST19DRUxMU1xcbm5ldC94ZnJtL0tjb25maWc6OTpcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG5uZXQveGZybS9LY29uZmlnLTEwLVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0xND1jb25maWcgWEZSTV9BTEdPXFxubmV0L3hmcm0vS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZVxcbm5ldC94ZnJtL0tjb25maWc6MTY6XFx0c2VsZWN0IFhGUk1cXG5uZXQveGZybS9LY29uZmlnLTE3LVxcdHNlbGVjdCBDUllQVE9cXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9MjM9Y29uZmlnIFhGUk1fVVNFUlxcbm5ldC94ZnJtL0tjb25maWctMjQtXFx0dHJpc3RhdGUgXFxcIlRyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcXFwiXFxubmV0L3hmcm0vS2NvbmZpZzoyNTpcXHRzZWxlY3QgWEZSTV9BTEdPXFxubmV0L3hmcm0vS2NvbmZpZy0yNi1cXHRoZWxwXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTg0PWNvbmZpZyBYRlJNX0FIXFxubmV0L3hmcm0vS2NvbmZpZy04NS1cXHR0cmlzdGF0ZVxcbm5ldC94ZnJtL0tjb25maWc6ODY6XFx0c2VsZWN0IFhGUk1fQUxHT1xcbm5ldC94ZnJtL0tjb25maWctODctXFx0c2VsZWN0IENSWVBUT1xcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz05Mz1jb25maWcgWEZSTV9FU1BcXG5uZXQveGZybS9LY29uZmlnLTk0LVxcdHRyaXN0YXRlXFxubmV0L3hmcm0vS2NvbmZpZzo5NTpcXHRzZWxlY3QgWEZSTV9BTEdPXFxubmV0L3hmcm0vS2NvbmZpZy05Ni1cXHRzZWxlY3QgQ1JZUFRPXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTEwNj1jb25maWcgWEZSTV9JUENPTVBcXG5uZXQveGZybS9LY29uZmlnLTEwNy1cXHR0cmlzdGF0ZVxcbm5ldC94ZnJtL0tjb25maWc6MTA4OlxcdHNlbGVjdCBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTEwOS1cXHRzZWxlY3QgQ1JZUFRPXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTExMj1jb25maWcgTkVUX0tFWVxcbm5ldC94ZnJtL0tjb25maWctMTEzLVxcdHRyaXN0YXRlIFxcXCJQRl9LRVkgc29ja2V0cyAoZGVwcmVjYXRlZClcXFwiXFxubmV0L3hmcm0vS2NvbmZpZzoxMTQ6XFx0c2VsZWN0IFhGUk1fQUxHT1xcbm5ldC94ZnJtL0tjb25maWctMTE1LVxcdGhlbHBcXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9MTI1PWNvbmZpZyBORVRfS0VZX01JR1JBVEVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTI3LVxcdGRlcGVuZHMgb24gTkVUX0tFWVxcbm5ldC94ZnJtL0tjb25maWc6MTI4OlxcdHNlbGVjdCBYRlJNX01JR1JBVEVcXG5uZXQveGZybS9LY29uZmlnLTEyOS1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjE1OjExLjc2ODQ1OTk5OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3Mjc3MzU1MDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBOZXR3b3JraW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGZpeCBhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaWNzLiBJdCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgYF9fc2tiX2V4dF9kZWxgIGFuZCBhIGNvdXBsZSBvZiBoZWxwZXIgZnVuY3Rpb25zLCBgc2tiX2V4dF9wdXRfc3BgIGFuZCBgc2tiX2V4dF9wdXRfbWN0cGAuIEVzc2VudGlhbGx5LCBpdCBjb25jZXJucyB0aGUgZGVsZXRpb24gb2YgZXh0ZW5zaW9ucyBmcm9tIGEgc29ja2V0IGJ1ZmZlciAoc2tiKS4gVGhlIGNvcmUgbG9naWMgaW4gYF9fc2tiX2V4dF9kZWxgIGlzIHdoYXQgaW50ZXJlc3RzIG1lOiB3aGVuIGFuIGV4dGVuc2lvbiBpcyByZW1vdmVkLCBpdCBjaGVja3MgaWYgYGFjdGl2ZV9leHRlbnNpb25zYCBoaXRzIHplcm8uIElmIGl0IGRvZXMsIGBfX3NrYl9leHRfcHV0KGV4dClgIGlzIGNhbGxlZCwgd2hpY2ggaGFuZGxlcyByZXNvdXJjZSByZWxlYXNlLiBJZiBgYWN0aXZlX2V4dGVuc2lvbnNgIGlzIG5vbi16ZXJvLCBidXQgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBkb3duIHRvIDEgKG1lYW5pbmcgdGhlIGN1cnJlbnQgc2tiIGhhcyBleGNsdXNpdmUgYWNjZXNzKSwgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlbW92ZWQgZXh0ZW5zaW9uIGFyZSBleHBsaWNpdGx5IGZyZWVkLlxuXG5Ob3csIGhlcmUncyB0aGUga2lja2VyOiBBcHBhcmVudGx5LCB0aGUgTUNUUCBleHRlbnNpb24gKGBTS0JfRVhUX01DVFBgKSB3YXNuJ3QgaGFuZGxlZCBpbiBgX19za2JfZXh0X2RlbGAgcHJldmlvdXNseS4gVGhhdCBtZWFucyByZW1vdmluZyBpdCBpbiBjZXJ0YWluIHNjZW5hcmlvcyB3b3VsZCBsZWFkIHRvIGEgbWVtb3J5IGxlYWsgYmVjYXVzZSBgZmxvdy1cdTAwM2VrZXlgIHdhc24ndCBiZWluZyB1bnJlZmVyZW5jZWQuIFRoYXQncyBhIGRlZmluaXRlIG92ZXJzaWdodCEgVGhpcyBwYXRjaCBjb3JyZWN0cyB0aGF0LiBJdCB1bnJlZnMgdGhlIGZsb3cga2V5IHdoZW4gZGVsZXRpbmcgYW4gTUNUUCBleHRlbnNpb24uXG5cbkknbSBhbHNvIHNlZWluZyBzb21lIG1pbm9yIHR3ZWFrcyB0byBgc2tiX2V4dF9wdXRfc3BgLCBlYXJseSByZXR1cm5zIHdoZW4gYHNwLVx1MDAzZWxlbiA9PSAwYCBhbmQgc2V0dGluZyBsZW4gdG8gemVybyBpbnRlcm5hbGx5LiBBbHNvLCB3aXRoaW4gYHNrYl9leHRfcHV0X21jdHBgLCBgZmxvdy1cdTAwM2VrZXlgIGlzIHVucmVmZXJlbmNlZCBhbmQgc2V0IHRvIGBOVUxMYC5cblxuQWxyaWdodCwgdGhlIG5leHQgc3RlcCBpcyB0byBldmFsdWF0ZSBpdHMgZnV6emFiaWxpdHkuIERvZXMgdGhpcyBjaGFuZ2UgYWZmZWN0IHNpZ25pZmljYW50IGNvcmUga2VybmVsIGxvZ2ljPyBZZXMsIGl0IGRvZXMuIFdlJ3JlIGxvb2tpbmcgYXQgYG5ldC9jb3JlL3NrYnVmZi5jYCwgcGFydGljdWxhcmx5IGBfX3NrYl9leHRfZGVsYCwgd2hpY2ggaXMgaW50ZWdyYWwgdG8gc2tiIGV4dGVuc2lvbiBtYW5hZ2VtZW50IGFuZCwgaW1wb3J0YW50bHksIHRvdWNoZXMgWEZSTS9JUHNlYyBhbmQgTUNUUCBzdWJzeXN0ZW1zLiBBbmQgeWVzLCB0aGlzIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIGluIFFFTVUgYW5kIEdDRSwgbWFraW5nIGl0IHN1aXRhYmxlIGZvciBmdXp6aW5nIHZpYSBzdGFuZGFyZCBuZXR3b3JraW5nLCBJUHNlYywgYW5kIE1DVFAuIEl0J3Mgbm90IGp1c3QgY29tbWVudHMgb3IgdHJpdmlhbCBjaGFuZ2VzLCBpdCBpbnZvbHZlcyBmdW5jdGlvbmFsIHJlZmNvdW50aW5nIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBjb3JyZWN0aW9ucy4gRnVydGhlcm1vcmUsIGBfX3NrYl9leHRfZGVsYCBpc24ndCBzdGF0aWMgYW5kIGlzIGV4cG9ydGVkLiBBbHNvIGBza2JfZXh0X2RlbGAgaXMgaW5saW5lLCBzbyBpdCBjYWxscyB0aGUgZnVuY3Rpb24gZGlyZWN0bHkuIGBzZWNwYXRoX3Jlc2V0YCBhbHNvIGNhbGxzIGBza2JfZXh0X2RlbChza2IsIFNLQl9FWFRfU0VDX1BBVEgpYC4gTm93IEkgbmVlZCB0byBjaGVjayB3aGVyZSBgU0tCX0VYVF9NQ1RQYCBpcyBiZWluZyBhZGRlZC9kZWxldGVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgdGhlIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3MjEsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MTU6MTkuMDQ1ODE3MzgyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTEwMDMxODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNLQl9FWFRfTUNUUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tY3RwL21jdHAtaTJjLmM9MzY2PW1jdHBfaTJjX2dldF90eF9mbG93X3N0YXRlKHN0cnVjdCBtY3RwX2kyY19kZXYgKm1pZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLWkyYy5jLTM3Mi1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtaTJjLmM6MzczOlxcdGZsb3cgPSBza2JfZXh0X2ZpbmQoc2tiLCBTS0JfRVhUX01DVFApO1xcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1pMmMuYy0zNzQtXFx0aWYgKCFmbG93KVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLWkyYy5jPTQ1ND1zdGF0aWMgdm9pZCBtY3RwX2kyY19pbnZhbGlkYXRlX3R4X2Zsb3coc3RydWN0IG1jdHBfaTJjX2RldiAqbWlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtaTJjLmMtNDYxLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1pMmMuYzo0NjI6XFx0ZmxvdyA9IHNrYl9leHRfZmluZChza2IsIFNLQl9FWFRfTUNUUCk7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLWkyYy5jLTQ2My1cXHRpZiAoIWZsb3cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTUwMzg9ZW51bSBza2JfZXh0X2lkIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA1MS0jaWYgSVNfRU5BQkxFRChDT05GSUdfTUNUUF9GTE9XUylcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwNTI6XFx0U0tCX0VYVF9NQ1RQLFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA1My0jZW5kaWZcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTUxNTA9c3RhdGljIGNvbnN0IHU4IHNrYl9leHRfdHlwZV9sZW5bXSA9IHtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTUxNjMtI2lmIElTX0VOQUJMRUQoQ09ORklHX01DVFBfRkxPV1MpXFxubmV0L2NvcmUvc2tidWZmLmM6NTE2NDpcXHRbU0tCX0VYVF9NQ1RQXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IG1jdHBfZmxvdyksXFxubmV0L2NvcmUvc2tidWZmLmMtNTE2NS0jZW5kaWZcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTcxMjQ9c3RhdGljIHN0cnVjdCBza2JfZXh0ICpza2JfZXh0X21heWJlX2NvdyhzdHJ1Y3Qgc2tiX2V4dCAqb2xkLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzE0OC0jaWZkZWYgQ09ORklHX01DVFBfRkxPV1NcXG5uZXQvY29yZS9za2J1ZmYuYzo3MTQ5OlxcdGlmIChvbGRfYWN0aXZlIFxcdTAwMjYgKDEgXFx1MDAzY1xcdTAwM2MgU0tCX0VYVF9NQ1RQKSkge1xcbm5ldC9jb3JlL3NrYnVmZi5jOjcxNTA6XFx0XFx0c3RydWN0IG1jdHBfZmxvdyAqZmxvdyA9IHNrYl9leHRfZ2V0X3B0cihvbGQsIFNLQl9FWFRfTUNUUCk7XFxubmV0L2NvcmUvc2tidWZmLmMtNzE1MS1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTcyNTk9dm9pZCBfX3NrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcyNzctI2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXFxubmV0L2NvcmUvc2tidWZmLmM6NzI3ODpcXHRpZiAoaWQgPT0gU0tCX0VYVF9NQ1RQKVxcbm5ldC9jb3JlL3NrYnVmZi5jOjcyNzk6XFx0XFx0c2tiX2V4dF9wdXRfbWN0cChza2JfZXh0X2dldF9wdHIoZXh0LCBTS0JfRVhUX01DVFApKTtcXG5uZXQvY29yZS9za2J1ZmYuYy03MjgwLSNlbmRpZlxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NzI4ND12b2lkIF9fc2tiX2V4dF9wdXQoc3RydWN0IHNrYl9leHQgKmV4dClcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcyOTktI2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXFxubmV0L2NvcmUvc2tidWZmLmM6NzMwMDpcXHRpZiAoX19za2JfZXh0X2V4aXN0KGV4dCwgU0tCX0VYVF9NQ1RQKSlcXG5uZXQvY29yZS9za2J1ZmYuYzo3MzAxOlxcdFxcdHNrYl9leHRfcHV0X21jdHAoc2tiX2V4dF9nZXRfcHRyKGV4dCwgU0tCX0VYVF9NQ1RQKSk7XFxubmV0L2NvcmUvc2tidWZmLmMtNzMwMi0jZW5kaWZcXG4tLVxcbm5ldC9tY3RwL3JvdXRlLmM9MzQ2PXN0YXRpYyB2b2lkIG1jdHBfc2tiX3NldF9mbG93KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtY3RwX3NrX2tleSAqa2V5KVxcbi0tXFxubmV0L21jdHAvcm91dGUuYy0zNDktXFxubmV0L21jdHAvcm91dGUuYzozNTA6XFx0ZmxvdyA9IHNrYl9leHRfYWRkKHNrYiwgU0tCX0VYVF9NQ1RQKTtcXG5uZXQvbWN0cC9yb3V0ZS5jLTM1MS1cXHRpZiAoIWZsb3cpXFxuLS1cXG5uZXQvbWN0cC9yb3V0ZS5jPTM1OD1zdGF0aWMgdm9pZCBtY3RwX2Zsb3dfcHJlcGFyZV9vdXRwdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG1jdHBfZGV2ICpkZXYpXFxuLS1cXG5uZXQvbWN0cC9yb3V0ZS5jLTM2My1cXG5uZXQvbWN0cC9yb3V0ZS5jOjM2NDpcXHRmbG93ID0gc2tiX2V4dF9maW5kKHNrYiwgU0tCX0VYVF9NQ1RQKTtcXG5uZXQvbWN0cC9yb3V0ZS5jLTM2NS1cXHRpZiAoIWZsb3cpXFxuLS1cXG5uZXQvbWN0cC90ZXN0L3JvdXRlLXRlc3QuYz05OTM9c3RhdGljIHZvaWQgbWN0cF90ZXN0X3BhY2tldF9mbG93KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm5ldC9tY3RwL3Rlc3Qvcm91dGUtdGVzdC5jLTEwMTMtXFxubmV0L21jdHAvdGVzdC9yb3V0ZS10ZXN0LmM6MTAxNDpcXHRmbG93ID0gc2tiX2V4dF9maW5kKHNrYjIsIFNLQl9FWFRfTUNUUCk7XFxubmV0L21jdHAvdGVzdC9yb3V0ZS10ZXN0LmMtMTAxNS1cXHRLVU5JVF9BU1NFUlRfTk9UX0VSUl9PUl9OVUxMKHRlc3QsIGZsb3cpO1xcbi0tXFxubmV0L21jdHAvdGVzdC9yb3V0ZS10ZXN0LmM9MTAyNj1zdGF0aWMgdm9pZCBtY3RwX3Rlc3RfZnJhZ21lbnRfZmxvdyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5uZXQvbWN0cC90ZXN0L3JvdXRlLXRlc3QuYy0xMDUxLVxcbm5ldC9tY3RwL3Rlc3Qvcm91dGUtdGVzdC5jOjEwNTI6XFx0Zmxvd3NbMF0gPSBza2JfZXh0X2ZpbmQodHhfc2tic1swXSwgU0tCX0VYVF9NQ1RQKTtcXG5uZXQvbWN0cC90ZXN0L3JvdXRlLXRlc3QuYy0xMDUzLVxcdEtVTklUX0FTU0VSVF9OT1RfRVJSX09SX05VTEwodGVzdCwgZmxvd3NbMF0pO1xcbi0tXFxubmV0L21jdHAvdGVzdC9yb3V0ZS10ZXN0LmMtMTA1Ni1cXG5uZXQvbWN0cC90ZXN0L3JvdXRlLXRlc3QuYzoxMDU3OlxcdGZsb3dzWzFdID0gc2tiX2V4dF9maW5kKHR4X3NrYnNbMV0sIFNLQl9FWFRfTUNUUCk7XFxubmV0L21jdHAvdGVzdC9yb3V0ZS10ZXN0LmMtMTA1OC1cXHRLVU5JVF9BU1NFUlRfTk9UX0VSUl9PUl9OVUxMKHRlc3QsIGZsb3dzWzFdKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MTU6MjAuNTU1ODU1OTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1OTMwNjAwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBzZWNwYXRoX3Jlc2V0YCBhbmQgSXRzIENhbGxlcnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBzZWNwYXRoX3Jlc2V0YC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUgYW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQuIEknbGwgc3RhcnQgYnkgbWFraW5nIHN1cmUgSSBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGBzZWNwYXRoX3Jlc2V0YCAqZG9lcyog4oCTIHRoZSBpbnRlbmRlZCBvdXRjb21lLCB0aGUgaW5wdXRzLCBhbmQgdGhlIGFzc3VtcHRpb25zIGl0IG1ha2VzLiBUaGVuLCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IHRyYWNlIGFsbCB0aGUgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIGtub3cgKndoeSogaXQncyBiZWluZyBjYWxsZWQgZnJvbSBlYWNoIGxvY2F0aW9uLCB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciB0aGUgY2FsbHMsIGFuZCBtb3N0IGltcG9ydGFudGx5LCB3aGF0IHRoZSBleHBlY3RlZCBzdGF0ZSBpcyBiZWZvcmUgYW5kIGFmdGVyIGVhY2ggY2FsbC4gVGhpcyByZXF1aXJlcyB1bmRlcnN0YW5kaW5nIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIGNvZGUuIElzIGl0IHNlY3VyaXR5LXJlbGF0ZWQ/IFdoYXQga2luZCBvZiBkYXRhIGlzIGJlaW5nIGhhbmRsZWQ/IEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBoZWxwIG1lIGdyYXNwIHRoZSBjcml0aWNhbCBwYXRoIHRoYXQgaXMgYmVpbmcgbWFuYWdlZCBieSB0aGlzIGZ1bmN0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGluZWZmaWNpZW5jaWVzLCBvciBhbnkgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMuIFVsdGltYXRlbHksIEkgd2FudCB0byBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGlzIGZ1bmN0aW9uLCBkZXRlcm1pbmUgaWYgaXQncyBiZWluZyB1c2VkIGNvcnJlY3RseSwgYW5kIGlkZW50aWZ5IGFueSBhcmVhcyB0aGF0IG1pZ2h0IHJlcXVpcmUgZnVydGhlciBzY3J1dGlueSBvciBwb3RlbnRpYWwgb3B0aW1pemF0aW9uLiBBIHRob3JvdWdoIGludmVzdGlnYXRpb24gb2YgdGhlIGZ1bmN0aW9uIGFuZCBpdHMgY2FsbGVycyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcGxhY2Ugd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1NTcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoxNToyMi44MTUxNjQ3ODNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjI1NDcyMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VjcGF0aF9yZXNldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvaXBzZWNfcnh0eC5jPTMwNz12b2lkIG1seDVlX2lwc2VjX29mZmxvYWRfaGFuZGxlX3J4X3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX3J4dHguYy0zMzItXFx0XFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX3J4dHguYzozMzM6XFx0XFx0c2VjcGF0aF9yZXNldChza2IpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19yeHR4LmMtMzM0LVxcdFxcdHJldHVybjtcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oPTc5Nz1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX2NsZWFudXBfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC03OTktXFx0c2tiX2RzdF9kcm9wKHNrYik7XFxuaW5jbHVkZS9uZXQvdGNwLmg6ODAwOlxcdHNlY3BhdGhfcmVzZXQoc2tiKTtcXG5pbmNsdWRlL25ldC90Y3AuaC04MDEtfVxcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oPTExOTY9c3RhdGljIGlubGluZSB2b2lkXFxuaW5jbHVkZS9uZXQveGZybS5oOjExOTc6c2VjcGF0aF9yZXNldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbmV0L3hmcm0uaC0xMTk4LXtcXG4tLVxcbmluY2x1ZGUvbmV0L3hmcm0uaD0xMjkwPXN0YXRpYyBpbmxpbmUgaW50IF9feGZybV9wb2xpY3lfY2hlY2syKHN0cnVjdCBzb2NrICpzaywgaW50IGRpcixcXG4tLVxcbmluY2x1ZGUvbmV0L3hmcm0uaC0xMzEzLVxcdFxcdFxcdCAqL1xcbmluY2x1ZGUvbmV0L3hmcm0uaDoxMzE0OlxcdFxcdFxcdHNlY3BhdGhfcmVzZXQoc2tiKTtcXG5pbmNsdWRlL25ldC94ZnJtLmgtMTMxNS1cXHRcXHRcXHRyZXR1cm4gY2hlY2s7XFxuLS1cXG5uZXQvaXB2NC9lc3A0LmM9MjEwPXN0YXRpYyB2b2lkIGVzcF9vdXRwdXRfZG9uZSh2b2lkICpkYXRhLCBpbnQgZXJyKVxcbi0tXFxubmV0L2lwdjQvZXNwNC5jLTIzNi1cXHRcXHRza2JfcHVzaChza2IsIHNrYi1cXHUwMDNlZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHNrYikpO1xcbm5ldC9pcHY0L2VzcDQuYzoyMzc6XFx0XFx0c2VjcGF0aF9yZXNldChza2IpO1xcbm5ldC9pcHY0L2VzcDQuYy0yMzgtXFx0XFx0eGZybV9kZXZfcmVzdW1lKHNrYik7XFxuLS1cXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYz0zMD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmVzcDRfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcXG4tLVxcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTk0LW91dF9yZXNldDpcXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYzo5NTpcXHRzZWNwYXRoX3Jlc2V0KHNrYik7XFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtOTYtb3V0Olxcbi0tXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmM9MjY1PXN0YXRpYyBpbnQgZXNwX3htaXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcXG4tLVxcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTM2OS1cXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYzozNzA6XFx0c2VjcGF0aF9yZXNldChza2IpO1xcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTM3MS1cXG4tLVxcbm5ldC9pcHY2L2VzcDYuYz0yNDU9c3RhdGljIHZvaWQgZXNwX291dHB1dF9kb25lKHZvaWQgKmRhdGEsIGludCBlcnIpXFxuLS1cXG5uZXQvaXB2Ni9lc3A2LmMtMjczLVxcdFxcdHNrYl9wdXNoKHNrYiwgc2tiLVxcdTAwM2VkYXRhIC0gc2tiX21hY19oZWFkZXIoc2tiKSk7XFxubmV0L2lwdjYvZXNwNi5jOjI3NDpcXHRcXHRzZWNwYXRoX3Jlc2V0KHNrYik7XFxubmV0L2lwdjYvZXNwNi5jLTI3NS1cXHRcXHR4ZnJtX2Rldl9yZXN1bWUoc2tiKTtcXG4tLVxcbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jPTUzPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZXNwNl9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbi0tXFxubmV0L2lwdjYvZXNwNl9vZmZsb2FkLmMtMTIzLW91dF9yZXNldDpcXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYzoxMjQ6XFx0c2VjcGF0aF9yZXNldChza2IpO1xcbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jLTEyNS1vdXQ6XFxuLS1cXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYz0zMDM9c3RhdGljIGludCBlc3A2X3htaXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcXG4tLVxcbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jLTM5MC1cXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYzozOTE6XFx0c2VjcGF0aF9yZXNldChza2IpO1xcbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jLTM5Mi1cXG4tLVxcbm5ldC9sMnRwL2wydHBfZXRoLmM9MTA3PXN0YXRpYyB2b2lkIGwydHBfZXRoX2Rldl9yZWN2KHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sIHN0cnVjdCBza19idWZmICpza2IsIGludCBkYXRhX2xlbilcXG4tLVxcbm5ldC9sMnRwL2wydHBfZXRoLmMtMTE0LVxcbm5ldC9sMnRwL2wydHBfZXRoLmM6MTE1OlxcdHNlY3BhdGhfcmVzZXQoc2tiKTtcXG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTExNi1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYz00NjY9aW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxcbi0tXFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTU3Ni1cXHRpZiAoIXNwaSBcXHUwMDI2XFx1MDAyNiB4ZnJtX3BhcnNlX3NwaShza2IsIG5leHRoZHIsIFxcdTAwMjZzcGksIFxcdTAwMjZzZXEpKSB7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjU3NzpcXHRcXHRzZWNwYXRoX3Jlc2V0KHNrYik7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTU3OC1cXHRcXHRYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5IRFJFUlJPUik7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNTg3LVxcdFxcdGlmIChzcC1cXHUwMDNlbGVuID09IFhGUk1fTUFYX0RFUFRIKSB7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjU4ODpcXHRcXHRcXHRzZWNwYXRoX3Jlc2V0KHNrYik7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTU4OS1cXHRcXHRcXHRYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5CVUZGRVJFUlJPUik7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNTk0LVxcdFxcdGlmICh4ID09IE5VTEwpIHtcXG5uZXQveGZybS94ZnJtX2lucHV0LmM6NTk1OlxcdFxcdFxcdHNlY3BhdGhfcmVzZXQoc2tiKTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNTk2LVxcdFxcdFxcdFhGUk1fSU5DX1NUQVRTKG5ldCwgTElOVVhfTUlCX1hGUk1JTk5PU1RBVEVTKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy02MDEtXFx0XFx0aWYgKHVubGlrZWx5KHgtXFx1MDAzZWRpciBcXHUwMDI2XFx1MDAyNiB4LVxcdTAwM2VkaXIgIT0gWEZSTV9TQV9ESVJfSU4pKSB7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjYwMjpcXHRcXHRcXHRzZWNwYXRoX3Jlc2V0KHNrYik7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTYwMy1cXHRcXHRcXHRYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5TVEFURURJUkVSUk9SKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYz0yOTM9c3RhdGljIHZvaWQgeGZybWlfc2NydWJfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgeG5ldClcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy0zMDYtXFx0aXB2c19yZXNldChza2IpO1xcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYzozMDc6XFx0c2VjcGF0aF9yZXNldChza2IpO1xcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy0zMDgtXFx0c2tiX29ycGhhbihza2IpO1xcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYz03NDg9aW50IHhmcm1fb3V0cHV0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNzkwLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NzkxOlxcdHNlY3BhdGhfcmVzZXQoc2tiKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTc5Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MTU6MjQuMzM3NzIwNTMxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcyMDUzODU5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBTS0IgRXh0ZW5zaW9uIE1hbmFnZW1lbnQgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgaW50cmljYWNpZXMgb2YgU0tCIGV4dGVuc2lvbiBtYW5hZ2VtZW50LCBhbmQgSSd2ZSBmbGFnZ2VkIGBfX3NrYl9leHRfZGVsYCBhbmQgYF9fc2tiX2V4dF9wdXRgIGFzIG15IGluaXRpYWwgZm9jdXMgcG9pbnRzLiBUaG9zZSBmdW5jdGlvbnMgYXJlIGRlZmluaXRlbHkgYXQgdGhlIGhlYXJ0IG9mIHRoaXMuIFNpbmNlIEkga25vdyB0aGVzZSBmdW5jdGlvbnMgd29yayB0b2dldGhlciwgSSdsbCBhbHNvIGJlIGNvbnNpZGVyaW5nIGBza2JfZXh0X2FkZGAgYXMgaXQgY291bGQgYWxzbyBiZSBpbXBvcnRhbnQuIE15IG9iamVjdGl2ZSBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSByZWxhdGUgdG8gZGlmZmVyZW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb25maWd1cmF0aW9ucyByZXF1aXJlIHRoZXNlIGZ1bmN0aW9ucy4gVGhlIGtleSBjb25maWdzIEknbSBsb29raW5nIGF0IGFyZSBgQ09ORklHX01DVFBfRkxPV1NgIGFuZCBgQ09ORklHX1hGUk1gLCBzaW5jZSBJIGtub3cgYm90aCBvZiB0aG9zZSBoYXZlIHRvIGRvIHdpdGggbmV0d29yayBkYXRhIGhhbmRsaW5nLiBJJ2xsIG5lZWQgdG8gd29yayBiYWNrd2FyZCBmcm9tIHRob3NlIGNvbmZpZ3MuXG5cbkxldCdzIHNlZSwgYE1DVFBfRkxPV1NgLiBMb29rcyBsaWtlIHRoYXQncyBlbmFibGVkIHRocm91Z2ggdGhlIGBNQ1RQYCBLY29uZmlnIGVudHJ5LiBQZWVraW5nIGF0IGBuZXQvbWN0cC9LY29uZmlnYCwgSSBzZWUgdGhhdCBgTUNUUF9GTE9XU2AgaXMgYSBib29sZWFuIHRoYXQgZGVwZW5kcyBvbiBgTUNUUGAgYW5kICpzZWxlY3RzKiBgU0tCX0VYVEVOU0lPTlNgLiBTbyBmYXIsIHNvIGdvb2QsIGEgY2xlYXIgbGluay4gSXQgbG9va3MgbGlrZSBgTUNUUF9GTE9XU2AgaXMgc2VsZWN0ZWQgYnkgYE1DVFBfVFJBTlNQT1JUX0kyQ2AgYW5kIGBNQ1RQX1RFU1RgLiBgTUNUUF9UUkFOU1BPUlRfSTJDYCBpdHNlbGYgZGVwZW5kcyBvbiBgSTJDX1NMQVZFYCBhbmQgYE1DVFBgLlxuXG5UaGVuIHRoZXJlJ3MgYFhGUk1gLiBUaGF0J3MgYSBiaXQgbW9yZSBpbnZvbHZlZCwgYXMgaXTigJlzIHNlbGVjdGVkIGJ5IGEgd2hvbGUgYnVuY2ggb2YgdGhpbmdzOiBgWEZSTV9BTEdPYCwgYElORVRfQUhgLCBgSU5FVF9FU1BgLCBhbmQgYSBsb3QgbW9yZS4gVGhlIHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBmYWN0IHRoYXQgYFNLQl9FWFRFTlNJT05TYCBpcyBzZWxlY3RlZCBieSBgWEZSTWAgZGlyZWN0bHksIGFzIHdlbGwgYXMgYnkgYE1DVFBfRkxPV1NgLiBGdXJ0aGVyIGludmVzdGlnYXRpb24gbWlnaHQgYmUgbmVlZGVkIG9uIHdoaWNoIGNvbmZpZyBvcHRpb25zIGRlcGVuZCBvbiBgU0tCX0VYVEVOU0lPTlNgIGRpcmVjdGx5LiBgTVBUQ1BgLCBgQlJJREdFX05FVEZJTFRFUmAsIGFuZCBgTkVUX1RDX1NLQl9FWFRgIGFyZSBhbHNvIG9uIHRoZSBsaXN0IG9mIGNvbmZpZ3MgdGhhdCBzZWxlY3QgYFNLQl9FWFRFTlNJT05TYC5cblxuSSdtIG1ha2luZyBhIG1lbnRhbCBub3RlIHRvIGRvdWJsZS1jaGVjayB0aGVzZSByZWxhdGlvbnNoaXBzLCBlbnN1cmluZyBJIGhhdmVuJ3QgbWlzc2VkIGFueSBjcnVjaWFsIGRlcGVuZGVuY2llcyBvciBzaWRlIGVmZmVjdHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbmZpZ3VyYXRpb24gbWF0cml4LCBwYXJ0aWN1bGFybHkgZm9yIGBNQ1RQYCwgYE1DVFBfRkxPV1NgLCBgWEZSTWAsIGBTS0JfRVhURU5TSU9OU2AsIGBNQ1RQX1RSQU5TUE9SVF9JMkNgLCBhbmQgYEkyQ19TTEFWRWAsIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMgb24gdGhlIGJlaGF2aW9yIG9mIHRoZXNlIGV4dGVuc2lvbiBmdW5jdGlvbnMuIEknbGwgc3RhcnQgYnkgZG91YmxlIGNoZWNraW5nIGBNQ1RQX1RSQU5TUE9SVF9JMkNgIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MTQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MTU6MzEuNTQzMTA5MTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2OTQ3OTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1DVFBfVFJBTlNQT1JUX0kyQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tY3RwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnPTI0PWNvbmZpZyBNQ1RQX1NFUklBTF9URVNUXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctMjgtXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjI5OmNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JMkNcXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctMzAtXFx0dHJpc3RhdGUgXFxcIk1DVFAgU01CdXMvSTJDIHRyYW5zcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MTU6MzEuNjQwMDYyNjUyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgyMDk1Mjc4ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBNQ1RQIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMgTUNUUCBuZXR3b3JrIGRyaXZlci4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGBkcml2ZXJzL25ldC9tY3RwL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjkuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlLCB0b3AtbGV2ZWwgc2V0dGluZ3MgYW5kIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdG8gZmluZCB0aGUgZnVuZGFtZW50YWwga25vYnMgYW5kIGxldmVycyB0aGF0IGNvbnRyb2wgd2hldGhlciB0aGlzIGRyaXZlciBpcyBldmVuICppbmNsdWRlZCogaW4gdGhlIGJ1aWxkLCBhbmQgbWF5YmUgc29tZSBvZiBpdHMgYmFzaWMgZmVhdHVyZSBmbGFncy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBlc3NlbnRpYWwgYnVpbGRpbmcgYmxvY2tzIOKAkyB0aGUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIHN1YnN5c3RlbXMsIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCBhbmQgYW55IHBsYXRmb3JtLXNwZWNpZmljIGNvbnN0cmFpbnRzIHRoYXQgYXJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGRyaXZlciBpbnRlZ3JhdGVzIGludG8gdGhlIHN5c3RlbS4gS25vd2luZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgbGV0IG1lIHNlZSB3aGljaCBNQ1RQIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUsIGhvdyB0byBlbmFibGUgdGhlbSwgYW5kIHdoYXQgcGxhdGZvcm0gcmVzb3VyY2VzIGFyZSByZXF1aXJlZC4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBsYXRlciwgd2hlbiBJIHN0YXJ0IGRlYnVnZ2luZyBvciB0cnlpbmcgdG8gb3B0aW1pemUgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDE2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MTU6MzkuODQ5NTkyNzE2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHQgICAgICAgIGJvb2wgXFxcIk1DVFAgc2VyaWFsIHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyNjpcXHQgICAgICAgIGRlcGVuZHMgb24gTUNUUF9TRVJJQUw9eSBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICAyNzpcXHQgICAgICAgIGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JMkNcXG4gIDMwOlxcdFxcdHRyaXN0YXRlIFxcXCJNQ1RQIFNNQnVzL0kyQyB0cmFuc3BvcnRcXFwiXFxuICAzMTpcXHRcXHQjIGkyYy1tdXggaXMgb3B0aW9uYWwsIGJ1dCB3ZSBtdXN0IGJ1aWxkIGFzIGEgbW9kdWxlIGlmIGkyYy1tdXggaXMgYSBtb2R1bGVcXG4gIDMyOlxcdFxcdGRlcGVuZHMgb24gSTJDX01VWCB8fCAhSTJDX01VWFxcbiAgMzM6XFx0XFx0ZGVwZW5kcyBvbiBJMkNcXG4gIDM0OlxcdFxcdGRlcGVuZHMgb24gSTJDX1NMQVZFXFxuICAzNTpcXHRcXHRzZWxlY3QgTUNUUF9GTE9XU1xcbiAgMzY6XFx0XFx0aGVscFxcbiAgMzc6XFx0XFx0ICBQcm92aWRlcyBhIGRyaXZlciB0byBhY2Nlc3MgTUNUUCBkZXZpY2VzIG92ZXIgU01CdXMvSTJDIHRyYW5zcG9ydCxcXG4gIDM4OlxcdFxcdCAgZnJvbSBETVRGIHNwZWNpZmljYXRpb24gRFNQMDIzNy4gQSBNQ1RQIHByb3RvY29sIG5ldHdvcmsgZGV2aWNlIGlzXFxuICAzOTpcXHRcXHQgIGNyZWF0ZWQgZm9yIGVhY2ggSTJDIGJ1cyB0aGF0IGhhcyBiZWVuIGFzc2lnbmVkIGEgbWN0cC1pMmMgZGV2aWNlLlxcbiAgNDA6XFx0XFxuICA0MTpcXHRjb25maWcgTUNUUF9UUkFOU1BPUlRfSTNDXFxuICA0MjpcXHRcXHR0cmlzdGF0ZSBcXFwiTUNUUCBJM0MgdHJhbnNwb3J0XFxcIlxcbiAgNDM6XFx0XFx0ZGVwZW5kcyBvbiBJM0NcXG4gIDQ0OlxcdFxcdGhlbHBcXG4gIDQ1OlxcdFxcdCAgUHJvdmlkZXMgYSBkcml2ZXIgdG8gYWNjZXNzIE1DVFAgZGV2aWNlcyBvdmVyIEkzQyB0cmFuc3BvcnQsXFxuICA0NjpcXHRcXHQgIGZyb20gRE1URiBzcGVjaWZpY2F0aW9uIERTUDAyMzMuXFxuICA0NzpcXHRcXHQgIEEgTUNUUCBwcm90b2NvbCBuZXR3b3JrIGRldmljZSBpcyBjcmVhdGVkIGZvciBlYWNoIEkzQyBidXNcXG4gIDQ4OlxcdFxcdCAgaGF2aW5nIGEgXFxcIm1jdHAtY29udHJvbGxlclxcXCIgZGV2aWNldHJlZSBwcm9wZXJ0eS5cXG4gIDQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoxNTozOS44NDk2NTU4NTZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTUyMzYxMTA4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgS2VybmVsIENvbmZpZ3VyYXRpb24gYW5kIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYENPTkZJR19NQ1RQYCBpcyB1c2VyLWNvbmZpZ3VyYWJsZS4gQSBxdWljayBjaGVjayB3aXRoaW4gYG5ldC9tY3RwL0tjb25maWdgIGNvbmZpcm1zIGl0OyB0aGUgYG1lbnVjb25maWcgTUNUUGAgZW50cnkgd2l0aCBhIGBkZXBlbmRzIG9uIE5FVGAgY2xhdXNlIG1lYW5zIGl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBjYW4gYmUgdG9nZ2xlZC4gTm93LCBJIHNob3VsZCBhbHNvIGZsYWcgaXRzIGRlcGVuZGVuY2llcywgd2hpY2ggaW5jbHVkZSB0aGluZ3MgbGlrZSBgQ09ORklHX01DVFBfRkxPV1NgLCBwb3RlbnRpYWxseSBgQ09ORklHX01DVFBfVFJBTlNQT1JUX0kyQ2AgKHdoaWNoIGxlYWRzIGludG8gYENPTkZJR19JMkNgIGFuZCBgQ09ORklHX0kyQ19TTEFWRWApLCBhbmQgYENPTkZJR19YRlJNYCB3aXRoIGl0cyByZWxhdGVkIGNvbmZpZyBvcHRpb25zIHN1Y2ggYXMgYENPTkZJR19YRlJNX1VTRVJgLCBgQ09ORklHX0lORVRfRVNQYCwgYENPTkZJR19JTkVUX0FIYCwgYENPTkZJR19ORVRfS0VZYC5cblxuTmV4dCwgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBjaGFuZ2VzJyBwb3RlbnRpYWwgZm9yIGZ1enppbmcsIHNwZWNpZmljYWxseSBiYXNlZCBvbiB0aGUgYFdvcnRoRnV6emluZ2AgY3JpdGVyaWEuIFRoZXNlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gY2xlYW51cCBsb2dpYywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgX19za2JfZXh0X2RlbGAsIGBza2JfZXh0X3B1dF9zcGAsIGFuZCBgc2tiX2V4dF9wdXRfbWN0cGAuIFRoZXkncmUgYWRkcmVzc2luZyBpc3N1ZXMgcmVsYXRlZCB0byBkZWxldGluZyBgc2tiYCBleHRlbnNpb25zLCB3aGljaCBpbnZvbHZlcyByZXNldHRpbmcgcmVmZXJlbmNlIGNvdW50cywgcHJvcGVybHkgdW5yZWZlcmVuY2luZyBgZmxvdy1cdTAwM2VrZXlgLCBhbmQgemVyb2luZyBgc3AtXHUwMDNlbGVuYC4gVGhpcyBraW5kIG9mIG1vZGlmaWNhdGlvbiBpbiBjb3JlIGBza2J1ZmZgIGxpZmVjeWNsZSBtYW5hZ2VtZW50LCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggbmV0d29ya2luZywgSVBzZWMsIGFuZCBNQ1RQLCBpcyBwcmltZSBmdXp6aW5nIHRlcnJpdG9yeS4gSXQgYWZmZWN0cyBmdW5kYW1lbnRhbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGF0YSBzdHJ1Y3R1cmVzLiBJdCdzIGZ1bGx5IHRlc3RhYmxlIGFuZCBmdXp6YWJsZSwgc28gYFdvcnRoRnV6emluZ2AgaXMgZGVmaW5pdGVseSB0cnVlLlxuXG5UaGVyZWZvcmUsIG15IGNvbmNsdXNpb25zIGFyZTpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiB0cnVlXG4qICAgYEZvY3VzU3ltYm9sc2A6IEknbGwgZm9jdXMgb24gYF9fc2tiX2V4dF9kZWxgIGFuZCBgX19za2JfZXh0X3B1dGAuXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBJJ2xsIG5lZWQgdG8gZW5hYmxlIGBTS0JfRVhURU5TSU9OU2AsIGBYRlJNYCwgYE1DVFBgLCBgTUNUUF9GTE9XU2AsIGFuZCwgaWYgcmVsZXZhbnQsIGBNQ1RQX1RSQU5TUE9SVF9JMkNgLlxuXG5Ob3csIEkganVzdCBuZWVkIHRvIGNvbnN0cnVjdCB0aGUgYHNldC1yZXN1bHRzYCBjYWxsOlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IHRydWVcbiogICBgRm9jdXNTeW1ib2xzYDogYFtcIl9fc2tiX2V4dF9kZWxcIiwgXCJfX3NrYl9leHRfcHV0XCJdYFxuKiAgIGBFbmFibGVDb25maWdzYDogYFtcIlNLQl9FWFRFTlNJT05TXCIsIFwiWEZSTVwiLCBcIk1DVFBcIiwgXCJNQ1RQX0ZMT1dTXCJdYCAoSSdsbCBrZWVwIGBNQ1RQX1RSQU5TUE9SVF9JMkNgIG9uIHN0YW5kYnkgdW5sZXNzIGl0J3MgZXhwbGljaXRseSBuZWVkZWQpLlxuKiAgIGBSZWFzb25pbmdgOiBDb25jaXNlIGV4cGxhbmF0aW9uLCB3aGljaCBJJ3ZlIGVzc2VudGlhbGx5IGFscmVhZHkgZG9uZS5cblxuTm93IEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzEzLCJPdXRwdXRUb2tlbnMiOjE3NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjE1OjU1LjA4NTc2OTE5MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMzg0NDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTS0JfRVhURU5TSU9OU1wiLFxuICAgIFwiWEZSTVwiLFxuICAgIFwiTUNUUFwiLFxuICAgIFwiTUNUUF9GTE9XU1wiLFxuICAgIFwiTUNUUF9UUkFOU1BPUlRfSTJDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19za2JfZXh0X2RlbFwiLFxuICAgIFwiX19za2JfZXh0X3B1dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgc2tiIGV4dGVuc2lvbiBkZWxldGlvbiBhbmQgY2xlYW51cCBsb2dpYyBpbiBgX19za2JfZXh0X2RlbGAsIGBza2JfZXh0X3B1dF9zcGAsIGFuZCBgc2tiX2V4dF9wdXRfbWN0cGAsIHByb3Blcmx5IGhhbmRsaW5nIHJlZmVyZW5jZSBjb3VudHMgYW5kIHJlc291cmNlIGRlYWxsb2NhdGlvbiBmb3IgTUNUUCBmbG93cyBhbmQgSVBzZWMvWEZSTSBzZWN1cml0eSBwYXRocyB3aGVuIHJlbW92aW5nIGFjdGl2ZSBleHRlbnNpb25zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTS0JfRVhURU5TSU9OU1wiLFxuICAgIFwiWEZSTVwiLFxuICAgIFwiTUNUUFwiLFxuICAgIFwiTUNUUF9GTE9XU1wiLFxuICAgIFwiTUNUUF9UUkFOU1BPUlRfSTJDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19za2JfZXh0X2RlbFwiLFxuICAgIFwiX19za2JfZXh0X3B1dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgc2tiIGV4dGVuc2lvbiBkZWxldGlvbiBhbmQgY2xlYW51cCBsb2dpYyBpbiBgX19za2JfZXh0X2RlbGAsIGBza2JfZXh0X3B1dF9zcGAsIGFuZCBgc2tiX2V4dF9wdXRfbWN0cGAsIHByb3Blcmx5IGhhbmRsaW5nIHJlZmVyZW5jZSBjb3VudHMgYW5kIHJlc291cmNlIGRlYWxsb2NhdGlvbiBmb3IgTUNUUCBmbG93cyBhbmQgSVBzZWMvWEZSTSBzZWN1cml0eSBwYXRocyB3aGVuIHJlbW92aW5nIGFjdGl2ZSBleHRlbnNpb25zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MTU6NTUuMTY2MTYxMjk2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAzMjM5MjI1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjE1OjU1LjE2NjY0MjcyNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEzMDMxOTA2NTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19za2JfZXh0X2RlbCgpYCBhbmQgaGVscGVyIGZ1bmN0aW9ucyBgc2tiX2V4dF9wdXRfc3AoKWAgLyBgc2tiX2V4dF9wdXRfbWN0cCgpYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIHRvIHByb3Blcmx5IHJlbGVhc2UgcmVmZXJlbmNlcyAoYG1jdHBfa2V5X3VucmVmYCBhbmQgYHhmcm1fc3RhdGVfcHV0YCkgYW5kIHplcm8gb3V0IGZpZWxkcyAoYHNwLVxcdTAwM2VsZW4gPSAwYCwgYGZsb3ctXFx1MDAzZWtleSA9IE5VTExgKSB3aGVuIHNrYiBleHRlbnNpb25zIGFyZSByZW1vdmVkLlxcblxcblRoZXNlIGNoYW5nZXMgcGVydGFpbiBzdHJpY3RseSB0byByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmVjeWNsZS9jbGVhbnVwIG1hbmFnZW1lbnQgb2Ygc2tiIGV4dGVuc2lvbiBkYXRhLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgYWxsb2NhdGlvbnMsIGRhdGEgZXhwb3N1cmUgdG8gdXNlciBzcGFjZSwgb3IgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24uIEFueSBwb3RlbnRpYWwgZGVmZWN0cyBpbiB0aGlzIGNvZGUgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSB1bnJlZiwgb3IgbWVtb3J5IGxlYWtzKSBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTiBvciBzdGFuZGFyZCByZWZjb3VudCB0cmFja2luZywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDljZGM5ZjQ4ZjQxNWE5ZmZlOTIyZTBiMjcxMmFlZjhjZWU1OGJhODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwNzoxNDozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IDk2NmFmM2JlZWQ5NGQuLmFiMTk1Yjk5Yzg1MzAgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC03MjM2LDE2ICs3MjM2LDIzIEBAIHN0YXRpYyB2b2lkIHNrYl9leHRfcHV0X3NwKHN0cnVjdCBzZWNfcGF0aCAqc3ApXG4ge1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXG4rXHRpZiAoIXNwLVx1MDAzZWxlbilcbitcdFx0cmV0dXJuO1xuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3AtXHUwMDNlbGVuOyBpKyspXG4gXHRcdHhmcm1fc3RhdGVfcHV0KHNwLVx1MDAzZXh2ZWNbaV0pO1xuK1x0c3AtXHUwMDNlbGVuID0gMDtcbiB9XG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXG4gc3RhdGljIHZvaWQgc2tiX2V4dF9wdXRfbWN0cChzdHJ1Y3QgbWN0cF9mbG93ICpmbG93KVxuIHtcbi1cdGlmIChmbG93LVx1MDAzZWtleSlcbi1cdFx0bWN0cF9rZXlfdW5yZWYoZmxvdy1cdTAwM2VrZXkpO1xuK1x0aWYgKCFmbG93LVx1MDAzZWtleSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0bWN0cF9rZXlfdW5yZWYoZmxvdy1cdTAwM2VrZXkpO1xuK1x0Zmxvdy1cdTAwM2VrZXkgPSBOVUxMO1xuIH1cbiAjZW5kaWZcbiBcbkBAIC03MjU3LDE1ICs3MjY0LDIwIEBAIHZvaWQgX19za2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpXG4gXHRpZiAoc2tiLVx1MDAzZWFjdGl2ZV9leHRlbnNpb25zID09IDApIHtcbiBcdFx0c2tiLVx1MDAzZWV4dGVuc2lvbnMgPSBOVUxMO1xuIFx0XHRfX3NrYl9leHRfcHV0KGV4dCk7XG4tI2lmZGVmIENPTkZJR19YRlJNXG4tXHR9IGVsc2UgaWYgKGlkID09IFNLQl9FWFRfU0VDX1BBVEggXHUwMDI2XHUwMDI2XG4tXHRcdCAgIHJlZmNvdW50X3JlYWQoXHUwMDI2ZXh0LVx1MDAzZXJlZmNudCkgPT0gMSkge1xuLVx0XHRzdHJ1Y3Qgc2VjX3BhdGggKnNwID0gc2tiX2V4dF9nZXRfcHRyKGV4dCwgU0tCX0VYVF9TRUNfUEFUSCk7XG4rXHRcdHJldHVybjtcbitcdH1cbiBcbi1cdFx0c2tiX2V4dF9wdXRfc3Aoc3ApO1xuLVx0XHRzcC1cdTAwM2VsZW4gPSAwO1xuK1x0aWYgKHJlZmNvdW50X3JlYWQoXHUwMDI2ZXh0LVx1MDAzZXJlZmNudCkgXHUwMDNlIDEpXG4rXHRcdHJldHVybjtcbitcbisjaWZkZWYgQ09ORklHX1hGUk1cbitcdGlmIChpZCA9PSBTS0JfRVhUX1NFQ19QQVRIKVxuK1x0XHRza2JfZXh0X3B1dF9zcChza2JfZXh0X2dldF9wdHIoZXh0LCBTS0JfRVhUX1NFQ19QQVRIKSk7XG4rI2VuZGlmXG4rI2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXG4rXHRpZiAoaWQgPT0gU0tCX0VYVF9NQ1RQKVxuK1x0XHRza2JfZXh0X3B1dF9tY3RwKHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfTUNUUCkpO1xuICNlbmRpZlxuLVx0fVxuIH1cbiBFWFBPUlRfU1lNQk9MKF9fc2tiX2V4dF9kZWwpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MTU6NTUuMTY2NjQ0MTQ2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0ODI1NzM4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTS0IgRXh0ZW5zaW9uIERlbGV0aW9uIGluIG5ldC9jb3JlL3NrYnVmZi5jKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG5ldC9jb3JlL3NrYnVmZi5jYCBkaWZmIGFuZCB1bmRlcnN0YW5kIHdoYXQncyBjaGFuZ2VkIGluIGBfX3NrYl9leHRfZGVsYC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBoYW5kbGluZyB0aGUgY2xlYW51cCBvZiBTS0IgKFNvY2tldCBCdWZmZXIpIGV4dGVuc2lvbnMuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLCBzbyBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBhcm91bmQgbGluZSA3MjM2LlxuXG5GaXJzdCwgSSBzZWUgdGhlIGNoYW5nZXMgbW9kaWZ5IGBza2JfZXh0X3B1dF9zcGAgYW5kIGBza2JfZXh0X3B1dF9tY3RwYC4gSXQgbG9va3MgbGlrZSBib3RoIG9mIHRoZXNlIGFyZSBub3cgY2hlY2tpbmcgdG8gc2VlIGlmIHRoZSBzdHJ1Y3R1cmUgbWVtYmVyIGBzcC1cdTAwM2VsZW5gIG9yIGBmbG93LVx1MDAzZWtleWAgYXJlIG5vbi16ZXJvL25vbi1udWxsIGJlZm9yZSBhdHRlbXB0aW5nIHRoZSBjbGVhbnVwLiBJbiB0aGUgY2FzZSBvZiB0aGUgYHNwYCBvYmplY3QsIGlmIGBzcC1cdTAwM2VsZW5gIGlzIHplcm8sIHRoZXJlIGlzIGEgYHJldHVybjtgIHN0YXRlbWVudDsgaWYgbm90LCB0aGVuIHRoZSByZWZlcmVuY2UgY291bnRlZCBlbnRyaWVzLCBgc3AtXHUwMDNleHZlY1tpXWAsIGFyZSBkZWNyZW1lbnRlZC4gIFRoZSBgc3AtXHUwMDNlbGVuYCBpcyB0aGVuIHNldCB0byBgMGAuICBJbiB0aGUgY2FzZSBvZiBgZmxvdy1cdTAwM2VrZXlgLCBpZiBgZmxvdy1cdTAwM2VrZXlgIGlzIG51bGwsIHRoZXJlIGlzIGEgYHJldHVybjtgIHN0YXRlbWVudDsgaWYgbm90LCB0aGVuIHRoZSByZWZlcmVuY2UgY291bnRlZCBlbnRyeSwgYGZsb3ctXHUwMDNla2V5YCwgaXMgZGVjcmVtZW50ZWQsIHRoZW4gaXMgc2V0IHRvIE5VTEwuXG5cblRoZW4sIGluc2lkZSBgX19za2JfZXh0X2RlbGAsIHRoZSBkaWZmIG1vZGlmaWVzIHRoZSBsb2dpYyBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIGBpZGAuIFRoZSBjaGFuZ2VzIHNpbXBsaWZ5IHRoZSBjb25kaXRpb25hbCBsb2dpYyBmb3IgcmVsZWFzaW5nIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggc2VjdXJpdHkgcGF0aHMgKGBTS0JfRVhUX1NFQ19QQVRIYCkgYW5kIE1DVFAgZmxvd3MgKGBTS0JfRVhUX01DVFBgKS4gSXQgbm93IGNoZWNrcyB0aGUgYHJlZmNudGAgb2YgdGhlIGV4dGVuc2lvbi4gIElmIHRoZSBgcmVmY250YCBpcyBncmVhdGVyIHRoYW4gMSwgdGhlbiB0aGUgY29kZSByZXR1cm5zLiAgT3RoZXJ3aXNlLCB0aGUgY29kZSBjYWxscyB0aGUgc3BlY2lhbGl6ZWQgcHV0IGZ1bmN0aW9ucyBmb3IgdGhlIHNwZWNpZmllZCBleHRlbnNpb24uIFNwZWNpZmljYWxseTpcblxuKiAgIEZvciBgU0tCX0VYVF9TRUNfUEFUSGAsIGl0IGNhbGxzIGBza2JfZXh0X3B1dF9zcGAgdG8gcmVsZWFzZSB0aGUgc2VjdXJpdHkgcGF0aCByZXNvdXJjZXMuXG4qICAgRm9yIGBTS0JfRVhUX01DVFBgLCBpdCBjYWxscyBgc2tiX2V4dF9wdXRfbWN0cGAgdG8gcmVsZWFzZSB0aGUgTUNUUCBmbG93IHJlc291cmNlcy5cblxuVGhpcyBhbGwgcG9pbnRzIHRvIG1vcmUgcm9idXN0IGhhbmRsaW5nIG9mIHRoZSByZWZlcmVuY2UgY291bnRzIGFuZCBhdm9pZGluZyBwb3RlbnRpYWwgZG91YmxlIGZyZWVzIG9yIHJlc291cmNlIGxlYWtzIHdoZW4gZGVhbGluZyB3aXRoIHRoZXNlIFNLQiBleHRlbnNpb25zLiBUaGVzZSB0eXBlcyBvZiBjaGFuZ2VzIGFyZSBnb29kIHRvIHNlZS4gSSBzaG91bGQgdmVyaWZ5IHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBsb2NraW5nIHJlcXVpcmVtZW50cyBvciBpbnRyb2R1Y2UgYW55IHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTMzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MTY6MDEuNjQ5MjIxMzI4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNzMzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MjIwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MjIwOlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjcyMjE6XFx0XFx0fVxcbjcyMjI6XFx0XFxuNzIyMzpcXHRcXHRuZXdsZW4gPSBuZXdvZmYgKyBza2JfZXh0X3R5cGVfbGVuW2lkXTtcXG43MjI0OlxcdFxcdG5ldy1cXHUwMDNlY2h1bmtzID0gbmV3bGVuO1xcbjcyMjU6XFx0XFx0bmV3LVxcdTAwM2VvZmZzZXRbaWRdID0gbmV3b2ZmO1xcbjcyMjY6XFx0c2V0X2FjdGl2ZTpcXG43MjI3OlxcdFxcdHNrYi1cXHUwMDNlc2xvd19ncm8gPSAxO1xcbjcyMjg6XFx0XFx0c2tiLVxcdTAwM2VleHRlbnNpb25zID0gbmV3O1xcbjcyMjk6XFx0XFx0c2tiLVxcdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyB8PSAxIFxcdTAwM2NcXHUwMDNjIGlkO1xcbjcyMzA6XFx0XFx0cmV0dXJuIHNrYl9leHRfZ2V0X3B0cihuZXcsIGlkKTtcXG43MjMxOlxcdH1cXG43MjMyOlxcdEVYUE9SVF9TWU1CT0woc2tiX2V4dF9hZGQpO1xcbjcyMzM6XFx0XFxuNzIzNDpcXHQjaWZkZWYgQ09ORklHX1hGUk1cXG43MjM1OlxcdHN0YXRpYyB2b2lkIHNrYl9leHRfcHV0X3NwKHN0cnVjdCBzZWNfcGF0aCAqc3ApXFxuNzIzNjpcXHR7XFxuNzIzNzpcXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG43MjM4OlxcdFxcbjcyMzk6XFx0XFx0aWYgKCFzcC1cXHUwMDNlbGVuKVxcbjcyNDA6XFx0XFx0XFx0cmV0dXJuO1xcbjcyNDE6XFx0XFxuNzI0MjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc3AtXFx1MDAzZWxlbjsgaSsrKVxcbjcyNDM6XFx0XFx0XFx0eGZybV9zdGF0ZV9wdXQoc3AtXFx1MDAzZXh2ZWNbaV0pO1xcbjcyNDQ6XFx0XFx0c3AtXFx1MDAzZWxlbiA9IDA7XFxuNzI0NTpcXHR9XFxuNzI0NjpcXHQjZW5kaWZcXG43MjQ3OlxcdFxcbjcyNDg6XFx0I2lmZGVmIENPTkZJR19NQ1RQX0ZMT1dTXFxuNzI0OTpcXHRzdGF0aWMgdm9pZCBza2JfZXh0X3B1dF9tY3RwKHN0cnVjdCBtY3RwX2Zsb3cgKmZsb3cpXFxuNzI1MDpcXHR7XFxuNzI1MTpcXHRcXHRpZiAoIWZsb3ctXFx1MDAzZWtleSlcXG43MjUyOlxcdFxcdFxcdHJldHVybjtcXG43MjUzOlxcdFxcbjcyNTQ6XFx0XFx0bWN0cF9rZXlfdW5yZWYoZmxvdy1cXHUwMDNla2V5KTtcXG43MjU1OlxcdFxcdGZsb3ctXFx1MDAzZWtleSA9IE5VTEw7XFxuNzI1NjpcXHR9XFxuNzI1NzpcXHQjZW5kaWZcXG43MjU4OlxcdFxcbjcyNTk6XFx0dm9pZCBfX3NrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcXG43MjYwOlxcdHtcXG43MjYxOlxcdFxcdHN0cnVjdCBza2JfZXh0ICpleHQgPSBza2ItXFx1MDAzZWV4dGVuc2lvbnM7XFxuNzI2MjpcXHRcXG43MjYzOlxcdFxcdHNrYi1cXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgXFx1MDAyNj0gfigxIFxcdTAwM2NcXHUwMDNjIGlkKTtcXG43MjY0OlxcdFxcdGlmIChza2ItXFx1MDAzZWFjdGl2ZV9leHRlbnNpb25zID09IDApIHtcXG43MjY1OlxcdFxcdFxcdHNrYi1cXHUwMDNlZXh0ZW5zaW9ucyA9IE5VTEw7XFxuNzI2NjpcXHRcXHRcXHRfX3NrYl9leHRfcHV0KGV4dCk7XFxuNzI2NzpcXHRcXHRcXHRyZXR1cm47XFxuNzI2ODpcXHRcXHR9XFxuNzI2OTpcXHRcXG43MjcwOlxcdFxcdGlmIChyZWZjb3VudF9yZWFkKFxcdTAwMjZleHQtXFx1MDAzZXJlZmNudCkgXFx1MDAzZSAxKVxcbjcyNzE6XFx0XFx0XFx0cmV0dXJuO1xcbjcyNzI6XFx0XFxuNzI3MzpcXHQjaWZkZWYgQ09ORklHX1hGUk1cXG43Mjc0OlxcdFxcdGlmIChpZCA9PSBTS0JfRVhUX1NFQ19QQVRIKVxcbjcyNzU6XFx0XFx0XFx0c2tiX2V4dF9wdXRfc3Aoc2tiX2V4dF9nZXRfcHRyKGV4dCwgU0tCX0VYVF9TRUNfUEFUSCkpO1xcbjcyNzY6XFx0I2VuZGlmXFxuNzI3NzpcXHQjaWZkZWYgQ09ORklHX01DVFBfRkxPV1NcXG43Mjc4OlxcdFxcdGlmIChpZCA9PSBTS0JfRVhUX01DVFApXFxuNzI3OTpcXHRcXHRcXHRza2JfZXh0X3B1dF9tY3RwKHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfTUNUUCkpO1xcbjcyODA6XFx0I2VuZGlmXFxuNzI4MTpcXHR9XFxuNzI4MjpcXHRFWFBPUlRfU1lNQk9MKF9fc2tiX2V4dF9kZWwpO1xcbjcyODM6XFx0XFxuNzI4NDpcXHR2b2lkIF9fc2tiX2V4dF9wdXQoc3RydWN0IHNrYl9leHQgKmV4dClcXG43Mjg1OlxcdHtcXG43Mjg2OlxcdFxcdC8qIElmIHRoaXMgaXMgbGFzdCBjbG9uZSwgbm90aGluZyBjYW4gaW5jcmVtZW50XFxuNzI4NzpcXHRcXHQgKiBpdCBhZnRlciBjaGVjayBwYXNzZXMuICBBdm9pZHMgb25lIGF0b21pYyBvcC5cXG43Mjg4OlxcdFxcdCAqL1xcbjcyODk6XFx0XFx0aWYgKHJlZmNvdW50X3JlYWQoXFx1MDAyNmV4dC1cXHUwMDNlcmVmY250KSA9PSAxKVxcbjcyOTA6XFx0XFx0XFx0Z290byBmcmVlX25vdztcXG43MjkxOlxcdFxcbjcyOTI6XFx0XFx0aWYgKCFyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmV4dC1cXHUwMDNlcmVmY250KSlcXG43MjkzOlxcdFxcdFxcdHJldHVybjtcXG43Mjk0OlxcdGZyZWVfbm93OlxcbjcyOTU6XFx0I2lmZGVmIENPTkZJR19YRlJNXFxuNzI5NjpcXHRcXHRpZiAoX19za2JfZXh0X2V4aXN0KGV4dCwgU0tCX0VYVF9TRUNfUEFUSCkpXFxuNzI5NzpcXHRcXHRcXHRza2JfZXh0X3B1dF9zcChza2JfZXh0X2dldF9wdHIoZXh0LCBTS0JfRVhUX1NFQ19QQVRIKSk7XFxuNzI5ODpcXHQjZW5kaWZcXG43Mjk5OlxcdCNpZmRlZiBDT05GSUdfTUNUUF9GTE9XU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoxNjowMS42NDk1NTA2ODhaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjU0ODk3NjExNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBTS0IgRXh0ZW5zaW9uIENsZWFudXAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyBhbmQgd2h5IEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgY29yZSBvZiB0aGlzIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgY2xlYW5pbmcgdXAgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBTS0IgZXh0ZW5zaW9ucywgc3BlY2lmaWNhbGx5IHdoZW4gYW4gZXh0ZW5zaW9uIGlzIHJlbW92ZWQgdmlhIGBfX3NrYl9leHRfZGVsYC4gVGhlIGZ1bmN0aW9uIGBfX3NrYl9leHRfZGVsYCBpcyBjYWxsZWQgd2hlbiBhbiBgaWRgIGlzIHJlbW92ZWQgZnJvbSB0aGUgYHNrYmAuIElmIHRoZXJlIGFyZSBubyBtb3JlIGFjdGl2ZSBleHRlbnNpb25zLCB0aGUgZW50aXJlIGV4dGVuc2lvbiBzdHJ1Y3R1cmUgZ2V0cyBjbGVhbmVkIHVwIHdpdGggYF9fc2tiX2V4dF9wdXRgIGFuZCBgc2tiLVx1MDAzZWV4dGVuc2lvbnNgIGlzIHNldCB0byBOVUxMLlxuXG5UaGUgaW50ZXJlc3RpbmcgcGFydCwgZm9yIG91ciBwdXJwb3NlcywgaGFwcGVucyB3aGVuIHRoZXJlIGFyZSAqb3RoZXIqIGFjdGl2ZSBleHRlbnNpb25zIHN0aWxsIG9uIHRoZSBTS0IuICBJZiB0aGUgZXh0ZW5zaW9uJ3MgcmVmZXJlbmNlIGNvdW50IGlzIDEgKG1lYW5pbmcgaXQncyBub3Qgc2hhcmVkIHdpdGggYW55IGNsb25lZCBTS0JzKSwgdGhlbiB0aGUgcGF0Y2gncyBsb2dpYyBraWNrcyBpbi4gUHJldmlvdXNseSwgaXQgaGFuZGxlZCB0aGUgYFNLQl9FWFRfU0VDX1BBVEhgIGJ5IHB1dHRpbmcgdGhlIHhmcm0gc3RhdGVzIGFuZCBjbGVhcmluZyBgc3AtXHUwMDNlbGVuYC4gTm93IGl0IGFsc28gaGFuZGxlcyBgU0tCX0VYVF9NQ1RQYCBieSBwdXR0aW5nIHRoZSBgZmxvdy1cdTAwM2VrZXlgIGFuZCBzZXR0aW5nIGBmbG93LVx1MDAzZWtleSA9IE5VTExgLiBJbiB0aGUgY29ycmVzcG9uZGluZyBgc2tiX2V4dF9wdXRfc3BgIGFuZCBgc2tiX2V4dF9wdXRfbWN0cGAgZnVuY3Rpb25zLCB0aGVyZSBhcmUgY2hlY2tzIHRvIGF2b2lkIGRvdWJsZS1mcmVlaW5nIHRoZXNlIHJlc291cmNlcy5cblxuVGhlIHJhdGlvbmFsZSBpcyBjbGVhcjogd2hlbiBgX19za2JfZXh0X2RlbGAgaXMgY2FsbGVkIGZvciBNQ1RQIG9yIFhGUk0gYW5kIG90aGVyIGV4dGVuc2lvbnMgcmVtYWluIGFjdGl2ZSBvbiB0aGUgU0tCLCB0aGUgZXh0ZW5zaW9uIHN0cnVjdHVyZSBpdHNlbGYgc3RheXMgYXR0YWNoZWQgdG8gdGhlIFNLQi4gQnV0LCB0aGUgc3BlY2lmaWMgZXh0ZW5zaW9uIGBpZGAgaXMgZGVsZXRlZCwgc28gdGhlIHJlc291cmNlcyBpdCB3YXMgdXNpbmcgKGxpa2UgdGhlIHhmcm1fc3RhdGUgb3IgbWN0cF9rZXkpIG11c3QgYmUgcmVsZWFzZWQgcHJvbXB0bHkgKHdoZW4gcmVmY291bnQgPT0gMSksIGF2b2lkaW5nIGxlYWtzLiBTZXR0aW5nIGBzcC1cdTAwM2VsZW4gPSAwYCAvIGBmbG93LVx1MDAzZWtleSA9IE5VTExgIHdoZW4gYF9fc2tiX2V4dF9wdXRgIGlzIGxhdGVyIGNhbGxlZCBwcmV2ZW50cyB0aGUgZG91YmxlLWZyZWUvZG91YmxlLXVucmVmIGlzc3VlLlxuXG5Ob3csIHRoZSBLTVNBTiBxdWVzdGlvbi4gIExldCdzIGdvIHRocm91Z2ggdGhlIGNyaXRlcmlhOlxuXG4qICAgKipLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZToqKiBOb3BlLiBUaGlzIHBhdGNoIGlzbid0IHRvdWNoaW5nIGFueSBkYXRhIHRoYXQgZ2V0cyBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXIgc3BhY2UuXG4qICAgKipCcmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogTm8uIGBzcC1cdTAwM2VsZW5gIGFuZCBgZmxvdy1cdTAwM2VrZXlgIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBtZW1iZXJzIG9mIHRoZSBgc2VjX3BhdGhgIGFuZCBgbWN0cF9mbG93YCBzdHJ1Y3R1cmVzLlxuKiAgICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkczoqKiBOby4gSXQncyBmb2N1c2VkIG9uIGNsZWFudXAsIG5vdCBpbnRyb2R1Y2luZyBuZXcgY29tcGxleCBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBkYXRhLlxuKiAgICoqQm91bmRzIGNoZWNrcy9idWZmZXIgbGVuZ3RocyBleHBvc2luZyB1bmluaXRpYWxpemVkIGRhdGE6KiogTm90IGFwcGxpY2FibGUuXG5cblRoaXMgcGF0Y2ggaXMgYWJvdXQgcmVmZXJlbmNlIGNsZWFudXAsIHJlc291cmNlIG1hbmFnZW1lbnQuIFRoZSByaXNrcyBoZXJlIGFyZSByZXNvdXJjZSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcy4gQWxsIHRoZXNlIGFyZSBleGFjdGx5IHRoZSB0eXBlIG9mIGJ1Z3MgdGhhdCBLQVNBTiwgcmVmY291bnQgY2hlY2tpbmcsIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSAqZGVzaWduZWQqIHRvIGNhdGNoLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBUaGVyZWZvcmUsIHRoZXJlJ3Mgbm8gbmVlZCBmb3IgS01TQU4gaGVyZS5cblxuSSdsbCBwcm9jZWVkIHRvIG1hcmsgdGhpcyB3aXRoIGBOZWVkc0tNU0FOOiBmYWxzZWAgYW5kIG1ha2Ugc3VyZSB0aGUgcmVhc29uaW5nIGlzIGNsZWFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDI2LCJPdXRwdXRUb2tlbnMiOjIxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjE2OjA4LjE5ODUyOTgwNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fc2tiX2V4dF9kZWwoKWAgYW5kIGhlbHBlciBmdW5jdGlvbnMgYHNrYl9leHRfcHV0X3NwKClgIC8gYHNrYl9leHRfcHV0X21jdHAoKWAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCB0byBwcm9wZXJseSByZWxlYXNlIHJlZmVyZW5jZXMgKGBtY3RwX2tleV91bnJlZmAgYW5kIGB4ZnJtX3N0YXRlX3B1dGApIGFuZCB6ZXJvIG91dCBmaWVsZHMgKGBzcC1cXHUwMDNlbGVuID0gMGAsIGBmbG93LVxcdTAwM2VrZXkgPSBOVUxMYCkgd2hlbiBza2IgZXh0ZW5zaW9ucyBhcmUgcmVtb3ZlZC5cXG5cXG5UaGVzZSBjaGFuZ2VzIHBlcnRhaW4gc3RyaWN0bHkgdG8gcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsaWZlY3ljbGUvY2xlYW51cCBtYW5hZ2VtZW50IG9mIHNrYiBleHRlbnNpb24gZGF0YS4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGFsbG9jYXRpb25zLCBkYXRhIGV4cG9zdXJlIHRvIHVzZXIgc3BhY2UsIG9yIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uLiBBbnkgcG90ZW50aWFsIGRlZmVjdHMgaW4gdGhpcyBjb2RlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgdW5yZWYsIG9yIG1lbW9yeSBsZWFrcykgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4gb3Igc3RhbmRhcmQgcmVmY291bnQgdHJhY2tpbmcsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19za2JfZXh0X2RlbCgpYCBhbmQgaGVscGVyIGZ1bmN0aW9ucyBgc2tiX2V4dF9wdXRfc3AoKWAgLyBgc2tiX2V4dF9wdXRfbWN0cCgpYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIHRvIHByb3Blcmx5IHJlbGVhc2UgcmVmZXJlbmNlcyAoYG1jdHBfa2V5X3VucmVmYCBhbmQgYHhmcm1fc3RhdGVfcHV0YCkgYW5kIHplcm8gb3V0IGZpZWxkcyAoYHNwLVxcdTAwM2VsZW4gPSAwYCwgYGZsb3ctXFx1MDAzZWtleSA9IE5VTExgKSB3aGVuIHNrYiBleHRlbnNpb25zIGFyZSByZW1vdmVkLlxcblxcblRoZXNlIGNoYW5nZXMgcGVydGFpbiBzdHJpY3RseSB0byByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmVjeWNsZS9jbGVhbnVwIG1hbmFnZW1lbnQgb2Ygc2tiIGV4dGVuc2lvbiBkYXRhLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgYWxsb2NhdGlvbnMsIGRhdGEgZXhwb3N1cmUgdG8gdXNlciBzcGFjZSwgb3IgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24uIEFueSBwb3RlbnRpYWwgZGVmZWN0cyBpbiB0aGlzIGNvZGUgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSB1bnJlZiwgb3IgbWVtb3J5IGxlYWtzKSBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTiBvciBzdGFuZGFyZCByZWZjb3VudCB0cmFja2luZywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxsbpt[1] Phase: Succeeded StartedAt: 2026-08-31 07:16:19 +0000 UTC FinishedAt: 2026-08-31 07:16:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxsbpt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 07:16:19 +0000 UTC FinishedAt: 2026-08-31 07:16:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxsbpt[2] Phase: Succeeded StartedAt: 2026-08-31 07:16:19 +0000 UTC FinishedAt: 2026-08-31 10:57:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 07:16:19 +0000 UTC FinishedAt: 2026-08-31 10:57:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 07:16:19 +0000 UTC FinishedAt: 2026-08-31 07:16:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 07:16:19 +0000 UTC FinishedAt: 2026-08-31 07:16:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowxsbpt/series-workflowxsbpt-convert-artifact-2250203057/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 07:16:29 +0000 UTC FinishedAt: 2026-08-31 07:32:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 07:16:29 +0000 UTC FinishedAt: 2026-08-31 07:32:17 +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:*06a5c242-ee4c-40f5-940d-1efc9129bb24,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-workflowxsbpt/series-workflowxsbpt-convert-artifact-2250203057/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": "b0e1b39c-a273-4080-a71f-daa55c5d236d", "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-workflowxsbpt/series-workflowxsbpt-build-action-2517892575/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 07:16:29 +0000 UTC FinishedAt: 2026-08-31 07:32:07 +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:*06a5c242-ee4c-40f5-940d-1efc9129bb24,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-workflowxsbpt/series-workflowxsbpt-convert-artifact-2250203057/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": "b0e1b39c-a273-4080-a71f-daa55c5d236d", "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-workflowxsbpt/series-workflowxsbpt-build-action-2517892575/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 07:32:17 +0000 UTC FinishedAt: 2026-08-31 07:32:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 07:32:17 +0000 UTC FinishedAt: 2026-08-31 07:32:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 07:32:17 +0000 UTC FinishedAt: 2026-08-31 07:32:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 07:32:17 +0000 UTC FinishedAt: 2026-08-31 07:32:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowxsbpt/series-workflowxsbpt-convert-artifact-2952979972/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 07:32:27 +0000 UTC FinishedAt: 2026-08-31 07:34:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 07:32:27 +0000 UTC FinishedAt: 2026-08-31 07:34:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b0e1b39c-a273-4080-a71f-daa55c5d236d,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-workflowxsbpt/series-workflowxsbpt-build-action-2517892575/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-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 07:34:10 +0000 UTC FinishedAt: 2026-08-31 07:34:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 07:34:10 +0000 UTC FinishedAt: 2026-08-31 07:34:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 07:34:10 +0000 UTC FinishedAt: 2026-08-31 07:50:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 07:34:10 +0000 UTC FinishedAt: 2026-08-31 07:50:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*06a5c242-ee4c-40f5-940d-1efc9129bb24,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-workflowxsbpt/series-workflowxsbpt-convert-artifact-2952979972/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": "89921536-0c21-4c6c-846c-c69981ec9812", "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-workflowxsbpt/series-workflowxsbpt-build-action-2438520848/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 07:34:10 +0000 UTC FinishedAt: 2026-08-31 07:49:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*06a5c242-ee4c-40f5-940d-1efc9129bb24,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-workflowxsbpt/series-workflowxsbpt-convert-artifact-2952979972/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": "89921536-0c21-4c6c-846c-c69981ec9812", "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-workflowxsbpt/series-workflowxsbpt-build-action-2438520848/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 07:50:05 +0000 UTC FinishedAt: 2026-08-31 07:50:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 07:50:05 +0000 UTC FinishedAt: 2026-08-31 07:50:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 07:50:05 +0000 UTC FinishedAt: 2026-08-31 07:51:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 07:50:05 +0000 UTC FinishedAt: 2026-08-31 07:51:36 +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:*89921536-0c21-4c6c-846c-c69981ec9812,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-workflowxsbpt/series-workflowxsbpt-build-action-2438520848/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-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 07:51:40 +0000 UTC FinishedAt: 2026-08-31 10:57:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 07:51:40 +0000 UTC FinishedAt: 2026-08-31 10:57:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"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:*b0e1b39c-a273-4080-a71f-daa55c5d236d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*89921536-0c21-4c6c-846c-c69981ec9812,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-workflowxsbpt/series-workflowxsbpt-build-action-2517892575/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-workflowxsbpt/series-workflowxsbpt-build-action-2438520848/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 07:51:40 +0000 UTC FinishedAt: 2026-08-31 07:51:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 07:51:40 +0000 UTC FinishedAt: 2026-08-31 07:51:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"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-workflowxsbpt/series-workflowxsbpt-convert-artifact-140782605/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 07:51:40 +0000 UTC FinishedAt: 2026-08-31 07:51:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 07:51:40 +0000 UTC FinishedAt: 2026-08-31 07:51:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 07:51:40 +0000 UTC FinishedAt: 2026-08-31 07:51:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 07:51:50 +0000 UTC FinishedAt: 2026-08-31 10:57:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxsbpt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__skb_ext_del","__skb_ext_put"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SKB_EXTENSIONS","XFRM","MCTP","MCTP_FLOWS","MCTP_TRANSPORT_I2C"],"series_id":"2dd6003a-8634-4ba1-bfb1-02961777d345","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 07:51:50 +0000 UTC FinishedAt: 2026-08-31 10:56:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b0e1b39c-a273-4080-a71f-daa55c5d236d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*89921536-0c21-4c6c-846c-c69981ec9812,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-workflowxsbpt/series-workflowxsbpt-build-action-2517892575/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-workflowxsbpt/series-workflowxsbpt-build-action-2438520848/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-workflowxsbpt/series-workflowxsbpt-convert-artifact-140782605/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,}