Name: series-workflowr4w4x Phase: Failed StartedAt: 2026-07-09 17:55:11 +0000 UTC FinishedAt: 2026-07-09 18:10:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4w4x[0] Phase: Succeeded StartedAt: 2026-07-09 17:55:11 +0000 UTC FinishedAt: 2026-07-09 18:10:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4w4x[0].run-triage Phase: Succeeded StartedAt: 2026-07-09 17:55:11 +0000 UTC FinishedAt: 2026-07-09 18:10:11 +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+CgkJCTx0ZD4yMDI2LzA3LzA5IDE4OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIG1lbWNtcCB3aXRoIGNyeXB0b19tZW1uZXEgdG8gcHJldmVudCB0aW1pbmcgYXR0YWNrcy4gVGhpcyBpcyBhIG5vbi1mdW5jdGlvbmFsIGNoYW5nZSBpbiB0ZXJtcyBvZiBleGVjdXRpb24gZmxvdyBhbmQgY29ycmVjdG5lc3MsIGFzIGJvdGggZnVuY3Rpb25zIHJldHVybiBlcXVpdmFsZW50IGJvb2xlYW4gcmVzdWx0cy4gRnV6emluZyBjYW5ub3QgZGV0ZWN0IHRpbWluZyBkaWZmZXJlbmNlcywgc28gaXQgd2lsbCBub3QgZmluZCBhbnkgbmV3IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTg6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkMjY4Njc2NTJhYmQ5MDkxYmU3NDJhMWU3NTZlOTI3MzAxMTIzYzZjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAxODowNzozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZmlsc19hZWFkLmMgYi9uZXQvbWFjODAyMTEvZmlsc19hZWFkLmNcbmluZGV4IGQyZjRhMTdlYWI5OTAxLi4wMGI5MWU2ZWQ5OTRlMiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9maWxzX2FlYWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jXG5AQCAtMTk1LDcgJiM0MzsxOTUsNyBAQCBzdGF0aWMgaW50IGFlc19zaXZfZGVjcnlwdChjb25zdCB1OCAqa2V5LCBzaXplX3Qga2V5X2xlbixcbiBcdHJlcyA9IGFlc19zMnYoa2V5IC8qIEsxICovLCBrZXlfbGVuLCBudW1fZWxlbSwgYWRkciwgbGVuLCBjaGVjayk7XG4gXHRpZiAocmVzKVxuIFx0XHRyZXR1cm4gcmVzO1xuLVx0aWYgKG1lbWNtcChjaGVjaywgZnJhbWVfaXYsIEFFU19CTE9DS19TSVpFKSAhPSAwKVxuJiM0MztcdGlmIChjcnlwdG9fbWVtbmVxKGNoZWNrLCBmcmFtZV9pdiwgQUVTX0JMT0NLX1NJWkUpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdHJldHVybiAwO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxODowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBtZW1jbXAgd2l0aCBjcnlwdG9fbWVtbmVxIHRvIHByZXZlbnQgdGltaW5nIGF0dGFja3MuIFRoaXMgaXMgYSBub24tZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGVybXMgb2YgZXhlY3V0aW9uIGZsb3cgYW5kIGNvcnJlY3RuZXNzLCBhcyBib3RoIGZ1bmN0aW9ucyByZXR1cm4gZXF1aXZhbGVudCBib29sZWFuIHJlc3VsdHMuIEZ1enppbmcgY2Fubm90IGRldGVjdCB0aW1pbmcgZGlmZmVyZW5jZXMsIHNvIGl0IHdpbGwgbm90IGZpbmQgYW55IG5ldyBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkMjY4Njc2NTJhYmQ5MDkxYmU3NDJhMWU3NTZlOTI3MzAxMTIzYzZjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgOSAxODowNzozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9maWxzX2FlYWQuYyBiL25ldC9tYWM4MDIxMS9maWxzX2FlYWQuYwppbmRleCBkMmY0YTE3ZWFiOTkwMS4uMDBiOTFlNmVkOTk0ZTIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9maWxzX2FlYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvZmlsc19hZWFkLmMKQEAgLTE5NSw3ICYjNDM7MTk1LDcgQEAgc3RhdGljIGludCBhZXNfc2l2X2RlY3J5cHQoY29uc3QgdTggKmtleSwgc2l6ZV90IGtleV9sZW4sCiAJcmVzID0gYWVzX3MydihrZXkgLyogSzEgKi8sIGtleV9sZW4sIG51bV9lbGVtLCBhZGRyLCBsZW4sIGNoZWNrKTsKIAlpZiAocmVzKQogCQlyZXR1cm4gcmVzOwotCWlmIChtZW1jbXAoY2hlY2ssIGZyYW1lX2l2LCBBRVNfQkxPQ0tfU0laRSkgIT0gMCkKJiM0MzsJaWYgKGNyeXB0b19tZW1uZXEoY2hlY2ssIGZyYW1lX2l2LCBBRVNfQkxPQ0tfU0laRSkpCiAJCXJldHVybiAtRUlOVkFMOwogCXJldHVybiAwOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxODowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFNlY3VyaXR5IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBJdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBzd2FwLCByZXBsYWNpbmcgYG1lbWNtcGAgd2l0aCBgY3J5cHRvX21lbW5lcWAgaW4gYGFlc19zaXZfZGVjcnlwdGAgd2l0aGluIGBuZXQvbWFjODAyMTEvZmlsc19hZWFkLmNgLiBUaGUgZ29hbCBoZXJlIGlzIGNsZWFybHkgc2VjdXJpdHktZm9jdXNlZDogZWxpbWluYXRpbmcgYSB0aW1pbmcgdnVsbmVyYWJpbGl0eS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBmdW5jdGlvbiBwZXJmb3JtaW5nIGEgY3J1Y2lhbCBjb21wYXJpc29uLCBhbmQgdGhlIGNoYW5nZSBtYWtlcyBpdCB0aW1pbmctc2FmZS4KClRoZSByZWFsIHF1ZXN0aW9uLCB0aGUgb25lIEkmIzM5O20gYWx3YXlzIGFza2luZywgaXMsICYjMzQ7RG9lcyB0aGlzIG5lZWQgZnV6emluZz8mIzM0OyBGdW5jdGlvbmFsbHksIGl0JiMzOTtzIGVxdWl2YWxlbnQgZm9yIGNvcnJlY3RuZXNzLiBXZSAqa25vdyogYGNyeXB0b19tZW1uZXFgIGlzIGNvbnN0YW50IHRpbWU7IHRoYXQmIzM5O3MgdGhlIHBvaW50LiBJdCAqc2hvdWxkbiYjMzk7dCogaW50cm9kdWNlIGFueSBuZXcgZnVuY3Rpb25hbCBpc3N1ZXMgaW4gdGVybXMgb2YgdGhlIGNvbXBhcmlzb24gaXRzZWxmLiBUaGUgb2xkIGBtZW1jbXBgIHdhcyBhY2N1cmF0ZSBidXQgbm90IHRpbWluZy1zYWZlLiBGdXp6aW5nIHdvdWxkIGJlIHVubGlrZWx5IHRvIGV4cG9zZSBhbnkgbmV3IGNyYXNoIHNjZW5hcmlvcyBvciBpbmNvcnJlY3QgcmVzdWx0cyBpbiB0aGUgY29tcGFyaXNvbiBpdHNlbGYsIGFzIHRoZSBhY3R1YWwgYWxnb3JpdGhtIG9mIHRoZSBjb21wYXJpc29uIGlzIGZ1bmN0aW9uYWxseSB0aGUgc2FtZSAodGhvdWdoIGNvbnN0YW50IHRpbWUgbm93KS4gQnV0LCBpdCYjMzk7cyBhIGNvZGUgY2hhbmdlIGluIG1hYzgwMjExLiBJdCYjMzk7cyBwcnVkZW50IHRvIHJldmlldyB0aGUgY29udGV4dCB3aXRoaW4gYGFlc19zaXZfZGVjcnlwdGAgaW4gYG5ldC9tYWM4MDIxMS9maWxzX2FlYWQuY2AsIHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIHV0aWxpemluZyB0aGUgY29tcGFyaXNvbiBpcyBkb2luZyBzbyBpbiBhIHdheSB0aGF0IHRoZSB0aW1pbmctc2FmZSBjaGFuZ2Ugd29uJiMzOTt0IGluYWR2ZXJ0ZW50bHkgY2F1c2Ugc29tZSBvdGhlciBpc3N1ZSB0byBzdXJmYWNlICh1bmxpa2VseSwgYnV0IGEgcHJvcGVyIHJldmlldyBpcyBuZWVkZWQpLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE4OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Flc19zaXZfZGVjcnlwdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9maWxzX2FlYWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvZmlsc19hZWFkLmM9NzA9c3RhdGljIGludCBhZXNfc2l2X2VuY3J5cHQoY29uc3QgdTggKmtleSwgc2l6ZV90IGtleV9sZW4sXG4tLVxubmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jLTEzOC0vKiBOb3RlOiBhZGRyW10gYW5kIGxlbltdIG5lZWRzIHRvIGhhdmUgb25lIGV4dHJhIHNsb3QgYXQgdGhlIGVuZC4gKi9cbm5ldC9tYWM4MDIxMS9maWxzX2FlYWQuYzoxMzk6c3RhdGljIGludCBhZXNfc2l2X2RlY3J5cHQoY29uc3QgdTggKmtleSwgc2l6ZV90IGtleV9sZW4sXG5uZXQvbWFjODAyMTEvZmlsc19hZWFkLmMtMTQwLVx0XHRcdCAgIGNvbnN0IHU4ICppdl9jcnlwdCwgc2l6ZV90IGl2X2NfbGVuLFxuLS1cbm5ldC9tYWM4MDIxMS9maWxzX2FlYWQuYz0yNTQ9aW50IGZpbHNfZGVjcnlwdF9hc3NvY19yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9maWxzX2FlYWQuYy0zMDgtXHR9XG5uZXQvbWFjODAyMTEvZmlsc19hZWFkLmM6MzA5Olx0cmVzID0gYWVzX3Npdl9kZWNyeXB0KGFzc29jX2RhdGEtXHUwMDNlZmlsc19rZWssIGFzc29jX2RhdGEtXHUwMDNlZmlsc19rZWtfbGVuLFxubmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jLTMxMC1cdFx0XHQgICAgICBlbmNyLCBjcnlwdF9sZW4sIDUsIGFkZHIsIGxlbiwgZW5jcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTg6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRoaXMgUGF0Y2g/IExldCYjMzk7cyBUaGluayBJdCBUaHJvdWdoKioKCk9rYXksIHNvIGBmaWxzX2RlY3J5cHRfYXNzb2NfcmVzcGAgY2FsbHMgYGFlc19zaXZfZGVjcnlwdGAuIFRoZSBxdWVzdGlvbiBpcywgc2hvdWxkIEkgYm90aGVyIGZ1enppbmcgdGhpcyBjaGFuZ2U/IEl0JiMzOTtzIGp1c3QgYSByZXBsYWNlbWVudCBvZiBgbWVtY21wYCB3aXRoIGBjcnlwdG9fbWVtbmVxYC4gRnVuY3Rpb25hbGx5LCB0aGV5IGJlaGF2ZSB0aGUgc2FtZSDigJMgYm90aCByZXR1cm4gMCBmb3IgZXF1YWxpdHksIG5vbi16ZXJvIG90aGVyd2lzZS4gVGhlIGtleSBkaWZmZXJlbmNlIGlzIHRoYXQgYGNyeXB0b19tZW1uZXFgIGlzIGNvbnN0YW50IHRpbWUsIHdoaWNoLCBsZXQmIzM5O3MgYmUgaG9uZXN0LCBmdXp6aW5nIGlzbiYjMzk7dCBnb2luZyB0byBwaWNrIHVwIG9uLCBhcyBmdXp6aW5nIGNhbiYjMzk7dCBkZXRlY3QgdGltaW5nIGxlYWtzLgoKU28sIHJlYWxpc3RpY2FsbHksIGZ1enppbmcgdGhpcyAqc3BlY2lmaWMqIHBhdGNoIHdvbiYjMzk7dCB1bmNvdmVyIGFueSBuZXcgYnVncyByZWxhdGVkIHRvIHRoaXMgcGFydGljdWxhciBjaGFuZ2UsIHVubGVzcywgYW5kIGl0JiMzOTtzIGEgKmJpZyogdW5sZXNzLCBgY3J5cHRvX21lbW5lcWAgaXRzZWxmIGlzIGZ1bmRhbWVudGFsbHkgYnJva2VuLiBXaGljaCBpcyBoaWdobHkgdW5saWtlbHksIGVzcGVjaWFsbHkgc2luY2UgaXQmIzM5O3MgYW4gZXh0ZXJuYWwsIHdlbGwtdmV0dGVkIGZ1bmN0aW9uLgoKQnV0LCBoYW5nIG9uLi4uIGxldCYjMzk7cyByZXZpZXcgdGhlIGd1aWRlbGluZXMsICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczogWy4uLl0gTW9kaWZpY2F0aW9ucyB0byBbLi4uXSBjb2RlIGNvbW1lbnRzIFsuLi5dIGRlY29yYXRpdmUgY2hhbmdlcyBbLi4uXSBjaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cmIzM0Oy4gSXMgcmVwbGFjaW5nIGBtZW1jbXBgIHdpdGggYGNyeXB0b19tZW1uZXFgIGEgZnVuY3Rpb25hbCBjaGFuZ2U/IEl0ICpkb2VzKiBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgYnkgY2FsbGluZyBhIGRpZmZlcmVudCBmdW5jdGlvbi4gRG9lcyBpdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGZsb3csIHRob3VnaD8gSSBtZWFuLCB0aGUgbG9naWMsIHRoZSBlbmQgcmVzdWx0LCBpcyBpZGVudGljYWwuIEhtbW0uLi4KCk9rYXksIGhvbGQgb24uLi4gYGNyeXB0b19tZW1uZXFgIHJldHVybnMgYW4gYGludGAuIEkgbmVlZCB0byBjaGVjayB0aGUgZXhhY3QgYmVoYXZpb3VyIGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxODowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjcnlwdG9fbWVtbmVxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvY3J5cHRvL3V0aWxzLmg9MzU9c3RhdGljIGlubGluZSB2b2lkIGNyeXB0b194b3JfY3B5KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMxLCBjb25zdCB1OCAqc3JjMixcbi0tXG5pbmNsdWRlL2NyeXB0by91dGlscy5oLTU1LVxuaW5jbHVkZS9jcnlwdG8vdXRpbHMuaDo1Njpub2lubGluZSB1bnNpZ25lZCBsb25nIF9fY3J5cHRvX21lbW5lcShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiLCBzaXplX3Qgc2l6ZSk7XG5pbmNsdWRlL2NyeXB0by91dGlscy5oLTU3LVxuaW5jbHVkZS9jcnlwdG8vdXRpbHMuaC01OC0vKipcbmluY2x1ZGUvY3J5cHRvL3V0aWxzLmg6NTk6ICogY3J5cHRvX21lbW5lcSAtIENvbXBhcmUgdHdvIGFyZWFzIG9mIG1lbW9yeSB3aXRob3V0IGxlYWtpbmdcbmluY2x1ZGUvY3J5cHRvL3V0aWxzLmgtNjAtICpcdFx0ICAgdGltaW5nIGluZm9ybWF0aW9uLlxuLS1cbmluY2x1ZGUvY3J5cHRvL3V0aWxzLmgtNjctICovXG5pbmNsdWRlL2NyeXB0by91dGlscy5oOjY4OnN0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19tZW1uZXEoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwgc2l6ZV90IHNpemUpXG5pbmNsdWRlL2NyeXB0by91dGlscy5oLTY5LXtcbmluY2x1ZGUvY3J5cHRvL3V0aWxzLmg6NzA6XHRyZXR1cm4gX19jcnlwdG9fbWVtbmVxKGEsIGIsIHNpemUpICE9IDBVTCA/IDEgOiAwO1xuaW5jbHVkZS9jcnlwdG8vdXRpbHMuaC03MS19XG4tLVxuaW5jbHVkZS9jcnlwdG8veHRzLmg9MTE9c3RhdGljIGlubGluZSBpbnQgeHRzX3ZlcmlmeV9rZXkoc3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtLFxuLS1cbmluY2x1ZGUvY3J5cHRvL3h0cy5oLTMzLVx0XHRcdCAgICAgIENSWVBUT19URk1fUkVRX0ZPUkJJRF9XRUFLX0tFWVMpKSBcdTAwMjZcdTAwMjZcbmluY2x1ZGUvY3J5cHRvL3h0cy5oOjM0Olx0ICAgICFjcnlwdG9fbWVtbmVxKGtleSwga2V5ICYjNDM7IChrZXlsZW4gLyAyKSwga2V5bGVuIC8gMikpXG5pbmNsdWRlL2NyeXB0by94dHMuaC0zNS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkwMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciBDcnlwdG8gTWVtb3J5IENvbXBhcmlzb24qKgoKT2theSwgc28gYGNyeXB0b19tZW1uZXFgIHJldHVybnMgMSBmb3Igbm90IGVxdWFsLCBhbmQgMCBmb3IgZXF1YWwsIGp1c3QgbGlrZSBgbWVtY21wKGNoZWNrLCBmcmFtZV9pdiwgQUVTX0JMT0NLX1NJWkUpICE9IDBgLiBUaGUgdW5kZXJseWluZyBsb2dpYyBpcyBpZGVudGljYWwsIHNvIG9uIHRoZSBzdXJmYWNlLCBpdCBzZWVtcyBsaWtlIHJlZHVuZGFudCBjb2RlLiBUaGUgcXVlc3Rpb24gbm93IGlzOiBpcyBpdCB3b3J0aCBmdXp6aW5nIHRoaXM/CgpMZXQmIzM5O3Mgc2VlLiBUaGUgaW5zdHJ1Y3Rpb25zIGRpY3RhdGUgdGhhdCBpZiBpdOKAmXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB0aGVuIGZ1enppbmcgaXMgd2FycmFudGVkLiBTbywgYSBxdWljayBjb2RlIHNlYXJjaCBpcyBuZWNlc3NhcnkgdG8gdmVyaWZ5LiBJJiMzOTtkIHNheSBgV29ydGhGdXp6aW5nPXRydWVgIGJlY2F1c2UgdGhpcyBhZmZlY3RzIGNvcmUga2VybmVsIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYG1hYzgwMjExYCwgYW5kIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuCgpIb2xkIG9uLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBtYWM4MDIxMWAgaXMgcmVhY2hhYmxlLiBBaCwgeWVzLCB2aWEgYG1hYzgwMjExX2h3c2ltYC4gRXhjZWxsZW50LiBOb3csIGEgY3J1Y2lhbCBhc3BlY3QgcmVtYWluczogSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIHRoZSBgRklMU2AgZmVhdHVyZSBpcyBlbmFibGVkIG9yIGFjY2Vzc2libGUsIHNpbmNlIHRoaXMgbWlnaHQgYmUgdGllZCB0byB0aGUgY2hhbmdlcy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIGFuZCBjb2RlIHBhdGhzIHRvIGNvbmZpcm0gaXRzIHJlYWNoYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxODowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUFDODAyMTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwLVxubmV0L21hYzgwMjExL0tjb25maWc6MjE6Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xubmV0L21hYzgwMjExL0tjb25maWctMjItXHRib29sXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMy1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxubmV0L21hYzgwMjExL0tjb25maWctMjUtXHRib29sIFwmIzM0O01pbnN0cmVsXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQwLVxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxubmV0L21hYzgwMjExL0tjb25maWctNDktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1MDpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXHRzdHJpbmdcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFwmIzM0O1NvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxubmV0L21hYzgwMjExL0tjb25maWc6NjA6Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1Rcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIG1hYzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNzgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xubmV0L21hYzgwMjExL0tjb25maWctODAtXHRib29sIFwmIzM0O0VuYWJsZSBMRUQgdHJpZ2dlcnNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04Ny1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjg4OmNvbmZpZyBNQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7RXhwb3J0IG1hYzgwMjExIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctOTYtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7VHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxubmV0L21hYzgwMjExL0tjb25maWc6MTEwOm1lbnVjb25maWcgTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTExLVx0Ym9vbCBcJiMzNDtTZWxlY3QgbWFjODAyMTEgZGVidWdnaW5nIGZlYXR1cmVzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTE1LVxubmV0L21hYzgwMjExL0tjb25maWc6MTE2OmNvbmZpZyBNQUM4MDIxMV9OT0lOTElORVxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtEbyBub3QgaW5saW5lIFRYL1JYIGhhbmRsZXJzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTMxLVxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXHRib29sIFwmIzM0O1ZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0Mzpjb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTQ0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTMtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNTQ6Y29uZmlnIE1BQzgwMjExX1NUQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHN0YXRpb24gZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTYyLVxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTY0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIEhUIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NTpjb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgT0NCIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4NS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4Njpjb25maWcgTUFDODAyMTFfSUJTU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTg3LVx0Ym9vbCBcJiMzNDtWZXJib3NlIElCU1MgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTk2LVxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTk4LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIwOTpjb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxubmV0L21hYzgwMjExL0tjb25maWc6MjIyOmNvbmZpZyBNQUM4MDIxMV9NUEFUSF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjIzLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcGF0aCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzQtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTk6Y29uZmlnIE1BQzgwMjExX01FU0hfQ1NBX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBjaGFubmVsIHN3aXRjaCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODE6Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4Mi1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBURExTIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5Mzpjb25maWcgTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cdGJvb2wgXCYjMzQ7RXh0cmEgc3RhdGlzdGljcyBmb3IgVFgvUlggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMzA3LVxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxubmV0L21hYzgwMjExL0tjb25maWctMzA5LVx0aW50IFwmIzM0O1N0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcJiMzNDsgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipEaXZpbmcgaW50byB0aGUgTUFDODAyMTEgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcywgYW5kICpNQUM4MDIxMSogaXMgY2xlYXJseSB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIHBvaW50IGZvciB0aGlzIGVudGlyZSB3aXJlbGVzcyBzdGFjay4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlcmUmIzM5O3MgYW55dGhpbmcgc3BlY2lmaWNhbGx5IHRhaWxvcmVkIGZvciBGSUxTIOKAkyBGYXN0IEluaXRpYWwgTGluayBTZXR1cC4gSXQmIzM5O3MgdXN1YWxseSBoYW5kbGVkIGluIGEgc3BlY2lmaWMgd2F5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBoYW5kbGVkLCBzbyBsZXQmIzM5O3MgY2hlY2sgdGhlIGBuZXQvbWFjODAyMTEvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBwb3RlbnRpYWxseSBtb2R1bGUgZGVwZW5kZW5jaWVzIHJlc2lkZS4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSByZWxldmFudCBzb3VyY2VzIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbiB0byB1bmNvdmVyIHRoZSBGSUxTLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL01ha2VmaWxlPTU9bWFjODAyMTEteSA6PSBcXFxuLS1cbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS0yMy1cdGFlc19nbWFjLm8gXFxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZToyNDpcdGZpbHNfYWVhZC5vIFxcXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtMjUtXHRjZmcubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxODowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODk2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBQYXRjaDogYGZpbHNfYWVhZC5vYCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGFmZmVjdHMgYGZpbHNfYWVhZC5vYCwgd2hpY2ggaXMgYWx3YXlzIGNvbXBpbGVkIHdoZW4gYE1BQzgwMjExYCBpcyBlbmFibGVkLiBNeSBmaXJzdCB0aG91Z2h0IHdhcyB3aGV0aGVyIHJlcGxhY2luZyBgbWVtY21wYCB3aXRoIGBjcnlwdG9fbWVtbmVxYCBxdWFsaWZpZXMgYXMgYSBjaGFuZ2Ugd29ydGggZnV6emluZy4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjaGFuZ2UgZG9lc24mIzM5O3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LCBidXQgd2hhdCYjMzk7cyB0aGUgZGVhbCBoZXJlPwoKSSByZWFzb25lZCB0aGF0IGBjcnlwdG9fbWVtbmVxYCBpcyBlc3NlbnRpYWxseSBqdXN0IGEgY29uc3RhbnQtdGltZSB2ZXJzaW9uIG9mIGBtZW1jbXBgLCBib3RoIGV2YWx1YXRpbmcgdG8gdGhlIHNhbWUgYm9vbGVhbiByZXN1bHQ6IG5vbi16ZXJvIGlmIHRoZSBtZW1vcmllcyBkaWZmZXIsIHplcm8gaWYgdGhleSBhcmUgaWRlbnRpY2FsLiBUaGUgaW5zdHJ1Y3Rpb25zIG1lbnRpb24gJiMzNDtDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3csJiMzNDsgYnV0IHRoaXMgaXMgYSBmdW5jdGlvbiByZXBsYWNlbWVudCwgbm90IGp1c3QgYSBudW1lcmljIGNoYW5nZS4gU3RpbGwsIHRoZSBsb2dpYyBpcyBpZGVudGljYWwuIFRpbWluZyBkaWZmZXJlbmNlcyBhcmVuJiMzOTt0IGRldGVjdGFibGUgdmlhIGZ1enppbmcsIHJpZ2h0PyBTbyBmdXp6aW5nIHdvdWxkbiYjMzk7dCBmaW5kIG5ldyBidWdzIHdpdGggdGhlIGNoYW5nZS4gUmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgIHNlZW1lZCBhcHByb3ByaWF0ZSwgdGhlIHJhdGlvbmFsZSBiZWluZyBpdCYjMzk7cyBhIG5vbi1mdW5jdGlvbmFsLCB0aW1pbmctc2FmZSBjb21wYXJpc29uIHJlcGxhY2VtZW50LgoKQnV0IHRoZW4gSSBjaGVja2VkIHRvIGVuc3VyZSBgY3J5cHRvX21lbW5lcWAgaXNuJiMzOTt0IGEgbWFjcm8sIGFuZCwgcGVyIHRoZSBoZWFkZXIgZmlsZSwgaXQmIzM5O3MgYW4gaW5saW5lIGZ1bmN0aW9uLiBFdmVuIHRob3VnaCB0aGUgbG9naWMgaXMgdGhlIHNhbWUsIHRoaXMgaXNuJiMzOTt0IHN0cmljdGx5IGEgJiMzNDtudW1lcmljIGNvbnN0YW50IG9yIG1hY3JvJiMzNDsgY2hhbmdlLgoKSWYgSSB3ZXJlIHRvIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLCBJJiMzOTtkIG5lZWQgdG8gcHJvdmlkZSBgTUFDODAyMTFgIGFzIGFuIGBFbmFibGVDb25maWdgIGFuZCBzcGVjaWZ5IEZvY3VzU3ltYm9scy4gYGFlc19zaXZfZGVjcnlwdGAgY29tZXMgdG8gbWluZCBpbW1lZGlhdGVseS4gQnV0IHRoZW4gSSBoYXZlIHRvIGNvbnNpZGVyIHdoZXRoZXIgdG8gY2hvb3NlIGBmaWxzX2RlY3J5cHRfYXNzb2NfcmVzcGAsIHdoaWNoIGNhbGxzIGl0LCBpbnN0ZWFkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGl0IGlzIHJlYWNoYWJsZS4KClllcywgaXQgaXMsIGFuZCBjYW4gYmUgcmVhY2hlZCB2aWEgYGZpbHNfZGVjcnlwdF9hc3NvY19yZXNwYC4KCkJ1dCwgd2FpdC4gSSByZXJlYWQgdGhlIGluc3RydWN0aW9ucywgYW5kIGl0ICpkb2VzbiYjMzk7dCogZXhwbGljaXRseSBsaXN0ICYjMzQ7cmVwbGFjaW5nIGEgZnVuY3Rpb24gd2l0aCBhbiBlcXVpdmFsZW50IG9uZSYjMzQ7LiBJdCAqZG9lcyogc2F5ICYjMzQ7SWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OyBUaGlzIGRlZmluaXRlbHkgbW9kaWZpZXMgdGhlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBvZiBgbWFjODAyMTFgLgoKR2l2ZW4gdGhpcywgSSBzaG91bGQgcHJvYmFibHkgZXJyIG9uIHRoZSBzaWRlIG9mIGNhdXRpb24gYW5kIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLCBiZWNhdXNlIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIHNwZWNpZnkgdGhlc2U6CgoqICAgKipGb2N1c1N5bWJvbHM6KiogYGFlc19zaXZfZGVjcnlwdGAsIGBmaWxzX2RlY3J5cHRfYXNzb2NfcmVzcGAKKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgTUFDODAyMTFgCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBmaWxzX2RlY3J5cHRfYXNzb2NfcmVzcGAgaXMgdGhlICpvbmx5KiBjYWxsZXIgb2YgYGFlc19zaXZfZGVjcnlwdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Flc19zaXZfZGVjcnlwdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jPTcwPXN0YXRpYyBpbnQgYWVzX3Npdl9lbmNyeXB0KGNvbnN0IHU4ICprZXksIHNpemVfdCBrZXlfbGVuLFxuLS1cbm5ldC9tYWM4MDIxMS9maWxzX2FlYWQuYy0xMzgtLyogTm90ZTogYWRkcltdIGFuZCBsZW5bXSBuZWVkcyB0byBoYXZlIG9uZSBleHRyYSBzbG90IGF0IHRoZSBlbmQuICovXG5uZXQvbWFjODAyMTEvZmlsc19hZWFkLmM6MTM5OnN0YXRpYyBpbnQgYWVzX3Npdl9kZWNyeXB0KGNvbnN0IHU4ICprZXksIHNpemVfdCBrZXlfbGVuLFxubmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jLTE0MC1cdFx0XHQgICBjb25zdCB1OCAqaXZfY3J5cHQsIHNpemVfdCBpdl9jX2xlbixcbi0tXG5uZXQvbWFjODAyMTEvZmlsc19hZWFkLmM9MjU0PWludCBmaWxzX2RlY3J5cHRfYXNzb2NfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvZmlsc19hZWFkLmMtMzA4LVx0fVxubmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jOjMwOTpcdHJlcyA9IGFlc19zaXZfZGVjcnlwdChhc3NvY19kYXRhLVx1MDAzZWZpbHNfa2VrLCBhc3NvY19kYXRhLVx1MDAzZWZpbHNfa2VrX2xlbixcbm5ldC9tYWM4MDIxMS9maWxzX2FlYWQuYy0zMTAtXHRcdFx0ICAgICAgZW5jciwgY3J5cHRfbGVuLCA1LCBhZGRyLCBsZW4sIGVuY3IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxODowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODgwCgkJCQkJCQlvdXRwdXQ6IDkwCgkJCQkJCQl0aG91Z2h0czogNDA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2gmIzM5O3MgSW1wYWN0KioKCk9rYXksIHNvIGBmaWxzX2RlY3J5cHRfYXNzb2NfcmVzcGAgaXMgdGhlIHNvbGUgY2FsbGVyIG9mIHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbi4gTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciB0aGUgYE1BQzgwMjExX0hXU0lNYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyByZWxldmFudCBoZXJlLiBTaW5jZSB3ZSBhcmUgZGVhbGluZyB3aXRoIGBNQUM4MDIxMWAsIHdoaWNoIGlzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24sIGl0IHNlZW1zIHVubGlrZWx5IHRoYXQgaXQgaXMuCgpNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IHdhcnJhbnQgZnV6emluZywgc28gSSB3aWxsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBpcyBiZWNhdXNlIHRoZSBjaGFuZ2UgcmVwbGFjZXMgYSBgbWVtY21wYCBjYWxsIHdpdGggYGNyeXB0b19tZW1uZXFgLCB3aGljaCBpcyBkZXNpZ25lZCB0byBiZSB0aW1pbmctc2FmZS4gVGhpcyBpcyBhIG5vbi1mdW5jdGlvbmFsIGNoYW5nZTsgdGhlIGV4ZWN1dGlvbiBmbG93IHJlbWFpbnMgaWRlbnRpY2FsLCBhbmQgdGhlIHJlcGxhY2VtZW50IGlzIG1lYW50IHRvIG1pdGlnYXRlIGEgcG90ZW50aWFsIHRpbWluZyBhdHRhY2ssIHdoaWNoIGZ1enppbmcgaXMgbm90IGdvb2QgYXQgZGV0ZWN0aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRvIGRvY3VtZW50IG15IHJlYXNvbmluZy4KCkhlcmUgaXMgdGhlIHJlYXNvbmluZyBJIHdpbGwgcHJvdmlkZTogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYG1lbWNtcGAgd2l0aCBgY3J5cHRvX21lbW5lcWAgdG8gcHJldmVudCB0aW1pbmcgYXR0YWNrcy4gVGhpcyBpcyBhIG5vbi1mdW5jdGlvbmFsIGNoYW5nZSBpbiB0ZXJtcyBvZiBleGVjdXRpb24gZmxvdyBhbmQgY29ycmVjdG5lc3MsIGFzIGJvdGggZnVuY3Rpb25zIHJldHVybiBlcXVpdmFsZW50IGJvb2xlYW4gcmVzdWx0cy4gRnV6emluZyBjYW5ub3QgZGV0ZWN0IHRpbWluZyBkaWZmZXJlbmNlcywgc28gaXQgd2lsbCBub3QgZmluZCBhbnkgbmV3IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZS4mIzM0OwoKTm93LCBiZWZvcmUgSSBjb21taXQgdG8gdGhpcyBhc3Nlc3NtZW50LCBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgKnRydWx5KiB0aGUgb25seSBjaGFuZ2Ugd2l0aGluIHRoZSBwYXRjaC4gSSYjMzk7bGwgcmV2aWV3IHRoZSBkaWZmOgoKYGBgZGlmZgotLS0gYS9uZXQvbWFjODAyMTEvZmlsc19hZWFkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jCkBAIC0xOTUsNyAmIzQzOzE5NSw3IEBAIHN0YXRpYyBpbnQgYWVzX3Npdl9kZWNyeXB0KGNvbnN0IHU4ICprZXksIHNpemVfdCBrZXlfbGVuLAogCXJlcyA9IGFlc19zMnYoa2V5IC8qIEsxICovLCBrZXlfbGVuLCBudW1fZWxlbSwgYWRkciwgbGVuLCBjaGVjayk7CiAJaWYgKHJlcykKIAkJcmV0dXJuIHJlczsKLQlpZiAobWVtY21wKGNoZWNrLCBmcmFtZV9pdiwgQUVTX0JMT0NLX1NJWkUpICE9IDApCiYjNDM7CWlmIChjcnlwdG9fbWVtbmVxKGNoZWNrLCBmcmFtZV9pdiwgQUVTX0JMT0NLX1NJWkUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlyZXR1cm4gMDsKIH0KYGBgCgpZZXMsIHRoYXQmIzM5O3MgaXQuIEl0JiMzOTtzIGp1c3QgdGhlIG9uZSBzdWJzdGl0dXRpb24uCgpPa2F5LCBJJiMzOTttIGNvbmZpZGVudC4gSSYjMzk7bGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIG1lbWNtcCB3aXRoIGNyeXB0b19tZW1uZXEgdG8gcHJldmVudCB0aW1pbmcgYXR0YWNrcy4gVGhpcyBpcyBhIG5vbi1mdW5jdGlvbmFsIGNoYW5nZSBpbiB0ZXJtcyBvZiBleGVjdXRpb24gZmxvdyBhbmQgY29ycmVjdG5lc3MsIGFzIGJvdGggZnVuY3Rpb25zIHJldHVybiBlcXVpdmFsZW50IGJvb2xlYW4gcmVzdWx0cy4gRnV6emluZyBjYW5ub3QgZGV0ZWN0IHRpbWluZyBkaWZmZXJlbmNlcywgc28gaXQgd2lsbCBub3QgZmluZCBhbnkgbmV3IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIG1lbWNtcCB3aXRoIGNyeXB0b19tZW1uZXEgdG8gcHJldmVudCB0aW1pbmcgYXR0YWNrcy4gVGhpcyBpcyBhIG5vbi1mdW5jdGlvbmFsIGNoYW5nZSBpbiB0ZXJtcyBvZiBleGVjdXRpb24gZmxvdyBhbmQgY29ycmVjdG5lc3MsIGFzIGJvdGggZnVuY3Rpb25zIHJldHVybiBlcXVpdmFsZW50IGJvb2xlYW4gcmVzdWx0cy4gRnV6emluZyBjYW5ub3QgZGV0ZWN0IHRpbWluZyBkaWZmZXJlbmNlcywgc28gaXQgd2lsbCBub3QgZmluZCBhbnkgbmV3IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxODowNzozMi4zNTAzMzAyMjlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc4MDk5MTA0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIG1lbWNtcCB3aXRoIGNyeXB0b19tZW1uZXEgdG8gcHJldmVudCB0aW1pbmcgYXR0YWNrcy4gVGhpcyBpcyBhIG5vbi1mdW5jdGlvbmFsIGNoYW5nZSBpbiB0ZXJtcyBvZiBleGVjdXRpb24gZmxvdyBhbmQgY29ycmVjdG5lc3MsIGFzIGJvdGggZnVuY3Rpb25zIHJldHVybiBlcXVpdmFsZW50IGJvb2xlYW4gcmVzdWx0cy4gRnV6emluZyBjYW5ub3QgZGV0ZWN0IHRpbWluZyBkaWZmZXJlbmNlcywgc28gaXQgd2lsbCBub3QgZmluZCBhbnkgbmV3IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE4OjA3OjMyLjM1MDMzNjMwOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIzNzc5MDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDI2ODY3NjUyYWJkOTA5MWJlNzQyYTFlNzU2ZTkyNzMwMTEyM2M2Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCA5IDE4OjA3OjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9maWxzX2FlYWQuYyBiL25ldC9tYWM4MDIxMS9maWxzX2FlYWQuY1xcbmluZGV4IGQyZjRhMTdlYWI5OTAxLi4wMGI5MWU2ZWQ5OTRlMiAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvZmlsc19hZWFkLmNcXG4rKysgYi9uZXQvbWFjODAyMTEvZmlsc19hZWFkLmNcXG5AQCAtMTk1LDcgKzE5NSw3IEBAIHN0YXRpYyBpbnQgYWVzX3Npdl9kZWNyeXB0KGNvbnN0IHU4ICprZXksIHNpemVfdCBrZXlfbGVuLFxcbiBcXHRyZXMgPSBhZXNfczJ2KGtleSAvKiBLMSAqLywga2V5X2xlbiwgbnVtX2VsZW0sIGFkZHIsIGxlbiwgY2hlY2spO1xcbiBcXHRpZiAocmVzKVxcbiBcXHRcXHRyZXR1cm4gcmVzO1xcbi1cXHRpZiAobWVtY21wKGNoZWNrLCBmcmFtZV9pdiwgQUVTX0JMT0NLX1NJWkUpICE9IDApXFxuK1xcdGlmIChjcnlwdG9fbWVtbmVxKGNoZWNrLCBmcmFtZV9pdiwgQUVTX0JMT0NLX1NJWkUpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTg6MDc6MzIuNjc0ODk3NDEyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDc0ODUzMzU3MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIG1lbWNtcCB3aXRoIGNyeXB0b19tZW1uZXEgdG8gcHJldmVudCB0aW1pbmcgYXR0YWNrcy4gVGhpcyBpcyBhIG5vbi1mdW5jdGlvbmFsIGNoYW5nZSBpbiB0ZXJtcyBvZiBleGVjdXRpb24gZmxvdyBhbmQgY29ycmVjdG5lc3MsIGFzIGJvdGggZnVuY3Rpb25zIHJldHVybiBlcXVpdmFsZW50IGJvb2xlYW4gcmVzdWx0cy4gRnV6emluZyBjYW5ub3QgZGV0ZWN0IHRpbWluZyBkaWZmZXJlbmNlcywgc28gaXQgd2lsbCBub3QgZmluZCBhbnkgbmV3IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDI2ODY3NjUyYWJkOTA5MWJlNzQyYTFlNzU2ZTkyNzMwMTEyM2M2Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDkgMTg6MDc6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZmlsc19hZWFkLmMgYi9uZXQvbWFjODAyMTEvZmlsc19hZWFkLmNcbmluZGV4IGQyZjRhMTdlYWI5OTAxLi4wMGI5MWU2ZWQ5OTRlMiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9maWxzX2FlYWQuY1xuKysrIGIvbmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jXG5AQCAtMTk1LDcgKzE5NSw3IEBAIHN0YXRpYyBpbnQgYWVzX3Npdl9kZWNyeXB0KGNvbnN0IHU4ICprZXksIHNpemVfdCBrZXlfbGVuLFxuIFx0cmVzID0gYWVzX3MydihrZXkgLyogSzEgKi8sIGtleV9sZW4sIG51bV9lbGVtLCBhZGRyLCBsZW4sIGNoZWNrKTtcbiBcdGlmIChyZXMpXG4gXHRcdHJldHVybiByZXM7XG4tXHRpZiAobWVtY21wKGNoZWNrLCBmcmFtZV9pdiwgQUVTX0JMT0NLX1NJWkUpICE9IDApXG4rXHRpZiAoY3J5cHRvX21lbW5lcShjaGVjaywgZnJhbWVfaXYsIEFFU19CTE9DS19TSVpFKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRyZXR1cm4gMDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxODowNzozMi42NzQ5MDAxNzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzI3NDQxODAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTZWN1cml0eSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0J3MgYSBzdHJhaWdodGZvcndhcmQgc3dhcCwgcmVwbGFjaW5nIGBtZW1jbXBgIHdpdGggYGNyeXB0b19tZW1uZXFgIGluIGBhZXNfc2l2X2RlY3J5cHRgIHdpdGhpbiBgbmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jYC4gVGhlIGdvYWwgaGVyZSBpcyBjbGVhcmx5IHNlY3VyaXR5LWZvY3VzZWQ6IGVsaW1pbmF0aW5nIGEgdGltaW5nIHZ1bG5lcmFiaWxpdHkuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBmdW5jdGlvbiBwZXJmb3JtaW5nIGEgY3J1Y2lhbCBjb21wYXJpc29uLCBhbmQgdGhlIGNoYW5nZSBtYWtlcyBpdCB0aW1pbmctc2FmZS5cblxuVGhlIHJlYWwgcXVlc3Rpb24sIHRoZSBvbmUgSSdtIGFsd2F5cyBhc2tpbmcsIGlzLCBcIkRvZXMgdGhpcyBuZWVkIGZ1enppbmc/XCIgRnVuY3Rpb25hbGx5LCBpdCdzIGVxdWl2YWxlbnQgZm9yIGNvcnJlY3RuZXNzLiBXZSAqa25vdyogYGNyeXB0b19tZW1uZXFgIGlzIGNvbnN0YW50IHRpbWU7IHRoYXQncyB0aGUgcG9pbnQuIEl0ICpzaG91bGRuJ3QqIGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWwgaXNzdWVzIGluIHRlcm1zIG9mIHRoZSBjb21wYXJpc29uIGl0c2VsZi4gVGhlIG9sZCBgbWVtY21wYCB3YXMgYWNjdXJhdGUgYnV0IG5vdCB0aW1pbmctc2FmZS4gRnV6emluZyB3b3VsZCBiZSB1bmxpa2VseSB0byBleHBvc2UgYW55IG5ldyBjcmFzaCBzY2VuYXJpb3Mgb3IgaW5jb3JyZWN0IHJlc3VsdHMgaW4gdGhlIGNvbXBhcmlzb24gaXRzZWxmLCBhcyB0aGUgYWN0dWFsIGFsZ29yaXRobSBvZiB0aGUgY29tcGFyaXNvbiBpcyBmdW5jdGlvbmFsbHkgdGhlIHNhbWUgKHRob3VnaCBjb25zdGFudCB0aW1lIG5vdykuIEJ1dCwgaXQncyBhIGNvZGUgY2hhbmdlIGluIG1hYzgwMjExLiBJdCdzIHBydWRlbnQgdG8gcmV2aWV3IHRoZSBjb250ZXh0IHdpdGhpbiBgYWVzX3Npdl9kZWNyeXB0YCBpbiBgbmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jYCwgdG8gZW5zdXJlIHRoYXQgdGhlIGNvZGUgdXRpbGl6aW5nIHRoZSBjb21wYXJpc29uIGlzIGRvaW5nIHNvIGluIGEgd2F5IHRoYXQgdGhlIHRpbWluZy1zYWZlIGNoYW5nZSB3b24ndCBpbmFkdmVydGVudGx5IGNhdXNlIHNvbWUgb3RoZXIgaXNzdWUgdG8gc3VyZmFjZSAodW5saWtlbHksIGJ1dCBhIHByb3BlciByZXZpZXcgaXMgbmVlZGVkKS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE4OjA3OjQ1Ljk0OTMyMTAzN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTI4OTg1NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWVzX3Npdl9kZWNyeXB0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9maWxzX2FlYWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvZmlsc19hZWFkLmM9NzA9c3RhdGljIGludCBhZXNfc2l2X2VuY3J5cHQoY29uc3QgdTggKmtleSwgc2l6ZV90IGtleV9sZW4sXFxuLS1cXG5uZXQvbWFjODAyMTEvZmlsc19hZWFkLmMtMTM4LS8qIE5vdGU6IGFkZHJbXSBhbmQgbGVuW10gbmVlZHMgdG8gaGF2ZSBvbmUgZXh0cmEgc2xvdCBhdCB0aGUgZW5kLiAqL1xcbm5ldC9tYWM4MDIxMS9maWxzX2FlYWQuYzoxMzk6c3RhdGljIGludCBhZXNfc2l2X2RlY3J5cHQoY29uc3QgdTggKmtleSwgc2l6ZV90IGtleV9sZW4sXFxubmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jLTE0MC1cXHRcXHRcXHQgICBjb25zdCB1OCAqaXZfY3J5cHQsIHNpemVfdCBpdl9jX2xlbixcXG4tLVxcbm5ldC9tYWM4MDIxMS9maWxzX2FlYWQuYz0yNTQ9aW50IGZpbHNfZGVjcnlwdF9hc3NvY19yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jLTMwOC1cXHR9XFxubmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jOjMwOTpcXHRyZXMgPSBhZXNfc2l2X2RlY3J5cHQoYXNzb2NfZGF0YS1cXHUwMDNlZmlsc19rZWssIGFzc29jX2RhdGEtXFx1MDAzZWZpbHNfa2VrX2xlbixcXG5uZXQvbWFjODAyMTEvZmlsc19hZWFkLmMtMzEwLVxcdFxcdFxcdCAgICAgIGVuY3IsIGNyeXB0X2xlbiwgNSwgYWRkciwgbGVuLCBlbmNyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTg6MDc6NDYuMjYyMjI1OTczWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU0OTIxNjEwMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUaGlzIFBhdGNoPyBMZXQncyBUaGluayBJdCBUaHJvdWdoKipcblxuT2theSwgc28gYGZpbHNfZGVjcnlwdF9hc3NvY19yZXNwYCBjYWxscyBgYWVzX3Npdl9kZWNyeXB0YC4gVGhlIHF1ZXN0aW9uIGlzLCBzaG91bGQgSSBib3RoZXIgZnV6emluZyB0aGlzIGNoYW5nZT8gSXQncyBqdXN0IGEgcmVwbGFjZW1lbnQgb2YgYG1lbWNtcGAgd2l0aCBgY3J5cHRvX21lbW5lcWAuIEZ1bmN0aW9uYWxseSwgdGhleSBiZWhhdmUgdGhlIHNhbWUg4oCTIGJvdGggcmV0dXJuIDAgZm9yIGVxdWFsaXR5LCBub24temVybyBvdGhlcndpc2UuIFRoZSBrZXkgZGlmZmVyZW5jZSBpcyB0aGF0IGBjcnlwdG9fbWVtbmVxYCBpcyBjb25zdGFudCB0aW1lLCB3aGljaCwgbGV0J3MgYmUgaG9uZXN0LCBmdXp6aW5nIGlzbid0IGdvaW5nIHRvIHBpY2sgdXAgb24sIGFzIGZ1enppbmcgY2FuJ3QgZGV0ZWN0IHRpbWluZyBsZWFrcy5cblxuU28sIHJlYWxpc3RpY2FsbHksIGZ1enppbmcgdGhpcyAqc3BlY2lmaWMqIHBhdGNoIHdvbid0IHVuY292ZXIgYW55IG5ldyBidWdzIHJlbGF0ZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIGNoYW5nZSwgdW5sZXNzLCBhbmQgaXQncyBhICpiaWcqIHVubGVzcywgYGNyeXB0b19tZW1uZXFgIGl0c2VsZiBpcyBmdW5kYW1lbnRhbGx5IGJyb2tlbi4gV2hpY2ggaXMgaGlnaGx5IHVubGlrZWx5LCBlc3BlY2lhbGx5IHNpbmNlIGl0J3MgYW4gZXh0ZXJuYWwsIHdlbGwtdmV0dGVkIGZ1bmN0aW9uLlxuXG5CdXQsIGhhbmcgb24uLi4gbGV0J3MgcmV2aWV3IHRoZSBndWlkZWxpbmVzLCBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IFsuLi5dIE1vZGlmaWNhdGlvbnMgdG8gWy4uLl0gY29kZSBjb21tZW50cyBbLi4uXSBkZWNvcmF0aXZlIGNoYW5nZXMgWy4uLl0gY2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93XCIuIElzIHJlcGxhY2luZyBgbWVtY21wYCB3aXRoIGBjcnlwdG9fbWVtbmVxYCBhIGZ1bmN0aW9uYWwgY2hhbmdlPyBJdCAqZG9lcyogYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IGJ5IGNhbGxpbmcgYSBkaWZmZXJlbnQgZnVuY3Rpb24uIERvZXMgaXQgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBmbG93LCB0aG91Z2g/IEkgbWVhbiwgdGhlIGxvZ2ljLCB0aGUgZW5kIHJlc3VsdCwgaXMgaWRlbnRpY2FsLiBIbW1tLi4uXG5cbk9rYXksIGhvbGQgb24uLi4gYGNyeXB0b19tZW1uZXFgIHJldHVybnMgYW4gYGludGAuIEkgbmVlZCB0byBjaGVjayB0aGUgZXhhY3QgYmVoYXZpb3VyIGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxODowODowMS43NTQzODkyNzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU2MzE0NzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNyeXB0b19tZW1uZXFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9jcnlwdG8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvY3J5cHRvL3V0aWxzLmg9MzU9c3RhdGljIGlubGluZSB2b2lkIGNyeXB0b194b3JfY3B5KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMxLCBjb25zdCB1OCAqc3JjMixcXG4tLVxcbmluY2x1ZGUvY3J5cHRvL3V0aWxzLmgtNTUtXFxuaW5jbHVkZS9jcnlwdG8vdXRpbHMuaDo1Njpub2lubGluZSB1bnNpZ25lZCBsb25nIF9fY3J5cHRvX21lbW5lcShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiLCBzaXplX3Qgc2l6ZSk7XFxuaW5jbHVkZS9jcnlwdG8vdXRpbHMuaC01Ny1cXG5pbmNsdWRlL2NyeXB0by91dGlscy5oLTU4LS8qKlxcbmluY2x1ZGUvY3J5cHRvL3V0aWxzLmg6NTk6ICogY3J5cHRvX21lbW5lcSAtIENvbXBhcmUgdHdvIGFyZWFzIG9mIG1lbW9yeSB3aXRob3V0IGxlYWtpbmdcXG5pbmNsdWRlL2NyeXB0by91dGlscy5oLTYwLSAqXFx0XFx0ICAgdGltaW5nIGluZm9ybWF0aW9uLlxcbi0tXFxuaW5jbHVkZS9jcnlwdG8vdXRpbHMuaC02Ny0gKi9cXG5pbmNsdWRlL2NyeXB0by91dGlscy5oOjY4OnN0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19tZW1uZXEoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwgc2l6ZV90IHNpemUpXFxuaW5jbHVkZS9jcnlwdG8vdXRpbHMuaC02OS17XFxuaW5jbHVkZS9jcnlwdG8vdXRpbHMuaDo3MDpcXHRyZXR1cm4gX19jcnlwdG9fbWVtbmVxKGEsIGIsIHNpemUpICE9IDBVTCA/IDEgOiAwO1xcbmluY2x1ZGUvY3J5cHRvL3V0aWxzLmgtNzEtfVxcbi0tXFxuaW5jbHVkZS9jcnlwdG8veHRzLmg9MTE9c3RhdGljIGlubGluZSBpbnQgeHRzX3ZlcmlmeV9rZXkoc3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtLFxcbi0tXFxuaW5jbHVkZS9jcnlwdG8veHRzLmgtMzMtXFx0XFx0XFx0ICAgICAgQ1JZUFRPX1RGTV9SRVFfRk9SQklEX1dFQUtfS0VZUykpIFxcdTAwMjZcXHUwMDI2XFxuaW5jbHVkZS9jcnlwdG8veHRzLmg6MzQ6XFx0ICAgICFjcnlwdG9fbWVtbmVxKGtleSwga2V5ICsgKGtleWxlbiAvIDIpLCBrZXlsZW4gLyAyKSlcXG5pbmNsdWRlL2NyeXB0by94dHMuaC0zNS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTg6MDg6MDIuMTEwNzExMTE5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY3ODMxNDA0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uIGZvciBDcnlwdG8gTWVtb3J5IENvbXBhcmlzb24qKlxuXG5Pa2F5LCBzbyBgY3J5cHRvX21lbW5lcWAgcmV0dXJucyAxIGZvciBub3QgZXF1YWwsIGFuZCAwIGZvciBlcXVhbCwganVzdCBsaWtlIGBtZW1jbXAoY2hlY2ssIGZyYW1lX2l2LCBBRVNfQkxPQ0tfU0laRSkgIT0gMGAuIFRoZSB1bmRlcmx5aW5nIGxvZ2ljIGlzIGlkZW50aWNhbCwgc28gb24gdGhlIHN1cmZhY2UsIGl0IHNlZW1zIGxpa2UgcmVkdW5kYW50IGNvZGUuIFRoZSBxdWVzdGlvbiBub3cgaXM6IGlzIGl0IHdvcnRoIGZ1enppbmcgdGhpcz9cblxuTGV0J3Mgc2VlLiBUaGUgaW5zdHJ1Y3Rpb25zIGRpY3RhdGUgdGhhdCBpZiBpdOKAmXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB0aGVuIGZ1enppbmcgaXMgd2FycmFudGVkLiBTbywgYSBxdWljayBjb2RlIHNlYXJjaCBpcyBuZWNlc3NhcnkgdG8gdmVyaWZ5LiBJJ2Qgc2F5IGBXb3J0aEZ1enppbmc9dHJ1ZWAgYmVjYXVzZSB0aGlzIGFmZmVjdHMgY29yZSBrZXJuZWwgbG9naWMsIHNwZWNpZmljYWxseSBgbWFjODAyMTFgLCBhbmQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS5cblxuSG9sZCBvbiwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbWFjODAyMTFgIGlzIHJlYWNoYWJsZS4gQWgsIHllcywgdmlhIGBtYWM4MDIxMV9od3NpbWAuIEV4Y2VsbGVudC4gTm93LCBhIGNydWNpYWwgYXNwZWN0IHJlbWFpbnM6IEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGUgYEZJTFNgIGZlYXR1cmUgaXMgZW5hYmxlZCBvciBhY2Nlc3NpYmxlLCBzaW5jZSB0aGlzIG1pZ2h0IGJlIHRpZWQgdG8gdGhlIGNoYW5nZXMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIGFuZCBjb2RlIHBhdGhzIHRvIGNvbmZpcm0gaXRzIHJlYWNoYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkwMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxODowODowOS43ODkwMjgxNzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczMDAyNDIyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDODAyMTFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOmNvbmZpZyBNQUM4MDIxMVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MTk9aWYgTUFDODAyMTEgIT0gblxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIxOmNvbmZpZyBNQUM4MDIxMV9IQVNfUkNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMi1cXHRib29sXFxubmV0L21hYzgwMjExL0tjb25maWctMjMtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjQ6Y29uZmlnIE1BQzgwMjExX1JDX01JTlNUUkVMXFxubmV0L21hYzgwMjExL0tjb25maWctMjUtXFx0Ym9vbCBcXFwiTWluc3RyZWxcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MzE9Y2hvaWNlXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00MC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo0MTpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9NDg9ZW5kY2hvaWNlXFxubmV0L21hYzgwMjExL0tjb25maWctNDktXFxubmV0L21hYzgwMjExL0tjb25maWc6NTA6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01MS1cXHRzdHJpbmdcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTU3PWNvbW1lbnQgXFxcIlNvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjYwOmNvbmZpZyBNQUM4MDIxMV9LVU5JVF9URVNUXFxubmV0L21hYzgwMjExL0tjb25maWctNjEtXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBtYWM4MDIxMVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNjktXFxubmV0L21hYzgwMjExL0tjb25maWc6NzA6Y29uZmlnIE1BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cXHRib29sIFxcXCJFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03OC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTgwLVxcdGJvb2wgXFxcIkVuYWJsZSBMRUQgdHJpZ2dlcnNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04Ny1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo4ODpjb25maWcgTUFDODAyMTFfREVCVUdGU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkV4cG9ydCBtYWM4MDIxMSBpbnRlcm5hbHMgaW4gRGVidWdGU1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk2LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjk3OmNvbmZpZyBNQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cXHRib29sIFxcXCJUcmFjZSBhbGwgbWFjODAyMTEgZGVidWcgbWVzc2FnZXNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMDktXFxubmV0L21hYzgwMjExL0tjb25maWc6MTEwOm1lbnVjb25maWcgTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExMS1cXHRib29sIFxcXCJTZWxlY3QgbWFjODAyMTEgZGVidWdnaW5nIGZlYXR1cmVzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTE1LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExNjpjb25maWcgTUFDODAyMTFfTk9JTkxJTkVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRG8gbm90IGlubGluZSBUWC9SWCBoYW5kbGVyc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzMS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMzI6Y29uZmlnIE1BQzgwMjExX1ZFUkJPU0VfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXFx0Ym9vbCBcXFwiVmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTQyLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0Mzpjb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0NC1cXHRib29sIFxcXCJWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTMtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTU0OmNvbmZpZyBNQUM4MDIxMV9TVEFfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTUtXFx0Ym9vbCBcXFwiVmVyYm9zZSBzdGF0aW9uIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNjM6Y29uZmlnIE1BQzgwMjExX0hUX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTY0LVxcdGJvb2wgXFxcIlZlcmJvc2UgSFQgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTc0LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NTpjb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTc2LVxcdGJvb2wgXFxcIlZlcmJvc2UgT0NCIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4NS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxODY6Y29uZmlnIE1BQzgwMjExX0lCU1NfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODctXFx0Ym9vbCBcXFwiVmVyYm9zZSBJQlNTIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5Ni1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxOTc6Y29uZmlnIE1BQzgwMjExX1BTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTk4LVxcdGJvb2wgXFxcIlZlcmJvc2UgcG93ZXJzYXZlIG1vZGUgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjA4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIwOTpjb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjEwLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIyMjpjb25maWcgTUFDODAyMTFfTVBBVEhfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjMtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBhdGggZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjM0LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIzNTpjb25maWcgTUFDODAyMTFfTUhXTVBfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIEhXTVAgcm91dGluZyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDctXFxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDktXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjU5OmNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2MC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI3MDpjb25maWcgTUFDODAyMTFfTUVTSF9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcG93ZXJzYXZlIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4MC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODE6Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODItXFx0Ym9vbCBcXFwiVmVyYm9zZSBURExTIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOTM6Y29uZmlnIE1BQzgwMjExX0RFQlVHX0NPVU5URVJTXFxubmV0L21hYzgwMjExL0tjb25maWctMjk0LVxcdGJvb2wgXFxcIkV4dHJhIHN0YXRpc3RpY3MgZm9yIFRYL1JYIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwNy1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzozMDg6Y29uZmlnIE1BQzgwMjExX1NUQV9IQVNIX01BWF9TSVpFXFxubmV0L21hYzgwMjExL0tjb25maWctMzA5LVxcdGludCBcXFwiU3RhdGlvbiBoYXNoIHRhYmxlIG1heGltdW0gc2l6ZVxcXCIgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxODowODoxMS41MTkwODcxOTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTQwMDc2NzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgTUFDODAyMTEgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMsIGFuZCAqTUFDODAyMTEqIGlzIGNsZWFybHkgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBwb2ludCBmb3IgdGhpcyBlbnRpcmUgd2lyZWxlc3Mgc3RhY2suIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXJlJ3MgYW55dGhpbmcgc3BlY2lmaWNhbGx5IHRhaWxvcmVkIGZvciBGSUxTIOKAkyBGYXN0IEluaXRpYWwgTGluayBTZXR1cC4gSXQncyB1c3VhbGx5IGhhbmRsZWQgaW4gYSBzcGVjaWZpYyB3YXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIGhhbmRsZWQsIHNvIGxldCdzIGNoZWNrIHRoZSBgbmV0L21hYzgwMjExL01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBwb3RlbnRpYWxseSBtb2R1bGUgZGVwZW5kZW5jaWVzIHJlc2lkZS4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSByZWxldmFudCBzb3VyY2VzIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbiB0byB1bmNvdmVyIHRoZSBGSUxTLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NTksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxODowODoxOC4wNTkxNjg0MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQzMDg0NTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9NYWtlZmlsZT01PW1hYzgwMjExLXkgOj0gXFxcXFxcbi0tXFxubmV0L21hYzgwMjExL01ha2VmaWxlLTIzLVxcdGFlc19nbWFjLm8gXFxcXFxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZToyNDpcXHRmaWxzX2FlYWQubyBcXFxcXFxubmV0L21hYzgwMjExL01ha2VmaWxlLTI1LVxcdGNmZy5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTg6MDg6MTguNjAyMjYwODQ1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNTA3MjE2MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBQYXRjaDogYGZpbHNfYWVhZC5vYCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggYWZmZWN0cyBgZmlsc19hZWFkLm9gLCB3aGljaCBpcyBhbHdheXMgY29tcGlsZWQgd2hlbiBgTUFDODAyMTFgIGlzIGVuYWJsZWQuIE15IGZpcnN0IHRob3VnaHQgd2FzIHdoZXRoZXIgcmVwbGFjaW5nIGBtZW1jbXBgIHdpdGggYGNyeXB0b19tZW1uZXFgIHF1YWxpZmllcyBhcyBhIGNoYW5nZSB3b3J0aCBmdXp6aW5nLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNoYW5nZSBkb2Vzbid0IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdywgYnV0IHdoYXQncyB0aGUgZGVhbCBoZXJlP1xuXG5JIHJlYXNvbmVkIHRoYXQgYGNyeXB0b19tZW1uZXFgIGlzIGVzc2VudGlhbGx5IGp1c3QgYSBjb25zdGFudC10aW1lIHZlcnNpb24gb2YgYG1lbWNtcGAsIGJvdGggZXZhbHVhdGluZyB0byB0aGUgc2FtZSBib29sZWFuIHJlc3VsdDogbm9uLXplcm8gaWYgdGhlIG1lbW9yaWVzIGRpZmZlciwgemVybyBpZiB0aGV5IGFyZSBpZGVudGljYWwuIFRoZSBpbnN0cnVjdGlvbnMgbWVudGlvbiBcIkNoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdyxcIiBidXQgdGhpcyBpcyBhIGZ1bmN0aW9uIHJlcGxhY2VtZW50LCBub3QganVzdCBhIG51bWVyaWMgY2hhbmdlLiBTdGlsbCwgdGhlIGxvZ2ljIGlzIGlkZW50aWNhbC4gVGltaW5nIGRpZmZlcmVuY2VzIGFyZW4ndCBkZXRlY3RhYmxlIHZpYSBmdXp6aW5nLCByaWdodD8gU28gZnV6emluZyB3b3VsZG4ndCBmaW5kIG5ldyBidWdzIHdpdGggdGhlIGNoYW5nZS4gUmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgIHNlZW1lZCBhcHByb3ByaWF0ZSwgdGhlIHJhdGlvbmFsZSBiZWluZyBpdCdzIGEgbm9uLWZ1bmN0aW9uYWwsIHRpbWluZy1zYWZlIGNvbXBhcmlzb24gcmVwbGFjZW1lbnQuXG5cbkJ1dCB0aGVuIEkgY2hlY2tlZCB0byBlbnN1cmUgYGNyeXB0b19tZW1uZXFgIGlzbid0IGEgbWFjcm8sIGFuZCwgcGVyIHRoZSBoZWFkZXIgZmlsZSwgaXQncyBhbiBpbmxpbmUgZnVuY3Rpb24uIEV2ZW4gdGhvdWdoIHRoZSBsb2dpYyBpcyB0aGUgc2FtZSwgdGhpcyBpc24ndCBzdHJpY3RseSBhIFwibnVtZXJpYyBjb25zdGFudCBvciBtYWNyb1wiIGNoYW5nZS5cblxuSWYgSSB3ZXJlIHRvIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLCBJJ2QgbmVlZCB0byBwcm92aWRlIGBNQUM4MDIxMWAgYXMgYW4gYEVuYWJsZUNvbmZpZ2AgYW5kIHNwZWNpZnkgRm9jdXNTeW1ib2xzLiBgYWVzX3Npdl9kZWNyeXB0YCBjb21lcyB0byBtaW5kIGltbWVkaWF0ZWx5LiBCdXQgdGhlbiBJIGhhdmUgdG8gY29uc2lkZXIgd2hldGhlciB0byBjaG9vc2UgYGZpbHNfZGVjcnlwdF9hc3NvY19yZXNwYCwgd2hpY2ggY2FsbHMgaXQsIGluc3RlYWQuIExldCdzIG1ha2Ugc3VyZSBpdCBpcyByZWFjaGFibGUuXG5cblllcywgaXQgaXMsIGFuZCBjYW4gYmUgcmVhY2hlZCB2aWEgYGZpbHNfZGVjcnlwdF9hc3NvY19yZXNwYC5cblxuQnV0LCB3YWl0LiBJIHJlcmVhZCB0aGUgaW5zdHJ1Y3Rpb25zLCBhbmQgaXQgKmRvZXNuJ3QqIGV4cGxpY2l0bHkgbGlzdCBcInJlcGxhY2luZyBhIGZ1bmN0aW9uIHdpdGggYW4gZXF1aXZhbGVudCBvbmVcIi4gSXQgKmRvZXMqIHNheSBcIklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXCIgVGhpcyBkZWZpbml0ZWx5IG1vZGlmaWVzIHRoZSByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgb2YgYG1hYzgwMjExYC5cblxuR2l2ZW4gdGhpcywgSSBzaG91bGQgcHJvYmFibHkgZXJyIG9uIHRoZSBzaWRlIG9mIGNhdXRpb24gYW5kIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLCBiZWNhdXNlIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb2RlLiBJJ2xsIG5lZWQgdG8gc3BlY2lmeSB0aGVzZTpcblxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBhZXNfc2l2X2RlY3J5cHRgLCBgZmlsc19kZWNyeXB0X2Fzc29jX3Jlc3BgXG4qICAgKipFbmFibGVDb25maWdzOioqIGBNQUM4MDIxMWBcblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBmaWxzX2RlY3J5cHRfYXNzb2NfcmVzcGAgaXMgdGhlICpvbmx5KiBjYWxsZXIgb2YgYGFlc19zaXZfZGVjcnlwdGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4OTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTg6MDg6MzAuMTA5NDgxNzY0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDg3MjM3MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWVzX3Npdl9kZWNyeXB0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jPTcwPXN0YXRpYyBpbnQgYWVzX3Npdl9lbmNyeXB0KGNvbnN0IHU4ICprZXksIHNpemVfdCBrZXlfbGVuLFxcbi0tXFxubmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jLTEzOC0vKiBOb3RlOiBhZGRyW10gYW5kIGxlbltdIG5lZWRzIHRvIGhhdmUgb25lIGV4dHJhIHNsb3QgYXQgdGhlIGVuZC4gKi9cXG5uZXQvbWFjODAyMTEvZmlsc19hZWFkLmM6MTM5OnN0YXRpYyBpbnQgYWVzX3Npdl9kZWNyeXB0KGNvbnN0IHU4ICprZXksIHNpemVfdCBrZXlfbGVuLFxcbm5ldC9tYWM4MDIxMS9maWxzX2FlYWQuYy0xNDAtXFx0XFx0XFx0ICAgY29uc3QgdTggKml2X2NyeXB0LCBzaXplX3QgaXZfY19sZW4sXFxuLS1cXG5uZXQvbWFjODAyMTEvZmlsc19hZWFkLmM9MjU0PWludCBmaWxzX2RlY3J5cHRfYXNzb2NfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9maWxzX2FlYWQuYy0zMDgtXFx0fVxcbm5ldC9tYWM4MDIxMS9maWxzX2FlYWQuYzozMDk6XFx0cmVzID0gYWVzX3Npdl9kZWNyeXB0KGFzc29jX2RhdGEtXFx1MDAzZWZpbHNfa2VrLCBhc3NvY19kYXRhLVxcdTAwM2VmaWxzX2tla19sZW4sXFxubmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jLTMxMC1cXHRcXHRcXHQgICAgICBlbmNyLCBjcnlwdF9sZW4sIDUsIGFkZHIsIGxlbiwgZW5jcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE4OjA4OjMwLjc1ODIxMTI4MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTQwMTk4NTg2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoJ3MgSW1wYWN0KipcblxuT2theSwgc28gYGZpbHNfZGVjcnlwdF9hc3NvY19yZXNwYCBpcyB0aGUgc29sZSBjYWxsZXIgb2YgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uLiBOb3csIEkgbmVlZCB0byBjb25zaWRlciB3aGV0aGVyIHRoZSBgTUFDODAyMTFfSFdTSU1gIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHJlbGV2YW50IGhlcmUuIFNpbmNlIHdlIGFyZSBkZWFsaW5nIHdpdGggYE1BQzgwMjExYCwgd2hpY2ggaXMgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiwgaXQgc2VlbXMgdW5saWtlbHkgdGhhdCBpdCBpcy5cblxuTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IHdhcnJhbnQgZnV6emluZywgc28gSSB3aWxsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBpcyBiZWNhdXNlIHRoZSBjaGFuZ2UgcmVwbGFjZXMgYSBgbWVtY21wYCBjYWxsIHdpdGggYGNyeXB0b19tZW1uZXFgLCB3aGljaCBpcyBkZXNpZ25lZCB0byBiZSB0aW1pbmctc2FmZS4gVGhpcyBpcyBhIG5vbi1mdW5jdGlvbmFsIGNoYW5nZTsgdGhlIGV4ZWN1dGlvbiBmbG93IHJlbWFpbnMgaWRlbnRpY2FsLCBhbmQgdGhlIHJlcGxhY2VtZW50IGlzIG1lYW50IHRvIG1pdGlnYXRlIGEgcG90ZW50aWFsIHRpbWluZyBhdHRhY2ssIHdoaWNoIGZ1enppbmcgaXMgbm90IGdvb2QgYXQgZGV0ZWN0aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRvIGRvY3VtZW50IG15IHJlYXNvbmluZy5cblxuSGVyZSBpcyB0aGUgcmVhc29uaW5nIEkgd2lsbCBwcm92aWRlOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBgbWVtY21wYCB3aXRoIGBjcnlwdG9fbWVtbmVxYCB0byBwcmV2ZW50IHRpbWluZyBhdHRhY2tzLiBUaGlzIGlzIGEgbm9uLWZ1bmN0aW9uYWwgY2hhbmdlIGluIHRlcm1zIG9mIGV4ZWN1dGlvbiBmbG93IGFuZCBjb3JyZWN0bmVzcywgYXMgYm90aCBmdW5jdGlvbnMgcmV0dXJuIGVxdWl2YWxlbnQgYm9vbGVhbiByZXN1bHRzLiBGdXp6aW5nIGNhbm5vdCBkZXRlY3QgdGltaW5nIGRpZmZlcmVuY2VzLCBzbyBpdCB3aWxsIG5vdCBmaW5kIGFueSBuZXcgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlLlwiXG5cbk5vdywgYmVmb3JlIEkgY29tbWl0IHRvIHRoaXMgYXNzZXNzbWVudCwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgKnRydWx5KiB0aGUgb25seSBjaGFuZ2Ugd2l0aGluIHRoZSBwYXRjaC4gSSdsbCByZXZpZXcgdGhlIGRpZmY6XG5cbmBgYGRpZmZcbi0tLSBhL25ldC9tYWM4MDIxMS9maWxzX2FlYWQuY1xuKysrIGIvbmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jXG5AQCAtMTk1LDcgKzE5NSw3IEBAIHN0YXRpYyBpbnQgYWVzX3Npdl9kZWNyeXB0KGNvbnN0IHU4ICprZXksIHNpemVfdCBrZXlfbGVuLFxuIFx0cmVzID0gYWVzX3MydihrZXkgLyogSzEgKi8sIGtleV9sZW4sIG51bV9lbGVtLCBhZGRyLCBsZW4sIGNoZWNrKTtcbiBcdGlmIChyZXMpXG4gXHRcdHJldHVybiByZXM7XG4tXHRpZiAobWVtY21wKGNoZWNrLCBmcmFtZV9pdiwgQUVTX0JMT0NLX1NJWkUpICE9IDApXG4rXHRpZiAoY3J5cHRvX21lbW5lcShjaGVjaywgZnJhbWVfaXYsIEFFU19CTE9DS19TSVpFKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRyZXR1cm4gMDtcbiB9XG5gYGBcblxuWWVzLCB0aGF0J3MgaXQuIEl0J3MganVzdCB0aGUgb25lIHN1YnN0aXR1dGlvbi5cblxuT2theSwgSSdtIGNvbmZpZGVudC4gSSdsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4ODAsIk91dHB1dFRva2VucyI6OTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTg6MTA6MDAuMTYwMjAwOTUyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgbWVtY21wIHdpdGggY3J5cHRvX21lbW5lcSB0byBwcmV2ZW50IHRpbWluZyBhdHRhY2tzLiBUaGlzIGlzIGEgbm9uLWZ1bmN0aW9uYWwgY2hhbmdlIGluIHRlcm1zIG9mIGV4ZWN1dGlvbiBmbG93IGFuZCBjb3JyZWN0bmVzcywgYXMgYm90aCBmdW5jdGlvbnMgcmV0dXJuIGVxdWl2YWxlbnQgYm9vbGVhbiByZXN1bHRzLiBGdXp6aW5nIGNhbm5vdCBkZXRlY3QgdGltaW5nIGRpZmZlcmVuY2VzLCBzbyBpdCB3aWxsIG5vdCBmaW5kIGFueSBuZXcgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgbWVtY21wIHdpdGggY3J5cHRvX21lbW5lcSB0byBwcmV2ZW50IHRpbWluZyBhdHRhY2tzLiBUaGlzIGlzIGEgbm9uLWZ1bmN0aW9uYWwgY2hhbmdlIGluIHRlcm1zIG9mIGV4ZWN1dGlvbiBmbG93IGFuZCBjb3JyZWN0bmVzcywgYXMgYm90aCBmdW5jdGlvbnMgcmV0dXJuIGVxdWl2YWxlbnQgYm9vbGVhbiByZXN1bHRzLiBGdXp6aW5nIGNhbm5vdCBkZXRlY3QgdGltaW5nIGRpZmZlcmVuY2VzLCBzbyBpdCB3aWxsIG5vdCBmaW5kIGFueSBuZXcgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowr4w4x[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-09 17:55:11 +0000 UTC FinishedAt: 2026-07-09 18:10:01 +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+CgkJCTx0ZD4yMDI2LzA3LzA5IDE4OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIG1lbWNtcCB3aXRoIGNyeXB0b19tZW1uZXEgdG8gcHJldmVudCB0aW1pbmcgYXR0YWNrcy4gVGhpcyBpcyBhIG5vbi1mdW5jdGlvbmFsIGNoYW5nZSBpbiB0ZXJtcyBvZiBleGVjdXRpb24gZmxvdyBhbmQgY29ycmVjdG5lc3MsIGFzIGJvdGggZnVuY3Rpb25zIHJldHVybiBlcXVpdmFsZW50IGJvb2xlYW4gcmVzdWx0cy4gRnV6emluZyBjYW5ub3QgZGV0ZWN0IHRpbWluZyBkaWZmZXJlbmNlcywgc28gaXQgd2lsbCBub3QgZmluZCBhbnkgbmV3IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTg6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkMjY4Njc2NTJhYmQ5MDkxYmU3NDJhMWU3NTZlOTI3MzAxMTIzYzZjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAxODowNzozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZmlsc19hZWFkLmMgYi9uZXQvbWFjODAyMTEvZmlsc19hZWFkLmNcbmluZGV4IGQyZjRhMTdlYWI5OTAxLi4wMGI5MWU2ZWQ5OTRlMiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9maWxzX2FlYWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jXG5AQCAtMTk1LDcgJiM0MzsxOTUsNyBAQCBzdGF0aWMgaW50IGFlc19zaXZfZGVjcnlwdChjb25zdCB1OCAqa2V5LCBzaXplX3Qga2V5X2xlbixcbiBcdHJlcyA9IGFlc19zMnYoa2V5IC8qIEsxICovLCBrZXlfbGVuLCBudW1fZWxlbSwgYWRkciwgbGVuLCBjaGVjayk7XG4gXHRpZiAocmVzKVxuIFx0XHRyZXR1cm4gcmVzO1xuLVx0aWYgKG1lbWNtcChjaGVjaywgZnJhbWVfaXYsIEFFU19CTE9DS19TSVpFKSAhPSAwKVxuJiM0MztcdGlmIChjcnlwdG9fbWVtbmVxKGNoZWNrLCBmcmFtZV9pdiwgQUVTX0JMT0NLX1NJWkUpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdHJldHVybiAwO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxODowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBtZW1jbXAgd2l0aCBjcnlwdG9fbWVtbmVxIHRvIHByZXZlbnQgdGltaW5nIGF0dGFja3MuIFRoaXMgaXMgYSBub24tZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGVybXMgb2YgZXhlY3V0aW9uIGZsb3cgYW5kIGNvcnJlY3RuZXNzLCBhcyBib3RoIGZ1bmN0aW9ucyByZXR1cm4gZXF1aXZhbGVudCBib29sZWFuIHJlc3VsdHMuIEZ1enppbmcgY2Fubm90IGRldGVjdCB0aW1pbmcgZGlmZmVyZW5jZXMsIHNvIGl0IHdpbGwgbm90IGZpbmQgYW55IG5ldyBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkMjY4Njc2NTJhYmQ5MDkxYmU3NDJhMWU3NTZlOTI3MzAxMTIzYzZjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgOSAxODowNzozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9maWxzX2FlYWQuYyBiL25ldC9tYWM4MDIxMS9maWxzX2FlYWQuYwppbmRleCBkMmY0YTE3ZWFiOTkwMS4uMDBiOTFlNmVkOTk0ZTIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9maWxzX2FlYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvZmlsc19hZWFkLmMKQEAgLTE5NSw3ICYjNDM7MTk1LDcgQEAgc3RhdGljIGludCBhZXNfc2l2X2RlY3J5cHQoY29uc3QgdTggKmtleSwgc2l6ZV90IGtleV9sZW4sCiAJcmVzID0gYWVzX3MydihrZXkgLyogSzEgKi8sIGtleV9sZW4sIG51bV9lbGVtLCBhZGRyLCBsZW4sIGNoZWNrKTsKIAlpZiAocmVzKQogCQlyZXR1cm4gcmVzOwotCWlmIChtZW1jbXAoY2hlY2ssIGZyYW1lX2l2LCBBRVNfQkxPQ0tfU0laRSkgIT0gMCkKJiM0MzsJaWYgKGNyeXB0b19tZW1uZXEoY2hlY2ssIGZyYW1lX2l2LCBBRVNfQkxPQ0tfU0laRSkpCiAJCXJldHVybiAtRUlOVkFMOwogCXJldHVybiAwOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxODowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFNlY3VyaXR5IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBJdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBzd2FwLCByZXBsYWNpbmcgYG1lbWNtcGAgd2l0aCBgY3J5cHRvX21lbW5lcWAgaW4gYGFlc19zaXZfZGVjcnlwdGAgd2l0aGluIGBuZXQvbWFjODAyMTEvZmlsc19hZWFkLmNgLiBUaGUgZ29hbCBoZXJlIGlzIGNsZWFybHkgc2VjdXJpdHktZm9jdXNlZDogZWxpbWluYXRpbmcgYSB0aW1pbmcgdnVsbmVyYWJpbGl0eS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBmdW5jdGlvbiBwZXJmb3JtaW5nIGEgY3J1Y2lhbCBjb21wYXJpc29uLCBhbmQgdGhlIGNoYW5nZSBtYWtlcyBpdCB0aW1pbmctc2FmZS4KClRoZSByZWFsIHF1ZXN0aW9uLCB0aGUgb25lIEkmIzM5O20gYWx3YXlzIGFza2luZywgaXMsICYjMzQ7RG9lcyB0aGlzIG5lZWQgZnV6emluZz8mIzM0OyBGdW5jdGlvbmFsbHksIGl0JiMzOTtzIGVxdWl2YWxlbnQgZm9yIGNvcnJlY3RuZXNzLiBXZSAqa25vdyogYGNyeXB0b19tZW1uZXFgIGlzIGNvbnN0YW50IHRpbWU7IHRoYXQmIzM5O3MgdGhlIHBvaW50LiBJdCAqc2hvdWxkbiYjMzk7dCogaW50cm9kdWNlIGFueSBuZXcgZnVuY3Rpb25hbCBpc3N1ZXMgaW4gdGVybXMgb2YgdGhlIGNvbXBhcmlzb24gaXRzZWxmLiBUaGUgb2xkIGBtZW1jbXBgIHdhcyBhY2N1cmF0ZSBidXQgbm90IHRpbWluZy1zYWZlLiBGdXp6aW5nIHdvdWxkIGJlIHVubGlrZWx5IHRvIGV4cG9zZSBhbnkgbmV3IGNyYXNoIHNjZW5hcmlvcyBvciBpbmNvcnJlY3QgcmVzdWx0cyBpbiB0aGUgY29tcGFyaXNvbiBpdHNlbGYsIGFzIHRoZSBhY3R1YWwgYWxnb3JpdGhtIG9mIHRoZSBjb21wYXJpc29uIGlzIGZ1bmN0aW9uYWxseSB0aGUgc2FtZSAodGhvdWdoIGNvbnN0YW50IHRpbWUgbm93KS4gQnV0LCBpdCYjMzk7cyBhIGNvZGUgY2hhbmdlIGluIG1hYzgwMjExLiBJdCYjMzk7cyBwcnVkZW50IHRvIHJldmlldyB0aGUgY29udGV4dCB3aXRoaW4gYGFlc19zaXZfZGVjcnlwdGAgaW4gYG5ldC9tYWM4MDIxMS9maWxzX2FlYWQuY2AsIHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIHV0aWxpemluZyB0aGUgY29tcGFyaXNvbiBpcyBkb2luZyBzbyBpbiBhIHdheSB0aGF0IHRoZSB0aW1pbmctc2FmZSBjaGFuZ2Ugd29uJiMzOTt0IGluYWR2ZXJ0ZW50bHkgY2F1c2Ugc29tZSBvdGhlciBpc3N1ZSB0byBzdXJmYWNlICh1bmxpa2VseSwgYnV0IGEgcHJvcGVyIHJldmlldyBpcyBuZWVkZWQpLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE4OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Flc19zaXZfZGVjcnlwdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9maWxzX2FlYWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvZmlsc19hZWFkLmM9NzA9c3RhdGljIGludCBhZXNfc2l2X2VuY3J5cHQoY29uc3QgdTggKmtleSwgc2l6ZV90IGtleV9sZW4sXG4tLVxubmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jLTEzOC0vKiBOb3RlOiBhZGRyW10gYW5kIGxlbltdIG5lZWRzIHRvIGhhdmUgb25lIGV4dHJhIHNsb3QgYXQgdGhlIGVuZC4gKi9cbm5ldC9tYWM4MDIxMS9maWxzX2FlYWQuYzoxMzk6c3RhdGljIGludCBhZXNfc2l2X2RlY3J5cHQoY29uc3QgdTggKmtleSwgc2l6ZV90IGtleV9sZW4sXG5uZXQvbWFjODAyMTEvZmlsc19hZWFkLmMtMTQwLVx0XHRcdCAgIGNvbnN0IHU4ICppdl9jcnlwdCwgc2l6ZV90IGl2X2NfbGVuLFxuLS1cbm5ldC9tYWM4MDIxMS9maWxzX2FlYWQuYz0yNTQ9aW50IGZpbHNfZGVjcnlwdF9hc3NvY19yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9maWxzX2FlYWQuYy0zMDgtXHR9XG5uZXQvbWFjODAyMTEvZmlsc19hZWFkLmM6MzA5Olx0cmVzID0gYWVzX3Npdl9kZWNyeXB0KGFzc29jX2RhdGEtXHUwMDNlZmlsc19rZWssIGFzc29jX2RhdGEtXHUwMDNlZmlsc19rZWtfbGVuLFxubmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jLTMxMC1cdFx0XHQgICAgICBlbmNyLCBjcnlwdF9sZW4sIDUsIGFkZHIsIGxlbiwgZW5jcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTg6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRoaXMgUGF0Y2g/IExldCYjMzk7cyBUaGluayBJdCBUaHJvdWdoKioKCk9rYXksIHNvIGBmaWxzX2RlY3J5cHRfYXNzb2NfcmVzcGAgY2FsbHMgYGFlc19zaXZfZGVjcnlwdGAuIFRoZSBxdWVzdGlvbiBpcywgc2hvdWxkIEkgYm90aGVyIGZ1enppbmcgdGhpcyBjaGFuZ2U/IEl0JiMzOTtzIGp1c3QgYSByZXBsYWNlbWVudCBvZiBgbWVtY21wYCB3aXRoIGBjcnlwdG9fbWVtbmVxYC4gRnVuY3Rpb25hbGx5LCB0aGV5IGJlaGF2ZSB0aGUgc2FtZSDigJMgYm90aCByZXR1cm4gMCBmb3IgZXF1YWxpdHksIG5vbi16ZXJvIG90aGVyd2lzZS4gVGhlIGtleSBkaWZmZXJlbmNlIGlzIHRoYXQgYGNyeXB0b19tZW1uZXFgIGlzIGNvbnN0YW50IHRpbWUsIHdoaWNoLCBsZXQmIzM5O3MgYmUgaG9uZXN0LCBmdXp6aW5nIGlzbiYjMzk7dCBnb2luZyB0byBwaWNrIHVwIG9uLCBhcyBmdXp6aW5nIGNhbiYjMzk7dCBkZXRlY3QgdGltaW5nIGxlYWtzLgoKU28sIHJlYWxpc3RpY2FsbHksIGZ1enppbmcgdGhpcyAqc3BlY2lmaWMqIHBhdGNoIHdvbiYjMzk7dCB1bmNvdmVyIGFueSBuZXcgYnVncyByZWxhdGVkIHRvIHRoaXMgcGFydGljdWxhciBjaGFuZ2UsIHVubGVzcywgYW5kIGl0JiMzOTtzIGEgKmJpZyogdW5sZXNzLCBgY3J5cHRvX21lbW5lcWAgaXRzZWxmIGlzIGZ1bmRhbWVudGFsbHkgYnJva2VuLiBXaGljaCBpcyBoaWdobHkgdW5saWtlbHksIGVzcGVjaWFsbHkgc2luY2UgaXQmIzM5O3MgYW4gZXh0ZXJuYWwsIHdlbGwtdmV0dGVkIGZ1bmN0aW9uLgoKQnV0LCBoYW5nIG9uLi4uIGxldCYjMzk7cyByZXZpZXcgdGhlIGd1aWRlbGluZXMsICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczogWy4uLl0gTW9kaWZpY2F0aW9ucyB0byBbLi4uXSBjb2RlIGNvbW1lbnRzIFsuLi5dIGRlY29yYXRpdmUgY2hhbmdlcyBbLi4uXSBjaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cmIzM0Oy4gSXMgcmVwbGFjaW5nIGBtZW1jbXBgIHdpdGggYGNyeXB0b19tZW1uZXFgIGEgZnVuY3Rpb25hbCBjaGFuZ2U/IEl0ICpkb2VzKiBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgYnkgY2FsbGluZyBhIGRpZmZlcmVudCBmdW5jdGlvbi4gRG9lcyBpdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGZsb3csIHRob3VnaD8gSSBtZWFuLCB0aGUgbG9naWMsIHRoZSBlbmQgcmVzdWx0LCBpcyBpZGVudGljYWwuIEhtbW0uLi4KCk9rYXksIGhvbGQgb24uLi4gYGNyeXB0b19tZW1uZXFgIHJldHVybnMgYW4gYGludGAuIEkgbmVlZCB0byBjaGVjayB0aGUgZXhhY3QgYmVoYXZpb3VyIGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxODowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjcnlwdG9fbWVtbmVxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvY3J5cHRvL3V0aWxzLmg9MzU9c3RhdGljIGlubGluZSB2b2lkIGNyeXB0b194b3JfY3B5KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMxLCBjb25zdCB1OCAqc3JjMixcbi0tXG5pbmNsdWRlL2NyeXB0by91dGlscy5oLTU1LVxuaW5jbHVkZS9jcnlwdG8vdXRpbHMuaDo1Njpub2lubGluZSB1bnNpZ25lZCBsb25nIF9fY3J5cHRvX21lbW5lcShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiLCBzaXplX3Qgc2l6ZSk7XG5pbmNsdWRlL2NyeXB0by91dGlscy5oLTU3LVxuaW5jbHVkZS9jcnlwdG8vdXRpbHMuaC01OC0vKipcbmluY2x1ZGUvY3J5cHRvL3V0aWxzLmg6NTk6ICogY3J5cHRvX21lbW5lcSAtIENvbXBhcmUgdHdvIGFyZWFzIG9mIG1lbW9yeSB3aXRob3V0IGxlYWtpbmdcbmluY2x1ZGUvY3J5cHRvL3V0aWxzLmgtNjAtICpcdFx0ICAgdGltaW5nIGluZm9ybWF0aW9uLlxuLS1cbmluY2x1ZGUvY3J5cHRvL3V0aWxzLmgtNjctICovXG5pbmNsdWRlL2NyeXB0by91dGlscy5oOjY4OnN0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19tZW1uZXEoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwgc2l6ZV90IHNpemUpXG5pbmNsdWRlL2NyeXB0by91dGlscy5oLTY5LXtcbmluY2x1ZGUvY3J5cHRvL3V0aWxzLmg6NzA6XHRyZXR1cm4gX19jcnlwdG9fbWVtbmVxKGEsIGIsIHNpemUpICE9IDBVTCA/IDEgOiAwO1xuaW5jbHVkZS9jcnlwdG8vdXRpbHMuaC03MS19XG4tLVxuaW5jbHVkZS9jcnlwdG8veHRzLmg9MTE9c3RhdGljIGlubGluZSBpbnQgeHRzX3ZlcmlmeV9rZXkoc3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtLFxuLS1cbmluY2x1ZGUvY3J5cHRvL3h0cy5oLTMzLVx0XHRcdCAgICAgIENSWVBUT19URk1fUkVRX0ZPUkJJRF9XRUFLX0tFWVMpKSBcdTAwMjZcdTAwMjZcbmluY2x1ZGUvY3J5cHRvL3h0cy5oOjM0Olx0ICAgICFjcnlwdG9fbWVtbmVxKGtleSwga2V5ICYjNDM7IChrZXlsZW4gLyAyKSwga2V5bGVuIC8gMikpXG5pbmNsdWRlL2NyeXB0by94dHMuaC0zNS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkwMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciBDcnlwdG8gTWVtb3J5IENvbXBhcmlzb24qKgoKT2theSwgc28gYGNyeXB0b19tZW1uZXFgIHJldHVybnMgMSBmb3Igbm90IGVxdWFsLCBhbmQgMCBmb3IgZXF1YWwsIGp1c3QgbGlrZSBgbWVtY21wKGNoZWNrLCBmcmFtZV9pdiwgQUVTX0JMT0NLX1NJWkUpICE9IDBgLiBUaGUgdW5kZXJseWluZyBsb2dpYyBpcyBpZGVudGljYWwsIHNvIG9uIHRoZSBzdXJmYWNlLCBpdCBzZWVtcyBsaWtlIHJlZHVuZGFudCBjb2RlLiBUaGUgcXVlc3Rpb24gbm93IGlzOiBpcyBpdCB3b3J0aCBmdXp6aW5nIHRoaXM/CgpMZXQmIzM5O3Mgc2VlLiBUaGUgaW5zdHJ1Y3Rpb25zIGRpY3RhdGUgdGhhdCBpZiBpdOKAmXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB0aGVuIGZ1enppbmcgaXMgd2FycmFudGVkLiBTbywgYSBxdWljayBjb2RlIHNlYXJjaCBpcyBuZWNlc3NhcnkgdG8gdmVyaWZ5LiBJJiMzOTtkIHNheSBgV29ydGhGdXp6aW5nPXRydWVgIGJlY2F1c2UgdGhpcyBhZmZlY3RzIGNvcmUga2VybmVsIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYG1hYzgwMjExYCwgYW5kIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuCgpIb2xkIG9uLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBtYWM4MDIxMWAgaXMgcmVhY2hhYmxlLiBBaCwgeWVzLCB2aWEgYG1hYzgwMjExX2h3c2ltYC4gRXhjZWxsZW50LiBOb3csIGEgY3J1Y2lhbCBhc3BlY3QgcmVtYWluczogSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIHRoZSBgRklMU2AgZmVhdHVyZSBpcyBlbmFibGVkIG9yIGFjY2Vzc2libGUsIHNpbmNlIHRoaXMgbWlnaHQgYmUgdGllZCB0byB0aGUgY2hhbmdlcy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIGFuZCBjb2RlIHBhdGhzIHRvIGNvbmZpcm0gaXRzIHJlYWNoYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxODowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUFDODAyMTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwLVxubmV0L21hYzgwMjExL0tjb25maWc6MjE6Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xubmV0L21hYzgwMjExL0tjb25maWctMjItXHRib29sXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMy1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxubmV0L21hYzgwMjExL0tjb25maWctMjUtXHRib29sIFwmIzM0O01pbnN0cmVsXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQwLVxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxubmV0L21hYzgwMjExL0tjb25maWctNDktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1MDpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXHRzdHJpbmdcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFwmIzM0O1NvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxubmV0L21hYzgwMjExL0tjb25maWc6NjA6Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1Rcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIG1hYzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNzgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xubmV0L21hYzgwMjExL0tjb25maWctODAtXHRib29sIFwmIzM0O0VuYWJsZSBMRUQgdHJpZ2dlcnNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04Ny1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjg4OmNvbmZpZyBNQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7RXhwb3J0IG1hYzgwMjExIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctOTYtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7VHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxubmV0L21hYzgwMjExL0tjb25maWc6MTEwOm1lbnVjb25maWcgTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTExLVx0Ym9vbCBcJiMzNDtTZWxlY3QgbWFjODAyMTEgZGVidWdnaW5nIGZlYXR1cmVzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTE1LVxubmV0L21hYzgwMjExL0tjb25maWc6MTE2OmNvbmZpZyBNQUM4MDIxMV9OT0lOTElORVxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtEbyBub3QgaW5saW5lIFRYL1JYIGhhbmRsZXJzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTMxLVxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXHRib29sIFwmIzM0O1ZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0Mzpjb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTQ0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTMtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNTQ6Y29uZmlnIE1BQzgwMjExX1NUQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHN0YXRpb24gZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTYyLVxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTY0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIEhUIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NTpjb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgT0NCIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4NS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4Njpjb25maWcgTUFDODAyMTFfSUJTU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTg3LVx0Ym9vbCBcJiMzNDtWZXJib3NlIElCU1MgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTk2LVxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTk4LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIwOTpjb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxubmV0L21hYzgwMjExL0tjb25maWc6MjIyOmNvbmZpZyBNQUM4MDIxMV9NUEFUSF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjIzLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcGF0aCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzQtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTk6Y29uZmlnIE1BQzgwMjExX01FU0hfQ1NBX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBjaGFubmVsIHN3aXRjaCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODE6Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4Mi1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBURExTIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5Mzpjb25maWcgTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cdGJvb2wgXCYjMzQ7RXh0cmEgc3RhdGlzdGljcyBmb3IgVFgvUlggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMzA3LVxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxubmV0L21hYzgwMjExL0tjb25maWctMzA5LVx0aW50IFwmIzM0O1N0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcJiMzNDsgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipEaXZpbmcgaW50byB0aGUgTUFDODAyMTEgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcywgYW5kICpNQUM4MDIxMSogaXMgY2xlYXJseSB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIHBvaW50IGZvciB0aGlzIGVudGlyZSB3aXJlbGVzcyBzdGFjay4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlcmUmIzM5O3MgYW55dGhpbmcgc3BlY2lmaWNhbGx5IHRhaWxvcmVkIGZvciBGSUxTIOKAkyBGYXN0IEluaXRpYWwgTGluayBTZXR1cC4gSXQmIzM5O3MgdXN1YWxseSBoYW5kbGVkIGluIGEgc3BlY2lmaWMgd2F5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBoYW5kbGVkLCBzbyBsZXQmIzM5O3MgY2hlY2sgdGhlIGBuZXQvbWFjODAyMTEvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBwb3RlbnRpYWxseSBtb2R1bGUgZGVwZW5kZW5jaWVzIHJlc2lkZS4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSByZWxldmFudCBzb3VyY2VzIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbiB0byB1bmNvdmVyIHRoZSBGSUxTLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL01ha2VmaWxlPTU9bWFjODAyMTEteSA6PSBcXFxuLS1cbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS0yMy1cdGFlc19nbWFjLm8gXFxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZToyNDpcdGZpbHNfYWVhZC5vIFxcXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtMjUtXHRjZmcubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxODowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODk2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBQYXRjaDogYGZpbHNfYWVhZC5vYCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGFmZmVjdHMgYGZpbHNfYWVhZC5vYCwgd2hpY2ggaXMgYWx3YXlzIGNvbXBpbGVkIHdoZW4gYE1BQzgwMjExYCBpcyBlbmFibGVkLiBNeSBmaXJzdCB0aG91Z2h0IHdhcyB3aGV0aGVyIHJlcGxhY2luZyBgbWVtY21wYCB3aXRoIGBjcnlwdG9fbWVtbmVxYCBxdWFsaWZpZXMgYXMgYSBjaGFuZ2Ugd29ydGggZnV6emluZy4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjaGFuZ2UgZG9lc24mIzM5O3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LCBidXQgd2hhdCYjMzk7cyB0aGUgZGVhbCBoZXJlPwoKSSByZWFzb25lZCB0aGF0IGBjcnlwdG9fbWVtbmVxYCBpcyBlc3NlbnRpYWxseSBqdXN0IGEgY29uc3RhbnQtdGltZSB2ZXJzaW9uIG9mIGBtZW1jbXBgLCBib3RoIGV2YWx1YXRpbmcgdG8gdGhlIHNhbWUgYm9vbGVhbiByZXN1bHQ6IG5vbi16ZXJvIGlmIHRoZSBtZW1vcmllcyBkaWZmZXIsIHplcm8gaWYgdGhleSBhcmUgaWRlbnRpY2FsLiBUaGUgaW5zdHJ1Y3Rpb25zIG1lbnRpb24gJiMzNDtDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3csJiMzNDsgYnV0IHRoaXMgaXMgYSBmdW5jdGlvbiByZXBsYWNlbWVudCwgbm90IGp1c3QgYSBudW1lcmljIGNoYW5nZS4gU3RpbGwsIHRoZSBsb2dpYyBpcyBpZGVudGljYWwuIFRpbWluZyBkaWZmZXJlbmNlcyBhcmVuJiMzOTt0IGRldGVjdGFibGUgdmlhIGZ1enppbmcsIHJpZ2h0PyBTbyBmdXp6aW5nIHdvdWxkbiYjMzk7dCBmaW5kIG5ldyBidWdzIHdpdGggdGhlIGNoYW5nZS4gUmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgIHNlZW1lZCBhcHByb3ByaWF0ZSwgdGhlIHJhdGlvbmFsZSBiZWluZyBpdCYjMzk7cyBhIG5vbi1mdW5jdGlvbmFsLCB0aW1pbmctc2FmZSBjb21wYXJpc29uIHJlcGxhY2VtZW50LgoKQnV0IHRoZW4gSSBjaGVja2VkIHRvIGVuc3VyZSBgY3J5cHRvX21lbW5lcWAgaXNuJiMzOTt0IGEgbWFjcm8sIGFuZCwgcGVyIHRoZSBoZWFkZXIgZmlsZSwgaXQmIzM5O3MgYW4gaW5saW5lIGZ1bmN0aW9uLiBFdmVuIHRob3VnaCB0aGUgbG9naWMgaXMgdGhlIHNhbWUsIHRoaXMgaXNuJiMzOTt0IHN0cmljdGx5IGEgJiMzNDtudW1lcmljIGNvbnN0YW50IG9yIG1hY3JvJiMzNDsgY2hhbmdlLgoKSWYgSSB3ZXJlIHRvIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLCBJJiMzOTtkIG5lZWQgdG8gcHJvdmlkZSBgTUFDODAyMTFgIGFzIGFuIGBFbmFibGVDb25maWdgIGFuZCBzcGVjaWZ5IEZvY3VzU3ltYm9scy4gYGFlc19zaXZfZGVjcnlwdGAgY29tZXMgdG8gbWluZCBpbW1lZGlhdGVseS4gQnV0IHRoZW4gSSBoYXZlIHRvIGNvbnNpZGVyIHdoZXRoZXIgdG8gY2hvb3NlIGBmaWxzX2RlY3J5cHRfYXNzb2NfcmVzcGAsIHdoaWNoIGNhbGxzIGl0LCBpbnN0ZWFkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGl0IGlzIHJlYWNoYWJsZS4KClllcywgaXQgaXMsIGFuZCBjYW4gYmUgcmVhY2hlZCB2aWEgYGZpbHNfZGVjcnlwdF9hc3NvY19yZXNwYC4KCkJ1dCwgd2FpdC4gSSByZXJlYWQgdGhlIGluc3RydWN0aW9ucywgYW5kIGl0ICpkb2VzbiYjMzk7dCogZXhwbGljaXRseSBsaXN0ICYjMzQ7cmVwbGFjaW5nIGEgZnVuY3Rpb24gd2l0aCBhbiBlcXVpdmFsZW50IG9uZSYjMzQ7LiBJdCAqZG9lcyogc2F5ICYjMzQ7SWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OyBUaGlzIGRlZmluaXRlbHkgbW9kaWZpZXMgdGhlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBvZiBgbWFjODAyMTFgLgoKR2l2ZW4gdGhpcywgSSBzaG91bGQgcHJvYmFibHkgZXJyIG9uIHRoZSBzaWRlIG9mIGNhdXRpb24gYW5kIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLCBiZWNhdXNlIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIHNwZWNpZnkgdGhlc2U6CgoqICAgKipGb2N1c1N5bWJvbHM6KiogYGFlc19zaXZfZGVjcnlwdGAsIGBmaWxzX2RlY3J5cHRfYXNzb2NfcmVzcGAKKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgTUFDODAyMTFgCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBmaWxzX2RlY3J5cHRfYXNzb2NfcmVzcGAgaXMgdGhlICpvbmx5KiBjYWxsZXIgb2YgYGFlc19zaXZfZGVjcnlwdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Flc19zaXZfZGVjcnlwdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jPTcwPXN0YXRpYyBpbnQgYWVzX3Npdl9lbmNyeXB0KGNvbnN0IHU4ICprZXksIHNpemVfdCBrZXlfbGVuLFxuLS1cbm5ldC9tYWM4MDIxMS9maWxzX2FlYWQuYy0xMzgtLyogTm90ZTogYWRkcltdIGFuZCBsZW5bXSBuZWVkcyB0byBoYXZlIG9uZSBleHRyYSBzbG90IGF0IHRoZSBlbmQuICovXG5uZXQvbWFjODAyMTEvZmlsc19hZWFkLmM6MTM5OnN0YXRpYyBpbnQgYWVzX3Npdl9kZWNyeXB0KGNvbnN0IHU4ICprZXksIHNpemVfdCBrZXlfbGVuLFxubmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jLTE0MC1cdFx0XHQgICBjb25zdCB1OCAqaXZfY3J5cHQsIHNpemVfdCBpdl9jX2xlbixcbi0tXG5uZXQvbWFjODAyMTEvZmlsc19hZWFkLmM9MjU0PWludCBmaWxzX2RlY3J5cHRfYXNzb2NfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvZmlsc19hZWFkLmMtMzA4LVx0fVxubmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jOjMwOTpcdHJlcyA9IGFlc19zaXZfZGVjcnlwdChhc3NvY19kYXRhLVx1MDAzZWZpbHNfa2VrLCBhc3NvY19kYXRhLVx1MDAzZWZpbHNfa2VrX2xlbixcbm5ldC9tYWM4MDIxMS9maWxzX2FlYWQuYy0zMTAtXHRcdFx0ICAgICAgZW5jciwgY3J5cHRfbGVuLCA1LCBhZGRyLCBsZW4sIGVuY3IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxODowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODgwCgkJCQkJCQlvdXRwdXQ6IDkwCgkJCQkJCQl0aG91Z2h0czogNDA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2gmIzM5O3MgSW1wYWN0KioKCk9rYXksIHNvIGBmaWxzX2RlY3J5cHRfYXNzb2NfcmVzcGAgaXMgdGhlIHNvbGUgY2FsbGVyIG9mIHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbi4gTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciB0aGUgYE1BQzgwMjExX0hXU0lNYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyByZWxldmFudCBoZXJlLiBTaW5jZSB3ZSBhcmUgZGVhbGluZyB3aXRoIGBNQUM4MDIxMWAsIHdoaWNoIGlzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24sIGl0IHNlZW1zIHVubGlrZWx5IHRoYXQgaXQgaXMuCgpNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IHdhcnJhbnQgZnV6emluZywgc28gSSB3aWxsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBpcyBiZWNhdXNlIHRoZSBjaGFuZ2UgcmVwbGFjZXMgYSBgbWVtY21wYCBjYWxsIHdpdGggYGNyeXB0b19tZW1uZXFgLCB3aGljaCBpcyBkZXNpZ25lZCB0byBiZSB0aW1pbmctc2FmZS4gVGhpcyBpcyBhIG5vbi1mdW5jdGlvbmFsIGNoYW5nZTsgdGhlIGV4ZWN1dGlvbiBmbG93IHJlbWFpbnMgaWRlbnRpY2FsLCBhbmQgdGhlIHJlcGxhY2VtZW50IGlzIG1lYW50IHRvIG1pdGlnYXRlIGEgcG90ZW50aWFsIHRpbWluZyBhdHRhY2ssIHdoaWNoIGZ1enppbmcgaXMgbm90IGdvb2QgYXQgZGV0ZWN0aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRvIGRvY3VtZW50IG15IHJlYXNvbmluZy4KCkhlcmUgaXMgdGhlIHJlYXNvbmluZyBJIHdpbGwgcHJvdmlkZTogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYG1lbWNtcGAgd2l0aCBgY3J5cHRvX21lbW5lcWAgdG8gcHJldmVudCB0aW1pbmcgYXR0YWNrcy4gVGhpcyBpcyBhIG5vbi1mdW5jdGlvbmFsIGNoYW5nZSBpbiB0ZXJtcyBvZiBleGVjdXRpb24gZmxvdyBhbmQgY29ycmVjdG5lc3MsIGFzIGJvdGggZnVuY3Rpb25zIHJldHVybiBlcXVpdmFsZW50IGJvb2xlYW4gcmVzdWx0cy4gRnV6emluZyBjYW5ub3QgZGV0ZWN0IHRpbWluZyBkaWZmZXJlbmNlcywgc28gaXQgd2lsbCBub3QgZmluZCBhbnkgbmV3IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZS4mIzM0OwoKTm93LCBiZWZvcmUgSSBjb21taXQgdG8gdGhpcyBhc3Nlc3NtZW50LCBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgKnRydWx5KiB0aGUgb25seSBjaGFuZ2Ugd2l0aGluIHRoZSBwYXRjaC4gSSYjMzk7bGwgcmV2aWV3IHRoZSBkaWZmOgoKYGBgZGlmZgotLS0gYS9uZXQvbWFjODAyMTEvZmlsc19hZWFkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jCkBAIC0xOTUsNyAmIzQzOzE5NSw3IEBAIHN0YXRpYyBpbnQgYWVzX3Npdl9kZWNyeXB0KGNvbnN0IHU4ICprZXksIHNpemVfdCBrZXlfbGVuLAogCXJlcyA9IGFlc19zMnYoa2V5IC8qIEsxICovLCBrZXlfbGVuLCBudW1fZWxlbSwgYWRkciwgbGVuLCBjaGVjayk7CiAJaWYgKHJlcykKIAkJcmV0dXJuIHJlczsKLQlpZiAobWVtY21wKGNoZWNrLCBmcmFtZV9pdiwgQUVTX0JMT0NLX1NJWkUpICE9IDApCiYjNDM7CWlmIChjcnlwdG9fbWVtbmVxKGNoZWNrLCBmcmFtZV9pdiwgQUVTX0JMT0NLX1NJWkUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlyZXR1cm4gMDsKIH0KYGBgCgpZZXMsIHRoYXQmIzM5O3MgaXQuIEl0JiMzOTtzIGp1c3QgdGhlIG9uZSBzdWJzdGl0dXRpb24uCgpPa2F5LCBJJiMzOTttIGNvbmZpZGVudC4gSSYjMzk7bGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIG1lbWNtcCB3aXRoIGNyeXB0b19tZW1uZXEgdG8gcHJldmVudCB0aW1pbmcgYXR0YWNrcy4gVGhpcyBpcyBhIG5vbi1mdW5jdGlvbmFsIGNoYW5nZSBpbiB0ZXJtcyBvZiBleGVjdXRpb24gZmxvdyBhbmQgY29ycmVjdG5lc3MsIGFzIGJvdGggZnVuY3Rpb25zIHJldHVybiBlcXVpdmFsZW50IGJvb2xlYW4gcmVzdWx0cy4gRnV6emluZyBjYW5ub3QgZGV0ZWN0IHRpbWluZyBkaWZmZXJlbmNlcywgc28gaXQgd2lsbCBub3QgZmluZCBhbnkgbmV3IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIG1lbWNtcCB3aXRoIGNyeXB0b19tZW1uZXEgdG8gcHJldmVudCB0aW1pbmcgYXR0YWNrcy4gVGhpcyBpcyBhIG5vbi1mdW5jdGlvbmFsIGNoYW5nZSBpbiB0ZXJtcyBvZiBleGVjdXRpb24gZmxvdyBhbmQgY29ycmVjdG5lc3MsIGFzIGJvdGggZnVuY3Rpb25zIHJldHVybiBlcXVpdmFsZW50IGJvb2xlYW4gcmVzdWx0cy4gRnV6emluZyBjYW5ub3QgZGV0ZWN0IHRpbWluZyBkaWZmZXJlbmNlcywgc28gaXQgd2lsbCBub3QgZmluZCBhbnkgbmV3IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxODowNzozMi4zNTAzMzAyMjlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc4MDk5MTA0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIG1lbWNtcCB3aXRoIGNyeXB0b19tZW1uZXEgdG8gcHJldmVudCB0aW1pbmcgYXR0YWNrcy4gVGhpcyBpcyBhIG5vbi1mdW5jdGlvbmFsIGNoYW5nZSBpbiB0ZXJtcyBvZiBleGVjdXRpb24gZmxvdyBhbmQgY29ycmVjdG5lc3MsIGFzIGJvdGggZnVuY3Rpb25zIHJldHVybiBlcXVpdmFsZW50IGJvb2xlYW4gcmVzdWx0cy4gRnV6emluZyBjYW5ub3QgZGV0ZWN0IHRpbWluZyBkaWZmZXJlbmNlcywgc28gaXQgd2lsbCBub3QgZmluZCBhbnkgbmV3IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE4OjA3OjMyLjM1MDMzNjMwOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIzNzc5MDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDI2ODY3NjUyYWJkOTA5MWJlNzQyYTFlNzU2ZTkyNzMwMTEyM2M2Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCA5IDE4OjA3OjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9maWxzX2FlYWQuYyBiL25ldC9tYWM4MDIxMS9maWxzX2FlYWQuY1xcbmluZGV4IGQyZjRhMTdlYWI5OTAxLi4wMGI5MWU2ZWQ5OTRlMiAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvZmlsc19hZWFkLmNcXG4rKysgYi9uZXQvbWFjODAyMTEvZmlsc19hZWFkLmNcXG5AQCAtMTk1LDcgKzE5NSw3IEBAIHN0YXRpYyBpbnQgYWVzX3Npdl9kZWNyeXB0KGNvbnN0IHU4ICprZXksIHNpemVfdCBrZXlfbGVuLFxcbiBcXHRyZXMgPSBhZXNfczJ2KGtleSAvKiBLMSAqLywga2V5X2xlbiwgbnVtX2VsZW0sIGFkZHIsIGxlbiwgY2hlY2spO1xcbiBcXHRpZiAocmVzKVxcbiBcXHRcXHRyZXR1cm4gcmVzO1xcbi1cXHRpZiAobWVtY21wKGNoZWNrLCBmcmFtZV9pdiwgQUVTX0JMT0NLX1NJWkUpICE9IDApXFxuK1xcdGlmIChjcnlwdG9fbWVtbmVxKGNoZWNrLCBmcmFtZV9pdiwgQUVTX0JMT0NLX1NJWkUpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTg6MDc6MzIuNjc0ODk3NDEyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDc0ODUzMzU3MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIG1lbWNtcCB3aXRoIGNyeXB0b19tZW1uZXEgdG8gcHJldmVudCB0aW1pbmcgYXR0YWNrcy4gVGhpcyBpcyBhIG5vbi1mdW5jdGlvbmFsIGNoYW5nZSBpbiB0ZXJtcyBvZiBleGVjdXRpb24gZmxvdyBhbmQgY29ycmVjdG5lc3MsIGFzIGJvdGggZnVuY3Rpb25zIHJldHVybiBlcXVpdmFsZW50IGJvb2xlYW4gcmVzdWx0cy4gRnV6emluZyBjYW5ub3QgZGV0ZWN0IHRpbWluZyBkaWZmZXJlbmNlcywgc28gaXQgd2lsbCBub3QgZmluZCBhbnkgbmV3IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDI2ODY3NjUyYWJkOTA5MWJlNzQyYTFlNzU2ZTkyNzMwMTEyM2M2Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDkgMTg6MDc6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZmlsc19hZWFkLmMgYi9uZXQvbWFjODAyMTEvZmlsc19hZWFkLmNcbmluZGV4IGQyZjRhMTdlYWI5OTAxLi4wMGI5MWU2ZWQ5OTRlMiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9maWxzX2FlYWQuY1xuKysrIGIvbmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jXG5AQCAtMTk1LDcgKzE5NSw3IEBAIHN0YXRpYyBpbnQgYWVzX3Npdl9kZWNyeXB0KGNvbnN0IHU4ICprZXksIHNpemVfdCBrZXlfbGVuLFxuIFx0cmVzID0gYWVzX3MydihrZXkgLyogSzEgKi8sIGtleV9sZW4sIG51bV9lbGVtLCBhZGRyLCBsZW4sIGNoZWNrKTtcbiBcdGlmIChyZXMpXG4gXHRcdHJldHVybiByZXM7XG4tXHRpZiAobWVtY21wKGNoZWNrLCBmcmFtZV9pdiwgQUVTX0JMT0NLX1NJWkUpICE9IDApXG4rXHRpZiAoY3J5cHRvX21lbW5lcShjaGVjaywgZnJhbWVfaXYsIEFFU19CTE9DS19TSVpFKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRyZXR1cm4gMDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxODowNzozMi42NzQ5MDAxNzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzI3NDQxODAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTZWN1cml0eSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0J3MgYSBzdHJhaWdodGZvcndhcmQgc3dhcCwgcmVwbGFjaW5nIGBtZW1jbXBgIHdpdGggYGNyeXB0b19tZW1uZXFgIGluIGBhZXNfc2l2X2RlY3J5cHRgIHdpdGhpbiBgbmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jYC4gVGhlIGdvYWwgaGVyZSBpcyBjbGVhcmx5IHNlY3VyaXR5LWZvY3VzZWQ6IGVsaW1pbmF0aW5nIGEgdGltaW5nIHZ1bG5lcmFiaWxpdHkuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBmdW5jdGlvbiBwZXJmb3JtaW5nIGEgY3J1Y2lhbCBjb21wYXJpc29uLCBhbmQgdGhlIGNoYW5nZSBtYWtlcyBpdCB0aW1pbmctc2FmZS5cblxuVGhlIHJlYWwgcXVlc3Rpb24sIHRoZSBvbmUgSSdtIGFsd2F5cyBhc2tpbmcsIGlzLCBcIkRvZXMgdGhpcyBuZWVkIGZ1enppbmc/XCIgRnVuY3Rpb25hbGx5LCBpdCdzIGVxdWl2YWxlbnQgZm9yIGNvcnJlY3RuZXNzLiBXZSAqa25vdyogYGNyeXB0b19tZW1uZXFgIGlzIGNvbnN0YW50IHRpbWU7IHRoYXQncyB0aGUgcG9pbnQuIEl0ICpzaG91bGRuJ3QqIGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWwgaXNzdWVzIGluIHRlcm1zIG9mIHRoZSBjb21wYXJpc29uIGl0c2VsZi4gVGhlIG9sZCBgbWVtY21wYCB3YXMgYWNjdXJhdGUgYnV0IG5vdCB0aW1pbmctc2FmZS4gRnV6emluZyB3b3VsZCBiZSB1bmxpa2VseSB0byBleHBvc2UgYW55IG5ldyBjcmFzaCBzY2VuYXJpb3Mgb3IgaW5jb3JyZWN0IHJlc3VsdHMgaW4gdGhlIGNvbXBhcmlzb24gaXRzZWxmLCBhcyB0aGUgYWN0dWFsIGFsZ29yaXRobSBvZiB0aGUgY29tcGFyaXNvbiBpcyBmdW5jdGlvbmFsbHkgdGhlIHNhbWUgKHRob3VnaCBjb25zdGFudCB0aW1lIG5vdykuIEJ1dCwgaXQncyBhIGNvZGUgY2hhbmdlIGluIG1hYzgwMjExLiBJdCdzIHBydWRlbnQgdG8gcmV2aWV3IHRoZSBjb250ZXh0IHdpdGhpbiBgYWVzX3Npdl9kZWNyeXB0YCBpbiBgbmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jYCwgdG8gZW5zdXJlIHRoYXQgdGhlIGNvZGUgdXRpbGl6aW5nIHRoZSBjb21wYXJpc29uIGlzIGRvaW5nIHNvIGluIGEgd2F5IHRoYXQgdGhlIHRpbWluZy1zYWZlIGNoYW5nZSB3b24ndCBpbmFkdmVydGVudGx5IGNhdXNlIHNvbWUgb3RoZXIgaXNzdWUgdG8gc3VyZmFjZSAodW5saWtlbHksIGJ1dCBhIHByb3BlciByZXZpZXcgaXMgbmVlZGVkKS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE4OjA3OjQ1Ljk0OTMyMTAzN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTI4OTg1NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWVzX3Npdl9kZWNyeXB0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9maWxzX2FlYWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvZmlsc19hZWFkLmM9NzA9c3RhdGljIGludCBhZXNfc2l2X2VuY3J5cHQoY29uc3QgdTggKmtleSwgc2l6ZV90IGtleV9sZW4sXFxuLS1cXG5uZXQvbWFjODAyMTEvZmlsc19hZWFkLmMtMTM4LS8qIE5vdGU6IGFkZHJbXSBhbmQgbGVuW10gbmVlZHMgdG8gaGF2ZSBvbmUgZXh0cmEgc2xvdCBhdCB0aGUgZW5kLiAqL1xcbm5ldC9tYWM4MDIxMS9maWxzX2FlYWQuYzoxMzk6c3RhdGljIGludCBhZXNfc2l2X2RlY3J5cHQoY29uc3QgdTggKmtleSwgc2l6ZV90IGtleV9sZW4sXFxubmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jLTE0MC1cXHRcXHRcXHQgICBjb25zdCB1OCAqaXZfY3J5cHQsIHNpemVfdCBpdl9jX2xlbixcXG4tLVxcbm5ldC9tYWM4MDIxMS9maWxzX2FlYWQuYz0yNTQ9aW50IGZpbHNfZGVjcnlwdF9hc3NvY19yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jLTMwOC1cXHR9XFxubmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jOjMwOTpcXHRyZXMgPSBhZXNfc2l2X2RlY3J5cHQoYXNzb2NfZGF0YS1cXHUwMDNlZmlsc19rZWssIGFzc29jX2RhdGEtXFx1MDAzZWZpbHNfa2VrX2xlbixcXG5uZXQvbWFjODAyMTEvZmlsc19hZWFkLmMtMzEwLVxcdFxcdFxcdCAgICAgIGVuY3IsIGNyeXB0X2xlbiwgNSwgYWRkciwgbGVuLCBlbmNyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTg6MDc6NDYuMjYyMjI1OTczWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU0OTIxNjEwMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUaGlzIFBhdGNoPyBMZXQncyBUaGluayBJdCBUaHJvdWdoKipcblxuT2theSwgc28gYGZpbHNfZGVjcnlwdF9hc3NvY19yZXNwYCBjYWxscyBgYWVzX3Npdl9kZWNyeXB0YC4gVGhlIHF1ZXN0aW9uIGlzLCBzaG91bGQgSSBib3RoZXIgZnV6emluZyB0aGlzIGNoYW5nZT8gSXQncyBqdXN0IGEgcmVwbGFjZW1lbnQgb2YgYG1lbWNtcGAgd2l0aCBgY3J5cHRvX21lbW5lcWAuIEZ1bmN0aW9uYWxseSwgdGhleSBiZWhhdmUgdGhlIHNhbWUg4oCTIGJvdGggcmV0dXJuIDAgZm9yIGVxdWFsaXR5LCBub24temVybyBvdGhlcndpc2UuIFRoZSBrZXkgZGlmZmVyZW5jZSBpcyB0aGF0IGBjcnlwdG9fbWVtbmVxYCBpcyBjb25zdGFudCB0aW1lLCB3aGljaCwgbGV0J3MgYmUgaG9uZXN0LCBmdXp6aW5nIGlzbid0IGdvaW5nIHRvIHBpY2sgdXAgb24sIGFzIGZ1enppbmcgY2FuJ3QgZGV0ZWN0IHRpbWluZyBsZWFrcy5cblxuU28sIHJlYWxpc3RpY2FsbHksIGZ1enppbmcgdGhpcyAqc3BlY2lmaWMqIHBhdGNoIHdvbid0IHVuY292ZXIgYW55IG5ldyBidWdzIHJlbGF0ZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIGNoYW5nZSwgdW5sZXNzLCBhbmQgaXQncyBhICpiaWcqIHVubGVzcywgYGNyeXB0b19tZW1uZXFgIGl0c2VsZiBpcyBmdW5kYW1lbnRhbGx5IGJyb2tlbi4gV2hpY2ggaXMgaGlnaGx5IHVubGlrZWx5LCBlc3BlY2lhbGx5IHNpbmNlIGl0J3MgYW4gZXh0ZXJuYWwsIHdlbGwtdmV0dGVkIGZ1bmN0aW9uLlxuXG5CdXQsIGhhbmcgb24uLi4gbGV0J3MgcmV2aWV3IHRoZSBndWlkZWxpbmVzLCBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IFsuLi5dIE1vZGlmaWNhdGlvbnMgdG8gWy4uLl0gY29kZSBjb21tZW50cyBbLi4uXSBkZWNvcmF0aXZlIGNoYW5nZXMgWy4uLl0gY2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93XCIuIElzIHJlcGxhY2luZyBgbWVtY21wYCB3aXRoIGBjcnlwdG9fbWVtbmVxYCBhIGZ1bmN0aW9uYWwgY2hhbmdlPyBJdCAqZG9lcyogYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IGJ5IGNhbGxpbmcgYSBkaWZmZXJlbnQgZnVuY3Rpb24uIERvZXMgaXQgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBmbG93LCB0aG91Z2g/IEkgbWVhbiwgdGhlIGxvZ2ljLCB0aGUgZW5kIHJlc3VsdCwgaXMgaWRlbnRpY2FsLiBIbW1tLi4uXG5cbk9rYXksIGhvbGQgb24uLi4gYGNyeXB0b19tZW1uZXFgIHJldHVybnMgYW4gYGludGAuIEkgbmVlZCB0byBjaGVjayB0aGUgZXhhY3QgYmVoYXZpb3VyIGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxODowODowMS43NTQzODkyNzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU2MzE0NzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNyeXB0b19tZW1uZXFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9jcnlwdG8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvY3J5cHRvL3V0aWxzLmg9MzU9c3RhdGljIGlubGluZSB2b2lkIGNyeXB0b194b3JfY3B5KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMxLCBjb25zdCB1OCAqc3JjMixcXG4tLVxcbmluY2x1ZGUvY3J5cHRvL3V0aWxzLmgtNTUtXFxuaW5jbHVkZS9jcnlwdG8vdXRpbHMuaDo1Njpub2lubGluZSB1bnNpZ25lZCBsb25nIF9fY3J5cHRvX21lbW5lcShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiLCBzaXplX3Qgc2l6ZSk7XFxuaW5jbHVkZS9jcnlwdG8vdXRpbHMuaC01Ny1cXG5pbmNsdWRlL2NyeXB0by91dGlscy5oLTU4LS8qKlxcbmluY2x1ZGUvY3J5cHRvL3V0aWxzLmg6NTk6ICogY3J5cHRvX21lbW5lcSAtIENvbXBhcmUgdHdvIGFyZWFzIG9mIG1lbW9yeSB3aXRob3V0IGxlYWtpbmdcXG5pbmNsdWRlL2NyeXB0by91dGlscy5oLTYwLSAqXFx0XFx0ICAgdGltaW5nIGluZm9ybWF0aW9uLlxcbi0tXFxuaW5jbHVkZS9jcnlwdG8vdXRpbHMuaC02Ny0gKi9cXG5pbmNsdWRlL2NyeXB0by91dGlscy5oOjY4OnN0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19tZW1uZXEoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwgc2l6ZV90IHNpemUpXFxuaW5jbHVkZS9jcnlwdG8vdXRpbHMuaC02OS17XFxuaW5jbHVkZS9jcnlwdG8vdXRpbHMuaDo3MDpcXHRyZXR1cm4gX19jcnlwdG9fbWVtbmVxKGEsIGIsIHNpemUpICE9IDBVTCA/IDEgOiAwO1xcbmluY2x1ZGUvY3J5cHRvL3V0aWxzLmgtNzEtfVxcbi0tXFxuaW5jbHVkZS9jcnlwdG8veHRzLmg9MTE9c3RhdGljIGlubGluZSBpbnQgeHRzX3ZlcmlmeV9rZXkoc3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtLFxcbi0tXFxuaW5jbHVkZS9jcnlwdG8veHRzLmgtMzMtXFx0XFx0XFx0ICAgICAgQ1JZUFRPX1RGTV9SRVFfRk9SQklEX1dFQUtfS0VZUykpIFxcdTAwMjZcXHUwMDI2XFxuaW5jbHVkZS9jcnlwdG8veHRzLmg6MzQ6XFx0ICAgICFjcnlwdG9fbWVtbmVxKGtleSwga2V5ICsgKGtleWxlbiAvIDIpLCBrZXlsZW4gLyAyKSlcXG5pbmNsdWRlL2NyeXB0by94dHMuaC0zNS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTg6MDg6MDIuMTEwNzExMTE5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY3ODMxNDA0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uIGZvciBDcnlwdG8gTWVtb3J5IENvbXBhcmlzb24qKlxuXG5Pa2F5LCBzbyBgY3J5cHRvX21lbW5lcWAgcmV0dXJucyAxIGZvciBub3QgZXF1YWwsIGFuZCAwIGZvciBlcXVhbCwganVzdCBsaWtlIGBtZW1jbXAoY2hlY2ssIGZyYW1lX2l2LCBBRVNfQkxPQ0tfU0laRSkgIT0gMGAuIFRoZSB1bmRlcmx5aW5nIGxvZ2ljIGlzIGlkZW50aWNhbCwgc28gb24gdGhlIHN1cmZhY2UsIGl0IHNlZW1zIGxpa2UgcmVkdW5kYW50IGNvZGUuIFRoZSBxdWVzdGlvbiBub3cgaXM6IGlzIGl0IHdvcnRoIGZ1enppbmcgdGhpcz9cblxuTGV0J3Mgc2VlLiBUaGUgaW5zdHJ1Y3Rpb25zIGRpY3RhdGUgdGhhdCBpZiBpdOKAmXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB0aGVuIGZ1enppbmcgaXMgd2FycmFudGVkLiBTbywgYSBxdWljayBjb2RlIHNlYXJjaCBpcyBuZWNlc3NhcnkgdG8gdmVyaWZ5LiBJJ2Qgc2F5IGBXb3J0aEZ1enppbmc9dHJ1ZWAgYmVjYXVzZSB0aGlzIGFmZmVjdHMgY29yZSBrZXJuZWwgbG9naWMsIHNwZWNpZmljYWxseSBgbWFjODAyMTFgLCBhbmQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS5cblxuSG9sZCBvbiwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbWFjODAyMTFgIGlzIHJlYWNoYWJsZS4gQWgsIHllcywgdmlhIGBtYWM4MDIxMV9od3NpbWAuIEV4Y2VsbGVudC4gTm93LCBhIGNydWNpYWwgYXNwZWN0IHJlbWFpbnM6IEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGUgYEZJTFNgIGZlYXR1cmUgaXMgZW5hYmxlZCBvciBhY2Nlc3NpYmxlLCBzaW5jZSB0aGlzIG1pZ2h0IGJlIHRpZWQgdG8gdGhlIGNoYW5nZXMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIGFuZCBjb2RlIHBhdGhzIHRvIGNvbmZpcm0gaXRzIHJlYWNoYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkwMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxODowODowOS43ODkwMjgxNzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczMDAyNDIyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDODAyMTFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOmNvbmZpZyBNQUM4MDIxMVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MTk9aWYgTUFDODAyMTEgIT0gblxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIxOmNvbmZpZyBNQUM4MDIxMV9IQVNfUkNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMi1cXHRib29sXFxubmV0L21hYzgwMjExL0tjb25maWctMjMtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjQ6Y29uZmlnIE1BQzgwMjExX1JDX01JTlNUUkVMXFxubmV0L21hYzgwMjExL0tjb25maWctMjUtXFx0Ym9vbCBcXFwiTWluc3RyZWxcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MzE9Y2hvaWNlXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00MC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo0MTpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9NDg9ZW5kY2hvaWNlXFxubmV0L21hYzgwMjExL0tjb25maWctNDktXFxubmV0L21hYzgwMjExL0tjb25maWc6NTA6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01MS1cXHRzdHJpbmdcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTU3PWNvbW1lbnQgXFxcIlNvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjYwOmNvbmZpZyBNQUM4MDIxMV9LVU5JVF9URVNUXFxubmV0L21hYzgwMjExL0tjb25maWctNjEtXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBtYWM4MDIxMVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNjktXFxubmV0L21hYzgwMjExL0tjb25maWc6NzA6Y29uZmlnIE1BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cXHRib29sIFxcXCJFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03OC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTgwLVxcdGJvb2wgXFxcIkVuYWJsZSBMRUQgdHJpZ2dlcnNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04Ny1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo4ODpjb25maWcgTUFDODAyMTFfREVCVUdGU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkV4cG9ydCBtYWM4MDIxMSBpbnRlcm5hbHMgaW4gRGVidWdGU1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk2LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjk3OmNvbmZpZyBNQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cXHRib29sIFxcXCJUcmFjZSBhbGwgbWFjODAyMTEgZGVidWcgbWVzc2FnZXNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMDktXFxubmV0L21hYzgwMjExL0tjb25maWc6MTEwOm1lbnVjb25maWcgTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExMS1cXHRib29sIFxcXCJTZWxlY3QgbWFjODAyMTEgZGVidWdnaW5nIGZlYXR1cmVzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTE1LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExNjpjb25maWcgTUFDODAyMTFfTk9JTkxJTkVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRG8gbm90IGlubGluZSBUWC9SWCBoYW5kbGVyc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzMS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMzI6Y29uZmlnIE1BQzgwMjExX1ZFUkJPU0VfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXFx0Ym9vbCBcXFwiVmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTQyLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0Mzpjb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0NC1cXHRib29sIFxcXCJWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTMtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTU0OmNvbmZpZyBNQUM4MDIxMV9TVEFfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTUtXFx0Ym9vbCBcXFwiVmVyYm9zZSBzdGF0aW9uIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNjM6Y29uZmlnIE1BQzgwMjExX0hUX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTY0LVxcdGJvb2wgXFxcIlZlcmJvc2UgSFQgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTc0LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NTpjb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTc2LVxcdGJvb2wgXFxcIlZlcmJvc2UgT0NCIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4NS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxODY6Y29uZmlnIE1BQzgwMjExX0lCU1NfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODctXFx0Ym9vbCBcXFwiVmVyYm9zZSBJQlNTIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5Ni1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxOTc6Y29uZmlnIE1BQzgwMjExX1BTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTk4LVxcdGJvb2wgXFxcIlZlcmJvc2UgcG93ZXJzYXZlIG1vZGUgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjA4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIwOTpjb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjEwLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIyMjpjb25maWcgTUFDODAyMTFfTVBBVEhfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjMtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBhdGggZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjM0LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIzNTpjb25maWcgTUFDODAyMTFfTUhXTVBfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIEhXTVAgcm91dGluZyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDctXFxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDktXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjU5OmNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2MC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI3MDpjb25maWcgTUFDODAyMTFfTUVTSF9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcG93ZXJzYXZlIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4MC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODE6Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODItXFx0Ym9vbCBcXFwiVmVyYm9zZSBURExTIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOTM6Y29uZmlnIE1BQzgwMjExX0RFQlVHX0NPVU5URVJTXFxubmV0L21hYzgwMjExL0tjb25maWctMjk0LVxcdGJvb2wgXFxcIkV4dHJhIHN0YXRpc3RpY3MgZm9yIFRYL1JYIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwNy1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzozMDg6Y29uZmlnIE1BQzgwMjExX1NUQV9IQVNIX01BWF9TSVpFXFxubmV0L21hYzgwMjExL0tjb25maWctMzA5LVxcdGludCBcXFwiU3RhdGlvbiBoYXNoIHRhYmxlIG1heGltdW0gc2l6ZVxcXCIgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxODowODoxMS41MTkwODcxOTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTQwMDc2NzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgTUFDODAyMTEgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMsIGFuZCAqTUFDODAyMTEqIGlzIGNsZWFybHkgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBwb2ludCBmb3IgdGhpcyBlbnRpcmUgd2lyZWxlc3Mgc3RhY2suIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXJlJ3MgYW55dGhpbmcgc3BlY2lmaWNhbGx5IHRhaWxvcmVkIGZvciBGSUxTIOKAkyBGYXN0IEluaXRpYWwgTGluayBTZXR1cC4gSXQncyB1c3VhbGx5IGhhbmRsZWQgaW4gYSBzcGVjaWZpYyB3YXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIGhhbmRsZWQsIHNvIGxldCdzIGNoZWNrIHRoZSBgbmV0L21hYzgwMjExL01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBwb3RlbnRpYWxseSBtb2R1bGUgZGVwZW5kZW5jaWVzIHJlc2lkZS4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSByZWxldmFudCBzb3VyY2VzIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbiB0byB1bmNvdmVyIHRoZSBGSUxTLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NTksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxODowODoxOC4wNTkxNjg0MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQzMDg0NTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9NYWtlZmlsZT01PW1hYzgwMjExLXkgOj0gXFxcXFxcbi0tXFxubmV0L21hYzgwMjExL01ha2VmaWxlLTIzLVxcdGFlc19nbWFjLm8gXFxcXFxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZToyNDpcXHRmaWxzX2FlYWQubyBcXFxcXFxubmV0L21hYzgwMjExL01ha2VmaWxlLTI1LVxcdGNmZy5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTg6MDg6MTguNjAyMjYwODQ1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNTA3MjE2MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBQYXRjaDogYGZpbHNfYWVhZC5vYCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggYWZmZWN0cyBgZmlsc19hZWFkLm9gLCB3aGljaCBpcyBhbHdheXMgY29tcGlsZWQgd2hlbiBgTUFDODAyMTFgIGlzIGVuYWJsZWQuIE15IGZpcnN0IHRob3VnaHQgd2FzIHdoZXRoZXIgcmVwbGFjaW5nIGBtZW1jbXBgIHdpdGggYGNyeXB0b19tZW1uZXFgIHF1YWxpZmllcyBhcyBhIGNoYW5nZSB3b3J0aCBmdXp6aW5nLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNoYW5nZSBkb2Vzbid0IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdywgYnV0IHdoYXQncyB0aGUgZGVhbCBoZXJlP1xuXG5JIHJlYXNvbmVkIHRoYXQgYGNyeXB0b19tZW1uZXFgIGlzIGVzc2VudGlhbGx5IGp1c3QgYSBjb25zdGFudC10aW1lIHZlcnNpb24gb2YgYG1lbWNtcGAsIGJvdGggZXZhbHVhdGluZyB0byB0aGUgc2FtZSBib29sZWFuIHJlc3VsdDogbm9uLXplcm8gaWYgdGhlIG1lbW9yaWVzIGRpZmZlciwgemVybyBpZiB0aGV5IGFyZSBpZGVudGljYWwuIFRoZSBpbnN0cnVjdGlvbnMgbWVudGlvbiBcIkNoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdyxcIiBidXQgdGhpcyBpcyBhIGZ1bmN0aW9uIHJlcGxhY2VtZW50LCBub3QganVzdCBhIG51bWVyaWMgY2hhbmdlLiBTdGlsbCwgdGhlIGxvZ2ljIGlzIGlkZW50aWNhbC4gVGltaW5nIGRpZmZlcmVuY2VzIGFyZW4ndCBkZXRlY3RhYmxlIHZpYSBmdXp6aW5nLCByaWdodD8gU28gZnV6emluZyB3b3VsZG4ndCBmaW5kIG5ldyBidWdzIHdpdGggdGhlIGNoYW5nZS4gUmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgIHNlZW1lZCBhcHByb3ByaWF0ZSwgdGhlIHJhdGlvbmFsZSBiZWluZyBpdCdzIGEgbm9uLWZ1bmN0aW9uYWwsIHRpbWluZy1zYWZlIGNvbXBhcmlzb24gcmVwbGFjZW1lbnQuXG5cbkJ1dCB0aGVuIEkgY2hlY2tlZCB0byBlbnN1cmUgYGNyeXB0b19tZW1uZXFgIGlzbid0IGEgbWFjcm8sIGFuZCwgcGVyIHRoZSBoZWFkZXIgZmlsZSwgaXQncyBhbiBpbmxpbmUgZnVuY3Rpb24uIEV2ZW4gdGhvdWdoIHRoZSBsb2dpYyBpcyB0aGUgc2FtZSwgdGhpcyBpc24ndCBzdHJpY3RseSBhIFwibnVtZXJpYyBjb25zdGFudCBvciBtYWNyb1wiIGNoYW5nZS5cblxuSWYgSSB3ZXJlIHRvIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLCBJJ2QgbmVlZCB0byBwcm92aWRlIGBNQUM4MDIxMWAgYXMgYW4gYEVuYWJsZUNvbmZpZ2AgYW5kIHNwZWNpZnkgRm9jdXNTeW1ib2xzLiBgYWVzX3Npdl9kZWNyeXB0YCBjb21lcyB0byBtaW5kIGltbWVkaWF0ZWx5LiBCdXQgdGhlbiBJIGhhdmUgdG8gY29uc2lkZXIgd2hldGhlciB0byBjaG9vc2UgYGZpbHNfZGVjcnlwdF9hc3NvY19yZXNwYCwgd2hpY2ggY2FsbHMgaXQsIGluc3RlYWQuIExldCdzIG1ha2Ugc3VyZSBpdCBpcyByZWFjaGFibGUuXG5cblllcywgaXQgaXMsIGFuZCBjYW4gYmUgcmVhY2hlZCB2aWEgYGZpbHNfZGVjcnlwdF9hc3NvY19yZXNwYC5cblxuQnV0LCB3YWl0LiBJIHJlcmVhZCB0aGUgaW5zdHJ1Y3Rpb25zLCBhbmQgaXQgKmRvZXNuJ3QqIGV4cGxpY2l0bHkgbGlzdCBcInJlcGxhY2luZyBhIGZ1bmN0aW9uIHdpdGggYW4gZXF1aXZhbGVudCBvbmVcIi4gSXQgKmRvZXMqIHNheSBcIklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXCIgVGhpcyBkZWZpbml0ZWx5IG1vZGlmaWVzIHRoZSByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgb2YgYG1hYzgwMjExYC5cblxuR2l2ZW4gdGhpcywgSSBzaG91bGQgcHJvYmFibHkgZXJyIG9uIHRoZSBzaWRlIG9mIGNhdXRpb24gYW5kIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLCBiZWNhdXNlIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb2RlLiBJJ2xsIG5lZWQgdG8gc3BlY2lmeSB0aGVzZTpcblxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBhZXNfc2l2X2RlY3J5cHRgLCBgZmlsc19kZWNyeXB0X2Fzc29jX3Jlc3BgXG4qICAgKipFbmFibGVDb25maWdzOioqIGBNQUM4MDIxMWBcblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBmaWxzX2RlY3J5cHRfYXNzb2NfcmVzcGAgaXMgdGhlICpvbmx5KiBjYWxsZXIgb2YgYGFlc19zaXZfZGVjcnlwdGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4OTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTg6MDg6MzAuMTA5NDgxNzY0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDg3MjM3MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWVzX3Npdl9kZWNyeXB0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jPTcwPXN0YXRpYyBpbnQgYWVzX3Npdl9lbmNyeXB0KGNvbnN0IHU4ICprZXksIHNpemVfdCBrZXlfbGVuLFxcbi0tXFxubmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jLTEzOC0vKiBOb3RlOiBhZGRyW10gYW5kIGxlbltdIG5lZWRzIHRvIGhhdmUgb25lIGV4dHJhIHNsb3QgYXQgdGhlIGVuZC4gKi9cXG5uZXQvbWFjODAyMTEvZmlsc19hZWFkLmM6MTM5OnN0YXRpYyBpbnQgYWVzX3Npdl9kZWNyeXB0KGNvbnN0IHU4ICprZXksIHNpemVfdCBrZXlfbGVuLFxcbm5ldC9tYWM4MDIxMS9maWxzX2FlYWQuYy0xNDAtXFx0XFx0XFx0ICAgY29uc3QgdTggKml2X2NyeXB0LCBzaXplX3QgaXZfY19sZW4sXFxuLS1cXG5uZXQvbWFjODAyMTEvZmlsc19hZWFkLmM9MjU0PWludCBmaWxzX2RlY3J5cHRfYXNzb2NfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9maWxzX2FlYWQuYy0zMDgtXFx0fVxcbm5ldC9tYWM4MDIxMS9maWxzX2FlYWQuYzozMDk6XFx0cmVzID0gYWVzX3Npdl9kZWNyeXB0KGFzc29jX2RhdGEtXFx1MDAzZWZpbHNfa2VrLCBhc3NvY19kYXRhLVxcdTAwM2VmaWxzX2tla19sZW4sXFxubmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jLTMxMC1cXHRcXHRcXHQgICAgICBlbmNyLCBjcnlwdF9sZW4sIDUsIGFkZHIsIGxlbiwgZW5jcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE4OjA4OjMwLjc1ODIxMTI4MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTQwMTk4NTg2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoJ3MgSW1wYWN0KipcblxuT2theSwgc28gYGZpbHNfZGVjcnlwdF9hc3NvY19yZXNwYCBpcyB0aGUgc29sZSBjYWxsZXIgb2YgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uLiBOb3csIEkgbmVlZCB0byBjb25zaWRlciB3aGV0aGVyIHRoZSBgTUFDODAyMTFfSFdTSU1gIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHJlbGV2YW50IGhlcmUuIFNpbmNlIHdlIGFyZSBkZWFsaW5nIHdpdGggYE1BQzgwMjExYCwgd2hpY2ggaXMgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiwgaXQgc2VlbXMgdW5saWtlbHkgdGhhdCBpdCBpcy5cblxuTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IHdhcnJhbnQgZnV6emluZywgc28gSSB3aWxsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBpcyBiZWNhdXNlIHRoZSBjaGFuZ2UgcmVwbGFjZXMgYSBgbWVtY21wYCBjYWxsIHdpdGggYGNyeXB0b19tZW1uZXFgLCB3aGljaCBpcyBkZXNpZ25lZCB0byBiZSB0aW1pbmctc2FmZS4gVGhpcyBpcyBhIG5vbi1mdW5jdGlvbmFsIGNoYW5nZTsgdGhlIGV4ZWN1dGlvbiBmbG93IHJlbWFpbnMgaWRlbnRpY2FsLCBhbmQgdGhlIHJlcGxhY2VtZW50IGlzIG1lYW50IHRvIG1pdGlnYXRlIGEgcG90ZW50aWFsIHRpbWluZyBhdHRhY2ssIHdoaWNoIGZ1enppbmcgaXMgbm90IGdvb2QgYXQgZGV0ZWN0aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRvIGRvY3VtZW50IG15IHJlYXNvbmluZy5cblxuSGVyZSBpcyB0aGUgcmVhc29uaW5nIEkgd2lsbCBwcm92aWRlOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBgbWVtY21wYCB3aXRoIGBjcnlwdG9fbWVtbmVxYCB0byBwcmV2ZW50IHRpbWluZyBhdHRhY2tzLiBUaGlzIGlzIGEgbm9uLWZ1bmN0aW9uYWwgY2hhbmdlIGluIHRlcm1zIG9mIGV4ZWN1dGlvbiBmbG93IGFuZCBjb3JyZWN0bmVzcywgYXMgYm90aCBmdW5jdGlvbnMgcmV0dXJuIGVxdWl2YWxlbnQgYm9vbGVhbiByZXN1bHRzLiBGdXp6aW5nIGNhbm5vdCBkZXRlY3QgdGltaW5nIGRpZmZlcmVuY2VzLCBzbyBpdCB3aWxsIG5vdCBmaW5kIGFueSBuZXcgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlLlwiXG5cbk5vdywgYmVmb3JlIEkgY29tbWl0IHRvIHRoaXMgYXNzZXNzbWVudCwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgKnRydWx5KiB0aGUgb25seSBjaGFuZ2Ugd2l0aGluIHRoZSBwYXRjaC4gSSdsbCByZXZpZXcgdGhlIGRpZmY6XG5cbmBgYGRpZmZcbi0tLSBhL25ldC9tYWM4MDIxMS9maWxzX2FlYWQuY1xuKysrIGIvbmV0L21hYzgwMjExL2ZpbHNfYWVhZC5jXG5AQCAtMTk1LDcgKzE5NSw3IEBAIHN0YXRpYyBpbnQgYWVzX3Npdl9kZWNyeXB0KGNvbnN0IHU4ICprZXksIHNpemVfdCBrZXlfbGVuLFxuIFx0cmVzID0gYWVzX3MydihrZXkgLyogSzEgKi8sIGtleV9sZW4sIG51bV9lbGVtLCBhZGRyLCBsZW4sIGNoZWNrKTtcbiBcdGlmIChyZXMpXG4gXHRcdHJldHVybiByZXM7XG4tXHRpZiAobWVtY21wKGNoZWNrLCBmcmFtZV9pdiwgQUVTX0JMT0NLX1NJWkUpICE9IDApXG4rXHRpZiAoY3J5cHRvX21lbW5lcShjaGVjaywgZnJhbWVfaXYsIEFFU19CTE9DS19TSVpFKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRyZXR1cm4gMDtcbiB9XG5gYGBcblxuWWVzLCB0aGF0J3MgaXQuIEl0J3MganVzdCB0aGUgb25lIHN1YnN0aXR1dGlvbi5cblxuT2theSwgSSdtIGNvbmZpZGVudC4gSSdsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4ODAsIk91dHB1dFRva2VucyI6OTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTg6MTA6MDAuMTYwMjAwOTUyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgbWVtY21wIHdpdGggY3J5cHRvX21lbW5lcSB0byBwcmV2ZW50IHRpbWluZyBhdHRhY2tzLiBUaGlzIGlzIGEgbm9uLWZ1bmN0aW9uYWwgY2hhbmdlIGluIHRlcm1zIG9mIGV4ZWN1dGlvbiBmbG93IGFuZCBjb3JyZWN0bmVzcywgYXMgYm90aCBmdW5jdGlvbnMgcmV0dXJuIGVxdWl2YWxlbnQgYm9vbGVhbiByZXN1bHRzLiBGdXp6aW5nIGNhbm5vdCBkZXRlY3QgdGltaW5nIGRpZmZlcmVuY2VzLCBzbyBpdCB3aWxsIG5vdCBmaW5kIGFueSBuZXcgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgbWVtY21wIHdpdGggY3J5cHRvX21lbW5lcSB0byBwcmV2ZW50IHRpbWluZyBhdHRhY2tzLiBUaGlzIGlzIGEgbm9uLWZ1bmN0aW9uYWwgY2hhbmdlIGluIHRlcm1zIG9mIGV4ZWN1dGlvbiBmbG93IGFuZCBjb3JyZWN0bmVzcywgYXMgYm90aCBmdW5jdGlvbnMgcmV0dXJuIGVxdWl2YWxlbnQgYm9vbGVhbiByZXN1bHRzLiBGdXp6aW5nIGNhbm5vdCBkZXRlY3QgdGltaW5nIGRpZmZlcmVuY2VzLCBzbyBpdCB3aWxsIG5vdCBmaW5kIGFueSBuZXcgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowr4w4x[1] Phase: Running StartedAt: 2026-07-09 18:10:11 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4w4x[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-09 18:10:11 +0000 UTC FinishedAt: 2026-07-09 18:10:18 +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,}