Name: series-workflowvcl88 Phase: Failed StartedAt: 2026-09-05 00:49:12 +0000 UTC FinishedAt: 2026-09-05 00:52:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvcl88[0] Phase: Succeeded StartedAt: 2026-09-05 00:49:12 +0000 UTC FinishedAt: 2026-09-05 00:51:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvcl88[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 00:49:12 +0000 UTC FinishedAt: 2026-09-05 00:51:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgTWljcm9zb2Z0IEh5cGVyLVYgZ3Vlc3QgZHJpdmVycyAoVk1CdXMgYnVmZmVyIGhhbmRsaW5nIGluIGRyaXZlcnMvaHYvY2hhbm5lbC5jIGFuZCBuZXR2c2MgR1BBREwgdGVhcmRvd24gZXJyb3IgaGFuZGxpbmcgaW4gZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHJ1bm5pbmcgYXMgYSBndWVzdCB1bmRlciB0aGUgTWljcm9zb2Z0IEh5cGVyLVYgaHlwZXJ2aXNvciBhbmQgY2Fubm90IGJlIGluaXRpYWxpemVkIG9yIHByb2JlZCBpbiBzdGFuZGFyZCBRRU1VL0tWTSBvciBHQ0Ugc3l6a2FsbGVyIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNhMTZjOThmMWRkNGVhNjMxOWIyZWY1YTZiNzM4NGVhOThiMmQyYzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDAwOjUwOjM4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHYvY2hhbm5lbC5jIGIvZHJpdmVycy9odi9jaGFubmVsLmNcbmluZGV4IGY0MzcwNjE3ZGVhY2IuLmQ1ZDIwZTMyMjgzMTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2h2L2NoYW5uZWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9odi9jaGFubmVsLmNcbkBAIC02NDgsNiAmIzQzOzY0OCwzMiBAQCB2b2lkIHZtYnVzX2ZyZWVfYnVmZmVyKHZvaWQgKmFkZHIsIHN0cnVjdCBwYWdlICoqY2h1bmtzLCB1MzIgY2h1bmtfY250KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2bWJ1c19mcmVlX2J1ZmZlcik7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB2bWJ1c19sZWFrX2J1ZmZlciAtIHNldCB1cCBhIGJ1ZmZlciB0byBiZSBsZWFrZWQgYnkgdm1idXNfZnJlZV9idWZmZXIoKS5cbiYjNDM7ICpcbiYjNDM7ICogQGFkZHI6IGJ1ZmZlciBhZGRyZXNzXG4mIzQzOyAqIEBjaHVua3M6IGNodW5rcyBhcnJheSBmcm9tIHZtYnVzX2FsbG9jX2J1ZmZlcigpXG4mIzQzOyAqIEBjaHVua19jbnQ6IG51bWJlciBvZiBlbnRyaWVzIGluIEBjaHVua3NcbiYjNDM7ICpcbiYjNDM7ICogV2hlbiBAY2h1bmtzIGlzIE5VTEwgdGhlIGJ1ZmZlciBpcyBhIHBsYWluIHZ6YWxsb2MoKSBhbGxvY2F0aW9uIGFuZFxuJiM0MzsgKiB0aGUgYnVmZmVyIGlzIGxlYWtlZCBieSBzZXR0aW5nIEBhZGRyIHRvIE5VTEwuIE90aGVyd2lzZSBzZXRcbiYjNDM7ICogQGNodW5rX2NudCB0byAwIHNvIHRoYXQgdm1idXNfZnJlZV9idWZmZXIoKSBkb2VzIG5vdCB0cnkgdG8gcmUtZW5jcnlwdFxuJiM0MzsgKiBvciBmcmVlIHRoZSBidWZmZXIgbWVtb3J5LCBidXQgc3RpbGwgcmVsZWFzZXMgdGhlIHZtYXAgYWRkcmVzcyBhbmRcbiYjNDM7ICogdGhlIGNodW5rcyBtZW1vcnkuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBpbiBhIGNvbnRleHQgd2hlcmUgdGhlIGJ1ZmZlciBpcyBzdGlsbFxuJiM0MzsgKiBiZWluZyBhY2Nlc3NlZC4gSXQgbXVzdCBub3QgcmVtb3ZlIGFueSBrZXJuZWwgdmlydHVhbCBhZGRyZXNzZXMgb2ZcbiYjNDM7ICogdGhlIGJ1ZmZlciBvciBjaGFuZ2UgaXRzIGVuY3J5cHRpb24gc3RhdHVzLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCB2bWJ1c19sZWFrX2J1ZmZlcih2b2lkICoqYWRkciwgc3RydWN0IHBhZ2UgKioqY2h1bmtzLCB1MzIgKmNodW5rX2NudClcbiYjNDM7e1xuJiM0MztcdGlmICgqY2h1bmtzKVxuJiM0MztcdFx0KmNodW5rX2NudCA9IDA7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0KmFkZHIgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2xlYWtfYnVmZmVyKTtcbiYjNDM7XG4gLyoqXG4gICogdm1idXNfYWxsb2NfYnVmZmVyIC0gYWxsb2NhdGUgYSBob3N0LXZpc2libGUsIHZpcnR1YWxseS1jb250aWd1b3VzIGJ1ZmZlci5cbiAgKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYyBiL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuY1xuaW5kZXggZmM2NTQ4YjE2YzkxZS4uNWM5NWQ3ZDI0MTYzMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jXG5AQCAtMzE2LDYgJiM0MzszMTYsOSBAQCBzdGF0aWMgdm9pZCBuZXR2c2NfdGVhcmRvd25fcmVjdl9ncGFkbChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4gXHRcdCAqIHJhdGhlciB0aGFuIGNvbnRpbnVlIGFuZCBhIGJ1Z2Noa1xuIFx0XHQgKi9cbiBcdFx0aWYgKHJldCAhPSAwKSB7XG4mIzQzO1x0XHRcdHZtYnVzX2xlYWtfYnVmZmVyKFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWYsXG4mIzQzO1x0XHRcdFx0XHQgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWZfY2h1bmtzLFxuJiM0MztcdFx0XHRcdFx0ICBcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXJlY3ZfYnVmX2NodW5rX2NudCk7XG4gXHRcdFx0bmV0ZGV2X2VycihuZGV2LFxuIFx0XHRcdFx0ICAgXCYjMzQ7dW5hYmxlIHRvIHRlYXJkb3duIHJlY2VpdmUgYnVmZmVyJiMzOTtzIGdwYWRsXFxuXCYjMzQ7KTtcbiBcdFx0XHRyZXR1cm47XG5AQCAtMzM3LDYgJiM0MzszNDAsOSBAQCBzdGF0aWMgdm9pZCBuZXR2c2NfdGVhcmRvd25fc2VuZF9ncGFkbChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4gXHRcdCAqIHJhdGhlciB0aGFuIGNvbnRpbnVlIGFuZCBhIGJ1Z2Noa1xuIFx0XHQgKi9cbiBcdFx0aWYgKHJldCAhPSAwKSB7XG4mIzQzO1x0XHRcdHZtYnVzX2xlYWtfYnVmZmVyKFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWYsXG4mIzQzO1x0XHRcdFx0XHQgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWZfY2h1bmtzLFxuJiM0MztcdFx0XHRcdFx0ICBcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmX2NodW5rX2NudCk7XG4gXHRcdFx0bmV0ZGV2X2VycihuZGV2LFxuIFx0XHRcdFx0ICAgXCYjMzQ7dW5hYmxlIHRvIHRlYXJkb3duIHNlbmQgYnVmZmVyJiMzOTtzIGdwYWRsXFxuXCYjMzQ7KTtcbiBcdFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oeXBlcnYuaCBiL2luY2x1ZGUvbGludXgvaHlwZXJ2LmhcbmluZGV4IDllMTA5ZDkxYWExNDMuLjZmNjBjZTU5MjRiYWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h5cGVydi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h5cGVydi5oXG5AQCAtMTIyMCw2ICYjNDM7MTIyMCwxMCBAQCBleHRlcm4gdm9pZCAqdm1idXNfYWxsb2NfYnVmZmVyKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLFxuIFxuIGV4dGVybiB2b2lkIHZtYnVzX2ZyZWVfYnVmZmVyKHZvaWQgKmFkZHIsIHN0cnVjdCBwYWdlICoqY2h1bmtzLCB1MzIgY2h1bmtfY250KTtcbiBcbiYjNDM7ZXh0ZXJuIHZvaWQgdm1idXNfbGVha19idWZmZXIodm9pZCAqKmFkZHIsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBwYWdlICoqKmNodW5rcyxcbiYjNDM7XHRcdFx0ICAgICAgdTMyICpjaHVua19jbnQpO1xuJiM0MztcbiB2b2lkIHZtYnVzX3Jlc2V0X2NoYW5uZWxfY2Ioc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwpO1xuIFxuIGV4dGVybiBpbnQgdm1idXNfcmVjdnBhY2tldChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBNaWNyb3NvZnQgSHlwZXItViBndWVzdCBkcml2ZXJzIChWTUJ1cyBidWZmZXIgaGFuZGxpbmcgaW4gZHJpdmVycy9odi9jaGFubmVsLmMgYW5kIG5ldHZzYyBHUEFETCB0ZWFyZG93biBlcnJvciBoYW5kbGluZyBpbiBkcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcnVubmluZyBhcyBhIGd1ZXN0IHVuZGVyIHRoZSBNaWNyb3NvZnQgSHlwZXItViBoeXBlcnZpc29yIGFuZCBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgb3IgcHJvYmVkIGluIHN0YW5kYXJkIFFFTVUvS1ZNIG9yIEdDRSBzeXprYWxsZXIgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2ExNmM5OGYxZGQ0ZWE2MzE5YjJlZjVhNmI3Mzg0ZWE5OGIyZDJjMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMDA6NTA6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h2L2NoYW5uZWwuYyBiL2RyaXZlcnMvaHYvY2hhbm5lbC5jCmluZGV4IGY0MzcwNjE3ZGVhY2IuLmQ1ZDIwZTMyMjgzMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHYvY2hhbm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaHYvY2hhbm5lbC5jCkBAIC02NDgsNiAmIzQzOzY0OCwzMiBAQCB2b2lkIHZtYnVzX2ZyZWVfYnVmZmVyKHZvaWQgKmFkZHIsIHN0cnVjdCBwYWdlICoqY2h1bmtzLCB1MzIgY2h1bmtfY250KQogfQogRVhQT1JUX1NZTUJPTF9HUEwodm1idXNfZnJlZV9idWZmZXIpOwogCiYjNDM7LyoqCiYjNDM7ICogdm1idXNfbGVha19idWZmZXIgLSBzZXQgdXAgYSBidWZmZXIgdG8gYmUgbGVha2VkIGJ5IHZtYnVzX2ZyZWVfYnVmZmVyKCkuCiYjNDM7ICoKJiM0MzsgKiBAYWRkcjogYnVmZmVyIGFkZHJlc3MKJiM0MzsgKiBAY2h1bmtzOiBjaHVua3MgYXJyYXkgZnJvbSB2bWJ1c19hbGxvY19idWZmZXIoKQomIzQzOyAqIEBjaHVua19jbnQ6IG51bWJlciBvZiBlbnRyaWVzIGluIEBjaHVua3MKJiM0MzsgKgomIzQzOyAqIFdoZW4gQGNodW5rcyBpcyBOVUxMIHRoZSBidWZmZXIgaXMgYSBwbGFpbiB2emFsbG9jKCkgYWxsb2NhdGlvbiBhbmQKJiM0MzsgKiB0aGUgYnVmZmVyIGlzIGxlYWtlZCBieSBzZXR0aW5nIEBhZGRyIHRvIE5VTEwuIE90aGVyd2lzZSBzZXQKJiM0MzsgKiBAY2h1bmtfY250IHRvIDAgc28gdGhhdCB2bWJ1c19mcmVlX2J1ZmZlcigpIGRvZXMgbm90IHRyeSB0byByZS1lbmNyeXB0CiYjNDM7ICogb3IgZnJlZSB0aGUgYnVmZmVyIG1lbW9yeSwgYnV0IHN0aWxsIHJlbGVhc2VzIHRoZSB2bWFwIGFkZHJlc3MgYW5kCiYjNDM7ICogdGhlIGNodW5rcyBtZW1vcnkuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgaW4gYSBjb250ZXh0IHdoZXJlIHRoZSBidWZmZXIgaXMgc3RpbGwKJiM0MzsgKiBiZWluZyBhY2Nlc3NlZC4gSXQgbXVzdCBub3QgcmVtb3ZlIGFueSBrZXJuZWwgdmlydHVhbCBhZGRyZXNzZXMgb2YKJiM0MzsgKiB0aGUgYnVmZmVyIG9yIGNoYW5nZSBpdHMgZW5jcnlwdGlvbiBzdGF0dXMuCiYjNDM7ICovCiYjNDM7dm9pZCB2bWJ1c19sZWFrX2J1ZmZlcih2b2lkICoqYWRkciwgc3RydWN0IHBhZ2UgKioqY2h1bmtzLCB1MzIgKmNodW5rX2NudCkKJiM0Mzt7CiYjNDM7CWlmICgqY2h1bmtzKQomIzQzOwkJKmNodW5rX2NudCA9IDA7CiYjNDM7CWVsc2UKJiM0MzsJCSphZGRyID0gTlVMTDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwodm1idXNfbGVha19idWZmZXIpOwomIzQzOwogLyoqCiAgKiB2bWJ1c19hbGxvY19idWZmZXIgLSBhbGxvY2F0ZSBhIGhvc3QtdmlzaWJsZSwgdmlydHVhbGx5LWNvbnRpZ3VvdXMgYnVmZmVyLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYyBiL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYwppbmRleCBmYzY1NDhiMTZjOTFlLi41Yzk1ZDdkMjQxNjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jCkBAIC0zMTYsNiAmIzQzOzMxNiw5IEBAIHN0YXRpYyB2b2lkIG5ldHZzY190ZWFyZG93bl9yZWN2X2dwYWRsKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSwKIAkJICogcmF0aGVyIHRoYW4gY29udGludWUgYW5kIGEgYnVnY2hrCiAJCSAqLwogCQlpZiAocmV0ICE9IDApIHsKJiM0MzsJCQl2bWJ1c19sZWFrX2J1ZmZlcigmYW1wO25ldF9kZXZpY2UtJmd0O3JlY3ZfYnVmLAomIzQzOwkJCQkJICAmYW1wO25ldF9kZXZpY2UtJmd0O3JlY3ZfYnVmX2NodW5rcywKJiM0MzsJCQkJCSAgJmFtcDtuZXRfZGV2aWNlLSZndDtyZWN2X2J1Zl9jaHVua19jbnQpOwogCQkJbmV0ZGV2X2VycihuZGV2LAogCQkJCSAgICYjMzQ7dW5hYmxlIHRvIHRlYXJkb3duIHJlY2VpdmUgYnVmZmVyJiMzOTtzIGdwYWRsXG4mIzM0Oyk7CiAJCQlyZXR1cm47CkBAIC0zMzcsNiAmIzQzOzM0MCw5IEBAIHN0YXRpYyB2b2lkIG5ldHZzY190ZWFyZG93bl9zZW5kX2dwYWRsKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSwKIAkJICogcmF0aGVyIHRoYW4gY29udGludWUgYW5kIGEgYnVnY2hrCiAJCSAqLwogCQlpZiAocmV0ICE9IDApIHsKJiM0MzsJCQl2bWJ1c19sZWFrX2J1ZmZlcigmYW1wO25ldF9kZXZpY2UtJmd0O3NlbmRfYnVmLAomIzQzOwkJCQkJICAmYW1wO25ldF9kZXZpY2UtJmd0O3NlbmRfYnVmX2NodW5rcywKJiM0MzsJCQkJCSAgJmFtcDtuZXRfZGV2aWNlLSZndDtzZW5kX2J1Zl9jaHVua19jbnQpOwogCQkJbmV0ZGV2X2VycihuZGV2LAogCQkJCSAgICYjMzQ7dW5hYmxlIHRvIHRlYXJkb3duIHNlbmQgYnVmZmVyJiMzOTtzIGdwYWRsXG4mIzM0Oyk7CiAJCQlyZXR1cm47CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h5cGVydi5oIGIvaW5jbHVkZS9saW51eC9oeXBlcnYuaAppbmRleCA5ZTEwOWQ5MWFhMTQzLi42ZjYwY2U1OTI0YmFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h5cGVydi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHlwZXJ2LmgKQEAgLTEyMjAsNiAmIzQzOzEyMjAsMTAgQEAgZXh0ZXJuIHZvaWQgKnZtYnVzX2FsbG9jX2J1ZmZlcihzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCwKIAogZXh0ZXJuIHZvaWQgdm1idXNfZnJlZV9idWZmZXIodm9pZCAqYWRkciwgc3RydWN0IHBhZ2UgKipjaHVua3MsIHUzMiBjaHVua19jbnQpOwogCiYjNDM7ZXh0ZXJuIHZvaWQgdm1idXNfbGVha19idWZmZXIodm9pZCAqKmFkZHIsCiYjNDM7CQkJICAgICAgc3RydWN0IHBhZ2UgKioqY2h1bmtzLAomIzQzOwkJCSAgICAgIHUzMiAqY2h1bmtfY250KTsKJiM0MzsKIHZvaWQgdm1idXNfcmVzZXRfY2hhbm5lbF9jYihzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCk7CiAKIGV4dGVybiBpbnQgdm1idXNfcmVjdnBhY2tldChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc0OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBIeXBlci1WIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBicmVhayBkb3duIHRoZSBjaGFuZ2VzOiB0aGUgbW9kaWZpZWQgZmlsZXMgYXJlIGBkcml2ZXJzL2h2L2NoYW5uZWwuY2AsIGBkcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmNgLCBhbmQgYGluY2x1ZGUvbGludXgvaHlwZXJ2LmhgLiBUaGUgY29yZSBhZGRpdGlvbiBzZWVtcyB0byBiZSBgdm1idXNfbGVha19idWZmZXJgLCBpbnRyb2R1Y2VkIGluIHRoZSB2bWJ1cyBkcml2ZXIsIGFuZCB0aGVuIGVtcGxveWVkIHdpdGhpbiB0aGUgYG5ldHZzY190ZWFyZG93bl9yZWN2X2dwYWRsYCBhbmQgYG5ldHZzY190ZWFyZG93bl9zZW5kX2dwYWRsYCBmdW5jdGlvbnMgaW4gdGhlIG5ldHZzYyBkcml2ZXIuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMsIHNwZWNpZmljYWxseSBhcm91bmQgSHlwZXItViBhbmQgdGhlIHZtYnVzLiBJJiMzOTttIHRoaW5raW5nOiBpcyB0aGlzIHN1c2NlcHRpYmxlIHRvIGZ1enppbmcgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudCwgbGlrZSBRRU1VIG9yIEdDRSB3aXRoIHN5emthbGxlcj8gVGhlIGNydWNpYWwgcXVlc3Rpb24gaGVyZSBpcyByZWFjaGFiaWxpdHkuIENhbiB3ZSBhY3R1YWxseSB0cmlnZ2VyIHRoZXNlIGNoYW5nZXMgYW5kIGZ1enogSHlwZXItViBkcml2ZXJzIChWTUJVUy9IWVBFUlYvSFlQRVJWX05FVCkgdXNpbmcgZXhpc3Rpbmcgc2V0dXBzPyBJIG5lZWQgdG8gY2hlY2sgaWYgUUVNVSBwcm92aWRlcyBzdWZmaWNpZW50IEh5cGVyLVYgZW11bGF0aW9uIGZvciB0aGlzLiBEb2VzIFFFTVUgZXZlbiBoYXZlIHRoZSAmIzM0O2h2LXZtYnVzJiMzNDsgZW5saWdodGVubWVudCwgb3IgZG9lcyBzeXprYWxsZXIgc3BlY2lmaWNhbGx5IHRhcmdldCBIeXBlci1WIGRpcmVjdGx5PyBPciBpcyB0aGlzIGEgaHlwZXJ2aXNvci1zcGVjaWZpYyBidXMgdGhhdCBuZWNlc3NpdGF0ZXMgcnVubmluZyBvbiBhIE1pY3Jvc29mdCBBenVyZS9IeXBlci1WIGVudmlyb25tZW50PwoKQmVmb3JlIGRpdmluZyBkZWVwZXIgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIGNvbmZpcm06CgoxLiAgQ2FuIHdlIGFjY2VzcyBIeXBlci1WL1ZNQnVzIGluIGEgc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnQ/IEkgc2VlbSB0byByZWNhbGwgYSBgdm1idXMtYnJpZGdlYCBRRU1VIGRldmljZSwgYnV0IGlzIGl0IGVub3VnaD8KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoYXQgY3JpdGVyaWEgaXMgbWV0IGJ5IHRoZSBjb250ZXh0IG9mIFNFQ1RJT04gMiBhbmQgMy4KCkZpbmFsbHksIEkmIzM5O2xsIGxldmVyYWdlIG15IHVzdWFsIGNvZGUgYW5hbHlzaXMgdG9vbHMsIGxpa2VseSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAsIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzAwOlx0XHRcdH1cbiAzMDE6XHRcdFx0bmV0X2RldmljZS1cdTAwM2VzZW5kX3NlY3Rpb25fY250ID0gMDtcbiAzMDI6XHRcdH1cbiAzMDM6XHR9XG4gMzA0Olx0XG4gMzA1Olx0c3RhdGljIHZvaWQgbmV0dnNjX3RlYXJkb3duX3JlY3ZfZ3BhZGwoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxuIDMwNjpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXRfZGV2aWNlLFxuIDMwNzpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIDMwODpcdHtcbiAzMDk6XHRcdGludCByZXQ7XG4gMzEwOlx0XG4gMzExOlx0XHRpZiAobmV0X2RldmljZS1cdTAwM2VyZWN2X2J1Zl9ncGFkbF9oYW5kbGUuZ3BhZGxfaGFuZGxlKSB7XG4gMzEyOlx0XHRcdHJldCA9IHZtYnVzX3RlYXJkb3duX2dwYWRsKGRldmljZS1cdTAwM2VjaGFubmVsLFxuIDMxMzpcdFx0XHRcdFx0XHQgICBcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXJlY3ZfYnVmX2dwYWRsX2hhbmRsZSk7XG4gMzE0Olx0XG4gMzE1Olx0XHRcdC8qIElmIHdlIGZhaWxlZCBoZXJlLCB3ZSBtaWdodCBhcyB3ZWxsIHJldHVybiBhbmQgaGF2ZSBhIGxlYWtcbiAzMTY6XHRcdFx0ICogcmF0aGVyIHRoYW4gY29udGludWUgYW5kIGEgYnVnY2hrXG4gMzE3Olx0XHRcdCAqL1xuIDMxODpcdFx0XHRpZiAocmV0ICE9IDApIHtcbiAzMTk6XHRcdFx0XHR2bWJ1c19sZWFrX2J1ZmZlcihcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXJlY3ZfYnVmLFxuIDMyMDpcdFx0XHRcdFx0XHQgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWZfY2h1bmtzLFxuIDMyMTpcdFx0XHRcdFx0XHQgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWZfY2h1bmtfY250KTtcbiAzMjI6XHRcdFx0XHRuZXRkZXZfZXJyKG5kZXYsXG4gMzIzOlx0XHRcdFx0XHQgICBcJiMzNDt1bmFibGUgdG8gdGVhcmRvd24gcmVjZWl2ZSBidWZmZXImIzM5O3MgZ3BhZGxcXG5cJiMzNDspO1xuIDMyNDpcdFx0XHRcdHJldHVybjtcbiAzMjU6XHRcdFx0fVxuIDMyNjpcdFx0fVxuIDMyNzpcdH1cbiAzMjg6XHRcbiAzMjk6XHRzdGF0aWMgdm9pZCBuZXR2c2NfdGVhcmRvd25fc2VuZF9ncGFkbChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4gMzMwOlx0XHRcdFx0XHQgICAgICAgc3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldF9kZXZpY2UsXG4gMzMxOlx0XHRcdFx0XHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gMzMyOlx0e1xuIDMzMzpcdFx0aW50IHJldDtcbiAzMzQ6XHRcbiAzMzU6XHRcdGlmIChuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmX2dwYWRsX2hhbmRsZS5ncGFkbF9oYW5kbGUpIHtcbiAzMzY6XHRcdFx0cmV0ID0gdm1idXNfdGVhcmRvd25fZ3BhZGwoZGV2aWNlLVx1MDAzZWNoYW5uZWwsXG4gMzM3Olx0XHRcdFx0XHRcdCAgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWZfZ3BhZGxfaGFuZGxlKTtcbiAzMzg6XHRcbiAzMzk6XHRcdFx0LyogSWYgd2UgZmFpbGVkIGhlcmUsIHdlIG1pZ2h0IGFzIHdlbGwgcmV0dXJuIGFuZCBoYXZlIGEgbGVha1xuIDM0MDpcdFx0XHQgKiByYXRoZXIgdGhhbiBjb250aW51ZSBhbmQgYSBidWdjaGtcbiAzNDE6XHRcdFx0ICovXG4gMzQyOlx0XHRcdGlmIChyZXQgIT0gMCkge1xuIDM0MzpcdFx0XHRcdHZtYnVzX2xlYWtfYnVmZmVyKFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWYsXG4gMzQ0Olx0XHRcdFx0XHRcdCAgXHUwMDI2bmV0X2RldmljZS1cdTAwM2VzZW5kX2J1Zl9jaHVua3MsXG4gMzQ1Olx0XHRcdFx0XHRcdCAgXHUwMDI2bmV0X2RldmljZS1cdTAwM2VzZW5kX2J1Zl9jaHVua19jbnQpO1xuIDM0NjpcdFx0XHRcdG5ldGRldl9lcnIobmRldixcbiAzNDc6XHRcdFx0XHRcdCAgIFwmIzM0O3VuYWJsZSB0byB0ZWFyZG93biBzZW5kIGJ1ZmZlciYjMzk7cyBncGFkbFxcblwmIzM0Oyk7XG4gMzQ4Olx0XHRcdFx0cmV0dXJuO1xuIDM0OTpcdFx0XHR9XG4gMzUwOlx0XHR9XG4gMzUxOlx0fVxuIDM1MjpcdFxuIDM1MzpcdGludCBuZXR2c2NfYWxsb2NfcmVjdl9jb21wX3Jpbmcoc3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldF9kZXZpY2UsIHUzMiBxX2lkeClcbiAzNTQ6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQzNgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zOgoKKipJbnZlc3RpZ2F0aW5nIEdQQURMIFRlYXJkb3duIGluIE5ldHZzYyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIHRoZXNlIEdQQURMcyBpbiB0aGUgTmV0dnNjIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB0aGV5JiMzOTtyZSB0b3JuIGRvd24uICBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGNhbGxzIHRvIGBuZXR2c2NfdGVhcmRvd25fcmVjdl9ncGFkbGAgYW5kIGBuZXR2c2NfdGVhcmRvd25fc2VuZF9ncGFkbGAuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQg4oCTIHVuZGVyc3RhbmRpbmcgKndoZXJlKiB0aGVzZSB0ZWFyZG93biBmdW5jdGlvbnMgYXJlIGJlaW5nIGludm9rZWQgd2lsbCBwYWludCBhIHBpY3R1cmUgb2Ygd2hlbiwgYW5kIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcywgdGhlIEdQQURMcyBhcmUgY29uc2lkZXJlZCBubyBsb25nZXIgdmFsaWQgYW5kIG5lZWQgdG8gYmUgY2xlYW5lZCB1cC4gVGhpcyBpcyBhIHZlcnkgdGFyZ2V0ZWQgYXBwcm9hY2g7IEkmIzM5O20gbm90IGp1c3QgYnJvd3NpbmcgdGhlIGNvZGUgYWltbGVzc2x5LiBJJiMzOTttIGFmdGVyIHRoZSBkaXJlY3QgY2FsbCBzaXRlcy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byBpbmZlciB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhlIHRlYXJkb3duLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldHZzY190ZWFyZG93bl8ocmVjdnxzZW5kKV9ncGFkbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2h5cGVydi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jPTI1ND1zdGF0aWMgdm9pZCBuZXR2c2NfcmV2b2tlX3NlbmRfYnVmKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMzA0LVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjMwNTpzdGF0aWMgdm9pZCBuZXR2c2NfdGVhcmRvd25fcmVjdl9ncGFkbChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMzA2LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXRfZGV2aWNlLFxuLS1cbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0zMjgtXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6MzI5OnN0YXRpYyB2b2lkIG5ldHZzY190ZWFyZG93bl9zZW5kX2dwYWRsKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0zMzAtXHRcdFx0XHQgICAgICAgc3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldF9kZXZpY2UsXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jPTM2Nz1zdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTU4NS1cdG5ldHZzY19yZXZva2Vfc2VuZF9idWYoZGV2aWNlLCBuZXRfZGV2aWNlLCBuZGV2KTtcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzo1ODY6XHRuZXR2c2NfdGVhcmRvd25fcmVjdl9ncGFkbChkZXZpY2UsIG5ldF9kZXZpY2UsIG5kZXYpO1xuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjU4NzpcdG5ldHZzY190ZWFyZG93bl9zZW5kX2dwYWRsKGRldmljZSwgbmV0X2RldmljZSwgbmRldik7XG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtNTg4LVxuLS1cbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYz03MjY9dm9pZCBuZXR2c2NfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UpXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTc2My1cdC8qIE11c3QgZG8gdGhlIEdQQURMIHRlYXJkb3duIGFmdGVyIGNoYW5uZWwgaXMgY2xvc2VkICovXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6NzY0Olx0bmV0dnNjX3RlYXJkb3duX3JlY3ZfZ3BhZGwoZGV2aWNlLCBuZXRfZGV2aWNlLCBuZGV2KTtcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzo3NjU6XHRuZXR2c2NfdGVhcmRvd25fc2VuZF9ncGFkbChkZXZpY2UsIG5ldF9kZXZpY2UsIG5kZXYpO1xuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTc2Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjkzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IGtlcm5lbCBjb2RlIGJhc2VkIG9uIHRob3NlIGtleXdvcmRzOgoKKipEaXNzZWN0aW5nIHRoZSBWTUJ1cyBDaGFubmVsIE1lbW9yeSBNYW5hZ2VtZW50KioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBkcml2ZXJzL2h2L2NoYW5uZWwuY2AuIE15IGltbWVkaWF0ZSBpbnRlcmVzdCBpcyB0cmlnZ2VyZWQgYnkgdGhlIG1lbnRpb24gb2YgYHZtYnVzX2FsbG9jX2J1ZmZlcmAsIGB2bWJ1c19mcmVlX2J1ZmZlcmAsIGFuZCBgdm1idXNfbGVha19idWZmZXJgLiBNeSBzcGlkZXktc2Vuc2UgdGVsbHMgbWUgdGhlc2UgYXJlIGxpa2VseSB0aGUgY29yZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIG1lbW9yeSBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIGFuZCB3aGF0IGxvb2tzIGxpa2UgYSBwb3RlbnRpYWwgYnVmZmVyIGxlYWsgc2NlbmFyaW8sIHdpdGhpbiB0aGUgVk1CdXMgY2hhbm5lbCBoYW5kbGluZyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNoYW5uZWwgZHJpdmVyIGludGVyYWN0cyB3aXRoIG1lbW9yeSwgYW5kIHRoZXNlIHRocmVlIGZ1bmN0aW9ucyBhcmUgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIHdhbnQgdG8gdHJhY2UgdGhlIGxpZmV0aW1lIG9mIGEgYnVmZmVyIHdpdGhpbiB0aGlzIHN5c3RlbSwgdW5kZXJzdGFuZCBob3cgaXTigJlzIGFsbG9jYXRlZCwgdXNlZCwgYW5kLCBjcnVjaWFsbHksIGhvdyBpdHMgcmVzb3VyY2VzIGFyZSByZWxlYXNlZC4gVGhlIHByZXNlbmNlIG9mIGEgJiMzNDtsZWFrJiMzNDsgZnVuY3Rpb24gaXMgYSByZWQgZmxhZywgaGludGluZyBhdCBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IG9yIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlLCBzbyBteSBjdXJpb3NpdHkgaXMgcGlxdWVkLiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGF0IHdoZXJlIGB2bWJ1c19hbGxvY19idWZmZXJgIGlzIGNhbGxlZCwgd2hhdCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdG8gaXQsIGFuZCBob3cgdGhlIHJldHVybmVkIGJ1ZmZlciBpcyB1c2VkLiBUaGVuLCBJJiMzOTtsbCB0cmFjZSB0aHJvdWdoIHRoZSBjb3JyZXNwb25kaW5nIGNhbGxzIHRvIGB2bWJ1c19mcmVlX2J1ZmZlcmAgdG8gZW5zdXJlIHRoYXQgaXQmIzM5O3MgYmVpbmcgcGFpcmVkIGNvcnJlY3RseSB3aXRoIGFsbG9jYXRpb25zLiBGaW5hbGx5LCBJJiMzOTtsbCBhbmFseXplIGB2bWJ1c19sZWFrX2J1ZmZlcmAgYW5kIHNlZSB3aGF0IHRyaWdnZXJzIGl0cyBleGVjdXRpb24gYW5kIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBuYXR1cmUgb2YgdGhlIGxlYWsgYW5kIGl0cyBwb3RlbnRpYWwgaW1wYWN0LiBJdOKAmXMgYWxzbyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBtZW1vcnkgbW9kZWwgdGhhdCB1bmRlcnBpbnMgdGhlc2UgZnVuY3Rpb25zOyBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGEgcHJpdmF0ZSBoZWFwIG1hbmFnZWQgYnkgdGhlIFZNQnVzIGRyaXZlciwgYW5kIEkgbmVlZCB0byBhc3Nlc3MgaXRzIHRocmVhZCBzYWZldHkgYW5kIHBvdGVudGlhbCBmb3IgY29uY3VycmVuY3kgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9odi9jaGFubmVsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYzMDpcdFx0aWYgKCFjaHVua3MpIHtcbiA2MzE6XHRcdFx0dmZyZWUoYWRkcik7XG4gNjMyOlx0XHRcdHJldHVybjtcbiA2MzM6XHRcdH1cbiA2MzQ6XHRcbiA2MzU6XHRcdHZ1bm1hcChhZGRyKTtcbiA2MzY6XHRcbiA2Mzc6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNodW5rX2NudDsgaSYjNDM7JiM0MzspIHtcbiA2Mzg6XHRcdFx0dW5zaWduZWQgbG9uZyB2YWRkciA9XG4gNjM5Olx0XHRcdFx0KHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKGNodW5rc1tpXSk7XG4gNjQwOlx0XHRcdHVuc2lnbmVkIGludCBvcmRlciA9IGZvbGlvX29yZGVyKHBhZ2VfZm9saW8oY2h1bmtzW2ldKSk7XG4gNjQxOlx0XG4gNjQyOlx0XHRcdGlmIChzZXRfbWVtb3J5X2VuY3J5cHRlZCh2YWRkciwgMVUgXHUwMDNjXHUwMDNjIG9yZGVyKSlcbiA2NDM6XHRcdFx0XHRjb250aW51ZTtcbiA2NDQ6XHRcdFx0X19mcmVlX3BhZ2VzKGNodW5rc1tpXSwgb3JkZXIpO1xuIDY0NTpcdFx0fVxuIDY0NjpcdFxuIDY0NzpcdFx0a3ZmcmVlKGNodW5rcyk7XG4gNjQ4Olx0fVxuIDY0OTpcdEVYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2ZyZWVfYnVmZmVyKTtcbiA2NTA6XHRcbiA2NTE6XHQvKipcbiA2NTI6XHQgKiB2bWJ1c19sZWFrX2J1ZmZlciAtIHNldCB1cCBhIGJ1ZmZlciB0byBiZSBsZWFrZWQgYnkgdm1idXNfZnJlZV9idWZmZXIoKS5cbiA2NTM6XHQgKlxuIDY1NDpcdCAqIEBhZGRyOiBidWZmZXIgYWRkcmVzc1xuIDY1NTpcdCAqIEBjaHVua3M6IGNodW5rcyBhcnJheSBmcm9tIHZtYnVzX2FsbG9jX2J1ZmZlcigpXG4gNjU2Olx0ICogQGNodW5rX2NudDogbnVtYmVyIG9mIGVudHJpZXMgaW4gQGNodW5rc1xuIDY1NzpcdCAqXG4gNjU4Olx0ICogV2hlbiBAY2h1bmtzIGlzIE5VTEwgdGhlIGJ1ZmZlciBpcyBhIHBsYWluIHZ6YWxsb2MoKSBhbGxvY2F0aW9uIGFuZFxuIDY1OTpcdCAqIHRoZSBidWZmZXIgaXMgbGVha2VkIGJ5IHNldHRpbmcgQGFkZHIgdG8gTlVMTC4gT3RoZXJ3aXNlIHNldFxuIDY2MDpcdCAqIEBjaHVua19jbnQgdG8gMCBzbyB0aGF0IHZtYnVzX2ZyZWVfYnVmZmVyKCkgZG9lcyBub3QgdHJ5IHRvIHJlLWVuY3J5cHRcbiA2NjE6XHQgKiBvciBmcmVlIHRoZSBidWZmZXIgbWVtb3J5LCBidXQgc3RpbGwgcmVsZWFzZXMgdGhlIHZtYXAgYWRkcmVzcyBhbmRcbiA2NjI6XHQgKiB0aGUgY2h1bmtzIG1lbW9yeS5cbiA2NjM6XHQgKlxuIDY2NDpcdCAqIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBpbiBhIGNvbnRleHQgd2hlcmUgdGhlIGJ1ZmZlciBpcyBzdGlsbFxuIDY2NTpcdCAqIGJlaW5nIGFjY2Vzc2VkLiBJdCBtdXN0IG5vdCByZW1vdmUgYW55IGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3NlcyBvZlxuIDY2NjpcdCAqIHRoZSBidWZmZXIgb3IgY2hhbmdlIGl0cyBlbmNyeXB0aW9uIHN0YXR1cy5cbiA2Njc6XHQgKi9cbiA2Njg6XHR2b2lkIHZtYnVzX2xlYWtfYnVmZmVyKHZvaWQgKiphZGRyLCBzdHJ1Y3QgcGFnZSAqKipjaHVua3MsIHUzMiAqY2h1bmtfY250KVxuIDY2OTpcdHtcbiA2NzA6XHRcdGlmICgqY2h1bmtzKVxuIDY3MTpcdFx0XHQqY2h1bmtfY250ID0gMDtcbiA2NzI6XHRcdGVsc2VcbiA2NzM6XHRcdFx0KmFkZHIgPSBOVUxMO1xuIDY3NDpcdH1cbiA2NzU6XHRFWFBPUlRfU1lNQk9MX0dQTCh2bWJ1c19sZWFrX2J1ZmZlcik7XG4gNjc2Olx0XG4gNjc3Olx0LyoqXG4gNjc4Olx0ICogdm1idXNfYWxsb2NfYnVmZmVyIC0gYWxsb2NhdGUgYSBob3N0LXZpc2libGUsIHZpcnR1YWxseS1jb250aWd1b3VzIGJ1ZmZlci5cbiA2Nzk6XHQgKlxuIDY4MDpcdCAqIEBjaGFubmVsOiB0aGUgY2hhbm5lbCB0aGUgYnVmZmVyIHdpbGwgYmUgYXR0YWNoZWQgdG9cbiA2ODE6XHQgKiBAc2l6ZTogcmVxdWVzdGVkIGJ1ZmZlciBzaXplIGluIGJ5dGVzICh3aWxsIGJlIHJvdW5kZWQgdXAgdG8gUEFHRV9TSVpFKVxuIDY4MjpcdCAqIEBjaHVua3Nfb3V0OiBvbiBzdWNjZXNzLCBzZXQgdG8gdGhlIGFycmF5IG9mIHVuZGVybHlpbmcgY2h1bmtzLCBvciBOVUxMIHdoZW5cbiA2ODM6XHQgKiAgICAgICAgICAgICAgdGhlIGJ1ZmZlciB3YXMgYWxsb2NhdGVkIHdpdGggdnphbGxvYygpXG4gNjg0Olx0ICogQGNodW5rX2NudF9vdXQ6IG9uIHN1Y2Nlc3MsIHNldCB0byB0aGUgbnVtYmVyIG9mIGNodW5rc1xuIDY4NTpcdCAqXG4gNjg2Olx0ICogQnVmZmVycyBub3QgcmVxdWlyaW5nIGRlY3J5cHRpb24gYXJlIGFsbG9jYXRlZCB3aXRoIHZ6YWxsb2MoKS5cbiA2ODc6XHQgKlxuIDY4ODpcdCAqIEJ1ZmZlcnMgcmVxdWlyaW5nIGRlY3J5cHRpb24gYXJlIGFsbG9jYXRlZCBhcyBhIHNlcmllcyBvZlxuIDY4OTpcdCAqIHBoeXNpY2FsbHktY29udGlndW91cyBjaHVua3MsIHN0YXJ0aW5nIGF0IE1BWF9QQUdFX09SREVSIGFuZCBmYWxsaW5nIGJhY2sgdG9cbiA2OTA6XHQgKiBzbWFsbGVyIG9yZGVycyBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuIEVhY2ggY2h1bmsgaXMgdHJhbnNpdGlvbmVkIHRvXG4gNjkxOlx0ICogaG9zdC12aXNpYmxlIHZpYSBzZXRfbWVtb3J5X2RlY3J5cHRlZCgpIG9uIGl0cyBkaXJlY3QtbWFwIGFkZHJlc3MsIHRoZW4gYWxsXG4gNjkyOlx0ICogY2h1bmtzIGFyZSBjb21iaW5lZCBpbnRvIGEgdmlydHVhbGx5LWNvbnRpZ3VvdXMgcmFuZ2UgdmlhIHZtYXAoKS5cbiA2OTM6XHQgKlxuIDY5NDpcdCAqIFJldHVybjogdGhlIGJ1ZmZlciYjMzk7cyB2aXJ0dWFsIGFkZHJlc3MsIG9yIE5VTEwgb24gZmFpbHVyZS5cbiA2OTU6XHQgKi9cbiA2OTY6XHR2b2lkICp2bWJ1c19hbGxvY19idWZmZXIoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXG4gNjk3Olx0XHRcdFx0IHUzMiBzaXplLFxuIDY5ODpcdFx0XHRcdCBzdHJ1Y3QgcGFnZSAqKipjaHVua3Nfb3V0LFxuIDY5OTpcdFx0XHRcdCB1MzIgKmNodW5rX2NudF9vdXQpXG4gNzAwOlx0e1xuIDcwMTpcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IFBGTl9VUChzaXplKTtcbiA3MDI6XHRcdHVuc2lnbmVkIGxvbmcgcmVtYWluaW5nID0gbnJfcGFnZXM7XG4gNzAzOlx0XHR1bnNpZ25lZCBsb25nIHBhZ2VfaWR4ID0gMDtcbiA3MDQ6XHRcdHN0cnVjdCBwYWdlICoqY2h1bmtzID0gTlVMTDtcbiA3MDU6XHRcdHN0cnVjdCBwYWdlICoqcGFnZXMgPSBOVUxMO1xuIDcwNjpcdFx0aW50IG9yZGVyID0gTUFYX1BBR0VfT1JERVI7XG4gNzA3Olx0XHR1MzIgY2h1bmtfY250ID0gMDtcbiA3MDg6XHRcdHZvaWQgKmFkZHI7XG4gNzA5Olx0XHR1MzIgaTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDAwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2NvbmZpZyBJbnF1aXJ5OiBIeXBlci1WIERyaXZlcnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgZ292ZXJuIHRoZSBIeXBlci1WIGRyaXZlcnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGRyaXZlcnMgcmVzaWRpbmcgd2l0aGluIGBkcml2ZXJzL2h2L2AgYW5kLCBtb3JlIHByZWNpc2VseSwgdGhvc2UgbmVzdGVkIHVuZGVyIGBkcml2ZXJzL25ldC9oeXBlcnYvYC4gTXkgdXN1YWwgYXBwcm9hY2ggaGVyZSBpcyB0byBsZXZlcmFnZSB0aGUgS2NvbmZpZyBzZWFyY2ggbWVjaGFuaXNtcyDigJMgdGhhdCYjMzk7cyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIHBpbnBvaW50IHRoZSByZWxldmFudCB2YXJpYWJsZXMgYW5kIHVuZGVyc3RhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIHBvdGVudGlhbCBtZWFuaW5ncyB3aXRoaW4gdGhlIGJyb2FkZXIga2VybmVsIGNvbnRleHQuIFRpbWUgdG8gZGl2ZSBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhZUEVSViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaHYvS2NvbmZpZz0zPW1lbnUgXCYjMzQ7TWljcm9zb2Z0IEh5cGVyLVYgZ3Vlc3Qgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9odi9LY29uZmlnLTQtXG5kcml2ZXJzL2h2L0tjb25maWc6NTpjb25maWcgSFlQRVJWXG5kcml2ZXJzL2h2L0tjb25maWctNi1cdGJvb2wgXCYjMzQ7TWljcm9zb2Z0IEh5cGVyLVYgY29yZSBoeXBlcnZpc29yIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2h2L0tjb25maWctMTYtXG5kcml2ZXJzL2h2L0tjb25maWc6MTc6Y29uZmlnIEhZUEVSVl9WVExfTU9ERVxuZHJpdmVycy9odi9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtFbmFibGUgTGludXggdG8gYm9vdCBpbiBWVEwgY29udGV4dFwmIzM0O1xuLS1cbmRyaXZlcnMvaHYvS2NvbmZpZy00Mi1cbmRyaXZlcnMvaHYvS2NvbmZpZzo0Mzpjb25maWcgSFlQRVJWX1RJTUVSXG5kcml2ZXJzL2h2L0tjb25maWctNDQtXHRkZWZfYm9vbCBIWVBFUlYgXHUwMDI2XHUwMDI2IFg4NlxuZHJpdmVycy9odi9LY29uZmlnLTQ1LVxuZHJpdmVycy9odi9LY29uZmlnOjQ2OmNvbmZpZyBIWVBFUlZfVVRJTFNcbmRyaXZlcnMvaHYvS2NvbmZpZy00Ny1cdHRyaXN0YXRlIFwmIzM0O01pY3Jvc29mdCBIeXBlci1WIFV0aWxpdGllcyBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2h2L0tjb25maWctNTItXG5kcml2ZXJzL2h2L0tjb25maWc6NTM6Y29uZmlnIEhZUEVSVl9CQUxMT09OXG5kcml2ZXJzL2h2L0tjb25maWctNTQtXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgSHlwZXItViBCYWxsb29uIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvaHYvS2NvbmZpZy01OS1cbmRyaXZlcnMvaHYvS2NvbmZpZzo2MDpjb25maWcgSFlQRVJWX1ZNQlVTXG5kcml2ZXJzL2h2L0tjb25maWctNjEtXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgSHlwZXItViBWTUJ1cyBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9MjcxPWNvbmZpZyBTRVJJT19PTFBDX0FQU1Bcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjgwLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI4MTpjb25maWcgSFlQRVJWX0tFWUJPQVJEXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjgyLVx0dHJpc3RhdGUgXCYjMzQ7TWljcm9zb2Z0IFN5bnRoZXRpYyBLZXlib2FyZCBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWc6Mjpjb25maWcgSFlQRVJWX05FVFxuZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01pY3Jvc29mdCBIeXBlci1WIHZpcnR1YWwgbmV0d29yayBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3Njc2kvS2NvbmZpZz01Nzg9Y29uZmlnIFhFTl9TQ1NJX0ZST05URU5EXG4tLVxuZHJpdmVycy9zY3NpL0tjb25maWctNTg3LVxuZHJpdmVycy9zY3NpL0tjb25maWc6NTg4OmNvbmZpZyBIWVBFUlZfU1RPUkFHRVxuZHJpdmVycy9zY3NpL0tjb25maWctNTg5LVx0dHJpc3RhdGUgXCYjMzQ7TWljcm9zb2Z0IEh5cGVyLVYgdmlydHVhbCBzdG9yYWdlIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzgyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgdGhlIEh5cGVyLVYgRHJpdmVyIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBjaGFubmVsLmNgIGFuZCBgbmV0dnNjLmNgIGdldCBjb21waWxlZCBpbnRvIHRoZSBIeXBlci1WIGRyaXZlcnMuIE15IGZpcnN0IHN0ZXAgaXMgdG8gZGlnIGludG8gdGhlIE1ha2VmaWxlcy4gSSYjMzk7bGwgc3RhcnQgd2l0aCBgZHJpdmVycy9odi9NYWtlZmlsZWAgYW5kIGBkcml2ZXJzL25ldC9oeXBlcnYvTWFrZWZpbGVgLiBUaGVzZSBhcmUgdGhlIGxvZ2ljYWwgcGxhY2VzIHRvIGZpbmQgdGhlIGJ1aWxkIHJ1bGVzLCBkZXBlbmRlbmNpZXMsIGFuZCB1bHRpbWF0ZWx5LCB0aGUgY29tcGlsZXIgZmxhZ3MgdXNlZCBmb3IgdGhlc2Ugc3BlY2lmaWMgbW9kdWxlcyB3aXRoaW4gdGhlIEh5cGVyLVYgc3Vic3lzdGVtLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBleHBsaWNpdCBjb21waWxhdGlvbiB0YXJnZXRzIGZvciB0aGVzZSBmaWxlcyBvciwgbW9yZSBsaWtlbHksIGluY2x1c2lvbiBvZiBicm9hZGVyIGJ1aWxkIHJ1bGVzIHRoYXQgZW5jb21wYXNzIHRoZW0uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGUgb2JqZWN0IGZpbGVzIGFyZSBnZW5lcmF0ZWQsIHRoZSBsaWJyYXJpZXMgdGhleSBsaW5rIGFnYWluc3QsIGFuZCBob3cgdGhleSB1bHRpbWF0ZWx5IGJlY29tZSBwYXJ0IG9mIHRoZSBsYXJnZXIgYGh2YCBvciBgaHlwZXJ2YCBtb2R1bGVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIE1ha2VmaWxlcyByZXZlYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoYW5uZWxcXC5vfG5ldHZzY1xcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9ob3N0MXgvTWFrZWZpbGU9Mj1ob3N0MXgteSA9IFxcXG4tLVxuZHJpdmVycy9ncHUvaG9zdDF4L01ha2VmaWxlLTctXHRjZG1hLm8gXFxcbmRyaXZlcnMvZ3B1L2hvc3QxeC9NYWtlZmlsZTo4Olx0Y2hhbm5lbC5vIFxcXG5kcml2ZXJzL2dwdS9ob3N0MXgvTWFrZWZpbGUtOS1cdGpvYi5vIFxcXG4tLVxuZHJpdmVycy9odi9NYWtlZmlsZT0xMT1odl92bWJ1cy15IDo9IHZtYnVzX2Rydi5vIFxcXG5kcml2ZXJzL2h2L01ha2VmaWxlOjEyOlx0XHQgaHYubyBjb25uZWN0aW9uLm8gY2hhbm5lbC5vIFxcXG5kcml2ZXJzL2h2L01ha2VmaWxlLTEzLVx0XHQgY2hhbm5lbF9tZ210Lm8gcmluZ19idWZmZXIubyBodl90cmFjZS5vXG4tLVxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdmlkdHYvTWFrZWZpbGU9NT1kdmItdmlkdHYtYnJpZGdlLW9ianMgOj0gdmlkdHZfYnJpZGdlLm8gdmlkdHZfY29tbW9uLm8gdmlkdHZfdHMubyB2aWR0dl9wc2kubyBcXFxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdmlkdHYvTWFrZWZpbGU6NjpcdFx0XHQgdmlkdHZfcGVzLm8gdmlkdHZfczMwMm0ubyB2aWR0dl9jaGFubmVsLm8gdmlkdHZfbXV4Lm9cbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpZHR2L01ha2VmaWxlLTctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvTWFrZWZpbGU9NT1vYmotJChDT05GSUdfTUlDUk9TT0ZUX01BTkEpICYjNDM7PSBtYW5hLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL01ha2VmaWxlOjY6bWFuYS1vYmpzIDo9IGdkbWFfbWFpbi5vIHNobV9jaGFubmVsLm8gaHdfY2hhbm5lbC5vIG1hbmFfZW4ubyBtYW5hX2V0aHRvb2wubyBtYW5hX2JwZi5vXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC9oeXBlcnYvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfSFlQRVJWX05FVCkgJiM0Mzs9IGh2X25ldHZzYy5vXG5kcml2ZXJzL25ldC9oeXBlcnYvTWFrZWZpbGUtMy1cbmRyaXZlcnMvbmV0L2h5cGVydi9NYWtlZmlsZTo0Omh2X25ldHZzYy15IDo9IG5ldHZzY19kcnYubyBuZXR2c2MubyBybmRpc19maWx0ZXIubyBuZXR2c2NfdHJhY2UubyBuZXR2c2NfYnBmLm9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGU9Mj1hdGg5ay15ICYjNDM7PVx0YmVhY29uLm8gXFxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGUtOS1cdFx0YW50ZW5uYS5vIFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGU6MTA6XHRcdGNoYW5uZWwub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlLTExLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9NYWtlZmlsZT0yMz1icmNtc21hYy15IDo9IFxcXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL01ha2VmaWxlLTI3LVx0YW50c2VsLm8gXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9NYWtlZmlsZToyODpcdGNoYW5uZWwubyBcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL01ha2VmaWxlLTI5LVx0bWFpbi5vIFxcXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9NYWtlZmlsZT0xMT1tdDc2LXkgOj0gXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvTWFrZWZpbGUtMTItXHRtbWlvLm8gdXRpbC5vIHRyYWNlLm8gZG1hLm8gbWFjODAyMTEubyBkZWJ1Z2ZzLm8gZWVwcm9tLm8gXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvTWFrZWZpbGU6MTM6XHR0eC5vIGFnZy1yeC5vIG1jdS5vIHdlZC5vIHNjYW4ubyBjaGFubmVsLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvTWFrZWZpbGUtMTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiBrZXJuZWwgZGV2ZWxvcG1lbnQ6CgoqKkV4YW1pbmluZyBIeXBlci1WIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBIeXBlci1WIGRyaXZlcnMuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYEtjb25maWdgIGZpbGVzIOKAkyB0aGV5JiMzOTtyZSB0aGUgaGVhcnQgb2YgdGhlIGJ1aWxkIHN5c3RlbSYjMzk7cyBsb2dpYy4gSSBrbm93IEkmIzM5O2xsIGJlIHN0YXJ0aW5nIGJ5IGNyb3NzLXJlZmVyZW5jaW5nIGBkcml2ZXJzL2h2L0tjb25maWdgIGFuZCBgZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWdgLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhleSYjMzk7cmUgc3RydWN0dXJlZCBhbmQgcmVsYXRlZC4gQXJlIHRoZXJlIGNvbW1vbiBkZXBlbmRlbmNpZXMgb3Igc2hhcmVkIHNldHRpbmdzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIGNvbnNvbGlkYXRpb24gb3IgaW1wcm92ZW1lbnQ/IEkgZXhwZWN0IHRoZSBmaXJzdCBvbmUgdG8gY29udGFpbiB0aGUgY29yZSBIViBkZWZpbml0aW9ucyBhbmQgb3B0aW9ucywgYW5kIHRoZSBzZWNvbmQgdG8gaW5jbHVkZSB0aGUgbmV0d29ya2luZy1zcGVjaWZpYyBjb25maWd1cmF0aW9uLiBUaW1lIHRvIGRpZyBpbiBhbmQgbWFwIG91dCB0aGVzZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGhpcyBzaG91bGQgYmUgcXVpY2ssIHRob3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2h2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0bWVudSBcJiMzNDtNaWNyb3NvZnQgSHlwZXItViBndWVzdCBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIEhZUEVSVlxuICAgNjpcdFx0Ym9vbCBcJiMzNDtNaWNyb3NvZnQgSHlwZXItViBjb3JlIGh5cGVydmlzb3Igc3VwcG9ydFwmIzM0O1xuICAgNzpcdFx0ZGVwZW5kcyBvbiAoWDg2IFx1MDAyNlx1MDAyNiBYODZfTE9DQUxfQVBJQyBcdTAwMjZcdTAwMjYgSFlQRVJWSVNPUl9HVUVTVCkgXFxcbiAgIDg6XHRcdFx0fHwgKEFSTTY0IFx1MDAyNlx1MDAyNiAhQ1BVX0JJR19FTkRJQU4pXG4gICA5Olx0XHRzZWxlY3QgUEFSQVZJUlRcbiAgMTA6XHRcdHNlbGVjdCBYODZfSFZfQ0FMTEJBQ0tfVkVDVE9SIGlmIFg4NlxuICAxMTpcdFx0c2VsZWN0IE9GX0VBUkxZX0ZMQVRUUkVFIGlmIE9GXG4gIDEyOlx0XHRzZWxlY3QgSVJRX01TSV9MSUIgaWYgWDg2XG4gIDEzOlx0XHRoZWxwXG4gIDE0Olx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBydW4gTGludXggYXMgYSBIeXBlci1WIGNsaWVudCBvcGVyYXRpbmdcbiAgMTU6XHRcdCAgc3lzdGVtLlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBIWVBFUlZfVlRMX01PREVcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIExpbnV4IHRvIGJvb3QgaW4gVlRMIGNvbnRleHRcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gKFg4Nl82NCBcdTAwMjZcdTAwMjYgSEFWRV9TVEFUSUNfQ0FMTCkgfHwgQVJNNjRcbiAgMjA6XHRcdGRlcGVuZHMgb24gSFlQRVJWXG4gIDIxOlx0XHRkZXBlbmRzIG9uIFNNUFxuICAyMjpcdFx0ZGVmYXVsdCBuXG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFZpcnR1YWwgU2VjdXJlIE1vZGUgKFZTTSkgaXMgYSBzZXQgb2YgaHlwZXJ2aXNvciBjYXBhYmlsaXRpZXMgYW5kXG4gIDI1Olx0XHQgIGVubGlnaHRlbm1lbnRzIG9mZmVyZWQgdG8gaG9zdCBhbmQgZ3Vlc3QgcGFydGl0aW9ucyB3aGljaCBlbmFibGVzXG4gIDI2Olx0XHQgIHRoZSBjcmVhdGlvbiBhbmQgbWFuYWdlbWVudCBvZiBuZXcgc2VjdXJpdHkgYm91bmRhcmllcyB3aXRoaW5cbiAgMjc6XHRcdCAgb3BlcmF0aW5nIHN5c3RlbSBzb2Z0d2FyZS5cbiAgMjg6XHRcbiAgMjk6XHRcdCAgVlNNIGFjaGlldmVzIGFuZCBtYWludGFpbnMgaXNvbGF0aW9uIHRocm91Z2ggVmlydHVhbCBUcnVzdCBMZXZlbHNcbiAgMzA6XHRcdCAgKFZUTHMpLiBWaXJ0dWFsIFRydXN0IExldmVscyBhcmUgaGllcmFyY2hpY2FsLCB3aXRoIGhpZ2hlciBsZXZlbHNcbiAgMzE6XHRcdCAgYmVpbmcgbW9yZSBwcml2aWxlZ2VkIHRoYW4gbG93ZXIgbGV2ZWxzLiBWVEwwIGlzIHRoZSBsZWFzdCBwcml2aWxlZ2VkXG4gIDMyOlx0XHQgIGxldmVsLCBhbmQgY3VycmVudGx5IG9ubHkgb3RoZXIgbGV2ZWwgc3VwcG9ydGVkIGlzIFZUTDIuXG4gIDMzOlx0XG4gIDM0Olx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBidWlsZCBhIExpbnV4IGtlcm5lbCB0byBydW4gYXQgYSBWVEwgb3RoZXIgdGhhblxuICAzNTpcdFx0ICB0aGUgbm9ybWFsIFZUTDAsIHdoaWNoIGN1cnJlbnRseSBpcyBvbmx5IFZUTDIuICBUaGlzIG9wdGlvblxuICAzNjpcdFx0ICBpbml0aWFsaXplcyB0aGUga2VybmVsIHRvIHJ1biBpbiBWVEwyLCBhbmQgYWRkcyB0aGUgYWJpbGl0eSB0byBib290XG4gIDM3Olx0XHQgIHNlY29uZGFyeSBDUFVzIGRpcmVjdGx5IGludG8gNjQtYml0IGNvbnRleHQgYXMgcmVxdWlyZWQgZm9yIFZUTHMgb3RoZXJcbiAgMzg6XHRcdCAgdGhhbiAwLiAgQSBrZXJuZWwgYnVpbHQgd2l0aCB0aGlzIG9wdGlvbiBtdXN0IHJ1biBhdCBWVEwyLCBhbmQgd2lsbFxuICAzOTpcdFx0ICBub3QgcnVuIGFzIGEgbm9ybWFsIGd1ZXN0LlxuICA0MDpcdFxuICA0MTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOXG4gIDQyOlx0XG4gIDQzOlx0Y29uZmlnIEhZUEVSVl9USU1FUlxuICA0NDpcdFx0ZGVmX2Jvb2wgSFlQRVJWIFx1MDAyNlx1MDAyNiBYODZcbiAgNDU6XHRcbiAgNDY6XHRjb25maWcgSFlQRVJWX1VUSUxTXG4gIDQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgSHlwZXItViBVdGlsaXRpZXMgZHJpdmVyXCYjMzQ7XG4gIDQ4Olx0XHRkZXBlbmRzIG9uIEhZUEVSVl9WTUJVUyBcdTAwMjZcdTAwMjYgQ09OTkVDVE9SIFx1MDAyNlx1MDAyNiBOTFNcbiAgNDk6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgNTA6XHRcdGhlbHBcbiAgNTE6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIGVuYWJsZSB0aGUgSHlwZXItViBVdGlsaXRpZXMuXG4gIDUyOlx0XG4gIDUzOlx0Y29uZmlnIEhZUEVSVl9CQUxMT09OXG4gIDU0Olx0XHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgSHlwZXItViBCYWxsb29uIGRyaXZlclwmIzM0O1xuICA1NTpcdFx0ZGVwZW5kcyBvbiBIWVBFUlZfVk1CVVNcbiAgNTY6XHRcdHNlbGVjdCBQQUdFX1JFUE9SVElOR1xuICA1NzpcdFx0aGVscFxuICA1ODpcdFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gZW5hYmxlIEh5cGVyLVYgQmFsbG9vbiBkcml2ZXIuXG4gIDU5Olx0XG4gIDYwOlx0Y29uZmlnIEhZUEVSVl9WTUJVU1xuICA2MTpcdFx0dHJpc3RhdGUgXCYjMzQ7TWljcm9zb2Z0IEh5cGVyLVYgVk1CdXMgZHJpdmVyXCYjMzQ7XG4gIDYyOlx0XHRkZXBlbmRzIG9uIEhZUEVSVlxuICA2MzpcdFx0ZGVmYXVsdCBIWVBFUlZcbiAgNjQ6XHRcdHNlbGVjdCBTWVNGQiBpZiBFRkkgXHUwMDI2XHUwMDI2ICFIWVBFUlZfVlRMX01PREVcbiAgNjU6XHRcdGhlbHBcbiAgNjY6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIGVuYWJsZSBIeXBlci1WIFZtYnVzIGRyaXZlci5cbiAgNjc6XHRcbiAgNjg6XHRjb25maWcgTVNIVl9ST09UXG4gIDY5Olx0XHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgSHlwZXItViByb290IHBhcnRpdGlvbiBzdXBwb3J0XCYjMzQ7XG4gIDcwOlx0XHRkZXBlbmRzIG9uIEhZUEVSViBcdTAwMjZcdTAwMjYgKFg4Nl82NCB8fCBBUk02NClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExODYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIEh5cGVyLVYgTmV0d29ya2luZyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBIeXBlci1WIG5ldHdvcmsgZHJpdmVycy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGhlYWRpbmcgb3ZlciB0byBgZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBzdWJzeXN0ZW0gYXJlIGRlZmluZWQuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNvbnRyb2xsYWJsZSwgd2hhdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQsIGFuZCBob3cgdGhlIHZhcmlvdXMgZmVhdHVyZXMgaW50ZXJhY3Qgd2l0aCBvbmUgYW5vdGhlci4gVGhpcyBmaWxlIHdpbGwgdGVsbCBtZSBob3cgdGhlIHVzZXIgaGFzIGNvbmZpZ3VyZWQgdGhpcyBwYXJ0aWN1bGFyIHN1YnN5c3RlbSwgYW5kIEkgd2lsbCBiZSBhYmxlIHRvIHRlbGwgd2hhdCBjaG9pY2VzIHRoZXkgaGF2ZSBtYWRlIGZvciB0aGlzIHBhcnQgb2YgdGhlIGRyaXZlci4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGFyY2hpdGVjdHVyZSBhbmQgb3B0aW9ucy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIG5ldHdvcmsgc3RhY2suIFVuZGVyc3RhbmRpbmcgdGhpcyBLY29uZmlnIGZpbGUgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkIHJlYWxseSBncmFzcGluZyB0aGUgY2FwYWJpbGl0aWVzIGFuZCBjb25maWd1cmF0aW9uIG9mIHRoZSBIeXBlci1WIG5ldHdvcmsgZHJpdmVycy4gRnJvbSBoZXJlIEkgY2FuIHN0YXJ0IHRvIGZvbGxvdyB0aGUgbGlua3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgSFlQRVJWX05FVFxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TWljcm9zb2Z0IEh5cGVyLVYgdmlydHVhbCBuZXR3b3JrIGRyaXZlclwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBIWVBFUlZfVk1CVVNcbiAgIDU6XHRcdHNlbGVjdCBVQ1MyX1NUUklOR1xuICAgNjpcdFx0c2VsZWN0IE5MU1xuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gZW5hYmxlIHRoZSBIeXBlci1WIHZpcnR1YWwgbmV0d29yayBkcml2ZXIuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTY4CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgSHlwZXItViBSZWFjaGFiaWxpdHkgaW4gRnV6emluZyBFbnZpcm9ubWVudHMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgSSBjYW4gYWN0dWFsbHkgcmVhY2ggSHlwZXItViBjb21wb25lbnRzIGxpa2UgdGhlIFZNQnVzIGFuZCBIWVBFUlZfTkVUIHdpdGhpbiBmdXp6aW5nIGVudmlyb25tZW50cyDigJMgc3BlY2lmaWNhbGx5LCBRRU1VIGFuZCBHQ0UmIzM5O3MgU3l6a2FsbGVyIHNldHVwcy4gQmVmb3JlIGRpdmluZyBpbiwgSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgSHlwZXItViBvcGVyYXRlcy4gKkhvdyBkb2VzIHRoZSBoeXBlcnZpc29yIHdvcmssIGZ1bmRhbWVudGFsbHk/KiBBaCwgcmlnaHQsIEh5cGVyLVYgaXMgTWljcm9zb2Z0JiMzOTtzIGh5cGVydmlzb3IuIElmIEkmIzM5O20gcnVubmluZyBhIGd1ZXN0IE9TICp1bmRlciogSHlwZXItViwgdGhlIHN5c3RlbSBzaG91bGQgYmUgYWJsZSB0byBkZXRlY3QgdGhpcyB0aHJvdWdoIGEgQ1BVSUQgY2hlY2sgdmlhIGBoeXBlcnZfaW5pdCgpYC4gTm93LCBJIG5lZWQgdG8gZm9jdXMgb24gZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCBwcm9iaW5nLiBMZXQmIzM5O3Mgc2VlIGhvdyBgdm1idXNfZHJ2LmNgIGhhbmRsZXMgdGhhdC4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfaW5pdHxzdWJzeXNfaW5pdGNhbGx8dm1idXNfYnVzX2luaXR8aHlwZXJ2X2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2h2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2h2L2h2X2JhbGxvb24uYz0yMTI0PXN0YXRpYyBpbnQgX19pbml0IGluaXRfYmFsbG9vbl9kcnYodm9pZClcbi0tXG5kcml2ZXJzL2h2L2h2X2JhbGxvb24uYy0yMTI4LVxuZHJpdmVycy9odi9odl9iYWxsb29uLmM6MjEyOTptb2R1bGVfaW5pdChpbml0X2JhbGxvb25fZHJ2KTtcbmRyaXZlcnMvaHYvaHZfYmFsbG9vbi5jLTIxMzAtXG4tLVxuZHJpdmVycy9odi9odl9jb21tb24uYz0zOD1FWFBPUlRfU1lNQk9MX0dQTChodl9jdXJyX3BhcnRpdGlvbl90eXBlKTtcbi0tXG5kcml2ZXJzL2h2L2h2X2NvbW1vbi5jLTQzLSAqIGJ1aWx0IG9ubHkgd2hlbiBDT05GSUdfSFlQRVJWIGlzIGRlZmluZWQuICBCdXQgb24geDg2LFxuZHJpdmVycy9odi9odl9jb21tb24uYzo0NDogKiBtc19oeXBlcnZfaW5pdF9wbGF0Zm9ybSgpIGlzIGJ1aWx0IGV2ZW4gd2hlbiBDT05GSUdfSFlQRVJWIGlzIG5vdFxuZHJpdmVycy9odi9odl9jb21tb24uYy00NS0gKiBkZWZpbmVkLCBhbmQgaXQgdXNlcyB0aGVzZSB0aHJlZSB2YXJpYWJsZXMuICBTbyBtYXJrIHRoZW0gYXMgX193ZWFrXG5kcml2ZXJzL2h2L2h2X2NvbW1vbi5jLTQ2LSAqIGhlcmUsIGFsbG93aW5nIGZvciBhbiBvdmVycmlkaW5nIGRlZmluaXRpb24gaW4gdGhlIG1vZHVsZSBjb250YWluaW5nXG5kcml2ZXJzL2h2L2h2X2NvbW1vbi5jOjQ3OiAqIG1zX2h5cGVydl9pbml0X3BsYXRmb3JtKCkuXG5kcml2ZXJzL2h2L2h2X2NvbW1vbi5jLTQ4LSAqL1xuLS1cbmRyaXZlcnMvaHYvaHZfdXRpbC5jPTgwND1zdGF0aWMgdm9pZCBleGl0X2h5cGVydl91dGlscyh2b2lkKVxuLS1cbmRyaXZlcnMvaHYvaHZfdXRpbC5jLTgxMC1cbmRyaXZlcnMvaHYvaHZfdXRpbC5jOjgxMTptb2R1bGVfaW5pdChpbml0X2h5cGVydl91dGlscyk7XG5kcml2ZXJzL2h2L2h2X3V0aWwuYy04MTItbW9kdWxlX2V4aXQoZXhpdF9oeXBlcnZfdXRpbHMpO1xuLS1cbmRyaXZlcnMvaHYvaHlwZXJ2X3ZtYnVzLmg9MTI2PXN0cnVjdCBodl9wZXJfY3B1X2NvbnRleHQge1xuLS1cbmRyaXZlcnMvaHYvaHlwZXJ2X3ZtYnVzLmgtMTU0LVx0ICogVk0sIHNvIHBvc3RfbXNnX3BhZ2UgKHdoaWNoIGlzIGRlY3J5cHRlZCBpbiBodl9zeW5pY19hbGxvYygpKSBpc1xuZHJpdmVycy9odi9oeXBlcnZfdm1idXMuaDoxNTU6XHQgKiBpbnRyb2R1Y2VkIGZvciB0aGlzIHB1cnBvc2UuIFNlZSBoeXBlcnZfaW5pdCgpIGZvciBtb3JlIGNvbW1lbnRzLlxuZHJpdmVycy9odi9oeXBlcnZfdm1idXMuaC0xNTYtXHQgKi9cbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM9MjQyOD1zdGF0aWMgdm9pZCBfX2V4aXQgbXNodl9wYXJlbnRfcGFydGl0aW9uX2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjQzOC1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoyNDM5Om1vZHVsZV9pbml0KG1zaHZfcGFyZW50X3BhcnRpdGlvbl9pbml0KTtcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yNDQwLW1vZHVsZV9leGl0KG1zaHZfcGFyZW50X3BhcnRpdGlvbl9leGl0KTtcbi0tXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYz0xMzk4PXN0YXRpYyB2b2lkIF9fZXhpdCBtc2h2X3Z0bF9leGl0KHZvaWQpXG4tLVxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtMTQwOC1cbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jOjE0MDk6bW9kdWxlX2luaXQobXNodl92dGxfaW5pdCk7XG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy0xNDEwLW1vZHVsZV9leGl0KG1zaHZfdnRsX2V4aXQpO1xuLS1cbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmM9MTQwOT1zdGF0aWMgaW50IHZtYnVzX2FsbG9jX3N5bmljX2FuZF9jb25uZWN0KHZvaWQpXG4tLVxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0xNDYxLS8qXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jOjE0NjI6ICogdm1idXNfYnVzX2luaXQgLU1haW4gdm1idXMgZHJpdmVyIGluaXRpYWxpemF0aW9uIHJvdXRpbmUuXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jLTE0NjMtICpcbi0tXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jLTE0NjgtICovXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jOjE0Njk6c3RhdGljIGludCB2bWJ1c19idXNfaW5pdCh2b2lkKVxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0xNDcwLXtcbi0tXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jPTI5NzE9c3RhdGljIGludCBfX2luaXQgaHZfYWNwaV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0yOTc0LVxuZHJpdmVycy9odi92bWJ1c19kcnYuYzoyOTc1Olx0aWYgKCFodl9pc19oeXBlcnZfaW5pdGlhbGl6ZWQoKSlcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmMtMjk3Ni1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0zMDEyLVxuZHJpdmVycy9odi92bWJ1c19kcnYuYzozMDEzOlx0cmV0ID0gdm1idXNfYnVzX2luaXQoKTtcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmMtMzAxNC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9odi92bWJ1c19kcnYuYz0zMDgzPU1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtNaWNyb3NvZnQgSHlwZXItViBWTUJ1cyBEcml2ZXJcJiMzNDspO1xuZHJpdmVycy9odi92bWJ1c19kcnYuYy0zMDg0LVxuZHJpdmVycy9odi92bWJ1c19kcnYuYzozMDg1OnN1YnN5c19pbml0Y2FsbChodl9hY3BpX2luaXQpO1xuZHJpdmVycy9odi92bWJ1c19kcnYuYy0zMDg2LW1vZHVsZV9leGl0KHZtYnVzX2V4aXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE0NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipIeXBlci1WIEluaXRpYWxpemF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGh2X2FjcGlfaW5pdCgpYCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoaXMgY2hlY2s6IGBpZiAoIWh2X2lzX2h5cGVydl9pbml0aWFsaXplZCgpKSByZXR1cm4gLUVOT0RFVjtgLiBOYXR1cmFsbHksIG15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcywgJiMzNDtBbHJpZ2h0LCB3aGVyZSBpcyBgaHZfaXNfaHlwZXJ2X2luaXRpYWxpemVkKClgIGRlZmluZWQ/JiMzNDsgV2Uga25vdyB0aGF0JiMzOTtzIHRoZSBjcnVjaWFsIGdhdGVrZWVwZXIuIEl0JiMzOTtzIHRoZSBjaGVjayB0byBzZWUgaWYgd2UgZXZlbiAqc2hvdWxkKiBwcm9jZWVkIHdpdGggSHlwZXItViBzZXR1cCwgYW5kIGlmIG5vdCwgd2UmIzM5O3JlIGp1c3QgZ29pbmcgdG8gdGhyb3cgYW4gZXJyb3IgYW5kIGJhaWwuIE5vdywgbGV0JiMzOTtzIHRyYWNrIGRvd24gdGhhdCBkZWZpbml0aW9uLiBUaW1lIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgYW5kIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodl9pc19oeXBlcnZfaW5pdGlhbGl6ZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2h5cGVydi9tc2h5cGVydi5jPTEzMD1lYXJseV9pbml0Y2FsbChoeXBlcnZfaW5pdCk7XG5hcmNoL2FybTY0L2h5cGVydi9tc2h5cGVydi5jLTEzMS1cbmFyY2gvYXJtNjQvaHlwZXJ2L21zaHlwZXJ2LmM6MTMyOmJvb2wgaHZfaXNfaHlwZXJ2X2luaXRpYWxpemVkKHZvaWQpXG5hcmNoL2FybTY0L2h5cGVydi9tc2h5cGVydi5jLTEzMy17XG4tLVxuYXJjaC9hcm02NC9oeXBlcnYvbXNoeXBlcnYuYy0xMzUtfVxuYXJjaC9hcm02NC9oeXBlcnYvbXNoeXBlcnYuYzoxMzY6RVhQT1JUX1NZTUJPTF9HUEwoaHZfaXNfaHlwZXJ2X2luaXRpYWxpemVkKTtcbi0tXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jPTY4OD1FWFBPUlRfU1lNQk9MX0dQTChoeXBlcnZfcmVwb3J0X3BhbmljKTtcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmMtNjg5LVxuYXJjaC94ODYvaHlwZXJ2L2h2X2luaXQuYzo2OTA6Ym9vbCBodl9pc19oeXBlcnZfaW5pdGlhbGl6ZWQodm9pZClcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmMtNjkxLXtcbi0tXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jLTcxMi19XG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jOjcxMzpFWFBPUlRfU1lNQk9MX0dQTChodl9pc19oeXBlcnZfaW5pdGlhbGl6ZWQpO1xuYXJjaC94ODYvaHlwZXJ2L2h2X2luaXQuYy03MTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzUyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgSHlwZXItViBJbml0aWFsaXphdGlvbiBDb2RlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHg4NiBIeXBlci1WIGluaXRpYWxpemF0aW9uIGlzIGhhbmRsZWQuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBhcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgc2hvdWxkIGJlZ2luLCByaWdodD8gVGhpcyBmaWxlIHNob3VsZCBjb250YWluIHRoZSBjb3JlIGxvZ2ljIGZvciBzZXR0aW5nIHVwIHRoZSBrZXJuZWwgdG8gcnVuIHdpdGhpbiBhIEh5cGVyLVYgZW52aXJvbm1lbnQgb24gYW4geDg2IGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGRldGVjdCBpZiB3ZSYjMzk7cmUgYWN0dWFsbHkgKmluKiBhIEh5cGVyLVYgZ3Vlc3QsIGFuZCB0aGVuIGNvZGUgcGF0aHMgdG8gY29uZmlndXJlIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSB2aXJ0dWxpemF0aW9uIGludGVyZmFjZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHJlZ2lzdGVyaW5nIEh5cGVyLVYgc3BlY2lmaWMgaW50ZXJydXB0IGhhbmRsZXJzLCBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgcGFyYXZpcnR1YWxpemVkIHN0cnVjdHVyZXMsIGFuZCBpbml0aWFsaXphdGlvbiBvZiBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIHdpdGggdGhlIGhvc3QuIFRoZXJlIHNob3VsZCBhbHNvIGJlIHNvbWUgcGxhdGZvcm0gY2hlY2sgc28gdGhhdCBpdCBkb2VzIG5vdCBnbyBmb3J3YXJkIGlmIHJ1bm5pbmcgb24gcGh5c2ljYWwgaGFyZHdhcmUuIEkgd2FudCB0byBzZWUgaG93IGVhcmx5IHRoaXMgaGFwcGVucyBpbiB0aGUgYm9vdCBwcm9jZXNzIGFuZCB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIHRoZSByZWd1bGFyIHg4NiBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBhbmQgaG93IHRoZXNlIGFyZSBoYW5kbGVkIHRvIGVuc3VyZSBhIHNlYW1sZXNzIGludGVncmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZDsgd2hhdCBraW5kIG9mIHNoYXJlZCBtZW1vcnkgb3IgY29udHJvbCBibG9ja3MgYXJlIGJlaW5nIHNldCB1cCBmb3IgY29tbXVuaWNhdGlvbi4gSSYjMzk7bSByZWFkeSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2OTA6XHRib29sIGh2X2lzX2h5cGVydl9pbml0aWFsaXplZCh2b2lkKVxuIDY5MTpcdHtcbiA2OTI6XHRcdHVuaW9uIGh2X3g2NF9tc3JfaHlwZXJjYWxsX2NvbnRlbnRzIGh5cGVyY2FsbF9tc3I7XG4gNjkzOlx0XG4gNjk0Olx0XHQvKlxuIDY5NTpcdFx0ICogRW5zdXJlIHRoYXQgd2UmIzM5O3JlIHJlYWxseSBvbiBIeXBlci1WLCBhbmQgbm90IGEgS1ZNIG9yIFhlblxuIDY5NjpcdFx0ICogZW11bGF0aW9uIG9mIEh5cGVyLVZcbiA2OTc6XHRcdCAqL1xuIDY5ODpcdFx0aWYgKHg4Nl9oeXBlcl90eXBlICE9IFg4Nl9IWVBFUl9NU19IWVBFUlYpXG4gNjk5Olx0XHRcdHJldHVybiBmYWxzZTtcbiA3MDA6XHRcbiA3MDE6XHRcdC8qIEEgVERYIFZNIHdpdGggbm8gcGFyYXZpc29yIHVzZXMgVERYIEdIQ0kgY2FsbCByYXRoZXIgdGhhbiBodl9oeXBlcmNhbGxfcGcgKi9cbiA3MDI6XHRcdGlmIChodl9pc29sYXRpb25fdHlwZV90ZHgoKSBcdTAwMjZcdTAwMjYgIW1zX2h5cGVydi5wYXJhdmlzb3JfcHJlc2VudClcbiA3MDM6XHRcdFx0cmV0dXJuIHRydWU7XG4gNzA0Olx0XHQvKlxuIDcwNTpcdFx0ICogVmVyaWZ5IHRoYXQgZWFybGllciBpbml0aWFsaXphdGlvbiBzdWNjZWVkZWQgYnkgY2hlY2tpbmdcbiA3MDY6XHRcdCAqIHRoYXQgdGhlIGh5cGVyY2FsbCBwYWdlIGlzIHNldHVwXG4gNzA3Olx0XHQgKi9cbiA3MDg6XHRcdGh5cGVyY2FsbF9tc3IuYXNfdWludDY0ID0gMDtcbiA3MDk6XHRcdHJkbXNycShIVl9YNjRfTVNSX0hZUEVSQ0FMTCwgaHlwZXJjYWxsX21zci5hc191aW50NjQpO1xuIDcxMDpcdFxuIDcxMTpcdFx0cmV0dXJuIGh5cGVyY2FsbF9tc3IuZW5hYmxlO1xuIDcxMjpcdH1cbiA3MTM6XHRFWFBPUlRfU1lNQk9MX0dQTChodl9pc19oeXBlcnZfaW5pdGlhbGl6ZWQpO1xuIDcxNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDUyMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIEh5cGVyLVYgQ29tcGF0aWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBzbmlwcGV0IG9mIGNvZGUsIGFuZCB0aGUgY29tbWVudCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIFRoZSBnb2FsIGlzIGNsZWFybHkgdG8gdmVyaWZ5IHRoZSBob3N0IGVudmlyb25tZW50IGlzICphY3R1YWxseSogSHlwZXItViBhbmQgbm90IHNvbWUgb3RoZXIgdmlydHVhbGl6YXRpb24gbGF5ZXIgbWFzcXVlcmFkaW5nIGFzIGl0LCBtYXliZSBLVk0gb3IgWGVuLiBTZWVtcyBzZW5zaWJsZSwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgY29tcGF0aWJpbGl0eSBpc3N1ZXMuIFRoZSBjb2RlIGl0c2VsZiwgYGlmICh4ODZfaHlwZXJfdHlwZSAhPSBYODZfSFlQRVJfTVNfSFlQRVJWKSByZXR1cm4gZmFsc2U7YCwgaXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBhIGRpcmVjdCBjaGVjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB4ODZfaHlwZXJfdHlwZWAgaXMgcG9wdWxhdGVkLiBUaGF0IG1lYW5zIEkgc2hvdWxkIGdvIGNoZWNrIHRoZSBmaWxlIHBhdGggYGFyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuY2AgdG8gdHJhY2UgaG93IHRoYXQgdmFyaWFibGUgZ2V0cyBpbml0aWFsaXplZCwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtYODZfSFlQRVJfTVNfSFlQRVJWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2h5cGVydi9odl9pbml0LmM9NDUyPXZvaWQgX19pbml0IGh5cGVydl9pbml0KHZvaWQpXG4tLVxuYXJjaC94ODYvaHlwZXJ2L2h2X2luaXQuYy00NTctXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jOjQ1ODpcdGlmICh4ODZfaHlwZXJfdHlwZSAhPSBYODZfSFlQRVJfTVNfSFlQRVJWKVxuYXJjaC94ODYvaHlwZXJ2L2h2X2luaXQuYy00NTktXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jPTY5MD1ib29sIGh2X2lzX2h5cGVydl9pbml0aWFsaXplZCh2b2lkKVxuLS1cbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmMtNjk3LVx0ICovXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jOjY5ODpcdGlmICh4ODZfaHlwZXJfdHlwZSAhPSBYODZfSFlQRVJfTVNfSFlQRVJWKVxuYXJjaC94ODYvaHlwZXJ2L2h2X2luaXQuYy02OTktXHRcdHJldHVybiBmYWxzZTtcbi0tXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmM9OTE2PWJvb2wgaHZfaXNfaXNvbGF0aW9uX3N1cHBvcnRlZCh2b2lkKVxuLS1cbmFyY2gveDg2L2h5cGVydi9pdm0uYy05MjAtXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmM6OTIxOlx0aWYgKCFoeXBlcnZpc29yX2lzX3R5cGUoWDg2X0hZUEVSX01TX0hZUEVSVikpXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmMtOTIyLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vaHlwZXJ2aXNvci5oPTI0PWVudW0geDg2X2h5cGVydmlzb3JfdHlwZSB7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vaHlwZXJ2aXNvci5oLTI2LVx0WDg2X0hZUEVSX1ZNV0FSRSxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaDoyNzpcdFg4Nl9IWVBFUl9NU19IWVBFUlYsXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oeXBlcnZpc29yLmgtMjgtXHRYODZfSFlQRVJfWEVOX1BWLFxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuYz04MTI9Y29uc3QgX19pbml0Y29uc3Qgc3RydWN0IGh5cGVydmlzb3JfeDg2IHg4Nl9oeXBlcl9tc19oeXBlcnYgPSB7XG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9tc2h5cGVydi5jLTgxNC1cdC5kZXRlY3RcdFx0XHQ9IG1zX2h5cGVydl9wbGF0Zm9ybSxcbmFyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuYzo4MTU6XHQudHlwZVx0XHRcdD0gWDg2X0hZUEVSX01TX0hZUEVSVixcbmFyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuYy04MTYtXHQuaW5pdC54MmFwaWNfYXZhaWxhYmxlXHQ9IG1zX2h5cGVydl94MmFwaWNfYXZhaWxhYmxlLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz02OTk5PWludCBrdm1feDg2X3ZlbmRvcl9pbml0KHN0cnVjdCBrdm1feDg2X2luaXRfb3BzICpvcHMpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTcxMTYtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzExNzpcdGlmIChoeXBlcnZpc29yX2lzX3R5cGUoWDg2X0hZUEVSX01TX0hZUEVSVikpXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzExOC1cdFx0c2V0X2h2X3RzY2NoYW5nZV9jYihrdm1faHlwZXJ2X3RzY19ub3RpZmllcik7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTcxNTg9dm9pZCBrdm1feDg2X3ZlbmRvcl9leGl0KHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTcxNjItI2lmZGVmIENPTkZJR19YODZfNjRcbmFyY2gveDg2L2t2bS94ODYuYzo3MTYzOlx0aWYgKGh5cGVydmlzb3JfaXNfdHlwZShYODZfSFlQRVJfTVNfSFlQRVJWKSlcbmFyY2gveDg2L2t2bS94ODYuYy03MTY0LVx0XHRjbGVhcl9odl90c2NjaGFuZ2VfY2IoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4MTUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipEaXZpbmcgaW50byB0aGUgdm1idXMgQnVmZmVyIE1hbmFnZW1lbnQqKgoKT2theSwgc28gYHZtYnVzX2xlYWtfYnVmZmVyYCBoYXMgYmVlbiBpbnRyb2R1Y2VkIGluIGBkcml2ZXJzL2h2L2NoYW5uZWwuY2AgYW5kIHN1YnNlcXVlbnRseSBnZXRzIHV0aWxpemVkIHdpdGhpbiBgZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jYC4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIGFsd2F5cyBidWZmZXIgbWFuYWdlbWVudCwgcGFydGljdWxhcmx5IGluIGEgZHJpdmVyIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3aWRlc3ByZWFkIHRoaXMgbmV3IGZ1bmN0aW9uIGlzLCBhbmQgaG93IGl0IGlzIHVzZWQuIElzIGl0IG9ubHkgdXNlZCBieSBuZXR2c2MuYywgb3IgZG9lcyBzb21ldGhpbmcgZWxzZSBjYWxsIGl0PyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIHNjb3BlIG9mIHRoaXMgbmV3IGJ1ZmZlciBmdW5jdGlvbiBhbmQgaXRzIHBvdGVudGlhbCBpbXBhY3QuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGNvbmZpcm0gd2hldGhlciBgdm1idXNfYWxsb2NfYnVmZmVyYCBpcyBhbHNvIHVzZWQgZWxzZXdoZXJlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSB0d28gcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYW55IG90aGVyIGluc3RhbmNlcyB3aGVyZSBgdm1idXNfbGVha19idWZmZXJgIG9yIGB2bWJ1c19hbGxvY19idWZmZXJgIGFyZSBpbnZva2VkIHdpdGhpbiB0aGUgY29kZWJhc2UgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBmdW5jdGlvbiYjMzk7cyBnbG9iYWwgaW1wYWN0LiBUaGVuLCBJIGNhbiBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSB1c2UgY2FzZSBmb3IgdGhpcyBuZXcgZnVuY3Rpb24sIGFuZCB3aGV0aGVyIGl0cyBpbnRyb2R1Y3Rpb24gcG9zZXMgYW55IHJpc2sgdG8gbWVtb3J5IHN0YWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1idXNfbGVha19idWZmZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2h2L2NoYW5uZWwuYz02NDk9RVhQT1JUX1NZTUJPTF9HUEwodm1idXNfZnJlZV9idWZmZXIpO1xuLS1cbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY1MS0vKipcbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjY1MjogKiB2bWJ1c19sZWFrX2J1ZmZlciAtIHNldCB1cCBhIGJ1ZmZlciB0byBiZSBsZWFrZWQgYnkgdm1idXNfZnJlZV9idWZmZXIoKS5cbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY1My0gKlxuLS1cbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY2Ny0gKi9cbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjY2ODp2b2lkIHZtYnVzX2xlYWtfYnVmZmVyKHZvaWQgKiphZGRyLCBzdHJ1Y3QgcGFnZSAqKipjaHVua3MsIHUzMiAqY2h1bmtfY250KVxuZHJpdmVycy9odi9jaGFubmVsLmMtNjY5LXtcbi0tXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02NzQtfVxuZHJpdmVycy9odi9jaGFubmVsLmM6Njc1OkVYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2xlYWtfYnVmZmVyKTtcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY3Ni1cbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM9MzA1PXN0YXRpYyB2b2lkIG5ldHZzY190ZWFyZG93bl9yZWN2X2dwYWRsKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMzE4LVx0XHRpZiAocmV0ICE9IDApIHtcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzozMTk6XHRcdFx0dm1idXNfbGVha19idWZmZXIoXHUwMDI2bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1ZixcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0zMjAtXHRcdFx0XHRcdCAgXHUwMDI2bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1Zl9jaHVua3MsXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jPTMyOT1zdGF0aWMgdm9pZCBuZXR2c2NfdGVhcmRvd25fc2VuZF9ncGFkbChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTM0Mi1cdFx0aWYgKHJldCAhPSAwKSB7XG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6MzQzOlx0XHRcdHZtYnVzX2xlYWtfYnVmZmVyKFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWYsXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMzQ0LVx0XHRcdFx0XHQgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWZfY2h1bmtzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjY3MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIEJ1ZmZlciBBbGxvY2F0aW9uIGFuZCBEZWFsbG9jYXRpb24gaW4gdGhlIFZNQnVzKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBtZW1vcnkgbWFuYWdlbWVudCBpcyBoYW5kbGVkIGluIHRoZSBWTUJ1cy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIGB2bWJ1c19hbGxvY19idWZmZXJgIGFuZCBgdm1idXNfZnJlZV9idWZmZXJgLiBUaGVzZSBhcmUgdGhlIGNvcmUgcHJpbWl0aXZlcyBmb3IgYnVmZmVyIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB3aXRoaW4gdGhlIFZNQnVzLCBhbmQgdG8gdHJ1bHkgdW5kZXJzdGFuZCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcywgSSBuZWVkIHRvIHNlZSB3aGVyZSB0aGV5JiMzOTtyZSBiZWluZyAqdXNlZCouIFdobyYjMzk7cyByZXF1ZXN0aW5nIG1lbW9yeT8gV2hvJiMzOTtzIHJlbGVhc2luZyBpdD8gV2hhdCBhcmUgdGhlIGNhbGxpbmcgY29udGV4dHM/IFRoaXMgaW5mb3JtYXRpb24gaXMgZnVuZGFtZW50YWwgZm9yIGRlYnVnZ2luZyBhbnkgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLCBvcHRpbWl6aW5nIHRoZSBidWZmZXIgcG9vbCwgb3IgZXZlbiBwcmVkaWN0aW5nIG1lbW9yeSB1c2FnZSBwYXR0ZXJucy4gVGhpcyBhbmFseXNpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBidWZmZXJzIGFyZSBmbG93aW5nIHRocm91Z2ggdGhlIHN5c3RlbSwgaG9wZWZ1bGx5IHJldmVhbGluZyBpbnNpZ2h0cyBpbnRvIGFueSBpbmVmZmljaWVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1idXNfKGFsbG9jfGZyZWUpX2J1ZmZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaHYvY2hhbm5lbC5jPTYxMT1FWFBPUlRfU1lNQk9MX0dQTCh2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZCk7XG4tLVxuZHJpdmVycy9odi9jaGFubmVsLmMtNjEzLS8qKlxuZHJpdmVycy9odi9jaGFubmVsLmM6NjE0OiAqIHZtYnVzX2ZyZWVfYnVmZmVyIC0gcmVsZWFzZSBhIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgdm1idXNfYWxsb2NfYnVmZmVyKCkuXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02MTUtICpcbi0tXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02MTctICogICAgICAgIGZhaWxlZCBhbGxvY2F0aW9uKVxuZHJpdmVycy9odi9jaGFubmVsLmM6NjE4OiAqIEBjaHVua3M6IGNodW5rcyBhcnJheSBmcm9tIHZtYnVzX2FsbG9jX2J1ZmZlcigpLCBvciBOVUxMXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02MTktICogQGNodW5rX2NudDogbnVtYmVyIG9mIGVudHJpZXMgaW4gQGNodW5rc1xuLS1cbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTYyNS0gKi9cbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjYyNjp2b2lkIHZtYnVzX2ZyZWVfYnVmZmVyKHZvaWQgKmFkZHIsIHN0cnVjdCBwYWdlICoqY2h1bmtzLCB1MzIgY2h1bmtfY250KVxuZHJpdmVycy9odi9jaGFubmVsLmMtNjI3LXtcbi0tXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02NDgtfVxuZHJpdmVycy9odi9jaGFubmVsLmM6NjQ5OkVYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2ZyZWVfYnVmZmVyKTtcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY1MC1cbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY1MS0vKipcbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjY1MjogKiB2bWJ1c19sZWFrX2J1ZmZlciAtIHNldCB1cCBhIGJ1ZmZlciB0byBiZSBsZWFrZWQgYnkgdm1idXNfZnJlZV9idWZmZXIoKS5cbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY1My0gKlxuZHJpdmVycy9odi9jaGFubmVsLmMtNjU0LSAqIEBhZGRyOiBidWZmZXIgYWRkcmVzc1xuZHJpdmVycy9odi9jaGFubmVsLmM6NjU1OiAqIEBjaHVua3M6IGNodW5rcyBhcnJheSBmcm9tIHZtYnVzX2FsbG9jX2J1ZmZlcigpXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02NTYtICogQGNodW5rX2NudDogbnVtYmVyIG9mIGVudHJpZXMgaW4gQGNodW5rc1xuLS1cbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY1OS0gKiB0aGUgYnVmZmVyIGlzIGxlYWtlZCBieSBzZXR0aW5nIEBhZGRyIHRvIE5VTEwuIE90aGVyd2lzZSBzZXRcbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjY2MDogKiBAY2h1bmtfY250IHRvIDAgc28gdGhhdCB2bWJ1c19mcmVlX2J1ZmZlcigpIGRvZXMgbm90IHRyeSB0byByZS1lbmNyeXB0XG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02NjEtICogb3IgZnJlZSB0aGUgYnVmZmVyIG1lbW9yeSwgYnV0IHN0aWxsIHJlbGVhc2VzIHRoZSB2bWFwIGFkZHJlc3MgYW5kXG4tLVxuZHJpdmVycy9odi9jaGFubmVsLmM9Njc1PUVYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2xlYWtfYnVmZmVyKTtcbi0tXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02NzctLyoqXG5kcml2ZXJzL2h2L2NoYW5uZWwuYzo2Nzg6ICogdm1idXNfYWxsb2NfYnVmZmVyIC0gYWxsb2NhdGUgYSBob3N0LXZpc2libGUsIHZpcnR1YWxseS1jb250aWd1b3VzIGJ1ZmZlci5cbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY3OS0gKlxuLS1cbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY5NS0gKi9cbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjY5Njp2b2lkICp2bWJ1c19hbGxvY19idWZmZXIoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02OTctXHRcdFx0IHUzMiBzaXplLFxuLS1cbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTc4Ni1cdGt2ZnJlZShwYWdlcyk7XG5kcml2ZXJzL2h2L2NoYW5uZWwuYzo3ODc6XHR2bWJ1c19mcmVlX2J1ZmZlcihOVUxMLCBjaHVua3MsIGNodW5rX2NudCk7XG5kcml2ZXJzL2h2L2NoYW5uZWwuYy03ODgtXHRyZXR1cm4gTlVMTDtcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTc4OS19XG5kcml2ZXJzL2h2L2NoYW5uZWwuYzo3OTA6RVhQT1JUX1NZTUJPTF9HUEwodm1idXNfYWxsb2NfYnVmZmVyKTtcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTc5MS1cbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM9MTMxPXN0YXRpYyB2b2lkIF9fZnJlZV9uZXR2c2NfZGV2aWNlKHN0cnVjdCBuZXR2c2NfZGV2aWNlICpudmRldilcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTM2LVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjEzNzpcdHZtYnVzX2ZyZWVfYnVmZmVyKG52ZGV2LVx1MDAzZXJlY3ZfYnVmLCBudmRldi1cdTAwM2VyZWN2X2J1Zl9jaHVua3MsXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTM4LVx0XHRcdCAgbnZkZXYtXHUwMDNlcmVjdl9idWZfY2h1bmtfY250KTtcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzoxMzk6XHR2bWJ1c19mcmVlX2J1ZmZlcihudmRldi1cdTAwM2VzZW5kX2J1ZiwgbnZkZXYtXHUwMDNlc2VuZF9idWZfY2h1bmtzLFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTE0MC1cdFx0XHQgIG52ZGV2LVx1MDAzZXNlbmRfYnVmX2NodW5rX2NudCk7XG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jPTM2Nz1zdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTM4Ni1cdG5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWYgPVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjM4NzpcdFx0dm1idXNfYWxsb2NfYnVmZmVyKGRldmljZS1cdTAwM2VjaGFubmVsLCBidWZfc2l6ZSxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0zODgtXHRcdFx0XHQgICBcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXJlY3ZfYnVmX2NodW5rcyxcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtNDk2LVx0bmV0X2RldmljZS1cdTAwM2VzZW5kX2J1ZiA9XG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6NDk3Olx0XHR2bWJ1c19hbGxvY19idWZmZXIoZGV2aWNlLVx1MDAzZWNoYW5uZWwsIGJ1Zl9zaXplLFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTQ5OC1cdFx0XHRcdCAgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWZfY2h1bmtzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE4OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDcwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmVhY2hhYmlsaXR5IGluIE15IEZpZWxkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gbWV0aWN1bG91c2x5LCBmb2N1c2luZyBvbiByZWFjaGFiaWxpdHkgYXMgcGVyIHRoZSBvdXRsaW5lZCBzZWN0aW9ucy4gU2VjdGlvbiAyLCB0aGUgJiMzNDtOZWdhdGl2ZSBDcml0ZXJpYSwmIzM0OyBmbGFncyBhIGZldyByZWQgZmxhZ3MuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dDoKCiogICAqKlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToqKiBJIGltbWVkaWF0ZWx5IHplcm8gaW4gb24gdGhlIGltcGxpY2F0aW9ucyBmb3IgdmVuZG9yLXNwZWNpZmljIGNvbXBvbmVudHMgbGlrZSB0aG9zZSBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIGxpc3RlZCwgZXNwZWNpYWxseSB0aG9zZSByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmUgb3Igc3BlY2lmaWMgZHJpdmVycyBub3QgZW11bGF0ZWQgd2l0aGluIHN0YW5kYXJkIFFFTVUuIFRoYXQmIzM5O3MgYSBodWdlIGNvbnN0cmFpbnQuIFdlIGNhbuKAmXQgZnV6eiB3aGF0IGlzbuKAmXQgcHJlc2VudC4KKiAgICoqVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOioqIFRoZSBtZW50aW9uIG9mIGRyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgdGllZCB0byBwaHlzaWNhbCBob3QtdW5wbHVnIG9yIG1hbnVhbCB1bmJpbmRpbmcgYWxzbyBzY3JlYW1zICYjMzk7cG90ZW50aWFsIGZvciBmYWxzZSBwb3NpdGl2ZXMuJiMzOTsgVGhlc2UgcGF0aHMgYXJlIGluaGVyZW50bHkgZGlmZmljdWx0IHRvIHRyaWdnZXIgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgYW5kIHRyeWluZyB0byBmb3JjZSB0aGVtIG1heSBiZSBjb3VudGVycHJvZHVjdGl2ZS4KClRoZW4sIFNlY3Rpb24gMywgdGhlICYjMzQ7UG9zaXRpdmUgQ3JpdGVyaWEsJiMzNDsgZHJpdmVzIHRoZSBwb2ludCBob21lOiByZWFjaGFiaWxpdHkgKmlzKiB0aGUgZ2F0ZS4gV2UmIzM5O3JlIGxpbWl0ZWQgdG8gY29kZSB0aGF0ICpjYW4qIGV4ZWN1dGUgd2l0aGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyDigJMgdGhlIFFFTVUvR0NFIHNldHVwIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcy4gSWYgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgYmFzZWQgb24gdGhlIGNyaXRlcmlhIGluIFNlY3Rpb24gMiwgdGhlIGZ1enppbmcgaXMgYSBuby1nbywgZXZlbiBpZiB0aGUgY29kZSBzZWVtcyBpbnRlcmVzdGluZyBvciBoYXMgZXh0cmEgYXNzZXJ0aW9ucy4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHN5emthbGxlciYjMzk7cyBleGVjdXRpb24gZW52aXJvbm1lbnQuIEl0IHJ1bnMgd2l0aGluIFFFTVUgb3IgR0NFIFZNcy4gSSBhbHJlYWR5IHNlZSB3aGF0JiMzOTtzIGNvbWluZzoKCiogICAqKk5vIEh5cGVyLVY6KiogSSBpbW1lZGlhdGVseSBuZWVkIHRvIGVzdGFibGlzaCB0aGF0IEh5cGVyLVYgaXNu4oCZdCBwcmVzZW50LiBHQ0UgdXNlcyBLVk0sIGFuZCBzdGFuZGFyZCBRRU1VIGVpdGhlciB1c2VzIEtWTSBvciBUQ0cuIEluIHRoZXNlIGVudmlyb25tZW50cywgYHg4Nl9oeXBlcl90eXBlYCBpcyBjbGVhcmx5ICpub3QqIGBYODZfSFlQRVJfTVNfSFlQRVJWYC4gVGh1cywgYGh2X2lzX2h5cGVydl9pbml0aWFsaXplZCgpYCByZXR1cm5zIGBmYWxzZWAuCiogICAqKlZNQnVzIEZhaWw6KiogQmVjYXVzZSBvZiB0aGUgbGFjayBvZiBIeXBlci1WLCB0aGUgYGh2X3ZtYnVzYCBzdWJzeXN0ZW0gZmFpbHMgdG8gaW5pdGlhbGl6ZSwgcmV0dXJuaW5nIC1FTk9ERVYgZHVyaW5nIGJvb3QuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludC4KKiAgICoqTm8gRGV2aWNlczoqKiBDb25zZXF1ZW50bHksIHNpbmNlIFZNQnVzIGlzIG5vdCBwcmVzZW50LCBubyBgaHZfZGV2aWNlYCBpcyBwcm9iZWQsIHdoaWNoIG1lYW5zIG5vIGBuZXR2c2NfcHJvYmVgIGNhbGwsIG5vIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucywgYW5kIGNlcnRhaW5seSBubyB0ZWFyZG93biBmdW5jdGlvbnMgbGlrZSBgbmV0dnNjX3RlYXJkb3duXypfZ3BhZGxgLiBUaGlzIG1lYW5zIHRoZSBgdm1idXNfbGVha19idWZmZXJgIGZ1bmN0aW9uLCBhc3NvY2lhdGVkIHdpdGggdGhlIE1TIEh5cGVyLVYgbmV0d29yayBkcml2ZXIsIHJlbWFpbnMgdW5yZWFjaGFibGUuCgpTbyB0aGUgbWFpbiBxdWVzdGlvbiBpcywgY2FuIHdlIHNvbWVob3cgKnNpbXVsYXRlKiB0aGlzPyBDYW4gd2UgY3JlYXRlIGB2bWJ1c2AgZGV2aWNlcyB0aHJvdWdoIHNvbWUgdmlydHVhbCBidXMgb3IgdXNlcnNwYWNlIGludGVyZmFjZT8gQ2FuIHdlIHJlZ2lzdGVyIG9yIG1vY2sgdGhlc2UgZGV2aWNlcyB0aHJvdWdoIHN5c2ZzLCBuZXRsaW5rLCB1c2IsIGxvb3BiYWNrLCBvciBzb21lIG90aGVyIGludGVyZmFjZT8gSXQmIzM5O3MgdGltZSB0byBleGFtaW5lIHRoZSBjb2RlYmFzZSBmb3IgYW55IHdheSB0byBkbyB0aGlzLiBBIGBncmVwYCBmb3IgYHZtYnVzX2RyaXZlcl9yZWdpc3RlcmAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIHdpbGwgYmUgdGhlIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1idXNfZHJpdmVyX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL2h5cGVydi9oeXBlcnZfZHJtX2Rydi5jPTI0Mz1zdGF0aWMgaW50IF9faW5pdCBodl9kcm1faW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9oeXBlcnYvaHlwZXJ2X2RybV9kcnYuYy0yNTMtXG5kcml2ZXJzL2dwdS9kcm0vaHlwZXJ2L2h5cGVydl9kcm1fZHJ2LmM6MjU0Olx0cmV0ID0gdm1idXNfZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNmh2X2RybV9odl9kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL2h5cGVydi9oeXBlcnZfZHJtX2Rydi5jLTI1NS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9oaWQvaGlkLWh5cGVydi5jPTYyMj1zdGF0aWMgaW50IF9faW5pdCBtb3VzZXZzY19pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9oaWQvaGlkLWh5cGVydi5jLTYyOS1cbmRyaXZlcnMvaGlkL2hpZC1oeXBlcnYuYzo2MzA6XHRyZXQgPSB2bWJ1c19kcml2ZXJfcmVnaXN0ZXIoXHUwMDI2bW91c2V2c2NfZHJ2KTtcbmRyaXZlcnMvaGlkL2hpZC1oeXBlcnYuYy02MzEtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvaHYvaHZfYmFsbG9vbi5jPTIxMjQ9c3RhdGljIGludCBfX2luaXQgaW5pdF9iYWxsb29uX2Rydih2b2lkKVxuZHJpdmVycy9odi9odl9iYWxsb29uLmMtMjEyNS17XG5kcml2ZXJzL2h2L2h2X2JhbGxvb24uYzoyMTI2Olx0cmV0dXJuIHZtYnVzX2RyaXZlcl9yZWdpc3RlcihcdTAwMjZiYWxsb29uX2Rydik7XG5kcml2ZXJzL2h2L2h2X2JhbGxvb24uYy0yMTI3LX1cbi0tXG5kcml2ZXJzL2h2L2h2X3V0aWwuYz03OTc9c3RhdGljIGludCBfX2luaXQgaW5pdF9oeXBlcnZfdXRpbHModm9pZClcbi0tXG5kcml2ZXJzL2h2L2h2X3V0aWwuYy04MDAtXG5kcml2ZXJzL2h2L2h2X3V0aWwuYzo4MDE6XHRyZXR1cm4gdm1idXNfZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNnV0aWxfZHJ2KTtcbmRyaXZlcnMvaHYvaHZfdXRpbC5jLTgwMi19XG4tLVxuZHJpdmVycy9odi92bWJ1c19kcnYuYz0xNDY5PXN0YXRpYyBpbnQgdm1idXNfYnVzX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jLTE1NDYtLyoqXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jOjE1NDc6ICogX192bWJ1c19kcml2ZXJfcmVnaXN0ZXIoKSAtIFJlZ2lzdGVyIGEgdm1idXMmIzM5O3MgZHJpdmVyXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jLTE1NDgtICogQGh2X2RyaXZlcjogUG9pbnRlciB0byBkcml2ZXIgc3RydWN0dXJlIHlvdSB3YW50IHRvIHJlZ2lzdGVyXG4tLVxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0xNTU2LSAqL1xuZHJpdmVycy9odi92bWJ1c19kcnYuYzoxNTU3OmludCBfX3ZtYnVzX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgaHZfZHJpdmVyICpodl9kcml2ZXIsIHN0cnVjdCBtb2R1bGUgKm93bmVyLCBjb25zdCBjaGFyICptb2RfbmFtZSlcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmMtMTU1OC17XG4tLVxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0xNTc3LX1cbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmM6MTU3ODpFWFBPUlRfU1lNQk9MX0dQTChfX3ZtYnVzX2RyaXZlcl9yZWdpc3Rlcik7XG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jLTE1NzktXG4tLVxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0xNTg1LSAqIFVuLXJlZ2lzdGVyIHRoZSBnaXZlbiBkcml2ZXIgdGhhdCB3YXMgcHJldmlvdXMgcmVnaXN0ZXJlZCB3aXRoIGEgY2FsbCB0b1xuZHJpdmVycy9odi92bWJ1c19kcnYuYzoxNTg2OiAqIHZtYnVzX2RyaXZlcl9yZWdpc3RlcigpXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jLTE1ODctICovXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9oeXBlcnYta2V5Ym9hcmQuYz00MjQ9c3RhdGljIGludCBfX2luaXQgaHZfa2JkX2luaXQodm9pZClcbmRyaXZlcnMvaW5wdXQvc2VyaW8vaHlwZXJ2LWtleWJvYXJkLmMtNDI1LXtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vaHlwZXJ2LWtleWJvYXJkLmM6NDI2Olx0cmV0dXJuIHZtYnVzX2RyaXZlcl9yZWdpc3RlcihcdTAwMjZodl9rYmRfZHJ2KTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vaHlwZXJ2LWtleWJvYXJkLmMtNDI3LX1cbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2Rydi5jPTI0ODY9c3RhdGljIGludCBuZXR2c2NfcHJvYmUoc3RydWN0IGh2X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmMtMjYwNS1cdCAqIGlzIGNvbXBsZXRlLiBUaGlzIGlzIGJlY2F1c2UgcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCkgZ2V0c1xuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYzoyNjA2Olx0ICogcmVnaXN0ZXJlZCBiZWZvcmUgdm1idXNfZHJpdmVyX3JlZ2lzdGVyKCkgc28gdGhhdCBjYWxsYmFjayBmdW5jXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2Rydi5jLTI2MDctXHQgKiBpcyBzZXQgYmVmb3JlIHByb2JlIGFuZCB3ZSBkb24mIzM5O3QgbWlzcyBldmVudHMgbGlrZSBORVRERVZfUE9TVF9JTklUXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYz0yODczPXN0YXRpYyBpbnQgX19pbml0IG5ldHZzY19kcnZfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmMtMjg4OS1cbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmM6Mjg5MDpcdHJldCA9IHZtYnVzX2RyaXZlcl9yZWdpc3RlcihcdTAwMjZuZXR2c2NfZHJ2KTtcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmMtMjg5MS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM9NDE2OT1zdGF0aWMgaW50IF9faW5pdCBpbml0X2h2X3BjaV9kcnYodm9pZClcbi0tXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy00MTg3LVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM6NDE4ODpcdHJldHVybiB2bWJ1c19kcml2ZXJfcmVnaXN0ZXIoXHUwMDI2aHZfcGNpX2Rydik7XG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy00MTg5LX1cbi0tXG5kcml2ZXJzL3Njc2kvc3RvcnZzY19kcnYuYz0yMjExPXN0YXRpYyBpbnQgX19pbml0IHN0b3J2c2NfZHJ2X2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3Njc2kvc3RvcnZzY19kcnYuYy0yMjM1LVxuZHJpdmVycy9zY3NpL3N0b3J2c2NfZHJ2LmM6MjIzNjpcdHJldCA9IHZtYnVzX2RyaXZlcl9yZWdpc3RlcihcdTAwMjZzdG9ydnNjX2Rydik7XG5kcml2ZXJzL3Njc2kvc3RvcnZzY19kcnYuYy0yMjM3LVxuLS1cbmRyaXZlcnMvdWlvL3Vpb19odl9nZW5lcmljLmM9NDEzPWh5cGVydl9tb2R1bGVfaW5pdCh2b2lkKVxuZHJpdmVycy91aW8vdWlvX2h2X2dlbmVyaWMuYy00MTQte1xuZHJpdmVycy91aW8vdWlvX2h2X2dlbmVyaWMuYzo0MTU6XHRyZXR1cm4gdm1idXNfZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNmh2X3Vpb19kcnYpO1xuZHJpdmVycy91aW8vdWlvX2h2X2dlbmVyaWMuYy00MTYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTA2MwoJCQkJCQkJb3V0cHV0OiAxMjUKCQkJCQkJCXRob3VnaHRzOiA1NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgSHlwZXItViBEcml2ZXIgQ29kZSBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvZGUgY2hhbmdlIGl0c2VsZi4gSXQgbG9va3MgbGlrZSBhIG5ldyBmdW5jdGlvbiwgYHZtYnVzX2xlYWtfYnVmZmVyKClgLCBoYXMgYmVlbiBpbnRyb2R1Y2VkIGluIGBkcml2ZXJzL2h2L2NoYW5uZWwuY2AuIFRoZSBtb3JlIGludGVyZXN0aW5nIHBhcnQgaXMgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZDogYG5ldHZzY190ZWFyZG93bl9yZWN2X2dwYWRsYCBhbmQgYG5ldHZzY190ZWFyZG93bl9zZW5kX2dwYWRsYCBpbiBgZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jYCBub3cgY2FsbCBgdm1idXNfbGVha19idWZmZXJgIGlmIHRoZSBgdm1idXNfdGVhcmRvd25fZ3BhZGxgIGZ1bmN0aW9uIGZhaWxzLiBUaGlzIGltcGxpZXMgYSBwb3RlbnRpYWwgcmVzb3VyY2UgbGVhayBoYW5kbGluZyBwYXRoIGR1cmluZyBHUEFETCAoR3Vlc3QgUGh5c2ljYWwgQWRkcmVzcyBEZXNjcmlwdG9yIExpc3QpIHRlYXJkb3duLCBsaWtlbHkgcmVsYXRlZCB0byBWTUJ1cyBjaGFubmVsIHRlYXJkb3duIGZhaWx1cmVzLgoKTm93LCBsZXQmIzM5O3MgYXBwbHkgdGhlIGZ1enppbmcgcmVhY2hhYmlsaXR5IGd1aWRlbGluZXMuIFRoZSBrZXkgcGhyYXNlIGhlcmUgaXMgJiMzNDtzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDsgVGhlc2UgZ3VpZGVsaW5lcyBleHBsaWNpdGx5IHN0YXRlIHRoYXQgY29kZSByZXF1aXJpbmcgc3BlY2lmaWMgaGFyZHdhcmUgb3IgaHlwZXJ2aXNvciBlbnZpcm9ubWVudHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIGZ1enppbmcgc2V0dXBzIChsaWtlIFFFTVUvS1ZNIG9yIEdDRSkgc2hvdWxkbiYjMzk7dCBiZSBmdXp6ZWQuIEFuZCB0aGlzIGlzIGV4YWN0bHkgdGhlIHByb2JsZW0hIFRoZSBjb2RlIGluIHF1ZXN0aW9uIGlzIHdpdGhpbiBIeXBlci1WIGd1ZXN0IGRyaXZlcnMuIFNwZWNpZmljYWxseSBgaHZfdm1idXNgIGFuZCBgaHZfbmV0dnNjYC4gVG8gZXZlbiAqcmVhY2gqIHRoaXMgY29kZSwgSSYjMzk7ZCBuZWVkIHRvIGJlIHJ1bm5pbmcgaW5zaWRlIGEgTWljcm9zb2Z0IEh5cGVyLVYgZ3Vlc3QgVk0gd2l0aCB0aGUgTWljcm9zb2Z0IEh5cGVyLVYgaHlwZXJ2aXNvciwgb3IgYW4gQXp1cmUgVk0uIFN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBwYXJ0aWN1bGFybHkgc3l6a2FsbGVyJiMzOTtzIHByZWZlcnJlZCBRRU1VL0tWTSBhbmQgR0NFIHNldHVwcywgKmRvIG5vdCogcHJlc2VudCB0aGlzIGh5cGVydmlzb3IgaW50ZXJmYWNlLiBUaGUgYGh2X2lzX2h5cGVydl9pbml0aWFsaXplZCgpYCBjaGVjayB3aWxsIGZhaWwsIHRoZSBWTUJ1cyB3aWxsIGZhaWwgdG8gaW5pdGlhbGl6ZSwgYW5kIHRoZSByZWxldmFudCBWTUJ1cyBkZXZpY2VzIHdpbGwgbm90IGV2ZW4gYmUgcHJlc2VudCwgbWVhbmluZyB0aGF0IHRoZSBjb2RlIHdvbiYjMzk7dCBldmVyIGJlIHJlYWNoZWQgZHVyaW5nIGZ1enppbmcuCgpUaGVyZWZvcmUsIHRoZSBjb25jbHVzaW9uIGlzIGNsZWFyLiBUaGlzIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIHdpdGhpbiB0aGUgaW50ZW5kZWQgZnV6emluZyBlbnZpcm9ubWVudC4KClNvLCBmb3IgdGhlIHJlY29yZDoKCiogICBgV29ydGhGdXp6aW5nYDogZmFsc2UKKiAgIGBGb2N1c1N5bWJvbHNgOiBcWyBdIChlbXB0eSkKKiAgIGBFbmFibGVDb25maWdzYDogXFsgXSAoZW1wdHkpCiogICBgUmVhc29uaW5nYDogVGhlIG1vZGlmaWVkIGNvZGUgcmVzaWRlcyB3aXRoaW4gdGhlIE1pY3Jvc29mdCBIeXBlci1WIFZNQnVzIGFuZCBIeXBlci1WIG5ldHZzYyBkcml2ZXJzIChgZHJpdmVycy9odi9jaGFubmVsLmNgIGFuZCBgZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jYCkuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBleGVjdXRpb24gYXMgYSBndWVzdCBWTSBvbiB0aGUgTWljcm9zb2Z0IEh5cGVyLVYgaHlwZXJ2aXNvci4gVGhleSBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIG9yIHJlYWNoZWQgaW4gc3RhbmRhcmQgUUVNVS9LVk0gb3IgR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLgoKSSYjMzk7bGwgY2hlY2sgdGhlIHRvb2wgcGFyYW1ldGVycyBmb3IgYHNldC1yZXN1bHRzYCB0byBtYWtlIHN1cmUgdGhpcyBpcyByZWNvcmRlZCBwcm9wZXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBNaWNyb3NvZnQgSHlwZXItViBndWVzdCBkcml2ZXJzIChWTUJ1cyBidWZmZXIgaGFuZGxpbmcgaW4gZHJpdmVycy9odi9jaGFubmVsLmMgYW5kIG5ldHZzYyBHUEFETCB0ZWFyZG93biBlcnJvciBoYW5kbGluZyBpbiBkcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcnVubmluZyBhcyBhIGd1ZXN0IHVuZGVyIHRoZSBNaWNyb3NvZnQgSHlwZXItViBoeXBlcnZpc29yIGFuZCBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgb3IgcHJvYmVkIGluIHN0YW5kYXJkIFFFTVUvS1ZNIG9yIEdDRSBzeXprYWxsZXIgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBNaWNyb3NvZnQgSHlwZXItViBndWVzdCBkcml2ZXJzIChWTUJ1cyBidWZmZXIgaGFuZGxpbmcgaW4gZHJpdmVycy9odi9jaGFubmVsLmMgYW5kIG5ldHZzYyBHUEFETCB0ZWFyZG93biBlcnJvciBoYW5kbGluZyBpbiBkcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcnVubmluZyBhcyBhIGd1ZXN0IHVuZGVyIHRoZSBNaWNyb3NvZnQgSHlwZXItViBoeXBlcnZpc29yIGFuZCBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgb3IgcHJvYmVkIGluIHN0YW5kYXJkIFFFTVUvS1ZNIG9yIEdDRSBzeXprYWxsZXIgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTA6MzkuOTExNTc0NTc2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk4NTM3NDg2NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBNaWNyb3NvZnQgSHlwZXItViBndWVzdCBkcml2ZXJzIChWTUJ1cyBidWZmZXIgaGFuZGxpbmcgaW4gZHJpdmVycy9odi9jaGFubmVsLmMgYW5kIG5ldHZzYyBHUEFETCB0ZWFyZG93biBlcnJvciBoYW5kbGluZyBpbiBkcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcnVubmluZyBhcyBhIGd1ZXN0IHVuZGVyIHRoZSBNaWNyb3NvZnQgSHlwZXItViBoeXBlcnZpc29yIGFuZCBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgb3IgcHJvYmVkIGluIHN0YW5kYXJkIFFFTVUvS1ZNIG9yIEdDRSBzeXprYWxsZXIgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1MDozOS45MTE1Nzg2MDZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODc2NzEwMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzYTE2Yzk4ZjFkZDRlYTYzMTliMmVmNWE2YjczODRlYTk4YjJkMmMwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMDA6NTA6MzggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9odi9jaGFubmVsLmMgYi9kcml2ZXJzL2h2L2NoYW5uZWwuY1xcbmluZGV4IGY0MzcwNjE3ZGVhY2IuLmQ1ZDIwZTMyMjgzMTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9odi9jaGFubmVsLmNcXG4rKysgYi9kcml2ZXJzL2h2L2NoYW5uZWwuY1xcbkBAIC02NDgsNiArNjQ4LDMyIEBAIHZvaWQgdm1idXNfZnJlZV9idWZmZXIodm9pZCAqYWRkciwgc3RydWN0IHBhZ2UgKipjaHVua3MsIHUzMiBjaHVua19jbnQpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodm1idXNfZnJlZV9idWZmZXIpO1xcbiBcXG4rLyoqXFxuKyAqIHZtYnVzX2xlYWtfYnVmZmVyIC0gc2V0IHVwIGEgYnVmZmVyIHRvIGJlIGxlYWtlZCBieSB2bWJ1c19mcmVlX2J1ZmZlcigpLlxcbisgKlxcbisgKiBAYWRkcjogYnVmZmVyIGFkZHJlc3NcXG4rICogQGNodW5rczogY2h1bmtzIGFycmF5IGZyb20gdm1idXNfYWxsb2NfYnVmZmVyKClcXG4rICogQGNodW5rX2NudDogbnVtYmVyIG9mIGVudHJpZXMgaW4gQGNodW5rc1xcbisgKlxcbisgKiBXaGVuIEBjaHVua3MgaXMgTlVMTCB0aGUgYnVmZmVyIGlzIGEgcGxhaW4gdnphbGxvYygpIGFsbG9jYXRpb24gYW5kXFxuKyAqIHRoZSBidWZmZXIgaXMgbGVha2VkIGJ5IHNldHRpbmcgQGFkZHIgdG8gTlVMTC4gT3RoZXJ3aXNlIHNldFxcbisgKiBAY2h1bmtfY250IHRvIDAgc28gdGhhdCB2bWJ1c19mcmVlX2J1ZmZlcigpIGRvZXMgbm90IHRyeSB0byByZS1lbmNyeXB0XFxuKyAqIG9yIGZyZWUgdGhlIGJ1ZmZlciBtZW1vcnksIGJ1dCBzdGlsbCByZWxlYXNlcyB0aGUgdm1hcCBhZGRyZXNzIGFuZFxcbisgKiB0aGUgY2h1bmtzIG1lbW9yeS5cXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGluIGEgY29udGV4dCB3aGVyZSB0aGUgYnVmZmVyIGlzIHN0aWxsXFxuKyAqIGJlaW5nIGFjY2Vzc2VkLiBJdCBtdXN0IG5vdCByZW1vdmUgYW55IGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3NlcyBvZlxcbisgKiB0aGUgYnVmZmVyIG9yIGNoYW5nZSBpdHMgZW5jcnlwdGlvbiBzdGF0dXMuXFxuKyAqL1xcbit2b2lkIHZtYnVzX2xlYWtfYnVmZmVyKHZvaWQgKiphZGRyLCBzdHJ1Y3QgcGFnZSAqKipjaHVua3MsIHUzMiAqY2h1bmtfY250KVxcbit7XFxuK1xcdGlmICgqY2h1bmtzKVxcbitcXHRcXHQqY2h1bmtfY250ID0gMDtcXG4rXFx0ZWxzZVxcbitcXHRcXHQqYWRkciA9IE5VTEw7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwodm1idXNfbGVha19idWZmZXIpO1xcbitcXG4gLyoqXFxuICAqIHZtYnVzX2FsbG9jX2J1ZmZlciAtIGFsbG9jYXRlIGEgaG9zdC12aXNpYmxlLCB2aXJ0dWFsbHktY29udGlndW91cyBidWZmZXIuXFxuICAqXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYyBiL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuY1xcbmluZGV4IGZjNjU0OGIxNmM5MWUuLjVjOTVkN2QyNDE2MzEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jXFxuKysrIGIvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jXFxuQEAgLTMxNiw2ICszMTYsOSBAQCBzdGF0aWMgdm9pZCBuZXR2c2NfdGVhcmRvd25fcmVjdl9ncGFkbChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXFxuIFxcdFxcdCAqIHJhdGhlciB0aGFuIGNvbnRpbnVlIGFuZCBhIGJ1Z2Noa1xcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKHJldCAhPSAwKSB7XFxuK1xcdFxcdFxcdHZtYnVzX2xlYWtfYnVmZmVyKFxcdTAwMjZuZXRfZGV2aWNlLVxcdTAwM2VyZWN2X2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlcmVjdl9idWZfY2h1bmtzLFxcbitcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZuZXRfZGV2aWNlLVxcdTAwM2VyZWN2X2J1Zl9jaHVua19jbnQpO1xcbiBcXHRcXHRcXHRuZXRkZXZfZXJyKG5kZXYsXFxuIFxcdFxcdFxcdFxcdCAgIFxcXCJ1bmFibGUgdG8gdGVhcmRvd24gcmVjZWl2ZSBidWZmZXIncyBncGFkbFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdHJldHVybjtcXG5AQCAtMzM3LDYgKzM0MCw5IEBAIHN0YXRpYyB2b2lkIG5ldHZzY190ZWFyZG93bl9zZW5kX2dwYWRsKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcXG4gXFx0XFx0ICogcmF0aGVyIHRoYW4gY29udGludWUgYW5kIGEgYnVnY2hrXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAocmV0ICE9IDApIHtcXG4rXFx0XFx0XFx0dm1idXNfbGVha19idWZmZXIoXFx1MDAyNm5ldF9kZXZpY2UtXFx1MDAzZXNlbmRfYnVmLFxcbitcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZuZXRfZGV2aWNlLVxcdTAwM2VzZW5kX2J1Zl9jaHVua3MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNm5ldF9kZXZpY2UtXFx1MDAzZXNlbmRfYnVmX2NodW5rX2NudCk7XFxuIFxcdFxcdFxcdG5ldGRldl9lcnIobmRldixcXG4gXFx0XFx0XFx0XFx0ICAgXFxcInVuYWJsZSB0byB0ZWFyZG93biBzZW5kIGJ1ZmZlcidzIGdwYWRsXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h5cGVydi5oIGIvaW5jbHVkZS9saW51eC9oeXBlcnYuaFxcbmluZGV4IDllMTA5ZDkxYWExNDMuLjZmNjBjZTU5MjRiYWYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9oeXBlcnYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvaHlwZXJ2LmhcXG5AQCAtMTIyMCw2ICsxMjIwLDEwIEBAIGV4dGVybiB2b2lkICp2bWJ1c19hbGxvY19idWZmZXIoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXFxuIFxcbiBleHRlcm4gdm9pZCB2bWJ1c19mcmVlX2J1ZmZlcih2b2lkICphZGRyLCBzdHJ1Y3QgcGFnZSAqKmNodW5rcywgdTMyIGNodW5rX2NudCk7XFxuIFxcbitleHRlcm4gdm9pZCB2bWJ1c19sZWFrX2J1ZmZlcih2b2lkICoqYWRkcixcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IHBhZ2UgKioqY2h1bmtzLFxcbitcXHRcXHRcXHQgICAgICB1MzIgKmNodW5rX2NudCk7XFxuK1xcbiB2b2lkIHZtYnVzX3Jlc2V0X2NoYW5uZWxfY2Ioc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwpO1xcbiBcXG4gZXh0ZXJuIGludCB2bWJ1c19yZWN2cGFja2V0KHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1MDo0MS40MDAwNjQ1OTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU4MzY1MjQ1OTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBNaWNyb3NvZnQgSHlwZXItViBndWVzdCBkcml2ZXJzIChWTUJ1cyBidWZmZXIgaGFuZGxpbmcgaW4gZHJpdmVycy9odi9jaGFubmVsLmMgYW5kIG5ldHZzYyBHUEFETCB0ZWFyZG93biBlcnJvciBoYW5kbGluZyBpbiBkcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcnVubmluZyBhcyBhIGd1ZXN0IHVuZGVyIHRoZSBNaWNyb3NvZnQgSHlwZXItViBoeXBlcnZpc29yIGFuZCBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgb3IgcHJvYmVkIGluIHN0YW5kYXJkIFFFTVUvS1ZNIG9yIEdDRSBzeXprYWxsZXIgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNhMTZjOThmMWRkNGVhNjMxOWIyZWY1YTZiNzM4NGVhOThiMmQyYzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDAwOjUwOjM4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9odi9jaGFubmVsLmMgYi9kcml2ZXJzL2h2L2NoYW5uZWwuY1xuaW5kZXggZjQzNzA2MTdkZWFjYi4uZDVkMjBlMzIyODMxOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaHYvY2hhbm5lbC5jXG4rKysgYi9kcml2ZXJzL2h2L2NoYW5uZWwuY1xuQEAgLTY0OCw2ICs2NDgsMzIgQEAgdm9pZCB2bWJ1c19mcmVlX2J1ZmZlcih2b2lkICphZGRyLCBzdHJ1Y3QgcGFnZSAqKmNodW5rcywgdTMyIGNodW5rX2NudClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodm1idXNfZnJlZV9idWZmZXIpO1xuIFxuKy8qKlxuKyAqIHZtYnVzX2xlYWtfYnVmZmVyIC0gc2V0IHVwIGEgYnVmZmVyIHRvIGJlIGxlYWtlZCBieSB2bWJ1c19mcmVlX2J1ZmZlcigpLlxuKyAqXG4rICogQGFkZHI6IGJ1ZmZlciBhZGRyZXNzXG4rICogQGNodW5rczogY2h1bmtzIGFycmF5IGZyb20gdm1idXNfYWxsb2NfYnVmZmVyKClcbisgKiBAY2h1bmtfY250OiBudW1iZXIgb2YgZW50cmllcyBpbiBAY2h1bmtzXG4rICpcbisgKiBXaGVuIEBjaHVua3MgaXMgTlVMTCB0aGUgYnVmZmVyIGlzIGEgcGxhaW4gdnphbGxvYygpIGFsbG9jYXRpb24gYW5kXG4rICogdGhlIGJ1ZmZlciBpcyBsZWFrZWQgYnkgc2V0dGluZyBAYWRkciB0byBOVUxMLiBPdGhlcndpc2Ugc2V0XG4rICogQGNodW5rX2NudCB0byAwIHNvIHRoYXQgdm1idXNfZnJlZV9idWZmZXIoKSBkb2VzIG5vdCB0cnkgdG8gcmUtZW5jcnlwdFxuKyAqIG9yIGZyZWUgdGhlIGJ1ZmZlciBtZW1vcnksIGJ1dCBzdGlsbCByZWxlYXNlcyB0aGUgdm1hcCBhZGRyZXNzIGFuZFxuKyAqIHRoZSBjaHVua3MgbWVtb3J5LlxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGluIGEgY29udGV4dCB3aGVyZSB0aGUgYnVmZmVyIGlzIHN0aWxsXG4rICogYmVpbmcgYWNjZXNzZWQuIEl0IG11c3Qgbm90IHJlbW92ZSBhbnkga2VybmVsIHZpcnR1YWwgYWRkcmVzc2VzIG9mXG4rICogdGhlIGJ1ZmZlciBvciBjaGFuZ2UgaXRzIGVuY3J5cHRpb24gc3RhdHVzLlxuKyAqL1xuK3ZvaWQgdm1idXNfbGVha19idWZmZXIodm9pZCAqKmFkZHIsIHN0cnVjdCBwYWdlICoqKmNodW5rcywgdTMyICpjaHVua19jbnQpXG4re1xuK1x0aWYgKCpjaHVua3MpXG4rXHRcdCpjaHVua19jbnQgPSAwO1xuK1x0ZWxzZVxuK1x0XHQqYWRkciA9IE5VTEw7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2xlYWtfYnVmZmVyKTtcbitcbiAvKipcbiAgKiB2bWJ1c19hbGxvY19idWZmZXIgLSBhbGxvY2F0ZSBhIGhvc3QtdmlzaWJsZSwgdmlydHVhbGx5LWNvbnRpZ3VvdXMgYnVmZmVyLlxuICAqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jIGIvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jXG5pbmRleCBmYzY1NDhiMTZjOTFlLi41Yzk1ZDdkMjQxNjMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jXG4rKysgYi9kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmNcbkBAIC0zMTYsNiArMzE2LDkgQEAgc3RhdGljIHZvaWQgbmV0dnNjX3RlYXJkb3duX3JlY3ZfZ3BhZGwoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxuIFx0XHQgKiByYXRoZXIgdGhhbiBjb250aW51ZSBhbmQgYSBidWdjaGtcbiBcdFx0ICovXG4gXHRcdGlmIChyZXQgIT0gMCkge1xuK1x0XHRcdHZtYnVzX2xlYWtfYnVmZmVyKFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWYsXG4rXHRcdFx0XHRcdCAgXHUwMDI2bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1Zl9jaHVua3MsXG4rXHRcdFx0XHRcdCAgXHUwMDI2bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1Zl9jaHVua19jbnQpO1xuIFx0XHRcdG5ldGRldl9lcnIobmRldixcbiBcdFx0XHRcdCAgIFwidW5hYmxlIHRvIHRlYXJkb3duIHJlY2VpdmUgYnVmZmVyJ3MgZ3BhZGxcXG5cIik7XG4gXHRcdFx0cmV0dXJuO1xuQEAgLTMzNyw2ICszNDAsOSBAQCBzdGF0aWMgdm9pZCBuZXR2c2NfdGVhcmRvd25fc2VuZF9ncGFkbChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4gXHRcdCAqIHJhdGhlciB0aGFuIGNvbnRpbnVlIGFuZCBhIGJ1Z2Noa1xuIFx0XHQgKi9cbiBcdFx0aWYgKHJldCAhPSAwKSB7XG4rXHRcdFx0dm1idXNfbGVha19idWZmZXIoXHUwMDI2bmV0X2RldmljZS1cdTAwM2VzZW5kX2J1ZixcbitcdFx0XHRcdFx0ICBcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmX2NodW5rcyxcbitcdFx0XHRcdFx0ICBcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmX2NodW5rX2NudCk7XG4gXHRcdFx0bmV0ZGV2X2VycihuZGV2LFxuIFx0XHRcdFx0ICAgXCJ1bmFibGUgdG8gdGVhcmRvd24gc2VuZCBidWZmZXIncyBncGFkbFxcblwiKTtcbiBcdFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oeXBlcnYuaCBiL2luY2x1ZGUvbGludXgvaHlwZXJ2LmhcbmluZGV4IDllMTA5ZDkxYWExNDMuLjZmNjBjZTU5MjRiYWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h5cGVydi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h5cGVydi5oXG5AQCAtMTIyMCw2ICsxMjIwLDEwIEBAIGV4dGVybiB2b2lkICp2bWJ1c19hbGxvY19idWZmZXIoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXG4gXG4gZXh0ZXJuIHZvaWQgdm1idXNfZnJlZV9idWZmZXIodm9pZCAqYWRkciwgc3RydWN0IHBhZ2UgKipjaHVua3MsIHUzMiBjaHVua19jbnQpO1xuIFxuK2V4dGVybiB2b2lkIHZtYnVzX2xlYWtfYnVmZmVyKHZvaWQgKiphZGRyLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBwYWdlICoqKmNodW5rcyxcbitcdFx0XHQgICAgICB1MzIgKmNodW5rX2NudCk7XG4rXG4gdm9pZCB2bWJ1c19yZXNldF9jaGFubmVsX2NiKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsKTtcbiBcbiBleHRlcm4gaW50IHZtYnVzX3JlY3ZwYWNrZXQoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1MDo0MS40MDAwNjY0OTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDYwNTk5MjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEh5cGVyLVYgRHJpdmVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBicmVhayBkb3duIHRoZSBjaGFuZ2VzOiB0aGUgbW9kaWZpZWQgZmlsZXMgYXJlIGBkcml2ZXJzL2h2L2NoYW5uZWwuY2AsIGBkcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmNgLCBhbmQgYGluY2x1ZGUvbGludXgvaHlwZXJ2LmhgLiBUaGUgY29yZSBhZGRpdGlvbiBzZWVtcyB0byBiZSBgdm1idXNfbGVha19idWZmZXJgLCBpbnRyb2R1Y2VkIGluIHRoZSB2bWJ1cyBkcml2ZXIsIGFuZCB0aGVuIGVtcGxveWVkIHdpdGhpbiB0aGUgYG5ldHZzY190ZWFyZG93bl9yZWN2X2dwYWRsYCBhbmQgYG5ldHZzY190ZWFyZG93bl9zZW5kX2dwYWRsYCBmdW5jdGlvbnMgaW4gdGhlIG5ldHZzYyBkcml2ZXIuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucywgc3BlY2lmaWNhbGx5IGFyb3VuZCBIeXBlci1WIGFuZCB0aGUgdm1idXMuIEknbSB0aGlua2luZzogaXMgdGhpcyBzdXNjZXB0aWJsZSB0byBmdXp6aW5nIGluIGEgc3RhbmRhcmQgZW52aXJvbm1lbnQsIGxpa2UgUUVNVSBvciBHQ0Ugd2l0aCBzeXprYWxsZXI/IFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGhlcmUgaXMgcmVhY2hhYmlsaXR5LiBDYW4gd2UgYWN0dWFsbHkgdHJpZ2dlciB0aGVzZSBjaGFuZ2VzIGFuZCBmdXp6IEh5cGVyLVYgZHJpdmVycyAoVk1CVVMvSFlQRVJWL0hZUEVSVl9ORVQpIHVzaW5nIGV4aXN0aW5nIHNldHVwcz8gSSBuZWVkIHRvIGNoZWNrIGlmIFFFTVUgcHJvdmlkZXMgc3VmZmljaWVudCBIeXBlci1WIGVtdWxhdGlvbiBmb3IgdGhpcy4gRG9lcyBRRU1VIGV2ZW4gaGF2ZSB0aGUgXCJodi12bWJ1c1wiIGVubGlnaHRlbm1lbnQsIG9yIGRvZXMgc3l6a2FsbGVyIHNwZWNpZmljYWxseSB0YXJnZXQgSHlwZXItViBkaXJlY3RseT8gT3IgaXMgdGhpcyBhIGh5cGVydmlzb3Itc3BlY2lmaWMgYnVzIHRoYXQgbmVjZXNzaXRhdGVzIHJ1bm5pbmcgb24gYSBNaWNyb3NvZnQgQXp1cmUvSHlwZXItViBlbnZpcm9ubWVudD9cblxuQmVmb3JlIGRpdmluZyBkZWVwZXIgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIGNvbmZpcm06XG5cbjEuICBDYW4gd2UgYWNjZXNzIEh5cGVyLVYvVk1CdXMgaW4gYSBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudD8gSSBzZWVtIHRvIHJlY2FsbCBhIGB2bWJ1cy1icmlkZ2VgIFFFTVUgZGV2aWNlLCBidXQgaXMgaXQgZW5vdWdoP1xuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGF0IGNyaXRlcmlhIGlzIG1ldCBieSB0aGUgY29udGV4dCBvZiBTRUNUSU9OIDIgYW5kIDMuXG5cbkZpbmFsbHksIEknbGwgbGV2ZXJhZ2UgbXkgdXN1YWwgY29kZSBhbmFseXNpcyB0b29scywgbGlrZWx5IGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCwgdG8gdW5kZXJzdGFuZCB0aGUgd2lkZXIgY29udGV4dCBvZiB0aGVzZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzQ4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTA6NDcuNDYwNjY4MDkzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDAsXG4gIFwiTGluZUNvdW50XCI6IDU1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDA6XFx0XFx0XFx0fVxcbiAzMDE6XFx0XFx0XFx0bmV0X2RldmljZS1cXHUwMDNlc2VuZF9zZWN0aW9uX2NudCA9IDA7XFxuIDMwMjpcXHRcXHR9XFxuIDMwMzpcXHR9XFxuIDMwNDpcXHRcXG4gMzA1OlxcdHN0YXRpYyB2b2lkIG5ldHZzY190ZWFyZG93bl9yZWN2X2dwYWRsKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcXG4gMzA2OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0X2RldmljZSxcXG4gMzA3OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gMzA4OlxcdHtcXG4gMzA5OlxcdFxcdGludCByZXQ7XFxuIDMxMDpcXHRcXG4gMzExOlxcdFxcdGlmIChuZXRfZGV2aWNlLVxcdTAwM2VyZWN2X2J1Zl9ncGFkbF9oYW5kbGUuZ3BhZGxfaGFuZGxlKSB7XFxuIDMxMjpcXHRcXHRcXHRyZXQgPSB2bWJ1c190ZWFyZG93bl9ncGFkbChkZXZpY2UtXFx1MDAzZWNoYW5uZWwsXFxuIDMxMzpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlcmVjdl9idWZfZ3BhZGxfaGFuZGxlKTtcXG4gMzE0OlxcdFxcbiAzMTU6XFx0XFx0XFx0LyogSWYgd2UgZmFpbGVkIGhlcmUsIHdlIG1pZ2h0IGFzIHdlbGwgcmV0dXJuIGFuZCBoYXZlIGEgbGVha1xcbiAzMTY6XFx0XFx0XFx0ICogcmF0aGVyIHRoYW4gY29udGludWUgYW5kIGEgYnVnY2hrXFxuIDMxNzpcXHRcXHRcXHQgKi9cXG4gMzE4OlxcdFxcdFxcdGlmIChyZXQgIT0gMCkge1xcbiAzMTk6XFx0XFx0XFx0XFx0dm1idXNfbGVha19idWZmZXIoXFx1MDAyNm5ldF9kZXZpY2UtXFx1MDAzZXJlY3ZfYnVmLFxcbiAzMjA6XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlcmVjdl9idWZfY2h1bmtzLFxcbiAzMjE6XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlcmVjdl9idWZfY2h1bmtfY250KTtcXG4gMzIyOlxcdFxcdFxcdFxcdG5ldGRldl9lcnIobmRldixcXG4gMzIzOlxcdFxcdFxcdFxcdFxcdCAgIFxcXCJ1bmFibGUgdG8gdGVhcmRvd24gcmVjZWl2ZSBidWZmZXIncyBncGFkbFxcXFxuXFxcIik7XFxuIDMyNDpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDMyNTpcXHRcXHRcXHR9XFxuIDMyNjpcXHRcXHR9XFxuIDMyNzpcXHR9XFxuIDMyODpcXHRcXG4gMzI5OlxcdHN0YXRpYyB2b2lkIG5ldHZzY190ZWFyZG93bl9zZW5kX2dwYWRsKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcXG4gMzMwOlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0X2RldmljZSxcXG4gMzMxOlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gMzMyOlxcdHtcXG4gMzMzOlxcdFxcdGludCByZXQ7XFxuIDMzNDpcXHRcXG4gMzM1OlxcdFxcdGlmIChuZXRfZGV2aWNlLVxcdTAwM2VzZW5kX2J1Zl9ncGFkbF9oYW5kbGUuZ3BhZGxfaGFuZGxlKSB7XFxuIDMzNjpcXHRcXHRcXHRyZXQgPSB2bWJ1c190ZWFyZG93bl9ncGFkbChkZXZpY2UtXFx1MDAzZWNoYW5uZWwsXFxuIDMzNzpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlc2VuZF9idWZfZ3BhZGxfaGFuZGxlKTtcXG4gMzM4OlxcdFxcbiAzMzk6XFx0XFx0XFx0LyogSWYgd2UgZmFpbGVkIGhlcmUsIHdlIG1pZ2h0IGFzIHdlbGwgcmV0dXJuIGFuZCBoYXZlIGEgbGVha1xcbiAzNDA6XFx0XFx0XFx0ICogcmF0aGVyIHRoYW4gY29udGludWUgYW5kIGEgYnVnY2hrXFxuIDM0MTpcXHRcXHRcXHQgKi9cXG4gMzQyOlxcdFxcdFxcdGlmIChyZXQgIT0gMCkge1xcbiAzNDM6XFx0XFx0XFx0XFx0dm1idXNfbGVha19idWZmZXIoXFx1MDAyNm5ldF9kZXZpY2UtXFx1MDAzZXNlbmRfYnVmLFxcbiAzNDQ6XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlc2VuZF9idWZfY2h1bmtzLFxcbiAzNDU6XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlc2VuZF9idWZfY2h1bmtfY250KTtcXG4gMzQ2OlxcdFxcdFxcdFxcdG5ldGRldl9lcnIobmRldixcXG4gMzQ3OlxcdFxcdFxcdFxcdFxcdCAgIFxcXCJ1bmFibGUgdG8gdGVhcmRvd24gc2VuZCBidWZmZXIncyBncGFkbFxcXFxuXFxcIik7XFxuIDM0ODpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDM0OTpcXHRcXHRcXHR9XFxuIDM1MDpcXHRcXHR9XFxuIDM1MTpcXHR9XFxuIDM1MjpcXHRcXG4gMzUzOlxcdGludCBuZXR2c2NfYWxsb2NfcmVjdl9jb21wX3Jpbmcoc3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldF9kZXZpY2UsIHUzMiBxX2lkeClcXG4gMzU0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTA6NDcuNDYwNzc3NzIzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAyMjY4OTY3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zOlxuXG4qKkludmVzdGlnYXRpbmcgR1BBREwgVGVhcmRvd24gaW4gTmV0dnNjKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGVzZSBHUEFETHMgaW4gdGhlIE5ldHZzYyBkcml2ZXIsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhleSdyZSB0b3JuIGRvd24uICBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyB0aGUgY2FsbHMgdG8gYG5ldHZzY190ZWFyZG93bl9yZWN2X2dwYWRsYCBhbmQgYG5ldHZzY190ZWFyZG93bl9zZW5kX2dwYWRsYC4gVGhpcyBpcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCDigJMgdW5kZXJzdGFuZGluZyAqd2hlcmUqIHRoZXNlIHRlYXJkb3duIGZ1bmN0aW9ucyBhcmUgYmVpbmcgaW52b2tlZCB3aWxsIHBhaW50IGEgcGljdHVyZSBvZiB3aGVuLCBhbmQgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzLCB0aGUgR1BBRExzIGFyZSBjb25zaWRlcmVkIG5vIGxvbmdlciB2YWxpZCBhbmQgbmVlZCB0byBiZSBjbGVhbmVkIHVwLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBhcHByb2FjaDsgSSdtIG5vdCBqdXN0IGJyb3dzaW5nIHRoZSBjb2RlIGFpbWxlc3NseS4gSSdtIGFmdGVyIHRoZSBkaXJlY3QgY2FsbCBzaXRlcy4gRnJvbSB0aGVyZSwgSSdsbCBiZSBhYmxlIHRvIGluZmVyIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGUgdGVhcmRvd24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MzYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUwOjUwLjQ4MzQ2OTA0NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODk0Mzk3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXR2c2NfdGVhcmRvd25fKHJlY3Z8c2VuZClfZ3BhZGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvaHlwZXJ2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM9MjU0PXN0YXRpYyB2b2lkIG5ldHZzY19yZXZva2Vfc2VuZF9idWYoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTMwNC1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6MzA1OnN0YXRpYyB2b2lkIG5ldHZzY190ZWFyZG93bl9yZWN2X2dwYWRsKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMzA2LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0X2RldmljZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0zMjgtXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjMyOTpzdGF0aWMgdm9pZCBuZXR2c2NfdGVhcmRvd25fc2VuZF9ncGFkbChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTMzMC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldF9kZXZpY2UsXFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM9MzY3PXN0YXRpYyBpbnQgbmV0dnNjX2luaXRfYnVmKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy01ODUtXFx0bmV0dnNjX3Jldm9rZV9zZW5kX2J1ZihkZXZpY2UsIG5ldF9kZXZpY2UsIG5kZXYpO1xcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzo1ODY6XFx0bmV0dnNjX3RlYXJkb3duX3JlY3ZfZ3BhZGwoZGV2aWNlLCBuZXRfZGV2aWNlLCBuZGV2KTtcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6NTg3OlxcdG5ldHZzY190ZWFyZG93bl9zZW5kX2dwYWRsKGRldmljZSwgbmV0X2RldmljZSwgbmRldik7XFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTU4OC1cXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYz03MjY9dm9pZCBuZXR2c2NfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtNzYzLVxcdC8qIE11c3QgZG8gdGhlIEdQQURMIHRlYXJkb3duIGFmdGVyIGNoYW5uZWwgaXMgY2xvc2VkICovXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjc2NDpcXHRuZXR2c2NfdGVhcmRvd25fcmVjdl9ncGFkbChkZXZpY2UsIG5ldF9kZXZpY2UsIG5kZXYpO1xcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzo3NjU6XFx0bmV0dnNjX3RlYXJkb3duX3NlbmRfZ3BhZGwoZGV2aWNlLCBuZXRfZGV2aWNlLCBuZGV2KTtcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtNzY2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1MDo1MC41MzI0MTY5ODNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDA4Mzk3NjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBrZXJuZWwgY29kZSBiYXNlZCBvbiB0aG9zZSBrZXl3b3JkczpcblxuKipEaXNzZWN0aW5nIHRoZSBWTUJ1cyBDaGFubmVsIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nLCBsZXQncyB6ZXJvIGluIG9uIGBkcml2ZXJzL2h2L2NoYW5uZWwuY2AuIE15IGltbWVkaWF0ZSBpbnRlcmVzdCBpcyB0cmlnZ2VyZWQgYnkgdGhlIG1lbnRpb24gb2YgYHZtYnVzX2FsbG9jX2J1ZmZlcmAsIGB2bWJ1c19mcmVlX2J1ZmZlcmAsIGFuZCBgdm1idXNfbGVha19idWZmZXJgLiBNeSBzcGlkZXktc2Vuc2UgdGVsbHMgbWUgdGhlc2UgYXJlIGxpa2VseSB0aGUgY29yZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIG1lbW9yeSBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIGFuZCB3aGF0IGxvb2tzIGxpa2UgYSBwb3RlbnRpYWwgYnVmZmVyIGxlYWsgc2NlbmFyaW8sIHdpdGhpbiB0aGUgVk1CdXMgY2hhbm5lbCBoYW5kbGluZyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNoYW5uZWwgZHJpdmVyIGludGVyYWN0cyB3aXRoIG1lbW9yeSwgYW5kIHRoZXNlIHRocmVlIGZ1bmN0aW9ucyBhcmUgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIHdhbnQgdG8gdHJhY2UgdGhlIGxpZmV0aW1lIG9mIGEgYnVmZmVyIHdpdGhpbiB0aGlzIHN5c3RlbSwgdW5kZXJzdGFuZCBob3cgaXTigJlzIGFsbG9jYXRlZCwgdXNlZCwgYW5kLCBjcnVjaWFsbHksIGhvdyBpdHMgcmVzb3VyY2VzIGFyZSByZWxlYXNlZC4gVGhlIHByZXNlbmNlIG9mIGEgXCJsZWFrXCIgZnVuY3Rpb24gaXMgYSByZWQgZmxhZywgaGludGluZyBhdCBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IG9yIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlLCBzbyBteSBjdXJpb3NpdHkgaXMgcGlxdWVkLiBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgd2hlcmUgYHZtYnVzX2FsbG9jX2J1ZmZlcmAgaXMgY2FsbGVkLCB3aGF0IHBhcmFtZXRlcnMgYXJlIHBhc3NlZCB0byBpdCwgYW5kIGhvdyB0aGUgcmV0dXJuZWQgYnVmZmVyIGlzIHVzZWQuIFRoZW4sIEknbGwgdHJhY2UgdGhyb3VnaCB0aGUgY29ycmVzcG9uZGluZyBjYWxscyB0byBgdm1idXNfZnJlZV9idWZmZXJgIHRvIGVuc3VyZSB0aGF0IGl0J3MgYmVpbmcgcGFpcmVkIGNvcnJlY3RseSB3aXRoIGFsbG9jYXRpb25zLiBGaW5hbGx5LCBJJ2xsIGFuYWx5emUgYHZtYnVzX2xlYWtfYnVmZmVyYCBhbmQgc2VlIHdoYXQgdHJpZ2dlcnMgaXRzIGV4ZWN1dGlvbiBhbmQgd2hlcmUgaXQncyBjYWxsZWQgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBsZWFrIGFuZCBpdHMgcG90ZW50aWFsIGltcGFjdC4gSXTigJlzIGFsc28gaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgbWVtb3J5IG1vZGVsIHRoYXQgdW5kZXJwaW5zIHRoZXNlIGZ1bmN0aW9uczsgSSdtIGV4cGVjdGluZyBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGEgcHJpdmF0ZSBoZWFwIG1hbmFnZWQgYnkgdGhlIFZNQnVzIGRyaXZlciwgYW5kIEkgbmVlZCB0byBhc3Nlc3MgaXRzIHRocmVhZCBzYWZldHkgYW5kIHBvdGVudGlhbCBmb3IgY29uY3VycmVuY3kgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjkzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTA6NTMuNTQwODE3MTI0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaHYvY2hhbm5lbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYzMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYzMDpcXHRcXHRpZiAoIWNodW5rcykge1xcbiA2MzE6XFx0XFx0XFx0dmZyZWUoYWRkcik7XFxuIDYzMjpcXHRcXHRcXHRyZXR1cm47XFxuIDYzMzpcXHRcXHR9XFxuIDYzNDpcXHRcXG4gNjM1OlxcdFxcdHZ1bm1hcChhZGRyKTtcXG4gNjM2OlxcdFxcbiA2Mzc6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNodW5rX2NudDsgaSsrKSB7XFxuIDYzODpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHZhZGRyID1cXG4gNjM5OlxcdFxcdFxcdFxcdCh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhjaHVua3NbaV0pO1xcbiA2NDA6XFx0XFx0XFx0dW5zaWduZWQgaW50IG9yZGVyID0gZm9saW9fb3JkZXIocGFnZV9mb2xpbyhjaHVua3NbaV0pKTtcXG4gNjQxOlxcdFxcbiA2NDI6XFx0XFx0XFx0aWYgKHNldF9tZW1vcnlfZW5jcnlwdGVkKHZhZGRyLCAxVSBcXHUwMDNjXFx1MDAzYyBvcmRlcikpXFxuIDY0MzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNjQ0OlxcdFxcdFxcdF9fZnJlZV9wYWdlcyhjaHVua3NbaV0sIG9yZGVyKTtcXG4gNjQ1OlxcdFxcdH1cXG4gNjQ2OlxcdFxcbiA2NDc6XFx0XFx0a3ZmcmVlKGNodW5rcyk7XFxuIDY0ODpcXHR9XFxuIDY0OTpcXHRFWFBPUlRfU1lNQk9MX0dQTCh2bWJ1c19mcmVlX2J1ZmZlcik7XFxuIDY1MDpcXHRcXG4gNjUxOlxcdC8qKlxcbiA2NTI6XFx0ICogdm1idXNfbGVha19idWZmZXIgLSBzZXQgdXAgYSBidWZmZXIgdG8gYmUgbGVha2VkIGJ5IHZtYnVzX2ZyZWVfYnVmZmVyKCkuXFxuIDY1MzpcXHQgKlxcbiA2NTQ6XFx0ICogQGFkZHI6IGJ1ZmZlciBhZGRyZXNzXFxuIDY1NTpcXHQgKiBAY2h1bmtzOiBjaHVua3MgYXJyYXkgZnJvbSB2bWJ1c19hbGxvY19idWZmZXIoKVxcbiA2NTY6XFx0ICogQGNodW5rX2NudDogbnVtYmVyIG9mIGVudHJpZXMgaW4gQGNodW5rc1xcbiA2NTc6XFx0ICpcXG4gNjU4OlxcdCAqIFdoZW4gQGNodW5rcyBpcyBOVUxMIHRoZSBidWZmZXIgaXMgYSBwbGFpbiB2emFsbG9jKCkgYWxsb2NhdGlvbiBhbmRcXG4gNjU5OlxcdCAqIHRoZSBidWZmZXIgaXMgbGVha2VkIGJ5IHNldHRpbmcgQGFkZHIgdG8gTlVMTC4gT3RoZXJ3aXNlIHNldFxcbiA2NjA6XFx0ICogQGNodW5rX2NudCB0byAwIHNvIHRoYXQgdm1idXNfZnJlZV9idWZmZXIoKSBkb2VzIG5vdCB0cnkgdG8gcmUtZW5jcnlwdFxcbiA2NjE6XFx0ICogb3IgZnJlZSB0aGUgYnVmZmVyIG1lbW9yeSwgYnV0IHN0aWxsIHJlbGVhc2VzIHRoZSB2bWFwIGFkZHJlc3MgYW5kXFxuIDY2MjpcXHQgKiB0aGUgY2h1bmtzIG1lbW9yeS5cXG4gNjYzOlxcdCAqXFxuIDY2NDpcXHQgKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgaW4gYSBjb250ZXh0IHdoZXJlIHRoZSBidWZmZXIgaXMgc3RpbGxcXG4gNjY1OlxcdCAqIGJlaW5nIGFjY2Vzc2VkLiBJdCBtdXN0IG5vdCByZW1vdmUgYW55IGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3NlcyBvZlxcbiA2NjY6XFx0ICogdGhlIGJ1ZmZlciBvciBjaGFuZ2UgaXRzIGVuY3J5cHRpb24gc3RhdHVzLlxcbiA2Njc6XFx0ICovXFxuIDY2ODpcXHR2b2lkIHZtYnVzX2xlYWtfYnVmZmVyKHZvaWQgKiphZGRyLCBzdHJ1Y3QgcGFnZSAqKipjaHVua3MsIHUzMiAqY2h1bmtfY250KVxcbiA2Njk6XFx0e1xcbiA2NzA6XFx0XFx0aWYgKCpjaHVua3MpXFxuIDY3MTpcXHRcXHRcXHQqY2h1bmtfY250ID0gMDtcXG4gNjcyOlxcdFxcdGVsc2VcXG4gNjczOlxcdFxcdFxcdCphZGRyID0gTlVMTDtcXG4gNjc0OlxcdH1cXG4gNjc1OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2xlYWtfYnVmZmVyKTtcXG4gNjc2OlxcdFxcbiA2Nzc6XFx0LyoqXFxuIDY3ODpcXHQgKiB2bWJ1c19hbGxvY19idWZmZXIgLSBhbGxvY2F0ZSBhIGhvc3QtdmlzaWJsZSwgdmlydHVhbGx5LWNvbnRpZ3VvdXMgYnVmZmVyLlxcbiA2Nzk6XFx0ICpcXG4gNjgwOlxcdCAqIEBjaGFubmVsOiB0aGUgY2hhbm5lbCB0aGUgYnVmZmVyIHdpbGwgYmUgYXR0YWNoZWQgdG9cXG4gNjgxOlxcdCAqIEBzaXplOiByZXF1ZXN0ZWQgYnVmZmVyIHNpemUgaW4gYnl0ZXMgKHdpbGwgYmUgcm91bmRlZCB1cCB0byBQQUdFX1NJWkUpXFxuIDY4MjpcXHQgKiBAY2h1bmtzX291dDogb24gc3VjY2Vzcywgc2V0IHRvIHRoZSBhcnJheSBvZiB1bmRlcmx5aW5nIGNodW5rcywgb3IgTlVMTCB3aGVuXFxuIDY4MzpcXHQgKiAgICAgICAgICAgICAgdGhlIGJ1ZmZlciB3YXMgYWxsb2NhdGVkIHdpdGggdnphbGxvYygpXFxuIDY4NDpcXHQgKiBAY2h1bmtfY250X291dDogb24gc3VjY2Vzcywgc2V0IHRvIHRoZSBudW1iZXIgb2YgY2h1bmtzXFxuIDY4NTpcXHQgKlxcbiA2ODY6XFx0ICogQnVmZmVycyBub3QgcmVxdWlyaW5nIGRlY3J5cHRpb24gYXJlIGFsbG9jYXRlZCB3aXRoIHZ6YWxsb2MoKS5cXG4gNjg3OlxcdCAqXFxuIDY4ODpcXHQgKiBCdWZmZXJzIHJlcXVpcmluZyBkZWNyeXB0aW9uIGFyZSBhbGxvY2F0ZWQgYXMgYSBzZXJpZXMgb2ZcXG4gNjg5OlxcdCAqIHBoeXNpY2FsbHktY29udGlndW91cyBjaHVua3MsIHN0YXJ0aW5nIGF0IE1BWF9QQUdFX09SREVSIGFuZCBmYWxsaW5nIGJhY2sgdG9cXG4gNjkwOlxcdCAqIHNtYWxsZXIgb3JkZXJzIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4gRWFjaCBjaHVuayBpcyB0cmFuc2l0aW9uZWQgdG9cXG4gNjkxOlxcdCAqIGhvc3QtdmlzaWJsZSB2aWEgc2V0X21lbW9yeV9kZWNyeXB0ZWQoKSBvbiBpdHMgZGlyZWN0LW1hcCBhZGRyZXNzLCB0aGVuIGFsbFxcbiA2OTI6XFx0ICogY2h1bmtzIGFyZSBjb21iaW5lZCBpbnRvIGEgdmlydHVhbGx5LWNvbnRpZ3VvdXMgcmFuZ2UgdmlhIHZtYXAoKS5cXG4gNjkzOlxcdCAqXFxuIDY5NDpcXHQgKiBSZXR1cm46IHRoZSBidWZmZXIncyB2aXJ0dWFsIGFkZHJlc3MsIG9yIE5VTEwgb24gZmFpbHVyZS5cXG4gNjk1OlxcdCAqL1xcbiA2OTY6XFx0dm9pZCAqdm1idXNfYWxsb2NfYnVmZmVyKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLFxcbiA2OTc6XFx0XFx0XFx0XFx0IHUzMiBzaXplLFxcbiA2OTg6XFx0XFx0XFx0XFx0IHN0cnVjdCBwYWdlICoqKmNodW5rc19vdXQsXFxuIDY5OTpcXHRcXHRcXHRcXHQgdTMyICpjaHVua19jbnRfb3V0KVxcbiA3MDA6XFx0e1xcbiA3MDE6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IFBGTl9VUChzaXplKTtcXG4gNzAyOlxcdFxcdHVuc2lnbmVkIGxvbmcgcmVtYWluaW5nID0gbnJfcGFnZXM7XFxuIDcwMzpcXHRcXHR1bnNpZ25lZCBsb25nIHBhZ2VfaWR4ID0gMDtcXG4gNzA0OlxcdFxcdHN0cnVjdCBwYWdlICoqY2h1bmtzID0gTlVMTDtcXG4gNzA1OlxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZXMgPSBOVUxMO1xcbiA3MDY6XFx0XFx0aW50IG9yZGVyID0gTUFYX1BBR0VfT1JERVI7XFxuIDcwNzpcXHRcXHR1MzIgY2h1bmtfY250ID0gMDtcXG4gNzA4OlxcdFxcdHZvaWQgKmFkZHI7XFxuIDcwOTpcXHRcXHR1MzIgaTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTA6NTMuNTQwOTE5NDI0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ3NTgyMDM1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLY29uZmlnIElucXVpcnk6IEh5cGVyLVYgRHJpdmVycyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgZ292ZXJuIHRoZSBIeXBlci1WIGRyaXZlcnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGRyaXZlcnMgcmVzaWRpbmcgd2l0aGluIGBkcml2ZXJzL2h2L2AgYW5kLCBtb3JlIHByZWNpc2VseSwgdGhvc2UgbmVzdGVkIHVuZGVyIGBkcml2ZXJzL25ldC9oeXBlcnYvYC4gTXkgdXN1YWwgYXBwcm9hY2ggaGVyZSBpcyB0byBsZXZlcmFnZSB0aGUgS2NvbmZpZyBzZWFyY2ggbWVjaGFuaXNtcyDigJMgdGhhdCdzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IHZhcmlhYmxlcyBhbmQgdW5kZXJzdGFuZCB0aGVpciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgcG90ZW50aWFsIG1lYW5pbmdzIHdpdGhpbiB0aGUgYnJvYWRlciBrZXJuZWwgY29udGV4dC4gVGltZSB0byBkaXZlIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDAwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1MDo1Ni4wMTY3NDI3OTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNTQ5MTM0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFlQRVJWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaHYvS2NvbmZpZz0zPW1lbnUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIGd1ZXN0IHN1cHBvcnRcXFwiXFxuZHJpdmVycy9odi9LY29uZmlnLTQtXFxuZHJpdmVycy9odi9LY29uZmlnOjU6Y29uZmlnIEhZUEVSVlxcbmRyaXZlcnMvaHYvS2NvbmZpZy02LVxcdGJvb2wgXFxcIk1pY3Jvc29mdCBIeXBlci1WIGNvcmUgaHlwZXJ2aXNvciBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9odi9LY29uZmlnLTE2LVxcbmRyaXZlcnMvaHYvS2NvbmZpZzoxNzpjb25maWcgSFlQRVJWX1ZUTF9NT0RFXFxuZHJpdmVycy9odi9LY29uZmlnLTE4LVxcdGJvb2wgXFxcIkVuYWJsZSBMaW51eCB0byBib290IGluIFZUTCBjb250ZXh0XFxcIlxcbi0tXFxuZHJpdmVycy9odi9LY29uZmlnLTQyLVxcbmRyaXZlcnMvaHYvS2NvbmZpZzo0Mzpjb25maWcgSFlQRVJWX1RJTUVSXFxuZHJpdmVycy9odi9LY29uZmlnLTQ0LVxcdGRlZl9ib29sIEhZUEVSViBcXHUwMDI2XFx1MDAyNiBYODZcXG5kcml2ZXJzL2h2L0tjb25maWctNDUtXFxuZHJpdmVycy9odi9LY29uZmlnOjQ2OmNvbmZpZyBIWVBFUlZfVVRJTFNcXG5kcml2ZXJzL2h2L0tjb25maWctNDctXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIFV0aWxpdGllcyBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2h2L0tjb25maWctNTItXFxuZHJpdmVycy9odi9LY29uZmlnOjUzOmNvbmZpZyBIWVBFUlZfQkFMTE9PTlxcbmRyaXZlcnMvaHYvS2NvbmZpZy01NC1cXHR0cmlzdGF0ZSBcXFwiTWljcm9zb2Z0IEh5cGVyLVYgQmFsbG9vbiBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2h2L0tjb25maWctNTktXFxuZHJpdmVycy9odi9LY29uZmlnOjYwOmNvbmZpZyBIWVBFUlZfVk1CVVNcXG5kcml2ZXJzL2h2L0tjb25maWctNjEtXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIFZNQnVzIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0yNzE9Y29uZmlnIFNFUklPX09MUENfQVBTUFxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI4MC1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MjgxOmNvbmZpZyBIWVBFUlZfS0VZQk9BUkRcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjgyLVxcdHRyaXN0YXRlIFxcXCJNaWNyb3NvZnQgU3ludGhldGljIEtleWJvYXJkIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWc6Mjpjb25maWcgSFlQRVJWX05FVFxcbmRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIHZpcnR1YWwgbmV0d29yayBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3Njc2kvS2NvbmZpZz01Nzg9Y29uZmlnIFhFTl9TQ1NJX0ZST05URU5EXFxuLS1cXG5kcml2ZXJzL3Njc2kvS2NvbmZpZy01ODctXFxuZHJpdmVycy9zY3NpL0tjb25maWc6NTg4OmNvbmZpZyBIWVBFUlZfU1RPUkFHRVxcbmRyaXZlcnMvc2NzaS9LY29uZmlnLTU4OS1cXHR0cmlzdGF0ZSBcXFwiTWljcm9zb2Z0IEh5cGVyLVYgdmlydHVhbCBzdG9yYWdlIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTA6NTYuNzUyMjQ0NzYyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MDc1MzgwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEh5cGVyLVYgRHJpdmVyIEJ1aWxkIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGNoYW5uZWwuY2AgYW5kIGBuZXR2c2MuY2AgZ2V0IGNvbXBpbGVkIGludG8gdGhlIEh5cGVyLVYgZHJpdmVycy4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgTWFrZWZpbGVzLiBJJ2xsIHN0YXJ0IHdpdGggYGRyaXZlcnMvaHYvTWFrZWZpbGVgIGFuZCBgZHJpdmVycy9uZXQvaHlwZXJ2L01ha2VmaWxlYC4gVGhlc2UgYXJlIHRoZSBsb2dpY2FsIHBsYWNlcyB0byBmaW5kIHRoZSBidWlsZCBydWxlcywgZGVwZW5kZW5jaWVzLCBhbmQgdWx0aW1hdGVseSwgdGhlIGNvbXBpbGVyIGZsYWdzIHVzZWQgZm9yIHRoZXNlIHNwZWNpZmljIG1vZHVsZXMgd2l0aGluIHRoZSBIeXBlci1WIHN1YnN5c3RlbS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBleHBsaWNpdCBjb21waWxhdGlvbiB0YXJnZXRzIGZvciB0aGVzZSBmaWxlcyBvciwgbW9yZSBsaWtlbHksIGluY2x1c2lvbiBvZiBicm9hZGVyIGJ1aWxkIHJ1bGVzIHRoYXQgZW5jb21wYXNzIHRoZW0uIEknbGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBvYmplY3QgZmlsZXMgYXJlIGdlbmVyYXRlZCwgdGhlIGxpYnJhcmllcyB0aGV5IGxpbmsgYWdhaW5zdCwgYW5kIGhvdyB0aGV5IHVsdGltYXRlbHkgYmVjb21lIHBhcnQgb2YgdGhlIGxhcmdlciBgaHZgIG9yIGBoeXBlcnZgIG1vZHVsZXMuIExldCdzIHNlZSB3aGF0IHRoZSBNYWtlZmlsZXMgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzgyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTA6NTkuMzU5Nzg0ODM5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk5NzM3NzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoYW5uZWxcXFxcLm98bmV0dnNjXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2hvc3QxeC9NYWtlZmlsZT0yPWhvc3QxeC15ID0gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvaG9zdDF4L01ha2VmaWxlLTctXFx0Y2RtYS5vIFxcXFxcXG5kcml2ZXJzL2dwdS9ob3N0MXgvTWFrZWZpbGU6ODpcXHRjaGFubmVsLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2hvc3QxeC9NYWtlZmlsZS05LVxcdGpvYi5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvaHYvTWFrZWZpbGU9MTE9aHZfdm1idXMteSA6PSB2bWJ1c19kcnYubyBcXFxcXFxuZHJpdmVycy9odi9NYWtlZmlsZToxMjpcXHRcXHQgaHYubyBjb25uZWN0aW9uLm8gY2hhbm5lbC5vIFxcXFxcXG5kcml2ZXJzL2h2L01ha2VmaWxlLTEzLVxcdFxcdCBjaGFubmVsX21nbXQubyByaW5nX2J1ZmZlci5vIGh2X3RyYWNlLm9cXG4tLVxcbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpZHR2L01ha2VmaWxlPTU9ZHZiLXZpZHR2LWJyaWRnZS1vYmpzIDo9IHZpZHR2X2JyaWRnZS5vIHZpZHR2X2NvbW1vbi5vIHZpZHR2X3RzLm8gdmlkdHZfcHNpLm8gXFxcXFxcbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpZHR2L01ha2VmaWxlOjY6XFx0XFx0XFx0IHZpZHR2X3Blcy5vIHZpZHR2X3MzMDJtLm8gdmlkdHZfY2hhbm5lbC5vIHZpZHR2X211eC5vXFxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdmlkdHYvTWFrZWZpbGUtNy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL01ha2VmaWxlPTU9b2JqLSQoQ09ORklHX01JQ1JPU09GVF9NQU5BKSArPSBtYW5hLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9NYWtlZmlsZTo2Om1hbmEtb2JqcyA6PSBnZG1hX21haW4ubyBzaG1fY2hhbm5lbC5vIGh3X2NoYW5uZWwubyBtYW5hX2VuLm8gbWFuYV9ldGh0b29sLm8gbWFuYV9icGYub1xcbi0tXFxuZHJpdmVycy9uZXQvaHlwZXJ2L01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvaHlwZXJ2L01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0hZUEVSVl9ORVQpICs9IGh2X25ldHZzYy5vXFxuZHJpdmVycy9uZXQvaHlwZXJ2L01ha2VmaWxlLTMtXFxuZHJpdmVycy9uZXQvaHlwZXJ2L01ha2VmaWxlOjQ6aHZfbmV0dnNjLXkgOj0gbmV0dnNjX2Rydi5vIG5ldHZzYy5vIHJuZGlzX2ZpbHRlci5vIG5ldHZzY190cmFjZS5vIG5ldHZzY19icGYub1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlPTI9YXRoOWsteSArPVxcdGJlYWNvbi5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZS05LVxcdFxcdGFudGVubmEubyBcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlOjEwOlxcdFxcdGNoYW5uZWwub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZS0xMS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9NYWtlZmlsZT0yMz1icmNtc21hYy15IDo9IFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9NYWtlZmlsZS0yNy1cXHRhbnRzZWwubyBcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL01ha2VmaWxlOjI4OlxcdGNoYW5uZWwubyBcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL01ha2VmaWxlLTI5LVxcdG1haW4ubyBcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L01ha2VmaWxlPTExPW10NzYteSA6PSBcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9NYWtlZmlsZS0xMi1cXHRtbWlvLm8gdXRpbC5vIHRyYWNlLm8gZG1hLm8gbWFjODAyMTEubyBkZWJ1Z2ZzLm8gZWVwcm9tLm8gXFxcXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvTWFrZWZpbGU6MTM6XFx0dHgubyBhZ2ctcngubyBtY3UubyB3ZWQubyBzY2FuLm8gY2hhbm5lbC5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9NYWtlZmlsZS0xNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTE6MDAuNzU5NTI4OTE2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0NTcxNzU3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBkZWVwIGluIGtlcm5lbCBkZXZlbG9wbWVudDpcblxuKipFeGFtaW5pbmcgSHlwZXItViBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBIeXBlci1WIGRyaXZlcnMuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYEtjb25maWdgIGZpbGVzIOKAkyB0aGV5J3JlIHRoZSBoZWFydCBvZiB0aGUgYnVpbGQgc3lzdGVtJ3MgbG9naWMuIEkga25vdyBJJ2xsIGJlIHN0YXJ0aW5nIGJ5IGNyb3NzLXJlZmVyZW5jaW5nIGBkcml2ZXJzL2h2L0tjb25maWdgIGFuZCBgZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWdgLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGV5J3JlIHN0cnVjdHVyZWQgYW5kIHJlbGF0ZWQuIEFyZSB0aGVyZSBjb21tb24gZGVwZW5kZW5jaWVzIG9yIHNoYXJlZCBzZXR0aW5ncz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBjb25zb2xpZGF0aW9uIG9yIGltcHJvdmVtZW50PyBJIGV4cGVjdCB0aGUgZmlyc3Qgb25lIHRvIGNvbnRhaW4gdGhlIGNvcmUgSFYgZGVmaW5pdGlvbnMgYW5kIG9wdGlvbnMsIGFuZCB0aGUgc2Vjb25kIHRvIGluY2x1ZGUgdGhlIG5ldHdvcmtpbmctc3BlY2lmaWMgY29uZmlndXJhdGlvbi4gVGltZSB0byBkaWcgaW4gYW5kIG1hcCBvdXQgdGhlc2UgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFRoaXMgc2hvdWxkIGJlIHF1aWNrLCB0aG91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MTIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1MTowNC4yMTY3MDY5N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2h2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdG1lbnUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIGd1ZXN0IHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBIWVBFUlZcXG4gICA2OlxcdFxcdGJvb2wgXFxcIk1pY3Jvc29mdCBIeXBlci1WIGNvcmUgaHlwZXJ2aXNvciBzdXBwb3J0XFxcIlxcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiAoWDg2IFxcdTAwMjZcXHUwMDI2IFg4Nl9MT0NBTF9BUElDIFxcdTAwMjZcXHUwMDI2IEhZUEVSVklTT1JfR1VFU1QpIFxcXFxcXG4gICA4OlxcdFxcdFxcdHx8IChBUk02NCBcXHUwMDI2XFx1MDAyNiAhQ1BVX0JJR19FTkRJQU4pXFxuICAgOTpcXHRcXHRzZWxlY3QgUEFSQVZJUlRcXG4gIDEwOlxcdFxcdHNlbGVjdCBYODZfSFZfQ0FMTEJBQ0tfVkVDVE9SIGlmIFg4NlxcbiAgMTE6XFx0XFx0c2VsZWN0IE9GX0VBUkxZX0ZMQVRUUkVFIGlmIE9GXFxuICAxMjpcXHRcXHRzZWxlY3QgSVJRX01TSV9MSUIgaWYgWDg2XFxuICAxMzpcXHRcXHRoZWxwXFxuICAxNDpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBydW4gTGludXggYXMgYSBIeXBlci1WIGNsaWVudCBvcGVyYXRpbmdcXG4gIDE1OlxcdFxcdCAgc3lzdGVtLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgSFlQRVJWX1ZUTF9NT0RFXFxuICAxODpcXHRcXHRib29sIFxcXCJFbmFibGUgTGludXggdG8gYm9vdCBpbiBWVEwgY29udGV4dFxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gKFg4Nl82NCBcXHUwMDI2XFx1MDAyNiBIQVZFX1NUQVRJQ19DQUxMKSB8fCBBUk02NFxcbiAgMjA6XFx0XFx0ZGVwZW5kcyBvbiBIWVBFUlZcXG4gIDIxOlxcdFxcdGRlcGVuZHMgb24gU01QXFxuICAyMjpcXHRcXHRkZWZhdWx0IG5cXG4gIDIzOlxcdFxcdGhlbHBcXG4gIDI0OlxcdFxcdCAgVmlydHVhbCBTZWN1cmUgTW9kZSAoVlNNKSBpcyBhIHNldCBvZiBoeXBlcnZpc29yIGNhcGFiaWxpdGllcyBhbmRcXG4gIDI1OlxcdFxcdCAgZW5saWdodGVubWVudHMgb2ZmZXJlZCB0byBob3N0IGFuZCBndWVzdCBwYXJ0aXRpb25zIHdoaWNoIGVuYWJsZXNcXG4gIDI2OlxcdFxcdCAgdGhlIGNyZWF0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIG5ldyBzZWN1cml0eSBib3VuZGFyaWVzIHdpdGhpblxcbiAgMjc6XFx0XFx0ICBvcGVyYXRpbmcgc3lzdGVtIHNvZnR3YXJlLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRcXHQgIFZTTSBhY2hpZXZlcyBhbmQgbWFpbnRhaW5zIGlzb2xhdGlvbiB0aHJvdWdoIFZpcnR1YWwgVHJ1c3QgTGV2ZWxzXFxuICAzMDpcXHRcXHQgIChWVExzKS4gVmlydHVhbCBUcnVzdCBMZXZlbHMgYXJlIGhpZXJhcmNoaWNhbCwgd2l0aCBoaWdoZXIgbGV2ZWxzXFxuICAzMTpcXHRcXHQgIGJlaW5nIG1vcmUgcHJpdmlsZWdlZCB0aGFuIGxvd2VyIGxldmVscy4gVlRMMCBpcyB0aGUgbGVhc3QgcHJpdmlsZWdlZFxcbiAgMzI6XFx0XFx0ICBsZXZlbCwgYW5kIGN1cnJlbnRseSBvbmx5IG90aGVyIGxldmVsIHN1cHBvcnRlZCBpcyBWVEwyLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBidWlsZCBhIExpbnV4IGtlcm5lbCB0byBydW4gYXQgYSBWVEwgb3RoZXIgdGhhblxcbiAgMzU6XFx0XFx0ICB0aGUgbm9ybWFsIFZUTDAsIHdoaWNoIGN1cnJlbnRseSBpcyBvbmx5IFZUTDIuICBUaGlzIG9wdGlvblxcbiAgMzY6XFx0XFx0ICBpbml0aWFsaXplcyB0aGUga2VybmVsIHRvIHJ1biBpbiBWVEwyLCBhbmQgYWRkcyB0aGUgYWJpbGl0eSB0byBib290XFxuICAzNzpcXHRcXHQgIHNlY29uZGFyeSBDUFVzIGRpcmVjdGx5IGludG8gNjQtYml0IGNvbnRleHQgYXMgcmVxdWlyZWQgZm9yIFZUTHMgb3RoZXJcXG4gIDM4OlxcdFxcdCAgdGhhbiAwLiAgQSBrZXJuZWwgYnVpbHQgd2l0aCB0aGlzIG9wdGlvbiBtdXN0IHJ1biBhdCBWVEwyLCBhbmQgd2lsbFxcbiAgMzk6XFx0XFx0ICBub3QgcnVuIGFzIGEgbm9ybWFsIGd1ZXN0LlxcbiAgNDA6XFx0XFxuICA0MTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE5cXG4gIDQyOlxcdFxcbiAgNDM6XFx0Y29uZmlnIEhZUEVSVl9USU1FUlxcbiAgNDQ6XFx0XFx0ZGVmX2Jvb2wgSFlQRVJWIFxcdTAwMjZcXHUwMDI2IFg4NlxcbiAgNDU6XFx0XFxuICA0NjpcXHRjb25maWcgSFlQRVJWX1VUSUxTXFxuICA0NzpcXHRcXHR0cmlzdGF0ZSBcXFwiTWljcm9zb2Z0IEh5cGVyLVYgVXRpbGl0aWVzIGRyaXZlclxcXCJcXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gSFlQRVJWX1ZNQlVTIFxcdTAwMjZcXHUwMDI2IENPTk5FQ1RPUiBcXHUwMDI2XFx1MDAyNiBOTFNcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gIDUwOlxcdFxcdGhlbHBcXG4gIDUxOlxcdFxcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIGVuYWJsZSB0aGUgSHlwZXItViBVdGlsaXRpZXMuXFxuICA1MjpcXHRcXG4gIDUzOlxcdGNvbmZpZyBIWVBFUlZfQkFMTE9PTlxcbiAgNTQ6XFx0XFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIEJhbGxvb24gZHJpdmVyXFxcIlxcbiAgNTU6XFx0XFx0ZGVwZW5kcyBvbiBIWVBFUlZfVk1CVVNcXG4gIDU2OlxcdFxcdHNlbGVjdCBQQUdFX1JFUE9SVElOR1xcbiAgNTc6XFx0XFx0aGVscFxcbiAgNTg6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gZW5hYmxlIEh5cGVyLVYgQmFsbG9vbiBkcml2ZXIuXFxuICA1OTpcXHRcXG4gIDYwOlxcdGNvbmZpZyBIWVBFUlZfVk1CVVNcXG4gIDYxOlxcdFxcdHRyaXN0YXRlIFxcXCJNaWNyb3NvZnQgSHlwZXItViBWTUJ1cyBkcml2ZXJcXFwiXFxuICA2MjpcXHRcXHRkZXBlbmRzIG9uIEhZUEVSVlxcbiAgNjM6XFx0XFx0ZGVmYXVsdCBIWVBFUlZcXG4gIDY0OlxcdFxcdHNlbGVjdCBTWVNGQiBpZiBFRkkgXFx1MDAyNlxcdTAwMjYgIUhZUEVSVl9WVExfTU9ERVxcbiAgNjU6XFx0XFx0aGVscFxcbiAgNjY6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gZW5hYmxlIEh5cGVyLVYgVm1idXMgZHJpdmVyLlxcbiAgNjc6XFx0XFxuICA2ODpcXHRjb25maWcgTVNIVl9ST09UXFxuICA2OTpcXHRcXHR0cmlzdGF0ZSBcXFwiTWljcm9zb2Z0IEh5cGVyLVYgcm9vdCBwYXJ0aXRpb24gc3VwcG9ydFxcXCJcXG4gIDcwOlxcdFxcdGRlcGVuZHMgb24gSFlQRVJWIFxcdTAwMjZcXHUwMDI2IChYODZfNjQgfHwgQVJNNjQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUxOjA0LjIxNjc3ODk2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MTkyMDYzMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgSHlwZXItViBOZXR3b3JraW5nIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBIeXBlci1WIG5ldHdvcmsgZHJpdmVycy4gU3BlY2lmaWNhbGx5LCBJJ20gaGVhZGluZyBvdmVyIHRvIGBkcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIHN1YnN5c3RlbSBhcmUgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNvbnRyb2xsYWJsZSwgd2hhdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYW5kIGhvdyB0aGUgdmFyaW91cyBmZWF0dXJlcyBpbnRlcmFjdCB3aXRoIG9uZSBhbm90aGVyLiBUaGlzIGZpbGUgd2lsbCB0ZWxsIG1lIGhvdyB0aGUgdXNlciBoYXMgY29uZmlndXJlZCB0aGlzIHBhcnRpY3VsYXIgc3Vic3lzdGVtLCBhbmQgSSB3aWxsIGJlIGFibGUgdG8gdGVsbCB3aGF0IGNob2ljZXMgdGhleSBoYXZlIG1hZGUgZm9yIHRoaXMgcGFydCBvZiB0aGUgZHJpdmVyLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgYXJjaGl0ZWN0dXJlIGFuZCBvcHRpb25zLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBuZXR3b3JrIHN0YWNrLiBVbmRlcnN0YW5kaW5nIHRoaXMgS2NvbmZpZyBmaWxlIGlzIHRoZSBmaXJzdCBzdGVwIHRvd2FyZCByZWFsbHkgZ3Jhc3BpbmcgdGhlIGNhcGFiaWxpdGllcyBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGUgSHlwZXItViBuZXR3b3JrIGRyaXZlcnMuIEZyb20gaGVyZSBJIGNhbiBzdGFydCB0byBmb2xsb3cgdGhlIGxpbmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE4NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTE6MDcuMTM1OTg3MTUyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgSFlQRVJWX05FVFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIHZpcnR1YWwgbmV0d29yayBkcml2ZXJcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIEhZUEVSVl9WTUJVU1xcbiAgIDU6XFx0XFx0c2VsZWN0IFVDUzJfU1RSSU5HXFxuICAgNjpcXHRcXHRzZWxlY3QgTkxTXFxuICAgNzpcXHRcXHRoZWxwXFxuICAgODpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBlbmFibGUgdGhlIEh5cGVyLVYgdmlydHVhbCBuZXR3b3JrIGRyaXZlci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTE6MDcuMTM2MDQwNzUyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNDU3MDcyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBIeXBlci1WIFJlYWNoYWJpbGl0eSBpbiBGdXp6aW5nIEVudmlyb25tZW50cyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIEkgY2FuIGFjdHVhbGx5IHJlYWNoIEh5cGVyLVYgY29tcG9uZW50cyBsaWtlIHRoZSBWTUJ1cyBhbmQgSFlQRVJWX05FVCB3aXRoaW4gZnV6emluZyBlbnZpcm9ubWVudHMg4oCTIHNwZWNpZmljYWxseSwgUUVNVSBhbmQgR0NFJ3MgU3l6a2FsbGVyIHNldHVwcy4gQmVmb3JlIGRpdmluZyBpbiwgSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgSHlwZXItViBvcGVyYXRlcy4gKkhvdyBkb2VzIHRoZSBoeXBlcnZpc29yIHdvcmssIGZ1bmRhbWVudGFsbHk/KiBBaCwgcmlnaHQsIEh5cGVyLVYgaXMgTWljcm9zb2Z0J3MgaHlwZXJ2aXNvci4gSWYgSSdtIHJ1bm5pbmcgYSBndWVzdCBPUyAqdW5kZXIqIEh5cGVyLVYsIHRoZSBzeXN0ZW0gc2hvdWxkIGJlIGFibGUgdG8gZGV0ZWN0IHRoaXMgdGhyb3VnaCBhIENQVUlEIGNoZWNrIHZpYSBgaHlwZXJ2X2luaXQoKWAuIE5vdywgSSBuZWVkIHRvIGZvY3VzIG9uIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgcHJvYmluZy4gTGV0J3Mgc2VlIGhvdyBgdm1idXNfZHJ2LmNgIGhhbmRsZXMgdGhhdC4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU2OCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUxOjA5LjM4MTc1MTI2NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4ODY2NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX2luaXR8c3Vic3lzX2luaXRjYWxsfHZtYnVzX2J1c19pbml0fGh5cGVydl9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaHYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaHYvaHZfYmFsbG9vbi5jPTIxMjQ9c3RhdGljIGludCBfX2luaXQgaW5pdF9iYWxsb29uX2Rydih2b2lkKVxcbi0tXFxuZHJpdmVycy9odi9odl9iYWxsb29uLmMtMjEyOC1cXG5kcml2ZXJzL2h2L2h2X2JhbGxvb24uYzoyMTI5Om1vZHVsZV9pbml0KGluaXRfYmFsbG9vbl9kcnYpO1xcbmRyaXZlcnMvaHYvaHZfYmFsbG9vbi5jLTIxMzAtXFxuLS1cXG5kcml2ZXJzL2h2L2h2X2NvbW1vbi5jPTM4PUVYUE9SVF9TWU1CT0xfR1BMKGh2X2N1cnJfcGFydGl0aW9uX3R5cGUpO1xcbi0tXFxuZHJpdmVycy9odi9odl9jb21tb24uYy00My0gKiBidWlsdCBvbmx5IHdoZW4gQ09ORklHX0hZUEVSViBpcyBkZWZpbmVkLiAgQnV0IG9uIHg4NixcXG5kcml2ZXJzL2h2L2h2X2NvbW1vbi5jOjQ0OiAqIG1zX2h5cGVydl9pbml0X3BsYXRmb3JtKCkgaXMgYnVpbHQgZXZlbiB3aGVuIENPTkZJR19IWVBFUlYgaXMgbm90XFxuZHJpdmVycy9odi9odl9jb21tb24uYy00NS0gKiBkZWZpbmVkLCBhbmQgaXQgdXNlcyB0aGVzZSB0aHJlZSB2YXJpYWJsZXMuICBTbyBtYXJrIHRoZW0gYXMgX193ZWFrXFxuZHJpdmVycy9odi9odl9jb21tb24uYy00Ni0gKiBoZXJlLCBhbGxvd2luZyBmb3IgYW4gb3ZlcnJpZGluZyBkZWZpbml0aW9uIGluIHRoZSBtb2R1bGUgY29udGFpbmluZ1xcbmRyaXZlcnMvaHYvaHZfY29tbW9uLmM6NDc6ICogbXNfaHlwZXJ2X2luaXRfcGxhdGZvcm0oKS5cXG5kcml2ZXJzL2h2L2h2X2NvbW1vbi5jLTQ4LSAqL1xcbi0tXFxuZHJpdmVycy9odi9odl91dGlsLmM9ODA0PXN0YXRpYyB2b2lkIGV4aXRfaHlwZXJ2X3V0aWxzKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2h2L2h2X3V0aWwuYy04MTAtXFxuZHJpdmVycy9odi9odl91dGlsLmM6ODExOm1vZHVsZV9pbml0KGluaXRfaHlwZXJ2X3V0aWxzKTtcXG5kcml2ZXJzL2h2L2h2X3V0aWwuYy04MTItbW9kdWxlX2V4aXQoZXhpdF9oeXBlcnZfdXRpbHMpO1xcbi0tXFxuZHJpdmVycy9odi9oeXBlcnZfdm1idXMuaD0xMjY9c3RydWN0IGh2X3Blcl9jcHVfY29udGV4dCB7XFxuLS1cXG5kcml2ZXJzL2h2L2h5cGVydl92bWJ1cy5oLTE1NC1cXHQgKiBWTSwgc28gcG9zdF9tc2dfcGFnZSAod2hpY2ggaXMgZGVjcnlwdGVkIGluIGh2X3N5bmljX2FsbG9jKCkpIGlzXFxuZHJpdmVycy9odi9oeXBlcnZfdm1idXMuaDoxNTU6XFx0ICogaW50cm9kdWNlZCBmb3IgdGhpcyBwdXJwb3NlLiBTZWUgaHlwZXJ2X2luaXQoKSBmb3IgbW9yZSBjb21tZW50cy5cXG5kcml2ZXJzL2h2L2h5cGVydl92bWJ1cy5oLTE1Ni1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYz0yNDI4PXN0YXRpYyB2b2lkIF9fZXhpdCBtc2h2X3BhcmVudF9wYXJ0aXRpb25fZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTI0MzgtXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjI0Mzk6bW9kdWxlX2luaXQobXNodl9wYXJlbnRfcGFydGl0aW9uX2luaXQpO1xcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yNDQwLW1vZHVsZV9leGl0KG1zaHZfcGFyZW50X3BhcnRpdGlvbl9leGl0KTtcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jPTEzOTg9c3RhdGljIHZvaWQgX19leGl0IG1zaHZfdnRsX2V4aXQodm9pZClcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jLTE0MDgtXFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmM6MTQwOTptb2R1bGVfaW5pdChtc2h2X3Z0bF9pbml0KTtcXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy0xNDEwLW1vZHVsZV9leGl0KG1zaHZfdnRsX2V4aXQpO1xcbi0tXFxuZHJpdmVycy9odi92bWJ1c19kcnYuYz0xNDA5PXN0YXRpYyBpbnQgdm1idXNfYWxsb2Nfc3luaWNfYW5kX2Nvbm5lY3Qodm9pZClcXG4tLVxcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmMtMTQ2MS0vKlxcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmM6MTQ2MjogKiB2bWJ1c19idXNfaW5pdCAtTWFpbiB2bWJ1cyBkcml2ZXIgaW5pdGlhbGl6YXRpb24gcm91dGluZS5cXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jLTE0NjMtICpcXG4tLVxcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmMtMTQ2OC0gKi9cXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jOjE0Njk6c3RhdGljIGludCB2bWJ1c19idXNfaW5pdCh2b2lkKVxcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmMtMTQ3MC17XFxuLS1cXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jPTI5NzE9c3RhdGljIGludCBfX2luaXQgaHZfYWNwaV9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jLTI5NzQtXFxuZHJpdmVycy9odi92bWJ1c19kcnYuYzoyOTc1OlxcdGlmICghaHZfaXNfaHlwZXJ2X2luaXRpYWxpemVkKCkpXFxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0yOTc2LVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0zMDEyLVxcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmM6MzAxMzpcXHRyZXQgPSB2bWJ1c19idXNfaW5pdCgpO1xcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmMtMzAxNC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9odi92bWJ1c19kcnYuYz0zMDgzPU1PRFVMRV9ERVNDUklQVElPTihcXFwiTWljcm9zb2Z0IEh5cGVyLVYgVk1CdXMgRHJpdmVyXFxcIik7XFxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0zMDg0LVxcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmM6MzA4NTpzdWJzeXNfaW5pdGNhbGwoaHZfYWNwaV9pbml0KTtcXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jLTMwODYtbW9kdWxlX2V4aXQodm1idXNfZXhpdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUxOjA5LjQzMDY0MzI2NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODk5OTU1NzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSHlwZXItViBJbml0aWFsaXphdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaHZfYWNwaV9pbml0KClgIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhpcyBjaGVjazogYGlmICghaHZfaXNfaHlwZXJ2X2luaXRpYWxpemVkKCkpIHJldHVybiAtRU5PREVWO2AuIE5hdHVyYWxseSwgbXkgbWluZCBpbW1lZGlhdGVseSBnb2VzLCBcIkFscmlnaHQsIHdoZXJlIGlzIGBodl9pc19oeXBlcnZfaW5pdGlhbGl6ZWQoKWAgZGVmaW5lZD9cIiBXZSBrbm93IHRoYXQncyB0aGUgY3J1Y2lhbCBnYXRla2VlcGVyLiBJdCdzIHRoZSBjaGVjayB0byBzZWUgaWYgd2UgZXZlbiAqc2hvdWxkKiBwcm9jZWVkIHdpdGggSHlwZXItViBzZXR1cCwgYW5kIGlmIG5vdCwgd2UncmUganVzdCBnb2luZyB0byB0aHJvdyBhbiBlcnJvciBhbmQgYmFpbC4gTm93LCBsZXQncyB0cmFjayBkb3duIHRoYXQgZGVmaW5pdGlvbi4gVGltZSB0byBzZWFyY2ggdGhlIGNvZGViYXNlIGFuZCBnZXQgZG93biB0byBicmFzcyB0YWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNDQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1MToxMi4zMzA2MDA5MzhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MDkzNjg4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodl9pc19oeXBlcnZfaW5pdGlhbGl6ZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9oeXBlcnYvbXNoeXBlcnYuYz0xMzA9ZWFybHlfaW5pdGNhbGwoaHlwZXJ2X2luaXQpO1xcbmFyY2gvYXJtNjQvaHlwZXJ2L21zaHlwZXJ2LmMtMTMxLVxcbmFyY2gvYXJtNjQvaHlwZXJ2L21zaHlwZXJ2LmM6MTMyOmJvb2wgaHZfaXNfaHlwZXJ2X2luaXRpYWxpemVkKHZvaWQpXFxuYXJjaC9hcm02NC9oeXBlcnYvbXNoeXBlcnYuYy0xMzMte1xcbi0tXFxuYXJjaC9hcm02NC9oeXBlcnYvbXNoeXBlcnYuYy0xMzUtfVxcbmFyY2gvYXJtNjQvaHlwZXJ2L21zaHlwZXJ2LmM6MTM2OkVYUE9SVF9TWU1CT0xfR1BMKGh2X2lzX2h5cGVydl9pbml0aWFsaXplZCk7XFxuLS1cXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jPTY4OD1FWFBPUlRfU1lNQk9MX0dQTChoeXBlcnZfcmVwb3J0X3BhbmljKTtcXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jLTY4OS1cXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jOjY5MDpib29sIGh2X2lzX2h5cGVydl9pbml0aWFsaXplZCh2b2lkKVxcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmMtNjkxLXtcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmMtNzEyLX1cXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jOjcxMzpFWFBPUlRfU1lNQk9MX0dQTChodl9pc19oeXBlcnZfaW5pdGlhbGl6ZWQpO1xcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmMtNzE0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1MToxMi42MDE1NDE4MTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzMxNzU5OTU0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgSHlwZXItViBJbml0aWFsaXphdGlvbiBDb2RlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgeDg2IEh5cGVyLVYgaW5pdGlhbGl6YXRpb24gaXMgaGFuZGxlZC4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgYXJjaC94ODYvaHlwZXJ2L2h2X2luaXQuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIHNob3VsZCBiZWdpbiwgcmlnaHQ/IFRoaXMgZmlsZSBzaG91bGQgY29udGFpbiB0aGUgY29yZSBsb2dpYyBmb3Igc2V0dGluZyB1cCB0aGUga2VybmVsIHRvIHJ1biB3aXRoaW4gYSBIeXBlci1WIGVudmlyb25tZW50IG9uIGFuIHg4NiBhcmNoaXRlY3R1cmUuIEknbSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGRldGVjdCBpZiB3ZSdyZSBhY3R1YWxseSAqaW4qIGEgSHlwZXItViBndWVzdCwgYW5kIHRoZW4gY29kZSBwYXRocyB0byBjb25maWd1cmUgdGhlIHNwZWNpZmljIGhhcmR3YXJlIHZpcnR1bGl6YXRpb24gaW50ZXJmYWNlcy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSByZWdpc3RlcmluZyBIeXBlci1WIHNwZWNpZmljIGludGVycnVwdCBoYW5kbGVycywgbWVtb3J5IGFsbG9jYXRpb24gZm9yIHBhcmF2aXJ0dWFsaXplZCBzdHJ1Y3R1cmVzLCBhbmQgaW5pdGlhbGl6YXRpb24gb2YgY29tbXVuaWNhdGlvbiBjaGFubmVscyB3aXRoIHRoZSBob3N0LiBUaGVyZSBzaG91bGQgYWxzbyBiZSBzb21lIHBsYXRmb3JtIGNoZWNrIHNvIHRoYXQgaXQgZG9lcyBub3QgZ28gZm9yd2FyZCBpZiBydW5uaW5nIG9uIHBoeXNpY2FsIGhhcmR3YXJlLiBJIHdhbnQgdG8gc2VlIGhvdyBlYXJseSB0aGlzIGhhcHBlbnMgaW4gdGhlIGJvb3QgcHJvY2VzcyBhbmQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIHRoZSByZWd1bGFyIHg4NiBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBhbmQgaG93IHRoZXNlIGFyZSBoYW5kbGVkIHRvIGVuc3VyZSBhIHNlYW1sZXNzIGludGVncmF0aW9uLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkOyB3aGF0IGtpbmQgb2Ygc2hhcmVkIG1lbW9yeSBvciBjb250cm9sIGJsb2NrcyBhcmUgYmVpbmcgc2V0IHVwIGZvciBjb21tdW5pY2F0aW9uLiBJJ20gcmVhZHkgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzUyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTE6MTUuOTE5MTQzMzc5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2h5cGVydi9odl9pbml0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjkwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjkwOlxcdGJvb2wgaHZfaXNfaHlwZXJ2X2luaXRpYWxpemVkKHZvaWQpXFxuIDY5MTpcXHR7XFxuIDY5MjpcXHRcXHR1bmlvbiBodl94NjRfbXNyX2h5cGVyY2FsbF9jb250ZW50cyBoeXBlcmNhbGxfbXNyO1xcbiA2OTM6XFx0XFxuIDY5NDpcXHRcXHQvKlxcbiA2OTU6XFx0XFx0ICogRW5zdXJlIHRoYXQgd2UncmUgcmVhbGx5IG9uIEh5cGVyLVYsIGFuZCBub3QgYSBLVk0gb3IgWGVuXFxuIDY5NjpcXHRcXHQgKiBlbXVsYXRpb24gb2YgSHlwZXItVlxcbiA2OTc6XFx0XFx0ICovXFxuIDY5ODpcXHRcXHRpZiAoeDg2X2h5cGVyX3R5cGUgIT0gWDg2X0hZUEVSX01TX0hZUEVSVilcXG4gNjk5OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNzAwOlxcdFxcbiA3MDE6XFx0XFx0LyogQSBURFggVk0gd2l0aCBubyBwYXJhdmlzb3IgdXNlcyBURFggR0hDSSBjYWxsIHJhdGhlciB0aGFuIGh2X2h5cGVyY2FsbF9wZyAqL1xcbiA3MDI6XFx0XFx0aWYgKGh2X2lzb2xhdGlvbl90eXBlX3RkeCgpIFxcdTAwMjZcXHUwMDI2ICFtc19oeXBlcnYucGFyYXZpc29yX3ByZXNlbnQpXFxuIDcwMzpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gNzA0OlxcdFxcdC8qXFxuIDcwNTpcXHRcXHQgKiBWZXJpZnkgdGhhdCBlYXJsaWVyIGluaXRpYWxpemF0aW9uIHN1Y2NlZWRlZCBieSBjaGVja2luZ1xcbiA3MDY6XFx0XFx0ICogdGhhdCB0aGUgaHlwZXJjYWxsIHBhZ2UgaXMgc2V0dXBcXG4gNzA3OlxcdFxcdCAqL1xcbiA3MDg6XFx0XFx0aHlwZXJjYWxsX21zci5hc191aW50NjQgPSAwO1xcbiA3MDk6XFx0XFx0cmRtc3JxKEhWX1g2NF9NU1JfSFlQRVJDQUxMLCBoeXBlcmNhbGxfbXNyLmFzX3VpbnQ2NCk7XFxuIDcxMDpcXHRcXG4gNzExOlxcdFxcdHJldHVybiBoeXBlcmNhbGxfbXNyLmVuYWJsZTtcXG4gNzEyOlxcdH1cXG4gNzEzOlxcdEVYUE9SVF9TWU1CT0xfR1BMKGh2X2lzX2h5cGVydl9pbml0aWFsaXplZCk7XFxuIDcxNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTE6MTUuOTE5MjI2Njc5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MjAzMTIwNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgSHlwZXItViBDb21wYXRpYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBzbmlwcGV0IG9mIGNvZGUsIGFuZCB0aGUgY29tbWVudCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIFRoZSBnb2FsIGlzIGNsZWFybHkgdG8gdmVyaWZ5IHRoZSBob3N0IGVudmlyb25tZW50IGlzICphY3R1YWxseSogSHlwZXItViBhbmQgbm90IHNvbWUgb3RoZXIgdmlydHVhbGl6YXRpb24gbGF5ZXIgbWFzcXVlcmFkaW5nIGFzIGl0LCBtYXliZSBLVk0gb3IgWGVuLiBTZWVtcyBzZW5zaWJsZSwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgY29tcGF0aWJpbGl0eSBpc3N1ZXMuIFRoZSBjb2RlIGl0c2VsZiwgYGlmICh4ODZfaHlwZXJfdHlwZSAhPSBYODZfSFlQRVJfTVNfSFlQRVJWKSByZXR1cm4gZmFsc2U7YCwgaXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBhIGRpcmVjdCBjaGVjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB4ODZfaHlwZXJfdHlwZWAgaXMgcG9wdWxhdGVkLiBUaGF0IG1lYW5zIEkgc2hvdWxkIGdvIGNoZWNrIHRoZSBmaWxlIHBhdGggYGFyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuY2AgdG8gdHJhY2UgaG93IHRoYXQgdmFyaWFibGUgZ2V0cyBpbml0aWFsaXplZCwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGF0IGZpbGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1MjAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUxOjE5LjQzOTU0MjE0MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAwMjU1OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWDg2X0hZUEVSX01TX0hZUEVSVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaHlwZXJ2L2h2X2luaXQuYz00NTI9dm9pZCBfX2luaXQgaHlwZXJ2X2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmMtNDU3LVxcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmM6NDU4OlxcdGlmICh4ODZfaHlwZXJfdHlwZSAhPSBYODZfSFlQRVJfTVNfSFlQRVJWKVxcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmMtNDU5LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmM9NjkwPWJvb2wgaHZfaXNfaHlwZXJ2X2luaXRpYWxpemVkKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jLTY5Ny1cXHQgKi9cXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jOjY5ODpcXHRpZiAoeDg2X2h5cGVyX3R5cGUgIT0gWDg2X0hZUEVSX01TX0hZUEVSVilcXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jLTY5OS1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmM9OTE2PWJvb2wgaHZfaXNfaXNvbGF0aW9uX3N1cHBvcnRlZCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTkyMC1cXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmM6OTIxOlxcdGlmICghaHlwZXJ2aXNvcl9pc190eXBlKFg4Nl9IWVBFUl9NU19IWVBFUlYpKVxcbmFyY2gveDg2L2h5cGVydi9pdm0uYy05MjItXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vaHlwZXJ2aXNvci5oPTI0PWVudW0geDg2X2h5cGVydmlzb3JfdHlwZSB7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oeXBlcnZpc29yLmgtMjYtXFx0WDg2X0hZUEVSX1ZNV0FSRSxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oeXBlcnZpc29yLmg6Mjc6XFx0WDg2X0hZUEVSX01TX0hZUEVSVixcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oeXBlcnZpc29yLmgtMjgtXFx0WDg2X0hZUEVSX1hFTl9QVixcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuYz04MTI9Y29uc3QgX19pbml0Y29uc3Qgc3RydWN0IGh5cGVydmlzb3JfeDg2IHg4Nl9oeXBlcl9tc19oeXBlcnYgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L21zaHlwZXJ2LmMtODE0LVxcdC5kZXRlY3RcXHRcXHRcXHQ9IG1zX2h5cGVydl9wbGF0Zm9ybSxcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L21zaHlwZXJ2LmM6ODE1OlxcdC50eXBlXFx0XFx0XFx0PSBYODZfSFlQRVJfTVNfSFlQRVJWLFxcbmFyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuYy04MTYtXFx0LmluaXQueDJhcGljX2F2YWlsYWJsZVxcdD0gbXNfaHlwZXJ2X3gyYXBpY19hdmFpbGFibGUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9Njk5OT1pbnQga3ZtX3g4Nl92ZW5kb3JfaW5pdChzdHJ1Y3Qga3ZtX3g4Nl9pbml0X29wcyAqb3BzKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTcxMTYtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjcxMTc6XFx0aWYgKGh5cGVydmlzb3JfaXNfdHlwZShYODZfSFlQRVJfTVNfSFlQRVJWKSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzExOC1cXHRcXHRzZXRfaHZfdHNjY2hhbmdlX2NiKGt2bV9oeXBlcnZfdHNjX25vdGlmaWVyKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz03MTU4PXZvaWQga3ZtX3g4Nl92ZW5kb3JfZXhpdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTcxNjItI2lmZGVmIENPTkZJR19YODZfNjRcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzE2MzpcXHRpZiAoaHlwZXJ2aXNvcl9pc190eXBlKFg4Nl9IWVBFUl9NU19IWVBFUlYpKVxcbmFyY2gveDg2L2t2bS94ODYuYy03MTY0LVxcdFxcdGNsZWFyX2h2X3RzY2NoYW5nZV9jYigpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1MToxOS41Mjk1NzI2ODFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYzODQwOTU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIHZtYnVzIEJ1ZmZlciBNYW5hZ2VtZW50KipcblxuT2theSwgc28gYHZtYnVzX2xlYWtfYnVmZmVyYCBoYXMgYmVlbiBpbnRyb2R1Y2VkIGluIGBkcml2ZXJzL2h2L2NoYW5uZWwuY2AgYW5kIHN1YnNlcXVlbnRseSBnZXRzIHV0aWxpemVkIHdpdGhpbiBgZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jYC4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIGFsd2F5cyBidWZmZXIgbWFuYWdlbWVudCwgcGFydGljdWxhcmx5IGluIGEgZHJpdmVyIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3aWRlc3ByZWFkIHRoaXMgbmV3IGZ1bmN0aW9uIGlzLCBhbmQgaG93IGl0IGlzIHVzZWQuIElzIGl0IG9ubHkgdXNlZCBieSBuZXR2c2MuYywgb3IgZG9lcyBzb21ldGhpbmcgZWxzZSBjYWxsIGl0PyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIHNjb3BlIG9mIHRoaXMgbmV3IGJ1ZmZlciBmdW5jdGlvbiBhbmQgaXRzIHBvdGVudGlhbCBpbXBhY3QuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGNvbmZpcm0gd2hldGhlciBgdm1idXNfYWxsb2NfYnVmZmVyYCBpcyBhbHNvIHVzZWQgZWxzZXdoZXJlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSB0d28gcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEknbGwgc2VhcmNoIGZvciBhbnkgb3RoZXIgaW5zdGFuY2VzIHdoZXJlIGB2bWJ1c19sZWFrX2J1ZmZlcmAgb3IgYHZtYnVzX2FsbG9jX2J1ZmZlcmAgYXJlIGludm9rZWQgd2l0aGluIHRoZSBjb2RlYmFzZSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGZ1bmN0aW9uJ3MgZ2xvYmFsIGltcGFjdC4gVGhlbiwgSSBjYW4gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgdXNlIGNhc2UgZm9yIHRoaXMgbmV3IGZ1bmN0aW9uLCBhbmQgd2hldGhlciBpdHMgaW50cm9kdWN0aW9uIHBvc2VzIGFueSByaXNrIHRvIG1lbW9yeSBzdGFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODE1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTE6MjIuMTY3OTg1Nzk4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODM5MTc3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1idXNfbGVha19idWZmZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9odi9jaGFubmVsLmM9NjQ5PUVYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2ZyZWVfYnVmZmVyKTtcXG4tLVxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY1MS0vKipcXG5kcml2ZXJzL2h2L2NoYW5uZWwuYzo2NTI6ICogdm1idXNfbGVha19idWZmZXIgLSBzZXQgdXAgYSBidWZmZXIgdG8gYmUgbGVha2VkIGJ5IHZtYnVzX2ZyZWVfYnVmZmVyKCkuXFxuZHJpdmVycy9odi9jaGFubmVsLmMtNjUzLSAqXFxuLS1cXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02NjctICovXFxuZHJpdmVycy9odi9jaGFubmVsLmM6NjY4OnZvaWQgdm1idXNfbGVha19idWZmZXIodm9pZCAqKmFkZHIsIHN0cnVjdCBwYWdlICoqKmNodW5rcywgdTMyICpjaHVua19jbnQpXFxuZHJpdmVycy9odi9jaGFubmVsLmMtNjY5LXtcXG4tLVxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY3NC19XFxuZHJpdmVycy9odi9jaGFubmVsLmM6Njc1OkVYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2xlYWtfYnVmZmVyKTtcXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02NzYtXFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM9MzA1PXN0YXRpYyB2b2lkIG5ldHZzY190ZWFyZG93bl9yZWN2X2dwYWRsKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0zMTgtXFx0XFx0aWYgKHJldCAhPSAwKSB7XFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjMxOTpcXHRcXHRcXHR2bWJ1c19sZWFrX2J1ZmZlcihcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlcmVjdl9idWYsXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTMyMC1cXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZuZXRfZGV2aWNlLVxcdTAwM2VyZWN2X2J1Zl9jaHVua3MsXFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM9MzI5PXN0YXRpYyB2b2lkIG5ldHZzY190ZWFyZG93bl9zZW5kX2dwYWRsKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0zNDItXFx0XFx0aWYgKHJldCAhPSAwKSB7XFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjM0MzpcXHRcXHRcXHR2bWJ1c19sZWFrX2J1ZmZlcihcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlc2VuZF9idWYsXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTM0NC1cXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZuZXRfZGV2aWNlLVxcdTAwM2VzZW5kX2J1Zl9jaHVua3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUxOjIyLjk1MTkwODUyNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjE5ODc1MTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEJ1ZmZlciBBbGxvY2F0aW9uIGFuZCBEZWFsbG9jYXRpb24gaW4gdGhlIFZNQnVzKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgbWVtb3J5IG1hbmFnZW1lbnQgaXMgaGFuZGxlZCBpbiB0aGUgVk1CdXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHRyYWNlIHRoZSB1c2FnZSBvZiBgdm1idXNfYWxsb2NfYnVmZmVyYCBhbmQgYHZtYnVzX2ZyZWVfYnVmZmVyYC4gVGhlc2UgYXJlIHRoZSBjb3JlIHByaW1pdGl2ZXMgZm9yIGJ1ZmZlciBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gd2l0aGluIHRoZSBWTUJ1cywgYW5kIHRvIHRydWx5IHVuZGVyc3RhbmQgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIEkgbmVlZCB0byBzZWUgd2hlcmUgdGhleSdyZSBiZWluZyAqdXNlZCouIFdobydzIHJlcXVlc3RpbmcgbWVtb3J5PyBXaG8ncyByZWxlYXNpbmcgaXQ/IFdoYXQgYXJlIHRoZSBjYWxsaW5nIGNvbnRleHRzPyBUaGlzIGluZm9ybWF0aW9uIGlzIGZ1bmRhbWVudGFsIGZvciBkZWJ1Z2dpbmcgYW55IG1lbW9yeS1yZWxhdGVkIGlzc3Vlcywgb3B0aW1pemluZyB0aGUgYnVmZmVyIHBvb2wsIG9yIGV2ZW4gcHJlZGljdGluZyBtZW1vcnkgdXNhZ2UgcGF0dGVybnMuIFRoaXMgYW5hbHlzaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgYnVmZmVycyBhcmUgZmxvd2luZyB0aHJvdWdoIHRoZSBzeXN0ZW0sIGhvcGVmdWxseSByZXZlYWxpbmcgaW5zaWdodHMgaW50byBhbnkgaW5lZmZpY2llbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjcyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTE6MjUuMTcxNzg2MDg5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Nzk3OTY4NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1idXNfKGFsbG9jfGZyZWUpX2J1ZmZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2h2L2NoYW5uZWwuYz02MTE9RVhQT1JUX1NZTUJPTF9HUEwodm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWQpO1xcbi0tXFxuZHJpdmVycy9odi9jaGFubmVsLmMtNjEzLS8qKlxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjYxNDogKiB2bWJ1c19mcmVlX2J1ZmZlciAtIHJlbGVhc2UgYSBidWZmZXIgYWxsb2NhdGVkIGJ5IHZtYnVzX2FsbG9jX2J1ZmZlcigpLlxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTYxNS0gKlxcbi0tXFxuZHJpdmVycy9odi9jaGFubmVsLmMtNjE3LSAqICAgICAgICBmYWlsZWQgYWxsb2NhdGlvbilcXG5kcml2ZXJzL2h2L2NoYW5uZWwuYzo2MTg6ICogQGNodW5rczogY2h1bmtzIGFycmF5IGZyb20gdm1idXNfYWxsb2NfYnVmZmVyKCksIG9yIE5VTExcXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02MTktICogQGNodW5rX2NudDogbnVtYmVyIG9mIGVudHJpZXMgaW4gQGNodW5rc1xcbi0tXFxuZHJpdmVycy9odi9jaGFubmVsLmMtNjI1LSAqL1xcbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjYyNjp2b2lkIHZtYnVzX2ZyZWVfYnVmZmVyKHZvaWQgKmFkZHIsIHN0cnVjdCBwYWdlICoqY2h1bmtzLCB1MzIgY2h1bmtfY250KVxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTYyNy17XFxuLS1cXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02NDgtfVxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjY0OTpFWFBPUlRfU1lNQk9MX0dQTCh2bWJ1c19mcmVlX2J1ZmZlcik7XFxuZHJpdmVycy9odi9jaGFubmVsLmMtNjUwLVxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY1MS0vKipcXG5kcml2ZXJzL2h2L2NoYW5uZWwuYzo2NTI6ICogdm1idXNfbGVha19idWZmZXIgLSBzZXQgdXAgYSBidWZmZXIgdG8gYmUgbGVha2VkIGJ5IHZtYnVzX2ZyZWVfYnVmZmVyKCkuXFxuZHJpdmVycy9odi9jaGFubmVsLmMtNjUzLSAqXFxuZHJpdmVycy9odi9jaGFubmVsLmMtNjU0LSAqIEBhZGRyOiBidWZmZXIgYWRkcmVzc1xcbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjY1NTogKiBAY2h1bmtzOiBjaHVua3MgYXJyYXkgZnJvbSB2bWJ1c19hbGxvY19idWZmZXIoKVxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY1Ni0gKiBAY2h1bmtfY250OiBudW1iZXIgb2YgZW50cmllcyBpbiBAY2h1bmtzXFxuLS1cXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02NTktICogdGhlIGJ1ZmZlciBpcyBsZWFrZWQgYnkgc2V0dGluZyBAYWRkciB0byBOVUxMLiBPdGhlcndpc2Ugc2V0XFxuZHJpdmVycy9odi9jaGFubmVsLmM6NjYwOiAqIEBjaHVua19jbnQgdG8gMCBzbyB0aGF0IHZtYnVzX2ZyZWVfYnVmZmVyKCkgZG9lcyBub3QgdHJ5IHRvIHJlLWVuY3J5cHRcXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02NjEtICogb3IgZnJlZSB0aGUgYnVmZmVyIG1lbW9yeSwgYnV0IHN0aWxsIHJlbGVhc2VzIHRoZSB2bWFwIGFkZHJlc3MgYW5kXFxuLS1cXG5kcml2ZXJzL2h2L2NoYW5uZWwuYz02NzU9RVhQT1JUX1NZTUJPTF9HUEwodm1idXNfbGVha19idWZmZXIpO1xcbi0tXFxuZHJpdmVycy9odi9jaGFubmVsLmMtNjc3LS8qKlxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjY3ODogKiB2bWJ1c19hbGxvY19idWZmZXIgLSBhbGxvY2F0ZSBhIGhvc3QtdmlzaWJsZSwgdmlydHVhbGx5LWNvbnRpZ3VvdXMgYnVmZmVyLlxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY3OS0gKlxcbi0tXFxuZHJpdmVycy9odi9jaGFubmVsLmMtNjk1LSAqL1xcbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjY5Njp2b2lkICp2bWJ1c19hbGxvY19idWZmZXIoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXFxuZHJpdmVycy9odi9jaGFubmVsLmMtNjk3LVxcdFxcdFxcdCB1MzIgc2l6ZSxcXG4tLVxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTc4Ni1cXHRrdmZyZWUocGFnZXMpO1xcbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjc4NzpcXHR2bWJ1c19mcmVlX2J1ZmZlcihOVUxMLCBjaHVua3MsIGNodW5rX2NudCk7XFxuZHJpdmVycy9odi9jaGFubmVsLmMtNzg4LVxcdHJldHVybiBOVUxMO1xcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTc4OS19XFxuZHJpdmVycy9odi9jaGFubmVsLmM6NzkwOkVYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2FsbG9jX2J1ZmZlcik7XFxuZHJpdmVycy9odi9jaGFubmVsLmMtNzkxLVxcbi0tXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jPTEzMT1zdGF0aWMgdm9pZCBfX2ZyZWVfbmV0dnNjX2RldmljZShzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbnZkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTM2LVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzoxMzc6XFx0dm1idXNfZnJlZV9idWZmZXIobnZkZXYtXFx1MDAzZXJlY3ZfYnVmLCBudmRldi1cXHUwMDNlcmVjdl9idWZfY2h1bmtzLFxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0xMzgtXFx0XFx0XFx0ICBudmRldi1cXHUwMDNlcmVjdl9idWZfY2h1bmtfY250KTtcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6MTM5OlxcdHZtYnVzX2ZyZWVfYnVmZmVyKG52ZGV2LVxcdTAwM2VzZW5kX2J1ZiwgbnZkZXYtXFx1MDAzZXNlbmRfYnVmX2NodW5rcyxcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTQwLVxcdFxcdFxcdCAgbnZkZXYtXFx1MDAzZXNlbmRfYnVmX2NodW5rX2NudCk7XFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM9MzY3PXN0YXRpYyBpbnQgbmV0dnNjX2luaXRfYnVmKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0zODYtXFx0bmV0X2RldmljZS1cXHUwMDNlcmVjdl9idWYgPVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzozODc6XFx0XFx0dm1idXNfYWxsb2NfYnVmZmVyKGRldmljZS1cXHUwMDNlY2hhbm5lbCwgYnVmX3NpemUsXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTM4OC1cXHRcXHRcXHRcXHQgICBcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlcmVjdl9idWZfY2h1bmtzLFxcbi0tXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTQ5Ni1cXHRuZXRfZGV2aWNlLVxcdTAwM2VzZW5kX2J1ZiA9XFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjQ5NzpcXHRcXHR2bWJ1c19hbGxvY19idWZmZXIoZGV2aWNlLVxcdTAwM2VjaGFubmVsLCBidWZfc2l6ZSxcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtNDk4LVxcdFxcdFxcdFxcdCAgIFxcdTAwMjZuZXRfZGV2aWNlLVxcdTAwM2VzZW5kX2J1Zl9jaHVua3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUxOjI2LjE1MTU4ODg0MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTQyNDgzOTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZWFjaGFiaWxpdHkgaW4gTXkgRmllbGQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gbWV0aWN1bG91c2x5LCBmb2N1c2luZyBvbiByZWFjaGFiaWxpdHkgYXMgcGVyIHRoZSBvdXRsaW5lZCBzZWN0aW9ucy4gU2VjdGlvbiAyLCB0aGUgXCJOZWdhdGl2ZSBDcml0ZXJpYSxcIiBmbGFncyBhIGZldyByZWQgZmxhZ3MuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0OlxuXG4qICAgKipTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6KiogSSBpbW1lZGlhdGVseSB6ZXJvIGluIG9uIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHZlbmRvci1zcGVjaWZpYyBjb21wb25lbnRzIGxpa2UgdGhvc2UgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyBsaXN0ZWQsIGVzcGVjaWFsbHkgdGhvc2UgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlIG9yIHNwZWNpZmljIGRyaXZlcnMgbm90IGVtdWxhdGVkIHdpdGhpbiBzdGFuZGFyZCBRRU1VLiBUaGF0J3MgYSBodWdlIGNvbnN0cmFpbnQuIFdlIGNhbuKAmXQgZnV6eiB3aGF0IGlzbuKAmXQgcHJlc2VudC5cbiogICAqKlVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoqKiBUaGUgbWVudGlvbiBvZiBkcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIHRpZWQgdG8gcGh5c2ljYWwgaG90LXVucGx1ZyBvciBtYW51YWwgdW5iaW5kaW5nIGFsc28gc2NyZWFtcyAncG90ZW50aWFsIGZvciBmYWxzZSBwb3NpdGl2ZXMuJyBUaGVzZSBwYXRocyBhcmUgaW5oZXJlbnRseSBkaWZmaWN1bHQgdG8gdHJpZ2dlciBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBhbmQgdHJ5aW5nIHRvIGZvcmNlIHRoZW0gbWF5IGJlIGNvdW50ZXJwcm9kdWN0aXZlLlxuXG5UaGVuLCBTZWN0aW9uIDMsIHRoZSBcIlBvc2l0aXZlIENyaXRlcmlhLFwiIGRyaXZlcyB0aGUgcG9pbnQgaG9tZTogcmVhY2hhYmlsaXR5ICppcyogdGhlIGdhdGUuIFdlJ3JlIGxpbWl0ZWQgdG8gY29kZSB0aGF0ICpjYW4qIGV4ZWN1dGUgd2l0aGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyDigJMgdGhlIFFFTVUvR0NFIHNldHVwIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcy4gSWYgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgYmFzZWQgb24gdGhlIGNyaXRlcmlhIGluIFNlY3Rpb24gMiwgdGhlIGZ1enppbmcgaXMgYSBuby1nbywgZXZlbiBpZiB0aGUgY29kZSBzZWVtcyBpbnRlcmVzdGluZyBvciBoYXMgZXh0cmEgYXNzZXJ0aW9ucy5cblxuTm93LCBsZXQncyB0aGluayBhYm91dCBzeXprYWxsZXIncyBleGVjdXRpb24gZW52aXJvbm1lbnQuIEl0IHJ1bnMgd2l0aGluIFFFTVUgb3IgR0NFIFZNcy4gSSBhbHJlYWR5IHNlZSB3aGF0J3MgY29taW5nOlxuXG4qICAgKipObyBIeXBlci1WOioqIEkgaW1tZWRpYXRlbHkgbmVlZCB0byBlc3RhYmxpc2ggdGhhdCBIeXBlci1WIGlzbuKAmXQgcHJlc2VudC4gR0NFIHVzZXMgS1ZNLCBhbmQgc3RhbmRhcmQgUUVNVSBlaXRoZXIgdXNlcyBLVk0gb3IgVENHLiBJbiB0aGVzZSBlbnZpcm9ubWVudHMsIGB4ODZfaHlwZXJfdHlwZWAgaXMgY2xlYXJseSAqbm90KiBgWDg2X0hZUEVSX01TX0hZUEVSVmAuIFRodXMsIGBodl9pc19oeXBlcnZfaW5pdGlhbGl6ZWQoKWAgcmV0dXJucyBgZmFsc2VgLlxuKiAgICoqVk1CdXMgRmFpbDoqKiBCZWNhdXNlIG9mIHRoZSBsYWNrIG9mIEh5cGVyLVYsIHRoZSBgaHZfdm1idXNgIHN1YnN5c3RlbSBmYWlscyB0byBpbml0aWFsaXplLCByZXR1cm5pbmcgLUVOT0RFViBkdXJpbmcgYm9vdC4gVGhpcyBpcyBhIGNyaXRpY2FsIHBvaW50LlxuKiAgICoqTm8gRGV2aWNlczoqKiBDb25zZXF1ZW50bHksIHNpbmNlIFZNQnVzIGlzIG5vdCBwcmVzZW50LCBubyBgaHZfZGV2aWNlYCBpcyBwcm9iZWQsIHdoaWNoIG1lYW5zIG5vIGBuZXR2c2NfcHJvYmVgIGNhbGwsIG5vIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucywgYW5kIGNlcnRhaW5seSBubyB0ZWFyZG93biBmdW5jdGlvbnMgbGlrZSBgbmV0dnNjX3RlYXJkb3duXypfZ3BhZGxgLiBUaGlzIG1lYW5zIHRoZSBgdm1idXNfbGVha19idWZmZXJgIGZ1bmN0aW9uLCBhc3NvY2lhdGVkIHdpdGggdGhlIE1TIEh5cGVyLVYgbmV0d29yayBkcml2ZXIsIHJlbWFpbnMgdW5yZWFjaGFibGUuXG5cblNvIHRoZSBtYWluIHF1ZXN0aW9uIGlzLCBjYW4gd2Ugc29tZWhvdyAqc2ltdWxhdGUqIHRoaXM/IENhbiB3ZSBjcmVhdGUgYHZtYnVzYCBkZXZpY2VzIHRocm91Z2ggc29tZSB2aXJ0dWFsIGJ1cyBvciB1c2Vyc3BhY2UgaW50ZXJmYWNlPyBDYW4gd2UgcmVnaXN0ZXIgb3IgbW9jayB0aGVzZSBkZXZpY2VzIHRocm91Z2ggc3lzZnMsIG5ldGxpbmssIHVzYiwgbG9vcGJhY2ssIG9yIHNvbWUgb3RoZXIgaW50ZXJmYWNlPyBJdCdzIHRpbWUgdG8gZXhhbWluZSB0aGUgY29kZWJhc2UgZm9yIGFueSB3YXkgdG8gZG8gdGhpcy4gQSBgZ3JlcGAgZm9yIGB2bWJ1c19kcml2ZXJfcmVnaXN0ZXJgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyB3aWxsIGJlIHRoZSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTg4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUxOjMyLjY5NDA3NTAwNloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA1MDYwNDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYnVzX2RyaXZlcl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0vaHlwZXJ2L2h5cGVydl9kcm1fZHJ2LmM9MjQzPXN0YXRpYyBpbnQgX19pbml0IGh2X2RybV9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaHlwZXJ2L2h5cGVydl9kcm1fZHJ2LmMtMjUzLVxcbmRyaXZlcnMvZ3B1L2RybS9oeXBlcnYvaHlwZXJ2X2RybV9kcnYuYzoyNTQ6XFx0cmV0ID0gdm1idXNfZHJpdmVyX3JlZ2lzdGVyKFxcdTAwMjZodl9kcm1faHZfZHJpdmVyKTtcXG5kcml2ZXJzL2dwdS9kcm0vaHlwZXJ2L2h5cGVydl9kcm1fZHJ2LmMtMjU1LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtaHlwZXJ2LmM9NjIyPXN0YXRpYyBpbnQgX19pbml0IG1vdXNldnNjX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1oeXBlcnYuYy02MjktXFxuZHJpdmVycy9oaWQvaGlkLWh5cGVydi5jOjYzMDpcXHRyZXQgPSB2bWJ1c19kcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNm1vdXNldnNjX2Rydik7XFxuZHJpdmVycy9oaWQvaGlkLWh5cGVydi5jLTYzMS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9odi9odl9iYWxsb29uLmM9MjEyND1zdGF0aWMgaW50IF9faW5pdCBpbml0X2JhbGxvb25fZHJ2KHZvaWQpXFxuZHJpdmVycy9odi9odl9iYWxsb29uLmMtMjEyNS17XFxuZHJpdmVycy9odi9odl9iYWxsb29uLmM6MjEyNjpcXHRyZXR1cm4gdm1idXNfZHJpdmVyX3JlZ2lzdGVyKFxcdTAwMjZiYWxsb29uX2Rydik7XFxuZHJpdmVycy9odi9odl9iYWxsb29uLmMtMjEyNy19XFxuLS1cXG5kcml2ZXJzL2h2L2h2X3V0aWwuYz03OTc9c3RhdGljIGludCBfX2luaXQgaW5pdF9oeXBlcnZfdXRpbHModm9pZClcXG4tLVxcbmRyaXZlcnMvaHYvaHZfdXRpbC5jLTgwMC1cXG5kcml2ZXJzL2h2L2h2X3V0aWwuYzo4MDE6XFx0cmV0dXJuIHZtYnVzX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2dXRpbF9kcnYpO1xcbmRyaXZlcnMvaHYvaHZfdXRpbC5jLTgwMi19XFxuLS1cXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jPTE0Njk9c3RhdGljIGludCB2bWJ1c19idXNfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0xNTQ2LS8qKlxcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmM6MTU0NzogKiBfX3ZtYnVzX2RyaXZlcl9yZWdpc3RlcigpIC0gUmVnaXN0ZXIgYSB2bWJ1cydzIGRyaXZlclxcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmMtMTU0OC0gKiBAaHZfZHJpdmVyOiBQb2ludGVyIHRvIGRyaXZlciBzdHJ1Y3R1cmUgeW91IHdhbnQgdG8gcmVnaXN0ZXJcXG4tLVxcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmMtMTU1Ni0gKi9cXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jOjE1NTc6aW50IF9fdm1idXNfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBodl9kcml2ZXIgKmh2X2RyaXZlciwgc3RydWN0IG1vZHVsZSAqb3duZXIsIGNvbnN0IGNoYXIgKm1vZF9uYW1lKVxcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmMtMTU1OC17XFxuLS1cXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jLTE1NzctfVxcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmM6MTU3ODpFWFBPUlRfU1lNQk9MX0dQTChfX3ZtYnVzX2RyaXZlcl9yZWdpc3Rlcik7XFxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0xNTc5LVxcbi0tXFxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0xNTg1LSAqIFVuLXJlZ2lzdGVyIHRoZSBnaXZlbiBkcml2ZXIgdGhhdCB3YXMgcHJldmlvdXMgcmVnaXN0ZXJlZCB3aXRoIGEgY2FsbCB0b1xcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmM6MTU4NjogKiB2bWJ1c19kcml2ZXJfcmVnaXN0ZXIoKVxcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmMtMTU4Ny0gKi9cXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vaHlwZXJ2LWtleWJvYXJkLmM9NDI0PXN0YXRpYyBpbnQgX19pbml0IGh2X2tiZF9pbml0KHZvaWQpXFxuZHJpdmVycy9pbnB1dC9zZXJpby9oeXBlcnYta2V5Ym9hcmQuYy00MjUte1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vaHlwZXJ2LWtleWJvYXJkLmM6NDI2OlxcdHJldHVybiB2bWJ1c19kcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNmh2X2tiZF9kcnYpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vaHlwZXJ2LWtleWJvYXJkLmMtNDI3LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmM9MjQ4Nj1zdGF0aWMgaW50IG5ldHZzY19wcm9iZShzdHJ1Y3QgaHZfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2Rydi5jLTI2MDUtXFx0ICogaXMgY29tcGxldGUuIFRoaXMgaXMgYmVjYXVzZSByZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoKSBnZXRzXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYzoyNjA2OlxcdCAqIHJlZ2lzdGVyZWQgYmVmb3JlIHZtYnVzX2RyaXZlcl9yZWdpc3RlcigpIHNvIHRoYXQgY2FsbGJhY2sgZnVuY1xcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmMtMjYwNy1cXHQgKiBpcyBzZXQgYmVmb3JlIHByb2JlIGFuZCB3ZSBkb24ndCBtaXNzIGV2ZW50cyBsaWtlIE5FVERFVl9QT1NUX0lOSVRcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmM9Mjg3Mz1zdGF0aWMgaW50IF9faW5pdCBuZXR2c2NfZHJ2X2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmMtMjg4OS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2Rydi5jOjI4OTA6XFx0cmV0ID0gdm1idXNfZHJpdmVyX3JlZ2lzdGVyKFxcdTAwMjZuZXR2c2NfZHJ2KTtcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2Rydi5jLTI4OTEtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jPTQxNjk9c3RhdGljIGludCBfX2luaXQgaW5pdF9odl9wY2lfZHJ2KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy00MTg3LVxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jOjQxODg6XFx0cmV0dXJuIHZtYnVzX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2aHZfcGNpX2Rydik7XFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtNDE4OS19XFxuLS1cXG5kcml2ZXJzL3Njc2kvc3RvcnZzY19kcnYuYz0yMjExPXN0YXRpYyBpbnQgX19pbml0IHN0b3J2c2NfZHJ2X2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvc2NzaS9zdG9ydnNjX2Rydi5jLTIyMzUtXFxuZHJpdmVycy9zY3NpL3N0b3J2c2NfZHJ2LmM6MjIzNjpcXHRyZXQgPSB2bWJ1c19kcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNnN0b3J2c2NfZHJ2KTtcXG5kcml2ZXJzL3Njc2kvc3RvcnZzY19kcnYuYy0yMjM3LVxcbi0tXFxuZHJpdmVycy91aW8vdWlvX2h2X2dlbmVyaWMuYz00MTM9aHlwZXJ2X21vZHVsZV9pbml0KHZvaWQpXFxuZHJpdmVycy91aW8vdWlvX2h2X2dlbmVyaWMuYy00MTQte1xcbmRyaXZlcnMvdWlvL3Vpb19odl9nZW5lcmljLmM6NDE1OlxcdHJldHVybiB2bWJ1c19kcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNmh2X3Vpb19kcnYpO1xcbmRyaXZlcnMvdWlvL3Vpb19odl9nZW5lcmljLmMtNDE2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTE6MzMuMzk5MTQ2MzE1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzNjYxMzg1NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgSHlwZXItViBEcml2ZXIgQ29kZSBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb2RlIGNoYW5nZSBpdHNlbGYuIEl0IGxvb2tzIGxpa2UgYSBuZXcgZnVuY3Rpb24sIGB2bWJ1c19sZWFrX2J1ZmZlcigpYCwgaGFzIGJlZW4gaW50cm9kdWNlZCBpbiBgZHJpdmVycy9odi9jaGFubmVsLmNgLiBUaGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0IGlzIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQ6IGBuZXR2c2NfdGVhcmRvd25fcmVjdl9ncGFkbGAgYW5kIGBuZXR2c2NfdGVhcmRvd25fc2VuZF9ncGFkbGAgaW4gYGRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuY2Agbm93IGNhbGwgYHZtYnVzX2xlYWtfYnVmZmVyYCBpZiB0aGUgYHZtYnVzX3RlYXJkb3duX2dwYWRsYCBmdW5jdGlvbiBmYWlscy4gVGhpcyBpbXBsaWVzIGEgcG90ZW50aWFsIHJlc291cmNlIGxlYWsgaGFuZGxpbmcgcGF0aCBkdXJpbmcgR1BBREwgKEd1ZXN0IFBoeXNpY2FsIEFkZHJlc3MgRGVzY3JpcHRvciBMaXN0KSB0ZWFyZG93biwgbGlrZWx5IHJlbGF0ZWQgdG8gVk1CdXMgY2hhbm5lbCB0ZWFyZG93biBmYWlsdXJlcy5cblxuTm93LCBsZXQncyBhcHBseSB0aGUgZnV6emluZyByZWFjaGFiaWxpdHkgZ3VpZGVsaW5lcy4gVGhlIGtleSBwaHJhc2UgaGVyZSBpcyBcInN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIiBUaGVzZSBndWlkZWxpbmVzIGV4cGxpY2l0bHkgc3RhdGUgdGhhdCBjb2RlIHJlcXVpcmluZyBzcGVjaWZpYyBoYXJkd2FyZSBvciBoeXBlcnZpc29yIGVudmlyb25tZW50cyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgZnV6emluZyBzZXR1cHMgKGxpa2UgUUVNVS9LVk0gb3IgR0NFKSBzaG91bGRuJ3QgYmUgZnV6emVkLiBBbmQgdGhpcyBpcyBleGFjdGx5IHRoZSBwcm9ibGVtISBUaGUgY29kZSBpbiBxdWVzdGlvbiBpcyB3aXRoaW4gSHlwZXItViBndWVzdCBkcml2ZXJzLiBTcGVjaWZpY2FsbHkgYGh2X3ZtYnVzYCBhbmQgYGh2X25ldHZzY2AuIFRvIGV2ZW4gKnJlYWNoKiB0aGlzIGNvZGUsIEknZCBuZWVkIHRvIGJlIHJ1bm5pbmcgaW5zaWRlIGEgTWljcm9zb2Z0IEh5cGVyLVYgZ3Vlc3QgVk0gd2l0aCB0aGUgTWljcm9zb2Z0IEh5cGVyLVYgaHlwZXJ2aXNvciwgb3IgYW4gQXp1cmUgVk0uIFN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBwYXJ0aWN1bGFybHkgc3l6a2FsbGVyJ3MgcHJlZmVycmVkIFFFTVUvS1ZNIGFuZCBHQ0Ugc2V0dXBzLCAqZG8gbm90KiBwcmVzZW50IHRoaXMgaHlwZXJ2aXNvciBpbnRlcmZhY2UuIFRoZSBgaHZfaXNfaHlwZXJ2X2luaXRpYWxpemVkKClgIGNoZWNrIHdpbGwgZmFpbCwgdGhlIFZNQnVzIHdpbGwgZmFpbCB0byBpbml0aWFsaXplLCBhbmQgdGhlIHJlbGV2YW50IFZNQnVzIGRldmljZXMgd2lsbCBub3QgZXZlbiBiZSBwcmVzZW50LCBtZWFuaW5nIHRoYXQgdGhlIGNvZGUgd29uJ3QgZXZlciBiZSByZWFjaGVkIGR1cmluZyBmdXp6aW5nLlxuXG5UaGVyZWZvcmUsIHRoZSBjb25jbHVzaW9uIGlzIGNsZWFyLiBUaGlzIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIHdpdGhpbiB0aGUgaW50ZW5kZWQgZnV6emluZyBlbnZpcm9ubWVudC5cblxuU28sIGZvciB0aGUgcmVjb3JkOlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IGZhbHNlXG4qICAgYEZvY3VzU3ltYm9sc2A6IFxcWyBdIChlbXB0eSlcbiogICBgRW5hYmxlQ29uZmlnc2A6IFxcWyBdIChlbXB0eSlcbiogICBgUmVhc29uaW5nYDogVGhlIG1vZGlmaWVkIGNvZGUgcmVzaWRlcyB3aXRoaW4gdGhlIE1pY3Jvc29mdCBIeXBlci1WIFZNQnVzIGFuZCBIeXBlci1WIG5ldHZzYyBkcml2ZXJzIChgZHJpdmVycy9odi9jaGFubmVsLmNgIGFuZCBgZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jYCkuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBleGVjdXRpb24gYXMgYSBndWVzdCBWTSBvbiB0aGUgTWljcm9zb2Z0IEh5cGVyLVYgaHlwZXJ2aXNvci4gVGhleSBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIG9yIHJlYWNoZWQgaW4gc3RhbmRhcmQgUUVNVS9LVk0gb3IgR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLlxuXG5JJ2xsIGNoZWNrIHRoZSB0b29sIHBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2AgdG8gbWFrZSBzdXJlIHRoaXMgaXMgcmVjb3JkZWQgcHJvcGVybHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDYzLCJPdXRwdXRUb2tlbnMiOjEyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1MTozOS43NjUyODc5MTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBNaWNyb3NvZnQgSHlwZXItViBndWVzdCBkcml2ZXJzIChWTUJ1cyBidWZmZXIgaGFuZGxpbmcgaW4gZHJpdmVycy9odi9jaGFubmVsLmMgYW5kIG5ldHZzYyBHUEFETCB0ZWFyZG93biBlcnJvciBoYW5kbGluZyBpbiBkcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcnVubmluZyBhcyBhIGd1ZXN0IHVuZGVyIHRoZSBNaWNyb3NvZnQgSHlwZXItViBoeXBlcnZpc29yIGFuZCBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgb3IgcHJvYmVkIGluIHN0YW5kYXJkIFFFTVUvS1ZNIG9yIEdDRSBzeXprYWxsZXIgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBNaWNyb3NvZnQgSHlwZXItViBndWVzdCBkcml2ZXJzIChWTUJ1cyBidWZmZXIgaGFuZGxpbmcgaW4gZHJpdmVycy9odi9jaGFubmVsLmMgYW5kIG5ldHZzYyBHUEFETCB0ZWFyZG93biBlcnJvciBoYW5kbGluZyBpbiBkcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcnVubmluZyBhcyBhIGd1ZXN0IHVuZGVyIHRoZSBNaWNyb3NvZnQgSHlwZXItViBoeXBlcnZpc29yIGFuZCBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgb3IgcHJvYmVkIGluIHN0YW5kYXJkIFFFTVUvS1ZNIG9yIEdDRSBzeXprYWxsZXIgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1MTozOS43NjUzMTIzNzFaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvcl88[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 00:49:12 +0000 UTC FinishedAt: 2026-09-05 00:51:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgTWljcm9zb2Z0IEh5cGVyLVYgZ3Vlc3QgZHJpdmVycyAoVk1CdXMgYnVmZmVyIGhhbmRsaW5nIGluIGRyaXZlcnMvaHYvY2hhbm5lbC5jIGFuZCBuZXR2c2MgR1BBREwgdGVhcmRvd24gZXJyb3IgaGFuZGxpbmcgaW4gZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHJ1bm5pbmcgYXMgYSBndWVzdCB1bmRlciB0aGUgTWljcm9zb2Z0IEh5cGVyLVYgaHlwZXJ2aXNvciBhbmQgY2Fubm90IGJlIGluaXRpYWxpemVkIG9yIHByb2JlZCBpbiBzdGFuZGFyZCBRRU1VL0tWTSBvciBHQ0Ugc3l6a2FsbGVyIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNhMTZjOThmMWRkNGVhNjMxOWIyZWY1YTZiNzM4NGVhOThiMmQyYzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDAwOjUwOjM4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHYvY2hhbm5lbC5jIGIvZHJpdmVycy9odi9jaGFubmVsLmNcbmluZGV4IGY0MzcwNjE3ZGVhY2IuLmQ1ZDIwZTMyMjgzMTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2h2L2NoYW5uZWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9odi9jaGFubmVsLmNcbkBAIC02NDgsNiAmIzQzOzY0OCwzMiBAQCB2b2lkIHZtYnVzX2ZyZWVfYnVmZmVyKHZvaWQgKmFkZHIsIHN0cnVjdCBwYWdlICoqY2h1bmtzLCB1MzIgY2h1bmtfY250KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2bWJ1c19mcmVlX2J1ZmZlcik7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB2bWJ1c19sZWFrX2J1ZmZlciAtIHNldCB1cCBhIGJ1ZmZlciB0byBiZSBsZWFrZWQgYnkgdm1idXNfZnJlZV9idWZmZXIoKS5cbiYjNDM7ICpcbiYjNDM7ICogQGFkZHI6IGJ1ZmZlciBhZGRyZXNzXG4mIzQzOyAqIEBjaHVua3M6IGNodW5rcyBhcnJheSBmcm9tIHZtYnVzX2FsbG9jX2J1ZmZlcigpXG4mIzQzOyAqIEBjaHVua19jbnQ6IG51bWJlciBvZiBlbnRyaWVzIGluIEBjaHVua3NcbiYjNDM7ICpcbiYjNDM7ICogV2hlbiBAY2h1bmtzIGlzIE5VTEwgdGhlIGJ1ZmZlciBpcyBhIHBsYWluIHZ6YWxsb2MoKSBhbGxvY2F0aW9uIGFuZFxuJiM0MzsgKiB0aGUgYnVmZmVyIGlzIGxlYWtlZCBieSBzZXR0aW5nIEBhZGRyIHRvIE5VTEwuIE90aGVyd2lzZSBzZXRcbiYjNDM7ICogQGNodW5rX2NudCB0byAwIHNvIHRoYXQgdm1idXNfZnJlZV9idWZmZXIoKSBkb2VzIG5vdCB0cnkgdG8gcmUtZW5jcnlwdFxuJiM0MzsgKiBvciBmcmVlIHRoZSBidWZmZXIgbWVtb3J5LCBidXQgc3RpbGwgcmVsZWFzZXMgdGhlIHZtYXAgYWRkcmVzcyBhbmRcbiYjNDM7ICogdGhlIGNodW5rcyBtZW1vcnkuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBpbiBhIGNvbnRleHQgd2hlcmUgdGhlIGJ1ZmZlciBpcyBzdGlsbFxuJiM0MzsgKiBiZWluZyBhY2Nlc3NlZC4gSXQgbXVzdCBub3QgcmVtb3ZlIGFueSBrZXJuZWwgdmlydHVhbCBhZGRyZXNzZXMgb2ZcbiYjNDM7ICogdGhlIGJ1ZmZlciBvciBjaGFuZ2UgaXRzIGVuY3J5cHRpb24gc3RhdHVzLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCB2bWJ1c19sZWFrX2J1ZmZlcih2b2lkICoqYWRkciwgc3RydWN0IHBhZ2UgKioqY2h1bmtzLCB1MzIgKmNodW5rX2NudClcbiYjNDM7e1xuJiM0MztcdGlmICgqY2h1bmtzKVxuJiM0MztcdFx0KmNodW5rX2NudCA9IDA7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0KmFkZHIgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2xlYWtfYnVmZmVyKTtcbiYjNDM7XG4gLyoqXG4gICogdm1idXNfYWxsb2NfYnVmZmVyIC0gYWxsb2NhdGUgYSBob3N0LXZpc2libGUsIHZpcnR1YWxseS1jb250aWd1b3VzIGJ1ZmZlci5cbiAgKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYyBiL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuY1xuaW5kZXggZmM2NTQ4YjE2YzkxZS4uNWM5NWQ3ZDI0MTYzMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jXG5AQCAtMzE2LDYgJiM0MzszMTYsOSBAQCBzdGF0aWMgdm9pZCBuZXR2c2NfdGVhcmRvd25fcmVjdl9ncGFkbChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4gXHRcdCAqIHJhdGhlciB0aGFuIGNvbnRpbnVlIGFuZCBhIGJ1Z2Noa1xuIFx0XHQgKi9cbiBcdFx0aWYgKHJldCAhPSAwKSB7XG4mIzQzO1x0XHRcdHZtYnVzX2xlYWtfYnVmZmVyKFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWYsXG4mIzQzO1x0XHRcdFx0XHQgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWZfY2h1bmtzLFxuJiM0MztcdFx0XHRcdFx0ICBcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXJlY3ZfYnVmX2NodW5rX2NudCk7XG4gXHRcdFx0bmV0ZGV2X2VycihuZGV2LFxuIFx0XHRcdFx0ICAgXCYjMzQ7dW5hYmxlIHRvIHRlYXJkb3duIHJlY2VpdmUgYnVmZmVyJiMzOTtzIGdwYWRsXFxuXCYjMzQ7KTtcbiBcdFx0XHRyZXR1cm47XG5AQCAtMzM3LDYgJiM0MzszNDAsOSBAQCBzdGF0aWMgdm9pZCBuZXR2c2NfdGVhcmRvd25fc2VuZF9ncGFkbChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4gXHRcdCAqIHJhdGhlciB0aGFuIGNvbnRpbnVlIGFuZCBhIGJ1Z2Noa1xuIFx0XHQgKi9cbiBcdFx0aWYgKHJldCAhPSAwKSB7XG4mIzQzO1x0XHRcdHZtYnVzX2xlYWtfYnVmZmVyKFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWYsXG4mIzQzO1x0XHRcdFx0XHQgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWZfY2h1bmtzLFxuJiM0MztcdFx0XHRcdFx0ICBcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmX2NodW5rX2NudCk7XG4gXHRcdFx0bmV0ZGV2X2VycihuZGV2LFxuIFx0XHRcdFx0ICAgXCYjMzQ7dW5hYmxlIHRvIHRlYXJkb3duIHNlbmQgYnVmZmVyJiMzOTtzIGdwYWRsXFxuXCYjMzQ7KTtcbiBcdFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oeXBlcnYuaCBiL2luY2x1ZGUvbGludXgvaHlwZXJ2LmhcbmluZGV4IDllMTA5ZDkxYWExNDMuLjZmNjBjZTU5MjRiYWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h5cGVydi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h5cGVydi5oXG5AQCAtMTIyMCw2ICYjNDM7MTIyMCwxMCBAQCBleHRlcm4gdm9pZCAqdm1idXNfYWxsb2NfYnVmZmVyKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLFxuIFxuIGV4dGVybiB2b2lkIHZtYnVzX2ZyZWVfYnVmZmVyKHZvaWQgKmFkZHIsIHN0cnVjdCBwYWdlICoqY2h1bmtzLCB1MzIgY2h1bmtfY250KTtcbiBcbiYjNDM7ZXh0ZXJuIHZvaWQgdm1idXNfbGVha19idWZmZXIodm9pZCAqKmFkZHIsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBwYWdlICoqKmNodW5rcyxcbiYjNDM7XHRcdFx0ICAgICAgdTMyICpjaHVua19jbnQpO1xuJiM0MztcbiB2b2lkIHZtYnVzX3Jlc2V0X2NoYW5uZWxfY2Ioc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwpO1xuIFxuIGV4dGVybiBpbnQgdm1idXNfcmVjdnBhY2tldChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBNaWNyb3NvZnQgSHlwZXItViBndWVzdCBkcml2ZXJzIChWTUJ1cyBidWZmZXIgaGFuZGxpbmcgaW4gZHJpdmVycy9odi9jaGFubmVsLmMgYW5kIG5ldHZzYyBHUEFETCB0ZWFyZG93biBlcnJvciBoYW5kbGluZyBpbiBkcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcnVubmluZyBhcyBhIGd1ZXN0IHVuZGVyIHRoZSBNaWNyb3NvZnQgSHlwZXItViBoeXBlcnZpc29yIGFuZCBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgb3IgcHJvYmVkIGluIHN0YW5kYXJkIFFFTVUvS1ZNIG9yIEdDRSBzeXprYWxsZXIgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2ExNmM5OGYxZGQ0ZWE2MzE5YjJlZjVhNmI3Mzg0ZWE5OGIyZDJjMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMDA6NTA6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h2L2NoYW5uZWwuYyBiL2RyaXZlcnMvaHYvY2hhbm5lbC5jCmluZGV4IGY0MzcwNjE3ZGVhY2IuLmQ1ZDIwZTMyMjgzMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHYvY2hhbm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaHYvY2hhbm5lbC5jCkBAIC02NDgsNiAmIzQzOzY0OCwzMiBAQCB2b2lkIHZtYnVzX2ZyZWVfYnVmZmVyKHZvaWQgKmFkZHIsIHN0cnVjdCBwYWdlICoqY2h1bmtzLCB1MzIgY2h1bmtfY250KQogfQogRVhQT1JUX1NZTUJPTF9HUEwodm1idXNfZnJlZV9idWZmZXIpOwogCiYjNDM7LyoqCiYjNDM7ICogdm1idXNfbGVha19idWZmZXIgLSBzZXQgdXAgYSBidWZmZXIgdG8gYmUgbGVha2VkIGJ5IHZtYnVzX2ZyZWVfYnVmZmVyKCkuCiYjNDM7ICoKJiM0MzsgKiBAYWRkcjogYnVmZmVyIGFkZHJlc3MKJiM0MzsgKiBAY2h1bmtzOiBjaHVua3MgYXJyYXkgZnJvbSB2bWJ1c19hbGxvY19idWZmZXIoKQomIzQzOyAqIEBjaHVua19jbnQ6IG51bWJlciBvZiBlbnRyaWVzIGluIEBjaHVua3MKJiM0MzsgKgomIzQzOyAqIFdoZW4gQGNodW5rcyBpcyBOVUxMIHRoZSBidWZmZXIgaXMgYSBwbGFpbiB2emFsbG9jKCkgYWxsb2NhdGlvbiBhbmQKJiM0MzsgKiB0aGUgYnVmZmVyIGlzIGxlYWtlZCBieSBzZXR0aW5nIEBhZGRyIHRvIE5VTEwuIE90aGVyd2lzZSBzZXQKJiM0MzsgKiBAY2h1bmtfY250IHRvIDAgc28gdGhhdCB2bWJ1c19mcmVlX2J1ZmZlcigpIGRvZXMgbm90IHRyeSB0byByZS1lbmNyeXB0CiYjNDM7ICogb3IgZnJlZSB0aGUgYnVmZmVyIG1lbW9yeSwgYnV0IHN0aWxsIHJlbGVhc2VzIHRoZSB2bWFwIGFkZHJlc3MgYW5kCiYjNDM7ICogdGhlIGNodW5rcyBtZW1vcnkuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgaW4gYSBjb250ZXh0IHdoZXJlIHRoZSBidWZmZXIgaXMgc3RpbGwKJiM0MzsgKiBiZWluZyBhY2Nlc3NlZC4gSXQgbXVzdCBub3QgcmVtb3ZlIGFueSBrZXJuZWwgdmlydHVhbCBhZGRyZXNzZXMgb2YKJiM0MzsgKiB0aGUgYnVmZmVyIG9yIGNoYW5nZSBpdHMgZW5jcnlwdGlvbiBzdGF0dXMuCiYjNDM7ICovCiYjNDM7dm9pZCB2bWJ1c19sZWFrX2J1ZmZlcih2b2lkICoqYWRkciwgc3RydWN0IHBhZ2UgKioqY2h1bmtzLCB1MzIgKmNodW5rX2NudCkKJiM0Mzt7CiYjNDM7CWlmICgqY2h1bmtzKQomIzQzOwkJKmNodW5rX2NudCA9IDA7CiYjNDM7CWVsc2UKJiM0MzsJCSphZGRyID0gTlVMTDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwodm1idXNfbGVha19idWZmZXIpOwomIzQzOwogLyoqCiAgKiB2bWJ1c19hbGxvY19idWZmZXIgLSBhbGxvY2F0ZSBhIGhvc3QtdmlzaWJsZSwgdmlydHVhbGx5LWNvbnRpZ3VvdXMgYnVmZmVyLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYyBiL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYwppbmRleCBmYzY1NDhiMTZjOTFlLi41Yzk1ZDdkMjQxNjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jCkBAIC0zMTYsNiAmIzQzOzMxNiw5IEBAIHN0YXRpYyB2b2lkIG5ldHZzY190ZWFyZG93bl9yZWN2X2dwYWRsKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSwKIAkJICogcmF0aGVyIHRoYW4gY29udGludWUgYW5kIGEgYnVnY2hrCiAJCSAqLwogCQlpZiAocmV0ICE9IDApIHsKJiM0MzsJCQl2bWJ1c19sZWFrX2J1ZmZlcigmYW1wO25ldF9kZXZpY2UtJmd0O3JlY3ZfYnVmLAomIzQzOwkJCQkJICAmYW1wO25ldF9kZXZpY2UtJmd0O3JlY3ZfYnVmX2NodW5rcywKJiM0MzsJCQkJCSAgJmFtcDtuZXRfZGV2aWNlLSZndDtyZWN2X2J1Zl9jaHVua19jbnQpOwogCQkJbmV0ZGV2X2VycihuZGV2LAogCQkJCSAgICYjMzQ7dW5hYmxlIHRvIHRlYXJkb3duIHJlY2VpdmUgYnVmZmVyJiMzOTtzIGdwYWRsXG4mIzM0Oyk7CiAJCQlyZXR1cm47CkBAIC0zMzcsNiAmIzQzOzM0MCw5IEBAIHN0YXRpYyB2b2lkIG5ldHZzY190ZWFyZG93bl9zZW5kX2dwYWRsKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSwKIAkJICogcmF0aGVyIHRoYW4gY29udGludWUgYW5kIGEgYnVnY2hrCiAJCSAqLwogCQlpZiAocmV0ICE9IDApIHsKJiM0MzsJCQl2bWJ1c19sZWFrX2J1ZmZlcigmYW1wO25ldF9kZXZpY2UtJmd0O3NlbmRfYnVmLAomIzQzOwkJCQkJICAmYW1wO25ldF9kZXZpY2UtJmd0O3NlbmRfYnVmX2NodW5rcywKJiM0MzsJCQkJCSAgJmFtcDtuZXRfZGV2aWNlLSZndDtzZW5kX2J1Zl9jaHVua19jbnQpOwogCQkJbmV0ZGV2X2VycihuZGV2LAogCQkJCSAgICYjMzQ7dW5hYmxlIHRvIHRlYXJkb3duIHNlbmQgYnVmZmVyJiMzOTtzIGdwYWRsXG4mIzM0Oyk7CiAJCQlyZXR1cm47CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h5cGVydi5oIGIvaW5jbHVkZS9saW51eC9oeXBlcnYuaAppbmRleCA5ZTEwOWQ5MWFhMTQzLi42ZjYwY2U1OTI0YmFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h5cGVydi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHlwZXJ2LmgKQEAgLTEyMjAsNiAmIzQzOzEyMjAsMTAgQEAgZXh0ZXJuIHZvaWQgKnZtYnVzX2FsbG9jX2J1ZmZlcihzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCwKIAogZXh0ZXJuIHZvaWQgdm1idXNfZnJlZV9idWZmZXIodm9pZCAqYWRkciwgc3RydWN0IHBhZ2UgKipjaHVua3MsIHUzMiBjaHVua19jbnQpOwogCiYjNDM7ZXh0ZXJuIHZvaWQgdm1idXNfbGVha19idWZmZXIodm9pZCAqKmFkZHIsCiYjNDM7CQkJICAgICAgc3RydWN0IHBhZ2UgKioqY2h1bmtzLAomIzQzOwkJCSAgICAgIHUzMiAqY2h1bmtfY250KTsKJiM0MzsKIHZvaWQgdm1idXNfcmVzZXRfY2hhbm5lbF9jYihzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCk7CiAKIGV4dGVybiBpbnQgdm1idXNfcmVjdnBhY2tldChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc0OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBIeXBlci1WIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBicmVhayBkb3duIHRoZSBjaGFuZ2VzOiB0aGUgbW9kaWZpZWQgZmlsZXMgYXJlIGBkcml2ZXJzL2h2L2NoYW5uZWwuY2AsIGBkcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmNgLCBhbmQgYGluY2x1ZGUvbGludXgvaHlwZXJ2LmhgLiBUaGUgY29yZSBhZGRpdGlvbiBzZWVtcyB0byBiZSBgdm1idXNfbGVha19idWZmZXJgLCBpbnRyb2R1Y2VkIGluIHRoZSB2bWJ1cyBkcml2ZXIsIGFuZCB0aGVuIGVtcGxveWVkIHdpdGhpbiB0aGUgYG5ldHZzY190ZWFyZG93bl9yZWN2X2dwYWRsYCBhbmQgYG5ldHZzY190ZWFyZG93bl9zZW5kX2dwYWRsYCBmdW5jdGlvbnMgaW4gdGhlIG5ldHZzYyBkcml2ZXIuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMsIHNwZWNpZmljYWxseSBhcm91bmQgSHlwZXItViBhbmQgdGhlIHZtYnVzLiBJJiMzOTttIHRoaW5raW5nOiBpcyB0aGlzIHN1c2NlcHRpYmxlIHRvIGZ1enppbmcgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudCwgbGlrZSBRRU1VIG9yIEdDRSB3aXRoIHN5emthbGxlcj8gVGhlIGNydWNpYWwgcXVlc3Rpb24gaGVyZSBpcyByZWFjaGFiaWxpdHkuIENhbiB3ZSBhY3R1YWxseSB0cmlnZ2VyIHRoZXNlIGNoYW5nZXMgYW5kIGZ1enogSHlwZXItViBkcml2ZXJzIChWTUJVUy9IWVBFUlYvSFlQRVJWX05FVCkgdXNpbmcgZXhpc3Rpbmcgc2V0dXBzPyBJIG5lZWQgdG8gY2hlY2sgaWYgUUVNVSBwcm92aWRlcyBzdWZmaWNpZW50IEh5cGVyLVYgZW11bGF0aW9uIGZvciB0aGlzLiBEb2VzIFFFTVUgZXZlbiBoYXZlIHRoZSAmIzM0O2h2LXZtYnVzJiMzNDsgZW5saWdodGVubWVudCwgb3IgZG9lcyBzeXprYWxsZXIgc3BlY2lmaWNhbGx5IHRhcmdldCBIeXBlci1WIGRpcmVjdGx5PyBPciBpcyB0aGlzIGEgaHlwZXJ2aXNvci1zcGVjaWZpYyBidXMgdGhhdCBuZWNlc3NpdGF0ZXMgcnVubmluZyBvbiBhIE1pY3Jvc29mdCBBenVyZS9IeXBlci1WIGVudmlyb25tZW50PwoKQmVmb3JlIGRpdmluZyBkZWVwZXIgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIGNvbmZpcm06CgoxLiAgQ2FuIHdlIGFjY2VzcyBIeXBlci1WL1ZNQnVzIGluIGEgc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnQ/IEkgc2VlbSB0byByZWNhbGwgYSBgdm1idXMtYnJpZGdlYCBRRU1VIGRldmljZSwgYnV0IGlzIGl0IGVub3VnaD8KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoYXQgY3JpdGVyaWEgaXMgbWV0IGJ5IHRoZSBjb250ZXh0IG9mIFNFQ1RJT04gMiBhbmQgMy4KCkZpbmFsbHksIEkmIzM5O2xsIGxldmVyYWdlIG15IHVzdWFsIGNvZGUgYW5hbHlzaXMgdG9vbHMsIGxpa2VseSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAsIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzAwOlx0XHRcdH1cbiAzMDE6XHRcdFx0bmV0X2RldmljZS1cdTAwM2VzZW5kX3NlY3Rpb25fY250ID0gMDtcbiAzMDI6XHRcdH1cbiAzMDM6XHR9XG4gMzA0Olx0XG4gMzA1Olx0c3RhdGljIHZvaWQgbmV0dnNjX3RlYXJkb3duX3JlY3ZfZ3BhZGwoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxuIDMwNjpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXRfZGV2aWNlLFxuIDMwNzpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIDMwODpcdHtcbiAzMDk6XHRcdGludCByZXQ7XG4gMzEwOlx0XG4gMzExOlx0XHRpZiAobmV0X2RldmljZS1cdTAwM2VyZWN2X2J1Zl9ncGFkbF9oYW5kbGUuZ3BhZGxfaGFuZGxlKSB7XG4gMzEyOlx0XHRcdHJldCA9IHZtYnVzX3RlYXJkb3duX2dwYWRsKGRldmljZS1cdTAwM2VjaGFubmVsLFxuIDMxMzpcdFx0XHRcdFx0XHQgICBcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXJlY3ZfYnVmX2dwYWRsX2hhbmRsZSk7XG4gMzE0Olx0XG4gMzE1Olx0XHRcdC8qIElmIHdlIGZhaWxlZCBoZXJlLCB3ZSBtaWdodCBhcyB3ZWxsIHJldHVybiBhbmQgaGF2ZSBhIGxlYWtcbiAzMTY6XHRcdFx0ICogcmF0aGVyIHRoYW4gY29udGludWUgYW5kIGEgYnVnY2hrXG4gMzE3Olx0XHRcdCAqL1xuIDMxODpcdFx0XHRpZiAocmV0ICE9IDApIHtcbiAzMTk6XHRcdFx0XHR2bWJ1c19sZWFrX2J1ZmZlcihcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXJlY3ZfYnVmLFxuIDMyMDpcdFx0XHRcdFx0XHQgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWZfY2h1bmtzLFxuIDMyMTpcdFx0XHRcdFx0XHQgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWZfY2h1bmtfY250KTtcbiAzMjI6XHRcdFx0XHRuZXRkZXZfZXJyKG5kZXYsXG4gMzIzOlx0XHRcdFx0XHQgICBcJiMzNDt1bmFibGUgdG8gdGVhcmRvd24gcmVjZWl2ZSBidWZmZXImIzM5O3MgZ3BhZGxcXG5cJiMzNDspO1xuIDMyNDpcdFx0XHRcdHJldHVybjtcbiAzMjU6XHRcdFx0fVxuIDMyNjpcdFx0fVxuIDMyNzpcdH1cbiAzMjg6XHRcbiAzMjk6XHRzdGF0aWMgdm9pZCBuZXR2c2NfdGVhcmRvd25fc2VuZF9ncGFkbChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4gMzMwOlx0XHRcdFx0XHQgICAgICAgc3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldF9kZXZpY2UsXG4gMzMxOlx0XHRcdFx0XHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gMzMyOlx0e1xuIDMzMzpcdFx0aW50IHJldDtcbiAzMzQ6XHRcbiAzMzU6XHRcdGlmIChuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmX2dwYWRsX2hhbmRsZS5ncGFkbF9oYW5kbGUpIHtcbiAzMzY6XHRcdFx0cmV0ID0gdm1idXNfdGVhcmRvd25fZ3BhZGwoZGV2aWNlLVx1MDAzZWNoYW5uZWwsXG4gMzM3Olx0XHRcdFx0XHRcdCAgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWZfZ3BhZGxfaGFuZGxlKTtcbiAzMzg6XHRcbiAzMzk6XHRcdFx0LyogSWYgd2UgZmFpbGVkIGhlcmUsIHdlIG1pZ2h0IGFzIHdlbGwgcmV0dXJuIGFuZCBoYXZlIGEgbGVha1xuIDM0MDpcdFx0XHQgKiByYXRoZXIgdGhhbiBjb250aW51ZSBhbmQgYSBidWdjaGtcbiAzNDE6XHRcdFx0ICovXG4gMzQyOlx0XHRcdGlmIChyZXQgIT0gMCkge1xuIDM0MzpcdFx0XHRcdHZtYnVzX2xlYWtfYnVmZmVyKFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWYsXG4gMzQ0Olx0XHRcdFx0XHRcdCAgXHUwMDI2bmV0X2RldmljZS1cdTAwM2VzZW5kX2J1Zl9jaHVua3MsXG4gMzQ1Olx0XHRcdFx0XHRcdCAgXHUwMDI2bmV0X2RldmljZS1cdTAwM2VzZW5kX2J1Zl9jaHVua19jbnQpO1xuIDM0NjpcdFx0XHRcdG5ldGRldl9lcnIobmRldixcbiAzNDc6XHRcdFx0XHRcdCAgIFwmIzM0O3VuYWJsZSB0byB0ZWFyZG93biBzZW5kIGJ1ZmZlciYjMzk7cyBncGFkbFxcblwmIzM0Oyk7XG4gMzQ4Olx0XHRcdFx0cmV0dXJuO1xuIDM0OTpcdFx0XHR9XG4gMzUwOlx0XHR9XG4gMzUxOlx0fVxuIDM1MjpcdFxuIDM1MzpcdGludCBuZXR2c2NfYWxsb2NfcmVjdl9jb21wX3Jpbmcoc3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldF9kZXZpY2UsIHUzMiBxX2lkeClcbiAzNTQ6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQzNgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zOgoKKipJbnZlc3RpZ2F0aW5nIEdQQURMIFRlYXJkb3duIGluIE5ldHZzYyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIHRoZXNlIEdQQURMcyBpbiB0aGUgTmV0dnNjIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB0aGV5JiMzOTtyZSB0b3JuIGRvd24uICBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGNhbGxzIHRvIGBuZXR2c2NfdGVhcmRvd25fcmVjdl9ncGFkbGAgYW5kIGBuZXR2c2NfdGVhcmRvd25fc2VuZF9ncGFkbGAuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQg4oCTIHVuZGVyc3RhbmRpbmcgKndoZXJlKiB0aGVzZSB0ZWFyZG93biBmdW5jdGlvbnMgYXJlIGJlaW5nIGludm9rZWQgd2lsbCBwYWludCBhIHBpY3R1cmUgb2Ygd2hlbiwgYW5kIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcywgdGhlIEdQQURMcyBhcmUgY29uc2lkZXJlZCBubyBsb25nZXIgdmFsaWQgYW5kIG5lZWQgdG8gYmUgY2xlYW5lZCB1cC4gVGhpcyBpcyBhIHZlcnkgdGFyZ2V0ZWQgYXBwcm9hY2g7IEkmIzM5O20gbm90IGp1c3QgYnJvd3NpbmcgdGhlIGNvZGUgYWltbGVzc2x5LiBJJiMzOTttIGFmdGVyIHRoZSBkaXJlY3QgY2FsbCBzaXRlcy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byBpbmZlciB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhlIHRlYXJkb3duLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldHZzY190ZWFyZG93bl8ocmVjdnxzZW5kKV9ncGFkbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2h5cGVydi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jPTI1ND1zdGF0aWMgdm9pZCBuZXR2c2NfcmV2b2tlX3NlbmRfYnVmKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMzA0LVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjMwNTpzdGF0aWMgdm9pZCBuZXR2c2NfdGVhcmRvd25fcmVjdl9ncGFkbChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMzA2LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXRfZGV2aWNlLFxuLS1cbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0zMjgtXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6MzI5OnN0YXRpYyB2b2lkIG5ldHZzY190ZWFyZG93bl9zZW5kX2dwYWRsKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0zMzAtXHRcdFx0XHQgICAgICAgc3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldF9kZXZpY2UsXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jPTM2Nz1zdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTU4NS1cdG5ldHZzY19yZXZva2Vfc2VuZF9idWYoZGV2aWNlLCBuZXRfZGV2aWNlLCBuZGV2KTtcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzo1ODY6XHRuZXR2c2NfdGVhcmRvd25fcmVjdl9ncGFkbChkZXZpY2UsIG5ldF9kZXZpY2UsIG5kZXYpO1xuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjU4NzpcdG5ldHZzY190ZWFyZG93bl9zZW5kX2dwYWRsKGRldmljZSwgbmV0X2RldmljZSwgbmRldik7XG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtNTg4LVxuLS1cbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYz03MjY9dm9pZCBuZXR2c2NfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UpXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTc2My1cdC8qIE11c3QgZG8gdGhlIEdQQURMIHRlYXJkb3duIGFmdGVyIGNoYW5uZWwgaXMgY2xvc2VkICovXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6NzY0Olx0bmV0dnNjX3RlYXJkb3duX3JlY3ZfZ3BhZGwoZGV2aWNlLCBuZXRfZGV2aWNlLCBuZGV2KTtcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzo3NjU6XHRuZXR2c2NfdGVhcmRvd25fc2VuZF9ncGFkbChkZXZpY2UsIG5ldF9kZXZpY2UsIG5kZXYpO1xuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTc2Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjkzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IGtlcm5lbCBjb2RlIGJhc2VkIG9uIHRob3NlIGtleXdvcmRzOgoKKipEaXNzZWN0aW5nIHRoZSBWTUJ1cyBDaGFubmVsIE1lbW9yeSBNYW5hZ2VtZW50KioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBkcml2ZXJzL2h2L2NoYW5uZWwuY2AuIE15IGltbWVkaWF0ZSBpbnRlcmVzdCBpcyB0cmlnZ2VyZWQgYnkgdGhlIG1lbnRpb24gb2YgYHZtYnVzX2FsbG9jX2J1ZmZlcmAsIGB2bWJ1c19mcmVlX2J1ZmZlcmAsIGFuZCBgdm1idXNfbGVha19idWZmZXJgLiBNeSBzcGlkZXktc2Vuc2UgdGVsbHMgbWUgdGhlc2UgYXJlIGxpa2VseSB0aGUgY29yZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIG1lbW9yeSBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIGFuZCB3aGF0IGxvb2tzIGxpa2UgYSBwb3RlbnRpYWwgYnVmZmVyIGxlYWsgc2NlbmFyaW8sIHdpdGhpbiB0aGUgVk1CdXMgY2hhbm5lbCBoYW5kbGluZyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNoYW5uZWwgZHJpdmVyIGludGVyYWN0cyB3aXRoIG1lbW9yeSwgYW5kIHRoZXNlIHRocmVlIGZ1bmN0aW9ucyBhcmUgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIHdhbnQgdG8gdHJhY2UgdGhlIGxpZmV0aW1lIG9mIGEgYnVmZmVyIHdpdGhpbiB0aGlzIHN5c3RlbSwgdW5kZXJzdGFuZCBob3cgaXTigJlzIGFsbG9jYXRlZCwgdXNlZCwgYW5kLCBjcnVjaWFsbHksIGhvdyBpdHMgcmVzb3VyY2VzIGFyZSByZWxlYXNlZC4gVGhlIHByZXNlbmNlIG9mIGEgJiMzNDtsZWFrJiMzNDsgZnVuY3Rpb24gaXMgYSByZWQgZmxhZywgaGludGluZyBhdCBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IG9yIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlLCBzbyBteSBjdXJpb3NpdHkgaXMgcGlxdWVkLiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGF0IHdoZXJlIGB2bWJ1c19hbGxvY19idWZmZXJgIGlzIGNhbGxlZCwgd2hhdCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdG8gaXQsIGFuZCBob3cgdGhlIHJldHVybmVkIGJ1ZmZlciBpcyB1c2VkLiBUaGVuLCBJJiMzOTtsbCB0cmFjZSB0aHJvdWdoIHRoZSBjb3JyZXNwb25kaW5nIGNhbGxzIHRvIGB2bWJ1c19mcmVlX2J1ZmZlcmAgdG8gZW5zdXJlIHRoYXQgaXQmIzM5O3MgYmVpbmcgcGFpcmVkIGNvcnJlY3RseSB3aXRoIGFsbG9jYXRpb25zLiBGaW5hbGx5LCBJJiMzOTtsbCBhbmFseXplIGB2bWJ1c19sZWFrX2J1ZmZlcmAgYW5kIHNlZSB3aGF0IHRyaWdnZXJzIGl0cyBleGVjdXRpb24gYW5kIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBuYXR1cmUgb2YgdGhlIGxlYWsgYW5kIGl0cyBwb3RlbnRpYWwgaW1wYWN0LiBJdOKAmXMgYWxzbyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBtZW1vcnkgbW9kZWwgdGhhdCB1bmRlcnBpbnMgdGhlc2UgZnVuY3Rpb25zOyBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGEgcHJpdmF0ZSBoZWFwIG1hbmFnZWQgYnkgdGhlIFZNQnVzIGRyaXZlciwgYW5kIEkgbmVlZCB0byBhc3Nlc3MgaXRzIHRocmVhZCBzYWZldHkgYW5kIHBvdGVudGlhbCBmb3IgY29uY3VycmVuY3kgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9odi9jaGFubmVsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYzMDpcdFx0aWYgKCFjaHVua3MpIHtcbiA2MzE6XHRcdFx0dmZyZWUoYWRkcik7XG4gNjMyOlx0XHRcdHJldHVybjtcbiA2MzM6XHRcdH1cbiA2MzQ6XHRcbiA2MzU6XHRcdHZ1bm1hcChhZGRyKTtcbiA2MzY6XHRcbiA2Mzc6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNodW5rX2NudDsgaSYjNDM7JiM0MzspIHtcbiA2Mzg6XHRcdFx0dW5zaWduZWQgbG9uZyB2YWRkciA9XG4gNjM5Olx0XHRcdFx0KHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKGNodW5rc1tpXSk7XG4gNjQwOlx0XHRcdHVuc2lnbmVkIGludCBvcmRlciA9IGZvbGlvX29yZGVyKHBhZ2VfZm9saW8oY2h1bmtzW2ldKSk7XG4gNjQxOlx0XG4gNjQyOlx0XHRcdGlmIChzZXRfbWVtb3J5X2VuY3J5cHRlZCh2YWRkciwgMVUgXHUwMDNjXHUwMDNjIG9yZGVyKSlcbiA2NDM6XHRcdFx0XHRjb250aW51ZTtcbiA2NDQ6XHRcdFx0X19mcmVlX3BhZ2VzKGNodW5rc1tpXSwgb3JkZXIpO1xuIDY0NTpcdFx0fVxuIDY0NjpcdFxuIDY0NzpcdFx0a3ZmcmVlKGNodW5rcyk7XG4gNjQ4Olx0fVxuIDY0OTpcdEVYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2ZyZWVfYnVmZmVyKTtcbiA2NTA6XHRcbiA2NTE6XHQvKipcbiA2NTI6XHQgKiB2bWJ1c19sZWFrX2J1ZmZlciAtIHNldCB1cCBhIGJ1ZmZlciB0byBiZSBsZWFrZWQgYnkgdm1idXNfZnJlZV9idWZmZXIoKS5cbiA2NTM6XHQgKlxuIDY1NDpcdCAqIEBhZGRyOiBidWZmZXIgYWRkcmVzc1xuIDY1NTpcdCAqIEBjaHVua3M6IGNodW5rcyBhcnJheSBmcm9tIHZtYnVzX2FsbG9jX2J1ZmZlcigpXG4gNjU2Olx0ICogQGNodW5rX2NudDogbnVtYmVyIG9mIGVudHJpZXMgaW4gQGNodW5rc1xuIDY1NzpcdCAqXG4gNjU4Olx0ICogV2hlbiBAY2h1bmtzIGlzIE5VTEwgdGhlIGJ1ZmZlciBpcyBhIHBsYWluIHZ6YWxsb2MoKSBhbGxvY2F0aW9uIGFuZFxuIDY1OTpcdCAqIHRoZSBidWZmZXIgaXMgbGVha2VkIGJ5IHNldHRpbmcgQGFkZHIgdG8gTlVMTC4gT3RoZXJ3aXNlIHNldFxuIDY2MDpcdCAqIEBjaHVua19jbnQgdG8gMCBzbyB0aGF0IHZtYnVzX2ZyZWVfYnVmZmVyKCkgZG9lcyBub3QgdHJ5IHRvIHJlLWVuY3J5cHRcbiA2NjE6XHQgKiBvciBmcmVlIHRoZSBidWZmZXIgbWVtb3J5LCBidXQgc3RpbGwgcmVsZWFzZXMgdGhlIHZtYXAgYWRkcmVzcyBhbmRcbiA2NjI6XHQgKiB0aGUgY2h1bmtzIG1lbW9yeS5cbiA2NjM6XHQgKlxuIDY2NDpcdCAqIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBpbiBhIGNvbnRleHQgd2hlcmUgdGhlIGJ1ZmZlciBpcyBzdGlsbFxuIDY2NTpcdCAqIGJlaW5nIGFjY2Vzc2VkLiBJdCBtdXN0IG5vdCByZW1vdmUgYW55IGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3NlcyBvZlxuIDY2NjpcdCAqIHRoZSBidWZmZXIgb3IgY2hhbmdlIGl0cyBlbmNyeXB0aW9uIHN0YXR1cy5cbiA2Njc6XHQgKi9cbiA2Njg6XHR2b2lkIHZtYnVzX2xlYWtfYnVmZmVyKHZvaWQgKiphZGRyLCBzdHJ1Y3QgcGFnZSAqKipjaHVua3MsIHUzMiAqY2h1bmtfY250KVxuIDY2OTpcdHtcbiA2NzA6XHRcdGlmICgqY2h1bmtzKVxuIDY3MTpcdFx0XHQqY2h1bmtfY250ID0gMDtcbiA2NzI6XHRcdGVsc2VcbiA2NzM6XHRcdFx0KmFkZHIgPSBOVUxMO1xuIDY3NDpcdH1cbiA2NzU6XHRFWFBPUlRfU1lNQk9MX0dQTCh2bWJ1c19sZWFrX2J1ZmZlcik7XG4gNjc2Olx0XG4gNjc3Olx0LyoqXG4gNjc4Olx0ICogdm1idXNfYWxsb2NfYnVmZmVyIC0gYWxsb2NhdGUgYSBob3N0LXZpc2libGUsIHZpcnR1YWxseS1jb250aWd1b3VzIGJ1ZmZlci5cbiA2Nzk6XHQgKlxuIDY4MDpcdCAqIEBjaGFubmVsOiB0aGUgY2hhbm5lbCB0aGUgYnVmZmVyIHdpbGwgYmUgYXR0YWNoZWQgdG9cbiA2ODE6XHQgKiBAc2l6ZTogcmVxdWVzdGVkIGJ1ZmZlciBzaXplIGluIGJ5dGVzICh3aWxsIGJlIHJvdW5kZWQgdXAgdG8gUEFHRV9TSVpFKVxuIDY4MjpcdCAqIEBjaHVua3Nfb3V0OiBvbiBzdWNjZXNzLCBzZXQgdG8gdGhlIGFycmF5IG9mIHVuZGVybHlpbmcgY2h1bmtzLCBvciBOVUxMIHdoZW5cbiA2ODM6XHQgKiAgICAgICAgICAgICAgdGhlIGJ1ZmZlciB3YXMgYWxsb2NhdGVkIHdpdGggdnphbGxvYygpXG4gNjg0Olx0ICogQGNodW5rX2NudF9vdXQ6IG9uIHN1Y2Nlc3MsIHNldCB0byB0aGUgbnVtYmVyIG9mIGNodW5rc1xuIDY4NTpcdCAqXG4gNjg2Olx0ICogQnVmZmVycyBub3QgcmVxdWlyaW5nIGRlY3J5cHRpb24gYXJlIGFsbG9jYXRlZCB3aXRoIHZ6YWxsb2MoKS5cbiA2ODc6XHQgKlxuIDY4ODpcdCAqIEJ1ZmZlcnMgcmVxdWlyaW5nIGRlY3J5cHRpb24gYXJlIGFsbG9jYXRlZCBhcyBhIHNlcmllcyBvZlxuIDY4OTpcdCAqIHBoeXNpY2FsbHktY29udGlndW91cyBjaHVua3MsIHN0YXJ0aW5nIGF0IE1BWF9QQUdFX09SREVSIGFuZCBmYWxsaW5nIGJhY2sgdG9cbiA2OTA6XHQgKiBzbWFsbGVyIG9yZGVycyBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuIEVhY2ggY2h1bmsgaXMgdHJhbnNpdGlvbmVkIHRvXG4gNjkxOlx0ICogaG9zdC12aXNpYmxlIHZpYSBzZXRfbWVtb3J5X2RlY3J5cHRlZCgpIG9uIGl0cyBkaXJlY3QtbWFwIGFkZHJlc3MsIHRoZW4gYWxsXG4gNjkyOlx0ICogY2h1bmtzIGFyZSBjb21iaW5lZCBpbnRvIGEgdmlydHVhbGx5LWNvbnRpZ3VvdXMgcmFuZ2UgdmlhIHZtYXAoKS5cbiA2OTM6XHQgKlxuIDY5NDpcdCAqIFJldHVybjogdGhlIGJ1ZmZlciYjMzk7cyB2aXJ0dWFsIGFkZHJlc3MsIG9yIE5VTEwgb24gZmFpbHVyZS5cbiA2OTU6XHQgKi9cbiA2OTY6XHR2b2lkICp2bWJ1c19hbGxvY19idWZmZXIoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXG4gNjk3Olx0XHRcdFx0IHUzMiBzaXplLFxuIDY5ODpcdFx0XHRcdCBzdHJ1Y3QgcGFnZSAqKipjaHVua3Nfb3V0LFxuIDY5OTpcdFx0XHRcdCB1MzIgKmNodW5rX2NudF9vdXQpXG4gNzAwOlx0e1xuIDcwMTpcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IFBGTl9VUChzaXplKTtcbiA3MDI6XHRcdHVuc2lnbmVkIGxvbmcgcmVtYWluaW5nID0gbnJfcGFnZXM7XG4gNzAzOlx0XHR1bnNpZ25lZCBsb25nIHBhZ2VfaWR4ID0gMDtcbiA3MDQ6XHRcdHN0cnVjdCBwYWdlICoqY2h1bmtzID0gTlVMTDtcbiA3MDU6XHRcdHN0cnVjdCBwYWdlICoqcGFnZXMgPSBOVUxMO1xuIDcwNjpcdFx0aW50IG9yZGVyID0gTUFYX1BBR0VfT1JERVI7XG4gNzA3Olx0XHR1MzIgY2h1bmtfY250ID0gMDtcbiA3MDg6XHRcdHZvaWQgKmFkZHI7XG4gNzA5Olx0XHR1MzIgaTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDAwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2NvbmZpZyBJbnF1aXJ5OiBIeXBlci1WIERyaXZlcnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgZ292ZXJuIHRoZSBIeXBlci1WIGRyaXZlcnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGRyaXZlcnMgcmVzaWRpbmcgd2l0aGluIGBkcml2ZXJzL2h2L2AgYW5kLCBtb3JlIHByZWNpc2VseSwgdGhvc2UgbmVzdGVkIHVuZGVyIGBkcml2ZXJzL25ldC9oeXBlcnYvYC4gTXkgdXN1YWwgYXBwcm9hY2ggaGVyZSBpcyB0byBsZXZlcmFnZSB0aGUgS2NvbmZpZyBzZWFyY2ggbWVjaGFuaXNtcyDigJMgdGhhdCYjMzk7cyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIHBpbnBvaW50IHRoZSByZWxldmFudCB2YXJpYWJsZXMgYW5kIHVuZGVyc3RhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIHBvdGVudGlhbCBtZWFuaW5ncyB3aXRoaW4gdGhlIGJyb2FkZXIga2VybmVsIGNvbnRleHQuIFRpbWUgdG8gZGl2ZSBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhZUEVSViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaHYvS2NvbmZpZz0zPW1lbnUgXCYjMzQ7TWljcm9zb2Z0IEh5cGVyLVYgZ3Vlc3Qgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9odi9LY29uZmlnLTQtXG5kcml2ZXJzL2h2L0tjb25maWc6NTpjb25maWcgSFlQRVJWXG5kcml2ZXJzL2h2L0tjb25maWctNi1cdGJvb2wgXCYjMzQ7TWljcm9zb2Z0IEh5cGVyLVYgY29yZSBoeXBlcnZpc29yIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2h2L0tjb25maWctMTYtXG5kcml2ZXJzL2h2L0tjb25maWc6MTc6Y29uZmlnIEhZUEVSVl9WVExfTU9ERVxuZHJpdmVycy9odi9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtFbmFibGUgTGludXggdG8gYm9vdCBpbiBWVEwgY29udGV4dFwmIzM0O1xuLS1cbmRyaXZlcnMvaHYvS2NvbmZpZy00Mi1cbmRyaXZlcnMvaHYvS2NvbmZpZzo0Mzpjb25maWcgSFlQRVJWX1RJTUVSXG5kcml2ZXJzL2h2L0tjb25maWctNDQtXHRkZWZfYm9vbCBIWVBFUlYgXHUwMDI2XHUwMDI2IFg4NlxuZHJpdmVycy9odi9LY29uZmlnLTQ1LVxuZHJpdmVycy9odi9LY29uZmlnOjQ2OmNvbmZpZyBIWVBFUlZfVVRJTFNcbmRyaXZlcnMvaHYvS2NvbmZpZy00Ny1cdHRyaXN0YXRlIFwmIzM0O01pY3Jvc29mdCBIeXBlci1WIFV0aWxpdGllcyBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2h2L0tjb25maWctNTItXG5kcml2ZXJzL2h2L0tjb25maWc6NTM6Y29uZmlnIEhZUEVSVl9CQUxMT09OXG5kcml2ZXJzL2h2L0tjb25maWctNTQtXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgSHlwZXItViBCYWxsb29uIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvaHYvS2NvbmZpZy01OS1cbmRyaXZlcnMvaHYvS2NvbmZpZzo2MDpjb25maWcgSFlQRVJWX1ZNQlVTXG5kcml2ZXJzL2h2L0tjb25maWctNjEtXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgSHlwZXItViBWTUJ1cyBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9MjcxPWNvbmZpZyBTRVJJT19PTFBDX0FQU1Bcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjgwLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI4MTpjb25maWcgSFlQRVJWX0tFWUJPQVJEXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjgyLVx0dHJpc3RhdGUgXCYjMzQ7TWljcm9zb2Z0IFN5bnRoZXRpYyBLZXlib2FyZCBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWc6Mjpjb25maWcgSFlQRVJWX05FVFxuZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01pY3Jvc29mdCBIeXBlci1WIHZpcnR1YWwgbmV0d29yayBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3Njc2kvS2NvbmZpZz01Nzg9Y29uZmlnIFhFTl9TQ1NJX0ZST05URU5EXG4tLVxuZHJpdmVycy9zY3NpL0tjb25maWctNTg3LVxuZHJpdmVycy9zY3NpL0tjb25maWc6NTg4OmNvbmZpZyBIWVBFUlZfU1RPUkFHRVxuZHJpdmVycy9zY3NpL0tjb25maWctNTg5LVx0dHJpc3RhdGUgXCYjMzQ7TWljcm9zb2Z0IEh5cGVyLVYgdmlydHVhbCBzdG9yYWdlIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzgyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgdGhlIEh5cGVyLVYgRHJpdmVyIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBjaGFubmVsLmNgIGFuZCBgbmV0dnNjLmNgIGdldCBjb21waWxlZCBpbnRvIHRoZSBIeXBlci1WIGRyaXZlcnMuIE15IGZpcnN0IHN0ZXAgaXMgdG8gZGlnIGludG8gdGhlIE1ha2VmaWxlcy4gSSYjMzk7bGwgc3RhcnQgd2l0aCBgZHJpdmVycy9odi9NYWtlZmlsZWAgYW5kIGBkcml2ZXJzL25ldC9oeXBlcnYvTWFrZWZpbGVgLiBUaGVzZSBhcmUgdGhlIGxvZ2ljYWwgcGxhY2VzIHRvIGZpbmQgdGhlIGJ1aWxkIHJ1bGVzLCBkZXBlbmRlbmNpZXMsIGFuZCB1bHRpbWF0ZWx5LCB0aGUgY29tcGlsZXIgZmxhZ3MgdXNlZCBmb3IgdGhlc2Ugc3BlY2lmaWMgbW9kdWxlcyB3aXRoaW4gdGhlIEh5cGVyLVYgc3Vic3lzdGVtLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBleHBsaWNpdCBjb21waWxhdGlvbiB0YXJnZXRzIGZvciB0aGVzZSBmaWxlcyBvciwgbW9yZSBsaWtlbHksIGluY2x1c2lvbiBvZiBicm9hZGVyIGJ1aWxkIHJ1bGVzIHRoYXQgZW5jb21wYXNzIHRoZW0uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGUgb2JqZWN0IGZpbGVzIGFyZSBnZW5lcmF0ZWQsIHRoZSBsaWJyYXJpZXMgdGhleSBsaW5rIGFnYWluc3QsIGFuZCBob3cgdGhleSB1bHRpbWF0ZWx5IGJlY29tZSBwYXJ0IG9mIHRoZSBsYXJnZXIgYGh2YCBvciBgaHlwZXJ2YCBtb2R1bGVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIE1ha2VmaWxlcyByZXZlYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoYW5uZWxcXC5vfG5ldHZzY1xcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9ob3N0MXgvTWFrZWZpbGU9Mj1ob3N0MXgteSA9IFxcXG4tLVxuZHJpdmVycy9ncHUvaG9zdDF4L01ha2VmaWxlLTctXHRjZG1hLm8gXFxcbmRyaXZlcnMvZ3B1L2hvc3QxeC9NYWtlZmlsZTo4Olx0Y2hhbm5lbC5vIFxcXG5kcml2ZXJzL2dwdS9ob3N0MXgvTWFrZWZpbGUtOS1cdGpvYi5vIFxcXG4tLVxuZHJpdmVycy9odi9NYWtlZmlsZT0xMT1odl92bWJ1cy15IDo9IHZtYnVzX2Rydi5vIFxcXG5kcml2ZXJzL2h2L01ha2VmaWxlOjEyOlx0XHQgaHYubyBjb25uZWN0aW9uLm8gY2hhbm5lbC5vIFxcXG5kcml2ZXJzL2h2L01ha2VmaWxlLTEzLVx0XHQgY2hhbm5lbF9tZ210Lm8gcmluZ19idWZmZXIubyBodl90cmFjZS5vXG4tLVxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdmlkdHYvTWFrZWZpbGU9NT1kdmItdmlkdHYtYnJpZGdlLW9ianMgOj0gdmlkdHZfYnJpZGdlLm8gdmlkdHZfY29tbW9uLm8gdmlkdHZfdHMubyB2aWR0dl9wc2kubyBcXFxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdmlkdHYvTWFrZWZpbGU6NjpcdFx0XHQgdmlkdHZfcGVzLm8gdmlkdHZfczMwMm0ubyB2aWR0dl9jaGFubmVsLm8gdmlkdHZfbXV4Lm9cbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpZHR2L01ha2VmaWxlLTctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvTWFrZWZpbGU9NT1vYmotJChDT05GSUdfTUlDUk9TT0ZUX01BTkEpICYjNDM7PSBtYW5hLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL01ha2VmaWxlOjY6bWFuYS1vYmpzIDo9IGdkbWFfbWFpbi5vIHNobV9jaGFubmVsLm8gaHdfY2hhbm5lbC5vIG1hbmFfZW4ubyBtYW5hX2V0aHRvb2wubyBtYW5hX2JwZi5vXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC9oeXBlcnYvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfSFlQRVJWX05FVCkgJiM0Mzs9IGh2X25ldHZzYy5vXG5kcml2ZXJzL25ldC9oeXBlcnYvTWFrZWZpbGUtMy1cbmRyaXZlcnMvbmV0L2h5cGVydi9NYWtlZmlsZTo0Omh2X25ldHZzYy15IDo9IG5ldHZzY19kcnYubyBuZXR2c2MubyBybmRpc19maWx0ZXIubyBuZXR2c2NfdHJhY2UubyBuZXR2c2NfYnBmLm9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGU9Mj1hdGg5ay15ICYjNDM7PVx0YmVhY29uLm8gXFxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGUtOS1cdFx0YW50ZW5uYS5vIFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGU6MTA6XHRcdGNoYW5uZWwub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlLTExLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9NYWtlZmlsZT0yMz1icmNtc21hYy15IDo9IFxcXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL01ha2VmaWxlLTI3LVx0YW50c2VsLm8gXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9NYWtlZmlsZToyODpcdGNoYW5uZWwubyBcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL01ha2VmaWxlLTI5LVx0bWFpbi5vIFxcXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9NYWtlZmlsZT0xMT1tdDc2LXkgOj0gXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvTWFrZWZpbGUtMTItXHRtbWlvLm8gdXRpbC5vIHRyYWNlLm8gZG1hLm8gbWFjODAyMTEubyBkZWJ1Z2ZzLm8gZWVwcm9tLm8gXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvTWFrZWZpbGU6MTM6XHR0eC5vIGFnZy1yeC5vIG1jdS5vIHdlZC5vIHNjYW4ubyBjaGFubmVsLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvTWFrZWZpbGUtMTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiBrZXJuZWwgZGV2ZWxvcG1lbnQ6CgoqKkV4YW1pbmluZyBIeXBlci1WIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBIeXBlci1WIGRyaXZlcnMuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYEtjb25maWdgIGZpbGVzIOKAkyB0aGV5JiMzOTtyZSB0aGUgaGVhcnQgb2YgdGhlIGJ1aWxkIHN5c3RlbSYjMzk7cyBsb2dpYy4gSSBrbm93IEkmIzM5O2xsIGJlIHN0YXJ0aW5nIGJ5IGNyb3NzLXJlZmVyZW5jaW5nIGBkcml2ZXJzL2h2L0tjb25maWdgIGFuZCBgZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWdgLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhleSYjMzk7cmUgc3RydWN0dXJlZCBhbmQgcmVsYXRlZC4gQXJlIHRoZXJlIGNvbW1vbiBkZXBlbmRlbmNpZXMgb3Igc2hhcmVkIHNldHRpbmdzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIGNvbnNvbGlkYXRpb24gb3IgaW1wcm92ZW1lbnQ/IEkgZXhwZWN0IHRoZSBmaXJzdCBvbmUgdG8gY29udGFpbiB0aGUgY29yZSBIViBkZWZpbml0aW9ucyBhbmQgb3B0aW9ucywgYW5kIHRoZSBzZWNvbmQgdG8gaW5jbHVkZSB0aGUgbmV0d29ya2luZy1zcGVjaWZpYyBjb25maWd1cmF0aW9uLiBUaW1lIHRvIGRpZyBpbiBhbmQgbWFwIG91dCB0aGVzZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGhpcyBzaG91bGQgYmUgcXVpY2ssIHRob3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2h2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0bWVudSBcJiMzNDtNaWNyb3NvZnQgSHlwZXItViBndWVzdCBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIEhZUEVSVlxuICAgNjpcdFx0Ym9vbCBcJiMzNDtNaWNyb3NvZnQgSHlwZXItViBjb3JlIGh5cGVydmlzb3Igc3VwcG9ydFwmIzM0O1xuICAgNzpcdFx0ZGVwZW5kcyBvbiAoWDg2IFx1MDAyNlx1MDAyNiBYODZfTE9DQUxfQVBJQyBcdTAwMjZcdTAwMjYgSFlQRVJWSVNPUl9HVUVTVCkgXFxcbiAgIDg6XHRcdFx0fHwgKEFSTTY0IFx1MDAyNlx1MDAyNiAhQ1BVX0JJR19FTkRJQU4pXG4gICA5Olx0XHRzZWxlY3QgUEFSQVZJUlRcbiAgMTA6XHRcdHNlbGVjdCBYODZfSFZfQ0FMTEJBQ0tfVkVDVE9SIGlmIFg4NlxuICAxMTpcdFx0c2VsZWN0IE9GX0VBUkxZX0ZMQVRUUkVFIGlmIE9GXG4gIDEyOlx0XHRzZWxlY3QgSVJRX01TSV9MSUIgaWYgWDg2XG4gIDEzOlx0XHRoZWxwXG4gIDE0Olx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBydW4gTGludXggYXMgYSBIeXBlci1WIGNsaWVudCBvcGVyYXRpbmdcbiAgMTU6XHRcdCAgc3lzdGVtLlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBIWVBFUlZfVlRMX01PREVcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIExpbnV4IHRvIGJvb3QgaW4gVlRMIGNvbnRleHRcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gKFg4Nl82NCBcdTAwMjZcdTAwMjYgSEFWRV9TVEFUSUNfQ0FMTCkgfHwgQVJNNjRcbiAgMjA6XHRcdGRlcGVuZHMgb24gSFlQRVJWXG4gIDIxOlx0XHRkZXBlbmRzIG9uIFNNUFxuICAyMjpcdFx0ZGVmYXVsdCBuXG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFZpcnR1YWwgU2VjdXJlIE1vZGUgKFZTTSkgaXMgYSBzZXQgb2YgaHlwZXJ2aXNvciBjYXBhYmlsaXRpZXMgYW5kXG4gIDI1Olx0XHQgIGVubGlnaHRlbm1lbnRzIG9mZmVyZWQgdG8gaG9zdCBhbmQgZ3Vlc3QgcGFydGl0aW9ucyB3aGljaCBlbmFibGVzXG4gIDI2Olx0XHQgIHRoZSBjcmVhdGlvbiBhbmQgbWFuYWdlbWVudCBvZiBuZXcgc2VjdXJpdHkgYm91bmRhcmllcyB3aXRoaW5cbiAgMjc6XHRcdCAgb3BlcmF0aW5nIHN5c3RlbSBzb2Z0d2FyZS5cbiAgMjg6XHRcbiAgMjk6XHRcdCAgVlNNIGFjaGlldmVzIGFuZCBtYWludGFpbnMgaXNvbGF0aW9uIHRocm91Z2ggVmlydHVhbCBUcnVzdCBMZXZlbHNcbiAgMzA6XHRcdCAgKFZUTHMpLiBWaXJ0dWFsIFRydXN0IExldmVscyBhcmUgaGllcmFyY2hpY2FsLCB3aXRoIGhpZ2hlciBsZXZlbHNcbiAgMzE6XHRcdCAgYmVpbmcgbW9yZSBwcml2aWxlZ2VkIHRoYW4gbG93ZXIgbGV2ZWxzLiBWVEwwIGlzIHRoZSBsZWFzdCBwcml2aWxlZ2VkXG4gIDMyOlx0XHQgIGxldmVsLCBhbmQgY3VycmVudGx5IG9ubHkgb3RoZXIgbGV2ZWwgc3VwcG9ydGVkIGlzIFZUTDIuXG4gIDMzOlx0XG4gIDM0Olx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBidWlsZCBhIExpbnV4IGtlcm5lbCB0byBydW4gYXQgYSBWVEwgb3RoZXIgdGhhblxuICAzNTpcdFx0ICB0aGUgbm9ybWFsIFZUTDAsIHdoaWNoIGN1cnJlbnRseSBpcyBvbmx5IFZUTDIuICBUaGlzIG9wdGlvblxuICAzNjpcdFx0ICBpbml0aWFsaXplcyB0aGUga2VybmVsIHRvIHJ1biBpbiBWVEwyLCBhbmQgYWRkcyB0aGUgYWJpbGl0eSB0byBib290XG4gIDM3Olx0XHQgIHNlY29uZGFyeSBDUFVzIGRpcmVjdGx5IGludG8gNjQtYml0IGNvbnRleHQgYXMgcmVxdWlyZWQgZm9yIFZUTHMgb3RoZXJcbiAgMzg6XHRcdCAgdGhhbiAwLiAgQSBrZXJuZWwgYnVpbHQgd2l0aCB0aGlzIG9wdGlvbiBtdXN0IHJ1biBhdCBWVEwyLCBhbmQgd2lsbFxuICAzOTpcdFx0ICBub3QgcnVuIGFzIGEgbm9ybWFsIGd1ZXN0LlxuICA0MDpcdFxuICA0MTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOXG4gIDQyOlx0XG4gIDQzOlx0Y29uZmlnIEhZUEVSVl9USU1FUlxuICA0NDpcdFx0ZGVmX2Jvb2wgSFlQRVJWIFx1MDAyNlx1MDAyNiBYODZcbiAgNDU6XHRcbiAgNDY6XHRjb25maWcgSFlQRVJWX1VUSUxTXG4gIDQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgSHlwZXItViBVdGlsaXRpZXMgZHJpdmVyXCYjMzQ7XG4gIDQ4Olx0XHRkZXBlbmRzIG9uIEhZUEVSVl9WTUJVUyBcdTAwMjZcdTAwMjYgQ09OTkVDVE9SIFx1MDAyNlx1MDAyNiBOTFNcbiAgNDk6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgNTA6XHRcdGhlbHBcbiAgNTE6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIGVuYWJsZSB0aGUgSHlwZXItViBVdGlsaXRpZXMuXG4gIDUyOlx0XG4gIDUzOlx0Y29uZmlnIEhZUEVSVl9CQUxMT09OXG4gIDU0Olx0XHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgSHlwZXItViBCYWxsb29uIGRyaXZlclwmIzM0O1xuICA1NTpcdFx0ZGVwZW5kcyBvbiBIWVBFUlZfVk1CVVNcbiAgNTY6XHRcdHNlbGVjdCBQQUdFX1JFUE9SVElOR1xuICA1NzpcdFx0aGVscFxuICA1ODpcdFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gZW5hYmxlIEh5cGVyLVYgQmFsbG9vbiBkcml2ZXIuXG4gIDU5Olx0XG4gIDYwOlx0Y29uZmlnIEhZUEVSVl9WTUJVU1xuICA2MTpcdFx0dHJpc3RhdGUgXCYjMzQ7TWljcm9zb2Z0IEh5cGVyLVYgVk1CdXMgZHJpdmVyXCYjMzQ7XG4gIDYyOlx0XHRkZXBlbmRzIG9uIEhZUEVSVlxuICA2MzpcdFx0ZGVmYXVsdCBIWVBFUlZcbiAgNjQ6XHRcdHNlbGVjdCBTWVNGQiBpZiBFRkkgXHUwMDI2XHUwMDI2ICFIWVBFUlZfVlRMX01PREVcbiAgNjU6XHRcdGhlbHBcbiAgNjY6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIGVuYWJsZSBIeXBlci1WIFZtYnVzIGRyaXZlci5cbiAgNjc6XHRcbiAgNjg6XHRjb25maWcgTVNIVl9ST09UXG4gIDY5Olx0XHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgSHlwZXItViByb290IHBhcnRpdGlvbiBzdXBwb3J0XCYjMzQ7XG4gIDcwOlx0XHRkZXBlbmRzIG9uIEhZUEVSViBcdTAwMjZcdTAwMjYgKFg4Nl82NCB8fCBBUk02NClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExODYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIEh5cGVyLVYgTmV0d29ya2luZyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBIeXBlci1WIG5ldHdvcmsgZHJpdmVycy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGhlYWRpbmcgb3ZlciB0byBgZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBzdWJzeXN0ZW0gYXJlIGRlZmluZWQuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNvbnRyb2xsYWJsZSwgd2hhdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQsIGFuZCBob3cgdGhlIHZhcmlvdXMgZmVhdHVyZXMgaW50ZXJhY3Qgd2l0aCBvbmUgYW5vdGhlci4gVGhpcyBmaWxlIHdpbGwgdGVsbCBtZSBob3cgdGhlIHVzZXIgaGFzIGNvbmZpZ3VyZWQgdGhpcyBwYXJ0aWN1bGFyIHN1YnN5c3RlbSwgYW5kIEkgd2lsbCBiZSBhYmxlIHRvIHRlbGwgd2hhdCBjaG9pY2VzIHRoZXkgaGF2ZSBtYWRlIGZvciB0aGlzIHBhcnQgb2YgdGhlIGRyaXZlci4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGFyY2hpdGVjdHVyZSBhbmQgb3B0aW9ucy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIG5ldHdvcmsgc3RhY2suIFVuZGVyc3RhbmRpbmcgdGhpcyBLY29uZmlnIGZpbGUgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkIHJlYWxseSBncmFzcGluZyB0aGUgY2FwYWJpbGl0aWVzIGFuZCBjb25maWd1cmF0aW9uIG9mIHRoZSBIeXBlci1WIG5ldHdvcmsgZHJpdmVycy4gRnJvbSBoZXJlIEkgY2FuIHN0YXJ0IHRvIGZvbGxvdyB0aGUgbGlua3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgSFlQRVJWX05FVFxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TWljcm9zb2Z0IEh5cGVyLVYgdmlydHVhbCBuZXR3b3JrIGRyaXZlclwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBIWVBFUlZfVk1CVVNcbiAgIDU6XHRcdHNlbGVjdCBVQ1MyX1NUUklOR1xuICAgNjpcdFx0c2VsZWN0IE5MU1xuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gZW5hYmxlIHRoZSBIeXBlci1WIHZpcnR1YWwgbmV0d29yayBkcml2ZXIuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTY4CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgSHlwZXItViBSZWFjaGFiaWxpdHkgaW4gRnV6emluZyBFbnZpcm9ubWVudHMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgSSBjYW4gYWN0dWFsbHkgcmVhY2ggSHlwZXItViBjb21wb25lbnRzIGxpa2UgdGhlIFZNQnVzIGFuZCBIWVBFUlZfTkVUIHdpdGhpbiBmdXp6aW5nIGVudmlyb25tZW50cyDigJMgc3BlY2lmaWNhbGx5LCBRRU1VIGFuZCBHQ0UmIzM5O3MgU3l6a2FsbGVyIHNldHVwcy4gQmVmb3JlIGRpdmluZyBpbiwgSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgSHlwZXItViBvcGVyYXRlcy4gKkhvdyBkb2VzIHRoZSBoeXBlcnZpc29yIHdvcmssIGZ1bmRhbWVudGFsbHk/KiBBaCwgcmlnaHQsIEh5cGVyLVYgaXMgTWljcm9zb2Z0JiMzOTtzIGh5cGVydmlzb3IuIElmIEkmIzM5O20gcnVubmluZyBhIGd1ZXN0IE9TICp1bmRlciogSHlwZXItViwgdGhlIHN5c3RlbSBzaG91bGQgYmUgYWJsZSB0byBkZXRlY3QgdGhpcyB0aHJvdWdoIGEgQ1BVSUQgY2hlY2sgdmlhIGBoeXBlcnZfaW5pdCgpYC4gTm93LCBJIG5lZWQgdG8gZm9jdXMgb24gZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCBwcm9iaW5nLiBMZXQmIzM5O3Mgc2VlIGhvdyBgdm1idXNfZHJ2LmNgIGhhbmRsZXMgdGhhdC4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfaW5pdHxzdWJzeXNfaW5pdGNhbGx8dm1idXNfYnVzX2luaXR8aHlwZXJ2X2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2h2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2h2L2h2X2JhbGxvb24uYz0yMTI0PXN0YXRpYyBpbnQgX19pbml0IGluaXRfYmFsbG9vbl9kcnYodm9pZClcbi0tXG5kcml2ZXJzL2h2L2h2X2JhbGxvb24uYy0yMTI4LVxuZHJpdmVycy9odi9odl9iYWxsb29uLmM6MjEyOTptb2R1bGVfaW5pdChpbml0X2JhbGxvb25fZHJ2KTtcbmRyaXZlcnMvaHYvaHZfYmFsbG9vbi5jLTIxMzAtXG4tLVxuZHJpdmVycy9odi9odl9jb21tb24uYz0zOD1FWFBPUlRfU1lNQk9MX0dQTChodl9jdXJyX3BhcnRpdGlvbl90eXBlKTtcbi0tXG5kcml2ZXJzL2h2L2h2X2NvbW1vbi5jLTQzLSAqIGJ1aWx0IG9ubHkgd2hlbiBDT05GSUdfSFlQRVJWIGlzIGRlZmluZWQuICBCdXQgb24geDg2LFxuZHJpdmVycy9odi9odl9jb21tb24uYzo0NDogKiBtc19oeXBlcnZfaW5pdF9wbGF0Zm9ybSgpIGlzIGJ1aWx0IGV2ZW4gd2hlbiBDT05GSUdfSFlQRVJWIGlzIG5vdFxuZHJpdmVycy9odi9odl9jb21tb24uYy00NS0gKiBkZWZpbmVkLCBhbmQgaXQgdXNlcyB0aGVzZSB0aHJlZSB2YXJpYWJsZXMuICBTbyBtYXJrIHRoZW0gYXMgX193ZWFrXG5kcml2ZXJzL2h2L2h2X2NvbW1vbi5jLTQ2LSAqIGhlcmUsIGFsbG93aW5nIGZvciBhbiBvdmVycmlkaW5nIGRlZmluaXRpb24gaW4gdGhlIG1vZHVsZSBjb250YWluaW5nXG5kcml2ZXJzL2h2L2h2X2NvbW1vbi5jOjQ3OiAqIG1zX2h5cGVydl9pbml0X3BsYXRmb3JtKCkuXG5kcml2ZXJzL2h2L2h2X2NvbW1vbi5jLTQ4LSAqL1xuLS1cbmRyaXZlcnMvaHYvaHZfdXRpbC5jPTgwND1zdGF0aWMgdm9pZCBleGl0X2h5cGVydl91dGlscyh2b2lkKVxuLS1cbmRyaXZlcnMvaHYvaHZfdXRpbC5jLTgxMC1cbmRyaXZlcnMvaHYvaHZfdXRpbC5jOjgxMTptb2R1bGVfaW5pdChpbml0X2h5cGVydl91dGlscyk7XG5kcml2ZXJzL2h2L2h2X3V0aWwuYy04MTItbW9kdWxlX2V4aXQoZXhpdF9oeXBlcnZfdXRpbHMpO1xuLS1cbmRyaXZlcnMvaHYvaHlwZXJ2X3ZtYnVzLmg9MTI2PXN0cnVjdCBodl9wZXJfY3B1X2NvbnRleHQge1xuLS1cbmRyaXZlcnMvaHYvaHlwZXJ2X3ZtYnVzLmgtMTU0LVx0ICogVk0sIHNvIHBvc3RfbXNnX3BhZ2UgKHdoaWNoIGlzIGRlY3J5cHRlZCBpbiBodl9zeW5pY19hbGxvYygpKSBpc1xuZHJpdmVycy9odi9oeXBlcnZfdm1idXMuaDoxNTU6XHQgKiBpbnRyb2R1Y2VkIGZvciB0aGlzIHB1cnBvc2UuIFNlZSBoeXBlcnZfaW5pdCgpIGZvciBtb3JlIGNvbW1lbnRzLlxuZHJpdmVycy9odi9oeXBlcnZfdm1idXMuaC0xNTYtXHQgKi9cbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM9MjQyOD1zdGF0aWMgdm9pZCBfX2V4aXQgbXNodl9wYXJlbnRfcGFydGl0aW9uX2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjQzOC1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoyNDM5Om1vZHVsZV9pbml0KG1zaHZfcGFyZW50X3BhcnRpdGlvbl9pbml0KTtcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yNDQwLW1vZHVsZV9leGl0KG1zaHZfcGFyZW50X3BhcnRpdGlvbl9leGl0KTtcbi0tXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYz0xMzk4PXN0YXRpYyB2b2lkIF9fZXhpdCBtc2h2X3Z0bF9leGl0KHZvaWQpXG4tLVxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtMTQwOC1cbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jOjE0MDk6bW9kdWxlX2luaXQobXNodl92dGxfaW5pdCk7XG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy0xNDEwLW1vZHVsZV9leGl0KG1zaHZfdnRsX2V4aXQpO1xuLS1cbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmM9MTQwOT1zdGF0aWMgaW50IHZtYnVzX2FsbG9jX3N5bmljX2FuZF9jb25uZWN0KHZvaWQpXG4tLVxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0xNDYxLS8qXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jOjE0NjI6ICogdm1idXNfYnVzX2luaXQgLU1haW4gdm1idXMgZHJpdmVyIGluaXRpYWxpemF0aW9uIHJvdXRpbmUuXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jLTE0NjMtICpcbi0tXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jLTE0NjgtICovXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jOjE0Njk6c3RhdGljIGludCB2bWJ1c19idXNfaW5pdCh2b2lkKVxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0xNDcwLXtcbi0tXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jPTI5NzE9c3RhdGljIGludCBfX2luaXQgaHZfYWNwaV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0yOTc0LVxuZHJpdmVycy9odi92bWJ1c19kcnYuYzoyOTc1Olx0aWYgKCFodl9pc19oeXBlcnZfaW5pdGlhbGl6ZWQoKSlcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmMtMjk3Ni1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0zMDEyLVxuZHJpdmVycy9odi92bWJ1c19kcnYuYzozMDEzOlx0cmV0ID0gdm1idXNfYnVzX2luaXQoKTtcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmMtMzAxNC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9odi92bWJ1c19kcnYuYz0zMDgzPU1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtNaWNyb3NvZnQgSHlwZXItViBWTUJ1cyBEcml2ZXJcJiMzNDspO1xuZHJpdmVycy9odi92bWJ1c19kcnYuYy0zMDg0LVxuZHJpdmVycy9odi92bWJ1c19kcnYuYzozMDg1OnN1YnN5c19pbml0Y2FsbChodl9hY3BpX2luaXQpO1xuZHJpdmVycy9odi92bWJ1c19kcnYuYy0zMDg2LW1vZHVsZV9leGl0KHZtYnVzX2V4aXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE0NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipIeXBlci1WIEluaXRpYWxpemF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGh2X2FjcGlfaW5pdCgpYCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoaXMgY2hlY2s6IGBpZiAoIWh2X2lzX2h5cGVydl9pbml0aWFsaXplZCgpKSByZXR1cm4gLUVOT0RFVjtgLiBOYXR1cmFsbHksIG15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcywgJiMzNDtBbHJpZ2h0LCB3aGVyZSBpcyBgaHZfaXNfaHlwZXJ2X2luaXRpYWxpemVkKClgIGRlZmluZWQ/JiMzNDsgV2Uga25vdyB0aGF0JiMzOTtzIHRoZSBjcnVjaWFsIGdhdGVrZWVwZXIuIEl0JiMzOTtzIHRoZSBjaGVjayB0byBzZWUgaWYgd2UgZXZlbiAqc2hvdWxkKiBwcm9jZWVkIHdpdGggSHlwZXItViBzZXR1cCwgYW5kIGlmIG5vdCwgd2UmIzM5O3JlIGp1c3QgZ29pbmcgdG8gdGhyb3cgYW4gZXJyb3IgYW5kIGJhaWwuIE5vdywgbGV0JiMzOTtzIHRyYWNrIGRvd24gdGhhdCBkZWZpbml0aW9uLiBUaW1lIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgYW5kIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodl9pc19oeXBlcnZfaW5pdGlhbGl6ZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2h5cGVydi9tc2h5cGVydi5jPTEzMD1lYXJseV9pbml0Y2FsbChoeXBlcnZfaW5pdCk7XG5hcmNoL2FybTY0L2h5cGVydi9tc2h5cGVydi5jLTEzMS1cbmFyY2gvYXJtNjQvaHlwZXJ2L21zaHlwZXJ2LmM6MTMyOmJvb2wgaHZfaXNfaHlwZXJ2X2luaXRpYWxpemVkKHZvaWQpXG5hcmNoL2FybTY0L2h5cGVydi9tc2h5cGVydi5jLTEzMy17XG4tLVxuYXJjaC9hcm02NC9oeXBlcnYvbXNoeXBlcnYuYy0xMzUtfVxuYXJjaC9hcm02NC9oeXBlcnYvbXNoeXBlcnYuYzoxMzY6RVhQT1JUX1NZTUJPTF9HUEwoaHZfaXNfaHlwZXJ2X2luaXRpYWxpemVkKTtcbi0tXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jPTY4OD1FWFBPUlRfU1lNQk9MX0dQTChoeXBlcnZfcmVwb3J0X3BhbmljKTtcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmMtNjg5LVxuYXJjaC94ODYvaHlwZXJ2L2h2X2luaXQuYzo2OTA6Ym9vbCBodl9pc19oeXBlcnZfaW5pdGlhbGl6ZWQodm9pZClcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmMtNjkxLXtcbi0tXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jLTcxMi19XG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jOjcxMzpFWFBPUlRfU1lNQk9MX0dQTChodl9pc19oeXBlcnZfaW5pdGlhbGl6ZWQpO1xuYXJjaC94ODYvaHlwZXJ2L2h2X2luaXQuYy03MTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzUyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgSHlwZXItViBJbml0aWFsaXphdGlvbiBDb2RlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHg4NiBIeXBlci1WIGluaXRpYWxpemF0aW9uIGlzIGhhbmRsZWQuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBhcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgc2hvdWxkIGJlZ2luLCByaWdodD8gVGhpcyBmaWxlIHNob3VsZCBjb250YWluIHRoZSBjb3JlIGxvZ2ljIGZvciBzZXR0aW5nIHVwIHRoZSBrZXJuZWwgdG8gcnVuIHdpdGhpbiBhIEh5cGVyLVYgZW52aXJvbm1lbnQgb24gYW4geDg2IGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGRldGVjdCBpZiB3ZSYjMzk7cmUgYWN0dWFsbHkgKmluKiBhIEh5cGVyLVYgZ3Vlc3QsIGFuZCB0aGVuIGNvZGUgcGF0aHMgdG8gY29uZmlndXJlIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSB2aXJ0dWxpemF0aW9uIGludGVyZmFjZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHJlZ2lzdGVyaW5nIEh5cGVyLVYgc3BlY2lmaWMgaW50ZXJydXB0IGhhbmRsZXJzLCBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgcGFyYXZpcnR1YWxpemVkIHN0cnVjdHVyZXMsIGFuZCBpbml0aWFsaXphdGlvbiBvZiBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIHdpdGggdGhlIGhvc3QuIFRoZXJlIHNob3VsZCBhbHNvIGJlIHNvbWUgcGxhdGZvcm0gY2hlY2sgc28gdGhhdCBpdCBkb2VzIG5vdCBnbyBmb3J3YXJkIGlmIHJ1bm5pbmcgb24gcGh5c2ljYWwgaGFyZHdhcmUuIEkgd2FudCB0byBzZWUgaG93IGVhcmx5IHRoaXMgaGFwcGVucyBpbiB0aGUgYm9vdCBwcm9jZXNzIGFuZCB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIHRoZSByZWd1bGFyIHg4NiBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBhbmQgaG93IHRoZXNlIGFyZSBoYW5kbGVkIHRvIGVuc3VyZSBhIHNlYW1sZXNzIGludGVncmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZDsgd2hhdCBraW5kIG9mIHNoYXJlZCBtZW1vcnkgb3IgY29udHJvbCBibG9ja3MgYXJlIGJlaW5nIHNldCB1cCBmb3IgY29tbXVuaWNhdGlvbi4gSSYjMzk7bSByZWFkeSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2OTA6XHRib29sIGh2X2lzX2h5cGVydl9pbml0aWFsaXplZCh2b2lkKVxuIDY5MTpcdHtcbiA2OTI6XHRcdHVuaW9uIGh2X3g2NF9tc3JfaHlwZXJjYWxsX2NvbnRlbnRzIGh5cGVyY2FsbF9tc3I7XG4gNjkzOlx0XG4gNjk0Olx0XHQvKlxuIDY5NTpcdFx0ICogRW5zdXJlIHRoYXQgd2UmIzM5O3JlIHJlYWxseSBvbiBIeXBlci1WLCBhbmQgbm90IGEgS1ZNIG9yIFhlblxuIDY5NjpcdFx0ICogZW11bGF0aW9uIG9mIEh5cGVyLVZcbiA2OTc6XHRcdCAqL1xuIDY5ODpcdFx0aWYgKHg4Nl9oeXBlcl90eXBlICE9IFg4Nl9IWVBFUl9NU19IWVBFUlYpXG4gNjk5Olx0XHRcdHJldHVybiBmYWxzZTtcbiA3MDA6XHRcbiA3MDE6XHRcdC8qIEEgVERYIFZNIHdpdGggbm8gcGFyYXZpc29yIHVzZXMgVERYIEdIQ0kgY2FsbCByYXRoZXIgdGhhbiBodl9oeXBlcmNhbGxfcGcgKi9cbiA3MDI6XHRcdGlmIChodl9pc29sYXRpb25fdHlwZV90ZHgoKSBcdTAwMjZcdTAwMjYgIW1zX2h5cGVydi5wYXJhdmlzb3JfcHJlc2VudClcbiA3MDM6XHRcdFx0cmV0dXJuIHRydWU7XG4gNzA0Olx0XHQvKlxuIDcwNTpcdFx0ICogVmVyaWZ5IHRoYXQgZWFybGllciBpbml0aWFsaXphdGlvbiBzdWNjZWVkZWQgYnkgY2hlY2tpbmdcbiA3MDY6XHRcdCAqIHRoYXQgdGhlIGh5cGVyY2FsbCBwYWdlIGlzIHNldHVwXG4gNzA3Olx0XHQgKi9cbiA3MDg6XHRcdGh5cGVyY2FsbF9tc3IuYXNfdWludDY0ID0gMDtcbiA3MDk6XHRcdHJkbXNycShIVl9YNjRfTVNSX0hZUEVSQ0FMTCwgaHlwZXJjYWxsX21zci5hc191aW50NjQpO1xuIDcxMDpcdFxuIDcxMTpcdFx0cmV0dXJuIGh5cGVyY2FsbF9tc3IuZW5hYmxlO1xuIDcxMjpcdH1cbiA3MTM6XHRFWFBPUlRfU1lNQk9MX0dQTChodl9pc19oeXBlcnZfaW5pdGlhbGl6ZWQpO1xuIDcxNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDUyMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIEh5cGVyLVYgQ29tcGF0aWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBzbmlwcGV0IG9mIGNvZGUsIGFuZCB0aGUgY29tbWVudCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIFRoZSBnb2FsIGlzIGNsZWFybHkgdG8gdmVyaWZ5IHRoZSBob3N0IGVudmlyb25tZW50IGlzICphY3R1YWxseSogSHlwZXItViBhbmQgbm90IHNvbWUgb3RoZXIgdmlydHVhbGl6YXRpb24gbGF5ZXIgbWFzcXVlcmFkaW5nIGFzIGl0LCBtYXliZSBLVk0gb3IgWGVuLiBTZWVtcyBzZW5zaWJsZSwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgY29tcGF0aWJpbGl0eSBpc3N1ZXMuIFRoZSBjb2RlIGl0c2VsZiwgYGlmICh4ODZfaHlwZXJfdHlwZSAhPSBYODZfSFlQRVJfTVNfSFlQRVJWKSByZXR1cm4gZmFsc2U7YCwgaXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBhIGRpcmVjdCBjaGVjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB4ODZfaHlwZXJfdHlwZWAgaXMgcG9wdWxhdGVkLiBUaGF0IG1lYW5zIEkgc2hvdWxkIGdvIGNoZWNrIHRoZSBmaWxlIHBhdGggYGFyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuY2AgdG8gdHJhY2UgaG93IHRoYXQgdmFyaWFibGUgZ2V0cyBpbml0aWFsaXplZCwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtYODZfSFlQRVJfTVNfSFlQRVJWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2h5cGVydi9odl9pbml0LmM9NDUyPXZvaWQgX19pbml0IGh5cGVydl9pbml0KHZvaWQpXG4tLVxuYXJjaC94ODYvaHlwZXJ2L2h2X2luaXQuYy00NTctXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jOjQ1ODpcdGlmICh4ODZfaHlwZXJfdHlwZSAhPSBYODZfSFlQRVJfTVNfSFlQRVJWKVxuYXJjaC94ODYvaHlwZXJ2L2h2X2luaXQuYy00NTktXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jPTY5MD1ib29sIGh2X2lzX2h5cGVydl9pbml0aWFsaXplZCh2b2lkKVxuLS1cbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmMtNjk3LVx0ICovXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jOjY5ODpcdGlmICh4ODZfaHlwZXJfdHlwZSAhPSBYODZfSFlQRVJfTVNfSFlQRVJWKVxuYXJjaC94ODYvaHlwZXJ2L2h2X2luaXQuYy02OTktXHRcdHJldHVybiBmYWxzZTtcbi0tXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmM9OTE2PWJvb2wgaHZfaXNfaXNvbGF0aW9uX3N1cHBvcnRlZCh2b2lkKVxuLS1cbmFyY2gveDg2L2h5cGVydi9pdm0uYy05MjAtXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmM6OTIxOlx0aWYgKCFoeXBlcnZpc29yX2lzX3R5cGUoWDg2X0hZUEVSX01TX0hZUEVSVikpXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmMtOTIyLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vaHlwZXJ2aXNvci5oPTI0PWVudW0geDg2X2h5cGVydmlzb3JfdHlwZSB7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vaHlwZXJ2aXNvci5oLTI2LVx0WDg2X0hZUEVSX1ZNV0FSRSxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaDoyNzpcdFg4Nl9IWVBFUl9NU19IWVBFUlYsXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oeXBlcnZpc29yLmgtMjgtXHRYODZfSFlQRVJfWEVOX1BWLFxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuYz04MTI9Y29uc3QgX19pbml0Y29uc3Qgc3RydWN0IGh5cGVydmlzb3JfeDg2IHg4Nl9oeXBlcl9tc19oeXBlcnYgPSB7XG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9tc2h5cGVydi5jLTgxNC1cdC5kZXRlY3RcdFx0XHQ9IG1zX2h5cGVydl9wbGF0Zm9ybSxcbmFyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuYzo4MTU6XHQudHlwZVx0XHRcdD0gWDg2X0hZUEVSX01TX0hZUEVSVixcbmFyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuYy04MTYtXHQuaW5pdC54MmFwaWNfYXZhaWxhYmxlXHQ9IG1zX2h5cGVydl94MmFwaWNfYXZhaWxhYmxlLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz02OTk5PWludCBrdm1feDg2X3ZlbmRvcl9pbml0KHN0cnVjdCBrdm1feDg2X2luaXRfb3BzICpvcHMpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTcxMTYtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzExNzpcdGlmIChoeXBlcnZpc29yX2lzX3R5cGUoWDg2X0hZUEVSX01TX0hZUEVSVikpXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzExOC1cdFx0c2V0X2h2X3RzY2NoYW5nZV9jYihrdm1faHlwZXJ2X3RzY19ub3RpZmllcik7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTcxNTg9dm9pZCBrdm1feDg2X3ZlbmRvcl9leGl0KHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTcxNjItI2lmZGVmIENPTkZJR19YODZfNjRcbmFyY2gveDg2L2t2bS94ODYuYzo3MTYzOlx0aWYgKGh5cGVydmlzb3JfaXNfdHlwZShYODZfSFlQRVJfTVNfSFlQRVJWKSlcbmFyY2gveDg2L2t2bS94ODYuYy03MTY0LVx0XHRjbGVhcl9odl90c2NjaGFuZ2VfY2IoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4MTUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipEaXZpbmcgaW50byB0aGUgdm1idXMgQnVmZmVyIE1hbmFnZW1lbnQqKgoKT2theSwgc28gYHZtYnVzX2xlYWtfYnVmZmVyYCBoYXMgYmVlbiBpbnRyb2R1Y2VkIGluIGBkcml2ZXJzL2h2L2NoYW5uZWwuY2AgYW5kIHN1YnNlcXVlbnRseSBnZXRzIHV0aWxpemVkIHdpdGhpbiBgZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jYC4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIGFsd2F5cyBidWZmZXIgbWFuYWdlbWVudCwgcGFydGljdWxhcmx5IGluIGEgZHJpdmVyIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3aWRlc3ByZWFkIHRoaXMgbmV3IGZ1bmN0aW9uIGlzLCBhbmQgaG93IGl0IGlzIHVzZWQuIElzIGl0IG9ubHkgdXNlZCBieSBuZXR2c2MuYywgb3IgZG9lcyBzb21ldGhpbmcgZWxzZSBjYWxsIGl0PyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIHNjb3BlIG9mIHRoaXMgbmV3IGJ1ZmZlciBmdW5jdGlvbiBhbmQgaXRzIHBvdGVudGlhbCBpbXBhY3QuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGNvbmZpcm0gd2hldGhlciBgdm1idXNfYWxsb2NfYnVmZmVyYCBpcyBhbHNvIHVzZWQgZWxzZXdoZXJlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSB0d28gcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYW55IG90aGVyIGluc3RhbmNlcyB3aGVyZSBgdm1idXNfbGVha19idWZmZXJgIG9yIGB2bWJ1c19hbGxvY19idWZmZXJgIGFyZSBpbnZva2VkIHdpdGhpbiB0aGUgY29kZWJhc2UgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBmdW5jdGlvbiYjMzk7cyBnbG9iYWwgaW1wYWN0LiBUaGVuLCBJIGNhbiBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSB1c2UgY2FzZSBmb3IgdGhpcyBuZXcgZnVuY3Rpb24sIGFuZCB3aGV0aGVyIGl0cyBpbnRyb2R1Y3Rpb24gcG9zZXMgYW55IHJpc2sgdG8gbWVtb3J5IHN0YWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1idXNfbGVha19idWZmZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2h2L2NoYW5uZWwuYz02NDk9RVhQT1JUX1NZTUJPTF9HUEwodm1idXNfZnJlZV9idWZmZXIpO1xuLS1cbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY1MS0vKipcbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjY1MjogKiB2bWJ1c19sZWFrX2J1ZmZlciAtIHNldCB1cCBhIGJ1ZmZlciB0byBiZSBsZWFrZWQgYnkgdm1idXNfZnJlZV9idWZmZXIoKS5cbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY1My0gKlxuLS1cbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY2Ny0gKi9cbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjY2ODp2b2lkIHZtYnVzX2xlYWtfYnVmZmVyKHZvaWQgKiphZGRyLCBzdHJ1Y3QgcGFnZSAqKipjaHVua3MsIHUzMiAqY2h1bmtfY250KVxuZHJpdmVycy9odi9jaGFubmVsLmMtNjY5LXtcbi0tXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02NzQtfVxuZHJpdmVycy9odi9jaGFubmVsLmM6Njc1OkVYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2xlYWtfYnVmZmVyKTtcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY3Ni1cbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM9MzA1PXN0YXRpYyB2b2lkIG5ldHZzY190ZWFyZG93bl9yZWN2X2dwYWRsKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMzE4LVx0XHRpZiAocmV0ICE9IDApIHtcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzozMTk6XHRcdFx0dm1idXNfbGVha19idWZmZXIoXHUwMDI2bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1ZixcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0zMjAtXHRcdFx0XHRcdCAgXHUwMDI2bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1Zl9jaHVua3MsXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jPTMyOT1zdGF0aWMgdm9pZCBuZXR2c2NfdGVhcmRvd25fc2VuZF9ncGFkbChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTM0Mi1cdFx0aWYgKHJldCAhPSAwKSB7XG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6MzQzOlx0XHRcdHZtYnVzX2xlYWtfYnVmZmVyKFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWYsXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMzQ0LVx0XHRcdFx0XHQgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWZfY2h1bmtzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjY3MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIEJ1ZmZlciBBbGxvY2F0aW9uIGFuZCBEZWFsbG9jYXRpb24gaW4gdGhlIFZNQnVzKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBtZW1vcnkgbWFuYWdlbWVudCBpcyBoYW5kbGVkIGluIHRoZSBWTUJ1cy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIGB2bWJ1c19hbGxvY19idWZmZXJgIGFuZCBgdm1idXNfZnJlZV9idWZmZXJgLiBUaGVzZSBhcmUgdGhlIGNvcmUgcHJpbWl0aXZlcyBmb3IgYnVmZmVyIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB3aXRoaW4gdGhlIFZNQnVzLCBhbmQgdG8gdHJ1bHkgdW5kZXJzdGFuZCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcywgSSBuZWVkIHRvIHNlZSB3aGVyZSB0aGV5JiMzOTtyZSBiZWluZyAqdXNlZCouIFdobyYjMzk7cyByZXF1ZXN0aW5nIG1lbW9yeT8gV2hvJiMzOTtzIHJlbGVhc2luZyBpdD8gV2hhdCBhcmUgdGhlIGNhbGxpbmcgY29udGV4dHM/IFRoaXMgaW5mb3JtYXRpb24gaXMgZnVuZGFtZW50YWwgZm9yIGRlYnVnZ2luZyBhbnkgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLCBvcHRpbWl6aW5nIHRoZSBidWZmZXIgcG9vbCwgb3IgZXZlbiBwcmVkaWN0aW5nIG1lbW9yeSB1c2FnZSBwYXR0ZXJucy4gVGhpcyBhbmFseXNpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBidWZmZXJzIGFyZSBmbG93aW5nIHRocm91Z2ggdGhlIHN5c3RlbSwgaG9wZWZ1bGx5IHJldmVhbGluZyBpbnNpZ2h0cyBpbnRvIGFueSBpbmVmZmljaWVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1idXNfKGFsbG9jfGZyZWUpX2J1ZmZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaHYvY2hhbm5lbC5jPTYxMT1FWFBPUlRfU1lNQk9MX0dQTCh2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZCk7XG4tLVxuZHJpdmVycy9odi9jaGFubmVsLmMtNjEzLS8qKlxuZHJpdmVycy9odi9jaGFubmVsLmM6NjE0OiAqIHZtYnVzX2ZyZWVfYnVmZmVyIC0gcmVsZWFzZSBhIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgdm1idXNfYWxsb2NfYnVmZmVyKCkuXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02MTUtICpcbi0tXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02MTctICogICAgICAgIGZhaWxlZCBhbGxvY2F0aW9uKVxuZHJpdmVycy9odi9jaGFubmVsLmM6NjE4OiAqIEBjaHVua3M6IGNodW5rcyBhcnJheSBmcm9tIHZtYnVzX2FsbG9jX2J1ZmZlcigpLCBvciBOVUxMXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02MTktICogQGNodW5rX2NudDogbnVtYmVyIG9mIGVudHJpZXMgaW4gQGNodW5rc1xuLS1cbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTYyNS0gKi9cbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjYyNjp2b2lkIHZtYnVzX2ZyZWVfYnVmZmVyKHZvaWQgKmFkZHIsIHN0cnVjdCBwYWdlICoqY2h1bmtzLCB1MzIgY2h1bmtfY250KVxuZHJpdmVycy9odi9jaGFubmVsLmMtNjI3LXtcbi0tXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02NDgtfVxuZHJpdmVycy9odi9jaGFubmVsLmM6NjQ5OkVYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2ZyZWVfYnVmZmVyKTtcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY1MC1cbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY1MS0vKipcbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjY1MjogKiB2bWJ1c19sZWFrX2J1ZmZlciAtIHNldCB1cCBhIGJ1ZmZlciB0byBiZSBsZWFrZWQgYnkgdm1idXNfZnJlZV9idWZmZXIoKS5cbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY1My0gKlxuZHJpdmVycy9odi9jaGFubmVsLmMtNjU0LSAqIEBhZGRyOiBidWZmZXIgYWRkcmVzc1xuZHJpdmVycy9odi9jaGFubmVsLmM6NjU1OiAqIEBjaHVua3M6IGNodW5rcyBhcnJheSBmcm9tIHZtYnVzX2FsbG9jX2J1ZmZlcigpXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02NTYtICogQGNodW5rX2NudDogbnVtYmVyIG9mIGVudHJpZXMgaW4gQGNodW5rc1xuLS1cbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY1OS0gKiB0aGUgYnVmZmVyIGlzIGxlYWtlZCBieSBzZXR0aW5nIEBhZGRyIHRvIE5VTEwuIE90aGVyd2lzZSBzZXRcbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjY2MDogKiBAY2h1bmtfY250IHRvIDAgc28gdGhhdCB2bWJ1c19mcmVlX2J1ZmZlcigpIGRvZXMgbm90IHRyeSB0byByZS1lbmNyeXB0XG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02NjEtICogb3IgZnJlZSB0aGUgYnVmZmVyIG1lbW9yeSwgYnV0IHN0aWxsIHJlbGVhc2VzIHRoZSB2bWFwIGFkZHJlc3MgYW5kXG4tLVxuZHJpdmVycy9odi9jaGFubmVsLmM9Njc1PUVYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2xlYWtfYnVmZmVyKTtcbi0tXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02NzctLyoqXG5kcml2ZXJzL2h2L2NoYW5uZWwuYzo2Nzg6ICogdm1idXNfYWxsb2NfYnVmZmVyIC0gYWxsb2NhdGUgYSBob3N0LXZpc2libGUsIHZpcnR1YWxseS1jb250aWd1b3VzIGJ1ZmZlci5cbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY3OS0gKlxuLS1cbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY5NS0gKi9cbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjY5Njp2b2lkICp2bWJ1c19hbGxvY19idWZmZXIoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02OTctXHRcdFx0IHUzMiBzaXplLFxuLS1cbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTc4Ni1cdGt2ZnJlZShwYWdlcyk7XG5kcml2ZXJzL2h2L2NoYW5uZWwuYzo3ODc6XHR2bWJ1c19mcmVlX2J1ZmZlcihOVUxMLCBjaHVua3MsIGNodW5rX2NudCk7XG5kcml2ZXJzL2h2L2NoYW5uZWwuYy03ODgtXHRyZXR1cm4gTlVMTDtcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTc4OS19XG5kcml2ZXJzL2h2L2NoYW5uZWwuYzo3OTA6RVhQT1JUX1NZTUJPTF9HUEwodm1idXNfYWxsb2NfYnVmZmVyKTtcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTc5MS1cbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM9MTMxPXN0YXRpYyB2b2lkIF9fZnJlZV9uZXR2c2NfZGV2aWNlKHN0cnVjdCBuZXR2c2NfZGV2aWNlICpudmRldilcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTM2LVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjEzNzpcdHZtYnVzX2ZyZWVfYnVmZmVyKG52ZGV2LVx1MDAzZXJlY3ZfYnVmLCBudmRldi1cdTAwM2VyZWN2X2J1Zl9jaHVua3MsXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTM4LVx0XHRcdCAgbnZkZXYtXHUwMDNlcmVjdl9idWZfY2h1bmtfY250KTtcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzoxMzk6XHR2bWJ1c19mcmVlX2J1ZmZlcihudmRldi1cdTAwM2VzZW5kX2J1ZiwgbnZkZXYtXHUwMDNlc2VuZF9idWZfY2h1bmtzLFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTE0MC1cdFx0XHQgIG52ZGV2LVx1MDAzZXNlbmRfYnVmX2NodW5rX2NudCk7XG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jPTM2Nz1zdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTM4Ni1cdG5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWYgPVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjM4NzpcdFx0dm1idXNfYWxsb2NfYnVmZmVyKGRldmljZS1cdTAwM2VjaGFubmVsLCBidWZfc2l6ZSxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0zODgtXHRcdFx0XHQgICBcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXJlY3ZfYnVmX2NodW5rcyxcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtNDk2LVx0bmV0X2RldmljZS1cdTAwM2VzZW5kX2J1ZiA9XG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6NDk3Olx0XHR2bWJ1c19hbGxvY19idWZmZXIoZGV2aWNlLVx1MDAzZWNoYW5uZWwsIGJ1Zl9zaXplLFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTQ5OC1cdFx0XHRcdCAgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWZfY2h1bmtzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE4OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDcwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmVhY2hhYmlsaXR5IGluIE15IEZpZWxkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gbWV0aWN1bG91c2x5LCBmb2N1c2luZyBvbiByZWFjaGFiaWxpdHkgYXMgcGVyIHRoZSBvdXRsaW5lZCBzZWN0aW9ucy4gU2VjdGlvbiAyLCB0aGUgJiMzNDtOZWdhdGl2ZSBDcml0ZXJpYSwmIzM0OyBmbGFncyBhIGZldyByZWQgZmxhZ3MuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dDoKCiogICAqKlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToqKiBJIGltbWVkaWF0ZWx5IHplcm8gaW4gb24gdGhlIGltcGxpY2F0aW9ucyBmb3IgdmVuZG9yLXNwZWNpZmljIGNvbXBvbmVudHMgbGlrZSB0aG9zZSBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIGxpc3RlZCwgZXNwZWNpYWxseSB0aG9zZSByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmUgb3Igc3BlY2lmaWMgZHJpdmVycyBub3QgZW11bGF0ZWQgd2l0aGluIHN0YW5kYXJkIFFFTVUuIFRoYXQmIzM5O3MgYSBodWdlIGNvbnN0cmFpbnQuIFdlIGNhbuKAmXQgZnV6eiB3aGF0IGlzbuKAmXQgcHJlc2VudC4KKiAgICoqVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOioqIFRoZSBtZW50aW9uIG9mIGRyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgdGllZCB0byBwaHlzaWNhbCBob3QtdW5wbHVnIG9yIG1hbnVhbCB1bmJpbmRpbmcgYWxzbyBzY3JlYW1zICYjMzk7cG90ZW50aWFsIGZvciBmYWxzZSBwb3NpdGl2ZXMuJiMzOTsgVGhlc2UgcGF0aHMgYXJlIGluaGVyZW50bHkgZGlmZmljdWx0IHRvIHRyaWdnZXIgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgYW5kIHRyeWluZyB0byBmb3JjZSB0aGVtIG1heSBiZSBjb3VudGVycHJvZHVjdGl2ZS4KClRoZW4sIFNlY3Rpb24gMywgdGhlICYjMzQ7UG9zaXRpdmUgQ3JpdGVyaWEsJiMzNDsgZHJpdmVzIHRoZSBwb2ludCBob21lOiByZWFjaGFiaWxpdHkgKmlzKiB0aGUgZ2F0ZS4gV2UmIzM5O3JlIGxpbWl0ZWQgdG8gY29kZSB0aGF0ICpjYW4qIGV4ZWN1dGUgd2l0aGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyDigJMgdGhlIFFFTVUvR0NFIHNldHVwIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcy4gSWYgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgYmFzZWQgb24gdGhlIGNyaXRlcmlhIGluIFNlY3Rpb24gMiwgdGhlIGZ1enppbmcgaXMgYSBuby1nbywgZXZlbiBpZiB0aGUgY29kZSBzZWVtcyBpbnRlcmVzdGluZyBvciBoYXMgZXh0cmEgYXNzZXJ0aW9ucy4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHN5emthbGxlciYjMzk7cyBleGVjdXRpb24gZW52aXJvbm1lbnQuIEl0IHJ1bnMgd2l0aGluIFFFTVUgb3IgR0NFIFZNcy4gSSBhbHJlYWR5IHNlZSB3aGF0JiMzOTtzIGNvbWluZzoKCiogICAqKk5vIEh5cGVyLVY6KiogSSBpbW1lZGlhdGVseSBuZWVkIHRvIGVzdGFibGlzaCB0aGF0IEh5cGVyLVYgaXNu4oCZdCBwcmVzZW50LiBHQ0UgdXNlcyBLVk0sIGFuZCBzdGFuZGFyZCBRRU1VIGVpdGhlciB1c2VzIEtWTSBvciBUQ0cuIEluIHRoZXNlIGVudmlyb25tZW50cywgYHg4Nl9oeXBlcl90eXBlYCBpcyBjbGVhcmx5ICpub3QqIGBYODZfSFlQRVJfTVNfSFlQRVJWYC4gVGh1cywgYGh2X2lzX2h5cGVydl9pbml0aWFsaXplZCgpYCByZXR1cm5zIGBmYWxzZWAuCiogICAqKlZNQnVzIEZhaWw6KiogQmVjYXVzZSBvZiB0aGUgbGFjayBvZiBIeXBlci1WLCB0aGUgYGh2X3ZtYnVzYCBzdWJzeXN0ZW0gZmFpbHMgdG8gaW5pdGlhbGl6ZSwgcmV0dXJuaW5nIC1FTk9ERVYgZHVyaW5nIGJvb3QuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludC4KKiAgICoqTm8gRGV2aWNlczoqKiBDb25zZXF1ZW50bHksIHNpbmNlIFZNQnVzIGlzIG5vdCBwcmVzZW50LCBubyBgaHZfZGV2aWNlYCBpcyBwcm9iZWQsIHdoaWNoIG1lYW5zIG5vIGBuZXR2c2NfcHJvYmVgIGNhbGwsIG5vIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucywgYW5kIGNlcnRhaW5seSBubyB0ZWFyZG93biBmdW5jdGlvbnMgbGlrZSBgbmV0dnNjX3RlYXJkb3duXypfZ3BhZGxgLiBUaGlzIG1lYW5zIHRoZSBgdm1idXNfbGVha19idWZmZXJgIGZ1bmN0aW9uLCBhc3NvY2lhdGVkIHdpdGggdGhlIE1TIEh5cGVyLVYgbmV0d29yayBkcml2ZXIsIHJlbWFpbnMgdW5yZWFjaGFibGUuCgpTbyB0aGUgbWFpbiBxdWVzdGlvbiBpcywgY2FuIHdlIHNvbWVob3cgKnNpbXVsYXRlKiB0aGlzPyBDYW4gd2UgY3JlYXRlIGB2bWJ1c2AgZGV2aWNlcyB0aHJvdWdoIHNvbWUgdmlydHVhbCBidXMgb3IgdXNlcnNwYWNlIGludGVyZmFjZT8gQ2FuIHdlIHJlZ2lzdGVyIG9yIG1vY2sgdGhlc2UgZGV2aWNlcyB0aHJvdWdoIHN5c2ZzLCBuZXRsaW5rLCB1c2IsIGxvb3BiYWNrLCBvciBzb21lIG90aGVyIGludGVyZmFjZT8gSXQmIzM5O3MgdGltZSB0byBleGFtaW5lIHRoZSBjb2RlYmFzZSBmb3IgYW55IHdheSB0byBkbyB0aGlzLiBBIGBncmVwYCBmb3IgYHZtYnVzX2RyaXZlcl9yZWdpc3RlcmAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIHdpbGwgYmUgdGhlIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1idXNfZHJpdmVyX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL2h5cGVydi9oeXBlcnZfZHJtX2Rydi5jPTI0Mz1zdGF0aWMgaW50IF9faW5pdCBodl9kcm1faW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9oeXBlcnYvaHlwZXJ2X2RybV9kcnYuYy0yNTMtXG5kcml2ZXJzL2dwdS9kcm0vaHlwZXJ2L2h5cGVydl9kcm1fZHJ2LmM6MjU0Olx0cmV0ID0gdm1idXNfZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNmh2X2RybV9odl9kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL2h5cGVydi9oeXBlcnZfZHJtX2Rydi5jLTI1NS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9oaWQvaGlkLWh5cGVydi5jPTYyMj1zdGF0aWMgaW50IF9faW5pdCBtb3VzZXZzY19pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9oaWQvaGlkLWh5cGVydi5jLTYyOS1cbmRyaXZlcnMvaGlkL2hpZC1oeXBlcnYuYzo2MzA6XHRyZXQgPSB2bWJ1c19kcml2ZXJfcmVnaXN0ZXIoXHUwMDI2bW91c2V2c2NfZHJ2KTtcbmRyaXZlcnMvaGlkL2hpZC1oeXBlcnYuYy02MzEtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvaHYvaHZfYmFsbG9vbi5jPTIxMjQ9c3RhdGljIGludCBfX2luaXQgaW5pdF9iYWxsb29uX2Rydih2b2lkKVxuZHJpdmVycy9odi9odl9iYWxsb29uLmMtMjEyNS17XG5kcml2ZXJzL2h2L2h2X2JhbGxvb24uYzoyMTI2Olx0cmV0dXJuIHZtYnVzX2RyaXZlcl9yZWdpc3RlcihcdTAwMjZiYWxsb29uX2Rydik7XG5kcml2ZXJzL2h2L2h2X2JhbGxvb24uYy0yMTI3LX1cbi0tXG5kcml2ZXJzL2h2L2h2X3V0aWwuYz03OTc9c3RhdGljIGludCBfX2luaXQgaW5pdF9oeXBlcnZfdXRpbHModm9pZClcbi0tXG5kcml2ZXJzL2h2L2h2X3V0aWwuYy04MDAtXG5kcml2ZXJzL2h2L2h2X3V0aWwuYzo4MDE6XHRyZXR1cm4gdm1idXNfZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNnV0aWxfZHJ2KTtcbmRyaXZlcnMvaHYvaHZfdXRpbC5jLTgwMi19XG4tLVxuZHJpdmVycy9odi92bWJ1c19kcnYuYz0xNDY5PXN0YXRpYyBpbnQgdm1idXNfYnVzX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jLTE1NDYtLyoqXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jOjE1NDc6ICogX192bWJ1c19kcml2ZXJfcmVnaXN0ZXIoKSAtIFJlZ2lzdGVyIGEgdm1idXMmIzM5O3MgZHJpdmVyXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jLTE1NDgtICogQGh2X2RyaXZlcjogUG9pbnRlciB0byBkcml2ZXIgc3RydWN0dXJlIHlvdSB3YW50IHRvIHJlZ2lzdGVyXG4tLVxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0xNTU2LSAqL1xuZHJpdmVycy9odi92bWJ1c19kcnYuYzoxNTU3OmludCBfX3ZtYnVzX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgaHZfZHJpdmVyICpodl9kcml2ZXIsIHN0cnVjdCBtb2R1bGUgKm93bmVyLCBjb25zdCBjaGFyICptb2RfbmFtZSlcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmMtMTU1OC17XG4tLVxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0xNTc3LX1cbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmM6MTU3ODpFWFBPUlRfU1lNQk9MX0dQTChfX3ZtYnVzX2RyaXZlcl9yZWdpc3Rlcik7XG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jLTE1NzktXG4tLVxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0xNTg1LSAqIFVuLXJlZ2lzdGVyIHRoZSBnaXZlbiBkcml2ZXIgdGhhdCB3YXMgcHJldmlvdXMgcmVnaXN0ZXJlZCB3aXRoIGEgY2FsbCB0b1xuZHJpdmVycy9odi92bWJ1c19kcnYuYzoxNTg2OiAqIHZtYnVzX2RyaXZlcl9yZWdpc3RlcigpXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jLTE1ODctICovXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9oeXBlcnYta2V5Ym9hcmQuYz00MjQ9c3RhdGljIGludCBfX2luaXQgaHZfa2JkX2luaXQodm9pZClcbmRyaXZlcnMvaW5wdXQvc2VyaW8vaHlwZXJ2LWtleWJvYXJkLmMtNDI1LXtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vaHlwZXJ2LWtleWJvYXJkLmM6NDI2Olx0cmV0dXJuIHZtYnVzX2RyaXZlcl9yZWdpc3RlcihcdTAwMjZodl9rYmRfZHJ2KTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vaHlwZXJ2LWtleWJvYXJkLmMtNDI3LX1cbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2Rydi5jPTI0ODY9c3RhdGljIGludCBuZXR2c2NfcHJvYmUoc3RydWN0IGh2X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmMtMjYwNS1cdCAqIGlzIGNvbXBsZXRlLiBUaGlzIGlzIGJlY2F1c2UgcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCkgZ2V0c1xuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYzoyNjA2Olx0ICogcmVnaXN0ZXJlZCBiZWZvcmUgdm1idXNfZHJpdmVyX3JlZ2lzdGVyKCkgc28gdGhhdCBjYWxsYmFjayBmdW5jXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2Rydi5jLTI2MDctXHQgKiBpcyBzZXQgYmVmb3JlIHByb2JlIGFuZCB3ZSBkb24mIzM5O3QgbWlzcyBldmVudHMgbGlrZSBORVRERVZfUE9TVF9JTklUXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYz0yODczPXN0YXRpYyBpbnQgX19pbml0IG5ldHZzY19kcnZfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmMtMjg4OS1cbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmM6Mjg5MDpcdHJldCA9IHZtYnVzX2RyaXZlcl9yZWdpc3RlcihcdTAwMjZuZXR2c2NfZHJ2KTtcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmMtMjg5MS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM9NDE2OT1zdGF0aWMgaW50IF9faW5pdCBpbml0X2h2X3BjaV9kcnYodm9pZClcbi0tXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy00MTg3LVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM6NDE4ODpcdHJldHVybiB2bWJ1c19kcml2ZXJfcmVnaXN0ZXIoXHUwMDI2aHZfcGNpX2Rydik7XG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy00MTg5LX1cbi0tXG5kcml2ZXJzL3Njc2kvc3RvcnZzY19kcnYuYz0yMjExPXN0YXRpYyBpbnQgX19pbml0IHN0b3J2c2NfZHJ2X2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3Njc2kvc3RvcnZzY19kcnYuYy0yMjM1LVxuZHJpdmVycy9zY3NpL3N0b3J2c2NfZHJ2LmM6MjIzNjpcdHJldCA9IHZtYnVzX2RyaXZlcl9yZWdpc3RlcihcdTAwMjZzdG9ydnNjX2Rydik7XG5kcml2ZXJzL3Njc2kvc3RvcnZzY19kcnYuYy0yMjM3LVxuLS1cbmRyaXZlcnMvdWlvL3Vpb19odl9nZW5lcmljLmM9NDEzPWh5cGVydl9tb2R1bGVfaW5pdCh2b2lkKVxuZHJpdmVycy91aW8vdWlvX2h2X2dlbmVyaWMuYy00MTQte1xuZHJpdmVycy91aW8vdWlvX2h2X2dlbmVyaWMuYzo0MTU6XHRyZXR1cm4gdm1idXNfZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNmh2X3Vpb19kcnYpO1xuZHJpdmVycy91aW8vdWlvX2h2X2dlbmVyaWMuYy00MTYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTA2MwoJCQkJCQkJb3V0cHV0OiAxMjUKCQkJCQkJCXRob3VnaHRzOiA1NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgSHlwZXItViBEcml2ZXIgQ29kZSBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvZGUgY2hhbmdlIGl0c2VsZi4gSXQgbG9va3MgbGlrZSBhIG5ldyBmdW5jdGlvbiwgYHZtYnVzX2xlYWtfYnVmZmVyKClgLCBoYXMgYmVlbiBpbnRyb2R1Y2VkIGluIGBkcml2ZXJzL2h2L2NoYW5uZWwuY2AuIFRoZSBtb3JlIGludGVyZXN0aW5nIHBhcnQgaXMgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZDogYG5ldHZzY190ZWFyZG93bl9yZWN2X2dwYWRsYCBhbmQgYG5ldHZzY190ZWFyZG93bl9zZW5kX2dwYWRsYCBpbiBgZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jYCBub3cgY2FsbCBgdm1idXNfbGVha19idWZmZXJgIGlmIHRoZSBgdm1idXNfdGVhcmRvd25fZ3BhZGxgIGZ1bmN0aW9uIGZhaWxzLiBUaGlzIGltcGxpZXMgYSBwb3RlbnRpYWwgcmVzb3VyY2UgbGVhayBoYW5kbGluZyBwYXRoIGR1cmluZyBHUEFETCAoR3Vlc3QgUGh5c2ljYWwgQWRkcmVzcyBEZXNjcmlwdG9yIExpc3QpIHRlYXJkb3duLCBsaWtlbHkgcmVsYXRlZCB0byBWTUJ1cyBjaGFubmVsIHRlYXJkb3duIGZhaWx1cmVzLgoKTm93LCBsZXQmIzM5O3MgYXBwbHkgdGhlIGZ1enppbmcgcmVhY2hhYmlsaXR5IGd1aWRlbGluZXMuIFRoZSBrZXkgcGhyYXNlIGhlcmUgaXMgJiMzNDtzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDsgVGhlc2UgZ3VpZGVsaW5lcyBleHBsaWNpdGx5IHN0YXRlIHRoYXQgY29kZSByZXF1aXJpbmcgc3BlY2lmaWMgaGFyZHdhcmUgb3IgaHlwZXJ2aXNvciBlbnZpcm9ubWVudHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIGZ1enppbmcgc2V0dXBzIChsaWtlIFFFTVUvS1ZNIG9yIEdDRSkgc2hvdWxkbiYjMzk7dCBiZSBmdXp6ZWQuIEFuZCB0aGlzIGlzIGV4YWN0bHkgdGhlIHByb2JsZW0hIFRoZSBjb2RlIGluIHF1ZXN0aW9uIGlzIHdpdGhpbiBIeXBlci1WIGd1ZXN0IGRyaXZlcnMuIFNwZWNpZmljYWxseSBgaHZfdm1idXNgIGFuZCBgaHZfbmV0dnNjYC4gVG8gZXZlbiAqcmVhY2gqIHRoaXMgY29kZSwgSSYjMzk7ZCBuZWVkIHRvIGJlIHJ1bm5pbmcgaW5zaWRlIGEgTWljcm9zb2Z0IEh5cGVyLVYgZ3Vlc3QgVk0gd2l0aCB0aGUgTWljcm9zb2Z0IEh5cGVyLVYgaHlwZXJ2aXNvciwgb3IgYW4gQXp1cmUgVk0uIFN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBwYXJ0aWN1bGFybHkgc3l6a2FsbGVyJiMzOTtzIHByZWZlcnJlZCBRRU1VL0tWTSBhbmQgR0NFIHNldHVwcywgKmRvIG5vdCogcHJlc2VudCB0aGlzIGh5cGVydmlzb3IgaW50ZXJmYWNlLiBUaGUgYGh2X2lzX2h5cGVydl9pbml0aWFsaXplZCgpYCBjaGVjayB3aWxsIGZhaWwsIHRoZSBWTUJ1cyB3aWxsIGZhaWwgdG8gaW5pdGlhbGl6ZSwgYW5kIHRoZSByZWxldmFudCBWTUJ1cyBkZXZpY2VzIHdpbGwgbm90IGV2ZW4gYmUgcHJlc2VudCwgbWVhbmluZyB0aGF0IHRoZSBjb2RlIHdvbiYjMzk7dCBldmVyIGJlIHJlYWNoZWQgZHVyaW5nIGZ1enppbmcuCgpUaGVyZWZvcmUsIHRoZSBjb25jbHVzaW9uIGlzIGNsZWFyLiBUaGlzIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIHdpdGhpbiB0aGUgaW50ZW5kZWQgZnV6emluZyBlbnZpcm9ubWVudC4KClNvLCBmb3IgdGhlIHJlY29yZDoKCiogICBgV29ydGhGdXp6aW5nYDogZmFsc2UKKiAgIGBGb2N1c1N5bWJvbHNgOiBcWyBdIChlbXB0eSkKKiAgIGBFbmFibGVDb25maWdzYDogXFsgXSAoZW1wdHkpCiogICBgUmVhc29uaW5nYDogVGhlIG1vZGlmaWVkIGNvZGUgcmVzaWRlcyB3aXRoaW4gdGhlIE1pY3Jvc29mdCBIeXBlci1WIFZNQnVzIGFuZCBIeXBlci1WIG5ldHZzYyBkcml2ZXJzIChgZHJpdmVycy9odi9jaGFubmVsLmNgIGFuZCBgZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jYCkuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBleGVjdXRpb24gYXMgYSBndWVzdCBWTSBvbiB0aGUgTWljcm9zb2Z0IEh5cGVyLVYgaHlwZXJ2aXNvci4gVGhleSBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIG9yIHJlYWNoZWQgaW4gc3RhbmRhcmQgUUVNVS9LVk0gb3IgR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLgoKSSYjMzk7bGwgY2hlY2sgdGhlIHRvb2wgcGFyYW1ldGVycyBmb3IgYHNldC1yZXN1bHRzYCB0byBtYWtlIHN1cmUgdGhpcyBpcyByZWNvcmRlZCBwcm9wZXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBNaWNyb3NvZnQgSHlwZXItViBndWVzdCBkcml2ZXJzIChWTUJ1cyBidWZmZXIgaGFuZGxpbmcgaW4gZHJpdmVycy9odi9jaGFubmVsLmMgYW5kIG5ldHZzYyBHUEFETCB0ZWFyZG93biBlcnJvciBoYW5kbGluZyBpbiBkcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcnVubmluZyBhcyBhIGd1ZXN0IHVuZGVyIHRoZSBNaWNyb3NvZnQgSHlwZXItViBoeXBlcnZpc29yIGFuZCBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgb3IgcHJvYmVkIGluIHN0YW5kYXJkIFFFTVUvS1ZNIG9yIEdDRSBzeXprYWxsZXIgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBNaWNyb3NvZnQgSHlwZXItViBndWVzdCBkcml2ZXJzIChWTUJ1cyBidWZmZXIgaGFuZGxpbmcgaW4gZHJpdmVycy9odi9jaGFubmVsLmMgYW5kIG5ldHZzYyBHUEFETCB0ZWFyZG93biBlcnJvciBoYW5kbGluZyBpbiBkcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcnVubmluZyBhcyBhIGd1ZXN0IHVuZGVyIHRoZSBNaWNyb3NvZnQgSHlwZXItViBoeXBlcnZpc29yIGFuZCBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgb3IgcHJvYmVkIGluIHN0YW5kYXJkIFFFTVUvS1ZNIG9yIEdDRSBzeXprYWxsZXIgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTA6MzkuOTExNTc0NTc2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk4NTM3NDg2NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBNaWNyb3NvZnQgSHlwZXItViBndWVzdCBkcml2ZXJzIChWTUJ1cyBidWZmZXIgaGFuZGxpbmcgaW4gZHJpdmVycy9odi9jaGFubmVsLmMgYW5kIG5ldHZzYyBHUEFETCB0ZWFyZG93biBlcnJvciBoYW5kbGluZyBpbiBkcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcnVubmluZyBhcyBhIGd1ZXN0IHVuZGVyIHRoZSBNaWNyb3NvZnQgSHlwZXItViBoeXBlcnZpc29yIGFuZCBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgb3IgcHJvYmVkIGluIHN0YW5kYXJkIFFFTVUvS1ZNIG9yIEdDRSBzeXprYWxsZXIgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1MDozOS45MTE1Nzg2MDZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODc2NzEwMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzYTE2Yzk4ZjFkZDRlYTYzMTliMmVmNWE2YjczODRlYTk4YjJkMmMwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMDA6NTA6MzggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9odi9jaGFubmVsLmMgYi9kcml2ZXJzL2h2L2NoYW5uZWwuY1xcbmluZGV4IGY0MzcwNjE3ZGVhY2IuLmQ1ZDIwZTMyMjgzMTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9odi9jaGFubmVsLmNcXG4rKysgYi9kcml2ZXJzL2h2L2NoYW5uZWwuY1xcbkBAIC02NDgsNiArNjQ4LDMyIEBAIHZvaWQgdm1idXNfZnJlZV9idWZmZXIodm9pZCAqYWRkciwgc3RydWN0IHBhZ2UgKipjaHVua3MsIHUzMiBjaHVua19jbnQpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodm1idXNfZnJlZV9idWZmZXIpO1xcbiBcXG4rLyoqXFxuKyAqIHZtYnVzX2xlYWtfYnVmZmVyIC0gc2V0IHVwIGEgYnVmZmVyIHRvIGJlIGxlYWtlZCBieSB2bWJ1c19mcmVlX2J1ZmZlcigpLlxcbisgKlxcbisgKiBAYWRkcjogYnVmZmVyIGFkZHJlc3NcXG4rICogQGNodW5rczogY2h1bmtzIGFycmF5IGZyb20gdm1idXNfYWxsb2NfYnVmZmVyKClcXG4rICogQGNodW5rX2NudDogbnVtYmVyIG9mIGVudHJpZXMgaW4gQGNodW5rc1xcbisgKlxcbisgKiBXaGVuIEBjaHVua3MgaXMgTlVMTCB0aGUgYnVmZmVyIGlzIGEgcGxhaW4gdnphbGxvYygpIGFsbG9jYXRpb24gYW5kXFxuKyAqIHRoZSBidWZmZXIgaXMgbGVha2VkIGJ5IHNldHRpbmcgQGFkZHIgdG8gTlVMTC4gT3RoZXJ3aXNlIHNldFxcbisgKiBAY2h1bmtfY250IHRvIDAgc28gdGhhdCB2bWJ1c19mcmVlX2J1ZmZlcigpIGRvZXMgbm90IHRyeSB0byByZS1lbmNyeXB0XFxuKyAqIG9yIGZyZWUgdGhlIGJ1ZmZlciBtZW1vcnksIGJ1dCBzdGlsbCByZWxlYXNlcyB0aGUgdm1hcCBhZGRyZXNzIGFuZFxcbisgKiB0aGUgY2h1bmtzIG1lbW9yeS5cXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGluIGEgY29udGV4dCB3aGVyZSB0aGUgYnVmZmVyIGlzIHN0aWxsXFxuKyAqIGJlaW5nIGFjY2Vzc2VkLiBJdCBtdXN0IG5vdCByZW1vdmUgYW55IGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3NlcyBvZlxcbisgKiB0aGUgYnVmZmVyIG9yIGNoYW5nZSBpdHMgZW5jcnlwdGlvbiBzdGF0dXMuXFxuKyAqL1xcbit2b2lkIHZtYnVzX2xlYWtfYnVmZmVyKHZvaWQgKiphZGRyLCBzdHJ1Y3QgcGFnZSAqKipjaHVua3MsIHUzMiAqY2h1bmtfY250KVxcbit7XFxuK1xcdGlmICgqY2h1bmtzKVxcbitcXHRcXHQqY2h1bmtfY250ID0gMDtcXG4rXFx0ZWxzZVxcbitcXHRcXHQqYWRkciA9IE5VTEw7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwodm1idXNfbGVha19idWZmZXIpO1xcbitcXG4gLyoqXFxuICAqIHZtYnVzX2FsbG9jX2J1ZmZlciAtIGFsbG9jYXRlIGEgaG9zdC12aXNpYmxlLCB2aXJ0dWFsbHktY29udGlndW91cyBidWZmZXIuXFxuICAqXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYyBiL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuY1xcbmluZGV4IGZjNjU0OGIxNmM5MWUuLjVjOTVkN2QyNDE2MzEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jXFxuKysrIGIvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jXFxuQEAgLTMxNiw2ICszMTYsOSBAQCBzdGF0aWMgdm9pZCBuZXR2c2NfdGVhcmRvd25fcmVjdl9ncGFkbChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXFxuIFxcdFxcdCAqIHJhdGhlciB0aGFuIGNvbnRpbnVlIGFuZCBhIGJ1Z2Noa1xcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKHJldCAhPSAwKSB7XFxuK1xcdFxcdFxcdHZtYnVzX2xlYWtfYnVmZmVyKFxcdTAwMjZuZXRfZGV2aWNlLVxcdTAwM2VyZWN2X2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlcmVjdl9idWZfY2h1bmtzLFxcbitcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZuZXRfZGV2aWNlLVxcdTAwM2VyZWN2X2J1Zl9jaHVua19jbnQpO1xcbiBcXHRcXHRcXHRuZXRkZXZfZXJyKG5kZXYsXFxuIFxcdFxcdFxcdFxcdCAgIFxcXCJ1bmFibGUgdG8gdGVhcmRvd24gcmVjZWl2ZSBidWZmZXIncyBncGFkbFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdHJldHVybjtcXG5AQCAtMzM3LDYgKzM0MCw5IEBAIHN0YXRpYyB2b2lkIG5ldHZzY190ZWFyZG93bl9zZW5kX2dwYWRsKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcXG4gXFx0XFx0ICogcmF0aGVyIHRoYW4gY29udGludWUgYW5kIGEgYnVnY2hrXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAocmV0ICE9IDApIHtcXG4rXFx0XFx0XFx0dm1idXNfbGVha19idWZmZXIoXFx1MDAyNm5ldF9kZXZpY2UtXFx1MDAzZXNlbmRfYnVmLFxcbitcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZuZXRfZGV2aWNlLVxcdTAwM2VzZW5kX2J1Zl9jaHVua3MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNm5ldF9kZXZpY2UtXFx1MDAzZXNlbmRfYnVmX2NodW5rX2NudCk7XFxuIFxcdFxcdFxcdG5ldGRldl9lcnIobmRldixcXG4gXFx0XFx0XFx0XFx0ICAgXFxcInVuYWJsZSB0byB0ZWFyZG93biBzZW5kIGJ1ZmZlcidzIGdwYWRsXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h5cGVydi5oIGIvaW5jbHVkZS9saW51eC9oeXBlcnYuaFxcbmluZGV4IDllMTA5ZDkxYWExNDMuLjZmNjBjZTU5MjRiYWYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9oeXBlcnYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvaHlwZXJ2LmhcXG5AQCAtMTIyMCw2ICsxMjIwLDEwIEBAIGV4dGVybiB2b2lkICp2bWJ1c19hbGxvY19idWZmZXIoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXFxuIFxcbiBleHRlcm4gdm9pZCB2bWJ1c19mcmVlX2J1ZmZlcih2b2lkICphZGRyLCBzdHJ1Y3QgcGFnZSAqKmNodW5rcywgdTMyIGNodW5rX2NudCk7XFxuIFxcbitleHRlcm4gdm9pZCB2bWJ1c19sZWFrX2J1ZmZlcih2b2lkICoqYWRkcixcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IHBhZ2UgKioqY2h1bmtzLFxcbitcXHRcXHRcXHQgICAgICB1MzIgKmNodW5rX2NudCk7XFxuK1xcbiB2b2lkIHZtYnVzX3Jlc2V0X2NoYW5uZWxfY2Ioc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwpO1xcbiBcXG4gZXh0ZXJuIGludCB2bWJ1c19yZWN2cGFja2V0KHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1MDo0MS40MDAwNjQ1OTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU4MzY1MjQ1OTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBNaWNyb3NvZnQgSHlwZXItViBndWVzdCBkcml2ZXJzIChWTUJ1cyBidWZmZXIgaGFuZGxpbmcgaW4gZHJpdmVycy9odi9jaGFubmVsLmMgYW5kIG5ldHZzYyBHUEFETCB0ZWFyZG93biBlcnJvciBoYW5kbGluZyBpbiBkcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcnVubmluZyBhcyBhIGd1ZXN0IHVuZGVyIHRoZSBNaWNyb3NvZnQgSHlwZXItViBoeXBlcnZpc29yIGFuZCBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgb3IgcHJvYmVkIGluIHN0YW5kYXJkIFFFTVUvS1ZNIG9yIEdDRSBzeXprYWxsZXIgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNhMTZjOThmMWRkNGVhNjMxOWIyZWY1YTZiNzM4NGVhOThiMmQyYzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDAwOjUwOjM4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9odi9jaGFubmVsLmMgYi9kcml2ZXJzL2h2L2NoYW5uZWwuY1xuaW5kZXggZjQzNzA2MTdkZWFjYi4uZDVkMjBlMzIyODMxOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaHYvY2hhbm5lbC5jXG4rKysgYi9kcml2ZXJzL2h2L2NoYW5uZWwuY1xuQEAgLTY0OCw2ICs2NDgsMzIgQEAgdm9pZCB2bWJ1c19mcmVlX2J1ZmZlcih2b2lkICphZGRyLCBzdHJ1Y3QgcGFnZSAqKmNodW5rcywgdTMyIGNodW5rX2NudClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodm1idXNfZnJlZV9idWZmZXIpO1xuIFxuKy8qKlxuKyAqIHZtYnVzX2xlYWtfYnVmZmVyIC0gc2V0IHVwIGEgYnVmZmVyIHRvIGJlIGxlYWtlZCBieSB2bWJ1c19mcmVlX2J1ZmZlcigpLlxuKyAqXG4rICogQGFkZHI6IGJ1ZmZlciBhZGRyZXNzXG4rICogQGNodW5rczogY2h1bmtzIGFycmF5IGZyb20gdm1idXNfYWxsb2NfYnVmZmVyKClcbisgKiBAY2h1bmtfY250OiBudW1iZXIgb2YgZW50cmllcyBpbiBAY2h1bmtzXG4rICpcbisgKiBXaGVuIEBjaHVua3MgaXMgTlVMTCB0aGUgYnVmZmVyIGlzIGEgcGxhaW4gdnphbGxvYygpIGFsbG9jYXRpb24gYW5kXG4rICogdGhlIGJ1ZmZlciBpcyBsZWFrZWQgYnkgc2V0dGluZyBAYWRkciB0byBOVUxMLiBPdGhlcndpc2Ugc2V0XG4rICogQGNodW5rX2NudCB0byAwIHNvIHRoYXQgdm1idXNfZnJlZV9idWZmZXIoKSBkb2VzIG5vdCB0cnkgdG8gcmUtZW5jcnlwdFxuKyAqIG9yIGZyZWUgdGhlIGJ1ZmZlciBtZW1vcnksIGJ1dCBzdGlsbCByZWxlYXNlcyB0aGUgdm1hcCBhZGRyZXNzIGFuZFxuKyAqIHRoZSBjaHVua3MgbWVtb3J5LlxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGluIGEgY29udGV4dCB3aGVyZSB0aGUgYnVmZmVyIGlzIHN0aWxsXG4rICogYmVpbmcgYWNjZXNzZWQuIEl0IG11c3Qgbm90IHJlbW92ZSBhbnkga2VybmVsIHZpcnR1YWwgYWRkcmVzc2VzIG9mXG4rICogdGhlIGJ1ZmZlciBvciBjaGFuZ2UgaXRzIGVuY3J5cHRpb24gc3RhdHVzLlxuKyAqL1xuK3ZvaWQgdm1idXNfbGVha19idWZmZXIodm9pZCAqKmFkZHIsIHN0cnVjdCBwYWdlICoqKmNodW5rcywgdTMyICpjaHVua19jbnQpXG4re1xuK1x0aWYgKCpjaHVua3MpXG4rXHRcdCpjaHVua19jbnQgPSAwO1xuK1x0ZWxzZVxuK1x0XHQqYWRkciA9IE5VTEw7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2xlYWtfYnVmZmVyKTtcbitcbiAvKipcbiAgKiB2bWJ1c19hbGxvY19idWZmZXIgLSBhbGxvY2F0ZSBhIGhvc3QtdmlzaWJsZSwgdmlydHVhbGx5LWNvbnRpZ3VvdXMgYnVmZmVyLlxuICAqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jIGIvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jXG5pbmRleCBmYzY1NDhiMTZjOTFlLi41Yzk1ZDdkMjQxNjMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jXG4rKysgYi9kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmNcbkBAIC0zMTYsNiArMzE2LDkgQEAgc3RhdGljIHZvaWQgbmV0dnNjX3RlYXJkb3duX3JlY3ZfZ3BhZGwoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxuIFx0XHQgKiByYXRoZXIgdGhhbiBjb250aW51ZSBhbmQgYSBidWdjaGtcbiBcdFx0ICovXG4gXHRcdGlmIChyZXQgIT0gMCkge1xuK1x0XHRcdHZtYnVzX2xlYWtfYnVmZmVyKFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWYsXG4rXHRcdFx0XHRcdCAgXHUwMDI2bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1Zl9jaHVua3MsXG4rXHRcdFx0XHRcdCAgXHUwMDI2bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1Zl9jaHVua19jbnQpO1xuIFx0XHRcdG5ldGRldl9lcnIobmRldixcbiBcdFx0XHRcdCAgIFwidW5hYmxlIHRvIHRlYXJkb3duIHJlY2VpdmUgYnVmZmVyJ3MgZ3BhZGxcXG5cIik7XG4gXHRcdFx0cmV0dXJuO1xuQEAgLTMzNyw2ICszNDAsOSBAQCBzdGF0aWMgdm9pZCBuZXR2c2NfdGVhcmRvd25fc2VuZF9ncGFkbChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4gXHRcdCAqIHJhdGhlciB0aGFuIGNvbnRpbnVlIGFuZCBhIGJ1Z2Noa1xuIFx0XHQgKi9cbiBcdFx0aWYgKHJldCAhPSAwKSB7XG4rXHRcdFx0dm1idXNfbGVha19idWZmZXIoXHUwMDI2bmV0X2RldmljZS1cdTAwM2VzZW5kX2J1ZixcbitcdFx0XHRcdFx0ICBcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmX2NodW5rcyxcbitcdFx0XHRcdFx0ICBcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmX2NodW5rX2NudCk7XG4gXHRcdFx0bmV0ZGV2X2VycihuZGV2LFxuIFx0XHRcdFx0ICAgXCJ1bmFibGUgdG8gdGVhcmRvd24gc2VuZCBidWZmZXIncyBncGFkbFxcblwiKTtcbiBcdFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oeXBlcnYuaCBiL2luY2x1ZGUvbGludXgvaHlwZXJ2LmhcbmluZGV4IDllMTA5ZDkxYWExNDMuLjZmNjBjZTU5MjRiYWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h5cGVydi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h5cGVydi5oXG5AQCAtMTIyMCw2ICsxMjIwLDEwIEBAIGV4dGVybiB2b2lkICp2bWJ1c19hbGxvY19idWZmZXIoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXG4gXG4gZXh0ZXJuIHZvaWQgdm1idXNfZnJlZV9idWZmZXIodm9pZCAqYWRkciwgc3RydWN0IHBhZ2UgKipjaHVua3MsIHUzMiBjaHVua19jbnQpO1xuIFxuK2V4dGVybiB2b2lkIHZtYnVzX2xlYWtfYnVmZmVyKHZvaWQgKiphZGRyLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBwYWdlICoqKmNodW5rcyxcbitcdFx0XHQgICAgICB1MzIgKmNodW5rX2NudCk7XG4rXG4gdm9pZCB2bWJ1c19yZXNldF9jaGFubmVsX2NiKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsKTtcbiBcbiBleHRlcm4gaW50IHZtYnVzX3JlY3ZwYWNrZXQoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1MDo0MS40MDAwNjY0OTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDYwNTk5MjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEh5cGVyLVYgRHJpdmVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBicmVhayBkb3duIHRoZSBjaGFuZ2VzOiB0aGUgbW9kaWZpZWQgZmlsZXMgYXJlIGBkcml2ZXJzL2h2L2NoYW5uZWwuY2AsIGBkcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmNgLCBhbmQgYGluY2x1ZGUvbGludXgvaHlwZXJ2LmhgLiBUaGUgY29yZSBhZGRpdGlvbiBzZWVtcyB0byBiZSBgdm1idXNfbGVha19idWZmZXJgLCBpbnRyb2R1Y2VkIGluIHRoZSB2bWJ1cyBkcml2ZXIsIGFuZCB0aGVuIGVtcGxveWVkIHdpdGhpbiB0aGUgYG5ldHZzY190ZWFyZG93bl9yZWN2X2dwYWRsYCBhbmQgYG5ldHZzY190ZWFyZG93bl9zZW5kX2dwYWRsYCBmdW5jdGlvbnMgaW4gdGhlIG5ldHZzYyBkcml2ZXIuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucywgc3BlY2lmaWNhbGx5IGFyb3VuZCBIeXBlci1WIGFuZCB0aGUgdm1idXMuIEknbSB0aGlua2luZzogaXMgdGhpcyBzdXNjZXB0aWJsZSB0byBmdXp6aW5nIGluIGEgc3RhbmRhcmQgZW52aXJvbm1lbnQsIGxpa2UgUUVNVSBvciBHQ0Ugd2l0aCBzeXprYWxsZXI/IFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGhlcmUgaXMgcmVhY2hhYmlsaXR5LiBDYW4gd2UgYWN0dWFsbHkgdHJpZ2dlciB0aGVzZSBjaGFuZ2VzIGFuZCBmdXp6IEh5cGVyLVYgZHJpdmVycyAoVk1CVVMvSFlQRVJWL0hZUEVSVl9ORVQpIHVzaW5nIGV4aXN0aW5nIHNldHVwcz8gSSBuZWVkIHRvIGNoZWNrIGlmIFFFTVUgcHJvdmlkZXMgc3VmZmljaWVudCBIeXBlci1WIGVtdWxhdGlvbiBmb3IgdGhpcy4gRG9lcyBRRU1VIGV2ZW4gaGF2ZSB0aGUgXCJodi12bWJ1c1wiIGVubGlnaHRlbm1lbnQsIG9yIGRvZXMgc3l6a2FsbGVyIHNwZWNpZmljYWxseSB0YXJnZXQgSHlwZXItViBkaXJlY3RseT8gT3IgaXMgdGhpcyBhIGh5cGVydmlzb3Itc3BlY2lmaWMgYnVzIHRoYXQgbmVjZXNzaXRhdGVzIHJ1bm5pbmcgb24gYSBNaWNyb3NvZnQgQXp1cmUvSHlwZXItViBlbnZpcm9ubWVudD9cblxuQmVmb3JlIGRpdmluZyBkZWVwZXIgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIGNvbmZpcm06XG5cbjEuICBDYW4gd2UgYWNjZXNzIEh5cGVyLVYvVk1CdXMgaW4gYSBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudD8gSSBzZWVtIHRvIHJlY2FsbCBhIGB2bWJ1cy1icmlkZ2VgIFFFTVUgZGV2aWNlLCBidXQgaXMgaXQgZW5vdWdoP1xuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGF0IGNyaXRlcmlhIGlzIG1ldCBieSB0aGUgY29udGV4dCBvZiBTRUNUSU9OIDIgYW5kIDMuXG5cbkZpbmFsbHksIEknbGwgbGV2ZXJhZ2UgbXkgdXN1YWwgY29kZSBhbmFseXNpcyB0b29scywgbGlrZWx5IGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCwgdG8gdW5kZXJzdGFuZCB0aGUgd2lkZXIgY29udGV4dCBvZiB0aGVzZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzQ4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTA6NDcuNDYwNjY4MDkzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDAsXG4gIFwiTGluZUNvdW50XCI6IDU1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDA6XFx0XFx0XFx0fVxcbiAzMDE6XFx0XFx0XFx0bmV0X2RldmljZS1cXHUwMDNlc2VuZF9zZWN0aW9uX2NudCA9IDA7XFxuIDMwMjpcXHRcXHR9XFxuIDMwMzpcXHR9XFxuIDMwNDpcXHRcXG4gMzA1OlxcdHN0YXRpYyB2b2lkIG5ldHZzY190ZWFyZG93bl9yZWN2X2dwYWRsKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcXG4gMzA2OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0X2RldmljZSxcXG4gMzA3OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gMzA4OlxcdHtcXG4gMzA5OlxcdFxcdGludCByZXQ7XFxuIDMxMDpcXHRcXG4gMzExOlxcdFxcdGlmIChuZXRfZGV2aWNlLVxcdTAwM2VyZWN2X2J1Zl9ncGFkbF9oYW5kbGUuZ3BhZGxfaGFuZGxlKSB7XFxuIDMxMjpcXHRcXHRcXHRyZXQgPSB2bWJ1c190ZWFyZG93bl9ncGFkbChkZXZpY2UtXFx1MDAzZWNoYW5uZWwsXFxuIDMxMzpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlcmVjdl9idWZfZ3BhZGxfaGFuZGxlKTtcXG4gMzE0OlxcdFxcbiAzMTU6XFx0XFx0XFx0LyogSWYgd2UgZmFpbGVkIGhlcmUsIHdlIG1pZ2h0IGFzIHdlbGwgcmV0dXJuIGFuZCBoYXZlIGEgbGVha1xcbiAzMTY6XFx0XFx0XFx0ICogcmF0aGVyIHRoYW4gY29udGludWUgYW5kIGEgYnVnY2hrXFxuIDMxNzpcXHRcXHRcXHQgKi9cXG4gMzE4OlxcdFxcdFxcdGlmIChyZXQgIT0gMCkge1xcbiAzMTk6XFx0XFx0XFx0XFx0dm1idXNfbGVha19idWZmZXIoXFx1MDAyNm5ldF9kZXZpY2UtXFx1MDAzZXJlY3ZfYnVmLFxcbiAzMjA6XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlcmVjdl9idWZfY2h1bmtzLFxcbiAzMjE6XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlcmVjdl9idWZfY2h1bmtfY250KTtcXG4gMzIyOlxcdFxcdFxcdFxcdG5ldGRldl9lcnIobmRldixcXG4gMzIzOlxcdFxcdFxcdFxcdFxcdCAgIFxcXCJ1bmFibGUgdG8gdGVhcmRvd24gcmVjZWl2ZSBidWZmZXIncyBncGFkbFxcXFxuXFxcIik7XFxuIDMyNDpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDMyNTpcXHRcXHRcXHR9XFxuIDMyNjpcXHRcXHR9XFxuIDMyNzpcXHR9XFxuIDMyODpcXHRcXG4gMzI5OlxcdHN0YXRpYyB2b2lkIG5ldHZzY190ZWFyZG93bl9zZW5kX2dwYWRsKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcXG4gMzMwOlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0X2RldmljZSxcXG4gMzMxOlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gMzMyOlxcdHtcXG4gMzMzOlxcdFxcdGludCByZXQ7XFxuIDMzNDpcXHRcXG4gMzM1OlxcdFxcdGlmIChuZXRfZGV2aWNlLVxcdTAwM2VzZW5kX2J1Zl9ncGFkbF9oYW5kbGUuZ3BhZGxfaGFuZGxlKSB7XFxuIDMzNjpcXHRcXHRcXHRyZXQgPSB2bWJ1c190ZWFyZG93bl9ncGFkbChkZXZpY2UtXFx1MDAzZWNoYW5uZWwsXFxuIDMzNzpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlc2VuZF9idWZfZ3BhZGxfaGFuZGxlKTtcXG4gMzM4OlxcdFxcbiAzMzk6XFx0XFx0XFx0LyogSWYgd2UgZmFpbGVkIGhlcmUsIHdlIG1pZ2h0IGFzIHdlbGwgcmV0dXJuIGFuZCBoYXZlIGEgbGVha1xcbiAzNDA6XFx0XFx0XFx0ICogcmF0aGVyIHRoYW4gY29udGludWUgYW5kIGEgYnVnY2hrXFxuIDM0MTpcXHRcXHRcXHQgKi9cXG4gMzQyOlxcdFxcdFxcdGlmIChyZXQgIT0gMCkge1xcbiAzNDM6XFx0XFx0XFx0XFx0dm1idXNfbGVha19idWZmZXIoXFx1MDAyNm5ldF9kZXZpY2UtXFx1MDAzZXNlbmRfYnVmLFxcbiAzNDQ6XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlc2VuZF9idWZfY2h1bmtzLFxcbiAzNDU6XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlc2VuZF9idWZfY2h1bmtfY250KTtcXG4gMzQ2OlxcdFxcdFxcdFxcdG5ldGRldl9lcnIobmRldixcXG4gMzQ3OlxcdFxcdFxcdFxcdFxcdCAgIFxcXCJ1bmFibGUgdG8gdGVhcmRvd24gc2VuZCBidWZmZXIncyBncGFkbFxcXFxuXFxcIik7XFxuIDM0ODpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDM0OTpcXHRcXHRcXHR9XFxuIDM1MDpcXHRcXHR9XFxuIDM1MTpcXHR9XFxuIDM1MjpcXHRcXG4gMzUzOlxcdGludCBuZXR2c2NfYWxsb2NfcmVjdl9jb21wX3Jpbmcoc3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldF9kZXZpY2UsIHUzMiBxX2lkeClcXG4gMzU0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTA6NDcuNDYwNzc3NzIzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAyMjY4OTY3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zOlxuXG4qKkludmVzdGlnYXRpbmcgR1BBREwgVGVhcmRvd24gaW4gTmV0dnNjKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGVzZSBHUEFETHMgaW4gdGhlIE5ldHZzYyBkcml2ZXIsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhleSdyZSB0b3JuIGRvd24uICBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyB0aGUgY2FsbHMgdG8gYG5ldHZzY190ZWFyZG93bl9yZWN2X2dwYWRsYCBhbmQgYG5ldHZzY190ZWFyZG93bl9zZW5kX2dwYWRsYC4gVGhpcyBpcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCDigJMgdW5kZXJzdGFuZGluZyAqd2hlcmUqIHRoZXNlIHRlYXJkb3duIGZ1bmN0aW9ucyBhcmUgYmVpbmcgaW52b2tlZCB3aWxsIHBhaW50IGEgcGljdHVyZSBvZiB3aGVuLCBhbmQgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzLCB0aGUgR1BBRExzIGFyZSBjb25zaWRlcmVkIG5vIGxvbmdlciB2YWxpZCBhbmQgbmVlZCB0byBiZSBjbGVhbmVkIHVwLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBhcHByb2FjaDsgSSdtIG5vdCBqdXN0IGJyb3dzaW5nIHRoZSBjb2RlIGFpbWxlc3NseS4gSSdtIGFmdGVyIHRoZSBkaXJlY3QgY2FsbCBzaXRlcy4gRnJvbSB0aGVyZSwgSSdsbCBiZSBhYmxlIHRvIGluZmVyIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGUgdGVhcmRvd24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MzYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUwOjUwLjQ4MzQ2OTA0NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODk0Mzk3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXR2c2NfdGVhcmRvd25fKHJlY3Z8c2VuZClfZ3BhZGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvaHlwZXJ2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM9MjU0PXN0YXRpYyB2b2lkIG5ldHZzY19yZXZva2Vfc2VuZF9idWYoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTMwNC1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6MzA1OnN0YXRpYyB2b2lkIG5ldHZzY190ZWFyZG93bl9yZWN2X2dwYWRsKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMzA2LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0X2RldmljZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0zMjgtXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjMyOTpzdGF0aWMgdm9pZCBuZXR2c2NfdGVhcmRvd25fc2VuZF9ncGFkbChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTMzMC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldF9kZXZpY2UsXFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM9MzY3PXN0YXRpYyBpbnQgbmV0dnNjX2luaXRfYnVmKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy01ODUtXFx0bmV0dnNjX3Jldm9rZV9zZW5kX2J1ZihkZXZpY2UsIG5ldF9kZXZpY2UsIG5kZXYpO1xcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzo1ODY6XFx0bmV0dnNjX3RlYXJkb3duX3JlY3ZfZ3BhZGwoZGV2aWNlLCBuZXRfZGV2aWNlLCBuZGV2KTtcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6NTg3OlxcdG5ldHZzY190ZWFyZG93bl9zZW5kX2dwYWRsKGRldmljZSwgbmV0X2RldmljZSwgbmRldik7XFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTU4OC1cXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYz03MjY9dm9pZCBuZXR2c2NfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtNzYzLVxcdC8qIE11c3QgZG8gdGhlIEdQQURMIHRlYXJkb3duIGFmdGVyIGNoYW5uZWwgaXMgY2xvc2VkICovXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjc2NDpcXHRuZXR2c2NfdGVhcmRvd25fcmVjdl9ncGFkbChkZXZpY2UsIG5ldF9kZXZpY2UsIG5kZXYpO1xcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzo3NjU6XFx0bmV0dnNjX3RlYXJkb3duX3NlbmRfZ3BhZGwoZGV2aWNlLCBuZXRfZGV2aWNlLCBuZGV2KTtcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtNzY2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1MDo1MC41MzI0MTY5ODNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDA4Mzk3NjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBrZXJuZWwgY29kZSBiYXNlZCBvbiB0aG9zZSBrZXl3b3JkczpcblxuKipEaXNzZWN0aW5nIHRoZSBWTUJ1cyBDaGFubmVsIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nLCBsZXQncyB6ZXJvIGluIG9uIGBkcml2ZXJzL2h2L2NoYW5uZWwuY2AuIE15IGltbWVkaWF0ZSBpbnRlcmVzdCBpcyB0cmlnZ2VyZWQgYnkgdGhlIG1lbnRpb24gb2YgYHZtYnVzX2FsbG9jX2J1ZmZlcmAsIGB2bWJ1c19mcmVlX2J1ZmZlcmAsIGFuZCBgdm1idXNfbGVha19idWZmZXJgLiBNeSBzcGlkZXktc2Vuc2UgdGVsbHMgbWUgdGhlc2UgYXJlIGxpa2VseSB0aGUgY29yZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIG1lbW9yeSBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIGFuZCB3aGF0IGxvb2tzIGxpa2UgYSBwb3RlbnRpYWwgYnVmZmVyIGxlYWsgc2NlbmFyaW8sIHdpdGhpbiB0aGUgVk1CdXMgY2hhbm5lbCBoYW5kbGluZyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNoYW5uZWwgZHJpdmVyIGludGVyYWN0cyB3aXRoIG1lbW9yeSwgYW5kIHRoZXNlIHRocmVlIGZ1bmN0aW9ucyBhcmUgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIHdhbnQgdG8gdHJhY2UgdGhlIGxpZmV0aW1lIG9mIGEgYnVmZmVyIHdpdGhpbiB0aGlzIHN5c3RlbSwgdW5kZXJzdGFuZCBob3cgaXTigJlzIGFsbG9jYXRlZCwgdXNlZCwgYW5kLCBjcnVjaWFsbHksIGhvdyBpdHMgcmVzb3VyY2VzIGFyZSByZWxlYXNlZC4gVGhlIHByZXNlbmNlIG9mIGEgXCJsZWFrXCIgZnVuY3Rpb24gaXMgYSByZWQgZmxhZywgaGludGluZyBhdCBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IG9yIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlLCBzbyBteSBjdXJpb3NpdHkgaXMgcGlxdWVkLiBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgd2hlcmUgYHZtYnVzX2FsbG9jX2J1ZmZlcmAgaXMgY2FsbGVkLCB3aGF0IHBhcmFtZXRlcnMgYXJlIHBhc3NlZCB0byBpdCwgYW5kIGhvdyB0aGUgcmV0dXJuZWQgYnVmZmVyIGlzIHVzZWQuIFRoZW4sIEknbGwgdHJhY2UgdGhyb3VnaCB0aGUgY29ycmVzcG9uZGluZyBjYWxscyB0byBgdm1idXNfZnJlZV9idWZmZXJgIHRvIGVuc3VyZSB0aGF0IGl0J3MgYmVpbmcgcGFpcmVkIGNvcnJlY3RseSB3aXRoIGFsbG9jYXRpb25zLiBGaW5hbGx5LCBJJ2xsIGFuYWx5emUgYHZtYnVzX2xlYWtfYnVmZmVyYCBhbmQgc2VlIHdoYXQgdHJpZ2dlcnMgaXRzIGV4ZWN1dGlvbiBhbmQgd2hlcmUgaXQncyBjYWxsZWQgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBsZWFrIGFuZCBpdHMgcG90ZW50aWFsIGltcGFjdC4gSXTigJlzIGFsc28gaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgbWVtb3J5IG1vZGVsIHRoYXQgdW5kZXJwaW5zIHRoZXNlIGZ1bmN0aW9uczsgSSdtIGV4cGVjdGluZyBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGEgcHJpdmF0ZSBoZWFwIG1hbmFnZWQgYnkgdGhlIFZNQnVzIGRyaXZlciwgYW5kIEkgbmVlZCB0byBhc3Nlc3MgaXRzIHRocmVhZCBzYWZldHkgYW5kIHBvdGVudGlhbCBmb3IgY29uY3VycmVuY3kgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjkzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTA6NTMuNTQwODE3MTI0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaHYvY2hhbm5lbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYzMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYzMDpcXHRcXHRpZiAoIWNodW5rcykge1xcbiA2MzE6XFx0XFx0XFx0dmZyZWUoYWRkcik7XFxuIDYzMjpcXHRcXHRcXHRyZXR1cm47XFxuIDYzMzpcXHRcXHR9XFxuIDYzNDpcXHRcXG4gNjM1OlxcdFxcdHZ1bm1hcChhZGRyKTtcXG4gNjM2OlxcdFxcbiA2Mzc6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNodW5rX2NudDsgaSsrKSB7XFxuIDYzODpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHZhZGRyID1cXG4gNjM5OlxcdFxcdFxcdFxcdCh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhjaHVua3NbaV0pO1xcbiA2NDA6XFx0XFx0XFx0dW5zaWduZWQgaW50IG9yZGVyID0gZm9saW9fb3JkZXIocGFnZV9mb2xpbyhjaHVua3NbaV0pKTtcXG4gNjQxOlxcdFxcbiA2NDI6XFx0XFx0XFx0aWYgKHNldF9tZW1vcnlfZW5jcnlwdGVkKHZhZGRyLCAxVSBcXHUwMDNjXFx1MDAzYyBvcmRlcikpXFxuIDY0MzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNjQ0OlxcdFxcdFxcdF9fZnJlZV9wYWdlcyhjaHVua3NbaV0sIG9yZGVyKTtcXG4gNjQ1OlxcdFxcdH1cXG4gNjQ2OlxcdFxcbiA2NDc6XFx0XFx0a3ZmcmVlKGNodW5rcyk7XFxuIDY0ODpcXHR9XFxuIDY0OTpcXHRFWFBPUlRfU1lNQk9MX0dQTCh2bWJ1c19mcmVlX2J1ZmZlcik7XFxuIDY1MDpcXHRcXG4gNjUxOlxcdC8qKlxcbiA2NTI6XFx0ICogdm1idXNfbGVha19idWZmZXIgLSBzZXQgdXAgYSBidWZmZXIgdG8gYmUgbGVha2VkIGJ5IHZtYnVzX2ZyZWVfYnVmZmVyKCkuXFxuIDY1MzpcXHQgKlxcbiA2NTQ6XFx0ICogQGFkZHI6IGJ1ZmZlciBhZGRyZXNzXFxuIDY1NTpcXHQgKiBAY2h1bmtzOiBjaHVua3MgYXJyYXkgZnJvbSB2bWJ1c19hbGxvY19idWZmZXIoKVxcbiA2NTY6XFx0ICogQGNodW5rX2NudDogbnVtYmVyIG9mIGVudHJpZXMgaW4gQGNodW5rc1xcbiA2NTc6XFx0ICpcXG4gNjU4OlxcdCAqIFdoZW4gQGNodW5rcyBpcyBOVUxMIHRoZSBidWZmZXIgaXMgYSBwbGFpbiB2emFsbG9jKCkgYWxsb2NhdGlvbiBhbmRcXG4gNjU5OlxcdCAqIHRoZSBidWZmZXIgaXMgbGVha2VkIGJ5IHNldHRpbmcgQGFkZHIgdG8gTlVMTC4gT3RoZXJ3aXNlIHNldFxcbiA2NjA6XFx0ICogQGNodW5rX2NudCB0byAwIHNvIHRoYXQgdm1idXNfZnJlZV9idWZmZXIoKSBkb2VzIG5vdCB0cnkgdG8gcmUtZW5jcnlwdFxcbiA2NjE6XFx0ICogb3IgZnJlZSB0aGUgYnVmZmVyIG1lbW9yeSwgYnV0IHN0aWxsIHJlbGVhc2VzIHRoZSB2bWFwIGFkZHJlc3MgYW5kXFxuIDY2MjpcXHQgKiB0aGUgY2h1bmtzIG1lbW9yeS5cXG4gNjYzOlxcdCAqXFxuIDY2NDpcXHQgKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgaW4gYSBjb250ZXh0IHdoZXJlIHRoZSBidWZmZXIgaXMgc3RpbGxcXG4gNjY1OlxcdCAqIGJlaW5nIGFjY2Vzc2VkLiBJdCBtdXN0IG5vdCByZW1vdmUgYW55IGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3NlcyBvZlxcbiA2NjY6XFx0ICogdGhlIGJ1ZmZlciBvciBjaGFuZ2UgaXRzIGVuY3J5cHRpb24gc3RhdHVzLlxcbiA2Njc6XFx0ICovXFxuIDY2ODpcXHR2b2lkIHZtYnVzX2xlYWtfYnVmZmVyKHZvaWQgKiphZGRyLCBzdHJ1Y3QgcGFnZSAqKipjaHVua3MsIHUzMiAqY2h1bmtfY250KVxcbiA2Njk6XFx0e1xcbiA2NzA6XFx0XFx0aWYgKCpjaHVua3MpXFxuIDY3MTpcXHRcXHRcXHQqY2h1bmtfY250ID0gMDtcXG4gNjcyOlxcdFxcdGVsc2VcXG4gNjczOlxcdFxcdFxcdCphZGRyID0gTlVMTDtcXG4gNjc0OlxcdH1cXG4gNjc1OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2xlYWtfYnVmZmVyKTtcXG4gNjc2OlxcdFxcbiA2Nzc6XFx0LyoqXFxuIDY3ODpcXHQgKiB2bWJ1c19hbGxvY19idWZmZXIgLSBhbGxvY2F0ZSBhIGhvc3QtdmlzaWJsZSwgdmlydHVhbGx5LWNvbnRpZ3VvdXMgYnVmZmVyLlxcbiA2Nzk6XFx0ICpcXG4gNjgwOlxcdCAqIEBjaGFubmVsOiB0aGUgY2hhbm5lbCB0aGUgYnVmZmVyIHdpbGwgYmUgYXR0YWNoZWQgdG9cXG4gNjgxOlxcdCAqIEBzaXplOiByZXF1ZXN0ZWQgYnVmZmVyIHNpemUgaW4gYnl0ZXMgKHdpbGwgYmUgcm91bmRlZCB1cCB0byBQQUdFX1NJWkUpXFxuIDY4MjpcXHQgKiBAY2h1bmtzX291dDogb24gc3VjY2Vzcywgc2V0IHRvIHRoZSBhcnJheSBvZiB1bmRlcmx5aW5nIGNodW5rcywgb3IgTlVMTCB3aGVuXFxuIDY4MzpcXHQgKiAgICAgICAgICAgICAgdGhlIGJ1ZmZlciB3YXMgYWxsb2NhdGVkIHdpdGggdnphbGxvYygpXFxuIDY4NDpcXHQgKiBAY2h1bmtfY250X291dDogb24gc3VjY2Vzcywgc2V0IHRvIHRoZSBudW1iZXIgb2YgY2h1bmtzXFxuIDY4NTpcXHQgKlxcbiA2ODY6XFx0ICogQnVmZmVycyBub3QgcmVxdWlyaW5nIGRlY3J5cHRpb24gYXJlIGFsbG9jYXRlZCB3aXRoIHZ6YWxsb2MoKS5cXG4gNjg3OlxcdCAqXFxuIDY4ODpcXHQgKiBCdWZmZXJzIHJlcXVpcmluZyBkZWNyeXB0aW9uIGFyZSBhbGxvY2F0ZWQgYXMgYSBzZXJpZXMgb2ZcXG4gNjg5OlxcdCAqIHBoeXNpY2FsbHktY29udGlndW91cyBjaHVua3MsIHN0YXJ0aW5nIGF0IE1BWF9QQUdFX09SREVSIGFuZCBmYWxsaW5nIGJhY2sgdG9cXG4gNjkwOlxcdCAqIHNtYWxsZXIgb3JkZXJzIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4gRWFjaCBjaHVuayBpcyB0cmFuc2l0aW9uZWQgdG9cXG4gNjkxOlxcdCAqIGhvc3QtdmlzaWJsZSB2aWEgc2V0X21lbW9yeV9kZWNyeXB0ZWQoKSBvbiBpdHMgZGlyZWN0LW1hcCBhZGRyZXNzLCB0aGVuIGFsbFxcbiA2OTI6XFx0ICogY2h1bmtzIGFyZSBjb21iaW5lZCBpbnRvIGEgdmlydHVhbGx5LWNvbnRpZ3VvdXMgcmFuZ2UgdmlhIHZtYXAoKS5cXG4gNjkzOlxcdCAqXFxuIDY5NDpcXHQgKiBSZXR1cm46IHRoZSBidWZmZXIncyB2aXJ0dWFsIGFkZHJlc3MsIG9yIE5VTEwgb24gZmFpbHVyZS5cXG4gNjk1OlxcdCAqL1xcbiA2OTY6XFx0dm9pZCAqdm1idXNfYWxsb2NfYnVmZmVyKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLFxcbiA2OTc6XFx0XFx0XFx0XFx0IHUzMiBzaXplLFxcbiA2OTg6XFx0XFx0XFx0XFx0IHN0cnVjdCBwYWdlICoqKmNodW5rc19vdXQsXFxuIDY5OTpcXHRcXHRcXHRcXHQgdTMyICpjaHVua19jbnRfb3V0KVxcbiA3MDA6XFx0e1xcbiA3MDE6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IFBGTl9VUChzaXplKTtcXG4gNzAyOlxcdFxcdHVuc2lnbmVkIGxvbmcgcmVtYWluaW5nID0gbnJfcGFnZXM7XFxuIDcwMzpcXHRcXHR1bnNpZ25lZCBsb25nIHBhZ2VfaWR4ID0gMDtcXG4gNzA0OlxcdFxcdHN0cnVjdCBwYWdlICoqY2h1bmtzID0gTlVMTDtcXG4gNzA1OlxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZXMgPSBOVUxMO1xcbiA3MDY6XFx0XFx0aW50IG9yZGVyID0gTUFYX1BBR0VfT1JERVI7XFxuIDcwNzpcXHRcXHR1MzIgY2h1bmtfY250ID0gMDtcXG4gNzA4OlxcdFxcdHZvaWQgKmFkZHI7XFxuIDcwOTpcXHRcXHR1MzIgaTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTA6NTMuNTQwOTE5NDI0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ3NTgyMDM1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLY29uZmlnIElucXVpcnk6IEh5cGVyLVYgRHJpdmVycyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgZ292ZXJuIHRoZSBIeXBlci1WIGRyaXZlcnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGRyaXZlcnMgcmVzaWRpbmcgd2l0aGluIGBkcml2ZXJzL2h2L2AgYW5kLCBtb3JlIHByZWNpc2VseSwgdGhvc2UgbmVzdGVkIHVuZGVyIGBkcml2ZXJzL25ldC9oeXBlcnYvYC4gTXkgdXN1YWwgYXBwcm9hY2ggaGVyZSBpcyB0byBsZXZlcmFnZSB0aGUgS2NvbmZpZyBzZWFyY2ggbWVjaGFuaXNtcyDigJMgdGhhdCdzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IHZhcmlhYmxlcyBhbmQgdW5kZXJzdGFuZCB0aGVpciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgcG90ZW50aWFsIG1lYW5pbmdzIHdpdGhpbiB0aGUgYnJvYWRlciBrZXJuZWwgY29udGV4dC4gVGltZSB0byBkaXZlIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDAwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1MDo1Ni4wMTY3NDI3OTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNTQ5MTM0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFlQRVJWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaHYvS2NvbmZpZz0zPW1lbnUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIGd1ZXN0IHN1cHBvcnRcXFwiXFxuZHJpdmVycy9odi9LY29uZmlnLTQtXFxuZHJpdmVycy9odi9LY29uZmlnOjU6Y29uZmlnIEhZUEVSVlxcbmRyaXZlcnMvaHYvS2NvbmZpZy02LVxcdGJvb2wgXFxcIk1pY3Jvc29mdCBIeXBlci1WIGNvcmUgaHlwZXJ2aXNvciBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9odi9LY29uZmlnLTE2LVxcbmRyaXZlcnMvaHYvS2NvbmZpZzoxNzpjb25maWcgSFlQRVJWX1ZUTF9NT0RFXFxuZHJpdmVycy9odi9LY29uZmlnLTE4LVxcdGJvb2wgXFxcIkVuYWJsZSBMaW51eCB0byBib290IGluIFZUTCBjb250ZXh0XFxcIlxcbi0tXFxuZHJpdmVycy9odi9LY29uZmlnLTQyLVxcbmRyaXZlcnMvaHYvS2NvbmZpZzo0Mzpjb25maWcgSFlQRVJWX1RJTUVSXFxuZHJpdmVycy9odi9LY29uZmlnLTQ0LVxcdGRlZl9ib29sIEhZUEVSViBcXHUwMDI2XFx1MDAyNiBYODZcXG5kcml2ZXJzL2h2L0tjb25maWctNDUtXFxuZHJpdmVycy9odi9LY29uZmlnOjQ2OmNvbmZpZyBIWVBFUlZfVVRJTFNcXG5kcml2ZXJzL2h2L0tjb25maWctNDctXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIFV0aWxpdGllcyBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2h2L0tjb25maWctNTItXFxuZHJpdmVycy9odi9LY29uZmlnOjUzOmNvbmZpZyBIWVBFUlZfQkFMTE9PTlxcbmRyaXZlcnMvaHYvS2NvbmZpZy01NC1cXHR0cmlzdGF0ZSBcXFwiTWljcm9zb2Z0IEh5cGVyLVYgQmFsbG9vbiBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2h2L0tjb25maWctNTktXFxuZHJpdmVycy9odi9LY29uZmlnOjYwOmNvbmZpZyBIWVBFUlZfVk1CVVNcXG5kcml2ZXJzL2h2L0tjb25maWctNjEtXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIFZNQnVzIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0yNzE9Y29uZmlnIFNFUklPX09MUENfQVBTUFxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI4MC1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MjgxOmNvbmZpZyBIWVBFUlZfS0VZQk9BUkRcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjgyLVxcdHRyaXN0YXRlIFxcXCJNaWNyb3NvZnQgU3ludGhldGljIEtleWJvYXJkIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWc6Mjpjb25maWcgSFlQRVJWX05FVFxcbmRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIHZpcnR1YWwgbmV0d29yayBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3Njc2kvS2NvbmZpZz01Nzg9Y29uZmlnIFhFTl9TQ1NJX0ZST05URU5EXFxuLS1cXG5kcml2ZXJzL3Njc2kvS2NvbmZpZy01ODctXFxuZHJpdmVycy9zY3NpL0tjb25maWc6NTg4OmNvbmZpZyBIWVBFUlZfU1RPUkFHRVxcbmRyaXZlcnMvc2NzaS9LY29uZmlnLTU4OS1cXHR0cmlzdGF0ZSBcXFwiTWljcm9zb2Z0IEh5cGVyLVYgdmlydHVhbCBzdG9yYWdlIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTA6NTYuNzUyMjQ0NzYyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MDc1MzgwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEh5cGVyLVYgRHJpdmVyIEJ1aWxkIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGNoYW5uZWwuY2AgYW5kIGBuZXR2c2MuY2AgZ2V0IGNvbXBpbGVkIGludG8gdGhlIEh5cGVyLVYgZHJpdmVycy4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgTWFrZWZpbGVzLiBJJ2xsIHN0YXJ0IHdpdGggYGRyaXZlcnMvaHYvTWFrZWZpbGVgIGFuZCBgZHJpdmVycy9uZXQvaHlwZXJ2L01ha2VmaWxlYC4gVGhlc2UgYXJlIHRoZSBsb2dpY2FsIHBsYWNlcyB0byBmaW5kIHRoZSBidWlsZCBydWxlcywgZGVwZW5kZW5jaWVzLCBhbmQgdWx0aW1hdGVseSwgdGhlIGNvbXBpbGVyIGZsYWdzIHVzZWQgZm9yIHRoZXNlIHNwZWNpZmljIG1vZHVsZXMgd2l0aGluIHRoZSBIeXBlci1WIHN1YnN5c3RlbS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBleHBsaWNpdCBjb21waWxhdGlvbiB0YXJnZXRzIGZvciB0aGVzZSBmaWxlcyBvciwgbW9yZSBsaWtlbHksIGluY2x1c2lvbiBvZiBicm9hZGVyIGJ1aWxkIHJ1bGVzIHRoYXQgZW5jb21wYXNzIHRoZW0uIEknbGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBvYmplY3QgZmlsZXMgYXJlIGdlbmVyYXRlZCwgdGhlIGxpYnJhcmllcyB0aGV5IGxpbmsgYWdhaW5zdCwgYW5kIGhvdyB0aGV5IHVsdGltYXRlbHkgYmVjb21lIHBhcnQgb2YgdGhlIGxhcmdlciBgaHZgIG9yIGBoeXBlcnZgIG1vZHVsZXMuIExldCdzIHNlZSB3aGF0IHRoZSBNYWtlZmlsZXMgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzgyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTA6NTkuMzU5Nzg0ODM5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk5NzM3NzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoYW5uZWxcXFxcLm98bmV0dnNjXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2hvc3QxeC9NYWtlZmlsZT0yPWhvc3QxeC15ID0gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvaG9zdDF4L01ha2VmaWxlLTctXFx0Y2RtYS5vIFxcXFxcXG5kcml2ZXJzL2dwdS9ob3N0MXgvTWFrZWZpbGU6ODpcXHRjaGFubmVsLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2hvc3QxeC9NYWtlZmlsZS05LVxcdGpvYi5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvaHYvTWFrZWZpbGU9MTE9aHZfdm1idXMteSA6PSB2bWJ1c19kcnYubyBcXFxcXFxuZHJpdmVycy9odi9NYWtlZmlsZToxMjpcXHRcXHQgaHYubyBjb25uZWN0aW9uLm8gY2hhbm5lbC5vIFxcXFxcXG5kcml2ZXJzL2h2L01ha2VmaWxlLTEzLVxcdFxcdCBjaGFubmVsX21nbXQubyByaW5nX2J1ZmZlci5vIGh2X3RyYWNlLm9cXG4tLVxcbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpZHR2L01ha2VmaWxlPTU9ZHZiLXZpZHR2LWJyaWRnZS1vYmpzIDo9IHZpZHR2X2JyaWRnZS5vIHZpZHR2X2NvbW1vbi5vIHZpZHR2X3RzLm8gdmlkdHZfcHNpLm8gXFxcXFxcbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpZHR2L01ha2VmaWxlOjY6XFx0XFx0XFx0IHZpZHR2X3Blcy5vIHZpZHR2X3MzMDJtLm8gdmlkdHZfY2hhbm5lbC5vIHZpZHR2X211eC5vXFxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdmlkdHYvTWFrZWZpbGUtNy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL01ha2VmaWxlPTU9b2JqLSQoQ09ORklHX01JQ1JPU09GVF9NQU5BKSArPSBtYW5hLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9NYWtlZmlsZTo2Om1hbmEtb2JqcyA6PSBnZG1hX21haW4ubyBzaG1fY2hhbm5lbC5vIGh3X2NoYW5uZWwubyBtYW5hX2VuLm8gbWFuYV9ldGh0b29sLm8gbWFuYV9icGYub1xcbi0tXFxuZHJpdmVycy9uZXQvaHlwZXJ2L01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvaHlwZXJ2L01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0hZUEVSVl9ORVQpICs9IGh2X25ldHZzYy5vXFxuZHJpdmVycy9uZXQvaHlwZXJ2L01ha2VmaWxlLTMtXFxuZHJpdmVycy9uZXQvaHlwZXJ2L01ha2VmaWxlOjQ6aHZfbmV0dnNjLXkgOj0gbmV0dnNjX2Rydi5vIG5ldHZzYy5vIHJuZGlzX2ZpbHRlci5vIG5ldHZzY190cmFjZS5vIG5ldHZzY19icGYub1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlPTI9YXRoOWsteSArPVxcdGJlYWNvbi5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZS05LVxcdFxcdGFudGVubmEubyBcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlOjEwOlxcdFxcdGNoYW5uZWwub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZS0xMS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9NYWtlZmlsZT0yMz1icmNtc21hYy15IDo9IFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9NYWtlZmlsZS0yNy1cXHRhbnRzZWwubyBcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL01ha2VmaWxlOjI4OlxcdGNoYW5uZWwubyBcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL01ha2VmaWxlLTI5LVxcdG1haW4ubyBcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L01ha2VmaWxlPTExPW10NzYteSA6PSBcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9NYWtlZmlsZS0xMi1cXHRtbWlvLm8gdXRpbC5vIHRyYWNlLm8gZG1hLm8gbWFjODAyMTEubyBkZWJ1Z2ZzLm8gZWVwcm9tLm8gXFxcXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvTWFrZWZpbGU6MTM6XFx0dHgubyBhZ2ctcngubyBtY3UubyB3ZWQubyBzY2FuLm8gY2hhbm5lbC5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9NYWtlZmlsZS0xNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTE6MDAuNzU5NTI4OTE2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0NTcxNzU3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBkZWVwIGluIGtlcm5lbCBkZXZlbG9wbWVudDpcblxuKipFeGFtaW5pbmcgSHlwZXItViBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBIeXBlci1WIGRyaXZlcnMuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYEtjb25maWdgIGZpbGVzIOKAkyB0aGV5J3JlIHRoZSBoZWFydCBvZiB0aGUgYnVpbGQgc3lzdGVtJ3MgbG9naWMuIEkga25vdyBJJ2xsIGJlIHN0YXJ0aW5nIGJ5IGNyb3NzLXJlZmVyZW5jaW5nIGBkcml2ZXJzL2h2L0tjb25maWdgIGFuZCBgZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWdgLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGV5J3JlIHN0cnVjdHVyZWQgYW5kIHJlbGF0ZWQuIEFyZSB0aGVyZSBjb21tb24gZGVwZW5kZW5jaWVzIG9yIHNoYXJlZCBzZXR0aW5ncz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBjb25zb2xpZGF0aW9uIG9yIGltcHJvdmVtZW50PyBJIGV4cGVjdCB0aGUgZmlyc3Qgb25lIHRvIGNvbnRhaW4gdGhlIGNvcmUgSFYgZGVmaW5pdGlvbnMgYW5kIG9wdGlvbnMsIGFuZCB0aGUgc2Vjb25kIHRvIGluY2x1ZGUgdGhlIG5ldHdvcmtpbmctc3BlY2lmaWMgY29uZmlndXJhdGlvbi4gVGltZSB0byBkaWcgaW4gYW5kIG1hcCBvdXQgdGhlc2UgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFRoaXMgc2hvdWxkIGJlIHF1aWNrLCB0aG91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MTIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1MTowNC4yMTY3MDY5N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2h2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdG1lbnUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIGd1ZXN0IHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBIWVBFUlZcXG4gICA2OlxcdFxcdGJvb2wgXFxcIk1pY3Jvc29mdCBIeXBlci1WIGNvcmUgaHlwZXJ2aXNvciBzdXBwb3J0XFxcIlxcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiAoWDg2IFxcdTAwMjZcXHUwMDI2IFg4Nl9MT0NBTF9BUElDIFxcdTAwMjZcXHUwMDI2IEhZUEVSVklTT1JfR1VFU1QpIFxcXFxcXG4gICA4OlxcdFxcdFxcdHx8IChBUk02NCBcXHUwMDI2XFx1MDAyNiAhQ1BVX0JJR19FTkRJQU4pXFxuICAgOTpcXHRcXHRzZWxlY3QgUEFSQVZJUlRcXG4gIDEwOlxcdFxcdHNlbGVjdCBYODZfSFZfQ0FMTEJBQ0tfVkVDVE9SIGlmIFg4NlxcbiAgMTE6XFx0XFx0c2VsZWN0IE9GX0VBUkxZX0ZMQVRUUkVFIGlmIE9GXFxuICAxMjpcXHRcXHRzZWxlY3QgSVJRX01TSV9MSUIgaWYgWDg2XFxuICAxMzpcXHRcXHRoZWxwXFxuICAxNDpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBydW4gTGludXggYXMgYSBIeXBlci1WIGNsaWVudCBvcGVyYXRpbmdcXG4gIDE1OlxcdFxcdCAgc3lzdGVtLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgSFlQRVJWX1ZUTF9NT0RFXFxuICAxODpcXHRcXHRib29sIFxcXCJFbmFibGUgTGludXggdG8gYm9vdCBpbiBWVEwgY29udGV4dFxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gKFg4Nl82NCBcXHUwMDI2XFx1MDAyNiBIQVZFX1NUQVRJQ19DQUxMKSB8fCBBUk02NFxcbiAgMjA6XFx0XFx0ZGVwZW5kcyBvbiBIWVBFUlZcXG4gIDIxOlxcdFxcdGRlcGVuZHMgb24gU01QXFxuICAyMjpcXHRcXHRkZWZhdWx0IG5cXG4gIDIzOlxcdFxcdGhlbHBcXG4gIDI0OlxcdFxcdCAgVmlydHVhbCBTZWN1cmUgTW9kZSAoVlNNKSBpcyBhIHNldCBvZiBoeXBlcnZpc29yIGNhcGFiaWxpdGllcyBhbmRcXG4gIDI1OlxcdFxcdCAgZW5saWdodGVubWVudHMgb2ZmZXJlZCB0byBob3N0IGFuZCBndWVzdCBwYXJ0aXRpb25zIHdoaWNoIGVuYWJsZXNcXG4gIDI2OlxcdFxcdCAgdGhlIGNyZWF0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIG5ldyBzZWN1cml0eSBib3VuZGFyaWVzIHdpdGhpblxcbiAgMjc6XFx0XFx0ICBvcGVyYXRpbmcgc3lzdGVtIHNvZnR3YXJlLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRcXHQgIFZTTSBhY2hpZXZlcyBhbmQgbWFpbnRhaW5zIGlzb2xhdGlvbiB0aHJvdWdoIFZpcnR1YWwgVHJ1c3QgTGV2ZWxzXFxuICAzMDpcXHRcXHQgIChWVExzKS4gVmlydHVhbCBUcnVzdCBMZXZlbHMgYXJlIGhpZXJhcmNoaWNhbCwgd2l0aCBoaWdoZXIgbGV2ZWxzXFxuICAzMTpcXHRcXHQgIGJlaW5nIG1vcmUgcHJpdmlsZWdlZCB0aGFuIGxvd2VyIGxldmVscy4gVlRMMCBpcyB0aGUgbGVhc3QgcHJpdmlsZWdlZFxcbiAgMzI6XFx0XFx0ICBsZXZlbCwgYW5kIGN1cnJlbnRseSBvbmx5IG90aGVyIGxldmVsIHN1cHBvcnRlZCBpcyBWVEwyLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBidWlsZCBhIExpbnV4IGtlcm5lbCB0byBydW4gYXQgYSBWVEwgb3RoZXIgdGhhblxcbiAgMzU6XFx0XFx0ICB0aGUgbm9ybWFsIFZUTDAsIHdoaWNoIGN1cnJlbnRseSBpcyBvbmx5IFZUTDIuICBUaGlzIG9wdGlvblxcbiAgMzY6XFx0XFx0ICBpbml0aWFsaXplcyB0aGUga2VybmVsIHRvIHJ1biBpbiBWVEwyLCBhbmQgYWRkcyB0aGUgYWJpbGl0eSB0byBib290XFxuICAzNzpcXHRcXHQgIHNlY29uZGFyeSBDUFVzIGRpcmVjdGx5IGludG8gNjQtYml0IGNvbnRleHQgYXMgcmVxdWlyZWQgZm9yIFZUTHMgb3RoZXJcXG4gIDM4OlxcdFxcdCAgdGhhbiAwLiAgQSBrZXJuZWwgYnVpbHQgd2l0aCB0aGlzIG9wdGlvbiBtdXN0IHJ1biBhdCBWVEwyLCBhbmQgd2lsbFxcbiAgMzk6XFx0XFx0ICBub3QgcnVuIGFzIGEgbm9ybWFsIGd1ZXN0LlxcbiAgNDA6XFx0XFxuICA0MTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE5cXG4gIDQyOlxcdFxcbiAgNDM6XFx0Y29uZmlnIEhZUEVSVl9USU1FUlxcbiAgNDQ6XFx0XFx0ZGVmX2Jvb2wgSFlQRVJWIFxcdTAwMjZcXHUwMDI2IFg4NlxcbiAgNDU6XFx0XFxuICA0NjpcXHRjb25maWcgSFlQRVJWX1VUSUxTXFxuICA0NzpcXHRcXHR0cmlzdGF0ZSBcXFwiTWljcm9zb2Z0IEh5cGVyLVYgVXRpbGl0aWVzIGRyaXZlclxcXCJcXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gSFlQRVJWX1ZNQlVTIFxcdTAwMjZcXHUwMDI2IENPTk5FQ1RPUiBcXHUwMDI2XFx1MDAyNiBOTFNcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gIDUwOlxcdFxcdGhlbHBcXG4gIDUxOlxcdFxcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIGVuYWJsZSB0aGUgSHlwZXItViBVdGlsaXRpZXMuXFxuICA1MjpcXHRcXG4gIDUzOlxcdGNvbmZpZyBIWVBFUlZfQkFMTE9PTlxcbiAgNTQ6XFx0XFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIEJhbGxvb24gZHJpdmVyXFxcIlxcbiAgNTU6XFx0XFx0ZGVwZW5kcyBvbiBIWVBFUlZfVk1CVVNcXG4gIDU2OlxcdFxcdHNlbGVjdCBQQUdFX1JFUE9SVElOR1xcbiAgNTc6XFx0XFx0aGVscFxcbiAgNTg6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gZW5hYmxlIEh5cGVyLVYgQmFsbG9vbiBkcml2ZXIuXFxuICA1OTpcXHRcXG4gIDYwOlxcdGNvbmZpZyBIWVBFUlZfVk1CVVNcXG4gIDYxOlxcdFxcdHRyaXN0YXRlIFxcXCJNaWNyb3NvZnQgSHlwZXItViBWTUJ1cyBkcml2ZXJcXFwiXFxuICA2MjpcXHRcXHRkZXBlbmRzIG9uIEhZUEVSVlxcbiAgNjM6XFx0XFx0ZGVmYXVsdCBIWVBFUlZcXG4gIDY0OlxcdFxcdHNlbGVjdCBTWVNGQiBpZiBFRkkgXFx1MDAyNlxcdTAwMjYgIUhZUEVSVl9WVExfTU9ERVxcbiAgNjU6XFx0XFx0aGVscFxcbiAgNjY6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gZW5hYmxlIEh5cGVyLVYgVm1idXMgZHJpdmVyLlxcbiAgNjc6XFx0XFxuICA2ODpcXHRjb25maWcgTVNIVl9ST09UXFxuICA2OTpcXHRcXHR0cmlzdGF0ZSBcXFwiTWljcm9zb2Z0IEh5cGVyLVYgcm9vdCBwYXJ0aXRpb24gc3VwcG9ydFxcXCJcXG4gIDcwOlxcdFxcdGRlcGVuZHMgb24gSFlQRVJWIFxcdTAwMjZcXHUwMDI2IChYODZfNjQgfHwgQVJNNjQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUxOjA0LjIxNjc3ODk2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MTkyMDYzMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgSHlwZXItViBOZXR3b3JraW5nIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBIeXBlci1WIG5ldHdvcmsgZHJpdmVycy4gU3BlY2lmaWNhbGx5LCBJJ20gaGVhZGluZyBvdmVyIHRvIGBkcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIHN1YnN5c3RlbSBhcmUgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNvbnRyb2xsYWJsZSwgd2hhdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYW5kIGhvdyB0aGUgdmFyaW91cyBmZWF0dXJlcyBpbnRlcmFjdCB3aXRoIG9uZSBhbm90aGVyLiBUaGlzIGZpbGUgd2lsbCB0ZWxsIG1lIGhvdyB0aGUgdXNlciBoYXMgY29uZmlndXJlZCB0aGlzIHBhcnRpY3VsYXIgc3Vic3lzdGVtLCBhbmQgSSB3aWxsIGJlIGFibGUgdG8gdGVsbCB3aGF0IGNob2ljZXMgdGhleSBoYXZlIG1hZGUgZm9yIHRoaXMgcGFydCBvZiB0aGUgZHJpdmVyLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgYXJjaGl0ZWN0dXJlIGFuZCBvcHRpb25zLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBuZXR3b3JrIHN0YWNrLiBVbmRlcnN0YW5kaW5nIHRoaXMgS2NvbmZpZyBmaWxlIGlzIHRoZSBmaXJzdCBzdGVwIHRvd2FyZCByZWFsbHkgZ3Jhc3BpbmcgdGhlIGNhcGFiaWxpdGllcyBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGUgSHlwZXItViBuZXR3b3JrIGRyaXZlcnMuIEZyb20gaGVyZSBJIGNhbiBzdGFydCB0byBmb2xsb3cgdGhlIGxpbmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE4NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTE6MDcuMTM1OTg3MTUyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgSFlQRVJWX05FVFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIHZpcnR1YWwgbmV0d29yayBkcml2ZXJcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIEhZUEVSVl9WTUJVU1xcbiAgIDU6XFx0XFx0c2VsZWN0IFVDUzJfU1RSSU5HXFxuICAgNjpcXHRcXHRzZWxlY3QgTkxTXFxuICAgNzpcXHRcXHRoZWxwXFxuICAgODpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBlbmFibGUgdGhlIEh5cGVyLVYgdmlydHVhbCBuZXR3b3JrIGRyaXZlci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTE6MDcuMTM2MDQwNzUyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNDU3MDcyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBIeXBlci1WIFJlYWNoYWJpbGl0eSBpbiBGdXp6aW5nIEVudmlyb25tZW50cyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIEkgY2FuIGFjdHVhbGx5IHJlYWNoIEh5cGVyLVYgY29tcG9uZW50cyBsaWtlIHRoZSBWTUJ1cyBhbmQgSFlQRVJWX05FVCB3aXRoaW4gZnV6emluZyBlbnZpcm9ubWVudHMg4oCTIHNwZWNpZmljYWxseSwgUUVNVSBhbmQgR0NFJ3MgU3l6a2FsbGVyIHNldHVwcy4gQmVmb3JlIGRpdmluZyBpbiwgSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgSHlwZXItViBvcGVyYXRlcy4gKkhvdyBkb2VzIHRoZSBoeXBlcnZpc29yIHdvcmssIGZ1bmRhbWVudGFsbHk/KiBBaCwgcmlnaHQsIEh5cGVyLVYgaXMgTWljcm9zb2Z0J3MgaHlwZXJ2aXNvci4gSWYgSSdtIHJ1bm5pbmcgYSBndWVzdCBPUyAqdW5kZXIqIEh5cGVyLVYsIHRoZSBzeXN0ZW0gc2hvdWxkIGJlIGFibGUgdG8gZGV0ZWN0IHRoaXMgdGhyb3VnaCBhIENQVUlEIGNoZWNrIHZpYSBgaHlwZXJ2X2luaXQoKWAuIE5vdywgSSBuZWVkIHRvIGZvY3VzIG9uIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgcHJvYmluZy4gTGV0J3Mgc2VlIGhvdyBgdm1idXNfZHJ2LmNgIGhhbmRsZXMgdGhhdC4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU2OCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUxOjA5LjM4MTc1MTI2NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4ODY2NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX2luaXR8c3Vic3lzX2luaXRjYWxsfHZtYnVzX2J1c19pbml0fGh5cGVydl9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaHYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaHYvaHZfYmFsbG9vbi5jPTIxMjQ9c3RhdGljIGludCBfX2luaXQgaW5pdF9iYWxsb29uX2Rydih2b2lkKVxcbi0tXFxuZHJpdmVycy9odi9odl9iYWxsb29uLmMtMjEyOC1cXG5kcml2ZXJzL2h2L2h2X2JhbGxvb24uYzoyMTI5Om1vZHVsZV9pbml0KGluaXRfYmFsbG9vbl9kcnYpO1xcbmRyaXZlcnMvaHYvaHZfYmFsbG9vbi5jLTIxMzAtXFxuLS1cXG5kcml2ZXJzL2h2L2h2X2NvbW1vbi5jPTM4PUVYUE9SVF9TWU1CT0xfR1BMKGh2X2N1cnJfcGFydGl0aW9uX3R5cGUpO1xcbi0tXFxuZHJpdmVycy9odi9odl9jb21tb24uYy00My0gKiBidWlsdCBvbmx5IHdoZW4gQ09ORklHX0hZUEVSViBpcyBkZWZpbmVkLiAgQnV0IG9uIHg4NixcXG5kcml2ZXJzL2h2L2h2X2NvbW1vbi5jOjQ0OiAqIG1zX2h5cGVydl9pbml0X3BsYXRmb3JtKCkgaXMgYnVpbHQgZXZlbiB3aGVuIENPTkZJR19IWVBFUlYgaXMgbm90XFxuZHJpdmVycy9odi9odl9jb21tb24uYy00NS0gKiBkZWZpbmVkLCBhbmQgaXQgdXNlcyB0aGVzZSB0aHJlZSB2YXJpYWJsZXMuICBTbyBtYXJrIHRoZW0gYXMgX193ZWFrXFxuZHJpdmVycy9odi9odl9jb21tb24uYy00Ni0gKiBoZXJlLCBhbGxvd2luZyBmb3IgYW4gb3ZlcnJpZGluZyBkZWZpbml0aW9uIGluIHRoZSBtb2R1bGUgY29udGFpbmluZ1xcbmRyaXZlcnMvaHYvaHZfY29tbW9uLmM6NDc6ICogbXNfaHlwZXJ2X2luaXRfcGxhdGZvcm0oKS5cXG5kcml2ZXJzL2h2L2h2X2NvbW1vbi5jLTQ4LSAqL1xcbi0tXFxuZHJpdmVycy9odi9odl91dGlsLmM9ODA0PXN0YXRpYyB2b2lkIGV4aXRfaHlwZXJ2X3V0aWxzKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2h2L2h2X3V0aWwuYy04MTAtXFxuZHJpdmVycy9odi9odl91dGlsLmM6ODExOm1vZHVsZV9pbml0KGluaXRfaHlwZXJ2X3V0aWxzKTtcXG5kcml2ZXJzL2h2L2h2X3V0aWwuYy04MTItbW9kdWxlX2V4aXQoZXhpdF9oeXBlcnZfdXRpbHMpO1xcbi0tXFxuZHJpdmVycy9odi9oeXBlcnZfdm1idXMuaD0xMjY9c3RydWN0IGh2X3Blcl9jcHVfY29udGV4dCB7XFxuLS1cXG5kcml2ZXJzL2h2L2h5cGVydl92bWJ1cy5oLTE1NC1cXHQgKiBWTSwgc28gcG9zdF9tc2dfcGFnZSAod2hpY2ggaXMgZGVjcnlwdGVkIGluIGh2X3N5bmljX2FsbG9jKCkpIGlzXFxuZHJpdmVycy9odi9oeXBlcnZfdm1idXMuaDoxNTU6XFx0ICogaW50cm9kdWNlZCBmb3IgdGhpcyBwdXJwb3NlLiBTZWUgaHlwZXJ2X2luaXQoKSBmb3IgbW9yZSBjb21tZW50cy5cXG5kcml2ZXJzL2h2L2h5cGVydl92bWJ1cy5oLTE1Ni1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYz0yNDI4PXN0YXRpYyB2b2lkIF9fZXhpdCBtc2h2X3BhcmVudF9wYXJ0aXRpb25fZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTI0MzgtXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjI0Mzk6bW9kdWxlX2luaXQobXNodl9wYXJlbnRfcGFydGl0aW9uX2luaXQpO1xcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yNDQwLW1vZHVsZV9leGl0KG1zaHZfcGFyZW50X3BhcnRpdGlvbl9leGl0KTtcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jPTEzOTg9c3RhdGljIHZvaWQgX19leGl0IG1zaHZfdnRsX2V4aXQodm9pZClcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jLTE0MDgtXFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmM6MTQwOTptb2R1bGVfaW5pdChtc2h2X3Z0bF9pbml0KTtcXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy0xNDEwLW1vZHVsZV9leGl0KG1zaHZfdnRsX2V4aXQpO1xcbi0tXFxuZHJpdmVycy9odi92bWJ1c19kcnYuYz0xNDA5PXN0YXRpYyBpbnQgdm1idXNfYWxsb2Nfc3luaWNfYW5kX2Nvbm5lY3Qodm9pZClcXG4tLVxcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmMtMTQ2MS0vKlxcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmM6MTQ2MjogKiB2bWJ1c19idXNfaW5pdCAtTWFpbiB2bWJ1cyBkcml2ZXIgaW5pdGlhbGl6YXRpb24gcm91dGluZS5cXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jLTE0NjMtICpcXG4tLVxcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmMtMTQ2OC0gKi9cXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jOjE0Njk6c3RhdGljIGludCB2bWJ1c19idXNfaW5pdCh2b2lkKVxcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmMtMTQ3MC17XFxuLS1cXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jPTI5NzE9c3RhdGljIGludCBfX2luaXQgaHZfYWNwaV9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jLTI5NzQtXFxuZHJpdmVycy9odi92bWJ1c19kcnYuYzoyOTc1OlxcdGlmICghaHZfaXNfaHlwZXJ2X2luaXRpYWxpemVkKCkpXFxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0yOTc2LVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0zMDEyLVxcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmM6MzAxMzpcXHRyZXQgPSB2bWJ1c19idXNfaW5pdCgpO1xcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmMtMzAxNC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9odi92bWJ1c19kcnYuYz0zMDgzPU1PRFVMRV9ERVNDUklQVElPTihcXFwiTWljcm9zb2Z0IEh5cGVyLVYgVk1CdXMgRHJpdmVyXFxcIik7XFxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0zMDg0LVxcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmM6MzA4NTpzdWJzeXNfaW5pdGNhbGwoaHZfYWNwaV9pbml0KTtcXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jLTMwODYtbW9kdWxlX2V4aXQodm1idXNfZXhpdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUxOjA5LjQzMDY0MzI2NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODk5OTU1NzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSHlwZXItViBJbml0aWFsaXphdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaHZfYWNwaV9pbml0KClgIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhpcyBjaGVjazogYGlmICghaHZfaXNfaHlwZXJ2X2luaXRpYWxpemVkKCkpIHJldHVybiAtRU5PREVWO2AuIE5hdHVyYWxseSwgbXkgbWluZCBpbW1lZGlhdGVseSBnb2VzLCBcIkFscmlnaHQsIHdoZXJlIGlzIGBodl9pc19oeXBlcnZfaW5pdGlhbGl6ZWQoKWAgZGVmaW5lZD9cIiBXZSBrbm93IHRoYXQncyB0aGUgY3J1Y2lhbCBnYXRla2VlcGVyLiBJdCdzIHRoZSBjaGVjayB0byBzZWUgaWYgd2UgZXZlbiAqc2hvdWxkKiBwcm9jZWVkIHdpdGggSHlwZXItViBzZXR1cCwgYW5kIGlmIG5vdCwgd2UncmUganVzdCBnb2luZyB0byB0aHJvdyBhbiBlcnJvciBhbmQgYmFpbC4gTm93LCBsZXQncyB0cmFjayBkb3duIHRoYXQgZGVmaW5pdGlvbi4gVGltZSB0byBzZWFyY2ggdGhlIGNvZGViYXNlIGFuZCBnZXQgZG93biB0byBicmFzcyB0YWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNDQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1MToxMi4zMzA2MDA5MzhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MDkzNjg4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodl9pc19oeXBlcnZfaW5pdGlhbGl6ZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9oeXBlcnYvbXNoeXBlcnYuYz0xMzA9ZWFybHlfaW5pdGNhbGwoaHlwZXJ2X2luaXQpO1xcbmFyY2gvYXJtNjQvaHlwZXJ2L21zaHlwZXJ2LmMtMTMxLVxcbmFyY2gvYXJtNjQvaHlwZXJ2L21zaHlwZXJ2LmM6MTMyOmJvb2wgaHZfaXNfaHlwZXJ2X2luaXRpYWxpemVkKHZvaWQpXFxuYXJjaC9hcm02NC9oeXBlcnYvbXNoeXBlcnYuYy0xMzMte1xcbi0tXFxuYXJjaC9hcm02NC9oeXBlcnYvbXNoeXBlcnYuYy0xMzUtfVxcbmFyY2gvYXJtNjQvaHlwZXJ2L21zaHlwZXJ2LmM6MTM2OkVYUE9SVF9TWU1CT0xfR1BMKGh2X2lzX2h5cGVydl9pbml0aWFsaXplZCk7XFxuLS1cXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jPTY4OD1FWFBPUlRfU1lNQk9MX0dQTChoeXBlcnZfcmVwb3J0X3BhbmljKTtcXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jLTY4OS1cXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jOjY5MDpib29sIGh2X2lzX2h5cGVydl9pbml0aWFsaXplZCh2b2lkKVxcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmMtNjkxLXtcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmMtNzEyLX1cXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jOjcxMzpFWFBPUlRfU1lNQk9MX0dQTChodl9pc19oeXBlcnZfaW5pdGlhbGl6ZWQpO1xcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmMtNzE0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1MToxMi42MDE1NDE4MTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzMxNzU5OTU0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgSHlwZXItViBJbml0aWFsaXphdGlvbiBDb2RlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgeDg2IEh5cGVyLVYgaW5pdGlhbGl6YXRpb24gaXMgaGFuZGxlZC4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgYXJjaC94ODYvaHlwZXJ2L2h2X2luaXQuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIHNob3VsZCBiZWdpbiwgcmlnaHQ/IFRoaXMgZmlsZSBzaG91bGQgY29udGFpbiB0aGUgY29yZSBsb2dpYyBmb3Igc2V0dGluZyB1cCB0aGUga2VybmVsIHRvIHJ1biB3aXRoaW4gYSBIeXBlci1WIGVudmlyb25tZW50IG9uIGFuIHg4NiBhcmNoaXRlY3R1cmUuIEknbSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGRldGVjdCBpZiB3ZSdyZSBhY3R1YWxseSAqaW4qIGEgSHlwZXItViBndWVzdCwgYW5kIHRoZW4gY29kZSBwYXRocyB0byBjb25maWd1cmUgdGhlIHNwZWNpZmljIGhhcmR3YXJlIHZpcnR1bGl6YXRpb24gaW50ZXJmYWNlcy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSByZWdpc3RlcmluZyBIeXBlci1WIHNwZWNpZmljIGludGVycnVwdCBoYW5kbGVycywgbWVtb3J5IGFsbG9jYXRpb24gZm9yIHBhcmF2aXJ0dWFsaXplZCBzdHJ1Y3R1cmVzLCBhbmQgaW5pdGlhbGl6YXRpb24gb2YgY29tbXVuaWNhdGlvbiBjaGFubmVscyB3aXRoIHRoZSBob3N0LiBUaGVyZSBzaG91bGQgYWxzbyBiZSBzb21lIHBsYXRmb3JtIGNoZWNrIHNvIHRoYXQgaXQgZG9lcyBub3QgZ28gZm9yd2FyZCBpZiBydW5uaW5nIG9uIHBoeXNpY2FsIGhhcmR3YXJlLiBJIHdhbnQgdG8gc2VlIGhvdyBlYXJseSB0aGlzIGhhcHBlbnMgaW4gdGhlIGJvb3QgcHJvY2VzcyBhbmQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIHRoZSByZWd1bGFyIHg4NiBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBhbmQgaG93IHRoZXNlIGFyZSBoYW5kbGVkIHRvIGVuc3VyZSBhIHNlYW1sZXNzIGludGVncmF0aW9uLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkOyB3aGF0IGtpbmQgb2Ygc2hhcmVkIG1lbW9yeSBvciBjb250cm9sIGJsb2NrcyBhcmUgYmVpbmcgc2V0IHVwIGZvciBjb21tdW5pY2F0aW9uLiBJJ20gcmVhZHkgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzUyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTE6MTUuOTE5MTQzMzc5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2h5cGVydi9odl9pbml0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjkwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjkwOlxcdGJvb2wgaHZfaXNfaHlwZXJ2X2luaXRpYWxpemVkKHZvaWQpXFxuIDY5MTpcXHR7XFxuIDY5MjpcXHRcXHR1bmlvbiBodl94NjRfbXNyX2h5cGVyY2FsbF9jb250ZW50cyBoeXBlcmNhbGxfbXNyO1xcbiA2OTM6XFx0XFxuIDY5NDpcXHRcXHQvKlxcbiA2OTU6XFx0XFx0ICogRW5zdXJlIHRoYXQgd2UncmUgcmVhbGx5IG9uIEh5cGVyLVYsIGFuZCBub3QgYSBLVk0gb3IgWGVuXFxuIDY5NjpcXHRcXHQgKiBlbXVsYXRpb24gb2YgSHlwZXItVlxcbiA2OTc6XFx0XFx0ICovXFxuIDY5ODpcXHRcXHRpZiAoeDg2X2h5cGVyX3R5cGUgIT0gWDg2X0hZUEVSX01TX0hZUEVSVilcXG4gNjk5OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNzAwOlxcdFxcbiA3MDE6XFx0XFx0LyogQSBURFggVk0gd2l0aCBubyBwYXJhdmlzb3IgdXNlcyBURFggR0hDSSBjYWxsIHJhdGhlciB0aGFuIGh2X2h5cGVyY2FsbF9wZyAqL1xcbiA3MDI6XFx0XFx0aWYgKGh2X2lzb2xhdGlvbl90eXBlX3RkeCgpIFxcdTAwMjZcXHUwMDI2ICFtc19oeXBlcnYucGFyYXZpc29yX3ByZXNlbnQpXFxuIDcwMzpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gNzA0OlxcdFxcdC8qXFxuIDcwNTpcXHRcXHQgKiBWZXJpZnkgdGhhdCBlYXJsaWVyIGluaXRpYWxpemF0aW9uIHN1Y2NlZWRlZCBieSBjaGVja2luZ1xcbiA3MDY6XFx0XFx0ICogdGhhdCB0aGUgaHlwZXJjYWxsIHBhZ2UgaXMgc2V0dXBcXG4gNzA3OlxcdFxcdCAqL1xcbiA3MDg6XFx0XFx0aHlwZXJjYWxsX21zci5hc191aW50NjQgPSAwO1xcbiA3MDk6XFx0XFx0cmRtc3JxKEhWX1g2NF9NU1JfSFlQRVJDQUxMLCBoeXBlcmNhbGxfbXNyLmFzX3VpbnQ2NCk7XFxuIDcxMDpcXHRcXG4gNzExOlxcdFxcdHJldHVybiBoeXBlcmNhbGxfbXNyLmVuYWJsZTtcXG4gNzEyOlxcdH1cXG4gNzEzOlxcdEVYUE9SVF9TWU1CT0xfR1BMKGh2X2lzX2h5cGVydl9pbml0aWFsaXplZCk7XFxuIDcxNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTE6MTUuOTE5MjI2Njc5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MjAzMTIwNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgSHlwZXItViBDb21wYXRpYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBzbmlwcGV0IG9mIGNvZGUsIGFuZCB0aGUgY29tbWVudCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIFRoZSBnb2FsIGlzIGNsZWFybHkgdG8gdmVyaWZ5IHRoZSBob3N0IGVudmlyb25tZW50IGlzICphY3R1YWxseSogSHlwZXItViBhbmQgbm90IHNvbWUgb3RoZXIgdmlydHVhbGl6YXRpb24gbGF5ZXIgbWFzcXVlcmFkaW5nIGFzIGl0LCBtYXliZSBLVk0gb3IgWGVuLiBTZWVtcyBzZW5zaWJsZSwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgY29tcGF0aWJpbGl0eSBpc3N1ZXMuIFRoZSBjb2RlIGl0c2VsZiwgYGlmICh4ODZfaHlwZXJfdHlwZSAhPSBYODZfSFlQRVJfTVNfSFlQRVJWKSByZXR1cm4gZmFsc2U7YCwgaXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBhIGRpcmVjdCBjaGVjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB4ODZfaHlwZXJfdHlwZWAgaXMgcG9wdWxhdGVkLiBUaGF0IG1lYW5zIEkgc2hvdWxkIGdvIGNoZWNrIHRoZSBmaWxlIHBhdGggYGFyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuY2AgdG8gdHJhY2UgaG93IHRoYXQgdmFyaWFibGUgZ2V0cyBpbml0aWFsaXplZCwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGF0IGZpbGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1MjAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUxOjE5LjQzOTU0MjE0MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAwMjU1OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWDg2X0hZUEVSX01TX0hZUEVSVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaHlwZXJ2L2h2X2luaXQuYz00NTI9dm9pZCBfX2luaXQgaHlwZXJ2X2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmMtNDU3LVxcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmM6NDU4OlxcdGlmICh4ODZfaHlwZXJfdHlwZSAhPSBYODZfSFlQRVJfTVNfSFlQRVJWKVxcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmMtNDU5LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmM9NjkwPWJvb2wgaHZfaXNfaHlwZXJ2X2luaXRpYWxpemVkKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jLTY5Ny1cXHQgKi9cXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jOjY5ODpcXHRpZiAoeDg2X2h5cGVyX3R5cGUgIT0gWDg2X0hZUEVSX01TX0hZUEVSVilcXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jLTY5OS1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmM9OTE2PWJvb2wgaHZfaXNfaXNvbGF0aW9uX3N1cHBvcnRlZCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTkyMC1cXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmM6OTIxOlxcdGlmICghaHlwZXJ2aXNvcl9pc190eXBlKFg4Nl9IWVBFUl9NU19IWVBFUlYpKVxcbmFyY2gveDg2L2h5cGVydi9pdm0uYy05MjItXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vaHlwZXJ2aXNvci5oPTI0PWVudW0geDg2X2h5cGVydmlzb3JfdHlwZSB7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oeXBlcnZpc29yLmgtMjYtXFx0WDg2X0hZUEVSX1ZNV0FSRSxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oeXBlcnZpc29yLmg6Mjc6XFx0WDg2X0hZUEVSX01TX0hZUEVSVixcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oeXBlcnZpc29yLmgtMjgtXFx0WDg2X0hZUEVSX1hFTl9QVixcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuYz04MTI9Y29uc3QgX19pbml0Y29uc3Qgc3RydWN0IGh5cGVydmlzb3JfeDg2IHg4Nl9oeXBlcl9tc19oeXBlcnYgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L21zaHlwZXJ2LmMtODE0LVxcdC5kZXRlY3RcXHRcXHRcXHQ9IG1zX2h5cGVydl9wbGF0Zm9ybSxcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L21zaHlwZXJ2LmM6ODE1OlxcdC50eXBlXFx0XFx0XFx0PSBYODZfSFlQRVJfTVNfSFlQRVJWLFxcbmFyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuYy04MTYtXFx0LmluaXQueDJhcGljX2F2YWlsYWJsZVxcdD0gbXNfaHlwZXJ2X3gyYXBpY19hdmFpbGFibGUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9Njk5OT1pbnQga3ZtX3g4Nl92ZW5kb3JfaW5pdChzdHJ1Y3Qga3ZtX3g4Nl9pbml0X29wcyAqb3BzKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTcxMTYtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjcxMTc6XFx0aWYgKGh5cGVydmlzb3JfaXNfdHlwZShYODZfSFlQRVJfTVNfSFlQRVJWKSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzExOC1cXHRcXHRzZXRfaHZfdHNjY2hhbmdlX2NiKGt2bV9oeXBlcnZfdHNjX25vdGlmaWVyKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz03MTU4PXZvaWQga3ZtX3g4Nl92ZW5kb3JfZXhpdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTcxNjItI2lmZGVmIENPTkZJR19YODZfNjRcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzE2MzpcXHRpZiAoaHlwZXJ2aXNvcl9pc190eXBlKFg4Nl9IWVBFUl9NU19IWVBFUlYpKVxcbmFyY2gveDg2L2t2bS94ODYuYy03MTY0LVxcdFxcdGNsZWFyX2h2X3RzY2NoYW5nZV9jYigpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1MToxOS41Mjk1NzI2ODFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYzODQwOTU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIHZtYnVzIEJ1ZmZlciBNYW5hZ2VtZW50KipcblxuT2theSwgc28gYHZtYnVzX2xlYWtfYnVmZmVyYCBoYXMgYmVlbiBpbnRyb2R1Y2VkIGluIGBkcml2ZXJzL2h2L2NoYW5uZWwuY2AgYW5kIHN1YnNlcXVlbnRseSBnZXRzIHV0aWxpemVkIHdpdGhpbiBgZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jYC4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIGFsd2F5cyBidWZmZXIgbWFuYWdlbWVudCwgcGFydGljdWxhcmx5IGluIGEgZHJpdmVyIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3aWRlc3ByZWFkIHRoaXMgbmV3IGZ1bmN0aW9uIGlzLCBhbmQgaG93IGl0IGlzIHVzZWQuIElzIGl0IG9ubHkgdXNlZCBieSBuZXR2c2MuYywgb3IgZG9lcyBzb21ldGhpbmcgZWxzZSBjYWxsIGl0PyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIHNjb3BlIG9mIHRoaXMgbmV3IGJ1ZmZlciBmdW5jdGlvbiBhbmQgaXRzIHBvdGVudGlhbCBpbXBhY3QuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGNvbmZpcm0gd2hldGhlciBgdm1idXNfYWxsb2NfYnVmZmVyYCBpcyBhbHNvIHVzZWQgZWxzZXdoZXJlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSB0d28gcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEknbGwgc2VhcmNoIGZvciBhbnkgb3RoZXIgaW5zdGFuY2VzIHdoZXJlIGB2bWJ1c19sZWFrX2J1ZmZlcmAgb3IgYHZtYnVzX2FsbG9jX2J1ZmZlcmAgYXJlIGludm9rZWQgd2l0aGluIHRoZSBjb2RlYmFzZSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGZ1bmN0aW9uJ3MgZ2xvYmFsIGltcGFjdC4gVGhlbiwgSSBjYW4gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgdXNlIGNhc2UgZm9yIHRoaXMgbmV3IGZ1bmN0aW9uLCBhbmQgd2hldGhlciBpdHMgaW50cm9kdWN0aW9uIHBvc2VzIGFueSByaXNrIHRvIG1lbW9yeSBzdGFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODE1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTE6MjIuMTY3OTg1Nzk4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODM5MTc3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1idXNfbGVha19idWZmZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9odi9jaGFubmVsLmM9NjQ5PUVYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2ZyZWVfYnVmZmVyKTtcXG4tLVxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY1MS0vKipcXG5kcml2ZXJzL2h2L2NoYW5uZWwuYzo2NTI6ICogdm1idXNfbGVha19idWZmZXIgLSBzZXQgdXAgYSBidWZmZXIgdG8gYmUgbGVha2VkIGJ5IHZtYnVzX2ZyZWVfYnVmZmVyKCkuXFxuZHJpdmVycy9odi9jaGFubmVsLmMtNjUzLSAqXFxuLS1cXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02NjctICovXFxuZHJpdmVycy9odi9jaGFubmVsLmM6NjY4OnZvaWQgdm1idXNfbGVha19idWZmZXIodm9pZCAqKmFkZHIsIHN0cnVjdCBwYWdlICoqKmNodW5rcywgdTMyICpjaHVua19jbnQpXFxuZHJpdmVycy9odi9jaGFubmVsLmMtNjY5LXtcXG4tLVxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY3NC19XFxuZHJpdmVycy9odi9jaGFubmVsLmM6Njc1OkVYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2xlYWtfYnVmZmVyKTtcXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02NzYtXFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM9MzA1PXN0YXRpYyB2b2lkIG5ldHZzY190ZWFyZG93bl9yZWN2X2dwYWRsKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0zMTgtXFx0XFx0aWYgKHJldCAhPSAwKSB7XFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjMxOTpcXHRcXHRcXHR2bWJ1c19sZWFrX2J1ZmZlcihcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlcmVjdl9idWYsXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTMyMC1cXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZuZXRfZGV2aWNlLVxcdTAwM2VyZWN2X2J1Zl9jaHVua3MsXFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM9MzI5PXN0YXRpYyB2b2lkIG5ldHZzY190ZWFyZG93bl9zZW5kX2dwYWRsKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0zNDItXFx0XFx0aWYgKHJldCAhPSAwKSB7XFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjM0MzpcXHRcXHRcXHR2bWJ1c19sZWFrX2J1ZmZlcihcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlc2VuZF9idWYsXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTM0NC1cXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZuZXRfZGV2aWNlLVxcdTAwM2VzZW5kX2J1Zl9jaHVua3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUxOjIyLjk1MTkwODUyNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjE5ODc1MTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEJ1ZmZlciBBbGxvY2F0aW9uIGFuZCBEZWFsbG9jYXRpb24gaW4gdGhlIFZNQnVzKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgbWVtb3J5IG1hbmFnZW1lbnQgaXMgaGFuZGxlZCBpbiB0aGUgVk1CdXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHRyYWNlIHRoZSB1c2FnZSBvZiBgdm1idXNfYWxsb2NfYnVmZmVyYCBhbmQgYHZtYnVzX2ZyZWVfYnVmZmVyYC4gVGhlc2UgYXJlIHRoZSBjb3JlIHByaW1pdGl2ZXMgZm9yIGJ1ZmZlciBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gd2l0aGluIHRoZSBWTUJ1cywgYW5kIHRvIHRydWx5IHVuZGVyc3RhbmQgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIEkgbmVlZCB0byBzZWUgd2hlcmUgdGhleSdyZSBiZWluZyAqdXNlZCouIFdobydzIHJlcXVlc3RpbmcgbWVtb3J5PyBXaG8ncyByZWxlYXNpbmcgaXQ/IFdoYXQgYXJlIHRoZSBjYWxsaW5nIGNvbnRleHRzPyBUaGlzIGluZm9ybWF0aW9uIGlzIGZ1bmRhbWVudGFsIGZvciBkZWJ1Z2dpbmcgYW55IG1lbW9yeS1yZWxhdGVkIGlzc3Vlcywgb3B0aW1pemluZyB0aGUgYnVmZmVyIHBvb2wsIG9yIGV2ZW4gcHJlZGljdGluZyBtZW1vcnkgdXNhZ2UgcGF0dGVybnMuIFRoaXMgYW5hbHlzaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgYnVmZmVycyBhcmUgZmxvd2luZyB0aHJvdWdoIHRoZSBzeXN0ZW0sIGhvcGVmdWxseSByZXZlYWxpbmcgaW5zaWdodHMgaW50byBhbnkgaW5lZmZpY2llbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjcyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTE6MjUuMTcxNzg2MDg5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Nzk3OTY4NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1idXNfKGFsbG9jfGZyZWUpX2J1ZmZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2h2L2NoYW5uZWwuYz02MTE9RVhQT1JUX1NZTUJPTF9HUEwodm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWQpO1xcbi0tXFxuZHJpdmVycy9odi9jaGFubmVsLmMtNjEzLS8qKlxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjYxNDogKiB2bWJ1c19mcmVlX2J1ZmZlciAtIHJlbGVhc2UgYSBidWZmZXIgYWxsb2NhdGVkIGJ5IHZtYnVzX2FsbG9jX2J1ZmZlcigpLlxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTYxNS0gKlxcbi0tXFxuZHJpdmVycy9odi9jaGFubmVsLmMtNjE3LSAqICAgICAgICBmYWlsZWQgYWxsb2NhdGlvbilcXG5kcml2ZXJzL2h2L2NoYW5uZWwuYzo2MTg6ICogQGNodW5rczogY2h1bmtzIGFycmF5IGZyb20gdm1idXNfYWxsb2NfYnVmZmVyKCksIG9yIE5VTExcXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02MTktICogQGNodW5rX2NudDogbnVtYmVyIG9mIGVudHJpZXMgaW4gQGNodW5rc1xcbi0tXFxuZHJpdmVycy9odi9jaGFubmVsLmMtNjI1LSAqL1xcbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjYyNjp2b2lkIHZtYnVzX2ZyZWVfYnVmZmVyKHZvaWQgKmFkZHIsIHN0cnVjdCBwYWdlICoqY2h1bmtzLCB1MzIgY2h1bmtfY250KVxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTYyNy17XFxuLS1cXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02NDgtfVxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjY0OTpFWFBPUlRfU1lNQk9MX0dQTCh2bWJ1c19mcmVlX2J1ZmZlcik7XFxuZHJpdmVycy9odi9jaGFubmVsLmMtNjUwLVxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY1MS0vKipcXG5kcml2ZXJzL2h2L2NoYW5uZWwuYzo2NTI6ICogdm1idXNfbGVha19idWZmZXIgLSBzZXQgdXAgYSBidWZmZXIgdG8gYmUgbGVha2VkIGJ5IHZtYnVzX2ZyZWVfYnVmZmVyKCkuXFxuZHJpdmVycy9odi9jaGFubmVsLmMtNjUzLSAqXFxuZHJpdmVycy9odi9jaGFubmVsLmMtNjU0LSAqIEBhZGRyOiBidWZmZXIgYWRkcmVzc1xcbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjY1NTogKiBAY2h1bmtzOiBjaHVua3MgYXJyYXkgZnJvbSB2bWJ1c19hbGxvY19idWZmZXIoKVxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY1Ni0gKiBAY2h1bmtfY250OiBudW1iZXIgb2YgZW50cmllcyBpbiBAY2h1bmtzXFxuLS1cXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02NTktICogdGhlIGJ1ZmZlciBpcyBsZWFrZWQgYnkgc2V0dGluZyBAYWRkciB0byBOVUxMLiBPdGhlcndpc2Ugc2V0XFxuZHJpdmVycy9odi9jaGFubmVsLmM6NjYwOiAqIEBjaHVua19jbnQgdG8gMCBzbyB0aGF0IHZtYnVzX2ZyZWVfYnVmZmVyKCkgZG9lcyBub3QgdHJ5IHRvIHJlLWVuY3J5cHRcXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy02NjEtICogb3IgZnJlZSB0aGUgYnVmZmVyIG1lbW9yeSwgYnV0IHN0aWxsIHJlbGVhc2VzIHRoZSB2bWFwIGFkZHJlc3MgYW5kXFxuLS1cXG5kcml2ZXJzL2h2L2NoYW5uZWwuYz02NzU9RVhQT1JUX1NZTUJPTF9HUEwodm1idXNfbGVha19idWZmZXIpO1xcbi0tXFxuZHJpdmVycy9odi9jaGFubmVsLmMtNjc3LS8qKlxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjY3ODogKiB2bWJ1c19hbGxvY19idWZmZXIgLSBhbGxvY2F0ZSBhIGhvc3QtdmlzaWJsZSwgdmlydHVhbGx5LWNvbnRpZ3VvdXMgYnVmZmVyLlxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTY3OS0gKlxcbi0tXFxuZHJpdmVycy9odi9jaGFubmVsLmMtNjk1LSAqL1xcbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjY5Njp2b2lkICp2bWJ1c19hbGxvY19idWZmZXIoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXFxuZHJpdmVycy9odi9jaGFubmVsLmMtNjk3LVxcdFxcdFxcdCB1MzIgc2l6ZSxcXG4tLVxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTc4Ni1cXHRrdmZyZWUocGFnZXMpO1xcbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjc4NzpcXHR2bWJ1c19mcmVlX2J1ZmZlcihOVUxMLCBjaHVua3MsIGNodW5rX2NudCk7XFxuZHJpdmVycy9odi9jaGFubmVsLmMtNzg4LVxcdHJldHVybiBOVUxMO1xcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTc4OS19XFxuZHJpdmVycy9odi9jaGFubmVsLmM6NzkwOkVYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2FsbG9jX2J1ZmZlcik7XFxuZHJpdmVycy9odi9jaGFubmVsLmMtNzkxLVxcbi0tXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jPTEzMT1zdGF0aWMgdm9pZCBfX2ZyZWVfbmV0dnNjX2RldmljZShzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbnZkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTM2LVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzoxMzc6XFx0dm1idXNfZnJlZV9idWZmZXIobnZkZXYtXFx1MDAzZXJlY3ZfYnVmLCBudmRldi1cXHUwMDNlcmVjdl9idWZfY2h1bmtzLFxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0xMzgtXFx0XFx0XFx0ICBudmRldi1cXHUwMDNlcmVjdl9idWZfY2h1bmtfY250KTtcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6MTM5OlxcdHZtYnVzX2ZyZWVfYnVmZmVyKG52ZGV2LVxcdTAwM2VzZW5kX2J1ZiwgbnZkZXYtXFx1MDAzZXNlbmRfYnVmX2NodW5rcyxcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTQwLVxcdFxcdFxcdCAgbnZkZXYtXFx1MDAzZXNlbmRfYnVmX2NodW5rX2NudCk7XFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM9MzY3PXN0YXRpYyBpbnQgbmV0dnNjX2luaXRfYnVmKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0zODYtXFx0bmV0X2RldmljZS1cXHUwMDNlcmVjdl9idWYgPVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzozODc6XFx0XFx0dm1idXNfYWxsb2NfYnVmZmVyKGRldmljZS1cXHUwMDNlY2hhbm5lbCwgYnVmX3NpemUsXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTM4OC1cXHRcXHRcXHRcXHQgICBcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlcmVjdl9idWZfY2h1bmtzLFxcbi0tXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTQ5Ni1cXHRuZXRfZGV2aWNlLVxcdTAwM2VzZW5kX2J1ZiA9XFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjQ5NzpcXHRcXHR2bWJ1c19hbGxvY19idWZmZXIoZGV2aWNlLVxcdTAwM2VjaGFubmVsLCBidWZfc2l6ZSxcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtNDk4LVxcdFxcdFxcdFxcdCAgIFxcdTAwMjZuZXRfZGV2aWNlLVxcdTAwM2VzZW5kX2J1Zl9jaHVua3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUxOjI2LjE1MTU4ODg0MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTQyNDgzOTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZWFjaGFiaWxpdHkgaW4gTXkgRmllbGQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gbWV0aWN1bG91c2x5LCBmb2N1c2luZyBvbiByZWFjaGFiaWxpdHkgYXMgcGVyIHRoZSBvdXRsaW5lZCBzZWN0aW9ucy4gU2VjdGlvbiAyLCB0aGUgXCJOZWdhdGl2ZSBDcml0ZXJpYSxcIiBmbGFncyBhIGZldyByZWQgZmxhZ3MuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0OlxuXG4qICAgKipTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6KiogSSBpbW1lZGlhdGVseSB6ZXJvIGluIG9uIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHZlbmRvci1zcGVjaWZpYyBjb21wb25lbnRzIGxpa2UgdGhvc2UgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyBsaXN0ZWQsIGVzcGVjaWFsbHkgdGhvc2UgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlIG9yIHNwZWNpZmljIGRyaXZlcnMgbm90IGVtdWxhdGVkIHdpdGhpbiBzdGFuZGFyZCBRRU1VLiBUaGF0J3MgYSBodWdlIGNvbnN0cmFpbnQuIFdlIGNhbuKAmXQgZnV6eiB3aGF0IGlzbuKAmXQgcHJlc2VudC5cbiogICAqKlVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoqKiBUaGUgbWVudGlvbiBvZiBkcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIHRpZWQgdG8gcGh5c2ljYWwgaG90LXVucGx1ZyBvciBtYW51YWwgdW5iaW5kaW5nIGFsc28gc2NyZWFtcyAncG90ZW50aWFsIGZvciBmYWxzZSBwb3NpdGl2ZXMuJyBUaGVzZSBwYXRocyBhcmUgaW5oZXJlbnRseSBkaWZmaWN1bHQgdG8gdHJpZ2dlciBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBhbmQgdHJ5aW5nIHRvIGZvcmNlIHRoZW0gbWF5IGJlIGNvdW50ZXJwcm9kdWN0aXZlLlxuXG5UaGVuLCBTZWN0aW9uIDMsIHRoZSBcIlBvc2l0aXZlIENyaXRlcmlhLFwiIGRyaXZlcyB0aGUgcG9pbnQgaG9tZTogcmVhY2hhYmlsaXR5ICppcyogdGhlIGdhdGUuIFdlJ3JlIGxpbWl0ZWQgdG8gY29kZSB0aGF0ICpjYW4qIGV4ZWN1dGUgd2l0aGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyDigJMgdGhlIFFFTVUvR0NFIHNldHVwIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcy4gSWYgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgYmFzZWQgb24gdGhlIGNyaXRlcmlhIGluIFNlY3Rpb24gMiwgdGhlIGZ1enppbmcgaXMgYSBuby1nbywgZXZlbiBpZiB0aGUgY29kZSBzZWVtcyBpbnRlcmVzdGluZyBvciBoYXMgZXh0cmEgYXNzZXJ0aW9ucy5cblxuTm93LCBsZXQncyB0aGluayBhYm91dCBzeXprYWxsZXIncyBleGVjdXRpb24gZW52aXJvbm1lbnQuIEl0IHJ1bnMgd2l0aGluIFFFTVUgb3IgR0NFIFZNcy4gSSBhbHJlYWR5IHNlZSB3aGF0J3MgY29taW5nOlxuXG4qICAgKipObyBIeXBlci1WOioqIEkgaW1tZWRpYXRlbHkgbmVlZCB0byBlc3RhYmxpc2ggdGhhdCBIeXBlci1WIGlzbuKAmXQgcHJlc2VudC4gR0NFIHVzZXMgS1ZNLCBhbmQgc3RhbmRhcmQgUUVNVSBlaXRoZXIgdXNlcyBLVk0gb3IgVENHLiBJbiB0aGVzZSBlbnZpcm9ubWVudHMsIGB4ODZfaHlwZXJfdHlwZWAgaXMgY2xlYXJseSAqbm90KiBgWDg2X0hZUEVSX01TX0hZUEVSVmAuIFRodXMsIGBodl9pc19oeXBlcnZfaW5pdGlhbGl6ZWQoKWAgcmV0dXJucyBgZmFsc2VgLlxuKiAgICoqVk1CdXMgRmFpbDoqKiBCZWNhdXNlIG9mIHRoZSBsYWNrIG9mIEh5cGVyLVYsIHRoZSBgaHZfdm1idXNgIHN1YnN5c3RlbSBmYWlscyB0byBpbml0aWFsaXplLCByZXR1cm5pbmcgLUVOT0RFViBkdXJpbmcgYm9vdC4gVGhpcyBpcyBhIGNyaXRpY2FsIHBvaW50LlxuKiAgICoqTm8gRGV2aWNlczoqKiBDb25zZXF1ZW50bHksIHNpbmNlIFZNQnVzIGlzIG5vdCBwcmVzZW50LCBubyBgaHZfZGV2aWNlYCBpcyBwcm9iZWQsIHdoaWNoIG1lYW5zIG5vIGBuZXR2c2NfcHJvYmVgIGNhbGwsIG5vIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucywgYW5kIGNlcnRhaW5seSBubyB0ZWFyZG93biBmdW5jdGlvbnMgbGlrZSBgbmV0dnNjX3RlYXJkb3duXypfZ3BhZGxgLiBUaGlzIG1lYW5zIHRoZSBgdm1idXNfbGVha19idWZmZXJgIGZ1bmN0aW9uLCBhc3NvY2lhdGVkIHdpdGggdGhlIE1TIEh5cGVyLVYgbmV0d29yayBkcml2ZXIsIHJlbWFpbnMgdW5yZWFjaGFibGUuXG5cblNvIHRoZSBtYWluIHF1ZXN0aW9uIGlzLCBjYW4gd2Ugc29tZWhvdyAqc2ltdWxhdGUqIHRoaXM/IENhbiB3ZSBjcmVhdGUgYHZtYnVzYCBkZXZpY2VzIHRocm91Z2ggc29tZSB2aXJ0dWFsIGJ1cyBvciB1c2Vyc3BhY2UgaW50ZXJmYWNlPyBDYW4gd2UgcmVnaXN0ZXIgb3IgbW9jayB0aGVzZSBkZXZpY2VzIHRocm91Z2ggc3lzZnMsIG5ldGxpbmssIHVzYiwgbG9vcGJhY2ssIG9yIHNvbWUgb3RoZXIgaW50ZXJmYWNlPyBJdCdzIHRpbWUgdG8gZXhhbWluZSB0aGUgY29kZWJhc2UgZm9yIGFueSB3YXkgdG8gZG8gdGhpcy4gQSBgZ3JlcGAgZm9yIGB2bWJ1c19kcml2ZXJfcmVnaXN0ZXJgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyB3aWxsIGJlIHRoZSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTg4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjUxOjMyLjY5NDA3NTAwNloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA1MDYwNDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYnVzX2RyaXZlcl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0vaHlwZXJ2L2h5cGVydl9kcm1fZHJ2LmM9MjQzPXN0YXRpYyBpbnQgX19pbml0IGh2X2RybV9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaHlwZXJ2L2h5cGVydl9kcm1fZHJ2LmMtMjUzLVxcbmRyaXZlcnMvZ3B1L2RybS9oeXBlcnYvaHlwZXJ2X2RybV9kcnYuYzoyNTQ6XFx0cmV0ID0gdm1idXNfZHJpdmVyX3JlZ2lzdGVyKFxcdTAwMjZodl9kcm1faHZfZHJpdmVyKTtcXG5kcml2ZXJzL2dwdS9kcm0vaHlwZXJ2L2h5cGVydl9kcm1fZHJ2LmMtMjU1LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtaHlwZXJ2LmM9NjIyPXN0YXRpYyBpbnQgX19pbml0IG1vdXNldnNjX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1oeXBlcnYuYy02MjktXFxuZHJpdmVycy9oaWQvaGlkLWh5cGVydi5jOjYzMDpcXHRyZXQgPSB2bWJ1c19kcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNm1vdXNldnNjX2Rydik7XFxuZHJpdmVycy9oaWQvaGlkLWh5cGVydi5jLTYzMS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9odi9odl9iYWxsb29uLmM9MjEyND1zdGF0aWMgaW50IF9faW5pdCBpbml0X2JhbGxvb25fZHJ2KHZvaWQpXFxuZHJpdmVycy9odi9odl9iYWxsb29uLmMtMjEyNS17XFxuZHJpdmVycy9odi9odl9iYWxsb29uLmM6MjEyNjpcXHRyZXR1cm4gdm1idXNfZHJpdmVyX3JlZ2lzdGVyKFxcdTAwMjZiYWxsb29uX2Rydik7XFxuZHJpdmVycy9odi9odl9iYWxsb29uLmMtMjEyNy19XFxuLS1cXG5kcml2ZXJzL2h2L2h2X3V0aWwuYz03OTc9c3RhdGljIGludCBfX2luaXQgaW5pdF9oeXBlcnZfdXRpbHModm9pZClcXG4tLVxcbmRyaXZlcnMvaHYvaHZfdXRpbC5jLTgwMC1cXG5kcml2ZXJzL2h2L2h2X3V0aWwuYzo4MDE6XFx0cmV0dXJuIHZtYnVzX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2dXRpbF9kcnYpO1xcbmRyaXZlcnMvaHYvaHZfdXRpbC5jLTgwMi19XFxuLS1cXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jPTE0Njk9c3RhdGljIGludCB2bWJ1c19idXNfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0xNTQ2LS8qKlxcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmM6MTU0NzogKiBfX3ZtYnVzX2RyaXZlcl9yZWdpc3RlcigpIC0gUmVnaXN0ZXIgYSB2bWJ1cydzIGRyaXZlclxcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmMtMTU0OC0gKiBAaHZfZHJpdmVyOiBQb2ludGVyIHRvIGRyaXZlciBzdHJ1Y3R1cmUgeW91IHdhbnQgdG8gcmVnaXN0ZXJcXG4tLVxcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmMtMTU1Ni0gKi9cXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jOjE1NTc6aW50IF9fdm1idXNfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBodl9kcml2ZXIgKmh2X2RyaXZlciwgc3RydWN0IG1vZHVsZSAqb3duZXIsIGNvbnN0IGNoYXIgKm1vZF9uYW1lKVxcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmMtMTU1OC17XFxuLS1cXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jLTE1NzctfVxcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmM6MTU3ODpFWFBPUlRfU1lNQk9MX0dQTChfX3ZtYnVzX2RyaXZlcl9yZWdpc3Rlcik7XFxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0xNTc5LVxcbi0tXFxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0xNTg1LSAqIFVuLXJlZ2lzdGVyIHRoZSBnaXZlbiBkcml2ZXIgdGhhdCB3YXMgcHJldmlvdXMgcmVnaXN0ZXJlZCB3aXRoIGEgY2FsbCB0b1xcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmM6MTU4NjogKiB2bWJ1c19kcml2ZXJfcmVnaXN0ZXIoKVxcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmMtMTU4Ny0gKi9cXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vaHlwZXJ2LWtleWJvYXJkLmM9NDI0PXN0YXRpYyBpbnQgX19pbml0IGh2X2tiZF9pbml0KHZvaWQpXFxuZHJpdmVycy9pbnB1dC9zZXJpby9oeXBlcnYta2V5Ym9hcmQuYy00MjUte1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vaHlwZXJ2LWtleWJvYXJkLmM6NDI2OlxcdHJldHVybiB2bWJ1c19kcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNmh2X2tiZF9kcnYpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vaHlwZXJ2LWtleWJvYXJkLmMtNDI3LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmM9MjQ4Nj1zdGF0aWMgaW50IG5ldHZzY19wcm9iZShzdHJ1Y3QgaHZfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2Rydi5jLTI2MDUtXFx0ICogaXMgY29tcGxldGUuIFRoaXMgaXMgYmVjYXVzZSByZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoKSBnZXRzXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYzoyNjA2OlxcdCAqIHJlZ2lzdGVyZWQgYmVmb3JlIHZtYnVzX2RyaXZlcl9yZWdpc3RlcigpIHNvIHRoYXQgY2FsbGJhY2sgZnVuY1xcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmMtMjYwNy1cXHQgKiBpcyBzZXQgYmVmb3JlIHByb2JlIGFuZCB3ZSBkb24ndCBtaXNzIGV2ZW50cyBsaWtlIE5FVERFVl9QT1NUX0lOSVRcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmM9Mjg3Mz1zdGF0aWMgaW50IF9faW5pdCBuZXR2c2NfZHJ2X2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmMtMjg4OS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2Rydi5jOjI4OTA6XFx0cmV0ID0gdm1idXNfZHJpdmVyX3JlZ2lzdGVyKFxcdTAwMjZuZXR2c2NfZHJ2KTtcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2Rydi5jLTI4OTEtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jPTQxNjk9c3RhdGljIGludCBfX2luaXQgaW5pdF9odl9wY2lfZHJ2KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy00MTg3LVxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jOjQxODg6XFx0cmV0dXJuIHZtYnVzX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2aHZfcGNpX2Rydik7XFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtNDE4OS19XFxuLS1cXG5kcml2ZXJzL3Njc2kvc3RvcnZzY19kcnYuYz0yMjExPXN0YXRpYyBpbnQgX19pbml0IHN0b3J2c2NfZHJ2X2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvc2NzaS9zdG9ydnNjX2Rydi5jLTIyMzUtXFxuZHJpdmVycy9zY3NpL3N0b3J2c2NfZHJ2LmM6MjIzNjpcXHRyZXQgPSB2bWJ1c19kcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNnN0b3J2c2NfZHJ2KTtcXG5kcml2ZXJzL3Njc2kvc3RvcnZzY19kcnYuYy0yMjM3LVxcbi0tXFxuZHJpdmVycy91aW8vdWlvX2h2X2dlbmVyaWMuYz00MTM9aHlwZXJ2X21vZHVsZV9pbml0KHZvaWQpXFxuZHJpdmVycy91aW8vdWlvX2h2X2dlbmVyaWMuYy00MTQte1xcbmRyaXZlcnMvdWlvL3Vpb19odl9nZW5lcmljLmM6NDE1OlxcdHJldHVybiB2bWJ1c19kcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNmh2X3Vpb19kcnYpO1xcbmRyaXZlcnMvdWlvL3Vpb19odl9nZW5lcmljLmMtNDE2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6NTE6MzMuMzk5MTQ2MzE1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzNjYxMzg1NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgSHlwZXItViBEcml2ZXIgQ29kZSBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb2RlIGNoYW5nZSBpdHNlbGYuIEl0IGxvb2tzIGxpa2UgYSBuZXcgZnVuY3Rpb24sIGB2bWJ1c19sZWFrX2J1ZmZlcigpYCwgaGFzIGJlZW4gaW50cm9kdWNlZCBpbiBgZHJpdmVycy9odi9jaGFubmVsLmNgLiBUaGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0IGlzIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQ6IGBuZXR2c2NfdGVhcmRvd25fcmVjdl9ncGFkbGAgYW5kIGBuZXR2c2NfdGVhcmRvd25fc2VuZF9ncGFkbGAgaW4gYGRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuY2Agbm93IGNhbGwgYHZtYnVzX2xlYWtfYnVmZmVyYCBpZiB0aGUgYHZtYnVzX3RlYXJkb3duX2dwYWRsYCBmdW5jdGlvbiBmYWlscy4gVGhpcyBpbXBsaWVzIGEgcG90ZW50aWFsIHJlc291cmNlIGxlYWsgaGFuZGxpbmcgcGF0aCBkdXJpbmcgR1BBREwgKEd1ZXN0IFBoeXNpY2FsIEFkZHJlc3MgRGVzY3JpcHRvciBMaXN0KSB0ZWFyZG93biwgbGlrZWx5IHJlbGF0ZWQgdG8gVk1CdXMgY2hhbm5lbCB0ZWFyZG93biBmYWlsdXJlcy5cblxuTm93LCBsZXQncyBhcHBseSB0aGUgZnV6emluZyByZWFjaGFiaWxpdHkgZ3VpZGVsaW5lcy4gVGhlIGtleSBwaHJhc2UgaGVyZSBpcyBcInN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIiBUaGVzZSBndWlkZWxpbmVzIGV4cGxpY2l0bHkgc3RhdGUgdGhhdCBjb2RlIHJlcXVpcmluZyBzcGVjaWZpYyBoYXJkd2FyZSBvciBoeXBlcnZpc29yIGVudmlyb25tZW50cyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgZnV6emluZyBzZXR1cHMgKGxpa2UgUUVNVS9LVk0gb3IgR0NFKSBzaG91bGRuJ3QgYmUgZnV6emVkLiBBbmQgdGhpcyBpcyBleGFjdGx5IHRoZSBwcm9ibGVtISBUaGUgY29kZSBpbiBxdWVzdGlvbiBpcyB3aXRoaW4gSHlwZXItViBndWVzdCBkcml2ZXJzLiBTcGVjaWZpY2FsbHkgYGh2X3ZtYnVzYCBhbmQgYGh2X25ldHZzY2AuIFRvIGV2ZW4gKnJlYWNoKiB0aGlzIGNvZGUsIEknZCBuZWVkIHRvIGJlIHJ1bm5pbmcgaW5zaWRlIGEgTWljcm9zb2Z0IEh5cGVyLVYgZ3Vlc3QgVk0gd2l0aCB0aGUgTWljcm9zb2Z0IEh5cGVyLVYgaHlwZXJ2aXNvciwgb3IgYW4gQXp1cmUgVk0uIFN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBwYXJ0aWN1bGFybHkgc3l6a2FsbGVyJ3MgcHJlZmVycmVkIFFFTVUvS1ZNIGFuZCBHQ0Ugc2V0dXBzLCAqZG8gbm90KiBwcmVzZW50IHRoaXMgaHlwZXJ2aXNvciBpbnRlcmZhY2UuIFRoZSBgaHZfaXNfaHlwZXJ2X2luaXRpYWxpemVkKClgIGNoZWNrIHdpbGwgZmFpbCwgdGhlIFZNQnVzIHdpbGwgZmFpbCB0byBpbml0aWFsaXplLCBhbmQgdGhlIHJlbGV2YW50IFZNQnVzIGRldmljZXMgd2lsbCBub3QgZXZlbiBiZSBwcmVzZW50LCBtZWFuaW5nIHRoYXQgdGhlIGNvZGUgd29uJ3QgZXZlciBiZSByZWFjaGVkIGR1cmluZyBmdXp6aW5nLlxuXG5UaGVyZWZvcmUsIHRoZSBjb25jbHVzaW9uIGlzIGNsZWFyLiBUaGlzIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIHdpdGhpbiB0aGUgaW50ZW5kZWQgZnV6emluZyBlbnZpcm9ubWVudC5cblxuU28sIGZvciB0aGUgcmVjb3JkOlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IGZhbHNlXG4qICAgYEZvY3VzU3ltYm9sc2A6IFxcWyBdIChlbXB0eSlcbiogICBgRW5hYmxlQ29uZmlnc2A6IFxcWyBdIChlbXB0eSlcbiogICBgUmVhc29uaW5nYDogVGhlIG1vZGlmaWVkIGNvZGUgcmVzaWRlcyB3aXRoaW4gdGhlIE1pY3Jvc29mdCBIeXBlci1WIFZNQnVzIGFuZCBIeXBlci1WIG5ldHZzYyBkcml2ZXJzIChgZHJpdmVycy9odi9jaGFubmVsLmNgIGFuZCBgZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jYCkuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBleGVjdXRpb24gYXMgYSBndWVzdCBWTSBvbiB0aGUgTWljcm9zb2Z0IEh5cGVyLVYgaHlwZXJ2aXNvci4gVGhleSBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIG9yIHJlYWNoZWQgaW4gc3RhbmRhcmQgUUVNVS9LVk0gb3IgR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLlxuXG5JJ2xsIGNoZWNrIHRoZSB0b29sIHBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2AgdG8gbWFrZSBzdXJlIHRoaXMgaXMgcmVjb3JkZWQgcHJvcGVybHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDYzLCJPdXRwdXRUb2tlbnMiOjEyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1MTozOS43NjUyODc5MTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBNaWNyb3NvZnQgSHlwZXItViBndWVzdCBkcml2ZXJzIChWTUJ1cyBidWZmZXIgaGFuZGxpbmcgaW4gZHJpdmVycy9odi9jaGFubmVsLmMgYW5kIG5ldHZzYyBHUEFETCB0ZWFyZG93biBlcnJvciBoYW5kbGluZyBpbiBkcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcnVubmluZyBhcyBhIGd1ZXN0IHVuZGVyIHRoZSBNaWNyb3NvZnQgSHlwZXItViBoeXBlcnZpc29yIGFuZCBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgb3IgcHJvYmVkIGluIHN0YW5kYXJkIFFFTVUvS1ZNIG9yIEdDRSBzeXprYWxsZXIgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBNaWNyb3NvZnQgSHlwZXItViBndWVzdCBkcml2ZXJzIChWTUJ1cyBidWZmZXIgaGFuZGxpbmcgaW4gZHJpdmVycy9odi9jaGFubmVsLmMgYW5kIG5ldHZzYyBHUEFETCB0ZWFyZG93biBlcnJvciBoYW5kbGluZyBpbiBkcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcnVubmluZyBhcyBhIGd1ZXN0IHVuZGVyIHRoZSBNaWNyb3NvZnQgSHlwZXItViBoeXBlcnZpc29yIGFuZCBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgb3IgcHJvYmVkIGluIHN0YW5kYXJkIFFFTVUvS1ZNIG9yIEdDRSBzeXprYWxsZXIgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDo1MTozOS43NjUzMTIzNzFaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvcl88[1] Phase: Running StartedAt: 2026-09-05 00:51:51 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvcl88[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-05 00:51:51 +0000 UTC FinishedAt: 2026-09-05 00:51:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}