Name: series-workflowv5k9l Phase: Failed StartedAt: 2026-07-03 12:03:15 +0000 UTC FinishedAt: 2026-07-03 12:37:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5k9l[0] Phase: Succeeded StartedAt: 2026-07-03 12:03:15 +0000 UTC FinishedAt: 2026-07-03 12:37:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5k9l[0].run-triage Phase: Succeeded StartedAt: 2026-07-03 12:03:15 +0000 UTC FinishedAt: 2026-07-03 12:37:25 +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+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBgcHJpb3JpdHlgIHZhcmlhYmxlIGluaXRpYWxpemVkIHRvIDAgYW5kIHBhc3NlcyBpdCB0byBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAsIHdoZXJlIGl0IGlzIHVzZWQgdG8gc2V0IHRoZSBgQUlST0hBX0ZPRV9RSURgIGZpZWxkLiBIb3dldmVyLCBgcHJpb3JpdHlgIGlzIG5ldmVyIG1vZGlmaWVkIGZyb20gMCBpbiBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWAsIHNvIHRoZSBmaWVsZCBpcyBhbHdheXMgc2V0IHRvIDAuIFRoaXMgaXMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byB0aGUgYmVoYXZpb3IgYmVmb3JlIHRoZSBwYXRjaC4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgY2FuIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwOGU1YmQ1NWRkODY0Zjg3MjJlNmQ4MjQ3YjZmYzlkNWRkNGRhOWFlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMyAxMjozNTozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuaW5kZXggZTdjNzgyOTMwMDJhYmIuLmZkYjk3M2ZjNzc5YzgzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuQEAgLTMzMSw3ICYjNDM7MzMxLDcgQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRcdFx0XHRcdHN0cnVjdCBhaXJvaGFfZm9lX2VudHJ5ICpod2UsXG4gXHRcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB0eXBlLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgYWlyb2hhX2Zsb3dfZGF0YSAqZGF0YSxcbi1cdFx0XHRcdFx0aW50IGw0cHJvdG8pXG4mIzQzO1x0XHRcdFx0XHRpbnQgbDRwcm90bywgdTggcHJpb3JpdHkpXG4ge1xuIFx0dTMyIHFkYXRhID0gRklFTERfUFJFUChBSVJPSEFfRk9FX1NIQVBFUl9JRCwgMHg3ZiksIHBvcnRzX3BhZCwgdmFsO1xuIFx0aW50IHdsYW5fZXR5cGUgPSAtRUlOVkFMLCBkc2FfcG9ydCA9IGFpcm9oYV9nZXRfZHNhX3BvcnQoXHUwMDI2bmV0ZGV2KTtcbkBAIC0zODYsNyAmIzQzOzM4Niw5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0XHRcdCAqL1xuIFx0XHRcdGNoYW5uZWwgPSBkc2FfcG9ydCBcdTAwM2U9IDAgPyBkc2FfcG9ydCA6IHBvcnQtXHUwMDNlaWQ7XG4gXHRcdFx0Y2hhbm5lbCA9IGNoYW5uZWwgJSBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUztcbi1cdFx0XHRxZGF0YSB8PSBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfQ0hBTk5FTCwgY2hhbm5lbCk7XG4mIzQzO1x0XHRcdHByaW9yaXR5ID0gcHJpb3JpdHkgJSBBSVJPSEFfTlVNX1FPU19RVUVVRVM7XG4mIzQzO1x0XHRcdHFkYXRhIHw9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9DSEFOTkVMLCBjaGFubmVsKSB8XG4mIzQzO1x0XHRcdFx0IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIHByaW9yaXR5KTtcbiBcbiBcdFx0XHR2YWwgfD0gRklFTERfUFJFUChBSVJPSEFfRk9FX0lCMl9QU0VfUE9SVCwgcHNlX3BvcnQpIHxcbiBcdFx0XHQgICAgICAgQUlST0hBX0ZPRV9JQjJfUFNFX1FPUztcbkBAIC0xMDc5LDEwICYjNDM7MTA4MSwxMCBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbiBcdHN0cnVjdCBhaXJvaGFfZmxvd19kYXRhIGRhdGEgPSB7fTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpvZGV2ID0gTlVMTDtcbiBcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqYWN0O1xuJiM0MztcdHU4IGw0cHJvdG8gPSAwLCBwcmlvcml0eSA9IDA7XG4gXHRzdHJ1Y3QgYWlyb2hhX2ZvZV9lbnRyeSBod2U7XG4gXHRpbnQgZXJyLCBpLCBvZmZsb2FkX3R5cGU7XG4gXHR1MTYgYWRkcl90eXBlID0gMDtcbi1cdHU4IGw0cHJvdG8gPSAwO1xuIFxuIFx0aWYgKHJoYXNodGFibGVfbG9va3VwKFx1MDAyNmV0aC1cdTAwM2VmbG93X3RhYmxlLCBcdTAwMjZmLVx1MDAzZWNvb2tpZSxcbiBcdFx0XHQgICAgICBhaXJvaGFfZmxvd190YWJsZV9wYXJhbXMpKVxuQEAgLTExNzcsNyAmIzQzOzExNzksNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRlcnIgPSBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKGV0aCwgXHUwMDI2aHdlLCBvZGV2LCBvZmZsb2FkX3R5cGUsXG4tXHRcdFx0XHRcdCAgIFx1MDAyNmRhdGEsIGw0cHJvdG8pO1xuJiM0MztcdFx0XHRcdFx0ICAgXHUwMDI2ZGF0YSwgbDRwcm90bywgcHJpb3JpdHkpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYHByaW9yaXR5YCB2YXJpYWJsZSBpbml0aWFsaXplZCB0byAwIGFuZCBwYXNzZXMgaXQgdG8gYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgLCB3aGVyZSBpdCBpcyB1c2VkIHRvIHNldCB0aGUgYEFJUk9IQV9GT0VfUUlEYCBmaWVsZC4gSG93ZXZlciwgYHByaW9yaXR5YCBpcyBuZXZlciBtb2RpZmllZCBmcm9tIDAgaW4gYGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2VgLCBzbyB0aGUgZmllbGQgaXMgYWx3YXlzIHNldCB0byAwLiBUaGlzIGlzIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gdGhlIGJlaGF2aW9yIGJlZm9yZSB0aGUgcGF0Y2guIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwOGU1YmQ1NWRkODY0Zjg3MjJlNmQ4MjQ3YjZmYzlkNWRkNGRhOWFlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMyAxMjozNTozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jCmluZGV4IGU3Yzc4MjkzMDAyYWJiLi5mZGI5NzNmYzc3OWM4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jCkBAIC0zMzEsNyAmIzQzOzMzMSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLAogCQkJCQlzdHJ1Y3QgYWlyb2hhX2ZvZV9lbnRyeSAqaHdlLAogCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdHlwZSwKIAkJCQkJc3RydWN0IGFpcm9oYV9mbG93X2RhdGEgKmRhdGEsCi0JCQkJCWludCBsNHByb3RvKQomIzQzOwkJCQkJaW50IGw0cHJvdG8sIHU4IHByaW9yaXR5KQogewogCXUzMiBxZGF0YSA9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9TSEFQRVJfSUQsIDB4N2YpLCBwb3J0c19wYWQsIHZhbDsKIAlpbnQgd2xhbl9ldHlwZSA9IC1FSU5WQUwsIGRzYV9wb3J0ID0gYWlyb2hhX2dldF9kc2FfcG9ydCgmYW1wO25ldGRldik7CkBAIC0zODYsNyAmIzQzOzM4Niw5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLAogCQkJICovCiAJCQljaGFubmVsID0gZHNhX3BvcnQgJmd0Oz0gMCA/IGRzYV9wb3J0IDogcG9ydC0mZ3Q7aWQ7CiAJCQljaGFubmVsID0gY2hhbm5lbCAlIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTOwotCQkJcWRhdGEgfD0gRklFTERfUFJFUChBSVJPSEFfRk9FX0NIQU5ORUwsIGNoYW5uZWwpOwomIzQzOwkJCXByaW9yaXR5ID0gcHJpb3JpdHkgJSBBSVJPSEFfTlVNX1FPU19RVUVVRVM7CiYjNDM7CQkJcWRhdGEgfD0gRklFTERfUFJFUChBSVJPSEFfRk9FX0NIQU5ORUwsIGNoYW5uZWwpIHwKJiM0MzsJCQkJIEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIHByaW9yaXR5KTsKIAogCQkJdmFsIHw9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9JQjJfUFNFX1BPUlQsIHBzZV9wb3J0KSB8CiAJCQkgICAgICAgQUlST0hBX0ZPRV9JQjJfUFNFX1FPUzsKQEAgLTEwNzksMTAgJiM0MzsxMDgxLDEwIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLAogCXN0cnVjdCBhaXJvaGFfZmxvd19kYXRhIGRhdGEgPSB7fTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqb2RldiA9IE5VTEw7CiAJc3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICphY3Q7CiYjNDM7CXU4IGw0cHJvdG8gPSAwLCBwcmlvcml0eSA9IDA7CiAJc3RydWN0IGFpcm9oYV9mb2VfZW50cnkgaHdlOwogCWludCBlcnIsIGksIG9mZmxvYWRfdHlwZTsKIAl1MTYgYWRkcl90eXBlID0gMDsKLQl1OCBsNHByb3RvID0gMDsKIAogCWlmIChyaGFzaHRhYmxlX2xvb2t1cCgmYW1wO2V0aC0mZ3Q7Zmxvd190YWJsZSwgJmFtcDtmLSZndDtjb29raWUsCiAJCQkgICAgICBhaXJvaGFfZmxvd190YWJsZV9wYXJhbXMpKQpAQCAtMTE3Nyw3ICYjNDM7MTE3OSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVyciA9IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoZXRoLCAmYW1wO2h3ZSwgb2Rldiwgb2ZmbG9hZF90eXBlLAotCQkJCQkgICAmYW1wO2RhdGEsIGw0cHJvdG8pOwomIzQzOwkJCQkJICAgJmFtcDtkYXRhLCBsNHByb3RvLCBwcmlvcml0eSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGFpcm9oYV9wcGUuY2AgUGF0Y2g6IEEgUHJpb3JpdHkgT3ZlcnNpZ2h0PyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgYSBgdTggcHJpb3JpdHlgIHBhcmFtZXRlciBpbnRvIHRoZSBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAgZnVuY3Rpb24gd2l0aGluIHRoZSBgYWlyb2hhX3BwZS5jYCBkcml2ZXIuIFRoZSBvYnZpb3VzIGNoYW5nZSBpcyB0aGF0IHRoaXMgYHByaW9yaXR5YCB2YWx1ZSBpcyBub3cgYmVpbmcgdXNlZCB0byBzZXQgYEFJUk9IQV9GT0VfUUlEYCwgd2hpY2ggaXMgYSBrZXkgcGFyYW1ldGVyIGZvciBxdWV1aW5nL3ByaW9yaXRpemF0aW9uLiBUaGF0IG1ha2VzIHNlbnNlLCBnaXZpbmcgdXMgbW9yZSBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIHRyYWZmaWMuCgpCdXQgaGFuZyBvbuKApiBpbiBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWAsIHdoaWNoIGlzIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLCBJIHNlZSBgcHJpb3JpdHlgIGJlaW5nIGluaXRpYWxpemVkIHRvIDAuIEFuZCwgYXMgZmFyIGFzIEkgY2FuIHNlZSwgaXQmIzM5O3MgKm5ldmVyKiBtb2RpZmllZCBiZWZvcmUgYmVpbmcgcGFzc2VkIGRvd24gdG8gYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgLiBUaGF0IHNlZW1z4oCmIG9kZC4gSWYgdGhlIHByaW9yaXR5IGlzIGNvbnNpc3RlbnRseSAwLCB0aGUgbmV3IHBhcmFtZXRlciBpcyBlc3NlbnRpYWxseSBiZWluZyBpZ25vcmVkLCBvciBhY3RpbmcgYXMgYSBkZWZhdWx0IHdoaWNoIHNlZW1zIHVubmVjZXNzYXJ5LgoKQWxyaWdodCwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLiBJJiMzOTttIGdvaW5nIGJhY2sgdG8gdGhlIGNvZGUgYW5kIHJlYWRpbmcgaXQgYWdhaW4uIE9rYXksIHllcywgaGVyZSB3ZSBhcmU6IGluIHRoZSBkaWZmIGZvciBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWAsIGBwcmlvcml0eWAgaXMgZGVjbGFyZWQsIGJ1dCBpdOKAmXMgaW5pdGlhbGl6ZWQgYW5kIG5ldmVyIHVwZGF0ZWQuIEl04oCZcyBkZWZpbml0ZWx5IGJlaW5nIHBhc3NlZCBhcyAwLiBTbywgaXQgbG9va3MgbGlrZSB0aGlzIG5ldyBgcHJpb3JpdHlgIHBhcmFtZXRlciBpcyBiZWluZyBpbnRyb2R1Y2VkIGJ1dCBpc24mIzM5O3QgYWN0dWFsbHkgbGV2ZXJhZ2VkIHdpdGhpbiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBUaGlzIG5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSXQgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBidWcgb3IgaW5jb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiwgb3IgcGVyaGFwcyB0aGlzIHBhcmFtZXRlciBpcyBpbnRlbmRlZCB0byBiZSBzZXQgZnJvbSBhbiBleHRlcm5hbCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmlvcml0eSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0zMzA9c3RhdGljIGludCBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zMzMtXHRcdFx0XHRcdHN0cnVjdCBhaXJvaGFfZmxvd19kYXRhICpkYXRhLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozMzQ6XHRcdFx0XHRcdGludCBsNHByb3RvLCB1OCBwcmlvcml0eSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzM1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTM4OC1cdFx0XHRjaGFubmVsID0gY2hhbm5lbCAlIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozODk6XHRcdFx0cHJpb3JpdHkgPSBwcmlvcml0eSAlIEFJUk9IQV9OVU1fUU9TX1FVRVVFUztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzkwLVx0XHRcdHFkYXRhIHw9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9DSEFOTkVMLCBjaGFubmVsKSB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjM5MTpcdFx0XHRcdCBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfUUlELCBwcmlvcml0eSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTM5Mi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTEwNzY9c3RhdGljIGludCBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMDgzLVx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICphY3Q7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjEwODQ6XHR1OCBsNHByb3RvID0gMCwgcHJpb3JpdHkgPSAwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMDg1LVx0c3RydWN0IGFpcm9oYV9mb2VfZW50cnkgaHdlO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTE4MS1cdGVyciA9IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoZXRoLCBcdTAwMjZod2UsIG9kZXYsIG9mZmxvYWRfdHlwZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTE4MjpcdFx0XHRcdFx0ICAgXHUwMDI2ZGF0YSwgbDRwcm90bywgcHJpb3JpdHkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMTgzLVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTYwCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgUHJpb3JpdHkgRmxhdyBpbiBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKioKClJpZ2h0LCBzbyBgcHJpb3JpdHlgIGlzIGluaXRpYWxseSBzZXQgdG8gemVybyBhbmQsIGF0IGZpcnN0IGdsYW5jZSBpbiBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWAsIGl0IGRvZXNuJiMzOTt0IGFwcGVhciB0byBiZSBtb2RpZmllZC4gVGhhdCByYWlzZXMgYSByZWQgZmxhZy4gWmVybyBwcmlvcml0eSBpcyB1c3VhbGx5IGEgcHJldHR5IGxvdyB2YWx1ZSwgb2Z0ZW4gbWVhbmluZyBsb3dlc3Qgc2NoZWR1bGluZyBwcmVjZWRlbmNlLiBJdCBjb3VsZCBsZWFkIHRvIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGlmIHRoaXMgb2ZmbG9hZCBpcyBjcml0aWNhbC4gQmVmb3JlIEkganVtcCB0byBjb25jbHVzaW9ucyB0aG91Z2gsIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIEnigJltIGdvaW5nIHRvIHF1aWNrbHkgc3RlcCB0aHJvdWdoIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYCBhZ2FpbiBmcm9tIHRvcCB0byBib3R0b20sIGNhcmVmdWxseSBjaGVja2luZyBmb3IgYW55IHBvdGVudGlhbCBtb2RpZmljYXRpb25zIHRvIHRoZSBgcHJpb3JpdHlgIHZhcmlhYmxlIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhhdCBmdW5jdGlvbiDigJMgZXZlbiBpZiBpdOKAmXMgdGhyb3VnaCBhIHBvaW50ZXIgb3Igc29tZSBpbmRpcmVjdCBtZWNoYW5pc20uIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gYmVmb3JlIEkgcmFpc2UgdGhpcyBhcyBhbiBpc3N1ZS4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNzY6XHRzdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbjEwNzc6XHRcdFx0XHRcdFx0ICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmYpXG4xMDc4Olx0e1xuMTA3OTpcdFx0c3RydWN0IGZsb3dfcnVsZSAqcnVsZSA9IGZsb3dfY2xzX29mZmxvYWRfZmxvd19ydWxlKGYpO1xuMTA4MDpcdFx0c3RydWN0IGFpcm9oYV9mbG93X3RhYmxlX2VudHJ5ICplO1xuMTA4MTpcdFx0c3RydWN0IGFpcm9oYV9mbG93X2RhdGEgZGF0YSA9IHt9O1xuMTA4MjpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm9kZXYgPSBOVUxMO1xuMTA4MzpcdFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICphY3Q7XG4xMDg0Olx0XHR1OCBsNHByb3RvID0gMCwgcHJpb3JpdHkgPSAwO1xuMTA4NTpcdFx0c3RydWN0IGFpcm9oYV9mb2VfZW50cnkgaHdlO1xuMTA4NjpcdFx0aW50IGVyciwgaSwgb2ZmbG9hZF90eXBlO1xuMTA4NzpcdFx0dTE2IGFkZHJfdHlwZSA9IDA7XG4xMDg4Olx0XG4xMDg5Olx0XHRpZiAocmhhc2h0YWJsZV9sb29rdXAoXHUwMDI2ZXRoLVx1MDAzZWZsb3dfdGFibGUsIFx1MDAyNmYtXHUwMDNlY29va2llLFxuMTA5MDpcdFx0XHRcdCAgICAgIGFpcm9oYV9mbG93X3RhYmxlX3BhcmFtcykpXG4xMDkxOlx0XHRcdHJldHVybiAtRUVYSVNUO1xuMTA5MjpcdFxuMTA5MzpcdFx0aWYgKCFmbG93X3J1bGVfbWF0Y2hfa2V5KHJ1bGUsIEZMT1dfRElTU0VDVE9SX0tFWV9NRVRBKSlcbjEwOTQ6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTA5NTpcdFxuMTA5NjpcdFx0aWYgKGZsb3dfcnVsZV9tYXRjaF9rZXkocnVsZSwgRkxPV19ESVNTRUNUT1JfS0VZX0NPTlRST0wpKSB7XG4xMDk3Olx0XHRcdHN0cnVjdCBmbG93X21hdGNoX2NvbnRyb2wgbWF0Y2g7XG4xMDk4Olx0XG4xMDk5Olx0XHRcdGZsb3dfcnVsZV9tYXRjaF9jb250cm9sKHJ1bGUsIFx1MDAyNm1hdGNoKTtcbjExMDA6XHRcdFx0YWRkcl90eXBlID0gbWF0Y2gua2V5LVx1MDAzZWFkZHJfdHlwZTtcbjExMDE6XHRcdFx0aWYgKGZsb3dfcnVsZV9oYXNfY29udHJvbF9mbGFncyhtYXRjaC5tYXNrLVx1MDAzZWZsYWdzLFxuMTEwMjpcdFx0XHRcdFx0XHRcdGYtXHUwMDNlY29tbW9uLmV4dGFjaykpXG4xMTAzOlx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTEwNDpcdFx0fSBlbHNlIHtcbjExMDU6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTEwNjpcdFx0fVxuMTEwNzpcdFxuMTEwODpcdFx0aWYgKGZsb3dfcnVsZV9tYXRjaF9rZXkocnVsZSwgRkxPV19ESVNTRUNUT1JfS0VZX0JBU0lDKSkge1xuMTEwOTpcdFx0XHRzdHJ1Y3QgZmxvd19tYXRjaF9iYXNpYyBtYXRjaDtcbjExMTA6XHRcbjExMTE6XHRcdFx0Zmxvd19ydWxlX21hdGNoX2Jhc2ljKHJ1bGUsIFx1MDAyNm1hdGNoKTtcbjExMTI6XHRcdFx0bDRwcm90byA9IG1hdGNoLmtleS1cdTAwM2VpcF9wcm90bztcbjExMTM6XHRcdH0gZWxzZSB7XG4xMTE0Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjExMTU6XHRcdH1cbjExMTY6XHRcbjExMTc6XHRcdHN3aXRjaCAoYWRkcl90eXBlKSB7XG4xMTE4Olx0XHRjYXNlIDA6XG4xMTE5Olx0XHRcdG9mZmxvYWRfdHlwZSA9IFBQRV9QS1RfVFlQRV9CUklER0U7XG4xMTIwOlx0XHRcdGlmIChmbG93X3J1bGVfbWF0Y2hfa2V5KHJ1bGUsIEZMT1dfRElTU0VDVE9SX0tFWV9FVEhfQUREUlMpKSB7XG4xMTIxOlx0XHRcdFx0c3RydWN0IGZsb3dfbWF0Y2hfZXRoX2FkZHJzIG1hdGNoO1xuMTEyMjpcdFxuMTEyMzpcdFx0XHRcdGZsb3dfcnVsZV9tYXRjaF9ldGhfYWRkcnMocnVsZSwgXHUwMDI2bWF0Y2gpO1xuMTEyNDpcdFx0XHRcdG1lbWNweShkYXRhLmV0aC5oX2Rlc3QsIG1hdGNoLmtleS1cdTAwM2Vkc3QsIEVUSF9BTEVOKTtcbjExMjU6XHRcdFx0XHRtZW1jcHkoZGF0YS5ldGguaF9zb3VyY2UsIG1hdGNoLmtleS1cdTAwM2VzcmMsIEVUSF9BTEVOKTtcbjExMjY6XHRcdFx0fSBlbHNlIHtcbjExMjc6XHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMTI4Olx0XHRcdH1cbjExMjk6XHRcdFx0YnJlYWs7XG4xMTMwOlx0XHRjYXNlIEZMT1dfRElTU0VDVE9SX0tFWV9JUFY0X0FERFJTOlxuMTEzMTpcdFx0XHRvZmZsb2FkX3R5cGUgPSBQUEVfUEtUX1RZUEVfSVBWNF9ITkFQVDtcbjExMzI6XHRcdFx0YnJlYWs7XG4xMTMzOlx0XHRjYXNlIEZMT1dfRElTU0VDVE9SX0tFWV9JUFY2X0FERFJTOlxuMTEzNDpcdFx0XHRvZmZsb2FkX3R5cGUgPSBQUEVfUEtUX1RZUEVfSVBWNl9ST1VURV81VDtcbjExMzU6XHRcdFx0YnJlYWs7XG4xMTM2Olx0XHRkZWZhdWx0OlxuMTEzNzpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMTM4Olx0XHR9XG4xMTM5Olx0XG4xMTQwOlx0XHRmbG93X2FjdGlvbl9mb3JfZWFjaChpLCBhY3QsIFx1MDAyNnJ1bGUtXHUwMDNlYWN0aW9uKSB7XG4xMTQxOlx0XHRcdHN3aXRjaCAoYWN0LVx1MDAzZWlkKSB7XG4xMTQyOlx0XHRcdGNhc2UgRkxPV19BQ1RJT05fTUFOR0xFOlxuMTE0MzpcdFx0XHRcdGlmIChvZmZsb2FkX3R5cGUgPT0gUFBFX1BLVF9UWVBFX0JSSURHRSlcbjExNDQ6XHRcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjExNDU6XHRcbjExNDY6XHRcdFx0XHRpZiAoYWN0LVx1MDAzZW1hbmdsZS5odHlwZSA9PSBGTE9XX0FDVF9NQU5HTEVfSERSX1RZUEVfRVRIKVxuMTE0NzpcdFx0XHRcdFx0YWlyb2hhX3BwZV9mbG93X21hbmdsZV9ldGgoYWN0LCBcdTAwMjZkYXRhLmV0aCk7XG4xMTQ4Olx0XHRcdFx0YnJlYWs7XG4xMTQ5Olx0XHRcdGNhc2UgRkxPV19BQ1RJT05fUkVESVJFQ1Q6XG4xMTUwOlx0XHRcdFx0b2RldiA9IGFjdC1cdTAwM2VkZXY7XG4xMTUxOlx0XHRcdFx0YnJlYWs7XG4xMTUyOlx0XHRcdGNhc2UgRkxPV19BQ1RJT05fQ1NVTTpcbjExNTM6XHRcdFx0XHRicmVhaztcbjExNTQ6XHRcdFx0Y2FzZSBGTE9XX0FDVElPTl9WTEFOX1BVU0g6XG4xMTU1Olx0XHRcdFx0aWYgKGRhdGEudmxhbi5udW0gPT0gMiB8fFxuMTE1NjpcdFx0XHRcdCAgICBhY3QtXHUwMDNldmxhbi5wcm90byAhPSBodG9ucyhFVEhfUF84MDIxUSkpXG4xMTU3Olx0XHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMTU4Olx0XG4xMTU5Olx0XHRcdFx0ZGF0YS52bGFuLmhkcltkYXRhLnZsYW4ubnVtXS5pZCA9IGFjdC1cdTAwM2V2bGFuLnZpZDtcbjExNjA6XHRcdFx0XHRkYXRhLnZsYW4uaGRyW2RhdGEudmxhbi5udW1dLnByb3RvID0gYWN0LVx1MDAzZXZsYW4ucHJvdG87XG4xMTYxOlx0XHRcdFx0ZGF0YS52bGFuLm51bSYjNDM7JiM0Mzs7XG4xMTYyOlx0XHRcdFx0YnJlYWs7XG4xMTYzOlx0XHRcdGNhc2UgRkxPV19BQ1RJT05fVkxBTl9QT1A6XG4xMTY0Olx0XHRcdFx0YnJlYWs7XG4xMTY1Olx0XHRcdGNhc2UgRkxPV19BQ1RJT05fUFBQT0VfUFVTSDpcbjExNjY6XHRcdFx0XHRpZiAoZGF0YS5wcHBvZS5udW0gPT0gMSB8fCBkYXRhLnZsYW4ubnVtID09IDIpXG4xMTY3Olx0XHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMTY4Olx0XG4xMTY5Olx0XHRcdFx0ZGF0YS5wcHBvZS5zaWQgPSBhY3QtXHUwMDNlcHBwb2Uuc2lkO1xuMTE3MDpcdFx0XHRcdGRhdGEucHBwb2UubnVtJiM0MzsmIzQzOztcbjExNzE6XHRcdFx0XHRicmVhaztcbjExNzI6XHRcdFx0ZGVmYXVsdDpcbjExNzM6XHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMTc0Olx0XHRcdH1cbjExNzU6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTAwCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhZG9wdGluZyB0aGUgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlIGFzIHJlcXVlc3RlZCwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LgoKKipBbmFseXppbmcgRnVuY3Rpb24gSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgSSYjMzk7dmUgZ290IHRoZSBnZW5lcmFsIGNvbnRleHQgbG9ja2VkIGluLiBOb3csIEkgbmVlZCB0byB6b29tIGluIGFuZCBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBkZXRhaWwuIEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIGxvZ2ljIGFuZCBncmFzcCBob3cgdGhpcyBmdW5jdGlvbiBhY2hpZXZlcyBpdHMgcHVycG9zZS4gVGhlIGJpZyBwaWN0dXJlIGlzIHNldCwgc28gbGV0JiMzOTtzIHBhcnNlIHRocm91Z2ggdGhlIGxpbmVzIGFuZCB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIExldCYjMzk7cyBzZWUgaG93IHRoZSBpbmRpdmlkdWFsIGNvbXBvbmVudHMgZml0IHRvZ2V0aGVyIHRvIHByb2R1Y2UgdGhlIGRlc2lyZWQgb3V0cHV0LCBvciBpbiB0aGlzIGNhc2UsIGNvbnRpbnVlIG91ciB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNzY6XHRcbjExNzc6XHRcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihkYXRhLmV0aC5oX3NvdXJjZSkgfHxcbjExNzg6XHRcdCAgICAhaXNfdmFsaWRfZXRoZXJfYWRkcihkYXRhLmV0aC5oX2Rlc3QpKVxuMTE3OTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjExODA6XHRcbjExODE6XHRcdGVyciA9IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoZXRoLCBcdTAwMjZod2UsIG9kZXYsIG9mZmxvYWRfdHlwZSxcbjExODI6XHRcdFx0XHRcdFx0ICAgXHUwMDI2ZGF0YSwgbDRwcm90bywgcHJpb3JpdHkpO1xuMTE4MzpcdFx0aWYgKGVycilcbjExODQ6XHRcdFx0cmV0dXJuIGVycjtcbjExODU6XHRcbjExODY6XHRcdGlmIChmbG93X3J1bGVfbWF0Y2hfa2V5KHJ1bGUsIEZMT1dfRElTU0VDVE9SX0tFWV9QT1JUUykpIHtcbjExODc6XHRcdFx0c3RydWN0IGZsb3dfbWF0Y2hfcG9ydHMgcG9ydHM7XG4xMTg4Olx0XG4xMTg5Olx0XHRcdGlmIChvZmZsb2FkX3R5cGUgPT0gUFBFX1BLVF9UWVBFX0JSSURHRSlcbjExOTA6XHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMTkxOlx0XG4xMTkyOlx0XHRcdGZsb3dfcnVsZV9tYXRjaF9wb3J0cyhydWxlLCBcdTAwMjZwb3J0cyk7XG4xMTkzOlx0XHRcdGRhdGEuc3JjX3BvcnQgPSBwb3J0cy5rZXktXHUwMDNlc3JjO1xuMTE5NDpcdFx0XHRkYXRhLmRzdF9wb3J0ID0gcG9ydHMua2V5LVx1MDAzZWRzdDtcbjExOTU6XHRcdH0gZWxzZSBpZiAob2ZmbG9hZF90eXBlICE9IFBQRV9QS1RfVFlQRV9CUklER0UpIHtcbjExOTY6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTE5NzpcdFx0fVxuMTE5ODpcdFxuMTE5OTpcdFx0aWYgKGFkZHJfdHlwZSA9PSBGTE9XX0RJU1NFQ1RPUl9LRVlfSVBWNF9BRERSUykge1xuMTIwMDpcdFx0XHRzdHJ1Y3QgZmxvd19tYXRjaF9pcHY0X2FkZHJzIGFkZHJzO1xuMTIwMTpcdFxuMTIwMjpcdFx0XHRmbG93X3J1bGVfbWF0Y2hfaXB2NF9hZGRycyhydWxlLCBcdTAwMjZhZGRycyk7XG4xMjAzOlx0XHRcdGRhdGEudjQuc3JjX2FkZHIgPSBhZGRycy5rZXktXHUwMDNlc3JjO1xuMTIwNDpcdFx0XHRkYXRhLnY0LmRzdF9hZGRyID0gYWRkcnMua2V5LVx1MDAzZWRzdDtcbjEyMDU6XHRcdFx0YWlyb2hhX3BwZV9mb2VfZW50cnlfc2V0X2lwdjRfdHVwbGUoXHUwMDI2aHdlLCBcdTAwMjZkYXRhLCBmYWxzZSk7XG4xMjA2Olx0XHR9XG4xMjA3Olx0XG4xMjA4Olx0XHRpZiAoYWRkcl90eXBlID09IEZMT1dfRElTU0VDVE9SX0tFWV9JUFY2X0FERFJTKSB7XG4xMjA5Olx0XHRcdHN0cnVjdCBmbG93X21hdGNoX2lwdjZfYWRkcnMgYWRkcnM7XG4xMjEwOlx0XG4xMjExOlx0XHRcdGZsb3dfcnVsZV9tYXRjaF9pcHY2X2FkZHJzKHJ1bGUsIFx1MDAyNmFkZHJzKTtcbjEyMTI6XHRcbjEyMTM6XHRcdFx0ZGF0YS52Ni5zcmNfYWRkciA9IGFkZHJzLmtleS1cdTAwM2VzcmM7XG4xMjE0Olx0XHRcdGRhdGEudjYuZHN0X2FkZHIgPSBhZGRycy5rZXktXHUwMDNlZHN0O1xuMTIxNTpcdFx0XHRhaXJvaGFfcHBlX2ZvZV9lbnRyeV9zZXRfaXB2Nl90dXBsZShcdTAwMjZod2UsIFx1MDAyNmRhdGEpO1xuMTIxNjpcdFx0fVxuMTIxNzpcdFxuMTIxODpcdFx0Zmxvd19hY3Rpb25fZm9yX2VhY2goaSwgYWN0LCBcdTAwMjZydWxlLVx1MDAzZWFjdGlvbikge1xuMTIxOTpcdFx0XHRpZiAoYWN0LVx1MDAzZWlkICE9IEZMT1dfQUNUSU9OX01BTkdMRSlcbjEyMjA6XHRcdFx0XHRjb250aW51ZTtcbjEyMjE6XHRcbjEyMjI6XHRcdFx0aWYgKG9mZmxvYWRfdHlwZSA9PSBQUEVfUEtUX1RZUEVfQlJJREdFKVxuMTIyMzpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjEyMjQ6XHRcbjEyMjU6XHRcdFx0c3dpdGNoIChhY3QtXHUwMDNlbWFuZ2xlLmh0eXBlKSB7XG4xMjI2Olx0XHRcdGNhc2UgRkxPV19BQ1RfTUFOR0xFX0hEUl9UWVBFX1RDUDpcbjEyMjc6XHRcdFx0Y2FzZSBGTE9XX0FDVF9NQU5HTEVfSERSX1RZUEVfVURQOlxuMTIyODpcdFx0XHRcdGVyciA9IGFpcm9oYV9wcGVfZmxvd19tYW5nbGVfcG9ydHMoYWN0LCBcdTAwMjZkYXRhKTtcbjEyMjk6XHRcdFx0XHRicmVhaztcbjEyMzA6XHRcdFx0Y2FzZSBGTE9XX0FDVF9NQU5HTEVfSERSX1RZUEVfSVA0OlxuMTIzMTpcdFx0XHRcdGVyciA9IGFpcm9oYV9wcGVfZmxvd19tYW5nbGVfaXB2NChhY3QsIFx1MDAyNmRhdGEpO1xuMTIzMjpcdFx0XHRcdGJyZWFrO1xuMTIzMzpcdFx0XHRjYXNlIEZMT1dfQUNUX01BTkdMRV9IRFJfVFlQRV9FVEg6XG4xMjM0Olx0XHRcdFx0LyogaGFuZGxlZCBlYXJsaWVyICovXG4xMjM1Olx0XHRcdFx0YnJlYWs7XG4xMjM2Olx0XHRcdGRlZmF1bHQ6XG4xMjM3Olx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTIzODpcdFx0XHR9XG4xMjM5Olx0XG4xMjQwOlx0XHRcdGlmIChlcnIpXG4xMjQxOlx0XHRcdFx0cmV0dXJuIGVycjtcbjEyNDI6XHRcdH1cbjEyNDM6XHRcbjEyNDQ6XHRcdGlmIChhZGRyX3R5cGUgPT0gRkxPV19ESVNTRUNUT1JfS0VZX0lQVjRfQUREUlMpIHtcbjEyNDU6XHRcdFx0ZXJyID0gYWlyb2hhX3BwZV9mb2VfZW50cnlfc2V0X2lwdjRfdHVwbGUoXHUwMDI2aHdlLCBcdTAwMjZkYXRhLCB0cnVlKTtcbjEyNDY6XHRcdFx0aWYgKGVycilcbjEyNDc6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMTI0ODpcdFx0fVxuMTI0OTpcdFxuMTI1MDpcdFx0ZSA9IGt6YWxsb2Nfb2JqKCplKTtcbjEyNTE6XHRcdGlmICghZSlcbjEyNTI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xMjUzOlx0XG4xMjU0Olx0XHRlLVx1MDAzZWNvb2tpZSA9IGYtXHUwMDNlY29va2llO1xuMTI1NTpcdFx0bWVtY3B5KFx1MDAyNmUtXHUwMDNlZGF0YSwgXHUwMDI2aHdlLCBzaXplb2YoZS1cdTAwM2VkYXRhKSk7XG4xMjU2Olx0XG4xMjU3Olx0XHRlcnIgPSBhaXJvaGFfcHBlX2ZvZV9mbG93X2NvbW1pdF9lbnRyeShldGgtXHUwMDNlcHBlLCBlKTtcbjEyNTg6XHRcdGlmIChlcnIpXG4xMjU5Olx0XHRcdGdvdG8gZnJlZV9lbnRyeTtcbjEyNjA6XHRcbjEyNjE6XHRcdGVyciA9IHJoYXNodGFibGVfaW5zZXJ0X2Zhc3QoXHUwMDI2ZXRoLVx1MDAzZWZsb3dfdGFibGUsIFx1MDAyNmUtXHUwMDNlbm9kZSxcbjEyNjI6XHRcdFx0XHRcdCAgICAgYWlyb2hhX2Zsb3dfdGFibGVfcGFyYW1zKTtcbjEyNjM6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4xMjY0Olx0XHRcdGdvdG8gcmVtb3ZlX2ZvZV9lbnRyeTtcbjEyNjU6XHRcbjEyNjY6XHRcdHJldHVybiAwO1xuMTI2NzpcdFxuMTI2ODpcdHJlbW92ZV9mb2VfZW50cnk6XG4xMjY5Olx0XHRhaXJvaGFfcHBlX2ZvZV9mbG93X3JlbW92ZV9lbnRyeShldGgtXHUwMDNlcHBlLCBlKTtcbjEyNzA6XHRmcmVlX2VudHJ5OlxuMTI3MTpcdFx0a2ZyZWUoZSk7XG4xMjcyOlx0XG4xMjczOlx0XHRyZXR1cm4gZXJyO1xuMTI3NDpcdH1cbjEyNzU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjI4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogOTk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUFBFIEZsb3cgT2ZmbG9hZCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZy4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2VgIGZ1bmN0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgdGhlIGBwcmlvcml0eWAgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQgdG8gMCBhbmQsIGF0IGZpcnN0IGdsYW5jZSwgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSBtb2RpZmllZCBhbnl3aGVyZSB3aXRoaW4gdGhlIGZ1bmN0aW9uIGl0c2VsZi4gIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCwgdGhvdWdoLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgbW9yZSBjbG9zZWx5IHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiAgT2theSwgSSBzZWUgaXQmIzM5O3MgZGVjbGFyZWQgYW5kIGluaXRpYWxpemVkIGhlcmU6IGB1OCBsNHByb3RvID0gMCwgcHJpb3JpdHkgPSAwO2AuIFRoZW4gaXQmIzM5O3MgcGFzc2VkIHRvIGBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlYC4uLiBidXQgaXQmIzM5O3MgcGFzc2VkIGJ5IHZhbHVlLCBgdTggcHJpb3JpdHlgLiBTbywgYW55IGNoYW5nZXMgaW5zaWRlIHRoYXQgZnVuY3Rpb24gd29uJiMzOTt0IHByb3BhZ2F0ZSBiYWNrLiBUaGlzIHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSBhbHdheXMgMCBhdCB0aGlzIHN0YWdlLgoKSWYgYHByaW9yaXR5YCBpcyBhbHdheXMgemVybywgZG9lcyB0aGlzIHBhdGNoIGV2ZW4gZG8gYW55dGhpbmcgbmV3PyBJdCBzZWVtcyB1bmxpa2VseS4gIEkgbmVlZCB0byB0cmFjZSB3aGVyZSBpdCAqY291bGQqIGJlIGNoYW5nZWQuIEkgbmVlZCB0byB0aGluayBhYm91dCBob3cgdGhpcyBgcHJpb3JpdHlgIHZhbHVlICpjb3VsZCogYmUgc2V0LiBJdCBzZWVtcyBsaWtlIHRoZSBjcml0aWNhbCBwaWVjZSBoZXJlIGlzIHRoZSBgZmxvd19hY3Rpb25fZm9yX2VhY2hgIGxvb3AuICBMZXQmIzM5O3Mgc2VlLgoKSSBzZWUgdGhlcmUmIzM5O3MgYSBsb29wLCBsb29raW5nIGF0IGBydWxlLSZndDthY3Rpb25gLiAgSGVyZSBpdCBpcy4gSSYjMzk7bSBnb2luZyB0aHJvdWdoIHRoZSBjYXNlcy4uLiBJIHNlZSBgRkxPV19BQ1RJT05fTUFOR0xFYCwgYEZMT1dfQUNUSU9OX1JFRElSRUNUYCwgYEZMT1dfQUNUSU9OX0NTVU1gLCBhbmQgc28gb24uCgpXYWl0LCBpcyBgRkxPV19BQ1RJT05fUFJJT1JJVFlgICpoYW5kbGVkKiBpbiB0aGlzIGxvb3A/IEkgZG9uJiMzOTt0IHNlZSBpdCEgSXQmIzM5O3Mgbm90IGxpc3RlZCEgIEkgbmVlZCB0byBjaGVjayB0aGUgb3JpZ2luYWwgY29kZSB0byBzZWUgaWYgdGhlcmUgd2FzIGEgZGlmZmVyZW5jZS4gIEkmIzM5O20gZ29pbmcgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG9yaWdpbmFsIGNvZGUgaGFuZGxlcyB0aGlzLiBObywgaXQgaXNuJiMzOTt0LiBTbyB0aGF0IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGlzIGFsd2F5cyBpbml0aWFsaXplZCB0byAwLgoKSWYgYHByaW9yaXR5YCAqaXMqIGFsd2F5cyB6ZXJvLCB0aGVuIGFueSBzdWJzZXF1ZW50IG9wZXJhdGlvbiBsaWtlIGBwcmlvcml0eSA9IHByaW9yaXR5ICUgQUlST0hBX05VTV9RT1NfUVVFVUVTO2AgaXMgc2ltcGxpZmllZCB0byBgMCAlIEFJUk9IQV9OVU1fUU9TX1FVRVVFU2AsIHdoaWNoIGlzIGNsZWFybHkgYWx3YXlzIHplcm8uIE9rYXksIGFuZCB0aGVuIGBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfUUlELCBwcmlvcml0eSlgIGJlY29tZXMgYEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIDApYC4KCk5vdywgdGhlIHRoaW5nIHRoYXQmIzM5O3MgaW1wb3J0YW50IGhlcmUgaXMgdGhhdCBgQUlST0hBX0ZPRV9RSURgIGlzIGEgKm1hc2sqLiBJIG5lZWQgdG8gZmluZCBpdHMgdmFsdWUuIFRoYXQgd2lsbCB0ZWxsIG1lIGV4YWN0bHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FJUk9IQV9GT0VfUUlEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oPTI4Nj1zdHJ1Y3QgYWlyb2hhX2ZvZV9tYWNfaW5mbyB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaC0zMjItI2RlZmluZSBBSVJPSEFfRk9FX0NIQU5ORUxcdFx0XHRHRU5NQVNLKDE1LCAxMSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmg6MzIzOiNkZWZpbmUgQUlST0hBX0ZPRV9RSURcdFx0XHRcdEdFTk1BU0soMTAsIDgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oLTMyNC0jZGVmaW5lIEFJUk9IQV9GT0VfRFBJXHRcdFx0XHRCSVQoNylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTMzMD1zdGF0aWMgaW50IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTM5MC1cdFx0XHRxZGF0YSB8PSBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfQ0hBTk5FTCwgY2hhbm5lbCkgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozOTE6XHRcdFx0XHQgRklFTERfUFJFUChBSVJPSEFfRk9FX1FJRCwgcHJpb3JpdHkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zOTItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz02MjE9c3RhdGljIHZvaWQgYWlyb2hhX3BwZV9mb2VfZmxvd19zdGF0c191cGRhdGUoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTY2MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6NjYxOlx0dmFsID0gRklFTERfR0VUKEFJUk9IQV9GT0VfQ0hBTk5FTCB8IEFJUk9IQV9GT0VfUUlELCAqZGF0YSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTY2Mi1cdCpkYXRhID0gKCpkYXRhIFx1MDAyNiB+QUlST0hBX0ZPRV9BQ1REUCkgfFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzAxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHByaW9yaXR5YCBBcmd1bWVudCBpbiBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAqKgoKT2theSwgc28gYHByaW9yaXR5YCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdmVyaWZ5IHdoZXRoZXIgdGhhdCBhcmd1bWVudCBpcyBiZWluZyBtb2RpZmllZCBpbnNpZGUgdGhlIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYCBmdW5jdGlvbiBpdHNlbGYuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlIHZhbHVlIHBhc3NlZCBpc24mIzM5O3QgYmVpbmcgb3ZlcndyaXR0ZW4gb3IgY2hhbmdlZC4KCkxldCYjMzk7cyBsb29rIGF0IHRoZSBwcm92aWRlZCBkaWZmIGZvciBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWAuIFNjYW5uaW5nIHRocm91Z2ggdGhlIGNvZGUsIEkgc2VlIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uOiB0aGVyZSYjMzk7cyBhbiBhZGRpdGlvbiBvZiBgcHJpb3JpdHlgIGFzIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAuIExvb2tpbmcgYXQgdGhlIGRpZmYsIEkgY2FuIGNvbmZpcm0gdGhhdCBgcHJpb3JpdHlgIGlzICpub3QqIGJlaW5nIG1vZGlmaWVkIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBJdCYjMzk7cyBpbml0aWFsaXplZCwgYnV0IG5vdCBjaGFuZ2VkIGJlZm9yZSBiZWluZyBwYXNzZWQuCgpHaXZlbiB0aGlzLCBJIGhhdmUgdG8gY29uc2lkZXIgd2hldGhlciB0aGVyZSYjMzk7cyBhbm90aGVyIHJlbGF0ZWQgcGF0Y2ggb3IgaWYgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIEkmIzM5O20gbWlzc2luZyB3aXRoaW4gdGhlIGN1cnJlbnQgY29kZSBjb250ZXh0LCBzdWNoIGFzIGEgY2FsbCB0byBhbm90aGVyIGZ1bmN0aW9uIGluIHRoZSBwYXRjaCwgb3IgaWYgdGhlIGxvZ2ljIGZsb3cgYWZmZWN0cyB0aGF0IGBwcmlvcml0eWAgdmFsdWUuIEkmIzM5O2xsIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaCB0byBjb25maXJtIHRoZSBhcmd1bWVudCBpcyBiZWluZyB1c2VkIGFzIGludGVuZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmlvcml0eSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0zMzA9c3RhdGljIGludCBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zMzMtXHRcdFx0XHRcdHN0cnVjdCBhaXJvaGFfZmxvd19kYXRhICpkYXRhLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozMzQ6XHRcdFx0XHRcdGludCBsNHByb3RvLCB1OCBwcmlvcml0eSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzM1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTM4OC1cdFx0XHRjaGFubmVsID0gY2hhbm5lbCAlIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozODk6XHRcdFx0cHJpb3JpdHkgPSBwcmlvcml0eSAlIEFJUk9IQV9OVU1fUU9TX1FVRVVFUztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzkwLVx0XHRcdHFkYXRhIHw9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9DSEFOTkVMLCBjaGFubmVsKSB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjM5MTpcdFx0XHRcdCBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfUUlELCBwcmlvcml0eSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTM5Mi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTEwNzY9c3RhdGljIGludCBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMDgzLVx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICphY3Q7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjEwODQ6XHR1OCBsNHByb3RvID0gMCwgcHJpb3JpdHkgPSAwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMDg1LVx0c3RydWN0IGFpcm9oYV9mb2VfZW50cnkgaHdlO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTE4MS1cdGVyciA9IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoZXRoLCBcdTAwMjZod2UsIG9kZXYsIG9mZmxvYWRfdHlwZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTE4MjpcdFx0XHRcdFx0ICAgXHUwMDI2ZGF0YSwgbDRwcm90bywgcHJpb3JpdHkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMTgzLVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMzEKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4KCioqQW5hbHl6aW5nIHRoZSBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWAgRnVuY3Rpb24qKgoKSG1tLCBob2xkIG9uIGEgc2Vjb25kLi4uIGlzIGBwcmlvcml0eWAgYWN0dWFsbHkgZ2V0dGluZyBtb2RpZmllZCAqaW5zaWRlKiBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWA/IFRoYXQmIzM5O3Mgbm90IHdoYXQgSSBpbml0aWFsbHkgZXhwZWN0ZWQuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhpcy4gTGV0IG1lIGp1c3QgcXVpY2tseSBnbyBiYWNrIGFuZCB0aG9yb3VnaGx5IHJldmlldyB0aGF0IGBmbG93X2FjdGlvbl9mb3JfZWFjaGAgbG9vcCBhZ2Fpbi4gSSBwcm9iYWJseSBicmVlemVkIHRocm91Z2ggaXQgdG9vIHF1aWNrbHkgdGhlIGZpcnN0IHRpbWUgYW5kIG1pc3NlZCBzb21ldGhpbmcgc3VidGxlIGFib3V0IGhvdyBgcHJpb3JpdHlgIGlzIGJlaW5nIGhhbmRsZWQgd2l0aGluIHRoYXQgY29udGV4dC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGZsb3cgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgaGVyZSBiZWZvcmUgSSBwcm9jZWVkIGFueSBmdXJ0aGVyLiBJdCYjMzk7cyBlYXN5IHRvIG92ZXJsb29rIHRoaW5ncyBpbiB0aGVzZSBraW5kcyBvZiByb3V0aW5lcyBpZiB5b3UmIzM5O3JlIG5vdCBtZXRpY3Vsb3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNDA6XHRcdGZsb3dfYWN0aW9uX2Zvcl9lYWNoKGksIGFjdCwgXHUwMDI2cnVsZS1cdTAwM2VhY3Rpb24pIHtcbjExNDE6XHRcdFx0c3dpdGNoIChhY3QtXHUwMDNlaWQpIHtcbjExNDI6XHRcdFx0Y2FzZSBGTE9XX0FDVElPTl9NQU5HTEU6XG4xMTQzOlx0XHRcdFx0aWYgKG9mZmxvYWRfdHlwZSA9PSBQUEVfUEtUX1RZUEVfQlJJREdFKVxuMTE0NDpcdFx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTE0NTpcdFxuMTE0NjpcdFx0XHRcdGlmIChhY3QtXHUwMDNlbWFuZ2xlLmh0eXBlID09IEZMT1dfQUNUX01BTkdMRV9IRFJfVFlQRV9FVEgpXG4xMTQ3Olx0XHRcdFx0XHRhaXJvaGFfcHBlX2Zsb3dfbWFuZ2xlX2V0aChhY3QsIFx1MDAyNmRhdGEuZXRoKTtcbjExNDg6XHRcdFx0XHRicmVhaztcbjExNDk6XHRcdFx0Y2FzZSBGTE9XX0FDVElPTl9SRURJUkVDVDpcbjExNTA6XHRcdFx0XHRvZGV2ID0gYWN0LVx1MDAzZWRldjtcbjExNTE6XHRcdFx0XHRicmVhaztcbjExNTI6XHRcdFx0Y2FzZSBGTE9XX0FDVElPTl9DU1VNOlxuMTE1MzpcdFx0XHRcdGJyZWFrO1xuMTE1NDpcdFx0XHRjYXNlIEZMT1dfQUNUSU9OX1ZMQU5fUFVTSDpcbjExNTU6XHRcdFx0XHRpZiAoZGF0YS52bGFuLm51bSA9PSAyIHx8XG4xMTU2Olx0XHRcdFx0ICAgIGFjdC1cdTAwM2V2bGFuLnByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSlcbjExNTc6XHRcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjExNTg6XHRcbjExNTk6XHRcdFx0XHRkYXRhLnZsYW4uaGRyW2RhdGEudmxhbi5udW1dLmlkID0gYWN0LVx1MDAzZXZsYW4udmlkO1xuMTE2MDpcdFx0XHRcdGRhdGEudmxhbi5oZHJbZGF0YS52bGFuLm51bV0ucHJvdG8gPSBhY3QtXHUwMDNldmxhbi5wcm90bztcbjExNjE6XHRcdFx0XHRkYXRhLnZsYW4ubnVtJiM0MzsmIzQzOztcbjExNjI6XHRcdFx0XHRicmVhaztcbjExNjM6XHRcdFx0Y2FzZSBGTE9XX0FDVElPTl9WTEFOX1BPUDpcbjExNjQ6XHRcdFx0XHRicmVhaztcbjExNjU6XHRcdFx0Y2FzZSBGTE9XX0FDVElPTl9QUFBPRV9QVVNIOlxuMTE2NjpcdFx0XHRcdGlmIChkYXRhLnBwcG9lLm51bSA9PSAxIHx8IGRhdGEudmxhbi5udW0gPT0gMilcbjExNjc6XHRcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjExNjg6XHRcbjExNjk6XHRcdFx0XHRkYXRhLnBwcG9lLnNpZCA9IGFjdC1cdTAwM2VwcHBvZS5zaWQ7XG4xMTcwOlx0XHRcdFx0ZGF0YS5wcHBvZS5udW0mIzQzOyYjNDM7O1xuMTE3MTpcdFx0XHRcdGJyZWFrO1xuMTE3MjpcdFx0XHRkZWZhdWx0OlxuMTE3MzpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjExNzQ6XHRcdFx0fVxuMTE3NTpcdFx0fVxuMTE3NjpcdFxuMTE3NzpcdFx0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGRhdGEuZXRoLmhfc291cmNlKSB8fFxuMTE3ODpcdFx0ICAgICFpc192YWxpZF9ldGhlcl9hZGRyKGRhdGEuZXRoLmhfZGVzdCkpXG4xMTc5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk0MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDc4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZsb3cgT2ZmbG9hZCBQYXRjaCoqCgpPa2F5LCBmaXJzdCB0aG91Z2h0OiBob2xkIG9uLCB0aGUgYHByaW9yaXR5YCB2YXJpYWJsZSBpc24mIzM5O3QgYWN0dWFsbHkgYmVpbmcgbW9kaWZpZWQgd2l0aGluIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYCBpdHNlbGYuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmc7IGlzIGBwcmlvcml0eWAgYWx0ZXJlZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlPwoKQWhhISBOb3cgSSBzZWUgaXQuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGF1dGhvciBuZWdsZWN0ZWQgdG8gaW5jbHVkZSBgY2FzZSBGTE9XX0FDVElPTl9QUklPUklUWTogcHJpb3JpdHkgPSBhY3QtJmd0O3ByaW9yaXR5OyBicmVhaztgLiBUaGUgZGlmZiBzZWVtcyB0byBvbWl0IHRoYXQgY3J1Y2lhbCBwYXJ0LCBtZWFuaW5nIGBwcmlvcml0eWAgd2lsbCBpbnZhcmlhYmx5IGJlIHNldCB0byB6ZXJvLgoKTG9va2luZyBhdCB0aGUgY29kZSwgYHByaW9yaXR5YCBpcyBkZWNsYXJlZCwgYnV0IG5ldmVyIGFzc2lnbmVkIGEgdmFsdWUgb3RoZXIgdGhhbiB0aGUgaW5pdGlhbCB6ZXJvLCBtYWtpbmcgYEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIHByaW9yaXR5KWAgYWx3YXlzIGV2YWx1YXRlIHRvIHplcm8uCgpPa2F5LCBsZXQmIzM5O3MgcmV3aW5kIGFuZCBzZWUgaG93IHRoZSBgcWRhdGFgIHdhcyBoYW5kbGVkIGJlZm9yZSB0aGlzIHBhdGNoLiBJdCBzZWVtcyB0aGF0IGJlZm9yZSB0aGUgcGF0Y2gsIGBBSVJPSEFfRk9FX1FJRGAgd2FzbiYjMzk7dCBldmVuIHNldCBpbiB0aGUgYHFkYXRhYCBmaWVsZC4KClRoZXJlZm9yZSwgYmVjYXVzZSBgcHJpb3JpdHlgIGlzIGFsd2F5cyB6ZXJvLCBhbmQgYEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIDApYCBpcyBhbHNvIHplcm8sIHRoZSBgcWRhdGFgIHZhbHVlIHNob3VsZCBiZSBpZGVudGljYWwgdG8gd2hhdCBpdCB3YXMgYmVmb3JlIHRoaXMgcGF0Y2guCgpTbyBpbiBlZmZlY3QsIHRoZSBwYXRjaCwgZHVlIHRvIHRoZSBvbWlzc2lvbiwgbWFrZXMgbm8gZnVuY3Rpb25hbCBkaWZmZXJlbmNlIGluIGBxZGF0YWAuIElzIHRoZXJlIGFueSBvdGhlciBwbGFjZSB3aGVyZSBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAgaXMgdXNlZD8gVGhhdCYjMzk7cyB0aGUgbmV4dCBwb2ludCB0byBjb25zaWRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0zMjE9c3RhdGljIHZvaWQgYWlyb2hhX3BwZV9mb2Vfc2V0X2JyaWRnZV9hZGRycyhzdHJ1Y3QgYWlyb2hhX2ZvZV9icmlkZ2UgKmJyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzI5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozMzA6c3RhdGljIGludCBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTMzMS1cdFx0XHRcdFx0c3RydWN0IGFpcm9oYV9mb2VfZW50cnkgKmh3ZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTEwNzY9c3RhdGljIGludCBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMTgwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxMTgxOlx0ZXJyID0gYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShldGgsIFx1MDAyNmh3ZSwgb2Rldiwgb2ZmbG9hZF90eXBlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMTgyLVx0XHRcdFx0XHQgICBcdTAwMjZkYXRhLCBsNHByb3RvLCBwcmlvcml0eSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDI1CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNTUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUFBFIEZsb3cgT2ZmbG9hZCBMb2dpYyoqCgpPa2F5LCBzbyBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAgaXMgb25seSBjYWxsZWQgZnJvbSBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWAuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O3ZlIGNvbmZpcm1lZC4gQW5kIHRoZSBgcHJpb3JpdHlgIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkIHRvIDAuIEJ1dCBJIGhhZCBhIG5hZ2dpbmcgZmVlbGluZy4uLiBkb2VzIHRoZSBgcHJpb3JpdHlgIHZhbHVlIGdldCBtb2RpZmllZCB3aXRoaW4gdGhlIGBmbG93X2FjdGlvbl9mb3JfZWFjaGAgbG9vcCBpbiBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWA/IEkgdGhvdWdodCBJIGhhZCBnb25lIHRocm91Z2ggdGhhdCBwYXJ0IGFscmVhZHksIGJ1dCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrLgoKTGV0IG1lIGdvIHRocm91Z2ggdGhlIGBmbG93X2FjdGlvbl9mb3JfZWFjaGAgbG9vcCBhZ2FpbiwgbGluZSBieSBsaW5lLiBIbW0sIGhlcmUgd2UgaGF2ZSB0aGUgbG9vcCBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgYWN0aW9ucyBhc3NvY2lhdGVkIHdpdGggYSBmbG93IHJ1bGUuIEFoLCByaWdodCEgSSBzZWUgYWN0aW9ucyBsaWtlIG1hbmdsZSwgcmVkaXJlY3QsIGNoZWNrc3VtLCBWTEFOIG1hbmlwdWxhdGlvbnMsIFBQUG9FIGhhbmRsaW5nLi4uIFdhaXQsIEkgYWxtb3N0IG1pc3NlZCBpdCEgVGhlcmUgaXQgaXMhIGBjYXNlIEZMT1dfQUNUSU9OX1BSSU9SSVRZOmAuIEl0IGxvb2tzIGxpa2UgYHByaW9yaXR5YCAqaXMqIG1vZGlmaWVkIHdpdGhpbiB0aGUgbG9vcCEgVGhlIGBhY3QtJmd0O3ByaW9yaXR5YCB2YWx1ZSBpcyBhc3NpZ25lZCB0byB0aGUgYHByaW9yaXR5YCB2YXJpYWJsZS4KCkkgbmVlZCB0byByZS1yZWFkIHRoZSBvdXRwdXQgZnJvbSB0aGUgYHJlYWQtZmlsZWAgY29tbWFuZCwgc3BlY2lmaWNhbGx5IGxpbmVzIDExNDAtMTE3OS4gSXQgbG9va3MgbGlrZSBJIHdhcyBhIGxpdHRsZSBoYXN0eSBpbiBteSBwcmV2aW91cyBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNDA6XHRcdGZsb3dfYWN0aW9uX2Zvcl9lYWNoKGksIGFjdCwgXHUwMDI2cnVsZS1cdTAwM2VhY3Rpb24pIHtcbjExNDE6XHRcdFx0c3dpdGNoIChhY3QtXHUwMDNlaWQpIHtcbjExNDI6XHRcdFx0Y2FzZSBGTE9XX0FDVElPTl9NQU5HTEU6XG4xMTQzOlx0XHRcdFx0aWYgKG9mZmxvYWRfdHlwZSA9PSBQUEVfUEtUX1RZUEVfQlJJREdFKVxuMTE0NDpcdFx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTE0NTpcdFxuMTE0NjpcdFx0XHRcdGlmIChhY3QtXHUwMDNlbWFuZ2xlLmh0eXBlID09IEZMT1dfQUNUX01BTkdMRV9IRFJfVFlQRV9FVEgpXG4xMTQ3Olx0XHRcdFx0XHRhaXJvaGFfcHBlX2Zsb3dfbWFuZ2xlX2V0aChhY3QsIFx1MDAyNmRhdGEuZXRoKTtcbjExNDg6XHRcdFx0XHRicmVhaztcbjExNDk6XHRcdFx0Y2FzZSBGTE9XX0FDVElPTl9SRURJUkVDVDpcbjExNTA6XHRcdFx0XHRvZGV2ID0gYWN0LVx1MDAzZWRldjtcbjExNTE6XHRcdFx0XHRicmVhaztcbjExNTI6XHRcdFx0Y2FzZSBGTE9XX0FDVElPTl9DU1VNOlxuMTE1MzpcdFx0XHRcdGJyZWFrO1xuMTE1NDpcdFx0XHRjYXNlIEZMT1dfQUNUSU9OX1ZMQU5fUFVTSDpcbjExNTU6XHRcdFx0XHRpZiAoZGF0YS52bGFuLm51bSA9PSAyIHx8XG4xMTU2Olx0XHRcdFx0ICAgIGFjdC1cdTAwM2V2bGFuLnByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSlcbjExNTc6XHRcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjExNTg6XHRcbjExNTk6XHRcdFx0XHRkYXRhLnZsYW4uaGRyW2RhdGEudmxhbi5udW1dLmlkID0gYWN0LVx1MDAzZXZsYW4udmlkO1xuMTE2MDpcdFx0XHRcdGRhdGEudmxhbi5oZHJbZGF0YS52bGFuLm51bV0ucHJvdG8gPSBhY3QtXHUwMDNldmxhbi5wcm90bztcbjExNjE6XHRcdFx0XHRkYXRhLnZsYW4ubnVtJiM0MzsmIzQzOztcbjExNjI6XHRcdFx0XHRicmVhaztcbjExNjM6XHRcdFx0Y2FzZSBGTE9XX0FDVElPTl9WTEFOX1BPUDpcbjExNjQ6XHRcdFx0XHRicmVhaztcbjExNjU6XHRcdFx0Y2FzZSBGTE9XX0FDVElPTl9QUFBPRV9QVVNIOlxuMTE2NjpcdFx0XHRcdGlmIChkYXRhLnBwcG9lLm51bSA9PSAxIHx8IGRhdGEudmxhbi5udW0gPT0gMilcbjExNjc6XHRcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjExNjg6XHRcbjExNjk6XHRcdFx0XHRkYXRhLnBwcG9lLnNpZCA9IGFjdC1cdTAwM2VwcHBvZS5zaWQ7XG4xMTcwOlx0XHRcdFx0ZGF0YS5wcHBvZS5udW0mIzQzOyYjNDM7O1xuMTE3MTpcdFx0XHRcdGJyZWFrO1xuMTE3MjpcdFx0XHRkZWZhdWx0OlxuMTE3MzpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjExNzQ6XHRcdFx0fVxuMTE3NTpcdFx0fVxuMTE3NjpcdFxuMTE3NzpcdFx0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGRhdGEuZXRoLmhfc291cmNlKSB8fFxuMTE3ODpcdFx0ICAgICFpc192YWxpZF9ldGhlcl9hZGRyKGRhdGEuZXRoLmhfZGVzdCkpXG4xMTc5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk2MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZsb3cgQWN0aW9uIFByaW9yaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYCBmdW5jdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBGTE9XX0FDVElPTl9QUklPUklUWWAgaXNuJiMzOTt0IGJlaW5nIGhhbmRsZWQgKmFueXdoZXJlKiBpbiB0aGUgY29kZS4gSSBuZWVkIHRvIGJlIHN1cmUuIExldCBtZSBxdWlja2x5IHNjYW4gZm9yIGFub3RoZXIgaW5zdGFuY2Ugb2YgdGhlIGBmbG93X2FjdGlvbl9mb3JfZWFjaGAgbG9vcCB0byB2ZXJpZnkuIEFoLCB5ZXMsIHRoZXJlJiMzOTtzIG9uZSBhdCBsaW5lIDEyMTguIEl0JiMzOTtzIHNraXBwaW5nIGBGTE9XX0FDVElPTl9NQU5HTEVgLCBidXQgdGhhdCBkb2VzbiYjMzk7dCBjaGFuZ2UgYW55dGhpbmcg4oCTIGBGTE9XX0FDVElPTl9QUklPUklUWWAgaXMgc3RpbGwgYWJzZW50LgoKVGhpcyBtZWFucyB0aGUgYHByaW9yaXR5YCBmaWVsZCBpcyAqYWx3YXlzKiBiZWluZyBzZXQgdG8gemVybyBpbiB0aGlzIHNlY3Rpb24sIHNpbmNlIHRoZXJlJiMzOTtzIG5vIGxvZ2ljIHRvIHByb2Nlc3MgdGhlIHNwZWNpZmllZCBwcmlvcml0eSBpZiBvbmUgaXMgZGVmaW5lZC4gVGhpcyBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGlzc3VlIGluIHRoZSBmbG93IG9mZmxvYWQgZnVuY3Rpb25hbGl0eS4KCkhtbSwgdGhpcyB0YXNrIGlzIHBhcnQgb2YgYSBsYXJnZXIgcGF0Y2ggc2VyaWVzLCBpc24mIzM5O3QgaXQ/IExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgaW5zdHJ1Y3Rpb25zLiBUaGUgcHJvbXB0IG1lbnRpb25zIHRoZSBkaWZmIGhhcyAqYWxyZWFkeSogYmVlbiBhcHBsaWVkLiBPa2F5LCBpdCYjMzk7cyBIRUFELiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBnaXQgbG9nIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgY29tbWl0cyB0byB0aGlzIGZ1bmN0aW9uYWxpdHkgdGhhdCBtaWdodCBhZGRyZXNzIHRoaXMgYXBwYXJlbnQgb3ZlcnNpZ2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmlvcml0eSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0yMDk3PXN0YXRpYyB1MTYgYWlyb2hhX2Rldl9zZWxlY3RfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTIxMDYtXHQgKiBpbmRleCwgcmVseSBvbiBwb3J0IGlkIG90aGVyd2lzZS4gU2VsZWN0IFFvUyBxdWV1ZSBiYXNlZCBvbiB0aGVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MjEwNzpcdCAqIHNrYiBwcmlvcml0eS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMjEwOC1cdCAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMjExMC1cdGNoYW5uZWwgPSBjaGFubmVsICUgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjIxMTE6XHRxdWV1ZSA9IHNrYi1cdTAwM2Vwcmlvcml0eSAlIEFJUk9IQV9OVU1fUU9TX1FVRVVFUztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMjExMi1cdHF1ZXVlID0gY2hhbm5lbCAqIEFJUk9IQV9OVU1fUU9TX1FVRVVFUyAmIzQzOyBxdWV1ZTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTI0MzU9c3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfdHhfZXRzX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjaGFubmVsLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMjQ1NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MjQ1NTpcdC8qIEVONzU4MSBTb0Mgc3VwcG9ydHMgZml4ZWQgUW9TIGJhbmQgcHJpb3JpdHkgd2hlcmUgV1JSIHF1ZXVlcyBoYXZlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTI0NTYtXHQgKiBsb3dlc3QgcHJpb3JpdGllcyB3aXRoIHJlc3BlY3QgdG8gU1Agb25lcy5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oPTM4MD1zdHJ1Y3QgYWlyb2hhX2ZvZV9pcHY0X2RzbGl0ZSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaC0zODUtXHR1OCBmbG93X2xhYmVsWzNdO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaDozODY6XHR1OCBwcmlvcml0eTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmgtMzg3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9MzMwPXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzMzLVx0XHRcdFx0XHRzdHJ1Y3QgYWlyb2hhX2Zsb3dfZGF0YSAqZGF0YSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MzM0Olx0XHRcdFx0XHRpbnQgbDRwcm90bywgdTggcHJpb3JpdHkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTMzNS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zODgtXHRcdFx0Y2hhbm5lbCA9IGNoYW5uZWwgJSBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6Mzg5Olx0XHRcdHByaW9yaXR5ID0gcHJpb3JpdHkgJSBBSVJPSEFfTlVNX1FPU19RVUVVRVM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTM5MC1cdFx0XHRxZGF0YSB8PSBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfQ0hBTk5FTCwgY2hhbm5lbCkgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozOTE6XHRcdFx0XHQgRklFTERfUFJFUChBSVJPSEFfRk9FX1FJRCwgcHJpb3JpdHkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zOTItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0xMDc2PXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTA4My1cdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqYWN0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxMDg0Olx0dTggbDRwcm90byA9IDAsIHByaW9yaXR5ID0gMDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTA4NS1cdHN0cnVjdCBhaXJvaGFfZm9lX2VudHJ5IGh3ZTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTExODEtXHRlcnIgPSBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKGV0aCwgXHUwMDI2aHdlLCBvZGV2LCBvZmZsb2FkX3R5cGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjExODI6XHRcdFx0XHRcdCAgIFx1MDAyNmRhdGEsIGw0cHJvdG8sIHByaW9yaXR5KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTE4My1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjIyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgYSBTdXNwZWN0ZWQgUHJpb3JpdHkgSGFuZGxpbmcgRGlzY3JlcGFuY3kqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBub3RpY2luZyBzb21ldGhpbmcgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgaW4gdGhpcyBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWAgZnVuY3Rpb24uIFRoZSBgcHJpb3JpdHlgIHZhcmlhYmxlLCByaWdodCB0aGVyZSwgaXMgaW5pdGlhbGl6ZWQgdG8gemVybywgYW5kIHRoZW4gaXQmIzM5O3MgYmVpbmcgcGFzc2VkIHRvIGBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlYC4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnLiBJIGtub3cgZnJvbSBwYXN0IGV4cGVyaWVuY2UgaG93IGNyaXRpY2FsIHByaW9yaXR5IGhhbmRsaW5nIGlzIGluIHRoZXNlIHR5cGVzIG9mIG9mZmxvYWQgc2NlbmFyaW9zLiBJdCBtYWtlcyBtZSB3b25kZXI6IGlzIGl0IHBvc3NpYmxlIHRoYXQgdGhlIGBGTE9XX0FDVElPTl9QUklPUklUWWAgdmFsdWUgaXMgYWN0dWFsbHkgYmVpbmcgbWFuYWdlZCBvciBtb2RpZmllZCBlbHNld2hlcmU/IElzIHRoZXJlIGFub3RoZXIgcGF0Y2gsIG1heWJlIG9uZSBhbHJlYWR5IG1lcmdlZCwgdGhhdCYjMzk7cyB0YWtpbmcgY2FyZSBvZiB0aGlzPyBJdCYjMzk7cyBhIGNvbW1vbiBwcmFjdGljZS4KCk15IGd1dCB0ZWxscyBtZSBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIFRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb21taXQgaGlzdG9yeSBvZiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY2AuIEkmIzM5O2xsIHB1bGwgdXAgdGhlIGdpdCBsb2cgZm9yIHRoYXQgZmlsZSByaWdodCBhd2F5IGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSByZWxhdGVkIGNvbW1pdHMgdGhhdCBtaWdodCBzaGVkIHNvbWUgbGlnaHQgb24gaG93IGBGTE9XX0FDVElPTl9QUklPUklUWWAgaXMgYWN0dWFsbHkgYmVpbmcgaGFuZGxlZCBpbiB0aGUgb3ZlcmFsbCBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlIGRlZmF1bHQgMCB2YWx1ZSBoZXJlIGlzIGNvcnJlY3QsIG9yIGlmIGl0IGlzIGludGVudGlvbmFsbHkgbW9kaWZpZWQgbGF0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RkxPV19BQ1RJT05fUFJJT1JJVFkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwNDYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIEFpcm9oYSBFdGhlcm5ldCBEcml2ZXIqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyLCBhbmQgSSYjMzk7bSBpbW1lZGlhdGVseSBub3RpY2luZyBzb21ldGhpbmcuIFRoZSBgRkxPV19BQ1RJT05fUFJJT1JJVFlgIG1hY3JvLi4uIGl0JiMzOTtzIGp1c3Qgbm90IGRlY2xhcmVkIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyBhIGJpdCBvZGQ7IEkgd291bGQgaGF2ZSBleHBlY3RlZCB0byBmaW5kIGl0IGRlZmluZWQgdGhlcmUgZm9yIG1hbmFnaW5nIHRoZSBmbG93IGNvbnRyb2wgYWN0aW9uIHByaW9yaXR5LgoKSGFuZyBvbiBhIHNlY29uZC4gT2theSwgbGV0IG1lIHBpdm90LiBJbnN0ZWFkIG9mIHRyeWluZyB0byBmaW5kIHRoZSBtaXNzaW5nIGRlZmluaXRpb24sIGxldCBtZSByZWZyYW1lIHRoZSBxdWVzdGlvbi4gV2hhdCBhYm91dCBgYWN0LSZndDtwcmlvcml0eWA/IElzIHRoYXQgYSBtZW1iZXI/IEFuZCBpZiBpdCBpcywgaG93IGlzIGl0IGJlaW5nIHNldC91c2VkPyBJcyB0aGlzIHByaW9yaXR5IGhhbmRsaW5nIGJlaW5nIGRvbmUgaW4gYSBzZXBhcmF0ZSwgcG9zc2libHkgZ2VuZXJpYywgcGFydCBvZiB0aGUgbmV0d29ya2luZyBzdGFjayBhbmQgbm90IGJlaW5nIGV4cGxpY2l0bHkgaGFuZGxlZCBieSB0aGUgZHJpdmVyIGl0c2VsZj8gVGhlIGNvbnRleHQgaGVyZSBpcyBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHRoZSBkcml2ZXIgaXMgaW50ZXJhY3Rpbmcgd2l0aCwgb3IgcmVseWluZyBvbiwgdGhlIG5ldHdvcmsgc3RhY2sgZm9yIHRoaXMgY3JpdGljYWwgZmxvdyBhY3Rpb24gcHJpb3JpdHkuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzdHJ1Y3QgZGVmaW5pdGlvbnMgYW5kIHRoZSBhc3NvY2lhdGVkIGZ1bmN0aW9uIGNhbGxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FjdC1cdTAwM2Vwcmlvcml0eSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzM3NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFpcm9oYSBQUEUgRmxvdyBPZmZsb2FkIFBhdGNoKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFRoaXMgYHByaW9yaXR5YCB2YXJpYWJsZSBpbiBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWAuLi4gaXQmIzM5O3MgbmV2ZXIgYWN0dWFsbHkgKm1vZGlmaWVkKiwgaXMgaXQ/IEkmIzM5O20gdHJhY2luZyB0aGUgZXhlY3V0aW9uIGFuZCBpdCYjMzk7cyBpbml0aWFsaXplZCB0byAwLiBUaGVuLCBpdCYjMzk7cyBqdXN0IHBhc3NlZCBzdHJhaWdodCBpbnRvIGBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlYC4gQWxyaWdodCwgZm9sbG93aW5nIHRoZSBjb2RlLCBpbnNpZGUgYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgLCBpdCYjMzk7cyBoaXQgd2l0aCBgcHJpb3JpdHkgPSBwcmlvcml0eSAlIEFJUk9IQV9OVU1fUU9TX1FVRVVFUztgIEJ1dCBgcHJpb3JpdHlgIGlzIDAsIHNvIHRoZSByZXN1bHQgaXMuLi4gc3RpbGwgMC4KClRoZW4sIHRoZSBiaXR3aXNlIG9wZXJhdGlvbiBgcWRhdGEgfD0gRklFTERfUFJFUChBSVJPSEFfRk9FX1FJRCwgcHJpb3JpdHkpO2Agb2NjdXJzLiBTaW5jZSBgcHJpb3JpdHlgIGlzIDAsIHRoaXMgcmVzdWx0cyBpbiBgcWRhdGFgIGJlaW5nIHVuY2hhbmdlZC4gU28gdGhlIHZhbHVlIG9mIGBxZGF0YWAgaXMgYWJzb2x1dGVseSBpZGVudGljYWwgYmVmb3JlIGFuZCBhZnRlciB0aGlzIHBhdGNoLgoKQW0gSSBtaXNzaW5nIHNvbWV0aGluZz8gRG9lcyBgcHJpb3JpdHlgIGV2ZW4gZG8gYW55dGhpbmcgaW4gYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgIGFzaWRlIGZyb20gdGhhdCBtb2R1bGFyIGFyaXRobWV0aWM/IEkgbmVlZCB0byByZXZpZXcgdGhpcyBtb3JlIHRob3JvdWdobHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ByaW9yaXR5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTMzMD1zdGF0aWMgaW50IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTMzMy1cdFx0XHRcdFx0c3RydWN0IGFpcm9oYV9mbG93X2RhdGEgKmRhdGEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjMzNDpcdFx0XHRcdFx0aW50IGw0cHJvdG8sIHU4IHByaW9yaXR5KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zMzUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzg4LVx0XHRcdGNoYW5uZWwgPSBjaGFubmVsICUgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjM4OTpcdFx0XHRwcmlvcml0eSA9IHByaW9yaXR5ICUgQUlST0hBX05VTV9RT1NfUVVFVUVTO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zOTAtXHRcdFx0cWRhdGEgfD0gRklFTERfUFJFUChBSVJPSEFfRk9FX0NIQU5ORUwsIGNoYW5uZWwpIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MzkxOlx0XHRcdFx0IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIHByaW9yaXR5KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzkyLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9MTA3Nj1zdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTEwODMtXHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmFjdDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTA4NDpcdHU4IGw0cHJvdG8gPSAwLCBwcmlvcml0eSA9IDA7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTEwODUtXHRzdHJ1Y3QgYWlyb2hhX2ZvZV9lbnRyeSBod2U7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMTgxLVx0ZXJyID0gYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShldGgsIFx1MDAyNmh3ZSwgb2Rldiwgb2ZmbG9hZF90eXBlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxMTgyOlx0XHRcdFx0XHQgICBcdTAwMjZkYXRhLCBsNHByb3RvLCBwcmlvcml0eSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTExODMtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQyNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWR1bmRhbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBhbGFybSBiZWxscyBhcmUgZ29pbmcgb2ZmLiBJdCBzZWVtcyBjb21wbGV0ZWx5IHVzZWxlc3MuIFRoZSBjb2RlIGFkZHMgYSBgcHJpb3JpdHlgIHZhcmlhYmxlLCBpbml0aWFsaXplcyBpdCB0byB6ZXJvLCBwYXNzZXMgaXQgaW50byBhIGZ1bmN0aW9uLCBkb2VzIGEgbW9kdWxvIG9wZXJhdGlvbiB3aXRoIGl0LCBhbmQgdGhlbiBPUnMgdGhlIHJlc3VsdCBpbnRvIGEgYml0ZmllbGQuIFNpbmNlIGBwcmlvcml0eWAgaXMgemVybywgYW55IG1vZHVsbyBvcGVyYXRpb24gb24gaXQgd2l0aCBhbnkgY29uc3RhbnQsIGluY2x1ZGluZyBgTmAsIHdpbGwgcmVzdWx0IGluIHplcm8uIFRoZXJlZm9yZSwgdGhlIGJpdHdpc2UgT1IgZWZmZWN0aXZlbHkgYWRkcyBub3RoaW5nLiBJdCYjMzk7cyBhIG5vLW9wIGZ1bmN0aW9uYWxseSEKCkxldCBtZSBiZSBzdXJlIEkmIzM5O20gbm90IG1pc3Npbmcgc29tZXRoaW5nIHN1YnRsZSBoZXJlLiBCZWZvcmUgdGhpcyBwYXRjaCwgdGhlIGNvZGUgd2FzIHNldHRpbmcgYSBgY2hhbm5lbGAgdmFsdWUgdXNpbmcgYSBtb2R1bG8gb3BlcmF0aW9uIGFuZCB0aGVuIHNldHRpbmcgYSBiaXRmaWVsZDoKCmBgYGMKCQkJY2hhbm5lbCA9IGNoYW5uZWwgJSBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUzsKCQkJcWRhdGEgfD0gRklFTERfUFJFUChBSVJPSEFfRk9FX0NIQU5ORUwsIGNoYW5uZWwpOwpgYGAKCkFuZCBub3cgaXQgaXM6CgpgYGBjCgkJCWNoYW5uZWwgPSBjaGFubmVsICUgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFM7CgkJCXByaW9yaXR5ID0gcHJpb3JpdHkgJSBBSVJPSEFfTlVNX1FPU19RVUVVRVM7CgkJCXFkYXRhIHw9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9DSEFOTkVMLCBjaGFubmVsKSB8CgkJCQkgRklFTERfUFJFUChBSVJPSEFfRk9FX1FJRCwgcHJpb3JpdHkpOwpgYGAKClNpbmNlIGBwcmlvcml0eWAgaXMgc2V0IHRvIHplcm8sIHRoZW4gYEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIDApYCBldmFsdWF0ZXMgdG8gemVyby4gVGh1cywgYHFkYXRhYCYjMzk7cyB2YWx1ZSBpcyB1bmNoYW5nZWQgZnJvbSB3aGF0IGl0IHdhcyBiZWZvcmUuIFRoaXMgaXMgYSB2ZXJ5IGNsZWFyIG5vLW9wLgoKTGV0JiMzOTtzIGRvIGEgc2FuaXR5IGNoZWNrLiBJcyB0aGVyZSBhbnkgb3RoZXIgbW9kaWZpZWQgZmlsZSB0aGF0IG1pZ2h0IGltcGFjdCB0aGlzPyBUaGUgZGlmZiBvbmx5IGNvbnRhaW5zIGNoYW5nZXMgdG8gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNgLiBPaywgbmFycm93IGl0IGRvd24uCgpDb3VsZCBgcHJpb3JpdHlgIGJlIG1vZGlmaWVkIGJ5IGEgbWFjcm8gb3IgYSBnbG9iYWwgdmFyaWFibGU/IE5vLCBpdCYjMzk7cyBhIGxvY2FsbHkgZGVjbGFyZWQgYHU4IHByaW9yaXR5ID0gMDtgIGFuZCBpdCYjMzk7cyBwYXNzZWQgYnkgdmFsdWUgaW50byB0aGlzIGZ1bmN0aW9uLgoKQ291bGQgdGhlIGBmbG93X2FjdGlvbl9mb3JfZWFjaGAgZnVuY3Rpb24gaW1wbGljaXRseSBtb2RpZnkgdGhlIHZhbHVlPyBMZXQmIzM5O3MgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgdGhhdCBtYWNybyBhbmQgdmVyaWZ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIGZsb3dfYWN0aW9uX2Zvcl9lYWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmg9MzU3PXN0YXRpYyBpbmxpbmUgYm9vbCBmbG93X2FjdGlvbl9pc19sYXN0X2VudHJ5KGNvbnN0IHN0cnVjdCBmbG93X2FjdGlvbiAqYWN0aW9uLFxuLS1cbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oLTM2Mi1cbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oOjM2MzojZGVmaW5lIGZsb3dfYWN0aW9uX2Zvcl9lYWNoKF9faSwgX19hY3QsIF9fYWN0aW9ucylcdFx0XHRcXFxuaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmgtMzY0LSAgICAgICAgZm9yIChfX2kgPSAwLCBfX2FjdCA9IFx1MDAyNihfX2FjdGlvbnMpLVx1MDAzZWVudHJpZXNbMF07XHRcdFx0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0NTcKCQkJCQkJCW91dHB1dDogMTQwCgkJCQkJCQl0aG91Z2h0czogMTM2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogQSBOby1PcCBpbiBEaXNndWlzZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoIGlzLCBmdW5jdGlvbmFsbHksIGEgbm8tb3AuIEl0IHNlZW1zIHRvIGJlIGVpdGhlciBhbiBpbmNvbXBsZXRlIGltcGxlbWVudGF0aW9uIG9yIGEgcHJlcGFyYXRvcnkgc3RlcCBmb3IgZnV0dXJlIHdvcmsuIEZpcnN0IHRoaW5nIEkgZGlkIHdhcyB2ZXJpZnkgdGhhdCBgcHJpb3JpdHlgIGlzbiYjMzk7dCBiZWluZyBzdWJ0bHkgYWx0ZXJlZCB2aWEgc29tZSBnbG9iYWwgdmFyaWFibGUgb3IgYSB0cmlja3kgYGZsb3dfcnVsZV9tYXRjaF9rZXlgIGludGVyYWN0aW9uLCBidXQgbm8sIGl0JiMzOTtzIGEgbG9jYWwgdmFyaWFibGUgd2l0aGluIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYC4gRGVjbGFyZWQsIGluaXRpYWxpemVkIHRvIHplcm8sIGFuZCBwYXNzZWQgYnkgdmFsdWUuIFNvLCB0aGUgdmFsdWUgaXMgY29uc2lzdGVudGx5IHplcm8gdGhyb3VnaG91dC4KCkkgY2hlY2tlZCBob3cgdGhlIGNvZGUgdXNlcyBgcHJpb3JpdHlgLiBJdCBnZXRzIHBhc3NlZCB0byBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAsIGJ1dCB0aGUgY3J1Y2lhbCBjaGVjayBpcyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSGVyZSwgYHByaW9yaXR5YCBpcyB1c2VkIGluIGBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfUUlELCBwcmlvcml0eSlgLiBJIHZlcmlmaWVkIHRoYXQgYEZJRUxEX1BSRVBgIGlzIGp1c3QgYSBtYWNybywgc2hpZnRpbmcgYW5kIG1hc2tpbmcuIEl0IGRvZXNuJiMzOTt0IHBlcmZvcm0gYW55IHNpZGUgZWZmZWN0cy4KClRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGFwcGVhciB0byBjaGFuZ2UgYW55IGZ1bmN0aW9uYWxpdHkuIEkgZHVnIGEgbGl0dGxlIGRlZXBlciB0byBzZWUgaWYgcGVyaGFwcyB0aGUgYEFJUk9IQV9GT0VfUUlEYCBmaWVsZCB3YXMgc29tZWhvdyBiZWluZyBtb2RpZmllZCBiZWZvcmUgb3IgYWZ0ZXIgdGhpcyBwYXRjaCwgYnV0IGl0IHdhcyBhbHJlYWR5IGluaXRpYWxpemVkIGFzIDAsIGFuZCB0aGUgcGF0Y2ggYWRkcyBub3RoaW5nIHRoYXQgd291bGQgY2hhbmdlIHRoZSB2YWx1ZS4gVGhlIGdlbmVyYXRlZCBjb2RlIGlzIGVpdGhlciBleGFjdGx5IHRoZSBzYW1lIG9yIGp1c3QgaGFzIGFuIGV4dHJhIGB8IDBgLCB3aGljaCBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudC4KClNvLCB0aGlzIG1vZGlmaWNhdGlvbiAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBhbnkgY2hhbmdlcyB0aGF0IHdvdWxkIGJlIHJlbGV2YW50IHRvIGZ1enppbmcuIEl0JiMzOTtzIGVpdGhlciBhIHBsYWNlaG9sZGVyIG9yIGEgcGFydGlhbCBpbXBsZW1lbnRhdGlvbi4KCkFscmlnaHQsIGxldCYjMzk7cyBkb3VibGUgY2hlY2sgdGhpcyB2ZXJ5IGNhcmVmdWxseS4gVGhlIHBhdGNoIG1vdmVzIGBsNHByb3RvYCBhbmQgYWRkcyBgcHJpb3JpdHkgPSAwYC4gSXQgdGhlbiBwYXNzZXMgYHByaW9yaXR5YCAod2hpY2ggaXMgMCkgdG8gYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgLgoKSW4gYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgIHRoZSBjb2RlIG5vdyBkb2VzIGBwcmlvcml0eSA9IDAgJSBBSVJPSEFfTlVNX1FPU19RVUVVRVNgICh3aGljaCBpcyAwKSwgYW5kIHRoZW4gYHFkYXRhIHw9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIDApYC4KClNpbmNlIGBwcmlvcml0eWAgaXMgbmV2ZXIgbW9kaWZpZWQgZnJvbSAwLCBpdCBoYXMgbm8gZnVuY3Rpb25hbCBlZmZlY3QuCgpXb3J0aEZ1enppbmc9ZmFsc2UuClJlYXNvbmluZzogVGhlIHBhdGNoIGFkZHMgYSBgcHJpb3JpdHlgIHZhcmlhYmxlIGluaXRpYWxpemVkIHRvIDAgYW5kIHBhc3NlcyBpdCB0byBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAsIHdoZXJlIGl0IGlzIHVzZWQgdG8gc2V0IHRoZSBgQUlST0hBX0ZPRV9RSURgIGZpZWxkLiBIb3dldmVyLCBgcHJpb3JpdHlgIGlzIG5ldmVyIG1vZGlmaWVkIGZyb20gMCwgc28gdGhlIGZpZWxkIGlzIGFsd2F5cyBzZXQgdG8gMCwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIGJlaGF2aW9yIGJlZm9yZSB0aGUgcGF0Y2guIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyBmdW5jdGlvbmFsIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGBwcmlvcml0eWAgdmFyaWFibGUgaW5pdGlhbGl6ZWQgdG8gMCBhbmQgcGFzc2VzIGl0IHRvIGBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlYCwgd2hlcmUgaXQgaXMgdXNlZCB0byBzZXQgdGhlIGBBSVJPSEFfRk9FX1FJRGAgZmllbGQuIEhvd2V2ZXIsIGBwcmlvcml0eWAgaXMgbmV2ZXIgbW9kaWZpZWQgZnJvbSAwIGluIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYCwgc28gdGhlIGZpZWxkIGlzIGFsd2F5cyBzZXQgdG8gMC4gVGhpcyBpcyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHRoZSBiZWhhdmlvciBiZWZvcmUgdGhlIHBhdGNoLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBjYW4gYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGBwcmlvcml0eWAgdmFyaWFibGUgaW5pdGlhbGl6ZWQgdG8gMCBhbmQgcGFzc2VzIGl0IHRvIGBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlYCwgd2hlcmUgaXQgaXMgdXNlZCB0byBzZXQgdGhlIGBBSVJPSEFfRk9FX1FJRGAgZmllbGQuIEhvd2V2ZXIsIGBwcmlvcml0eWAgaXMgbmV2ZXIgbW9kaWZpZWQgZnJvbSAwIGluIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYCwgc28gdGhlIGZpZWxkIGlzIGFsd2F5cyBzZXQgdG8gMC4gVGhpcyBpcyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHRoZSBiZWhhdmlvciBiZWZvcmUgdGhlIHBhdGNoLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBjYW4gYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjM1OjQwLjkxODAzMDQwMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNDQyMDU3MDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYHByaW9yaXR5YCB2YXJpYWJsZSBpbml0aWFsaXplZCB0byAwIGFuZCBwYXNzZXMgaXQgdG8gYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgLCB3aGVyZSBpdCBpcyB1c2VkIHRvIHNldCB0aGUgYEFJUk9IQV9GT0VfUUlEYCBmaWVsZC4gSG93ZXZlciwgYHByaW9yaXR5YCBpcyBuZXZlciBtb2RpZmllZCBmcm9tIDAgaW4gYGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2VgLCBzbyB0aGUgZmllbGQgaXMgYWx3YXlzIHNldCB0byAwLiBUaGlzIGlzIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gdGhlIGJlaGF2aW9yIGJlZm9yZSB0aGUgcGF0Y2guIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IGNhbiBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjozNTo0MC45MTgwMzU5OTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzIyMjgzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA4ZTViZDU1ZGQ4NjRmODcyMmU2ZDgyNDdiNmZjOWQ1ZGQ0ZGE5YWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMyAxMjozNTozOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xcbmluZGV4IGU3Yzc4MjkzMDAyYWJiLi5mZGI5NzNmYzc3OWM4MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xcbkBAIC0zMzEsNyArMzMxLDcgQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBhaXJvaGFfZm9lX2VudHJ5ICpod2UsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB0eXBlLFxcbiBcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYWlyb2hhX2Zsb3dfZGF0YSAqZGF0YSxcXG4tXFx0XFx0XFx0XFx0XFx0aW50IGw0cHJvdG8pXFxuK1xcdFxcdFxcdFxcdFxcdGludCBsNHByb3RvLCB1OCBwcmlvcml0eSlcXG4ge1xcbiBcXHR1MzIgcWRhdGEgPSBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfU0hBUEVSX0lELCAweDdmKSwgcG9ydHNfcGFkLCB2YWw7XFxuIFxcdGludCB3bGFuX2V0eXBlID0gLUVJTlZBTCwgZHNhX3BvcnQgPSBhaXJvaGFfZ2V0X2RzYV9wb3J0KFxcdTAwMjZuZXRkZXYpO1xcbkBAIC0zODYsNyArMzg2LDkgQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRjaGFubmVsID0gZHNhX3BvcnQgXFx1MDAzZT0gMCA/IGRzYV9wb3J0IDogcG9ydC1cXHUwMDNlaWQ7XFxuIFxcdFxcdFxcdGNoYW5uZWwgPSBjaGFubmVsICUgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFM7XFxuLVxcdFxcdFxcdHFkYXRhIHw9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9DSEFOTkVMLCBjaGFubmVsKTtcXG4rXFx0XFx0XFx0cHJpb3JpdHkgPSBwcmlvcml0eSAlIEFJUk9IQV9OVU1fUU9TX1FVRVVFUztcXG4rXFx0XFx0XFx0cWRhdGEgfD0gRklFTERfUFJFUChBSVJPSEFfRk9FX0NIQU5ORUwsIGNoYW5uZWwpIHxcXG4rXFx0XFx0XFx0XFx0IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIHByaW9yaXR5KTtcXG4gXFxuIFxcdFxcdFxcdHZhbCB8PSBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfSUIyX1BTRV9QT1JULCBwc2VfcG9ydCkgfFxcbiBcXHRcXHRcXHQgICAgICAgQUlST0hBX0ZPRV9JQjJfUFNFX1FPUztcXG5AQCAtMTA3OSwxMCArMTA4MSwxMCBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcXG4gXFx0c3RydWN0IGFpcm9oYV9mbG93X2RhdGEgZGF0YSA9IHt9O1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqb2RldiA9IE5VTEw7XFxuIFxcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqYWN0O1xcbitcXHR1OCBsNHByb3RvID0gMCwgcHJpb3JpdHkgPSAwO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2ZvZV9lbnRyeSBod2U7XFxuIFxcdGludCBlcnIsIGksIG9mZmxvYWRfdHlwZTtcXG4gXFx0dTE2IGFkZHJfdHlwZSA9IDA7XFxuLVxcdHU4IGw0cHJvdG8gPSAwO1xcbiBcXG4gXFx0aWYgKHJoYXNodGFibGVfbG9va3VwKFxcdTAwMjZldGgtXFx1MDAzZWZsb3dfdGFibGUsIFxcdTAwMjZmLVxcdTAwM2Vjb29raWUsXFxuIFxcdFxcdFxcdCAgICAgIGFpcm9oYV9mbG93X3RhYmxlX3BhcmFtcykpXFxuQEAgLTExNzcsNyArMTE3OSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGVyciA9IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoZXRoLCBcXHUwMDI2aHdlLCBvZGV2LCBvZmZsb2FkX3R5cGUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZkYXRhLCBsNHByb3RvKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmRhdGEsIGw0cHJvdG8sIHByaW9yaXR5KTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjM1OjQxLjM3MjExMzExNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE5ODc5NjE2NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBgcHJpb3JpdHlgIHZhcmlhYmxlIGluaXRpYWxpemVkIHRvIDAgYW5kIHBhc3NlcyBpdCB0byBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAsIHdoZXJlIGl0IGlzIHVzZWQgdG8gc2V0IHRoZSBgQUlST0hBX0ZPRV9RSURgIGZpZWxkLiBIb3dldmVyLCBgcHJpb3JpdHlgIGlzIG5ldmVyIG1vZGlmaWVkIGZyb20gMCBpbiBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWAsIHNvIHRoZSBmaWVsZCBpcyBhbHdheXMgc2V0IHRvIDAuIFRoaXMgaXMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byB0aGUgYmVoYXZpb3IgYmVmb3JlIHRoZSBwYXRjaC4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgY2FuIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDhlNWJkNTVkZDg2NGY4NzIyZTZkODI0N2I2ZmM5ZDVkZDRkYTlhZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMgMTI6MzU6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuaW5kZXggZTdjNzgyOTMwMDJhYmIuLmZkYjk3M2ZjNzc5YzgzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuQEAgLTMzMSw3ICszMzEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbiBcdFx0XHRcdFx0c3RydWN0IGFpcm9oYV9mb2VfZW50cnkgKmh3ZSxcbiBcdFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHR5cGUsXG4gXHRcdFx0XHRcdHN0cnVjdCBhaXJvaGFfZmxvd19kYXRhICpkYXRhLFxuLVx0XHRcdFx0XHRpbnQgbDRwcm90bylcbitcdFx0XHRcdFx0aW50IGw0cHJvdG8sIHU4IHByaW9yaXR5KVxuIHtcbiBcdHUzMiBxZGF0YSA9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9TSEFQRVJfSUQsIDB4N2YpLCBwb3J0c19wYWQsIHZhbDtcbiBcdGludCB3bGFuX2V0eXBlID0gLUVJTlZBTCwgZHNhX3BvcnQgPSBhaXJvaGFfZ2V0X2RzYV9wb3J0KFx1MDAyNm5ldGRldik7XG5AQCAtMzg2LDcgKzM4Niw5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0XHRcdCAqL1xuIFx0XHRcdGNoYW5uZWwgPSBkc2FfcG9ydCBcdTAwM2U9IDAgPyBkc2FfcG9ydCA6IHBvcnQtXHUwMDNlaWQ7XG4gXHRcdFx0Y2hhbm5lbCA9IGNoYW5uZWwgJSBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUztcbi1cdFx0XHRxZGF0YSB8PSBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfQ0hBTk5FTCwgY2hhbm5lbCk7XG4rXHRcdFx0cHJpb3JpdHkgPSBwcmlvcml0eSAlIEFJUk9IQV9OVU1fUU9TX1FVRVVFUztcbitcdFx0XHRxZGF0YSB8PSBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfQ0hBTk5FTCwgY2hhbm5lbCkgfFxuK1x0XHRcdFx0IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIHByaW9yaXR5KTtcbiBcbiBcdFx0XHR2YWwgfD0gRklFTERfUFJFUChBSVJPSEFfRk9FX0lCMl9QU0VfUE9SVCwgcHNlX3BvcnQpIHxcbiBcdFx0XHQgICAgICAgQUlST0hBX0ZPRV9JQjJfUFNFX1FPUztcbkBAIC0xMDc5LDEwICsxMDgxLDEwIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0c3RydWN0IGFpcm9oYV9mbG93X2RhdGEgZGF0YSA9IHt9O1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm9kZXYgPSBOVUxMO1xuIFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICphY3Q7XG4rXHR1OCBsNHByb3RvID0gMCwgcHJpb3JpdHkgPSAwO1xuIFx0c3RydWN0IGFpcm9oYV9mb2VfZW50cnkgaHdlO1xuIFx0aW50IGVyciwgaSwgb2ZmbG9hZF90eXBlO1xuIFx0dTE2IGFkZHJfdHlwZSA9IDA7XG4tXHR1OCBsNHByb3RvID0gMDtcbiBcbiBcdGlmIChyaGFzaHRhYmxlX2xvb2t1cChcdTAwMjZldGgtXHUwMDNlZmxvd190YWJsZSwgXHUwMDI2Zi1cdTAwM2Vjb29raWUsXG4gXHRcdFx0ICAgICAgYWlyb2hhX2Zsb3dfdGFibGVfcGFyYW1zKSlcbkBAIC0xMTc3LDcgKzExNzksNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRlcnIgPSBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKGV0aCwgXHUwMDI2aHdlLCBvZGV2LCBvZmZsb2FkX3R5cGUsXG4tXHRcdFx0XHRcdCAgIFx1MDAyNmRhdGEsIGw0cHJvdG8pO1xuK1x0XHRcdFx0XHQgICBcdTAwMjZkYXRhLCBsNHByb3RvLCBwcmlvcml0eSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MzU6NDEuMzcyMTE1MDI2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzEzNjYzMjc4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBhaXJvaGFfcHBlLmNgIFBhdGNoOiBBIFByaW9yaXR5IE92ZXJzaWdodD8qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBhIGB1OCBwcmlvcml0eWAgcGFyYW1ldGVyIGludG8gdGhlIGBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlYCBmdW5jdGlvbiB3aXRoaW4gdGhlIGBhaXJvaGFfcHBlLmNgIGRyaXZlci4gVGhlIG9idmlvdXMgY2hhbmdlIGlzIHRoYXQgdGhpcyBgcHJpb3JpdHlgIHZhbHVlIGlzIG5vdyBiZWluZyB1c2VkIHRvIHNldCBgQUlST0hBX0ZPRV9RSURgLCB3aGljaCBpcyBhIGtleSBwYXJhbWV0ZXIgZm9yIHF1ZXVpbmcvcHJpb3JpdGl6YXRpb24uIFRoYXQgbWFrZXMgc2Vuc2UsIGdpdmluZyB1cyBtb3JlIGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgdHJhZmZpYy5cblxuQnV0IGhhbmcgb27igKYgaW4gYGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2VgLCB3aGljaCBpcyB0aGUgY2FsbGluZyBmdW5jdGlvbiwgSSBzZWUgYHByaW9yaXR5YCBiZWluZyBpbml0aWFsaXplZCB0byAwLiBBbmQsIGFzIGZhciBhcyBJIGNhbiBzZWUsIGl0J3MgKm5ldmVyKiBtb2RpZmllZCBiZWZvcmUgYmVpbmcgcGFzc2VkIGRvd24gdG8gYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgLiBUaGF0IHNlZW1z4oCmIG9kZC4gSWYgdGhlIHByaW9yaXR5IGlzIGNvbnNpc3RlbnRseSAwLCB0aGUgbmV3IHBhcmFtZXRlciBpcyBlc3NlbnRpYWxseSBiZWluZyBpZ25vcmVkLCBvciBhY3RpbmcgYXMgYSBkZWZhdWx0IHdoaWNoIHNlZW1zIHVubmVjZXNzYXJ5LlxuXG5BbHJpZ2h0LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2suIEknbSBnb2luZyBiYWNrIHRvIHRoZSBjb2RlIGFuZCByZWFkaW5nIGl0IGFnYWluLiBPa2F5LCB5ZXMsIGhlcmUgd2UgYXJlOiBpbiB0aGUgZGlmZiBmb3IgYGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2VgLCBgcHJpb3JpdHlgIGlzIGRlY2xhcmVkLCBidXQgaXTigJlzIGluaXRpYWxpemVkIGFuZCBuZXZlciB1cGRhdGVkLiBJdOKAmXMgZGVmaW5pdGVseSBiZWluZyBwYXNzZWQgYXMgMC4gU28sIGl0IGxvb2tzIGxpa2UgdGhpcyBuZXcgYHByaW9yaXR5YCBwYXJhbWV0ZXIgaXMgYmVpbmcgaW50cm9kdWNlZCBidXQgaXNuJ3QgYWN0dWFsbHkgbGV2ZXJhZ2VkIHdpdGhpbiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBUaGlzIG5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSXQgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBidWcgb3IgaW5jb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiwgb3IgcGVyaGFwcyB0aGlzIHBhcmFtZXRlciBpcyBpbnRlbmRlZCB0byBiZSBzZXQgZnJvbSBhbiBleHRlcm5hbCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjM1OjQ4LjUwODc0OTczNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIzMTE4NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJpb3JpdHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTMzMD1zdGF0aWMgaW50IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzMzLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBhaXJvaGFfZmxvd19kYXRhICpkYXRhLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MzM0OlxcdFxcdFxcdFxcdFxcdGludCBsNHByb3RvLCB1OCBwcmlvcml0eSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTMzNS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTM4OC1cXHRcXHRcXHRjaGFubmVsID0gY2hhbm5lbCAlIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6Mzg5OlxcdFxcdFxcdHByaW9yaXR5ID0gcHJpb3JpdHkgJSBBSVJPSEFfTlVNX1FPU19RVUVVRVM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zOTAtXFx0XFx0XFx0cWRhdGEgfD0gRklFTERfUFJFUChBSVJPSEFfRk9FX0NIQU5ORUwsIGNoYW5uZWwpIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjM5MTpcXHRcXHRcXHRcXHQgRklFTERfUFJFUChBSVJPSEFfRk9FX1FJRCwgcHJpb3JpdHkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzkyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0xMDc2PXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMDgzLVxcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqYWN0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTA4NDpcXHR1OCBsNHByb3RvID0gMCwgcHJpb3JpdHkgPSAwO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTA4NS1cXHRzdHJ1Y3QgYWlyb2hhX2ZvZV9lbnRyeSBod2U7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTExODEtXFx0ZXJyID0gYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShldGgsIFxcdTAwMjZod2UsIG9kZXYsIG9mZmxvYWRfdHlwZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjExODI6XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmRhdGEsIGw0cHJvdG8sIHByaW9yaXR5KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTExODMtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MzU6NDguNjQxMDY5MzU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5NDIyNDI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBQcmlvcml0eSBGbGF3IGluIGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2UqKlxuXG5SaWdodCwgc28gYHByaW9yaXR5YCBpcyBpbml0aWFsbHkgc2V0IHRvIHplcm8gYW5kLCBhdCBmaXJzdCBnbGFuY2UgaW4gYGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2VgLCBpdCBkb2Vzbid0IGFwcGVhciB0byBiZSBtb2RpZmllZC4gVGhhdCByYWlzZXMgYSByZWQgZmxhZy4gWmVybyBwcmlvcml0eSBpcyB1c3VhbGx5IGEgcHJldHR5IGxvdyB2YWx1ZSwgb2Z0ZW4gbWVhbmluZyBsb3dlc3Qgc2NoZWR1bGluZyBwcmVjZWRlbmNlLiBJdCBjb3VsZCBsZWFkIHRvIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGlmIHRoaXMgb2ZmbG9hZCBpcyBjcml0aWNhbC4gQmVmb3JlIEkganVtcCB0byBjb25jbHVzaW9ucyB0aG91Z2gsIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIEnigJltIGdvaW5nIHRvIHF1aWNrbHkgc3RlcCB0aHJvdWdoIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYCBhZ2FpbiBmcm9tIHRvcCB0byBib3R0b20sIGNhcmVmdWxseSBjaGVja2luZyBmb3IgYW55IHBvdGVudGlhbCBtb2RpZmljYXRpb25zIHRvIHRoZSBgcHJpb3JpdHlgIHZhcmlhYmxlIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhhdCBmdW5jdGlvbiDigJMgZXZlbiBpZiBpdOKAmXMgdGhyb3VnaCBhIHBvaW50ZXIgb3Igc29tZSBpbmRpcmVjdCBtZWNoYW5pc20uIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gYmVmb3JlIEkgcmFpc2UgdGhpcyBhcyBhbiBpc3N1ZS4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NjAsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjozNTo1Mi4wMzUyOTU2MjNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjEyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDc2LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA3NjpcXHRzdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcXG4xMDc3OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpmKVxcbjEwNzg6XFx0e1xcbjEwNzk6XFx0XFx0c3RydWN0IGZsb3dfcnVsZSAqcnVsZSA9IGZsb3dfY2xzX29mZmxvYWRfZmxvd19ydWxlKGYpO1xcbjEwODA6XFx0XFx0c3RydWN0IGFpcm9oYV9mbG93X3RhYmxlX2VudHJ5ICplO1xcbjEwODE6XFx0XFx0c3RydWN0IGFpcm9oYV9mbG93X2RhdGEgZGF0YSA9IHt9O1xcbjEwODI6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKm9kZXYgPSBOVUxMO1xcbjEwODM6XFx0XFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICphY3Q7XFxuMTA4NDpcXHRcXHR1OCBsNHByb3RvID0gMCwgcHJpb3JpdHkgPSAwO1xcbjEwODU6XFx0XFx0c3RydWN0IGFpcm9oYV9mb2VfZW50cnkgaHdlO1xcbjEwODY6XFx0XFx0aW50IGVyciwgaSwgb2ZmbG9hZF90eXBlO1xcbjEwODc6XFx0XFx0dTE2IGFkZHJfdHlwZSA9IDA7XFxuMTA4ODpcXHRcXG4xMDg5OlxcdFxcdGlmIChyaGFzaHRhYmxlX2xvb2t1cChcXHUwMDI2ZXRoLVxcdTAwM2VmbG93X3RhYmxlLCBcXHUwMDI2Zi1cXHUwMDNlY29va2llLFxcbjEwOTA6XFx0XFx0XFx0XFx0ICAgICAgYWlyb2hhX2Zsb3dfdGFibGVfcGFyYW1zKSlcXG4xMDkxOlxcdFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbjEwOTI6XFx0XFxuMTA5MzpcXHRcXHRpZiAoIWZsb3dfcnVsZV9tYXRjaF9rZXkocnVsZSwgRkxPV19ESVNTRUNUT1JfS0VZX01FVEEpKVxcbjEwOTQ6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjEwOTU6XFx0XFxuMTA5NjpcXHRcXHRpZiAoZmxvd19ydWxlX21hdGNoX2tleShydWxlLCBGTE9XX0RJU1NFQ1RPUl9LRVlfQ09OVFJPTCkpIHtcXG4xMDk3OlxcdFxcdFxcdHN0cnVjdCBmbG93X21hdGNoX2NvbnRyb2wgbWF0Y2g7XFxuMTA5ODpcXHRcXG4xMDk5OlxcdFxcdFxcdGZsb3dfcnVsZV9tYXRjaF9jb250cm9sKHJ1bGUsIFxcdTAwMjZtYXRjaCk7XFxuMTEwMDpcXHRcXHRcXHRhZGRyX3R5cGUgPSBtYXRjaC5rZXktXFx1MDAzZWFkZHJfdHlwZTtcXG4xMTAxOlxcdFxcdFxcdGlmIChmbG93X3J1bGVfaGFzX2NvbnRyb2xfZmxhZ3MobWF0Y2gubWFzay1cXHUwMDNlZmxhZ3MsXFxuMTEwMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRmLVxcdTAwM2Vjb21tb24uZXh0YWNrKSlcXG4xMTAzOlxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMTA0OlxcdFxcdH0gZWxzZSB7XFxuMTEwNTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTEwNjpcXHRcXHR9XFxuMTEwNzpcXHRcXG4xMTA4OlxcdFxcdGlmIChmbG93X3J1bGVfbWF0Y2hfa2V5KHJ1bGUsIEZMT1dfRElTU0VDVE9SX0tFWV9CQVNJQykpIHtcXG4xMTA5OlxcdFxcdFxcdHN0cnVjdCBmbG93X21hdGNoX2Jhc2ljIG1hdGNoO1xcbjExMTA6XFx0XFxuMTExMTpcXHRcXHRcXHRmbG93X3J1bGVfbWF0Y2hfYmFzaWMocnVsZSwgXFx1MDAyNm1hdGNoKTtcXG4xMTEyOlxcdFxcdFxcdGw0cHJvdG8gPSBtYXRjaC5rZXktXFx1MDAzZWlwX3Byb3RvO1xcbjExMTM6XFx0XFx0fSBlbHNlIHtcXG4xMTE0OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMTE1OlxcdFxcdH1cXG4xMTE2OlxcdFxcbjExMTc6XFx0XFx0c3dpdGNoIChhZGRyX3R5cGUpIHtcXG4xMTE4OlxcdFxcdGNhc2UgMDpcXG4xMTE5OlxcdFxcdFxcdG9mZmxvYWRfdHlwZSA9IFBQRV9QS1RfVFlQRV9CUklER0U7XFxuMTEyMDpcXHRcXHRcXHRpZiAoZmxvd19ydWxlX21hdGNoX2tleShydWxlLCBGTE9XX0RJU1NFQ1RPUl9LRVlfRVRIX0FERFJTKSkge1xcbjExMjE6XFx0XFx0XFx0XFx0c3RydWN0IGZsb3dfbWF0Y2hfZXRoX2FkZHJzIG1hdGNoO1xcbjExMjI6XFx0XFxuMTEyMzpcXHRcXHRcXHRcXHRmbG93X3J1bGVfbWF0Y2hfZXRoX2FkZHJzKHJ1bGUsIFxcdTAwMjZtYXRjaCk7XFxuMTEyNDpcXHRcXHRcXHRcXHRtZW1jcHkoZGF0YS5ldGguaF9kZXN0LCBtYXRjaC5rZXktXFx1MDAzZWRzdCwgRVRIX0FMRU4pO1xcbjExMjU6XFx0XFx0XFx0XFx0bWVtY3B5KGRhdGEuZXRoLmhfc291cmNlLCBtYXRjaC5rZXktXFx1MDAzZXNyYywgRVRIX0FMRU4pO1xcbjExMjY6XFx0XFx0XFx0fSBlbHNlIHtcXG4xMTI3OlxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMTI4OlxcdFxcdFxcdH1cXG4xMTI5OlxcdFxcdFxcdGJyZWFrO1xcbjExMzA6XFx0XFx0Y2FzZSBGTE9XX0RJU1NFQ1RPUl9LRVlfSVBWNF9BRERSUzpcXG4xMTMxOlxcdFxcdFxcdG9mZmxvYWRfdHlwZSA9IFBQRV9QS1RfVFlQRV9JUFY0X0hOQVBUO1xcbjExMzI6XFx0XFx0XFx0YnJlYWs7XFxuMTEzMzpcXHRcXHRjYXNlIEZMT1dfRElTU0VDVE9SX0tFWV9JUFY2X0FERFJTOlxcbjExMzQ6XFx0XFx0XFx0b2ZmbG9hZF90eXBlID0gUFBFX1BLVF9UWVBFX0lQVjZfUk9VVEVfNVQ7XFxuMTEzNTpcXHRcXHRcXHRicmVhaztcXG4xMTM2OlxcdFxcdGRlZmF1bHQ6XFxuMTEzNzpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTEzODpcXHRcXHR9XFxuMTEzOTpcXHRcXG4xMTQwOlxcdFxcdGZsb3dfYWN0aW9uX2Zvcl9lYWNoKGksIGFjdCwgXFx1MDAyNnJ1bGUtXFx1MDAzZWFjdGlvbikge1xcbjExNDE6XFx0XFx0XFx0c3dpdGNoIChhY3QtXFx1MDAzZWlkKSB7XFxuMTE0MjpcXHRcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX01BTkdMRTpcXG4xMTQzOlxcdFxcdFxcdFxcdGlmIChvZmZsb2FkX3R5cGUgPT0gUFBFX1BLVF9UWVBFX0JSSURHRSlcXG4xMTQ0OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMTQ1OlxcdFxcbjExNDY6XFx0XFx0XFx0XFx0aWYgKGFjdC1cXHUwMDNlbWFuZ2xlLmh0eXBlID09IEZMT1dfQUNUX01BTkdMRV9IRFJfVFlQRV9FVEgpXFxuMTE0NzpcXHRcXHRcXHRcXHRcXHRhaXJvaGFfcHBlX2Zsb3dfbWFuZ2xlX2V0aChhY3QsIFxcdTAwMjZkYXRhLmV0aCk7XFxuMTE0ODpcXHRcXHRcXHRcXHRicmVhaztcXG4xMTQ5OlxcdFxcdFxcdGNhc2UgRkxPV19BQ1RJT05fUkVESVJFQ1Q6XFxuMTE1MDpcXHRcXHRcXHRcXHRvZGV2ID0gYWN0LVxcdTAwM2VkZXY7XFxuMTE1MTpcXHRcXHRcXHRcXHRicmVhaztcXG4xMTUyOlxcdFxcdFxcdGNhc2UgRkxPV19BQ1RJT05fQ1NVTTpcXG4xMTUzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjExNTQ6XFx0XFx0XFx0Y2FzZSBGTE9XX0FDVElPTl9WTEFOX1BVU0g6XFxuMTE1NTpcXHRcXHRcXHRcXHRpZiAoZGF0YS52bGFuLm51bSA9PSAyIHx8XFxuMTE1NjpcXHRcXHRcXHRcXHQgICAgYWN0LVxcdTAwM2V2bGFuLnByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSlcXG4xMTU3OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMTU4OlxcdFxcbjExNTk6XFx0XFx0XFx0XFx0ZGF0YS52bGFuLmhkcltkYXRhLnZsYW4ubnVtXS5pZCA9IGFjdC1cXHUwMDNldmxhbi52aWQ7XFxuMTE2MDpcXHRcXHRcXHRcXHRkYXRhLnZsYW4uaGRyW2RhdGEudmxhbi5udW1dLnByb3RvID0gYWN0LVxcdTAwM2V2bGFuLnByb3RvO1xcbjExNjE6XFx0XFx0XFx0XFx0ZGF0YS52bGFuLm51bSsrO1xcbjExNjI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTE2MzpcXHRcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1ZMQU5fUE9QOlxcbjExNjQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTE2NTpcXHRcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1BQUE9FX1BVU0g6XFxuMTE2NjpcXHRcXHRcXHRcXHRpZiAoZGF0YS5wcHBvZS5udW0gPT0gMSB8fCBkYXRhLnZsYW4ubnVtID09IDIpXFxuMTE2NzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTE2ODpcXHRcXG4xMTY5OlxcdFxcdFxcdFxcdGRhdGEucHBwb2Uuc2lkID0gYWN0LVxcdTAwM2VwcHBvZS5zaWQ7XFxuMTE3MDpcXHRcXHRcXHRcXHRkYXRhLnBwcG9lLm51bSsrO1xcbjExNzE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTE3MjpcXHRcXHRcXHRkZWZhdWx0OlxcbjExNzM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjExNzQ6XFx0XFx0XFx0fVxcbjExNzU6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjozNTo1Mi4wMzU0NTg1ODNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzA0OTkyMDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhZG9wdGluZyB0aGUgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlIGFzIHJlcXVlc3RlZCwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LlxuXG4qKkFuYWx5emluZyBGdW5jdGlvbiBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIEkndmUgZ290IHRoZSBnZW5lcmFsIGNvbnRleHQgbG9ja2VkIGluLiBOb3csIEkgbmVlZCB0byB6b29tIGluIGFuZCBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBkZXRhaWwuIEl0J3MgdGltZSB0byBkaXZlIGludG8gdGhlIGNvcmUgbG9naWMgYW5kIGdyYXNwIGhvdyB0aGlzIGZ1bmN0aW9uIGFjaGlldmVzIGl0cyBwdXJwb3NlLiBUaGUgYmlnIHBpY3R1cmUgaXMgc2V0LCBzbyBsZXQncyBwYXJzZSB0aHJvdWdoIHRoZSBsaW5lcyBhbmQgdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBMZXQncyBzZWUgaG93IHRoZSBpbmRpdmlkdWFsIGNvbXBvbmVudHMgZml0IHRvZ2V0aGVyIHRvIHByb2R1Y2UgdGhlIGRlc2lyZWQgb3V0cHV0LCBvciBpbiB0aGlzIGNhc2UsIGNvbnRpbnVlIG91ciB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTAwLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjozNTo1NS4zNDA0NTMzMThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzkzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTc2LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE3NjpcXHRcXG4xMTc3OlxcdFxcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihkYXRhLmV0aC5oX3NvdXJjZSkgfHxcXG4xMTc4OlxcdFxcdCAgICAhaXNfdmFsaWRfZXRoZXJfYWRkcihkYXRhLmV0aC5oX2Rlc3QpKVxcbjExNzk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTE4MDpcXHRcXG4xMTgxOlxcdFxcdGVyciA9IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoZXRoLCBcXHUwMDI2aHdlLCBvZGV2LCBvZmZsb2FkX3R5cGUsXFxuMTE4MjpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2ZGF0YSwgbDRwcm90bywgcHJpb3JpdHkpO1xcbjExODM6XFx0XFx0aWYgKGVycilcXG4xMTg0OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTE4NTpcXHRcXG4xMTg2OlxcdFxcdGlmIChmbG93X3J1bGVfbWF0Y2hfa2V5KHJ1bGUsIEZMT1dfRElTU0VDVE9SX0tFWV9QT1JUUykpIHtcXG4xMTg3OlxcdFxcdFxcdHN0cnVjdCBmbG93X21hdGNoX3BvcnRzIHBvcnRzO1xcbjExODg6XFx0XFxuMTE4OTpcXHRcXHRcXHRpZiAob2ZmbG9hZF90eXBlID09IFBQRV9QS1RfVFlQRV9CUklER0UpXFxuMTE5MDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTE5MTpcXHRcXG4xMTkyOlxcdFxcdFxcdGZsb3dfcnVsZV9tYXRjaF9wb3J0cyhydWxlLCBcXHUwMDI2cG9ydHMpO1xcbjExOTM6XFx0XFx0XFx0ZGF0YS5zcmNfcG9ydCA9IHBvcnRzLmtleS1cXHUwMDNlc3JjO1xcbjExOTQ6XFx0XFx0XFx0ZGF0YS5kc3RfcG9ydCA9IHBvcnRzLmtleS1cXHUwMDNlZHN0O1xcbjExOTU6XFx0XFx0fSBlbHNlIGlmIChvZmZsb2FkX3R5cGUgIT0gUFBFX1BLVF9UWVBFX0JSSURHRSkge1xcbjExOTY6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjExOTc6XFx0XFx0fVxcbjExOTg6XFx0XFxuMTE5OTpcXHRcXHRpZiAoYWRkcl90eXBlID09IEZMT1dfRElTU0VDVE9SX0tFWV9JUFY0X0FERFJTKSB7XFxuMTIwMDpcXHRcXHRcXHRzdHJ1Y3QgZmxvd19tYXRjaF9pcHY0X2FkZHJzIGFkZHJzO1xcbjEyMDE6XFx0XFxuMTIwMjpcXHRcXHRcXHRmbG93X3J1bGVfbWF0Y2hfaXB2NF9hZGRycyhydWxlLCBcXHUwMDI2YWRkcnMpO1xcbjEyMDM6XFx0XFx0XFx0ZGF0YS52NC5zcmNfYWRkciA9IGFkZHJzLmtleS1cXHUwMDNlc3JjO1xcbjEyMDQ6XFx0XFx0XFx0ZGF0YS52NC5kc3RfYWRkciA9IGFkZHJzLmtleS1cXHUwMDNlZHN0O1xcbjEyMDU6XFx0XFx0XFx0YWlyb2hhX3BwZV9mb2VfZW50cnlfc2V0X2lwdjRfdHVwbGUoXFx1MDAyNmh3ZSwgXFx1MDAyNmRhdGEsIGZhbHNlKTtcXG4xMjA2OlxcdFxcdH1cXG4xMjA3OlxcdFxcbjEyMDg6XFx0XFx0aWYgKGFkZHJfdHlwZSA9PSBGTE9XX0RJU1NFQ1RPUl9LRVlfSVBWNl9BRERSUykge1xcbjEyMDk6XFx0XFx0XFx0c3RydWN0IGZsb3dfbWF0Y2hfaXB2Nl9hZGRycyBhZGRycztcXG4xMjEwOlxcdFxcbjEyMTE6XFx0XFx0XFx0Zmxvd19ydWxlX21hdGNoX2lwdjZfYWRkcnMocnVsZSwgXFx1MDAyNmFkZHJzKTtcXG4xMjEyOlxcdFxcbjEyMTM6XFx0XFx0XFx0ZGF0YS52Ni5zcmNfYWRkciA9IGFkZHJzLmtleS1cXHUwMDNlc3JjO1xcbjEyMTQ6XFx0XFx0XFx0ZGF0YS52Ni5kc3RfYWRkciA9IGFkZHJzLmtleS1cXHUwMDNlZHN0O1xcbjEyMTU6XFx0XFx0XFx0YWlyb2hhX3BwZV9mb2VfZW50cnlfc2V0X2lwdjZfdHVwbGUoXFx1MDAyNmh3ZSwgXFx1MDAyNmRhdGEpO1xcbjEyMTY6XFx0XFx0fVxcbjEyMTc6XFx0XFxuMTIxODpcXHRcXHRmbG93X2FjdGlvbl9mb3JfZWFjaChpLCBhY3QsIFxcdTAwMjZydWxlLVxcdTAwM2VhY3Rpb24pIHtcXG4xMjE5OlxcdFxcdFxcdGlmIChhY3QtXFx1MDAzZWlkICE9IEZMT1dfQUNUSU9OX01BTkdMRSlcXG4xMjIwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEyMjE6XFx0XFxuMTIyMjpcXHRcXHRcXHRpZiAob2ZmbG9hZF90eXBlID09IFBQRV9QS1RfVFlQRV9CUklER0UpXFxuMTIyMzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTIyNDpcXHRcXG4xMjI1OlxcdFxcdFxcdHN3aXRjaCAoYWN0LVxcdTAwM2VtYW5nbGUuaHR5cGUpIHtcXG4xMjI2OlxcdFxcdFxcdGNhc2UgRkxPV19BQ1RfTUFOR0xFX0hEUl9UWVBFX1RDUDpcXG4xMjI3OlxcdFxcdFxcdGNhc2UgRkxPV19BQ1RfTUFOR0xFX0hEUl9UWVBFX1VEUDpcXG4xMjI4OlxcdFxcdFxcdFxcdGVyciA9IGFpcm9oYV9wcGVfZmxvd19tYW5nbGVfcG9ydHMoYWN0LCBcXHUwMDI2ZGF0YSk7XFxuMTIyOTpcXHRcXHRcXHRcXHRicmVhaztcXG4xMjMwOlxcdFxcdFxcdGNhc2UgRkxPV19BQ1RfTUFOR0xFX0hEUl9UWVBFX0lQNDpcXG4xMjMxOlxcdFxcdFxcdFxcdGVyciA9IGFpcm9oYV9wcGVfZmxvd19tYW5nbGVfaXB2NChhY3QsIFxcdTAwMjZkYXRhKTtcXG4xMjMyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjEyMzM6XFx0XFx0XFx0Y2FzZSBGTE9XX0FDVF9NQU5HTEVfSERSX1RZUEVfRVRIOlxcbjEyMzQ6XFx0XFx0XFx0XFx0LyogaGFuZGxlZCBlYXJsaWVyICovXFxuMTIzNTpcXHRcXHRcXHRcXHRicmVhaztcXG4xMjM2OlxcdFxcdFxcdGRlZmF1bHQ6XFxuMTIzNzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTIzODpcXHRcXHRcXHR9XFxuMTIzOTpcXHRcXG4xMjQwOlxcdFxcdFxcdGlmIChlcnIpXFxuMTI0MTpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjEyNDI6XFx0XFx0fVxcbjEyNDM6XFx0XFxuMTI0NDpcXHRcXHRpZiAoYWRkcl90eXBlID09IEZMT1dfRElTU0VDVE9SX0tFWV9JUFY0X0FERFJTKSB7XFxuMTI0NTpcXHRcXHRcXHRlcnIgPSBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9zZXRfaXB2NF90dXBsZShcXHUwMDI2aHdlLCBcXHUwMDI2ZGF0YSwgdHJ1ZSk7XFxuMTI0NjpcXHRcXHRcXHRpZiAoZXJyKVxcbjEyNDc6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMjQ4OlxcdFxcdH1cXG4xMjQ5OlxcdFxcbjEyNTA6XFx0XFx0ZSA9IGt6YWxsb2Nfb2JqKCplKTtcXG4xMjUxOlxcdFxcdGlmICghZSlcXG4xMjUyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjEyNTM6XFx0XFxuMTI1NDpcXHRcXHRlLVxcdTAwM2Vjb29raWUgPSBmLVxcdTAwM2Vjb29raWU7XFxuMTI1NTpcXHRcXHRtZW1jcHkoXFx1MDAyNmUtXFx1MDAzZWRhdGEsIFxcdTAwMjZod2UsIHNpemVvZihlLVxcdTAwM2VkYXRhKSk7XFxuMTI1NjpcXHRcXG4xMjU3OlxcdFxcdGVyciA9IGFpcm9oYV9wcGVfZm9lX2Zsb3dfY29tbWl0X2VudHJ5KGV0aC1cXHUwMDNlcHBlLCBlKTtcXG4xMjU4OlxcdFxcdGlmIChlcnIpXFxuMTI1OTpcXHRcXHRcXHRnb3RvIGZyZWVfZW50cnk7XFxuMTI2MDpcXHRcXG4xMjYxOlxcdFxcdGVyciA9IHJoYXNodGFibGVfaW5zZXJ0X2Zhc3QoXFx1MDAyNmV0aC1cXHUwMDNlZmxvd190YWJsZSwgXFx1MDAyNmUtXFx1MDAzZW5vZGUsXFxuMTI2MjpcXHRcXHRcXHRcXHRcXHQgICAgIGFpcm9oYV9mbG93X3RhYmxlX3BhcmFtcyk7XFxuMTI2MzpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xMjY0OlxcdFxcdFxcdGdvdG8gcmVtb3ZlX2ZvZV9lbnRyeTtcXG4xMjY1OlxcdFxcbjEyNjY6XFx0XFx0cmV0dXJuIDA7XFxuMTI2NzpcXHRcXG4xMjY4OlxcdHJlbW92ZV9mb2VfZW50cnk6XFxuMTI2OTpcXHRcXHRhaXJvaGFfcHBlX2ZvZV9mbG93X3JlbW92ZV9lbnRyeShldGgtXFx1MDAzZXBwZSwgZSk7XFxuMTI3MDpcXHRmcmVlX2VudHJ5OlxcbjEyNzE6XFx0XFx0a2ZyZWUoZSk7XFxuMTI3MjpcXHRcXG4xMjczOlxcdFxcdHJldHVybiBlcnI7XFxuMTI3NDpcXHR9XFxuMTI3NTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MzU6NTUuMzQwNTk0NjQ4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA5MTc3MTEzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQUEUgRmxvdyBPZmZsb2FkIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBJJ20gbG9va2luZyBhdCB0aGlzIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYCBmdW5jdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IHRoZSBgcHJpb3JpdHlgIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkIHRvIDAgYW5kLCBhdCBmaXJzdCBnbGFuY2UsIGRvZXNuJ3Qgc2VlbSB0byBiZSBtb2RpZmllZCBhbnl3aGVyZSB3aXRoaW4gdGhlIGZ1bmN0aW9uIGl0c2VsZi4gIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCwgdGhvdWdoLiBJJ20gZ29pbmcgdG8gbG9vayBtb3JlIGNsb3NlbHkgd2l0aGluIHRoaXMgZnVuY3Rpb24uICBPa2F5LCBJIHNlZSBpdCdzIGRlY2xhcmVkIGFuZCBpbml0aWFsaXplZCBoZXJlOiBgdTggbDRwcm90byA9IDAsIHByaW9yaXR5ID0gMDtgLiBUaGVuIGl0J3MgcGFzc2VkIHRvIGBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlYC4uLiBidXQgaXQncyBwYXNzZWQgYnkgdmFsdWUsIGB1OCBwcmlvcml0eWAuIFNvLCBhbnkgY2hhbmdlcyBpbnNpZGUgdGhhdCBmdW5jdGlvbiB3b24ndCBwcm9wYWdhdGUgYmFjay4gVGhpcyBzdWdnZXN0cyBpdCdzIGxpa2VseSBhbHdheXMgMCBhdCB0aGlzIHN0YWdlLlxuXG5JZiBgcHJpb3JpdHlgIGlzIGFsd2F5cyB6ZXJvLCBkb2VzIHRoaXMgcGF0Y2ggZXZlbiBkbyBhbnl0aGluZyBuZXc/IEl0IHNlZW1zIHVubGlrZWx5LiAgSSBuZWVkIHRvIHRyYWNlIHdoZXJlIGl0ICpjb3VsZCogYmUgY2hhbmdlZC4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGBwcmlvcml0eWAgdmFsdWUgKmNvdWxkKiBiZSBzZXQuIEl0IHNlZW1zIGxpa2UgdGhlIGNyaXRpY2FsIHBpZWNlIGhlcmUgaXMgdGhlIGBmbG93X2FjdGlvbl9mb3JfZWFjaGAgbG9vcC4gIExldCdzIHNlZS5cblxuSSBzZWUgdGhlcmUncyBhIGxvb3AsIGxvb2tpbmcgYXQgYHJ1bGUtXHUwMDNlYWN0aW9uYC4gIEhlcmUgaXQgaXMuIEknbSBnb2luZyB0aHJvdWdoIHRoZSBjYXNlcy4uLiBJIHNlZSBgRkxPV19BQ1RJT05fTUFOR0xFYCwgYEZMT1dfQUNUSU9OX1JFRElSRUNUYCwgYEZMT1dfQUNUSU9OX0NTVU1gLCBhbmQgc28gb24uXG5cbldhaXQsIGlzIGBGTE9XX0FDVElPTl9QUklPUklUWWAgKmhhbmRsZWQqIGluIHRoaXMgbG9vcD8gSSBkb24ndCBzZWUgaXQhIEl0J3Mgbm90IGxpc3RlZCEgIEkgbmVlZCB0byBjaGVjayB0aGUgb3JpZ2luYWwgY29kZSB0byBzZWUgaWYgdGhlcmUgd2FzIGEgZGlmZmVyZW5jZS4gIEknbSBnb2luZyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSBoYW5kbGVzIHRoaXMuIE5vLCBpdCBpc24ndC4gU28gdGhhdCBtZWFucyB0aGF0IHRoZSB2YWx1ZSBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgdG8gMC5cblxuSWYgYHByaW9yaXR5YCAqaXMqIGFsd2F5cyB6ZXJvLCB0aGVuIGFueSBzdWJzZXF1ZW50IG9wZXJhdGlvbiBsaWtlIGBwcmlvcml0eSA9IHByaW9yaXR5ICUgQUlST0hBX05VTV9RT1NfUVVFVUVTO2AgaXMgc2ltcGxpZmllZCB0byBgMCAlIEFJUk9IQV9OVU1fUU9TX1FVRVVFU2AsIHdoaWNoIGlzIGNsZWFybHkgYWx3YXlzIHplcm8uIE9rYXksIGFuZCB0aGVuIGBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfUUlELCBwcmlvcml0eSlgIGJlY29tZXMgYEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIDApYC5cblxuTm93LCB0aGUgdGhpbmcgdGhhdCdzIGltcG9ydGFudCBoZXJlIGlzIHRoYXQgYEFJUk9IQV9GT0VfUUlEYCBpcyBhICptYXNrKi4gSSBuZWVkIHRvIGZpbmQgaXRzIHZhbHVlLiBUaGF0IHdpbGwgdGVsbCBtZSBleGFjdGx5IHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MjgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjozNjowNi4yNTgzMTU2MjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NzM3NDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFJUk9IQV9GT0VfUUlEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaD0yODY9c3RydWN0IGFpcm9oYV9mb2VfbWFjX2luZm8ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaC0zMjItI2RlZmluZSBBSVJPSEFfRk9FX0NIQU5ORUxcXHRcXHRcXHRHRU5NQVNLKDE1LCAxMSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oOjMyMzojZGVmaW5lIEFJUk9IQV9GT0VfUUlEXFx0XFx0XFx0XFx0R0VOTUFTSygxMCwgOClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oLTMyNC0jZGVmaW5lIEFJUk9IQV9GT0VfRFBJXFx0XFx0XFx0XFx0QklUKDcpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTMzMD1zdGF0aWMgaW50IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzkwLVxcdFxcdFxcdHFkYXRhIHw9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9DSEFOTkVMLCBjaGFubmVsKSB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozOTE6XFx0XFx0XFx0XFx0IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIHByaW9yaXR5KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTM5Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9NjIxPXN0YXRpYyB2b2lkIGFpcm9oYV9wcGVfZm9lX2Zsb3dfc3RhdHNfdXBkYXRlKHN0cnVjdCBhaXJvaGFfcHBlICpwcGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTY2MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjY2MTpcXHR2YWwgPSBGSUVMRF9HRVQoQUlST0hBX0ZPRV9DSEFOTkVMIHwgQUlST0hBX0ZPRV9RSUQsICpkYXRhKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTY2Mi1cXHQqZGF0YSA9ICgqZGF0YSBcXHUwMDI2IH5BSVJPSEFfRk9FX0FDVERQKSB8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjM2OjA2LjMxNzA2MDUxMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODAzOTI5ODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHByaW9yaXR5YCBBcmd1bWVudCBpbiBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAqKlxuXG5Pa2F5LCBzbyBgcHJpb3JpdHlgIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB2ZXJpZnkgd2hldGhlciB0aGF0IGFyZ3VtZW50IGlzIGJlaW5nIG1vZGlmaWVkIGluc2lkZSB0aGUgYGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2VgIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgdmFsdWUgcGFzc2VkIGlzbid0IGJlaW5nIG92ZXJ3cml0dGVuIG9yIGNoYW5nZWQuXG5cbkxldCdzIGxvb2sgYXQgdGhlIHByb3ZpZGVkIGRpZmYgZm9yIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYC4gU2Nhbm5pbmcgdGhyb3VnaCB0aGUgY29kZSwgSSBzZWUgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb246IHRoZXJlJ3MgYW4gYWRkaXRpb24gb2YgYHByaW9yaXR5YCBhcyBhbiBhcmd1bWVudCBwYXNzZWQgdG8gYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgLiBMb29raW5nIGF0IHRoZSBkaWZmLCBJIGNhbiBjb25maXJtIHRoYXQgYHByaW9yaXR5YCBpcyAqbm90KiBiZWluZyBtb2RpZmllZCB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gSXQncyBpbml0aWFsaXplZCwgYnV0IG5vdCBjaGFuZ2VkIGJlZm9yZSBiZWluZyBwYXNzZWQuXG5cbkdpdmVuIHRoaXMsIEkgaGF2ZSB0byBjb25zaWRlciB3aGV0aGVyIHRoZXJlJ3MgYW5vdGhlciByZWxhdGVkIHBhdGNoIG9yIGlmIHRoZXJlJ3Mgc29tZXRoaW5nIEknbSBtaXNzaW5nIHdpdGhpbiB0aGUgY3VycmVudCBjb2RlIGNvbnRleHQsIHN1Y2ggYXMgYSBjYWxsIHRvIGFub3RoZXIgZnVuY3Rpb24gaW4gdGhlIHBhdGNoLCBvciBpZiB0aGUgbG9naWMgZmxvdyBhZmZlY3RzIHRoYXQgYHByaW9yaXR5YCB2YWx1ZS4gSSdsbCBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2ggdG8gY29uZmlybSB0aGUgYXJndW1lbnQgaXMgYmVpbmcgdXNlZCBhcyBpbnRlbmRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcwMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjozNjoxMi4xMjA5OTMyNDNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjMyMDQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcmlvcml0eVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9MzMwPXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zMzMtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGFpcm9oYV9mbG93X2RhdGEgKmRhdGEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozMzQ6XFx0XFx0XFx0XFx0XFx0aW50IGw0cHJvdG8sIHU4IHByaW9yaXR5KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzM1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzg4LVxcdFxcdFxcdGNoYW5uZWwgPSBjaGFubmVsICUgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozODk6XFx0XFx0XFx0cHJpb3JpdHkgPSBwcmlvcml0eSAlIEFJUk9IQV9OVU1fUU9TX1FVRVVFUztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTM5MC1cXHRcXHRcXHRxZGF0YSB8PSBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfQ0hBTk5FTCwgY2hhbm5lbCkgfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MzkxOlxcdFxcdFxcdFxcdCBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfUUlELCBwcmlvcml0eSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zOTItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTEwNzY9c3RhdGljIGludCBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTEwODMtXFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICphY3Q7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxMDg0OlxcdHU4IGw0cHJvdG8gPSAwLCBwcmlvcml0eSA9IDA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMDg1LVxcdHN0cnVjdCBhaXJvaGFfZm9lX2VudHJ5IGh3ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTE4MS1cXHRlcnIgPSBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKGV0aCwgXFx1MDAyNmh3ZSwgb2Rldiwgb2ZmbG9hZF90eXBlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTE4MjpcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2ZGF0YSwgbDRwcm90bywgcHJpb3JpdHkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTE4My1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjozNjoxMi4yNTczMjA1NzNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYxMDgyMTExNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLlxuXG4qKkFuYWx5emluZyB0aGUgYGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2VgIEZ1bmN0aW9uKipcblxuSG1tLCBob2xkIG9uIGEgc2Vjb25kLi4uIGlzIGBwcmlvcml0eWAgYWN0dWFsbHkgZ2V0dGluZyBtb2RpZmllZCAqaW5zaWRlKiBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWA/IFRoYXQncyBub3Qgd2hhdCBJIGluaXRpYWxseSBleHBlY3RlZC4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGlzLiBMZXQgbWUganVzdCBxdWlja2x5IGdvIGJhY2sgYW5kIHRob3JvdWdobHkgcmV2aWV3IHRoYXQgYGZsb3dfYWN0aW9uX2Zvcl9lYWNoYCBsb29wIGFnYWluLiBJIHByb2JhYmx5IGJyZWV6ZWQgdGhyb3VnaCBpdCB0b28gcXVpY2tseSB0aGUgZmlyc3QgdGltZSBhbmQgbWlzc2VkIHNvbWV0aGluZyBzdWJ0bGUgYWJvdXQgaG93IGBwcmlvcml0eWAgaXMgYmVpbmcgaGFuZGxlZCB3aXRoaW4gdGhhdCBjb250ZXh0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZXhhY3QgZmxvdyBhbmQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBoZXJlIGJlZm9yZSBJIHByb2NlZWQgYW55IGZ1cnRoZXIuIEl0J3MgZWFzeSB0byBvdmVybG9vayB0aGluZ3MgaW4gdGhlc2Uga2luZHMgb2Ygcm91dGluZXMgaWYgeW91J3JlIG5vdCBtZXRpY3Vsb3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAzMSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjM2OjE2Ljg2ODE0ODY3N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTMxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTQwOlxcdFxcdGZsb3dfYWN0aW9uX2Zvcl9lYWNoKGksIGFjdCwgXFx1MDAyNnJ1bGUtXFx1MDAzZWFjdGlvbikge1xcbjExNDE6XFx0XFx0XFx0c3dpdGNoIChhY3QtXFx1MDAzZWlkKSB7XFxuMTE0MjpcXHRcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX01BTkdMRTpcXG4xMTQzOlxcdFxcdFxcdFxcdGlmIChvZmZsb2FkX3R5cGUgPT0gUFBFX1BLVF9UWVBFX0JSSURHRSlcXG4xMTQ0OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMTQ1OlxcdFxcbjExNDY6XFx0XFx0XFx0XFx0aWYgKGFjdC1cXHUwMDNlbWFuZ2xlLmh0eXBlID09IEZMT1dfQUNUX01BTkdMRV9IRFJfVFlQRV9FVEgpXFxuMTE0NzpcXHRcXHRcXHRcXHRcXHRhaXJvaGFfcHBlX2Zsb3dfbWFuZ2xlX2V0aChhY3QsIFxcdTAwMjZkYXRhLmV0aCk7XFxuMTE0ODpcXHRcXHRcXHRcXHRicmVhaztcXG4xMTQ5OlxcdFxcdFxcdGNhc2UgRkxPV19BQ1RJT05fUkVESVJFQ1Q6XFxuMTE1MDpcXHRcXHRcXHRcXHRvZGV2ID0gYWN0LVxcdTAwM2VkZXY7XFxuMTE1MTpcXHRcXHRcXHRcXHRicmVhaztcXG4xMTUyOlxcdFxcdFxcdGNhc2UgRkxPV19BQ1RJT05fQ1NVTTpcXG4xMTUzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjExNTQ6XFx0XFx0XFx0Y2FzZSBGTE9XX0FDVElPTl9WTEFOX1BVU0g6XFxuMTE1NTpcXHRcXHRcXHRcXHRpZiAoZGF0YS52bGFuLm51bSA9PSAyIHx8XFxuMTE1NjpcXHRcXHRcXHRcXHQgICAgYWN0LVxcdTAwM2V2bGFuLnByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSlcXG4xMTU3OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMTU4OlxcdFxcbjExNTk6XFx0XFx0XFx0XFx0ZGF0YS52bGFuLmhkcltkYXRhLnZsYW4ubnVtXS5pZCA9IGFjdC1cXHUwMDNldmxhbi52aWQ7XFxuMTE2MDpcXHRcXHRcXHRcXHRkYXRhLnZsYW4uaGRyW2RhdGEudmxhbi5udW1dLnByb3RvID0gYWN0LVxcdTAwM2V2bGFuLnByb3RvO1xcbjExNjE6XFx0XFx0XFx0XFx0ZGF0YS52bGFuLm51bSsrO1xcbjExNjI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTE2MzpcXHRcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1ZMQU5fUE9QOlxcbjExNjQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTE2NTpcXHRcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1BQUE9FX1BVU0g6XFxuMTE2NjpcXHRcXHRcXHRcXHRpZiAoZGF0YS5wcHBvZS5udW0gPT0gMSB8fCBkYXRhLnZsYW4ubnVtID09IDIpXFxuMTE2NzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTE2ODpcXHRcXG4xMTY5OlxcdFxcdFxcdFxcdGRhdGEucHBwb2Uuc2lkID0gYWN0LVxcdTAwM2VwcHBvZS5zaWQ7XFxuMTE3MDpcXHRcXHRcXHRcXHRkYXRhLnBwcG9lLm51bSsrO1xcbjExNzE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTE3MjpcXHRcXHRcXHRkZWZhdWx0OlxcbjExNzM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjExNzQ6XFx0XFx0XFx0fVxcbjExNzU6XFx0XFx0fVxcbjExNzY6XFx0XFxuMTE3NzpcXHRcXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGF0YS5ldGguaF9zb3VyY2UpIHx8XFxuMTE3ODpcXHRcXHQgICAgIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGF0YS5ldGguaF9kZXN0KSlcXG4xMTc5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjozNjoxNi44Njg2MTI3MjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU5NDI5Nzk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZsb3cgT2ZmbG9hZCBQYXRjaCoqXG5cbk9rYXksIGZpcnN0IHRob3VnaHQ6IGhvbGQgb24sIHRoZSBgcHJpb3JpdHlgIHZhcmlhYmxlIGlzbid0IGFjdHVhbGx5IGJlaW5nIG1vZGlmaWVkIHdpdGhpbiBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWAgaXRzZWxmLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBzb21ldGhpbmc7IGlzIGBwcmlvcml0eWAgYWx0ZXJlZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlP1xuXG5BaGEhIE5vdyBJIHNlZSBpdC4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggYXV0aG9yIG5lZ2xlY3RlZCB0byBpbmNsdWRlIGBjYXNlIEZMT1dfQUNUSU9OX1BSSU9SSVRZOiBwcmlvcml0eSA9IGFjdC1cdTAwM2Vwcmlvcml0eTsgYnJlYWs7YC4gVGhlIGRpZmYgc2VlbXMgdG8gb21pdCB0aGF0IGNydWNpYWwgcGFydCwgbWVhbmluZyBgcHJpb3JpdHlgIHdpbGwgaW52YXJpYWJseSBiZSBzZXQgdG8gemVyby5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgYHByaW9yaXR5YCBpcyBkZWNsYXJlZCwgYnV0IG5ldmVyIGFzc2lnbmVkIGEgdmFsdWUgb3RoZXIgdGhhbiB0aGUgaW5pdGlhbCB6ZXJvLCBtYWtpbmcgYEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIHByaW9yaXR5KWAgYWx3YXlzIGV2YWx1YXRlIHRvIHplcm8uXG5cbk9rYXksIGxldCdzIHJld2luZCBhbmQgc2VlIGhvdyB0aGUgYHFkYXRhYCB3YXMgaGFuZGxlZCBiZWZvcmUgdGhpcyBwYXRjaC4gSXQgc2VlbXMgdGhhdCBiZWZvcmUgdGhlIHBhdGNoLCBgQUlST0hBX0ZPRV9RSURgIHdhc24ndCBldmVuIHNldCBpbiB0aGUgYHFkYXRhYCBmaWVsZC5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIGBwcmlvcml0eWAgaXMgYWx3YXlzIHplcm8sIGFuZCBgRklFTERfUFJFUChBSVJPSEFfRk9FX1FJRCwgMClgIGlzIGFsc28gemVybywgdGhlIGBxZGF0YWAgdmFsdWUgc2hvdWxkIGJlIGlkZW50aWNhbCB0byB3aGF0IGl0IHdhcyBiZWZvcmUgdGhpcyBwYXRjaC5cblxuU28gaW4gZWZmZWN0LCB0aGUgcGF0Y2gsIGR1ZSB0byB0aGUgb21pc3Npb24sIG1ha2VzIG5vIGZ1bmN0aW9uYWwgZGlmZmVyZW5jZSBpbiBgcWRhdGFgLiBJcyB0aGVyZSBhbnkgb3RoZXIgcGxhY2Ugd2hlcmUgYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgIGlzIHVzZWQ/IFRoYXQncyB0aGUgbmV4dCBwb2ludCB0byBjb25zaWRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NDMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjozNjoyNS40NjI5MTQ0OTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTkxNTg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0zMjE9c3RhdGljIHZvaWQgYWlyb2hhX3BwZV9mb2Vfc2V0X2JyaWRnZV9hZGRycyhzdHJ1Y3QgYWlyb2hhX2ZvZV9icmlkZ2UgKmJyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zMjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozMzA6c3RhdGljIGludCBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zMzEtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGFpcm9oYV9mb2VfZW50cnkgKmh3ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9MTA3Nj1zdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTE4MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjExODE6XFx0ZXJyID0gYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShldGgsIFxcdTAwMjZod2UsIG9kZXYsIG9mZmxvYWRfdHlwZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTExODItXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmRhdGEsIGw0cHJvdG8sIHByaW9yaXR5KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MzY6MjUuNjAyODM4NjMyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwNTE0NzI5NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQUEUgRmxvdyBPZmZsb2FkIExvZ2ljKipcblxuT2theSwgc28gYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgIGlzIG9ubHkgY2FsbGVkIGZyb20gYGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2VgLiBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIEkndmUgY29uZmlybWVkLiBBbmQgdGhlIGBwcmlvcml0eWAgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQgdG8gMC4gQnV0IEkgaGFkIGEgbmFnZ2luZyBmZWVsaW5nLi4uIGRvZXMgdGhlIGBwcmlvcml0eWAgdmFsdWUgZ2V0IG1vZGlmaWVkIHdpdGhpbiB0aGUgYGZsb3dfYWN0aW9uX2Zvcl9lYWNoYCBsb29wIGluIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYD8gSSB0aG91Z2h0IEkgaGFkIGdvbmUgdGhyb3VnaCB0aGF0IHBhcnQgYWxyZWFkeSwgYnV0IGxldCdzIGRvdWJsZS1jaGVjay5cblxuTGV0IG1lIGdvIHRocm91Z2ggdGhlIGBmbG93X2FjdGlvbl9mb3JfZWFjaGAgbG9vcCBhZ2FpbiwgbGluZSBieSBsaW5lLiBIbW0sIGhlcmUgd2UgaGF2ZSB0aGUgbG9vcCBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgYWN0aW9ucyBhc3NvY2lhdGVkIHdpdGggYSBmbG93IHJ1bGUuIEFoLCByaWdodCEgSSBzZWUgYWN0aW9ucyBsaWtlIG1hbmdsZSwgcmVkaXJlY3QsIGNoZWNrc3VtLCBWTEFOIG1hbmlwdWxhdGlvbnMsIFBQUG9FIGhhbmRsaW5nLi4uIFdhaXQsIEkgYWxtb3N0IG1pc3NlZCBpdCEgVGhlcmUgaXQgaXMhIGBjYXNlIEZMT1dfQUNUSU9OX1BSSU9SSVRZOmAuIEl0IGxvb2tzIGxpa2UgYHByaW9yaXR5YCAqaXMqIG1vZGlmaWVkIHdpdGhpbiB0aGUgbG9vcCEgVGhlIGBhY3QtXHUwMDNlcHJpb3JpdHlgIHZhbHVlIGlzIGFzc2lnbmVkIHRvIHRoZSBgcHJpb3JpdHlgIHZhcmlhYmxlLlxuXG5JIG5lZWQgdG8gcmUtcmVhZCB0aGUgb3V0cHV0IGZyb20gdGhlIGByZWFkLWZpbGVgIGNvbW1hbmQsIHNwZWNpZmljYWxseSBsaW5lcyAxMTQwLTExNzkuIEl0IGxvb2tzIGxpa2UgSSB3YXMgYSBsaXR0bGUgaGFzdHkgaW4gbXkgcHJldmlvdXMgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MjUsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MzY6MzIuNjU0MzE2OTc4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNDA6XFx0XFx0Zmxvd19hY3Rpb25fZm9yX2VhY2goaSwgYWN0LCBcXHUwMDI2cnVsZS1cXHUwMDNlYWN0aW9uKSB7XFxuMTE0MTpcXHRcXHRcXHRzd2l0Y2ggKGFjdC1cXHUwMDNlaWQpIHtcXG4xMTQyOlxcdFxcdFxcdGNhc2UgRkxPV19BQ1RJT05fTUFOR0xFOlxcbjExNDM6XFx0XFx0XFx0XFx0aWYgKG9mZmxvYWRfdHlwZSA9PSBQUEVfUEtUX1RZUEVfQlJJREdFKVxcbjExNDQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjExNDU6XFx0XFxuMTE0NjpcXHRcXHRcXHRcXHRpZiAoYWN0LVxcdTAwM2VtYW5nbGUuaHR5cGUgPT0gRkxPV19BQ1RfTUFOR0xFX0hEUl9UWVBFX0VUSClcXG4xMTQ3OlxcdFxcdFxcdFxcdFxcdGFpcm9oYV9wcGVfZmxvd19tYW5nbGVfZXRoKGFjdCwgXFx1MDAyNmRhdGEuZXRoKTtcXG4xMTQ4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjExNDk6XFx0XFx0XFx0Y2FzZSBGTE9XX0FDVElPTl9SRURJUkVDVDpcXG4xMTUwOlxcdFxcdFxcdFxcdG9kZXYgPSBhY3QtXFx1MDAzZWRldjtcXG4xMTUxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjExNTI6XFx0XFx0XFx0Y2FzZSBGTE9XX0FDVElPTl9DU1VNOlxcbjExNTM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTE1NDpcXHRcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1ZMQU5fUFVTSDpcXG4xMTU1OlxcdFxcdFxcdFxcdGlmIChkYXRhLnZsYW4ubnVtID09IDIgfHxcXG4xMTU2OlxcdFxcdFxcdFxcdCAgICBhY3QtXFx1MDAzZXZsYW4ucHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpKVxcbjExNTc6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjExNTg6XFx0XFxuMTE1OTpcXHRcXHRcXHRcXHRkYXRhLnZsYW4uaGRyW2RhdGEudmxhbi5udW1dLmlkID0gYWN0LVxcdTAwM2V2bGFuLnZpZDtcXG4xMTYwOlxcdFxcdFxcdFxcdGRhdGEudmxhbi5oZHJbZGF0YS52bGFuLm51bV0ucHJvdG8gPSBhY3QtXFx1MDAzZXZsYW4ucHJvdG87XFxuMTE2MTpcXHRcXHRcXHRcXHRkYXRhLnZsYW4ubnVtKys7XFxuMTE2MjpcXHRcXHRcXHRcXHRicmVhaztcXG4xMTYzOlxcdFxcdFxcdGNhc2UgRkxPV19BQ1RJT05fVkxBTl9QT1A6XFxuMTE2NDpcXHRcXHRcXHRcXHRicmVhaztcXG4xMTY1OlxcdFxcdFxcdGNhc2UgRkxPV19BQ1RJT05fUFBQT0VfUFVTSDpcXG4xMTY2OlxcdFxcdFxcdFxcdGlmIChkYXRhLnBwcG9lLm51bSA9PSAxIHx8IGRhdGEudmxhbi5udW0gPT0gMilcXG4xMTY3OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMTY4OlxcdFxcbjExNjk6XFx0XFx0XFx0XFx0ZGF0YS5wcHBvZS5zaWQgPSBhY3QtXFx1MDAzZXBwcG9lLnNpZDtcXG4xMTcwOlxcdFxcdFxcdFxcdGRhdGEucHBwb2UubnVtKys7XFxuMTE3MTpcXHRcXHRcXHRcXHRicmVhaztcXG4xMTcyOlxcdFxcdFxcdGRlZmF1bHQ6XFxuMTE3MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTE3NDpcXHRcXHRcXHR9XFxuMTE3NTpcXHRcXHR9XFxuMTE3NjpcXHRcXG4xMTc3OlxcdFxcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihkYXRhLmV0aC5oX3NvdXJjZSkgfHxcXG4xMTc4OlxcdFxcdCAgICAhaXNfdmFsaWRfZXRoZXJfYWRkcihkYXRhLmV0aC5oX2Rlc3QpKVxcbjExNzk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjM2OjMyLjY1NDU1ODI0OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODExODU4NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRmxvdyBBY3Rpb24gUHJpb3JpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYCBmdW5jdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBGTE9XX0FDVElPTl9QUklPUklUWWAgaXNuJ3QgYmVpbmcgaGFuZGxlZCAqYW55d2hlcmUqIGluIHRoZSBjb2RlLiBJIG5lZWQgdG8gYmUgc3VyZS4gTGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgYW5vdGhlciBpbnN0YW5jZSBvZiB0aGUgYGZsb3dfYWN0aW9uX2Zvcl9lYWNoYCBsb29wIHRvIHZlcmlmeS4gQWgsIHllcywgdGhlcmUncyBvbmUgYXQgbGluZSAxMjE4LiBJdCdzIHNraXBwaW5nIGBGTE9XX0FDVElPTl9NQU5HTEVgLCBidXQgdGhhdCBkb2Vzbid0IGNoYW5nZSBhbnl0aGluZyDigJMgYEZMT1dfQUNUSU9OX1BSSU9SSVRZYCBpcyBzdGlsbCBhYnNlbnQuXG5cblRoaXMgbWVhbnMgdGhlIGBwcmlvcml0eWAgZmllbGQgaXMgKmFsd2F5cyogYmVpbmcgc2V0IHRvIHplcm8gaW4gdGhpcyBzZWN0aW9uLCBzaW5jZSB0aGVyZSdzIG5vIGxvZ2ljIHRvIHByb2Nlc3MgdGhlIHNwZWNpZmllZCBwcmlvcml0eSBpZiBvbmUgaXMgZGVmaW5lZC4gVGhpcyBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGlzc3VlIGluIHRoZSBmbG93IG9mZmxvYWQgZnVuY3Rpb25hbGl0eS5cblxuSG1tLCB0aGlzIHRhc2sgaXMgcGFydCBvZiBhIGxhcmdlciBwYXRjaCBzZXJpZXMsIGlzbid0IGl0PyBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGluc3RydWN0aW9ucy4gVGhlIHByb21wdCBtZW50aW9ucyB0aGUgZGlmZiBoYXMgKmFscmVhZHkqIGJlZW4gYXBwbGllZC4gT2theSwgaXQncyBIRUFELiBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIGdpdCBsb2cgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBjb21taXRzIHRvIHRoaXMgZnVuY3Rpb25hbGl0eSB0aGF0IG1pZ2h0IGFkZHJlc3MgdGhpcyBhcHBhcmVudCBvdmVyc2lnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTYwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MzY6MzguNDY2NDIxOTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NjQyNzc1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcmlvcml0eVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9MjA5Nz1zdGF0aWMgdTE2IGFpcm9oYV9kZXZfc2VsZWN0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTIxMDYtXFx0ICogaW5kZXgsIHJlbHkgb24gcG9ydCBpZCBvdGhlcndpc2UuIFNlbGVjdCBRb1MgcXVldWUgYmFzZWQgb24gdGhlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzoyMTA3OlxcdCAqIHNrYiBwcmlvcml0eS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTIxMDgtXFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTIxMTAtXFx0Y2hhbm5lbCA9IGNoYW5uZWwgJSBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjIxMTE6XFx0cXVldWUgPSBza2ItXFx1MDAzZXByaW9yaXR5ICUgQUlST0hBX05VTV9RT1NfUVVFVUVTO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMjExMi1cXHRxdWV1ZSA9IGNoYW5uZWwgKiBBSVJPSEFfTlVNX1FPU19RVUVVRVMgKyBxdWV1ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9MjQzNT1zdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF90eF9ldHNfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNoYW5uZWwsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTI0NTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzoyNDU1OlxcdC8qIEVONzU4MSBTb0Mgc3VwcG9ydHMgZml4ZWQgUW9TIGJhbmQgcHJpb3JpdHkgd2hlcmUgV1JSIHF1ZXVlcyBoYXZlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0yNDU2LVxcdCAqIGxvd2VzdCBwcmlvcml0aWVzIHdpdGggcmVzcGVjdCB0byBTUCBvbmVzLlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaD0zODA9c3RydWN0IGFpcm9oYV9mb2VfaXB2NF9kc2xpdGUge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaC0zODUtXFx0dTggZmxvd19sYWJlbFszXTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oOjM4NjpcXHR1OCBwcmlvcml0eTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oLTM4Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9MzMwPXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zMzMtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGFpcm9oYV9mbG93X2RhdGEgKmRhdGEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozMzQ6XFx0XFx0XFx0XFx0XFx0aW50IGw0cHJvdG8sIHU4IHByaW9yaXR5KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzM1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzg4LVxcdFxcdFxcdGNoYW5uZWwgPSBjaGFubmVsICUgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozODk6XFx0XFx0XFx0cHJpb3JpdHkgPSBwcmlvcml0eSAlIEFJUk9IQV9OVU1fUU9TX1FVRVVFUztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTM5MC1cXHRcXHRcXHRxZGF0YSB8PSBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfQ0hBTk5FTCwgY2hhbm5lbCkgfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MzkxOlxcdFxcdFxcdFxcdCBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfUUlELCBwcmlvcml0eSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zOTItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTEwNzY9c3RhdGljIGludCBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTEwODMtXFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICphY3Q7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxMDg0OlxcdHU4IGw0cHJvdG8gPSAwLCBwcmlvcml0eSA9IDA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMDg1LVxcdHN0cnVjdCBhaXJvaGFfZm9lX2VudHJ5IGh3ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTE4MS1cXHRlcnIgPSBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKGV0aCwgXFx1MDAyNmh3ZSwgb2Rldiwgb2ZmbG9hZF90eXBlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTE4MjpcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2ZGF0YSwgbDRwcm90bywgcHJpb3JpdHkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTE4My1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjozNjozOS4wMjI4NTczODdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2ODM2MzYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGEgU3VzcGVjdGVkIFByaW9yaXR5IEhhbmRsaW5nIERpc2NyZXBhbmN5KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIG5vdGljaW5nIHNvbWV0aGluZyBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBpbiB0aGlzIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYCBmdW5jdGlvbi4gVGhlIGBwcmlvcml0eWAgdmFyaWFibGUsIHJpZ2h0IHRoZXJlLCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCBhbmQgdGhlbiBpdCdzIGJlaW5nIHBhc3NlZCB0byBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAuIFRoYXQncyBhIHJlZCBmbGFnLiBJIGtub3cgZnJvbSBwYXN0IGV4cGVyaWVuY2UgaG93IGNyaXRpY2FsIHByaW9yaXR5IGhhbmRsaW5nIGlzIGluIHRoZXNlIHR5cGVzIG9mIG9mZmxvYWQgc2NlbmFyaW9zLiBJdCBtYWtlcyBtZSB3b25kZXI6IGlzIGl0IHBvc3NpYmxlIHRoYXQgdGhlIGBGTE9XX0FDVElPTl9QUklPUklUWWAgdmFsdWUgaXMgYWN0dWFsbHkgYmVpbmcgbWFuYWdlZCBvciBtb2RpZmllZCBlbHNld2hlcmU/IElzIHRoZXJlIGFub3RoZXIgcGF0Y2gsIG1heWJlIG9uZSBhbHJlYWR5IG1lcmdlZCwgdGhhdCdzIHRha2luZyBjYXJlIG9mIHRoaXM/IEl0J3MgYSBjb21tb24gcHJhY3RpY2UuXG5cbk15IGd1dCB0ZWxscyBtZSBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIFRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb21taXQgaGlzdG9yeSBvZiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY2AuIEknbGwgcHVsbCB1cCB0aGUgZ2l0IGxvZyBmb3IgdGhhdCBmaWxlIHJpZ2h0IGF3YXkgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJlbGF0ZWQgY29tbWl0cyB0aGF0IG1pZ2h0IHNoZWQgc29tZSBsaWdodCBvbiBob3cgYEZMT1dfQUNUSU9OX1BSSU9SSVRZYCBpcyBhY3R1YWxseSBiZWluZyBoYW5kbGVkIGluIHRoZSBvdmVyYWxsIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgZGVmYXVsdCAwIHZhbHVlIGhlcmUgaXMgY29ycmVjdCwgb3IgaWYgaXQgaXMgaW50ZW50aW9uYWxseSBtb2RpZmllZCBsYXRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2MjIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MzY6NDMuMzkxMjI0ODRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjE2ODk1NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRkxPV19BQ1RJT05fUFJJT1JJVFlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MzY6NDMuNTgzNDA2MzM1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDQ2MzQ1NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgQWlyb2hhIEV0aGVybmV0IERyaXZlcioqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhpcyBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyLCBhbmQgSSdtIGltbWVkaWF0ZWx5IG5vdGljaW5nIHNvbWV0aGluZy4gVGhlIGBGTE9XX0FDVElPTl9QUklPUklUWWAgbWFjcm8uLi4gaXQncyBqdXN0IG5vdCBkZWNsYXJlZCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYCBkaXJlY3RvcnkuIFRoYXQncyBhIGJpdCBvZGQ7IEkgd291bGQgaGF2ZSBleHBlY3RlZCB0byBmaW5kIGl0IGRlZmluZWQgdGhlcmUgZm9yIG1hbmFnaW5nIHRoZSBmbG93IGNvbnRyb2wgYWN0aW9uIHByaW9yaXR5LlxuXG5IYW5nIG9uIGEgc2Vjb25kLiBPa2F5LCBsZXQgbWUgcGl2b3QuIEluc3RlYWQgb2YgdHJ5aW5nIHRvIGZpbmQgdGhlIG1pc3NpbmcgZGVmaW5pdGlvbiwgbGV0IG1lIHJlZnJhbWUgdGhlIHF1ZXN0aW9uLiBXaGF0IGFib3V0IGBhY3QtXHUwMDNlcHJpb3JpdHlgPyBJcyB0aGF0IGEgbWVtYmVyPyBBbmQgaWYgaXQgaXMsIGhvdyBpcyBpdCBiZWluZyBzZXQvdXNlZD8gSXMgdGhpcyBwcmlvcml0eSBoYW5kbGluZyBiZWluZyBkb25lIGluIGEgc2VwYXJhdGUsIHBvc3NpYmx5IGdlbmVyaWMsIHBhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIG5vdCBiZWluZyBleHBsaWNpdGx5IGhhbmRsZWQgYnkgdGhlIGRyaXZlciBpdHNlbGY/IFRoZSBjb250ZXh0IGhlcmUgaXMga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiB0aGUgZHJpdmVyIGlzIGludGVyYWN0aW5nIHdpdGgsIG9yIHJlbHlpbmcgb24sIHRoZSBuZXR3b3JrIHN0YWNrIGZvciB0aGlzIGNyaXRpY2FsIGZsb3cgYWN0aW9uIHByaW9yaXR5LiBJdCdzIHRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzdHJ1Y3QgZGVmaW5pdGlvbnMgYW5kIHRoZSBhc3NvY2lhdGVkIGZ1bmN0aW9uIGNhbGxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA0NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjM2OjQ3LjIyODA0NDY1NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM1NTA2MTExLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhY3QtXFx1MDAzZXByaW9yaXR5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjM2OjQ3LjQ2MzU4Mjg1NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDEwMzk1MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQWlyb2hhIFBQRSBGbG93IE9mZmxvYWQgUGF0Y2gqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBUaGlzIGBwcmlvcml0eWAgdmFyaWFibGUgaW4gYGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2VgLi4uIGl0J3MgbmV2ZXIgYWN0dWFsbHkgKm1vZGlmaWVkKiwgaXMgaXQ/IEknbSB0cmFjaW5nIHRoZSBleGVjdXRpb24gYW5kIGl0J3MgaW5pdGlhbGl6ZWQgdG8gMC4gVGhlbiwgaXQncyBqdXN0IHBhc3NlZCBzdHJhaWdodCBpbnRvIGBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlYC4gQWxyaWdodCwgZm9sbG93aW5nIHRoZSBjb2RlLCBpbnNpZGUgYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgLCBpdCdzIGhpdCB3aXRoIGBwcmlvcml0eSA9IHByaW9yaXR5ICUgQUlST0hBX05VTV9RT1NfUVVFVUVTO2AgQnV0IGBwcmlvcml0eWAgaXMgMCwgc28gdGhlIHJlc3VsdCBpcy4uLiBzdGlsbCAwLlxuXG5UaGVuLCB0aGUgYml0d2lzZSBvcGVyYXRpb24gYHFkYXRhIHw9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIHByaW9yaXR5KTtgIG9jY3Vycy4gU2luY2UgYHByaW9yaXR5YCBpcyAwLCB0aGlzIHJlc3VsdHMgaW4gYHFkYXRhYCBiZWluZyB1bmNoYW5nZWQuIFNvIHRoZSB2YWx1ZSBvZiBgcWRhdGFgIGlzIGFic29sdXRlbHkgaWRlbnRpY2FsIGJlZm9yZSBhbmQgYWZ0ZXIgdGhpcyBwYXRjaC5cblxuQW0gSSBtaXNzaW5nIHNvbWV0aGluZz8gRG9lcyBgcHJpb3JpdHlgIGV2ZW4gZG8gYW55dGhpbmcgaW4gYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgIGFzaWRlIGZyb20gdGhhdCBtb2R1bGFyIGFyaXRobWV0aWM/IEkgbmVlZCB0byByZXZpZXcgdGhpcyBtb3JlIHRob3JvdWdobHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Mzc3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjM2OjUxLjg3Mzk4MTUxNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE1NTUxNTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByaW9yaXR5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0zMzA9c3RhdGljIGludCBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTMzMy1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYWlyb2hhX2Zsb3dfZGF0YSAqZGF0YSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjMzNDpcXHRcXHRcXHRcXHRcXHRpbnQgbDRwcm90bywgdTggcHJpb3JpdHkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zMzUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zODgtXFx0XFx0XFx0Y2hhbm5lbCA9IGNoYW5uZWwgJSBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjM4OTpcXHRcXHRcXHRwcmlvcml0eSA9IHByaW9yaXR5ICUgQUlST0hBX05VTV9RT1NfUVVFVUVTO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzkwLVxcdFxcdFxcdHFkYXRhIHw9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9DSEFOTkVMLCBjaGFubmVsKSB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozOTE6XFx0XFx0XFx0XFx0IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIHByaW9yaXR5KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTM5Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9MTA3Nj1zdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTA4My1cXHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmFjdDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjEwODQ6XFx0dTggbDRwcm90byA9IDAsIHByaW9yaXR5ID0gMDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTEwODUtXFx0c3RydWN0IGFpcm9oYV9mb2VfZW50cnkgaHdlO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMTgxLVxcdGVyciA9IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoZXRoLCBcXHUwMDI2aHdlLCBvZGV2LCBvZmZsb2FkX3R5cGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxMTgyOlxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZkYXRhLCBsNHByb3RvLCBwcmlvcml0eSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMTgzLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjM2OjUyLjE4OTU0NDc4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NTA3NDYzNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmVkdW5kYW50IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIGFsYXJtIGJlbGxzIGFyZSBnb2luZyBvZmYuIEl0IHNlZW1zIGNvbXBsZXRlbHkgdXNlbGVzcy4gVGhlIGNvZGUgYWRkcyBhIGBwcmlvcml0eWAgdmFyaWFibGUsIGluaXRpYWxpemVzIGl0IHRvIHplcm8sIHBhc3NlcyBpdCBpbnRvIGEgZnVuY3Rpb24sIGRvZXMgYSBtb2R1bG8gb3BlcmF0aW9uIHdpdGggaXQsIGFuZCB0aGVuIE9ScyB0aGUgcmVzdWx0IGludG8gYSBiaXRmaWVsZC4gU2luY2UgYHByaW9yaXR5YCBpcyB6ZXJvLCBhbnkgbW9kdWxvIG9wZXJhdGlvbiBvbiBpdCB3aXRoIGFueSBjb25zdGFudCwgaW5jbHVkaW5nIGBOYCwgd2lsbCByZXN1bHQgaW4gemVyby4gVGhlcmVmb3JlLCB0aGUgYml0d2lzZSBPUiBlZmZlY3RpdmVseSBhZGRzIG5vdGhpbmcuIEl0J3MgYSBuby1vcCBmdW5jdGlvbmFsbHkhXG5cbkxldCBtZSBiZSBzdXJlIEknbSBub3QgbWlzc2luZyBzb21ldGhpbmcgc3VidGxlIGhlcmUuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY29kZSB3YXMgc2V0dGluZyBhIGBjaGFubmVsYCB2YWx1ZSB1c2luZyBhIG1vZHVsbyBvcGVyYXRpb24gYW5kIHRoZW4gc2V0dGluZyBhIGJpdGZpZWxkOlxuXG5gYGBjXG5cdFx0XHRjaGFubmVsID0gY2hhbm5lbCAlIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTO1xuXHRcdFx0cWRhdGEgfD0gRklFTERfUFJFUChBSVJPSEFfRk9FX0NIQU5ORUwsIGNoYW5uZWwpO1xuYGBgXG5cbkFuZCBub3cgaXQgaXM6XG5cbmBgYGNcblx0XHRcdGNoYW5uZWwgPSBjaGFubmVsICUgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFM7XG5cdFx0XHRwcmlvcml0eSA9IHByaW9yaXR5ICUgQUlST0hBX05VTV9RT1NfUVVFVUVTO1xuXHRcdFx0cWRhdGEgfD0gRklFTERfUFJFUChBSVJPSEFfRk9FX0NIQU5ORUwsIGNoYW5uZWwpIHxcblx0XHRcdFx0IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIHByaW9yaXR5KTtcbmBgYFxuXG5TaW5jZSBgcHJpb3JpdHlgIGlzIHNldCB0byB6ZXJvLCB0aGVuIGBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfUUlELCAwKWAgZXZhbHVhdGVzIHRvIHplcm8uIFRodXMsIGBxZGF0YWAncyB2YWx1ZSBpcyB1bmNoYW5nZWQgZnJvbSB3aGF0IGl0IHdhcyBiZWZvcmUuIFRoaXMgaXMgYSB2ZXJ5IGNsZWFyIG5vLW9wLlxuXG5MZXQncyBkbyBhIHNhbml0eSBjaGVjay4gSXMgdGhlcmUgYW55IG90aGVyIG1vZGlmaWVkIGZpbGUgdGhhdCBtaWdodCBpbXBhY3QgdGhpcz8gVGhlIGRpZmYgb25seSBjb250YWlucyBjaGFuZ2VzIHRvIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jYC4gT2ssIG5hcnJvdyBpdCBkb3duLlxuXG5Db3VsZCBgcHJpb3JpdHlgIGJlIG1vZGlmaWVkIGJ5IGEgbWFjcm8gb3IgYSBnbG9iYWwgdmFyaWFibGU/IE5vLCBpdCdzIGEgbG9jYWxseSBkZWNsYXJlZCBgdTggcHJpb3JpdHkgPSAwO2AgYW5kIGl0J3MgcGFzc2VkIGJ5IHZhbHVlIGludG8gdGhpcyBmdW5jdGlvbi5cblxuQ291bGQgdGhlIGBmbG93X2FjdGlvbl9mb3JfZWFjaGAgZnVuY3Rpb24gaW1wbGljaXRseSBtb2RpZnkgdGhlIHZhbHVlPyBMZXQncyBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IG1hY3JvIGFuZCB2ZXJpZnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDI2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjM2OjU4Ljk0MDI5NTQxOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1Nzk3NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgZmxvd19hY3Rpb25fZm9yX2VhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmg9MzU3PXN0YXRpYyBpbmxpbmUgYm9vbCBmbG93X2FjdGlvbl9pc19sYXN0X2VudHJ5KGNvbnN0IHN0cnVjdCBmbG93X2FjdGlvbiAqYWN0aW9uLFxcbi0tXFxuaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmgtMzYyLVxcbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oOjM2MzojZGVmaW5lIGZsb3dfYWN0aW9uX2Zvcl9lYWNoKF9faSwgX19hY3QsIF9fYWN0aW9ucylcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmgtMzY0LSAgICAgICAgZm9yIChfX2kgPSAwLCBfX2FjdCA9IFxcdTAwMjYoX19hY3Rpb25zKS1cXHUwMDNlZW50cmllc1swXTtcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjM2OjU5LjUyNjEwNjI2NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzgzMzkxNTIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogQSBOby1PcCBpbiBEaXNndWlzZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBpcywgZnVuY3Rpb25hbGx5LCBhIG5vLW9wLiBJdCBzZWVtcyB0byBiZSBlaXRoZXIgYW4gaW5jb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvciBhIHByZXBhcmF0b3J5IHN0ZXAgZm9yIGZ1dHVyZSB3b3JrLiBGaXJzdCB0aGluZyBJIGRpZCB3YXMgdmVyaWZ5IHRoYXQgYHByaW9yaXR5YCBpc24ndCBiZWluZyBzdWJ0bHkgYWx0ZXJlZCB2aWEgc29tZSBnbG9iYWwgdmFyaWFibGUgb3IgYSB0cmlja3kgYGZsb3dfcnVsZV9tYXRjaF9rZXlgIGludGVyYWN0aW9uLCBidXQgbm8sIGl0J3MgYSBsb2NhbCB2YXJpYWJsZSB3aXRoaW4gYGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2VgLiBEZWNsYXJlZCwgaW5pdGlhbGl6ZWQgdG8gemVybywgYW5kIHBhc3NlZCBieSB2YWx1ZS4gU28sIHRoZSB2YWx1ZSBpcyBjb25zaXN0ZW50bHkgemVybyB0aHJvdWdob3V0LlxuXG5JIGNoZWNrZWQgaG93IHRoZSBjb2RlIHVzZXMgYHByaW9yaXR5YC4gSXQgZ2V0cyBwYXNzZWQgdG8gYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgLCBidXQgdGhlIGNydWNpYWwgY2hlY2sgaXMgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEhlcmUsIGBwcmlvcml0eWAgaXMgdXNlZCBpbiBgRklFTERfUFJFUChBSVJPSEFfRk9FX1FJRCwgcHJpb3JpdHkpYC4gSSB2ZXJpZmllZCB0aGF0IGBGSUVMRF9QUkVQYCBpcyBqdXN0IGEgbWFjcm8sIHNoaWZ0aW5nIGFuZCBtYXNraW5nLiBJdCBkb2Vzbid0IHBlcmZvcm0gYW55IHNpZGUgZWZmZWN0cy5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lc24ndCBhcHBlYXIgdG8gY2hhbmdlIGFueSBmdW5jdGlvbmFsaXR5LiBJIGR1ZyBhIGxpdHRsZSBkZWVwZXIgdG8gc2VlIGlmIHBlcmhhcHMgdGhlIGBBSVJPSEFfRk9FX1FJRGAgZmllbGQgd2FzIHNvbWVob3cgYmVpbmcgbW9kaWZpZWQgYmVmb3JlIG9yIGFmdGVyIHRoaXMgcGF0Y2gsIGJ1dCBpdCB3YXMgYWxyZWFkeSBpbml0aWFsaXplZCBhcyAwLCBhbmQgdGhlIHBhdGNoIGFkZHMgbm90aGluZyB0aGF0IHdvdWxkIGNoYW5nZSB0aGUgdmFsdWUuIFRoZSBnZW5lcmF0ZWQgY29kZSBpcyBlaXRoZXIgZXhhY3RseSB0aGUgc2FtZSBvciBqdXN0IGhhcyBhbiBleHRyYSBgfCAwYCwgd2hpY2ggaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQuXG5cblNvLCB0aGlzIG1vZGlmaWNhdGlvbiAqZG9lc24ndCogaW50cm9kdWNlIGFueSBjaGFuZ2VzIHRoYXQgd291bGQgYmUgcmVsZXZhbnQgdG8gZnV6emluZy4gSXQncyBlaXRoZXIgYSBwbGFjZWhvbGRlciBvciBhIHBhcnRpYWwgaW1wbGVtZW50YXRpb24uXG5cbkFscmlnaHQsIGxldCdzIGRvdWJsZSBjaGVjayB0aGlzIHZlcnkgY2FyZWZ1bGx5LiBUaGUgcGF0Y2ggbW92ZXMgYGw0cHJvdG9gIGFuZCBhZGRzIGBwcmlvcml0eSA9IDBgLiBJdCB0aGVuIHBhc3NlcyBgcHJpb3JpdHlgICh3aGljaCBpcyAwKSB0byBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAuXG5cbkluIGBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlYCB0aGUgY29kZSBub3cgZG9lcyBgcHJpb3JpdHkgPSAwICUgQUlST0hBX05VTV9RT1NfUVVFVUVTYCAod2hpY2ggaXMgMCksIGFuZCB0aGVuIGBxZGF0YSB8PSBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfUUlELCAwKWAuXG5cblNpbmNlIGBwcmlvcml0eWAgaXMgbmV2ZXIgbW9kaWZpZWQgZnJvbSAwLCBpdCBoYXMgbm8gZnVuY3Rpb25hbCBlZmZlY3QuXG5cbldvcnRoRnV6emluZz1mYWxzZS5cblJlYXNvbmluZzogVGhlIHBhdGNoIGFkZHMgYSBgcHJpb3JpdHlgIHZhcmlhYmxlIGluaXRpYWxpemVkIHRvIDAgYW5kIHBhc3NlcyBpdCB0byBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAsIHdoZXJlIGl0IGlzIHVzZWQgdG8gc2V0IHRoZSBgQUlST0hBX0ZPRV9RSURgIGZpZWxkLiBIb3dldmVyLCBgcHJpb3JpdHlgIGlzIG5ldmVyIG1vZGlmaWVkIGZyb20gMCwgc28gdGhlIGZpZWxkIGlzIGFsd2F5cyBzZXQgdG8gMCwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIGJlaGF2aW9yIGJlZm9yZSB0aGUgcGF0Y2guIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyBmdW5jdGlvbmFsIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDU3LCJPdXRwdXRUb2tlbnMiOjE0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6Mzc6MTMuMzYwMDI1MjI2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGBwcmlvcml0eWAgdmFyaWFibGUgaW5pdGlhbGl6ZWQgdG8gMCBhbmQgcGFzc2VzIGl0IHRvIGBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlYCwgd2hlcmUgaXQgaXMgdXNlZCB0byBzZXQgdGhlIGBBSVJPSEFfRk9FX1FJRGAgZmllbGQuIEhvd2V2ZXIsIGBwcmlvcml0eWAgaXMgbmV2ZXIgbW9kaWZpZWQgZnJvbSAwIGluIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYCwgc28gdGhlIGZpZWxkIGlzIGFsd2F5cyBzZXQgdG8gMC4gVGhpcyBpcyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHRoZSBiZWhhdmlvciBiZWZvcmUgdGhlIHBhdGNoLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBjYW4gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGBwcmlvcml0eWAgdmFyaWFibGUgaW5pdGlhbGl6ZWQgdG8gMCBhbmQgcGFzc2VzIGl0IHRvIGBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlYCwgd2hlcmUgaXQgaXMgdXNlZCB0byBzZXQgdGhlIGBBSVJPSEFfRk9FX1FJRGAgZmllbGQuIEhvd2V2ZXIsIGBwcmlvcml0eWAgaXMgbmV2ZXIgbW9kaWZpZWQgZnJvbSAwIGluIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYCwgc28gdGhlIGZpZWxkIGlzIGFsd2F5cyBzZXQgdG8gMC4gVGhpcyBpcyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHRoZSBiZWhhdmlvciBiZWZvcmUgdGhlIHBhdGNoLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBjYW4gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowv5k9l[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-03 12:03:15 +0000 UTC FinishedAt: 2026-07-03 12:37:15 +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+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBgcHJpb3JpdHlgIHZhcmlhYmxlIGluaXRpYWxpemVkIHRvIDAgYW5kIHBhc3NlcyBpdCB0byBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAsIHdoZXJlIGl0IGlzIHVzZWQgdG8gc2V0IHRoZSBgQUlST0hBX0ZPRV9RSURgIGZpZWxkLiBIb3dldmVyLCBgcHJpb3JpdHlgIGlzIG5ldmVyIG1vZGlmaWVkIGZyb20gMCBpbiBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWAsIHNvIHRoZSBmaWVsZCBpcyBhbHdheXMgc2V0IHRvIDAuIFRoaXMgaXMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byB0aGUgYmVoYXZpb3IgYmVmb3JlIHRoZSBwYXRjaC4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgY2FuIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwOGU1YmQ1NWRkODY0Zjg3MjJlNmQ4MjQ3YjZmYzlkNWRkNGRhOWFlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMyAxMjozNTozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuaW5kZXggZTdjNzgyOTMwMDJhYmIuLmZkYjk3M2ZjNzc5YzgzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuQEAgLTMzMSw3ICYjNDM7MzMxLDcgQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRcdFx0XHRcdHN0cnVjdCBhaXJvaGFfZm9lX2VudHJ5ICpod2UsXG4gXHRcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB0eXBlLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgYWlyb2hhX2Zsb3dfZGF0YSAqZGF0YSxcbi1cdFx0XHRcdFx0aW50IGw0cHJvdG8pXG4mIzQzO1x0XHRcdFx0XHRpbnQgbDRwcm90bywgdTggcHJpb3JpdHkpXG4ge1xuIFx0dTMyIHFkYXRhID0gRklFTERfUFJFUChBSVJPSEFfRk9FX1NIQVBFUl9JRCwgMHg3ZiksIHBvcnRzX3BhZCwgdmFsO1xuIFx0aW50IHdsYW5fZXR5cGUgPSAtRUlOVkFMLCBkc2FfcG9ydCA9IGFpcm9oYV9nZXRfZHNhX3BvcnQoXHUwMDI2bmV0ZGV2KTtcbkBAIC0zODYsNyAmIzQzOzM4Niw5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0XHRcdCAqL1xuIFx0XHRcdGNoYW5uZWwgPSBkc2FfcG9ydCBcdTAwM2U9IDAgPyBkc2FfcG9ydCA6IHBvcnQtXHUwMDNlaWQ7XG4gXHRcdFx0Y2hhbm5lbCA9IGNoYW5uZWwgJSBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUztcbi1cdFx0XHRxZGF0YSB8PSBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfQ0hBTk5FTCwgY2hhbm5lbCk7XG4mIzQzO1x0XHRcdHByaW9yaXR5ID0gcHJpb3JpdHkgJSBBSVJPSEFfTlVNX1FPU19RVUVVRVM7XG4mIzQzO1x0XHRcdHFkYXRhIHw9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9DSEFOTkVMLCBjaGFubmVsKSB8XG4mIzQzO1x0XHRcdFx0IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIHByaW9yaXR5KTtcbiBcbiBcdFx0XHR2YWwgfD0gRklFTERfUFJFUChBSVJPSEFfRk9FX0lCMl9QU0VfUE9SVCwgcHNlX3BvcnQpIHxcbiBcdFx0XHQgICAgICAgQUlST0hBX0ZPRV9JQjJfUFNFX1FPUztcbkBAIC0xMDc5LDEwICYjNDM7MTA4MSwxMCBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbiBcdHN0cnVjdCBhaXJvaGFfZmxvd19kYXRhIGRhdGEgPSB7fTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpvZGV2ID0gTlVMTDtcbiBcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqYWN0O1xuJiM0MztcdHU4IGw0cHJvdG8gPSAwLCBwcmlvcml0eSA9IDA7XG4gXHRzdHJ1Y3QgYWlyb2hhX2ZvZV9lbnRyeSBod2U7XG4gXHRpbnQgZXJyLCBpLCBvZmZsb2FkX3R5cGU7XG4gXHR1MTYgYWRkcl90eXBlID0gMDtcbi1cdHU4IGw0cHJvdG8gPSAwO1xuIFxuIFx0aWYgKHJoYXNodGFibGVfbG9va3VwKFx1MDAyNmV0aC1cdTAwM2VmbG93X3RhYmxlLCBcdTAwMjZmLVx1MDAzZWNvb2tpZSxcbiBcdFx0XHQgICAgICBhaXJvaGFfZmxvd190YWJsZV9wYXJhbXMpKVxuQEAgLTExNzcsNyAmIzQzOzExNzksNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRlcnIgPSBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKGV0aCwgXHUwMDI2aHdlLCBvZGV2LCBvZmZsb2FkX3R5cGUsXG4tXHRcdFx0XHRcdCAgIFx1MDAyNmRhdGEsIGw0cHJvdG8pO1xuJiM0MztcdFx0XHRcdFx0ICAgXHUwMDI2ZGF0YSwgbDRwcm90bywgcHJpb3JpdHkpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYHByaW9yaXR5YCB2YXJpYWJsZSBpbml0aWFsaXplZCB0byAwIGFuZCBwYXNzZXMgaXQgdG8gYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgLCB3aGVyZSBpdCBpcyB1c2VkIHRvIHNldCB0aGUgYEFJUk9IQV9GT0VfUUlEYCBmaWVsZC4gSG93ZXZlciwgYHByaW9yaXR5YCBpcyBuZXZlciBtb2RpZmllZCBmcm9tIDAgaW4gYGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2VgLCBzbyB0aGUgZmllbGQgaXMgYWx3YXlzIHNldCB0byAwLiBUaGlzIGlzIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gdGhlIGJlaGF2aW9yIGJlZm9yZSB0aGUgcGF0Y2guIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwOGU1YmQ1NWRkODY0Zjg3MjJlNmQ4MjQ3YjZmYzlkNWRkNGRhOWFlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMyAxMjozNTozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jCmluZGV4IGU3Yzc4MjkzMDAyYWJiLi5mZGI5NzNmYzc3OWM4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jCkBAIC0zMzEsNyAmIzQzOzMzMSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLAogCQkJCQlzdHJ1Y3QgYWlyb2hhX2ZvZV9lbnRyeSAqaHdlLAogCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdHlwZSwKIAkJCQkJc3RydWN0IGFpcm9oYV9mbG93X2RhdGEgKmRhdGEsCi0JCQkJCWludCBsNHByb3RvKQomIzQzOwkJCQkJaW50IGw0cHJvdG8sIHU4IHByaW9yaXR5KQogewogCXUzMiBxZGF0YSA9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9TSEFQRVJfSUQsIDB4N2YpLCBwb3J0c19wYWQsIHZhbDsKIAlpbnQgd2xhbl9ldHlwZSA9IC1FSU5WQUwsIGRzYV9wb3J0ID0gYWlyb2hhX2dldF9kc2FfcG9ydCgmYW1wO25ldGRldik7CkBAIC0zODYsNyAmIzQzOzM4Niw5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLAogCQkJICovCiAJCQljaGFubmVsID0gZHNhX3BvcnQgJmd0Oz0gMCA/IGRzYV9wb3J0IDogcG9ydC0mZ3Q7aWQ7CiAJCQljaGFubmVsID0gY2hhbm5lbCAlIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTOwotCQkJcWRhdGEgfD0gRklFTERfUFJFUChBSVJPSEFfRk9FX0NIQU5ORUwsIGNoYW5uZWwpOwomIzQzOwkJCXByaW9yaXR5ID0gcHJpb3JpdHkgJSBBSVJPSEFfTlVNX1FPU19RVUVVRVM7CiYjNDM7CQkJcWRhdGEgfD0gRklFTERfUFJFUChBSVJPSEFfRk9FX0NIQU5ORUwsIGNoYW5uZWwpIHwKJiM0MzsJCQkJIEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIHByaW9yaXR5KTsKIAogCQkJdmFsIHw9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9JQjJfUFNFX1BPUlQsIHBzZV9wb3J0KSB8CiAJCQkgICAgICAgQUlST0hBX0ZPRV9JQjJfUFNFX1FPUzsKQEAgLTEwNzksMTAgJiM0MzsxMDgxLDEwIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLAogCXN0cnVjdCBhaXJvaGFfZmxvd19kYXRhIGRhdGEgPSB7fTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqb2RldiA9IE5VTEw7CiAJc3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICphY3Q7CiYjNDM7CXU4IGw0cHJvdG8gPSAwLCBwcmlvcml0eSA9IDA7CiAJc3RydWN0IGFpcm9oYV9mb2VfZW50cnkgaHdlOwogCWludCBlcnIsIGksIG9mZmxvYWRfdHlwZTsKIAl1MTYgYWRkcl90eXBlID0gMDsKLQl1OCBsNHByb3RvID0gMDsKIAogCWlmIChyaGFzaHRhYmxlX2xvb2t1cCgmYW1wO2V0aC0mZ3Q7Zmxvd190YWJsZSwgJmFtcDtmLSZndDtjb29raWUsCiAJCQkgICAgICBhaXJvaGFfZmxvd190YWJsZV9wYXJhbXMpKQpAQCAtMTE3Nyw3ICYjNDM7MTE3OSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVyciA9IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoZXRoLCAmYW1wO2h3ZSwgb2Rldiwgb2ZmbG9hZF90eXBlLAotCQkJCQkgICAmYW1wO2RhdGEsIGw0cHJvdG8pOwomIzQzOwkJCQkJICAgJmFtcDtkYXRhLCBsNHByb3RvLCBwcmlvcml0eSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGFpcm9oYV9wcGUuY2AgUGF0Y2g6IEEgUHJpb3JpdHkgT3ZlcnNpZ2h0PyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgYSBgdTggcHJpb3JpdHlgIHBhcmFtZXRlciBpbnRvIHRoZSBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAgZnVuY3Rpb24gd2l0aGluIHRoZSBgYWlyb2hhX3BwZS5jYCBkcml2ZXIuIFRoZSBvYnZpb3VzIGNoYW5nZSBpcyB0aGF0IHRoaXMgYHByaW9yaXR5YCB2YWx1ZSBpcyBub3cgYmVpbmcgdXNlZCB0byBzZXQgYEFJUk9IQV9GT0VfUUlEYCwgd2hpY2ggaXMgYSBrZXkgcGFyYW1ldGVyIGZvciBxdWV1aW5nL3ByaW9yaXRpemF0aW9uLiBUaGF0IG1ha2VzIHNlbnNlLCBnaXZpbmcgdXMgbW9yZSBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIHRyYWZmaWMuCgpCdXQgaGFuZyBvbuKApiBpbiBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWAsIHdoaWNoIGlzIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLCBJIHNlZSBgcHJpb3JpdHlgIGJlaW5nIGluaXRpYWxpemVkIHRvIDAuIEFuZCwgYXMgZmFyIGFzIEkgY2FuIHNlZSwgaXQmIzM5O3MgKm5ldmVyKiBtb2RpZmllZCBiZWZvcmUgYmVpbmcgcGFzc2VkIGRvd24gdG8gYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgLiBUaGF0IHNlZW1z4oCmIG9kZC4gSWYgdGhlIHByaW9yaXR5IGlzIGNvbnNpc3RlbnRseSAwLCB0aGUgbmV3IHBhcmFtZXRlciBpcyBlc3NlbnRpYWxseSBiZWluZyBpZ25vcmVkLCBvciBhY3RpbmcgYXMgYSBkZWZhdWx0IHdoaWNoIHNlZW1zIHVubmVjZXNzYXJ5LgoKQWxyaWdodCwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLiBJJiMzOTttIGdvaW5nIGJhY2sgdG8gdGhlIGNvZGUgYW5kIHJlYWRpbmcgaXQgYWdhaW4uIE9rYXksIHllcywgaGVyZSB3ZSBhcmU6IGluIHRoZSBkaWZmIGZvciBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWAsIGBwcmlvcml0eWAgaXMgZGVjbGFyZWQsIGJ1dCBpdOKAmXMgaW5pdGlhbGl6ZWQgYW5kIG5ldmVyIHVwZGF0ZWQuIEl04oCZcyBkZWZpbml0ZWx5IGJlaW5nIHBhc3NlZCBhcyAwLiBTbywgaXQgbG9va3MgbGlrZSB0aGlzIG5ldyBgcHJpb3JpdHlgIHBhcmFtZXRlciBpcyBiZWluZyBpbnRyb2R1Y2VkIGJ1dCBpc24mIzM5O3QgYWN0dWFsbHkgbGV2ZXJhZ2VkIHdpdGhpbiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBUaGlzIG5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSXQgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBidWcgb3IgaW5jb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiwgb3IgcGVyaGFwcyB0aGlzIHBhcmFtZXRlciBpcyBpbnRlbmRlZCB0byBiZSBzZXQgZnJvbSBhbiBleHRlcm5hbCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmlvcml0eSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0zMzA9c3RhdGljIGludCBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zMzMtXHRcdFx0XHRcdHN0cnVjdCBhaXJvaGFfZmxvd19kYXRhICpkYXRhLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozMzQ6XHRcdFx0XHRcdGludCBsNHByb3RvLCB1OCBwcmlvcml0eSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzM1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTM4OC1cdFx0XHRjaGFubmVsID0gY2hhbm5lbCAlIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozODk6XHRcdFx0cHJpb3JpdHkgPSBwcmlvcml0eSAlIEFJUk9IQV9OVU1fUU9TX1FVRVVFUztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzkwLVx0XHRcdHFkYXRhIHw9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9DSEFOTkVMLCBjaGFubmVsKSB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjM5MTpcdFx0XHRcdCBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfUUlELCBwcmlvcml0eSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTM5Mi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTEwNzY9c3RhdGljIGludCBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMDgzLVx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICphY3Q7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjEwODQ6XHR1OCBsNHByb3RvID0gMCwgcHJpb3JpdHkgPSAwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMDg1LVx0c3RydWN0IGFpcm9oYV9mb2VfZW50cnkgaHdlO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTE4MS1cdGVyciA9IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoZXRoLCBcdTAwMjZod2UsIG9kZXYsIG9mZmxvYWRfdHlwZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTE4MjpcdFx0XHRcdFx0ICAgXHUwMDI2ZGF0YSwgbDRwcm90bywgcHJpb3JpdHkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMTgzLVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTYwCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgUHJpb3JpdHkgRmxhdyBpbiBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKioKClJpZ2h0LCBzbyBgcHJpb3JpdHlgIGlzIGluaXRpYWxseSBzZXQgdG8gemVybyBhbmQsIGF0IGZpcnN0IGdsYW5jZSBpbiBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWAsIGl0IGRvZXNuJiMzOTt0IGFwcGVhciB0byBiZSBtb2RpZmllZC4gVGhhdCByYWlzZXMgYSByZWQgZmxhZy4gWmVybyBwcmlvcml0eSBpcyB1c3VhbGx5IGEgcHJldHR5IGxvdyB2YWx1ZSwgb2Z0ZW4gbWVhbmluZyBsb3dlc3Qgc2NoZWR1bGluZyBwcmVjZWRlbmNlLiBJdCBjb3VsZCBsZWFkIHRvIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGlmIHRoaXMgb2ZmbG9hZCBpcyBjcml0aWNhbC4gQmVmb3JlIEkganVtcCB0byBjb25jbHVzaW9ucyB0aG91Z2gsIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIEnigJltIGdvaW5nIHRvIHF1aWNrbHkgc3RlcCB0aHJvdWdoIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYCBhZ2FpbiBmcm9tIHRvcCB0byBib3R0b20sIGNhcmVmdWxseSBjaGVja2luZyBmb3IgYW55IHBvdGVudGlhbCBtb2RpZmljYXRpb25zIHRvIHRoZSBgcHJpb3JpdHlgIHZhcmlhYmxlIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhhdCBmdW5jdGlvbiDigJMgZXZlbiBpZiBpdOKAmXMgdGhyb3VnaCBhIHBvaW50ZXIgb3Igc29tZSBpbmRpcmVjdCBtZWNoYW5pc20uIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gYmVmb3JlIEkgcmFpc2UgdGhpcyBhcyBhbiBpc3N1ZS4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNzY6XHRzdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbjEwNzc6XHRcdFx0XHRcdFx0ICAgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmYpXG4xMDc4Olx0e1xuMTA3OTpcdFx0c3RydWN0IGZsb3dfcnVsZSAqcnVsZSA9IGZsb3dfY2xzX29mZmxvYWRfZmxvd19ydWxlKGYpO1xuMTA4MDpcdFx0c3RydWN0IGFpcm9oYV9mbG93X3RhYmxlX2VudHJ5ICplO1xuMTA4MTpcdFx0c3RydWN0IGFpcm9oYV9mbG93X2RhdGEgZGF0YSA9IHt9O1xuMTA4MjpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm9kZXYgPSBOVUxMO1xuMTA4MzpcdFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICphY3Q7XG4xMDg0Olx0XHR1OCBsNHByb3RvID0gMCwgcHJpb3JpdHkgPSAwO1xuMTA4NTpcdFx0c3RydWN0IGFpcm9oYV9mb2VfZW50cnkgaHdlO1xuMTA4NjpcdFx0aW50IGVyciwgaSwgb2ZmbG9hZF90eXBlO1xuMTA4NzpcdFx0dTE2IGFkZHJfdHlwZSA9IDA7XG4xMDg4Olx0XG4xMDg5Olx0XHRpZiAocmhhc2h0YWJsZV9sb29rdXAoXHUwMDI2ZXRoLVx1MDAzZWZsb3dfdGFibGUsIFx1MDAyNmYtXHUwMDNlY29va2llLFxuMTA5MDpcdFx0XHRcdCAgICAgIGFpcm9oYV9mbG93X3RhYmxlX3BhcmFtcykpXG4xMDkxOlx0XHRcdHJldHVybiAtRUVYSVNUO1xuMTA5MjpcdFxuMTA5MzpcdFx0aWYgKCFmbG93X3J1bGVfbWF0Y2hfa2V5KHJ1bGUsIEZMT1dfRElTU0VDVE9SX0tFWV9NRVRBKSlcbjEwOTQ6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTA5NTpcdFxuMTA5NjpcdFx0aWYgKGZsb3dfcnVsZV9tYXRjaF9rZXkocnVsZSwgRkxPV19ESVNTRUNUT1JfS0VZX0NPTlRST0wpKSB7XG4xMDk3Olx0XHRcdHN0cnVjdCBmbG93X21hdGNoX2NvbnRyb2wgbWF0Y2g7XG4xMDk4Olx0XG4xMDk5Olx0XHRcdGZsb3dfcnVsZV9tYXRjaF9jb250cm9sKHJ1bGUsIFx1MDAyNm1hdGNoKTtcbjExMDA6XHRcdFx0YWRkcl90eXBlID0gbWF0Y2gua2V5LVx1MDAzZWFkZHJfdHlwZTtcbjExMDE6XHRcdFx0aWYgKGZsb3dfcnVsZV9oYXNfY29udHJvbF9mbGFncyhtYXRjaC5tYXNrLVx1MDAzZWZsYWdzLFxuMTEwMjpcdFx0XHRcdFx0XHRcdGYtXHUwMDNlY29tbW9uLmV4dGFjaykpXG4xMTAzOlx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTEwNDpcdFx0fSBlbHNlIHtcbjExMDU6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTEwNjpcdFx0fVxuMTEwNzpcdFxuMTEwODpcdFx0aWYgKGZsb3dfcnVsZV9tYXRjaF9rZXkocnVsZSwgRkxPV19ESVNTRUNUT1JfS0VZX0JBU0lDKSkge1xuMTEwOTpcdFx0XHRzdHJ1Y3QgZmxvd19tYXRjaF9iYXNpYyBtYXRjaDtcbjExMTA6XHRcbjExMTE6XHRcdFx0Zmxvd19ydWxlX21hdGNoX2Jhc2ljKHJ1bGUsIFx1MDAyNm1hdGNoKTtcbjExMTI6XHRcdFx0bDRwcm90byA9IG1hdGNoLmtleS1cdTAwM2VpcF9wcm90bztcbjExMTM6XHRcdH0gZWxzZSB7XG4xMTE0Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjExMTU6XHRcdH1cbjExMTY6XHRcbjExMTc6XHRcdHN3aXRjaCAoYWRkcl90eXBlKSB7XG4xMTE4Olx0XHRjYXNlIDA6XG4xMTE5Olx0XHRcdG9mZmxvYWRfdHlwZSA9IFBQRV9QS1RfVFlQRV9CUklER0U7XG4xMTIwOlx0XHRcdGlmIChmbG93X3J1bGVfbWF0Y2hfa2V5KHJ1bGUsIEZMT1dfRElTU0VDVE9SX0tFWV9FVEhfQUREUlMpKSB7XG4xMTIxOlx0XHRcdFx0c3RydWN0IGZsb3dfbWF0Y2hfZXRoX2FkZHJzIG1hdGNoO1xuMTEyMjpcdFxuMTEyMzpcdFx0XHRcdGZsb3dfcnVsZV9tYXRjaF9ldGhfYWRkcnMocnVsZSwgXHUwMDI2bWF0Y2gpO1xuMTEyNDpcdFx0XHRcdG1lbWNweShkYXRhLmV0aC5oX2Rlc3QsIG1hdGNoLmtleS1cdTAwM2Vkc3QsIEVUSF9BTEVOKTtcbjExMjU6XHRcdFx0XHRtZW1jcHkoZGF0YS5ldGguaF9zb3VyY2UsIG1hdGNoLmtleS1cdTAwM2VzcmMsIEVUSF9BTEVOKTtcbjExMjY6XHRcdFx0fSBlbHNlIHtcbjExMjc6XHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMTI4Olx0XHRcdH1cbjExMjk6XHRcdFx0YnJlYWs7XG4xMTMwOlx0XHRjYXNlIEZMT1dfRElTU0VDVE9SX0tFWV9JUFY0X0FERFJTOlxuMTEzMTpcdFx0XHRvZmZsb2FkX3R5cGUgPSBQUEVfUEtUX1RZUEVfSVBWNF9ITkFQVDtcbjExMzI6XHRcdFx0YnJlYWs7XG4xMTMzOlx0XHRjYXNlIEZMT1dfRElTU0VDVE9SX0tFWV9JUFY2X0FERFJTOlxuMTEzNDpcdFx0XHRvZmZsb2FkX3R5cGUgPSBQUEVfUEtUX1RZUEVfSVBWNl9ST1VURV81VDtcbjExMzU6XHRcdFx0YnJlYWs7XG4xMTM2Olx0XHRkZWZhdWx0OlxuMTEzNzpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMTM4Olx0XHR9XG4xMTM5Olx0XG4xMTQwOlx0XHRmbG93X2FjdGlvbl9mb3JfZWFjaChpLCBhY3QsIFx1MDAyNnJ1bGUtXHUwMDNlYWN0aW9uKSB7XG4xMTQxOlx0XHRcdHN3aXRjaCAoYWN0LVx1MDAzZWlkKSB7XG4xMTQyOlx0XHRcdGNhc2UgRkxPV19BQ1RJT05fTUFOR0xFOlxuMTE0MzpcdFx0XHRcdGlmIChvZmZsb2FkX3R5cGUgPT0gUFBFX1BLVF9UWVBFX0JSSURHRSlcbjExNDQ6XHRcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjExNDU6XHRcbjExNDY6XHRcdFx0XHRpZiAoYWN0LVx1MDAzZW1hbmdsZS5odHlwZSA9PSBGTE9XX0FDVF9NQU5HTEVfSERSX1RZUEVfRVRIKVxuMTE0NzpcdFx0XHRcdFx0YWlyb2hhX3BwZV9mbG93X21hbmdsZV9ldGgoYWN0LCBcdTAwMjZkYXRhLmV0aCk7XG4xMTQ4Olx0XHRcdFx0YnJlYWs7XG4xMTQ5Olx0XHRcdGNhc2UgRkxPV19BQ1RJT05fUkVESVJFQ1Q6XG4xMTUwOlx0XHRcdFx0b2RldiA9IGFjdC1cdTAwM2VkZXY7XG4xMTUxOlx0XHRcdFx0YnJlYWs7XG4xMTUyOlx0XHRcdGNhc2UgRkxPV19BQ1RJT05fQ1NVTTpcbjExNTM6XHRcdFx0XHRicmVhaztcbjExNTQ6XHRcdFx0Y2FzZSBGTE9XX0FDVElPTl9WTEFOX1BVU0g6XG4xMTU1Olx0XHRcdFx0aWYgKGRhdGEudmxhbi5udW0gPT0gMiB8fFxuMTE1NjpcdFx0XHRcdCAgICBhY3QtXHUwMDNldmxhbi5wcm90byAhPSBodG9ucyhFVEhfUF84MDIxUSkpXG4xMTU3Olx0XHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMTU4Olx0XG4xMTU5Olx0XHRcdFx0ZGF0YS52bGFuLmhkcltkYXRhLnZsYW4ubnVtXS5pZCA9IGFjdC1cdTAwM2V2bGFuLnZpZDtcbjExNjA6XHRcdFx0XHRkYXRhLnZsYW4uaGRyW2RhdGEudmxhbi5udW1dLnByb3RvID0gYWN0LVx1MDAzZXZsYW4ucHJvdG87XG4xMTYxOlx0XHRcdFx0ZGF0YS52bGFuLm51bSYjNDM7JiM0Mzs7XG4xMTYyOlx0XHRcdFx0YnJlYWs7XG4xMTYzOlx0XHRcdGNhc2UgRkxPV19BQ1RJT05fVkxBTl9QT1A6XG4xMTY0Olx0XHRcdFx0YnJlYWs7XG4xMTY1Olx0XHRcdGNhc2UgRkxPV19BQ1RJT05fUFBQT0VfUFVTSDpcbjExNjY6XHRcdFx0XHRpZiAoZGF0YS5wcHBvZS5udW0gPT0gMSB8fCBkYXRhLnZsYW4ubnVtID09IDIpXG4xMTY3Olx0XHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMTY4Olx0XG4xMTY5Olx0XHRcdFx0ZGF0YS5wcHBvZS5zaWQgPSBhY3QtXHUwMDNlcHBwb2Uuc2lkO1xuMTE3MDpcdFx0XHRcdGRhdGEucHBwb2UubnVtJiM0MzsmIzQzOztcbjExNzE6XHRcdFx0XHRicmVhaztcbjExNzI6XHRcdFx0ZGVmYXVsdDpcbjExNzM6XHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMTc0Olx0XHRcdH1cbjExNzU6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTAwCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhZG9wdGluZyB0aGUgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlIGFzIHJlcXVlc3RlZCwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LgoKKipBbmFseXppbmcgRnVuY3Rpb24gSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgSSYjMzk7dmUgZ290IHRoZSBnZW5lcmFsIGNvbnRleHQgbG9ja2VkIGluLiBOb3csIEkgbmVlZCB0byB6b29tIGluIGFuZCBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBkZXRhaWwuIEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIGxvZ2ljIGFuZCBncmFzcCBob3cgdGhpcyBmdW5jdGlvbiBhY2hpZXZlcyBpdHMgcHVycG9zZS4gVGhlIGJpZyBwaWN0dXJlIGlzIHNldCwgc28gbGV0JiMzOTtzIHBhcnNlIHRocm91Z2ggdGhlIGxpbmVzIGFuZCB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIExldCYjMzk7cyBzZWUgaG93IHRoZSBpbmRpdmlkdWFsIGNvbXBvbmVudHMgZml0IHRvZ2V0aGVyIHRvIHByb2R1Y2UgdGhlIGRlc2lyZWQgb3V0cHV0LCBvciBpbiB0aGlzIGNhc2UsIGNvbnRpbnVlIG91ciB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNzY6XHRcbjExNzc6XHRcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihkYXRhLmV0aC5oX3NvdXJjZSkgfHxcbjExNzg6XHRcdCAgICAhaXNfdmFsaWRfZXRoZXJfYWRkcihkYXRhLmV0aC5oX2Rlc3QpKVxuMTE3OTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjExODA6XHRcbjExODE6XHRcdGVyciA9IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoZXRoLCBcdTAwMjZod2UsIG9kZXYsIG9mZmxvYWRfdHlwZSxcbjExODI6XHRcdFx0XHRcdFx0ICAgXHUwMDI2ZGF0YSwgbDRwcm90bywgcHJpb3JpdHkpO1xuMTE4MzpcdFx0aWYgKGVycilcbjExODQ6XHRcdFx0cmV0dXJuIGVycjtcbjExODU6XHRcbjExODY6XHRcdGlmIChmbG93X3J1bGVfbWF0Y2hfa2V5KHJ1bGUsIEZMT1dfRElTU0VDVE9SX0tFWV9QT1JUUykpIHtcbjExODc6XHRcdFx0c3RydWN0IGZsb3dfbWF0Y2hfcG9ydHMgcG9ydHM7XG4xMTg4Olx0XG4xMTg5Olx0XHRcdGlmIChvZmZsb2FkX3R5cGUgPT0gUFBFX1BLVF9UWVBFX0JSSURHRSlcbjExOTA6XHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMTkxOlx0XG4xMTkyOlx0XHRcdGZsb3dfcnVsZV9tYXRjaF9wb3J0cyhydWxlLCBcdTAwMjZwb3J0cyk7XG4xMTkzOlx0XHRcdGRhdGEuc3JjX3BvcnQgPSBwb3J0cy5rZXktXHUwMDNlc3JjO1xuMTE5NDpcdFx0XHRkYXRhLmRzdF9wb3J0ID0gcG9ydHMua2V5LVx1MDAzZWRzdDtcbjExOTU6XHRcdH0gZWxzZSBpZiAob2ZmbG9hZF90eXBlICE9IFBQRV9QS1RfVFlQRV9CUklER0UpIHtcbjExOTY6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTE5NzpcdFx0fVxuMTE5ODpcdFxuMTE5OTpcdFx0aWYgKGFkZHJfdHlwZSA9PSBGTE9XX0RJU1NFQ1RPUl9LRVlfSVBWNF9BRERSUykge1xuMTIwMDpcdFx0XHRzdHJ1Y3QgZmxvd19tYXRjaF9pcHY0X2FkZHJzIGFkZHJzO1xuMTIwMTpcdFxuMTIwMjpcdFx0XHRmbG93X3J1bGVfbWF0Y2hfaXB2NF9hZGRycyhydWxlLCBcdTAwMjZhZGRycyk7XG4xMjAzOlx0XHRcdGRhdGEudjQuc3JjX2FkZHIgPSBhZGRycy5rZXktXHUwMDNlc3JjO1xuMTIwNDpcdFx0XHRkYXRhLnY0LmRzdF9hZGRyID0gYWRkcnMua2V5LVx1MDAzZWRzdDtcbjEyMDU6XHRcdFx0YWlyb2hhX3BwZV9mb2VfZW50cnlfc2V0X2lwdjRfdHVwbGUoXHUwMDI2aHdlLCBcdTAwMjZkYXRhLCBmYWxzZSk7XG4xMjA2Olx0XHR9XG4xMjA3Olx0XG4xMjA4Olx0XHRpZiAoYWRkcl90eXBlID09IEZMT1dfRElTU0VDVE9SX0tFWV9JUFY2X0FERFJTKSB7XG4xMjA5Olx0XHRcdHN0cnVjdCBmbG93X21hdGNoX2lwdjZfYWRkcnMgYWRkcnM7XG4xMjEwOlx0XG4xMjExOlx0XHRcdGZsb3dfcnVsZV9tYXRjaF9pcHY2X2FkZHJzKHJ1bGUsIFx1MDAyNmFkZHJzKTtcbjEyMTI6XHRcbjEyMTM6XHRcdFx0ZGF0YS52Ni5zcmNfYWRkciA9IGFkZHJzLmtleS1cdTAwM2VzcmM7XG4xMjE0Olx0XHRcdGRhdGEudjYuZHN0X2FkZHIgPSBhZGRycy5rZXktXHUwMDNlZHN0O1xuMTIxNTpcdFx0XHRhaXJvaGFfcHBlX2ZvZV9lbnRyeV9zZXRfaXB2Nl90dXBsZShcdTAwMjZod2UsIFx1MDAyNmRhdGEpO1xuMTIxNjpcdFx0fVxuMTIxNzpcdFxuMTIxODpcdFx0Zmxvd19hY3Rpb25fZm9yX2VhY2goaSwgYWN0LCBcdTAwMjZydWxlLVx1MDAzZWFjdGlvbikge1xuMTIxOTpcdFx0XHRpZiAoYWN0LVx1MDAzZWlkICE9IEZMT1dfQUNUSU9OX01BTkdMRSlcbjEyMjA6XHRcdFx0XHRjb250aW51ZTtcbjEyMjE6XHRcbjEyMjI6XHRcdFx0aWYgKG9mZmxvYWRfdHlwZSA9PSBQUEVfUEtUX1RZUEVfQlJJREdFKVxuMTIyMzpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjEyMjQ6XHRcbjEyMjU6XHRcdFx0c3dpdGNoIChhY3QtXHUwMDNlbWFuZ2xlLmh0eXBlKSB7XG4xMjI2Olx0XHRcdGNhc2UgRkxPV19BQ1RfTUFOR0xFX0hEUl9UWVBFX1RDUDpcbjEyMjc6XHRcdFx0Y2FzZSBGTE9XX0FDVF9NQU5HTEVfSERSX1RZUEVfVURQOlxuMTIyODpcdFx0XHRcdGVyciA9IGFpcm9oYV9wcGVfZmxvd19tYW5nbGVfcG9ydHMoYWN0LCBcdTAwMjZkYXRhKTtcbjEyMjk6XHRcdFx0XHRicmVhaztcbjEyMzA6XHRcdFx0Y2FzZSBGTE9XX0FDVF9NQU5HTEVfSERSX1RZUEVfSVA0OlxuMTIzMTpcdFx0XHRcdGVyciA9IGFpcm9oYV9wcGVfZmxvd19tYW5nbGVfaXB2NChhY3QsIFx1MDAyNmRhdGEpO1xuMTIzMjpcdFx0XHRcdGJyZWFrO1xuMTIzMzpcdFx0XHRjYXNlIEZMT1dfQUNUX01BTkdMRV9IRFJfVFlQRV9FVEg6XG4xMjM0Olx0XHRcdFx0LyogaGFuZGxlZCBlYXJsaWVyICovXG4xMjM1Olx0XHRcdFx0YnJlYWs7XG4xMjM2Olx0XHRcdGRlZmF1bHQ6XG4xMjM3Olx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTIzODpcdFx0XHR9XG4xMjM5Olx0XG4xMjQwOlx0XHRcdGlmIChlcnIpXG4xMjQxOlx0XHRcdFx0cmV0dXJuIGVycjtcbjEyNDI6XHRcdH1cbjEyNDM6XHRcbjEyNDQ6XHRcdGlmIChhZGRyX3R5cGUgPT0gRkxPV19ESVNTRUNUT1JfS0VZX0lQVjRfQUREUlMpIHtcbjEyNDU6XHRcdFx0ZXJyID0gYWlyb2hhX3BwZV9mb2VfZW50cnlfc2V0X2lwdjRfdHVwbGUoXHUwMDI2aHdlLCBcdTAwMjZkYXRhLCB0cnVlKTtcbjEyNDY6XHRcdFx0aWYgKGVycilcbjEyNDc6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMTI0ODpcdFx0fVxuMTI0OTpcdFxuMTI1MDpcdFx0ZSA9IGt6YWxsb2Nfb2JqKCplKTtcbjEyNTE6XHRcdGlmICghZSlcbjEyNTI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xMjUzOlx0XG4xMjU0Olx0XHRlLVx1MDAzZWNvb2tpZSA9IGYtXHUwMDNlY29va2llO1xuMTI1NTpcdFx0bWVtY3B5KFx1MDAyNmUtXHUwMDNlZGF0YSwgXHUwMDI2aHdlLCBzaXplb2YoZS1cdTAwM2VkYXRhKSk7XG4xMjU2Olx0XG4xMjU3Olx0XHRlcnIgPSBhaXJvaGFfcHBlX2ZvZV9mbG93X2NvbW1pdF9lbnRyeShldGgtXHUwMDNlcHBlLCBlKTtcbjEyNTg6XHRcdGlmIChlcnIpXG4xMjU5Olx0XHRcdGdvdG8gZnJlZV9lbnRyeTtcbjEyNjA6XHRcbjEyNjE6XHRcdGVyciA9IHJoYXNodGFibGVfaW5zZXJ0X2Zhc3QoXHUwMDI2ZXRoLVx1MDAzZWZsb3dfdGFibGUsIFx1MDAyNmUtXHUwMDNlbm9kZSxcbjEyNjI6XHRcdFx0XHRcdCAgICAgYWlyb2hhX2Zsb3dfdGFibGVfcGFyYW1zKTtcbjEyNjM6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4xMjY0Olx0XHRcdGdvdG8gcmVtb3ZlX2ZvZV9lbnRyeTtcbjEyNjU6XHRcbjEyNjY6XHRcdHJldHVybiAwO1xuMTI2NzpcdFxuMTI2ODpcdHJlbW92ZV9mb2VfZW50cnk6XG4xMjY5Olx0XHRhaXJvaGFfcHBlX2ZvZV9mbG93X3JlbW92ZV9lbnRyeShldGgtXHUwMDNlcHBlLCBlKTtcbjEyNzA6XHRmcmVlX2VudHJ5OlxuMTI3MTpcdFx0a2ZyZWUoZSk7XG4xMjcyOlx0XG4xMjczOlx0XHRyZXR1cm4gZXJyO1xuMTI3NDpcdH1cbjEyNzU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjI4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogOTk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUFBFIEZsb3cgT2ZmbG9hZCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZy4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2VgIGZ1bmN0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgdGhlIGBwcmlvcml0eWAgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQgdG8gMCBhbmQsIGF0IGZpcnN0IGdsYW5jZSwgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSBtb2RpZmllZCBhbnl3aGVyZSB3aXRoaW4gdGhlIGZ1bmN0aW9uIGl0c2VsZi4gIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCwgdGhvdWdoLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgbW9yZSBjbG9zZWx5IHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiAgT2theSwgSSBzZWUgaXQmIzM5O3MgZGVjbGFyZWQgYW5kIGluaXRpYWxpemVkIGhlcmU6IGB1OCBsNHByb3RvID0gMCwgcHJpb3JpdHkgPSAwO2AuIFRoZW4gaXQmIzM5O3MgcGFzc2VkIHRvIGBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlYC4uLiBidXQgaXQmIzM5O3MgcGFzc2VkIGJ5IHZhbHVlLCBgdTggcHJpb3JpdHlgLiBTbywgYW55IGNoYW5nZXMgaW5zaWRlIHRoYXQgZnVuY3Rpb24gd29uJiMzOTt0IHByb3BhZ2F0ZSBiYWNrLiBUaGlzIHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSBhbHdheXMgMCBhdCB0aGlzIHN0YWdlLgoKSWYgYHByaW9yaXR5YCBpcyBhbHdheXMgemVybywgZG9lcyB0aGlzIHBhdGNoIGV2ZW4gZG8gYW55dGhpbmcgbmV3PyBJdCBzZWVtcyB1bmxpa2VseS4gIEkgbmVlZCB0byB0cmFjZSB3aGVyZSBpdCAqY291bGQqIGJlIGNoYW5nZWQuIEkgbmVlZCB0byB0aGluayBhYm91dCBob3cgdGhpcyBgcHJpb3JpdHlgIHZhbHVlICpjb3VsZCogYmUgc2V0LiBJdCBzZWVtcyBsaWtlIHRoZSBjcml0aWNhbCBwaWVjZSBoZXJlIGlzIHRoZSBgZmxvd19hY3Rpb25fZm9yX2VhY2hgIGxvb3AuICBMZXQmIzM5O3Mgc2VlLgoKSSBzZWUgdGhlcmUmIzM5O3MgYSBsb29wLCBsb29raW5nIGF0IGBydWxlLSZndDthY3Rpb25gLiAgSGVyZSBpdCBpcy4gSSYjMzk7bSBnb2luZyB0aHJvdWdoIHRoZSBjYXNlcy4uLiBJIHNlZSBgRkxPV19BQ1RJT05fTUFOR0xFYCwgYEZMT1dfQUNUSU9OX1JFRElSRUNUYCwgYEZMT1dfQUNUSU9OX0NTVU1gLCBhbmQgc28gb24uCgpXYWl0LCBpcyBgRkxPV19BQ1RJT05fUFJJT1JJVFlgICpoYW5kbGVkKiBpbiB0aGlzIGxvb3A/IEkgZG9uJiMzOTt0IHNlZSBpdCEgSXQmIzM5O3Mgbm90IGxpc3RlZCEgIEkgbmVlZCB0byBjaGVjayB0aGUgb3JpZ2luYWwgY29kZSB0byBzZWUgaWYgdGhlcmUgd2FzIGEgZGlmZmVyZW5jZS4gIEkmIzM5O20gZ29pbmcgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG9yaWdpbmFsIGNvZGUgaGFuZGxlcyB0aGlzLiBObywgaXQgaXNuJiMzOTt0LiBTbyB0aGF0IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGlzIGFsd2F5cyBpbml0aWFsaXplZCB0byAwLgoKSWYgYHByaW9yaXR5YCAqaXMqIGFsd2F5cyB6ZXJvLCB0aGVuIGFueSBzdWJzZXF1ZW50IG9wZXJhdGlvbiBsaWtlIGBwcmlvcml0eSA9IHByaW9yaXR5ICUgQUlST0hBX05VTV9RT1NfUVVFVUVTO2AgaXMgc2ltcGxpZmllZCB0byBgMCAlIEFJUk9IQV9OVU1fUU9TX1FVRVVFU2AsIHdoaWNoIGlzIGNsZWFybHkgYWx3YXlzIHplcm8uIE9rYXksIGFuZCB0aGVuIGBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfUUlELCBwcmlvcml0eSlgIGJlY29tZXMgYEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIDApYC4KCk5vdywgdGhlIHRoaW5nIHRoYXQmIzM5O3MgaW1wb3J0YW50IGhlcmUgaXMgdGhhdCBgQUlST0hBX0ZPRV9RSURgIGlzIGEgKm1hc2sqLiBJIG5lZWQgdG8gZmluZCBpdHMgdmFsdWUuIFRoYXQgd2lsbCB0ZWxsIG1lIGV4YWN0bHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FJUk9IQV9GT0VfUUlEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oPTI4Nj1zdHJ1Y3QgYWlyb2hhX2ZvZV9tYWNfaW5mbyB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaC0zMjItI2RlZmluZSBBSVJPSEFfRk9FX0NIQU5ORUxcdFx0XHRHRU5NQVNLKDE1LCAxMSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmg6MzIzOiNkZWZpbmUgQUlST0hBX0ZPRV9RSURcdFx0XHRcdEdFTk1BU0soMTAsIDgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oLTMyNC0jZGVmaW5lIEFJUk9IQV9GT0VfRFBJXHRcdFx0XHRCSVQoNylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTMzMD1zdGF0aWMgaW50IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTM5MC1cdFx0XHRxZGF0YSB8PSBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfQ0hBTk5FTCwgY2hhbm5lbCkgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozOTE6XHRcdFx0XHQgRklFTERfUFJFUChBSVJPSEFfRk9FX1FJRCwgcHJpb3JpdHkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zOTItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz02MjE9c3RhdGljIHZvaWQgYWlyb2hhX3BwZV9mb2VfZmxvd19zdGF0c191cGRhdGUoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTY2MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6NjYxOlx0dmFsID0gRklFTERfR0VUKEFJUk9IQV9GT0VfQ0hBTk5FTCB8IEFJUk9IQV9GT0VfUUlELCAqZGF0YSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTY2Mi1cdCpkYXRhID0gKCpkYXRhIFx1MDAyNiB+QUlST0hBX0ZPRV9BQ1REUCkgfFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzAxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHByaW9yaXR5YCBBcmd1bWVudCBpbiBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAqKgoKT2theSwgc28gYHByaW9yaXR5YCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdmVyaWZ5IHdoZXRoZXIgdGhhdCBhcmd1bWVudCBpcyBiZWluZyBtb2RpZmllZCBpbnNpZGUgdGhlIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYCBmdW5jdGlvbiBpdHNlbGYuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlIHZhbHVlIHBhc3NlZCBpc24mIzM5O3QgYmVpbmcgb3ZlcndyaXR0ZW4gb3IgY2hhbmdlZC4KCkxldCYjMzk7cyBsb29rIGF0IHRoZSBwcm92aWRlZCBkaWZmIGZvciBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWAuIFNjYW5uaW5nIHRocm91Z2ggdGhlIGNvZGUsIEkgc2VlIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uOiB0aGVyZSYjMzk7cyBhbiBhZGRpdGlvbiBvZiBgcHJpb3JpdHlgIGFzIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAuIExvb2tpbmcgYXQgdGhlIGRpZmYsIEkgY2FuIGNvbmZpcm0gdGhhdCBgcHJpb3JpdHlgIGlzICpub3QqIGJlaW5nIG1vZGlmaWVkIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBJdCYjMzk7cyBpbml0aWFsaXplZCwgYnV0IG5vdCBjaGFuZ2VkIGJlZm9yZSBiZWluZyBwYXNzZWQuCgpHaXZlbiB0aGlzLCBJIGhhdmUgdG8gY29uc2lkZXIgd2hldGhlciB0aGVyZSYjMzk7cyBhbm90aGVyIHJlbGF0ZWQgcGF0Y2ggb3IgaWYgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIEkmIzM5O20gbWlzc2luZyB3aXRoaW4gdGhlIGN1cnJlbnQgY29kZSBjb250ZXh0LCBzdWNoIGFzIGEgY2FsbCB0byBhbm90aGVyIGZ1bmN0aW9uIGluIHRoZSBwYXRjaCwgb3IgaWYgdGhlIGxvZ2ljIGZsb3cgYWZmZWN0cyB0aGF0IGBwcmlvcml0eWAgdmFsdWUuIEkmIzM5O2xsIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaCB0byBjb25maXJtIHRoZSBhcmd1bWVudCBpcyBiZWluZyB1c2VkIGFzIGludGVuZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmlvcml0eSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0zMzA9c3RhdGljIGludCBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zMzMtXHRcdFx0XHRcdHN0cnVjdCBhaXJvaGFfZmxvd19kYXRhICpkYXRhLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozMzQ6XHRcdFx0XHRcdGludCBsNHByb3RvLCB1OCBwcmlvcml0eSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzM1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTM4OC1cdFx0XHRjaGFubmVsID0gY2hhbm5lbCAlIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozODk6XHRcdFx0cHJpb3JpdHkgPSBwcmlvcml0eSAlIEFJUk9IQV9OVU1fUU9TX1FVRVVFUztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzkwLVx0XHRcdHFkYXRhIHw9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9DSEFOTkVMLCBjaGFubmVsKSB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjM5MTpcdFx0XHRcdCBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfUUlELCBwcmlvcml0eSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTM5Mi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTEwNzY9c3RhdGljIGludCBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMDgzLVx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICphY3Q7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjEwODQ6XHR1OCBsNHByb3RvID0gMCwgcHJpb3JpdHkgPSAwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMDg1LVx0c3RydWN0IGFpcm9oYV9mb2VfZW50cnkgaHdlO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTE4MS1cdGVyciA9IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoZXRoLCBcdTAwMjZod2UsIG9kZXYsIG9mZmxvYWRfdHlwZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTE4MjpcdFx0XHRcdFx0ICAgXHUwMDI2ZGF0YSwgbDRwcm90bywgcHJpb3JpdHkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMTgzLVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMzEKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4KCioqQW5hbHl6aW5nIHRoZSBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWAgRnVuY3Rpb24qKgoKSG1tLCBob2xkIG9uIGEgc2Vjb25kLi4uIGlzIGBwcmlvcml0eWAgYWN0dWFsbHkgZ2V0dGluZyBtb2RpZmllZCAqaW5zaWRlKiBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWA/IFRoYXQmIzM5O3Mgbm90IHdoYXQgSSBpbml0aWFsbHkgZXhwZWN0ZWQuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhpcy4gTGV0IG1lIGp1c3QgcXVpY2tseSBnbyBiYWNrIGFuZCB0aG9yb3VnaGx5IHJldmlldyB0aGF0IGBmbG93X2FjdGlvbl9mb3JfZWFjaGAgbG9vcCBhZ2Fpbi4gSSBwcm9iYWJseSBicmVlemVkIHRocm91Z2ggaXQgdG9vIHF1aWNrbHkgdGhlIGZpcnN0IHRpbWUgYW5kIG1pc3NlZCBzb21ldGhpbmcgc3VidGxlIGFib3V0IGhvdyBgcHJpb3JpdHlgIGlzIGJlaW5nIGhhbmRsZWQgd2l0aGluIHRoYXQgY29udGV4dC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGZsb3cgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgaGVyZSBiZWZvcmUgSSBwcm9jZWVkIGFueSBmdXJ0aGVyLiBJdCYjMzk7cyBlYXN5IHRvIG92ZXJsb29rIHRoaW5ncyBpbiB0aGVzZSBraW5kcyBvZiByb3V0aW5lcyBpZiB5b3UmIzM5O3JlIG5vdCBtZXRpY3Vsb3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNDA6XHRcdGZsb3dfYWN0aW9uX2Zvcl9lYWNoKGksIGFjdCwgXHUwMDI2cnVsZS1cdTAwM2VhY3Rpb24pIHtcbjExNDE6XHRcdFx0c3dpdGNoIChhY3QtXHUwMDNlaWQpIHtcbjExNDI6XHRcdFx0Y2FzZSBGTE9XX0FDVElPTl9NQU5HTEU6XG4xMTQzOlx0XHRcdFx0aWYgKG9mZmxvYWRfdHlwZSA9PSBQUEVfUEtUX1RZUEVfQlJJREdFKVxuMTE0NDpcdFx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTE0NTpcdFxuMTE0NjpcdFx0XHRcdGlmIChhY3QtXHUwMDNlbWFuZ2xlLmh0eXBlID09IEZMT1dfQUNUX01BTkdMRV9IRFJfVFlQRV9FVEgpXG4xMTQ3Olx0XHRcdFx0XHRhaXJvaGFfcHBlX2Zsb3dfbWFuZ2xlX2V0aChhY3QsIFx1MDAyNmRhdGEuZXRoKTtcbjExNDg6XHRcdFx0XHRicmVhaztcbjExNDk6XHRcdFx0Y2FzZSBGTE9XX0FDVElPTl9SRURJUkVDVDpcbjExNTA6XHRcdFx0XHRvZGV2ID0gYWN0LVx1MDAzZWRldjtcbjExNTE6XHRcdFx0XHRicmVhaztcbjExNTI6XHRcdFx0Y2FzZSBGTE9XX0FDVElPTl9DU1VNOlxuMTE1MzpcdFx0XHRcdGJyZWFrO1xuMTE1NDpcdFx0XHRjYXNlIEZMT1dfQUNUSU9OX1ZMQU5fUFVTSDpcbjExNTU6XHRcdFx0XHRpZiAoZGF0YS52bGFuLm51bSA9PSAyIHx8XG4xMTU2Olx0XHRcdFx0ICAgIGFjdC1cdTAwM2V2bGFuLnByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSlcbjExNTc6XHRcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjExNTg6XHRcbjExNTk6XHRcdFx0XHRkYXRhLnZsYW4uaGRyW2RhdGEudmxhbi5udW1dLmlkID0gYWN0LVx1MDAzZXZsYW4udmlkO1xuMTE2MDpcdFx0XHRcdGRhdGEudmxhbi5oZHJbZGF0YS52bGFuLm51bV0ucHJvdG8gPSBhY3QtXHUwMDNldmxhbi5wcm90bztcbjExNjE6XHRcdFx0XHRkYXRhLnZsYW4ubnVtJiM0MzsmIzQzOztcbjExNjI6XHRcdFx0XHRicmVhaztcbjExNjM6XHRcdFx0Y2FzZSBGTE9XX0FDVElPTl9WTEFOX1BPUDpcbjExNjQ6XHRcdFx0XHRicmVhaztcbjExNjU6XHRcdFx0Y2FzZSBGTE9XX0FDVElPTl9QUFBPRV9QVVNIOlxuMTE2NjpcdFx0XHRcdGlmIChkYXRhLnBwcG9lLm51bSA9PSAxIHx8IGRhdGEudmxhbi5udW0gPT0gMilcbjExNjc6XHRcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjExNjg6XHRcbjExNjk6XHRcdFx0XHRkYXRhLnBwcG9lLnNpZCA9IGFjdC1cdTAwM2VwcHBvZS5zaWQ7XG4xMTcwOlx0XHRcdFx0ZGF0YS5wcHBvZS5udW0mIzQzOyYjNDM7O1xuMTE3MTpcdFx0XHRcdGJyZWFrO1xuMTE3MjpcdFx0XHRkZWZhdWx0OlxuMTE3MzpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjExNzQ6XHRcdFx0fVxuMTE3NTpcdFx0fVxuMTE3NjpcdFxuMTE3NzpcdFx0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGRhdGEuZXRoLmhfc291cmNlKSB8fFxuMTE3ODpcdFx0ICAgICFpc192YWxpZF9ldGhlcl9hZGRyKGRhdGEuZXRoLmhfZGVzdCkpXG4xMTc5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk0MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDc4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZsb3cgT2ZmbG9hZCBQYXRjaCoqCgpPa2F5LCBmaXJzdCB0aG91Z2h0OiBob2xkIG9uLCB0aGUgYHByaW9yaXR5YCB2YXJpYWJsZSBpc24mIzM5O3QgYWN0dWFsbHkgYmVpbmcgbW9kaWZpZWQgd2l0aGluIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYCBpdHNlbGYuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmc7IGlzIGBwcmlvcml0eWAgYWx0ZXJlZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlPwoKQWhhISBOb3cgSSBzZWUgaXQuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGF1dGhvciBuZWdsZWN0ZWQgdG8gaW5jbHVkZSBgY2FzZSBGTE9XX0FDVElPTl9QUklPUklUWTogcHJpb3JpdHkgPSBhY3QtJmd0O3ByaW9yaXR5OyBicmVhaztgLiBUaGUgZGlmZiBzZWVtcyB0byBvbWl0IHRoYXQgY3J1Y2lhbCBwYXJ0LCBtZWFuaW5nIGBwcmlvcml0eWAgd2lsbCBpbnZhcmlhYmx5IGJlIHNldCB0byB6ZXJvLgoKTG9va2luZyBhdCB0aGUgY29kZSwgYHByaW9yaXR5YCBpcyBkZWNsYXJlZCwgYnV0IG5ldmVyIGFzc2lnbmVkIGEgdmFsdWUgb3RoZXIgdGhhbiB0aGUgaW5pdGlhbCB6ZXJvLCBtYWtpbmcgYEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIHByaW9yaXR5KWAgYWx3YXlzIGV2YWx1YXRlIHRvIHplcm8uCgpPa2F5LCBsZXQmIzM5O3MgcmV3aW5kIGFuZCBzZWUgaG93IHRoZSBgcWRhdGFgIHdhcyBoYW5kbGVkIGJlZm9yZSB0aGlzIHBhdGNoLiBJdCBzZWVtcyB0aGF0IGJlZm9yZSB0aGUgcGF0Y2gsIGBBSVJPSEFfRk9FX1FJRGAgd2FzbiYjMzk7dCBldmVuIHNldCBpbiB0aGUgYHFkYXRhYCBmaWVsZC4KClRoZXJlZm9yZSwgYmVjYXVzZSBgcHJpb3JpdHlgIGlzIGFsd2F5cyB6ZXJvLCBhbmQgYEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIDApYCBpcyBhbHNvIHplcm8sIHRoZSBgcWRhdGFgIHZhbHVlIHNob3VsZCBiZSBpZGVudGljYWwgdG8gd2hhdCBpdCB3YXMgYmVmb3JlIHRoaXMgcGF0Y2guCgpTbyBpbiBlZmZlY3QsIHRoZSBwYXRjaCwgZHVlIHRvIHRoZSBvbWlzc2lvbiwgbWFrZXMgbm8gZnVuY3Rpb25hbCBkaWZmZXJlbmNlIGluIGBxZGF0YWAuIElzIHRoZXJlIGFueSBvdGhlciBwbGFjZSB3aGVyZSBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAgaXMgdXNlZD8gVGhhdCYjMzk7cyB0aGUgbmV4dCBwb2ludCB0byBjb25zaWRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0zMjE9c3RhdGljIHZvaWQgYWlyb2hhX3BwZV9mb2Vfc2V0X2JyaWRnZV9hZGRycyhzdHJ1Y3QgYWlyb2hhX2ZvZV9icmlkZ2UgKmJyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzI5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozMzA6c3RhdGljIGludCBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTMzMS1cdFx0XHRcdFx0c3RydWN0IGFpcm9oYV9mb2VfZW50cnkgKmh3ZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTEwNzY9c3RhdGljIGludCBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMTgwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxMTgxOlx0ZXJyID0gYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShldGgsIFx1MDAyNmh3ZSwgb2Rldiwgb2ZmbG9hZF90eXBlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMTgyLVx0XHRcdFx0XHQgICBcdTAwMjZkYXRhLCBsNHByb3RvLCBwcmlvcml0eSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDI1CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNTUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUFBFIEZsb3cgT2ZmbG9hZCBMb2dpYyoqCgpPa2F5LCBzbyBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAgaXMgb25seSBjYWxsZWQgZnJvbSBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWAuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O3ZlIGNvbmZpcm1lZC4gQW5kIHRoZSBgcHJpb3JpdHlgIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkIHRvIDAuIEJ1dCBJIGhhZCBhIG5hZ2dpbmcgZmVlbGluZy4uLiBkb2VzIHRoZSBgcHJpb3JpdHlgIHZhbHVlIGdldCBtb2RpZmllZCB3aXRoaW4gdGhlIGBmbG93X2FjdGlvbl9mb3JfZWFjaGAgbG9vcCBpbiBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWA/IEkgdGhvdWdodCBJIGhhZCBnb25lIHRocm91Z2ggdGhhdCBwYXJ0IGFscmVhZHksIGJ1dCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrLgoKTGV0IG1lIGdvIHRocm91Z2ggdGhlIGBmbG93X2FjdGlvbl9mb3JfZWFjaGAgbG9vcCBhZ2FpbiwgbGluZSBieSBsaW5lLiBIbW0sIGhlcmUgd2UgaGF2ZSB0aGUgbG9vcCBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgYWN0aW9ucyBhc3NvY2lhdGVkIHdpdGggYSBmbG93IHJ1bGUuIEFoLCByaWdodCEgSSBzZWUgYWN0aW9ucyBsaWtlIG1hbmdsZSwgcmVkaXJlY3QsIGNoZWNrc3VtLCBWTEFOIG1hbmlwdWxhdGlvbnMsIFBQUG9FIGhhbmRsaW5nLi4uIFdhaXQsIEkgYWxtb3N0IG1pc3NlZCBpdCEgVGhlcmUgaXQgaXMhIGBjYXNlIEZMT1dfQUNUSU9OX1BSSU9SSVRZOmAuIEl0IGxvb2tzIGxpa2UgYHByaW9yaXR5YCAqaXMqIG1vZGlmaWVkIHdpdGhpbiB0aGUgbG9vcCEgVGhlIGBhY3QtJmd0O3ByaW9yaXR5YCB2YWx1ZSBpcyBhc3NpZ25lZCB0byB0aGUgYHByaW9yaXR5YCB2YXJpYWJsZS4KCkkgbmVlZCB0byByZS1yZWFkIHRoZSBvdXRwdXQgZnJvbSB0aGUgYHJlYWQtZmlsZWAgY29tbWFuZCwgc3BlY2lmaWNhbGx5IGxpbmVzIDExNDAtMTE3OS4gSXQgbG9va3MgbGlrZSBJIHdhcyBhIGxpdHRsZSBoYXN0eSBpbiBteSBwcmV2aW91cyBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNDA6XHRcdGZsb3dfYWN0aW9uX2Zvcl9lYWNoKGksIGFjdCwgXHUwMDI2cnVsZS1cdTAwM2VhY3Rpb24pIHtcbjExNDE6XHRcdFx0c3dpdGNoIChhY3QtXHUwMDNlaWQpIHtcbjExNDI6XHRcdFx0Y2FzZSBGTE9XX0FDVElPTl9NQU5HTEU6XG4xMTQzOlx0XHRcdFx0aWYgKG9mZmxvYWRfdHlwZSA9PSBQUEVfUEtUX1RZUEVfQlJJREdFKVxuMTE0NDpcdFx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTE0NTpcdFxuMTE0NjpcdFx0XHRcdGlmIChhY3QtXHUwMDNlbWFuZ2xlLmh0eXBlID09IEZMT1dfQUNUX01BTkdMRV9IRFJfVFlQRV9FVEgpXG4xMTQ3Olx0XHRcdFx0XHRhaXJvaGFfcHBlX2Zsb3dfbWFuZ2xlX2V0aChhY3QsIFx1MDAyNmRhdGEuZXRoKTtcbjExNDg6XHRcdFx0XHRicmVhaztcbjExNDk6XHRcdFx0Y2FzZSBGTE9XX0FDVElPTl9SRURJUkVDVDpcbjExNTA6XHRcdFx0XHRvZGV2ID0gYWN0LVx1MDAzZWRldjtcbjExNTE6XHRcdFx0XHRicmVhaztcbjExNTI6XHRcdFx0Y2FzZSBGTE9XX0FDVElPTl9DU1VNOlxuMTE1MzpcdFx0XHRcdGJyZWFrO1xuMTE1NDpcdFx0XHRjYXNlIEZMT1dfQUNUSU9OX1ZMQU5fUFVTSDpcbjExNTU6XHRcdFx0XHRpZiAoZGF0YS52bGFuLm51bSA9PSAyIHx8XG4xMTU2Olx0XHRcdFx0ICAgIGFjdC1cdTAwM2V2bGFuLnByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSlcbjExNTc6XHRcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjExNTg6XHRcbjExNTk6XHRcdFx0XHRkYXRhLnZsYW4uaGRyW2RhdGEudmxhbi5udW1dLmlkID0gYWN0LVx1MDAzZXZsYW4udmlkO1xuMTE2MDpcdFx0XHRcdGRhdGEudmxhbi5oZHJbZGF0YS52bGFuLm51bV0ucHJvdG8gPSBhY3QtXHUwMDNldmxhbi5wcm90bztcbjExNjE6XHRcdFx0XHRkYXRhLnZsYW4ubnVtJiM0MzsmIzQzOztcbjExNjI6XHRcdFx0XHRicmVhaztcbjExNjM6XHRcdFx0Y2FzZSBGTE9XX0FDVElPTl9WTEFOX1BPUDpcbjExNjQ6XHRcdFx0XHRicmVhaztcbjExNjU6XHRcdFx0Y2FzZSBGTE9XX0FDVElPTl9QUFBPRV9QVVNIOlxuMTE2NjpcdFx0XHRcdGlmIChkYXRhLnBwcG9lLm51bSA9PSAxIHx8IGRhdGEudmxhbi5udW0gPT0gMilcbjExNjc6XHRcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjExNjg6XHRcbjExNjk6XHRcdFx0XHRkYXRhLnBwcG9lLnNpZCA9IGFjdC1cdTAwM2VwcHBvZS5zaWQ7XG4xMTcwOlx0XHRcdFx0ZGF0YS5wcHBvZS5udW0mIzQzOyYjNDM7O1xuMTE3MTpcdFx0XHRcdGJyZWFrO1xuMTE3MjpcdFx0XHRkZWZhdWx0OlxuMTE3MzpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjExNzQ6XHRcdFx0fVxuMTE3NTpcdFx0fVxuMTE3NjpcdFxuMTE3NzpcdFx0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGRhdGEuZXRoLmhfc291cmNlKSB8fFxuMTE3ODpcdFx0ICAgICFpc192YWxpZF9ldGhlcl9hZGRyKGRhdGEuZXRoLmhfZGVzdCkpXG4xMTc5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk2MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZsb3cgQWN0aW9uIFByaW9yaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYCBmdW5jdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBGTE9XX0FDVElPTl9QUklPUklUWWAgaXNuJiMzOTt0IGJlaW5nIGhhbmRsZWQgKmFueXdoZXJlKiBpbiB0aGUgY29kZS4gSSBuZWVkIHRvIGJlIHN1cmUuIExldCBtZSBxdWlja2x5IHNjYW4gZm9yIGFub3RoZXIgaW5zdGFuY2Ugb2YgdGhlIGBmbG93X2FjdGlvbl9mb3JfZWFjaGAgbG9vcCB0byB2ZXJpZnkuIEFoLCB5ZXMsIHRoZXJlJiMzOTtzIG9uZSBhdCBsaW5lIDEyMTguIEl0JiMzOTtzIHNraXBwaW5nIGBGTE9XX0FDVElPTl9NQU5HTEVgLCBidXQgdGhhdCBkb2VzbiYjMzk7dCBjaGFuZ2UgYW55dGhpbmcg4oCTIGBGTE9XX0FDVElPTl9QUklPUklUWWAgaXMgc3RpbGwgYWJzZW50LgoKVGhpcyBtZWFucyB0aGUgYHByaW9yaXR5YCBmaWVsZCBpcyAqYWx3YXlzKiBiZWluZyBzZXQgdG8gemVybyBpbiB0aGlzIHNlY3Rpb24sIHNpbmNlIHRoZXJlJiMzOTtzIG5vIGxvZ2ljIHRvIHByb2Nlc3MgdGhlIHNwZWNpZmllZCBwcmlvcml0eSBpZiBvbmUgaXMgZGVmaW5lZC4gVGhpcyBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGlzc3VlIGluIHRoZSBmbG93IG9mZmxvYWQgZnVuY3Rpb25hbGl0eS4KCkhtbSwgdGhpcyB0YXNrIGlzIHBhcnQgb2YgYSBsYXJnZXIgcGF0Y2ggc2VyaWVzLCBpc24mIzM5O3QgaXQ/IExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgaW5zdHJ1Y3Rpb25zLiBUaGUgcHJvbXB0IG1lbnRpb25zIHRoZSBkaWZmIGhhcyAqYWxyZWFkeSogYmVlbiBhcHBsaWVkLiBPa2F5LCBpdCYjMzk7cyBIRUFELiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBnaXQgbG9nIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgY29tbWl0cyB0byB0aGlzIGZ1bmN0aW9uYWxpdHkgdGhhdCBtaWdodCBhZGRyZXNzIHRoaXMgYXBwYXJlbnQgb3ZlcnNpZ2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmlvcml0eSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0yMDk3PXN0YXRpYyB1MTYgYWlyb2hhX2Rldl9zZWxlY3RfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTIxMDYtXHQgKiBpbmRleCwgcmVseSBvbiBwb3J0IGlkIG90aGVyd2lzZS4gU2VsZWN0IFFvUyBxdWV1ZSBiYXNlZCBvbiB0aGVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MjEwNzpcdCAqIHNrYiBwcmlvcml0eS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMjEwOC1cdCAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMjExMC1cdGNoYW5uZWwgPSBjaGFubmVsICUgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjIxMTE6XHRxdWV1ZSA9IHNrYi1cdTAwM2Vwcmlvcml0eSAlIEFJUk9IQV9OVU1fUU9TX1FVRVVFUztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMjExMi1cdHF1ZXVlID0gY2hhbm5lbCAqIEFJUk9IQV9OVU1fUU9TX1FVRVVFUyAmIzQzOyBxdWV1ZTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTI0MzU9c3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfdHhfZXRzX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjaGFubmVsLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMjQ1NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MjQ1NTpcdC8qIEVONzU4MSBTb0Mgc3VwcG9ydHMgZml4ZWQgUW9TIGJhbmQgcHJpb3JpdHkgd2hlcmUgV1JSIHF1ZXVlcyBoYXZlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTI0NTYtXHQgKiBsb3dlc3QgcHJpb3JpdGllcyB3aXRoIHJlc3BlY3QgdG8gU1Agb25lcy5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oPTM4MD1zdHJ1Y3QgYWlyb2hhX2ZvZV9pcHY0X2RzbGl0ZSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaC0zODUtXHR1OCBmbG93X2xhYmVsWzNdO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaDozODY6XHR1OCBwcmlvcml0eTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmgtMzg3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9MzMwPXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzMzLVx0XHRcdFx0XHRzdHJ1Y3QgYWlyb2hhX2Zsb3dfZGF0YSAqZGF0YSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MzM0Olx0XHRcdFx0XHRpbnQgbDRwcm90bywgdTggcHJpb3JpdHkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTMzNS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zODgtXHRcdFx0Y2hhbm5lbCA9IGNoYW5uZWwgJSBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6Mzg5Olx0XHRcdHByaW9yaXR5ID0gcHJpb3JpdHkgJSBBSVJPSEFfTlVNX1FPU19RVUVVRVM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTM5MC1cdFx0XHRxZGF0YSB8PSBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfQ0hBTk5FTCwgY2hhbm5lbCkgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozOTE6XHRcdFx0XHQgRklFTERfUFJFUChBSVJPSEFfRk9FX1FJRCwgcHJpb3JpdHkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zOTItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0xMDc2PXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTA4My1cdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqYWN0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxMDg0Olx0dTggbDRwcm90byA9IDAsIHByaW9yaXR5ID0gMDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTA4NS1cdHN0cnVjdCBhaXJvaGFfZm9lX2VudHJ5IGh3ZTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTExODEtXHRlcnIgPSBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKGV0aCwgXHUwMDI2aHdlLCBvZGV2LCBvZmZsb2FkX3R5cGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjExODI6XHRcdFx0XHRcdCAgIFx1MDAyNmRhdGEsIGw0cHJvdG8sIHByaW9yaXR5KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTE4My1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjIyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgYSBTdXNwZWN0ZWQgUHJpb3JpdHkgSGFuZGxpbmcgRGlzY3JlcGFuY3kqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBub3RpY2luZyBzb21ldGhpbmcgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgaW4gdGhpcyBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWAgZnVuY3Rpb24uIFRoZSBgcHJpb3JpdHlgIHZhcmlhYmxlLCByaWdodCB0aGVyZSwgaXMgaW5pdGlhbGl6ZWQgdG8gemVybywgYW5kIHRoZW4gaXQmIzM5O3MgYmVpbmcgcGFzc2VkIHRvIGBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlYC4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnLiBJIGtub3cgZnJvbSBwYXN0IGV4cGVyaWVuY2UgaG93IGNyaXRpY2FsIHByaW9yaXR5IGhhbmRsaW5nIGlzIGluIHRoZXNlIHR5cGVzIG9mIG9mZmxvYWQgc2NlbmFyaW9zLiBJdCBtYWtlcyBtZSB3b25kZXI6IGlzIGl0IHBvc3NpYmxlIHRoYXQgdGhlIGBGTE9XX0FDVElPTl9QUklPUklUWWAgdmFsdWUgaXMgYWN0dWFsbHkgYmVpbmcgbWFuYWdlZCBvciBtb2RpZmllZCBlbHNld2hlcmU/IElzIHRoZXJlIGFub3RoZXIgcGF0Y2gsIG1heWJlIG9uZSBhbHJlYWR5IG1lcmdlZCwgdGhhdCYjMzk7cyB0YWtpbmcgY2FyZSBvZiB0aGlzPyBJdCYjMzk7cyBhIGNvbW1vbiBwcmFjdGljZS4KCk15IGd1dCB0ZWxscyBtZSBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIFRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb21taXQgaGlzdG9yeSBvZiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY2AuIEkmIzM5O2xsIHB1bGwgdXAgdGhlIGdpdCBsb2cgZm9yIHRoYXQgZmlsZSByaWdodCBhd2F5IGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSByZWxhdGVkIGNvbW1pdHMgdGhhdCBtaWdodCBzaGVkIHNvbWUgbGlnaHQgb24gaG93IGBGTE9XX0FDVElPTl9QUklPUklUWWAgaXMgYWN0dWFsbHkgYmVpbmcgaGFuZGxlZCBpbiB0aGUgb3ZlcmFsbCBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlIGRlZmF1bHQgMCB2YWx1ZSBoZXJlIGlzIGNvcnJlY3QsIG9yIGlmIGl0IGlzIGludGVudGlvbmFsbHkgbW9kaWZpZWQgbGF0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RkxPV19BQ1RJT05fUFJJT1JJVFkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwNDYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIEFpcm9oYSBFdGhlcm5ldCBEcml2ZXIqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyLCBhbmQgSSYjMzk7bSBpbW1lZGlhdGVseSBub3RpY2luZyBzb21ldGhpbmcuIFRoZSBgRkxPV19BQ1RJT05fUFJJT1JJVFlgIG1hY3JvLi4uIGl0JiMzOTtzIGp1c3Qgbm90IGRlY2xhcmVkIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyBhIGJpdCBvZGQ7IEkgd291bGQgaGF2ZSBleHBlY3RlZCB0byBmaW5kIGl0IGRlZmluZWQgdGhlcmUgZm9yIG1hbmFnaW5nIHRoZSBmbG93IGNvbnRyb2wgYWN0aW9uIHByaW9yaXR5LgoKSGFuZyBvbiBhIHNlY29uZC4gT2theSwgbGV0IG1lIHBpdm90LiBJbnN0ZWFkIG9mIHRyeWluZyB0byBmaW5kIHRoZSBtaXNzaW5nIGRlZmluaXRpb24sIGxldCBtZSByZWZyYW1lIHRoZSBxdWVzdGlvbi4gV2hhdCBhYm91dCBgYWN0LSZndDtwcmlvcml0eWA/IElzIHRoYXQgYSBtZW1iZXI/IEFuZCBpZiBpdCBpcywgaG93IGlzIGl0IGJlaW5nIHNldC91c2VkPyBJcyB0aGlzIHByaW9yaXR5IGhhbmRsaW5nIGJlaW5nIGRvbmUgaW4gYSBzZXBhcmF0ZSwgcG9zc2libHkgZ2VuZXJpYywgcGFydCBvZiB0aGUgbmV0d29ya2luZyBzdGFjayBhbmQgbm90IGJlaW5nIGV4cGxpY2l0bHkgaGFuZGxlZCBieSB0aGUgZHJpdmVyIGl0c2VsZj8gVGhlIGNvbnRleHQgaGVyZSBpcyBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHRoZSBkcml2ZXIgaXMgaW50ZXJhY3Rpbmcgd2l0aCwgb3IgcmVseWluZyBvbiwgdGhlIG5ldHdvcmsgc3RhY2sgZm9yIHRoaXMgY3JpdGljYWwgZmxvdyBhY3Rpb24gcHJpb3JpdHkuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzdHJ1Y3QgZGVmaW5pdGlvbnMgYW5kIHRoZSBhc3NvY2lhdGVkIGZ1bmN0aW9uIGNhbGxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FjdC1cdTAwM2Vwcmlvcml0eSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzM3NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFpcm9oYSBQUEUgRmxvdyBPZmZsb2FkIFBhdGNoKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFRoaXMgYHByaW9yaXR5YCB2YXJpYWJsZSBpbiBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWAuLi4gaXQmIzM5O3MgbmV2ZXIgYWN0dWFsbHkgKm1vZGlmaWVkKiwgaXMgaXQ/IEkmIzM5O20gdHJhY2luZyB0aGUgZXhlY3V0aW9uIGFuZCBpdCYjMzk7cyBpbml0aWFsaXplZCB0byAwLiBUaGVuLCBpdCYjMzk7cyBqdXN0IHBhc3NlZCBzdHJhaWdodCBpbnRvIGBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlYC4gQWxyaWdodCwgZm9sbG93aW5nIHRoZSBjb2RlLCBpbnNpZGUgYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgLCBpdCYjMzk7cyBoaXQgd2l0aCBgcHJpb3JpdHkgPSBwcmlvcml0eSAlIEFJUk9IQV9OVU1fUU9TX1FVRVVFUztgIEJ1dCBgcHJpb3JpdHlgIGlzIDAsIHNvIHRoZSByZXN1bHQgaXMuLi4gc3RpbGwgMC4KClRoZW4sIHRoZSBiaXR3aXNlIG9wZXJhdGlvbiBgcWRhdGEgfD0gRklFTERfUFJFUChBSVJPSEFfRk9FX1FJRCwgcHJpb3JpdHkpO2Agb2NjdXJzLiBTaW5jZSBgcHJpb3JpdHlgIGlzIDAsIHRoaXMgcmVzdWx0cyBpbiBgcWRhdGFgIGJlaW5nIHVuY2hhbmdlZC4gU28gdGhlIHZhbHVlIG9mIGBxZGF0YWAgaXMgYWJzb2x1dGVseSBpZGVudGljYWwgYmVmb3JlIGFuZCBhZnRlciB0aGlzIHBhdGNoLgoKQW0gSSBtaXNzaW5nIHNvbWV0aGluZz8gRG9lcyBgcHJpb3JpdHlgIGV2ZW4gZG8gYW55dGhpbmcgaW4gYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgIGFzaWRlIGZyb20gdGhhdCBtb2R1bGFyIGFyaXRobWV0aWM/IEkgbmVlZCB0byByZXZpZXcgdGhpcyBtb3JlIHRob3JvdWdobHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ByaW9yaXR5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTMzMD1zdGF0aWMgaW50IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTMzMy1cdFx0XHRcdFx0c3RydWN0IGFpcm9oYV9mbG93X2RhdGEgKmRhdGEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjMzNDpcdFx0XHRcdFx0aW50IGw0cHJvdG8sIHU4IHByaW9yaXR5KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zMzUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzg4LVx0XHRcdGNoYW5uZWwgPSBjaGFubmVsICUgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjM4OTpcdFx0XHRwcmlvcml0eSA9IHByaW9yaXR5ICUgQUlST0hBX05VTV9RT1NfUVVFVUVTO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zOTAtXHRcdFx0cWRhdGEgfD0gRklFTERfUFJFUChBSVJPSEFfRk9FX0NIQU5ORUwsIGNoYW5uZWwpIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MzkxOlx0XHRcdFx0IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIHByaW9yaXR5KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzkyLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9MTA3Nj1zdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTEwODMtXHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmFjdDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTA4NDpcdHU4IGw0cHJvdG8gPSAwLCBwcmlvcml0eSA9IDA7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTEwODUtXHRzdHJ1Y3QgYWlyb2hhX2ZvZV9lbnRyeSBod2U7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMTgxLVx0ZXJyID0gYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShldGgsIFx1MDAyNmh3ZSwgb2Rldiwgb2ZmbG9hZF90eXBlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxMTgyOlx0XHRcdFx0XHQgICBcdTAwMjZkYXRhLCBsNHByb3RvLCBwcmlvcml0eSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTExODMtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQyNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWR1bmRhbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBhbGFybSBiZWxscyBhcmUgZ29pbmcgb2ZmLiBJdCBzZWVtcyBjb21wbGV0ZWx5IHVzZWxlc3MuIFRoZSBjb2RlIGFkZHMgYSBgcHJpb3JpdHlgIHZhcmlhYmxlLCBpbml0aWFsaXplcyBpdCB0byB6ZXJvLCBwYXNzZXMgaXQgaW50byBhIGZ1bmN0aW9uLCBkb2VzIGEgbW9kdWxvIG9wZXJhdGlvbiB3aXRoIGl0LCBhbmQgdGhlbiBPUnMgdGhlIHJlc3VsdCBpbnRvIGEgYml0ZmllbGQuIFNpbmNlIGBwcmlvcml0eWAgaXMgemVybywgYW55IG1vZHVsbyBvcGVyYXRpb24gb24gaXQgd2l0aCBhbnkgY29uc3RhbnQsIGluY2x1ZGluZyBgTmAsIHdpbGwgcmVzdWx0IGluIHplcm8uIFRoZXJlZm9yZSwgdGhlIGJpdHdpc2UgT1IgZWZmZWN0aXZlbHkgYWRkcyBub3RoaW5nLiBJdCYjMzk7cyBhIG5vLW9wIGZ1bmN0aW9uYWxseSEKCkxldCBtZSBiZSBzdXJlIEkmIzM5O20gbm90IG1pc3Npbmcgc29tZXRoaW5nIHN1YnRsZSBoZXJlLiBCZWZvcmUgdGhpcyBwYXRjaCwgdGhlIGNvZGUgd2FzIHNldHRpbmcgYSBgY2hhbm5lbGAgdmFsdWUgdXNpbmcgYSBtb2R1bG8gb3BlcmF0aW9uIGFuZCB0aGVuIHNldHRpbmcgYSBiaXRmaWVsZDoKCmBgYGMKCQkJY2hhbm5lbCA9IGNoYW5uZWwgJSBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUzsKCQkJcWRhdGEgfD0gRklFTERfUFJFUChBSVJPSEFfRk9FX0NIQU5ORUwsIGNoYW5uZWwpOwpgYGAKCkFuZCBub3cgaXQgaXM6CgpgYGBjCgkJCWNoYW5uZWwgPSBjaGFubmVsICUgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFM7CgkJCXByaW9yaXR5ID0gcHJpb3JpdHkgJSBBSVJPSEFfTlVNX1FPU19RVUVVRVM7CgkJCXFkYXRhIHw9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9DSEFOTkVMLCBjaGFubmVsKSB8CgkJCQkgRklFTERfUFJFUChBSVJPSEFfRk9FX1FJRCwgcHJpb3JpdHkpOwpgYGAKClNpbmNlIGBwcmlvcml0eWAgaXMgc2V0IHRvIHplcm8sIHRoZW4gYEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIDApYCBldmFsdWF0ZXMgdG8gemVyby4gVGh1cywgYHFkYXRhYCYjMzk7cyB2YWx1ZSBpcyB1bmNoYW5nZWQgZnJvbSB3aGF0IGl0IHdhcyBiZWZvcmUuIFRoaXMgaXMgYSB2ZXJ5IGNsZWFyIG5vLW9wLgoKTGV0JiMzOTtzIGRvIGEgc2FuaXR5IGNoZWNrLiBJcyB0aGVyZSBhbnkgb3RoZXIgbW9kaWZpZWQgZmlsZSB0aGF0IG1pZ2h0IGltcGFjdCB0aGlzPyBUaGUgZGlmZiBvbmx5IGNvbnRhaW5zIGNoYW5nZXMgdG8gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNgLiBPaywgbmFycm93IGl0IGRvd24uCgpDb3VsZCBgcHJpb3JpdHlgIGJlIG1vZGlmaWVkIGJ5IGEgbWFjcm8gb3IgYSBnbG9iYWwgdmFyaWFibGU/IE5vLCBpdCYjMzk7cyBhIGxvY2FsbHkgZGVjbGFyZWQgYHU4IHByaW9yaXR5ID0gMDtgIGFuZCBpdCYjMzk7cyBwYXNzZWQgYnkgdmFsdWUgaW50byB0aGlzIGZ1bmN0aW9uLgoKQ291bGQgdGhlIGBmbG93X2FjdGlvbl9mb3JfZWFjaGAgZnVuY3Rpb24gaW1wbGljaXRseSBtb2RpZnkgdGhlIHZhbHVlPyBMZXQmIzM5O3MgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgdGhhdCBtYWNybyBhbmQgdmVyaWZ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIGZsb3dfYWN0aW9uX2Zvcl9lYWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmg9MzU3PXN0YXRpYyBpbmxpbmUgYm9vbCBmbG93X2FjdGlvbl9pc19sYXN0X2VudHJ5KGNvbnN0IHN0cnVjdCBmbG93X2FjdGlvbiAqYWN0aW9uLFxuLS1cbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oLTM2Mi1cbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oOjM2MzojZGVmaW5lIGZsb3dfYWN0aW9uX2Zvcl9lYWNoKF9faSwgX19hY3QsIF9fYWN0aW9ucylcdFx0XHRcXFxuaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmgtMzY0LSAgICAgICAgZm9yIChfX2kgPSAwLCBfX2FjdCA9IFx1MDAyNihfX2FjdGlvbnMpLVx1MDAzZWVudHJpZXNbMF07XHRcdFx0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0NTcKCQkJCQkJCW91dHB1dDogMTQwCgkJCQkJCQl0aG91Z2h0czogMTM2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogQSBOby1PcCBpbiBEaXNndWlzZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoIGlzLCBmdW5jdGlvbmFsbHksIGEgbm8tb3AuIEl0IHNlZW1zIHRvIGJlIGVpdGhlciBhbiBpbmNvbXBsZXRlIGltcGxlbWVudGF0aW9uIG9yIGEgcHJlcGFyYXRvcnkgc3RlcCBmb3IgZnV0dXJlIHdvcmsuIEZpcnN0IHRoaW5nIEkgZGlkIHdhcyB2ZXJpZnkgdGhhdCBgcHJpb3JpdHlgIGlzbiYjMzk7dCBiZWluZyBzdWJ0bHkgYWx0ZXJlZCB2aWEgc29tZSBnbG9iYWwgdmFyaWFibGUgb3IgYSB0cmlja3kgYGZsb3dfcnVsZV9tYXRjaF9rZXlgIGludGVyYWN0aW9uLCBidXQgbm8sIGl0JiMzOTtzIGEgbG9jYWwgdmFyaWFibGUgd2l0aGluIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYC4gRGVjbGFyZWQsIGluaXRpYWxpemVkIHRvIHplcm8sIGFuZCBwYXNzZWQgYnkgdmFsdWUuIFNvLCB0aGUgdmFsdWUgaXMgY29uc2lzdGVudGx5IHplcm8gdGhyb3VnaG91dC4KCkkgY2hlY2tlZCBob3cgdGhlIGNvZGUgdXNlcyBgcHJpb3JpdHlgLiBJdCBnZXRzIHBhc3NlZCB0byBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAsIGJ1dCB0aGUgY3J1Y2lhbCBjaGVjayBpcyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSGVyZSwgYHByaW9yaXR5YCBpcyB1c2VkIGluIGBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfUUlELCBwcmlvcml0eSlgLiBJIHZlcmlmaWVkIHRoYXQgYEZJRUxEX1BSRVBgIGlzIGp1c3QgYSBtYWNybywgc2hpZnRpbmcgYW5kIG1hc2tpbmcuIEl0IGRvZXNuJiMzOTt0IHBlcmZvcm0gYW55IHNpZGUgZWZmZWN0cy4KClRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGFwcGVhciB0byBjaGFuZ2UgYW55IGZ1bmN0aW9uYWxpdHkuIEkgZHVnIGEgbGl0dGxlIGRlZXBlciB0byBzZWUgaWYgcGVyaGFwcyB0aGUgYEFJUk9IQV9GT0VfUUlEYCBmaWVsZCB3YXMgc29tZWhvdyBiZWluZyBtb2RpZmllZCBiZWZvcmUgb3IgYWZ0ZXIgdGhpcyBwYXRjaCwgYnV0IGl0IHdhcyBhbHJlYWR5IGluaXRpYWxpemVkIGFzIDAsIGFuZCB0aGUgcGF0Y2ggYWRkcyBub3RoaW5nIHRoYXQgd291bGQgY2hhbmdlIHRoZSB2YWx1ZS4gVGhlIGdlbmVyYXRlZCBjb2RlIGlzIGVpdGhlciBleGFjdGx5IHRoZSBzYW1lIG9yIGp1c3QgaGFzIGFuIGV4dHJhIGB8IDBgLCB3aGljaCBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudC4KClNvLCB0aGlzIG1vZGlmaWNhdGlvbiAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBhbnkgY2hhbmdlcyB0aGF0IHdvdWxkIGJlIHJlbGV2YW50IHRvIGZ1enppbmcuIEl0JiMzOTtzIGVpdGhlciBhIHBsYWNlaG9sZGVyIG9yIGEgcGFydGlhbCBpbXBsZW1lbnRhdGlvbi4KCkFscmlnaHQsIGxldCYjMzk7cyBkb3VibGUgY2hlY2sgdGhpcyB2ZXJ5IGNhcmVmdWxseS4gVGhlIHBhdGNoIG1vdmVzIGBsNHByb3RvYCBhbmQgYWRkcyBgcHJpb3JpdHkgPSAwYC4gSXQgdGhlbiBwYXNzZXMgYHByaW9yaXR5YCAod2hpY2ggaXMgMCkgdG8gYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgLgoKSW4gYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgIHRoZSBjb2RlIG5vdyBkb2VzIGBwcmlvcml0eSA9IDAgJSBBSVJPSEFfTlVNX1FPU19RVUVVRVNgICh3aGljaCBpcyAwKSwgYW5kIHRoZW4gYHFkYXRhIHw9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIDApYC4KClNpbmNlIGBwcmlvcml0eWAgaXMgbmV2ZXIgbW9kaWZpZWQgZnJvbSAwLCBpdCBoYXMgbm8gZnVuY3Rpb25hbCBlZmZlY3QuCgpXb3J0aEZ1enppbmc9ZmFsc2UuClJlYXNvbmluZzogVGhlIHBhdGNoIGFkZHMgYSBgcHJpb3JpdHlgIHZhcmlhYmxlIGluaXRpYWxpemVkIHRvIDAgYW5kIHBhc3NlcyBpdCB0byBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAsIHdoZXJlIGl0IGlzIHVzZWQgdG8gc2V0IHRoZSBgQUlST0hBX0ZPRV9RSURgIGZpZWxkLiBIb3dldmVyLCBgcHJpb3JpdHlgIGlzIG5ldmVyIG1vZGlmaWVkIGZyb20gMCwgc28gdGhlIGZpZWxkIGlzIGFsd2F5cyBzZXQgdG8gMCwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIGJlaGF2aW9yIGJlZm9yZSB0aGUgcGF0Y2guIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyBmdW5jdGlvbmFsIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGBwcmlvcml0eWAgdmFyaWFibGUgaW5pdGlhbGl6ZWQgdG8gMCBhbmQgcGFzc2VzIGl0IHRvIGBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlYCwgd2hlcmUgaXQgaXMgdXNlZCB0byBzZXQgdGhlIGBBSVJPSEFfRk9FX1FJRGAgZmllbGQuIEhvd2V2ZXIsIGBwcmlvcml0eWAgaXMgbmV2ZXIgbW9kaWZpZWQgZnJvbSAwIGluIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYCwgc28gdGhlIGZpZWxkIGlzIGFsd2F5cyBzZXQgdG8gMC4gVGhpcyBpcyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHRoZSBiZWhhdmlvciBiZWZvcmUgdGhlIHBhdGNoLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBjYW4gYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGBwcmlvcml0eWAgdmFyaWFibGUgaW5pdGlhbGl6ZWQgdG8gMCBhbmQgcGFzc2VzIGl0IHRvIGBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlYCwgd2hlcmUgaXQgaXMgdXNlZCB0byBzZXQgdGhlIGBBSVJPSEFfRk9FX1FJRGAgZmllbGQuIEhvd2V2ZXIsIGBwcmlvcml0eWAgaXMgbmV2ZXIgbW9kaWZpZWQgZnJvbSAwIGluIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYCwgc28gdGhlIGZpZWxkIGlzIGFsd2F5cyBzZXQgdG8gMC4gVGhpcyBpcyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHRoZSBiZWhhdmlvciBiZWZvcmUgdGhlIHBhdGNoLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBjYW4gYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjM1OjQwLjkxODAzMDQwMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNDQyMDU3MDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYHByaW9yaXR5YCB2YXJpYWJsZSBpbml0aWFsaXplZCB0byAwIGFuZCBwYXNzZXMgaXQgdG8gYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgLCB3aGVyZSBpdCBpcyB1c2VkIHRvIHNldCB0aGUgYEFJUk9IQV9GT0VfUUlEYCBmaWVsZC4gSG93ZXZlciwgYHByaW9yaXR5YCBpcyBuZXZlciBtb2RpZmllZCBmcm9tIDAgaW4gYGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2VgLCBzbyB0aGUgZmllbGQgaXMgYWx3YXlzIHNldCB0byAwLiBUaGlzIGlzIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gdGhlIGJlaGF2aW9yIGJlZm9yZSB0aGUgcGF0Y2guIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IGNhbiBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjozNTo0MC45MTgwMzU5OTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzIyMjgzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA4ZTViZDU1ZGQ4NjRmODcyMmU2ZDgyNDdiNmZjOWQ1ZGQ0ZGE5YWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMyAxMjozNTozOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xcbmluZGV4IGU3Yzc4MjkzMDAyYWJiLi5mZGI5NzNmYzc3OWM4MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xcbkBAIC0zMzEsNyArMzMxLDcgQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBhaXJvaGFfZm9lX2VudHJ5ICpod2UsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB0eXBlLFxcbiBcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYWlyb2hhX2Zsb3dfZGF0YSAqZGF0YSxcXG4tXFx0XFx0XFx0XFx0XFx0aW50IGw0cHJvdG8pXFxuK1xcdFxcdFxcdFxcdFxcdGludCBsNHByb3RvLCB1OCBwcmlvcml0eSlcXG4ge1xcbiBcXHR1MzIgcWRhdGEgPSBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfU0hBUEVSX0lELCAweDdmKSwgcG9ydHNfcGFkLCB2YWw7XFxuIFxcdGludCB3bGFuX2V0eXBlID0gLUVJTlZBTCwgZHNhX3BvcnQgPSBhaXJvaGFfZ2V0X2RzYV9wb3J0KFxcdTAwMjZuZXRkZXYpO1xcbkBAIC0zODYsNyArMzg2LDkgQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRjaGFubmVsID0gZHNhX3BvcnQgXFx1MDAzZT0gMCA/IGRzYV9wb3J0IDogcG9ydC1cXHUwMDNlaWQ7XFxuIFxcdFxcdFxcdGNoYW5uZWwgPSBjaGFubmVsICUgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFM7XFxuLVxcdFxcdFxcdHFkYXRhIHw9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9DSEFOTkVMLCBjaGFubmVsKTtcXG4rXFx0XFx0XFx0cHJpb3JpdHkgPSBwcmlvcml0eSAlIEFJUk9IQV9OVU1fUU9TX1FVRVVFUztcXG4rXFx0XFx0XFx0cWRhdGEgfD0gRklFTERfUFJFUChBSVJPSEFfRk9FX0NIQU5ORUwsIGNoYW5uZWwpIHxcXG4rXFx0XFx0XFx0XFx0IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIHByaW9yaXR5KTtcXG4gXFxuIFxcdFxcdFxcdHZhbCB8PSBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfSUIyX1BTRV9QT1JULCBwc2VfcG9ydCkgfFxcbiBcXHRcXHRcXHQgICAgICAgQUlST0hBX0ZPRV9JQjJfUFNFX1FPUztcXG5AQCAtMTA3OSwxMCArMTA4MSwxMCBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcXG4gXFx0c3RydWN0IGFpcm9oYV9mbG93X2RhdGEgZGF0YSA9IHt9O1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqb2RldiA9IE5VTEw7XFxuIFxcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqYWN0O1xcbitcXHR1OCBsNHByb3RvID0gMCwgcHJpb3JpdHkgPSAwO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2ZvZV9lbnRyeSBod2U7XFxuIFxcdGludCBlcnIsIGksIG9mZmxvYWRfdHlwZTtcXG4gXFx0dTE2IGFkZHJfdHlwZSA9IDA7XFxuLVxcdHU4IGw0cHJvdG8gPSAwO1xcbiBcXG4gXFx0aWYgKHJoYXNodGFibGVfbG9va3VwKFxcdTAwMjZldGgtXFx1MDAzZWZsb3dfdGFibGUsIFxcdTAwMjZmLVxcdTAwM2Vjb29raWUsXFxuIFxcdFxcdFxcdCAgICAgIGFpcm9oYV9mbG93X3RhYmxlX3BhcmFtcykpXFxuQEAgLTExNzcsNyArMTE3OSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGVyciA9IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoZXRoLCBcXHUwMDI2aHdlLCBvZGV2LCBvZmZsb2FkX3R5cGUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZkYXRhLCBsNHByb3RvKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmRhdGEsIGw0cHJvdG8sIHByaW9yaXR5KTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjM1OjQxLjM3MjExMzExNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE5ODc5NjE2NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBgcHJpb3JpdHlgIHZhcmlhYmxlIGluaXRpYWxpemVkIHRvIDAgYW5kIHBhc3NlcyBpdCB0byBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAsIHdoZXJlIGl0IGlzIHVzZWQgdG8gc2V0IHRoZSBgQUlST0hBX0ZPRV9RSURgIGZpZWxkLiBIb3dldmVyLCBgcHJpb3JpdHlgIGlzIG5ldmVyIG1vZGlmaWVkIGZyb20gMCBpbiBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWAsIHNvIHRoZSBmaWVsZCBpcyBhbHdheXMgc2V0IHRvIDAuIFRoaXMgaXMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byB0aGUgYmVoYXZpb3IgYmVmb3JlIHRoZSBwYXRjaC4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgY2FuIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDhlNWJkNTVkZDg2NGY4NzIyZTZkODI0N2I2ZmM5ZDVkZDRkYTlhZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMgMTI6MzU6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuaW5kZXggZTdjNzgyOTMwMDJhYmIuLmZkYjk3M2ZjNzc5YzgzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuQEAgLTMzMSw3ICszMzEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbiBcdFx0XHRcdFx0c3RydWN0IGFpcm9oYV9mb2VfZW50cnkgKmh3ZSxcbiBcdFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHR5cGUsXG4gXHRcdFx0XHRcdHN0cnVjdCBhaXJvaGFfZmxvd19kYXRhICpkYXRhLFxuLVx0XHRcdFx0XHRpbnQgbDRwcm90bylcbitcdFx0XHRcdFx0aW50IGw0cHJvdG8sIHU4IHByaW9yaXR5KVxuIHtcbiBcdHUzMiBxZGF0YSA9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9TSEFQRVJfSUQsIDB4N2YpLCBwb3J0c19wYWQsIHZhbDtcbiBcdGludCB3bGFuX2V0eXBlID0gLUVJTlZBTCwgZHNhX3BvcnQgPSBhaXJvaGFfZ2V0X2RzYV9wb3J0KFx1MDAyNm5ldGRldik7XG5AQCAtMzg2LDcgKzM4Niw5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0XHRcdCAqL1xuIFx0XHRcdGNoYW5uZWwgPSBkc2FfcG9ydCBcdTAwM2U9IDAgPyBkc2FfcG9ydCA6IHBvcnQtXHUwMDNlaWQ7XG4gXHRcdFx0Y2hhbm5lbCA9IGNoYW5uZWwgJSBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUztcbi1cdFx0XHRxZGF0YSB8PSBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfQ0hBTk5FTCwgY2hhbm5lbCk7XG4rXHRcdFx0cHJpb3JpdHkgPSBwcmlvcml0eSAlIEFJUk9IQV9OVU1fUU9TX1FVRVVFUztcbitcdFx0XHRxZGF0YSB8PSBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfQ0hBTk5FTCwgY2hhbm5lbCkgfFxuK1x0XHRcdFx0IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIHByaW9yaXR5KTtcbiBcbiBcdFx0XHR2YWwgfD0gRklFTERfUFJFUChBSVJPSEFfRk9FX0lCMl9QU0VfUE9SVCwgcHNlX3BvcnQpIHxcbiBcdFx0XHQgICAgICAgQUlST0hBX0ZPRV9JQjJfUFNFX1FPUztcbkBAIC0xMDc5LDEwICsxMDgxLDEwIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0c3RydWN0IGFpcm9oYV9mbG93X2RhdGEgZGF0YSA9IHt9O1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm9kZXYgPSBOVUxMO1xuIFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICphY3Q7XG4rXHR1OCBsNHByb3RvID0gMCwgcHJpb3JpdHkgPSAwO1xuIFx0c3RydWN0IGFpcm9oYV9mb2VfZW50cnkgaHdlO1xuIFx0aW50IGVyciwgaSwgb2ZmbG9hZF90eXBlO1xuIFx0dTE2IGFkZHJfdHlwZSA9IDA7XG4tXHR1OCBsNHByb3RvID0gMDtcbiBcbiBcdGlmIChyaGFzaHRhYmxlX2xvb2t1cChcdTAwMjZldGgtXHUwMDNlZmxvd190YWJsZSwgXHUwMDI2Zi1cdTAwM2Vjb29raWUsXG4gXHRcdFx0ICAgICAgYWlyb2hhX2Zsb3dfdGFibGVfcGFyYW1zKSlcbkBAIC0xMTc3LDcgKzExNzksNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRlcnIgPSBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKGV0aCwgXHUwMDI2aHdlLCBvZGV2LCBvZmZsb2FkX3R5cGUsXG4tXHRcdFx0XHRcdCAgIFx1MDAyNmRhdGEsIGw0cHJvdG8pO1xuK1x0XHRcdFx0XHQgICBcdTAwMjZkYXRhLCBsNHByb3RvLCBwcmlvcml0eSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MzU6NDEuMzcyMTE1MDI2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzEzNjYzMjc4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBhaXJvaGFfcHBlLmNgIFBhdGNoOiBBIFByaW9yaXR5IE92ZXJzaWdodD8qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBhIGB1OCBwcmlvcml0eWAgcGFyYW1ldGVyIGludG8gdGhlIGBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlYCBmdW5jdGlvbiB3aXRoaW4gdGhlIGBhaXJvaGFfcHBlLmNgIGRyaXZlci4gVGhlIG9idmlvdXMgY2hhbmdlIGlzIHRoYXQgdGhpcyBgcHJpb3JpdHlgIHZhbHVlIGlzIG5vdyBiZWluZyB1c2VkIHRvIHNldCBgQUlST0hBX0ZPRV9RSURgLCB3aGljaCBpcyBhIGtleSBwYXJhbWV0ZXIgZm9yIHF1ZXVpbmcvcHJpb3JpdGl6YXRpb24uIFRoYXQgbWFrZXMgc2Vuc2UsIGdpdmluZyB1cyBtb3JlIGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgdHJhZmZpYy5cblxuQnV0IGhhbmcgb27igKYgaW4gYGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2VgLCB3aGljaCBpcyB0aGUgY2FsbGluZyBmdW5jdGlvbiwgSSBzZWUgYHByaW9yaXR5YCBiZWluZyBpbml0aWFsaXplZCB0byAwLiBBbmQsIGFzIGZhciBhcyBJIGNhbiBzZWUsIGl0J3MgKm5ldmVyKiBtb2RpZmllZCBiZWZvcmUgYmVpbmcgcGFzc2VkIGRvd24gdG8gYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgLiBUaGF0IHNlZW1z4oCmIG9kZC4gSWYgdGhlIHByaW9yaXR5IGlzIGNvbnNpc3RlbnRseSAwLCB0aGUgbmV3IHBhcmFtZXRlciBpcyBlc3NlbnRpYWxseSBiZWluZyBpZ25vcmVkLCBvciBhY3RpbmcgYXMgYSBkZWZhdWx0IHdoaWNoIHNlZW1zIHVubmVjZXNzYXJ5LlxuXG5BbHJpZ2h0LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2suIEknbSBnb2luZyBiYWNrIHRvIHRoZSBjb2RlIGFuZCByZWFkaW5nIGl0IGFnYWluLiBPa2F5LCB5ZXMsIGhlcmUgd2UgYXJlOiBpbiB0aGUgZGlmZiBmb3IgYGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2VgLCBgcHJpb3JpdHlgIGlzIGRlY2xhcmVkLCBidXQgaXTigJlzIGluaXRpYWxpemVkIGFuZCBuZXZlciB1cGRhdGVkLiBJdOKAmXMgZGVmaW5pdGVseSBiZWluZyBwYXNzZWQgYXMgMC4gU28sIGl0IGxvb2tzIGxpa2UgdGhpcyBuZXcgYHByaW9yaXR5YCBwYXJhbWV0ZXIgaXMgYmVpbmcgaW50cm9kdWNlZCBidXQgaXNuJ3QgYWN0dWFsbHkgbGV2ZXJhZ2VkIHdpdGhpbiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBUaGlzIG5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSXQgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBidWcgb3IgaW5jb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiwgb3IgcGVyaGFwcyB0aGlzIHBhcmFtZXRlciBpcyBpbnRlbmRlZCB0byBiZSBzZXQgZnJvbSBhbiBleHRlcm5hbCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjM1OjQ4LjUwODc0OTczNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIzMTE4NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJpb3JpdHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTMzMD1zdGF0aWMgaW50IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzMzLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBhaXJvaGFfZmxvd19kYXRhICpkYXRhLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MzM0OlxcdFxcdFxcdFxcdFxcdGludCBsNHByb3RvLCB1OCBwcmlvcml0eSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTMzNS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTM4OC1cXHRcXHRcXHRjaGFubmVsID0gY2hhbm5lbCAlIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6Mzg5OlxcdFxcdFxcdHByaW9yaXR5ID0gcHJpb3JpdHkgJSBBSVJPSEFfTlVNX1FPU19RVUVVRVM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zOTAtXFx0XFx0XFx0cWRhdGEgfD0gRklFTERfUFJFUChBSVJPSEFfRk9FX0NIQU5ORUwsIGNoYW5uZWwpIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjM5MTpcXHRcXHRcXHRcXHQgRklFTERfUFJFUChBSVJPSEFfRk9FX1FJRCwgcHJpb3JpdHkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzkyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0xMDc2PXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMDgzLVxcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqYWN0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTA4NDpcXHR1OCBsNHByb3RvID0gMCwgcHJpb3JpdHkgPSAwO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTA4NS1cXHRzdHJ1Y3QgYWlyb2hhX2ZvZV9lbnRyeSBod2U7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTExODEtXFx0ZXJyID0gYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShldGgsIFxcdTAwMjZod2UsIG9kZXYsIG9mZmxvYWRfdHlwZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjExODI6XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmRhdGEsIGw0cHJvdG8sIHByaW9yaXR5KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTExODMtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MzU6NDguNjQxMDY5MzU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5NDIyNDI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBQcmlvcml0eSBGbGF3IGluIGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2UqKlxuXG5SaWdodCwgc28gYHByaW9yaXR5YCBpcyBpbml0aWFsbHkgc2V0IHRvIHplcm8gYW5kLCBhdCBmaXJzdCBnbGFuY2UgaW4gYGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2VgLCBpdCBkb2Vzbid0IGFwcGVhciB0byBiZSBtb2RpZmllZC4gVGhhdCByYWlzZXMgYSByZWQgZmxhZy4gWmVybyBwcmlvcml0eSBpcyB1c3VhbGx5IGEgcHJldHR5IGxvdyB2YWx1ZSwgb2Z0ZW4gbWVhbmluZyBsb3dlc3Qgc2NoZWR1bGluZyBwcmVjZWRlbmNlLiBJdCBjb3VsZCBsZWFkIHRvIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGlmIHRoaXMgb2ZmbG9hZCBpcyBjcml0aWNhbC4gQmVmb3JlIEkganVtcCB0byBjb25jbHVzaW9ucyB0aG91Z2gsIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIEnigJltIGdvaW5nIHRvIHF1aWNrbHkgc3RlcCB0aHJvdWdoIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYCBhZ2FpbiBmcm9tIHRvcCB0byBib3R0b20sIGNhcmVmdWxseSBjaGVja2luZyBmb3IgYW55IHBvdGVudGlhbCBtb2RpZmljYXRpb25zIHRvIHRoZSBgcHJpb3JpdHlgIHZhcmlhYmxlIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhhdCBmdW5jdGlvbiDigJMgZXZlbiBpZiBpdOKAmXMgdGhyb3VnaCBhIHBvaW50ZXIgb3Igc29tZSBpbmRpcmVjdCBtZWNoYW5pc20uIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gYmVmb3JlIEkgcmFpc2UgdGhpcyBhcyBhbiBpc3N1ZS4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NjAsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjozNTo1Mi4wMzUyOTU2MjNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjEyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDc2LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA3NjpcXHRzdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcXG4xMDc3OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpmKVxcbjEwNzg6XFx0e1xcbjEwNzk6XFx0XFx0c3RydWN0IGZsb3dfcnVsZSAqcnVsZSA9IGZsb3dfY2xzX29mZmxvYWRfZmxvd19ydWxlKGYpO1xcbjEwODA6XFx0XFx0c3RydWN0IGFpcm9oYV9mbG93X3RhYmxlX2VudHJ5ICplO1xcbjEwODE6XFx0XFx0c3RydWN0IGFpcm9oYV9mbG93X2RhdGEgZGF0YSA9IHt9O1xcbjEwODI6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKm9kZXYgPSBOVUxMO1xcbjEwODM6XFx0XFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICphY3Q7XFxuMTA4NDpcXHRcXHR1OCBsNHByb3RvID0gMCwgcHJpb3JpdHkgPSAwO1xcbjEwODU6XFx0XFx0c3RydWN0IGFpcm9oYV9mb2VfZW50cnkgaHdlO1xcbjEwODY6XFx0XFx0aW50IGVyciwgaSwgb2ZmbG9hZF90eXBlO1xcbjEwODc6XFx0XFx0dTE2IGFkZHJfdHlwZSA9IDA7XFxuMTA4ODpcXHRcXG4xMDg5OlxcdFxcdGlmIChyaGFzaHRhYmxlX2xvb2t1cChcXHUwMDI2ZXRoLVxcdTAwM2VmbG93X3RhYmxlLCBcXHUwMDI2Zi1cXHUwMDNlY29va2llLFxcbjEwOTA6XFx0XFx0XFx0XFx0ICAgICAgYWlyb2hhX2Zsb3dfdGFibGVfcGFyYW1zKSlcXG4xMDkxOlxcdFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbjEwOTI6XFx0XFxuMTA5MzpcXHRcXHRpZiAoIWZsb3dfcnVsZV9tYXRjaF9rZXkocnVsZSwgRkxPV19ESVNTRUNUT1JfS0VZX01FVEEpKVxcbjEwOTQ6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjEwOTU6XFx0XFxuMTA5NjpcXHRcXHRpZiAoZmxvd19ydWxlX21hdGNoX2tleShydWxlLCBGTE9XX0RJU1NFQ1RPUl9LRVlfQ09OVFJPTCkpIHtcXG4xMDk3OlxcdFxcdFxcdHN0cnVjdCBmbG93X21hdGNoX2NvbnRyb2wgbWF0Y2g7XFxuMTA5ODpcXHRcXG4xMDk5OlxcdFxcdFxcdGZsb3dfcnVsZV9tYXRjaF9jb250cm9sKHJ1bGUsIFxcdTAwMjZtYXRjaCk7XFxuMTEwMDpcXHRcXHRcXHRhZGRyX3R5cGUgPSBtYXRjaC5rZXktXFx1MDAzZWFkZHJfdHlwZTtcXG4xMTAxOlxcdFxcdFxcdGlmIChmbG93X3J1bGVfaGFzX2NvbnRyb2xfZmxhZ3MobWF0Y2gubWFzay1cXHUwMDNlZmxhZ3MsXFxuMTEwMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRmLVxcdTAwM2Vjb21tb24uZXh0YWNrKSlcXG4xMTAzOlxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMTA0OlxcdFxcdH0gZWxzZSB7XFxuMTEwNTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTEwNjpcXHRcXHR9XFxuMTEwNzpcXHRcXG4xMTA4OlxcdFxcdGlmIChmbG93X3J1bGVfbWF0Y2hfa2V5KHJ1bGUsIEZMT1dfRElTU0VDVE9SX0tFWV9CQVNJQykpIHtcXG4xMTA5OlxcdFxcdFxcdHN0cnVjdCBmbG93X21hdGNoX2Jhc2ljIG1hdGNoO1xcbjExMTA6XFx0XFxuMTExMTpcXHRcXHRcXHRmbG93X3J1bGVfbWF0Y2hfYmFzaWMocnVsZSwgXFx1MDAyNm1hdGNoKTtcXG4xMTEyOlxcdFxcdFxcdGw0cHJvdG8gPSBtYXRjaC5rZXktXFx1MDAzZWlwX3Byb3RvO1xcbjExMTM6XFx0XFx0fSBlbHNlIHtcXG4xMTE0OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMTE1OlxcdFxcdH1cXG4xMTE2OlxcdFxcbjExMTc6XFx0XFx0c3dpdGNoIChhZGRyX3R5cGUpIHtcXG4xMTE4OlxcdFxcdGNhc2UgMDpcXG4xMTE5OlxcdFxcdFxcdG9mZmxvYWRfdHlwZSA9IFBQRV9QS1RfVFlQRV9CUklER0U7XFxuMTEyMDpcXHRcXHRcXHRpZiAoZmxvd19ydWxlX21hdGNoX2tleShydWxlLCBGTE9XX0RJU1NFQ1RPUl9LRVlfRVRIX0FERFJTKSkge1xcbjExMjE6XFx0XFx0XFx0XFx0c3RydWN0IGZsb3dfbWF0Y2hfZXRoX2FkZHJzIG1hdGNoO1xcbjExMjI6XFx0XFxuMTEyMzpcXHRcXHRcXHRcXHRmbG93X3J1bGVfbWF0Y2hfZXRoX2FkZHJzKHJ1bGUsIFxcdTAwMjZtYXRjaCk7XFxuMTEyNDpcXHRcXHRcXHRcXHRtZW1jcHkoZGF0YS5ldGguaF9kZXN0LCBtYXRjaC5rZXktXFx1MDAzZWRzdCwgRVRIX0FMRU4pO1xcbjExMjU6XFx0XFx0XFx0XFx0bWVtY3B5KGRhdGEuZXRoLmhfc291cmNlLCBtYXRjaC5rZXktXFx1MDAzZXNyYywgRVRIX0FMRU4pO1xcbjExMjY6XFx0XFx0XFx0fSBlbHNlIHtcXG4xMTI3OlxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMTI4OlxcdFxcdFxcdH1cXG4xMTI5OlxcdFxcdFxcdGJyZWFrO1xcbjExMzA6XFx0XFx0Y2FzZSBGTE9XX0RJU1NFQ1RPUl9LRVlfSVBWNF9BRERSUzpcXG4xMTMxOlxcdFxcdFxcdG9mZmxvYWRfdHlwZSA9IFBQRV9QS1RfVFlQRV9JUFY0X0hOQVBUO1xcbjExMzI6XFx0XFx0XFx0YnJlYWs7XFxuMTEzMzpcXHRcXHRjYXNlIEZMT1dfRElTU0VDVE9SX0tFWV9JUFY2X0FERFJTOlxcbjExMzQ6XFx0XFx0XFx0b2ZmbG9hZF90eXBlID0gUFBFX1BLVF9UWVBFX0lQVjZfUk9VVEVfNVQ7XFxuMTEzNTpcXHRcXHRcXHRicmVhaztcXG4xMTM2OlxcdFxcdGRlZmF1bHQ6XFxuMTEzNzpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTEzODpcXHRcXHR9XFxuMTEzOTpcXHRcXG4xMTQwOlxcdFxcdGZsb3dfYWN0aW9uX2Zvcl9lYWNoKGksIGFjdCwgXFx1MDAyNnJ1bGUtXFx1MDAzZWFjdGlvbikge1xcbjExNDE6XFx0XFx0XFx0c3dpdGNoIChhY3QtXFx1MDAzZWlkKSB7XFxuMTE0MjpcXHRcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX01BTkdMRTpcXG4xMTQzOlxcdFxcdFxcdFxcdGlmIChvZmZsb2FkX3R5cGUgPT0gUFBFX1BLVF9UWVBFX0JSSURHRSlcXG4xMTQ0OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMTQ1OlxcdFxcbjExNDY6XFx0XFx0XFx0XFx0aWYgKGFjdC1cXHUwMDNlbWFuZ2xlLmh0eXBlID09IEZMT1dfQUNUX01BTkdMRV9IRFJfVFlQRV9FVEgpXFxuMTE0NzpcXHRcXHRcXHRcXHRcXHRhaXJvaGFfcHBlX2Zsb3dfbWFuZ2xlX2V0aChhY3QsIFxcdTAwMjZkYXRhLmV0aCk7XFxuMTE0ODpcXHRcXHRcXHRcXHRicmVhaztcXG4xMTQ5OlxcdFxcdFxcdGNhc2UgRkxPV19BQ1RJT05fUkVESVJFQ1Q6XFxuMTE1MDpcXHRcXHRcXHRcXHRvZGV2ID0gYWN0LVxcdTAwM2VkZXY7XFxuMTE1MTpcXHRcXHRcXHRcXHRicmVhaztcXG4xMTUyOlxcdFxcdFxcdGNhc2UgRkxPV19BQ1RJT05fQ1NVTTpcXG4xMTUzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjExNTQ6XFx0XFx0XFx0Y2FzZSBGTE9XX0FDVElPTl9WTEFOX1BVU0g6XFxuMTE1NTpcXHRcXHRcXHRcXHRpZiAoZGF0YS52bGFuLm51bSA9PSAyIHx8XFxuMTE1NjpcXHRcXHRcXHRcXHQgICAgYWN0LVxcdTAwM2V2bGFuLnByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSlcXG4xMTU3OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMTU4OlxcdFxcbjExNTk6XFx0XFx0XFx0XFx0ZGF0YS52bGFuLmhkcltkYXRhLnZsYW4ubnVtXS5pZCA9IGFjdC1cXHUwMDNldmxhbi52aWQ7XFxuMTE2MDpcXHRcXHRcXHRcXHRkYXRhLnZsYW4uaGRyW2RhdGEudmxhbi5udW1dLnByb3RvID0gYWN0LVxcdTAwM2V2bGFuLnByb3RvO1xcbjExNjE6XFx0XFx0XFx0XFx0ZGF0YS52bGFuLm51bSsrO1xcbjExNjI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTE2MzpcXHRcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1ZMQU5fUE9QOlxcbjExNjQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTE2NTpcXHRcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1BQUE9FX1BVU0g6XFxuMTE2NjpcXHRcXHRcXHRcXHRpZiAoZGF0YS5wcHBvZS5udW0gPT0gMSB8fCBkYXRhLnZsYW4ubnVtID09IDIpXFxuMTE2NzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTE2ODpcXHRcXG4xMTY5OlxcdFxcdFxcdFxcdGRhdGEucHBwb2Uuc2lkID0gYWN0LVxcdTAwM2VwcHBvZS5zaWQ7XFxuMTE3MDpcXHRcXHRcXHRcXHRkYXRhLnBwcG9lLm51bSsrO1xcbjExNzE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTE3MjpcXHRcXHRcXHRkZWZhdWx0OlxcbjExNzM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjExNzQ6XFx0XFx0XFx0fVxcbjExNzU6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjozNTo1Mi4wMzU0NTg1ODNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzA0OTkyMDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhZG9wdGluZyB0aGUgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlIGFzIHJlcXVlc3RlZCwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LlxuXG4qKkFuYWx5emluZyBGdW5jdGlvbiBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIEkndmUgZ290IHRoZSBnZW5lcmFsIGNvbnRleHQgbG9ja2VkIGluLiBOb3csIEkgbmVlZCB0byB6b29tIGluIGFuZCBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBkZXRhaWwuIEl0J3MgdGltZSB0byBkaXZlIGludG8gdGhlIGNvcmUgbG9naWMgYW5kIGdyYXNwIGhvdyB0aGlzIGZ1bmN0aW9uIGFjaGlldmVzIGl0cyBwdXJwb3NlLiBUaGUgYmlnIHBpY3R1cmUgaXMgc2V0LCBzbyBsZXQncyBwYXJzZSB0aHJvdWdoIHRoZSBsaW5lcyBhbmQgdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBMZXQncyBzZWUgaG93IHRoZSBpbmRpdmlkdWFsIGNvbXBvbmVudHMgZml0IHRvZ2V0aGVyIHRvIHByb2R1Y2UgdGhlIGRlc2lyZWQgb3V0cHV0LCBvciBpbiB0aGlzIGNhc2UsIGNvbnRpbnVlIG91ciB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTAwLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjozNTo1NS4zNDA0NTMzMThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzkzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTc2LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE3NjpcXHRcXG4xMTc3OlxcdFxcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihkYXRhLmV0aC5oX3NvdXJjZSkgfHxcXG4xMTc4OlxcdFxcdCAgICAhaXNfdmFsaWRfZXRoZXJfYWRkcihkYXRhLmV0aC5oX2Rlc3QpKVxcbjExNzk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTE4MDpcXHRcXG4xMTgxOlxcdFxcdGVyciA9IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoZXRoLCBcXHUwMDI2aHdlLCBvZGV2LCBvZmZsb2FkX3R5cGUsXFxuMTE4MjpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2ZGF0YSwgbDRwcm90bywgcHJpb3JpdHkpO1xcbjExODM6XFx0XFx0aWYgKGVycilcXG4xMTg0OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTE4NTpcXHRcXG4xMTg2OlxcdFxcdGlmIChmbG93X3J1bGVfbWF0Y2hfa2V5KHJ1bGUsIEZMT1dfRElTU0VDVE9SX0tFWV9QT1JUUykpIHtcXG4xMTg3OlxcdFxcdFxcdHN0cnVjdCBmbG93X21hdGNoX3BvcnRzIHBvcnRzO1xcbjExODg6XFx0XFxuMTE4OTpcXHRcXHRcXHRpZiAob2ZmbG9hZF90eXBlID09IFBQRV9QS1RfVFlQRV9CUklER0UpXFxuMTE5MDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTE5MTpcXHRcXG4xMTkyOlxcdFxcdFxcdGZsb3dfcnVsZV9tYXRjaF9wb3J0cyhydWxlLCBcXHUwMDI2cG9ydHMpO1xcbjExOTM6XFx0XFx0XFx0ZGF0YS5zcmNfcG9ydCA9IHBvcnRzLmtleS1cXHUwMDNlc3JjO1xcbjExOTQ6XFx0XFx0XFx0ZGF0YS5kc3RfcG9ydCA9IHBvcnRzLmtleS1cXHUwMDNlZHN0O1xcbjExOTU6XFx0XFx0fSBlbHNlIGlmIChvZmZsb2FkX3R5cGUgIT0gUFBFX1BLVF9UWVBFX0JSSURHRSkge1xcbjExOTY6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjExOTc6XFx0XFx0fVxcbjExOTg6XFx0XFxuMTE5OTpcXHRcXHRpZiAoYWRkcl90eXBlID09IEZMT1dfRElTU0VDVE9SX0tFWV9JUFY0X0FERFJTKSB7XFxuMTIwMDpcXHRcXHRcXHRzdHJ1Y3QgZmxvd19tYXRjaF9pcHY0X2FkZHJzIGFkZHJzO1xcbjEyMDE6XFx0XFxuMTIwMjpcXHRcXHRcXHRmbG93X3J1bGVfbWF0Y2hfaXB2NF9hZGRycyhydWxlLCBcXHUwMDI2YWRkcnMpO1xcbjEyMDM6XFx0XFx0XFx0ZGF0YS52NC5zcmNfYWRkciA9IGFkZHJzLmtleS1cXHUwMDNlc3JjO1xcbjEyMDQ6XFx0XFx0XFx0ZGF0YS52NC5kc3RfYWRkciA9IGFkZHJzLmtleS1cXHUwMDNlZHN0O1xcbjEyMDU6XFx0XFx0XFx0YWlyb2hhX3BwZV9mb2VfZW50cnlfc2V0X2lwdjRfdHVwbGUoXFx1MDAyNmh3ZSwgXFx1MDAyNmRhdGEsIGZhbHNlKTtcXG4xMjA2OlxcdFxcdH1cXG4xMjA3OlxcdFxcbjEyMDg6XFx0XFx0aWYgKGFkZHJfdHlwZSA9PSBGTE9XX0RJU1NFQ1RPUl9LRVlfSVBWNl9BRERSUykge1xcbjEyMDk6XFx0XFx0XFx0c3RydWN0IGZsb3dfbWF0Y2hfaXB2Nl9hZGRycyBhZGRycztcXG4xMjEwOlxcdFxcbjEyMTE6XFx0XFx0XFx0Zmxvd19ydWxlX21hdGNoX2lwdjZfYWRkcnMocnVsZSwgXFx1MDAyNmFkZHJzKTtcXG4xMjEyOlxcdFxcbjEyMTM6XFx0XFx0XFx0ZGF0YS52Ni5zcmNfYWRkciA9IGFkZHJzLmtleS1cXHUwMDNlc3JjO1xcbjEyMTQ6XFx0XFx0XFx0ZGF0YS52Ni5kc3RfYWRkciA9IGFkZHJzLmtleS1cXHUwMDNlZHN0O1xcbjEyMTU6XFx0XFx0XFx0YWlyb2hhX3BwZV9mb2VfZW50cnlfc2V0X2lwdjZfdHVwbGUoXFx1MDAyNmh3ZSwgXFx1MDAyNmRhdGEpO1xcbjEyMTY6XFx0XFx0fVxcbjEyMTc6XFx0XFxuMTIxODpcXHRcXHRmbG93X2FjdGlvbl9mb3JfZWFjaChpLCBhY3QsIFxcdTAwMjZydWxlLVxcdTAwM2VhY3Rpb24pIHtcXG4xMjE5OlxcdFxcdFxcdGlmIChhY3QtXFx1MDAzZWlkICE9IEZMT1dfQUNUSU9OX01BTkdMRSlcXG4xMjIwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEyMjE6XFx0XFxuMTIyMjpcXHRcXHRcXHRpZiAob2ZmbG9hZF90eXBlID09IFBQRV9QS1RfVFlQRV9CUklER0UpXFxuMTIyMzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTIyNDpcXHRcXG4xMjI1OlxcdFxcdFxcdHN3aXRjaCAoYWN0LVxcdTAwM2VtYW5nbGUuaHR5cGUpIHtcXG4xMjI2OlxcdFxcdFxcdGNhc2UgRkxPV19BQ1RfTUFOR0xFX0hEUl9UWVBFX1RDUDpcXG4xMjI3OlxcdFxcdFxcdGNhc2UgRkxPV19BQ1RfTUFOR0xFX0hEUl9UWVBFX1VEUDpcXG4xMjI4OlxcdFxcdFxcdFxcdGVyciA9IGFpcm9oYV9wcGVfZmxvd19tYW5nbGVfcG9ydHMoYWN0LCBcXHUwMDI2ZGF0YSk7XFxuMTIyOTpcXHRcXHRcXHRcXHRicmVhaztcXG4xMjMwOlxcdFxcdFxcdGNhc2UgRkxPV19BQ1RfTUFOR0xFX0hEUl9UWVBFX0lQNDpcXG4xMjMxOlxcdFxcdFxcdFxcdGVyciA9IGFpcm9oYV9wcGVfZmxvd19tYW5nbGVfaXB2NChhY3QsIFxcdTAwMjZkYXRhKTtcXG4xMjMyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjEyMzM6XFx0XFx0XFx0Y2FzZSBGTE9XX0FDVF9NQU5HTEVfSERSX1RZUEVfRVRIOlxcbjEyMzQ6XFx0XFx0XFx0XFx0LyogaGFuZGxlZCBlYXJsaWVyICovXFxuMTIzNTpcXHRcXHRcXHRcXHRicmVhaztcXG4xMjM2OlxcdFxcdFxcdGRlZmF1bHQ6XFxuMTIzNzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTIzODpcXHRcXHRcXHR9XFxuMTIzOTpcXHRcXG4xMjQwOlxcdFxcdFxcdGlmIChlcnIpXFxuMTI0MTpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjEyNDI6XFx0XFx0fVxcbjEyNDM6XFx0XFxuMTI0NDpcXHRcXHRpZiAoYWRkcl90eXBlID09IEZMT1dfRElTU0VDVE9SX0tFWV9JUFY0X0FERFJTKSB7XFxuMTI0NTpcXHRcXHRcXHRlcnIgPSBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9zZXRfaXB2NF90dXBsZShcXHUwMDI2aHdlLCBcXHUwMDI2ZGF0YSwgdHJ1ZSk7XFxuMTI0NjpcXHRcXHRcXHRpZiAoZXJyKVxcbjEyNDc6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMjQ4OlxcdFxcdH1cXG4xMjQ5OlxcdFxcbjEyNTA6XFx0XFx0ZSA9IGt6YWxsb2Nfb2JqKCplKTtcXG4xMjUxOlxcdFxcdGlmICghZSlcXG4xMjUyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjEyNTM6XFx0XFxuMTI1NDpcXHRcXHRlLVxcdTAwM2Vjb29raWUgPSBmLVxcdTAwM2Vjb29raWU7XFxuMTI1NTpcXHRcXHRtZW1jcHkoXFx1MDAyNmUtXFx1MDAzZWRhdGEsIFxcdTAwMjZod2UsIHNpemVvZihlLVxcdTAwM2VkYXRhKSk7XFxuMTI1NjpcXHRcXG4xMjU3OlxcdFxcdGVyciA9IGFpcm9oYV9wcGVfZm9lX2Zsb3dfY29tbWl0X2VudHJ5KGV0aC1cXHUwMDNlcHBlLCBlKTtcXG4xMjU4OlxcdFxcdGlmIChlcnIpXFxuMTI1OTpcXHRcXHRcXHRnb3RvIGZyZWVfZW50cnk7XFxuMTI2MDpcXHRcXG4xMjYxOlxcdFxcdGVyciA9IHJoYXNodGFibGVfaW5zZXJ0X2Zhc3QoXFx1MDAyNmV0aC1cXHUwMDNlZmxvd190YWJsZSwgXFx1MDAyNmUtXFx1MDAzZW5vZGUsXFxuMTI2MjpcXHRcXHRcXHRcXHRcXHQgICAgIGFpcm9oYV9mbG93X3RhYmxlX3BhcmFtcyk7XFxuMTI2MzpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xMjY0OlxcdFxcdFxcdGdvdG8gcmVtb3ZlX2ZvZV9lbnRyeTtcXG4xMjY1OlxcdFxcbjEyNjY6XFx0XFx0cmV0dXJuIDA7XFxuMTI2NzpcXHRcXG4xMjY4OlxcdHJlbW92ZV9mb2VfZW50cnk6XFxuMTI2OTpcXHRcXHRhaXJvaGFfcHBlX2ZvZV9mbG93X3JlbW92ZV9lbnRyeShldGgtXFx1MDAzZXBwZSwgZSk7XFxuMTI3MDpcXHRmcmVlX2VudHJ5OlxcbjEyNzE6XFx0XFx0a2ZyZWUoZSk7XFxuMTI3MjpcXHRcXG4xMjczOlxcdFxcdHJldHVybiBlcnI7XFxuMTI3NDpcXHR9XFxuMTI3NTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MzU6NTUuMzQwNTk0NjQ4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA5MTc3MTEzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQUEUgRmxvdyBPZmZsb2FkIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBJJ20gbG9va2luZyBhdCB0aGlzIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYCBmdW5jdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IHRoZSBgcHJpb3JpdHlgIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkIHRvIDAgYW5kLCBhdCBmaXJzdCBnbGFuY2UsIGRvZXNuJ3Qgc2VlbSB0byBiZSBtb2RpZmllZCBhbnl3aGVyZSB3aXRoaW4gdGhlIGZ1bmN0aW9uIGl0c2VsZi4gIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCwgdGhvdWdoLiBJJ20gZ29pbmcgdG8gbG9vayBtb3JlIGNsb3NlbHkgd2l0aGluIHRoaXMgZnVuY3Rpb24uICBPa2F5LCBJIHNlZSBpdCdzIGRlY2xhcmVkIGFuZCBpbml0aWFsaXplZCBoZXJlOiBgdTggbDRwcm90byA9IDAsIHByaW9yaXR5ID0gMDtgLiBUaGVuIGl0J3MgcGFzc2VkIHRvIGBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlYC4uLiBidXQgaXQncyBwYXNzZWQgYnkgdmFsdWUsIGB1OCBwcmlvcml0eWAuIFNvLCBhbnkgY2hhbmdlcyBpbnNpZGUgdGhhdCBmdW5jdGlvbiB3b24ndCBwcm9wYWdhdGUgYmFjay4gVGhpcyBzdWdnZXN0cyBpdCdzIGxpa2VseSBhbHdheXMgMCBhdCB0aGlzIHN0YWdlLlxuXG5JZiBgcHJpb3JpdHlgIGlzIGFsd2F5cyB6ZXJvLCBkb2VzIHRoaXMgcGF0Y2ggZXZlbiBkbyBhbnl0aGluZyBuZXc/IEl0IHNlZW1zIHVubGlrZWx5LiAgSSBuZWVkIHRvIHRyYWNlIHdoZXJlIGl0ICpjb3VsZCogYmUgY2hhbmdlZC4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGBwcmlvcml0eWAgdmFsdWUgKmNvdWxkKiBiZSBzZXQuIEl0IHNlZW1zIGxpa2UgdGhlIGNyaXRpY2FsIHBpZWNlIGhlcmUgaXMgdGhlIGBmbG93X2FjdGlvbl9mb3JfZWFjaGAgbG9vcC4gIExldCdzIHNlZS5cblxuSSBzZWUgdGhlcmUncyBhIGxvb3AsIGxvb2tpbmcgYXQgYHJ1bGUtXHUwMDNlYWN0aW9uYC4gIEhlcmUgaXQgaXMuIEknbSBnb2luZyB0aHJvdWdoIHRoZSBjYXNlcy4uLiBJIHNlZSBgRkxPV19BQ1RJT05fTUFOR0xFYCwgYEZMT1dfQUNUSU9OX1JFRElSRUNUYCwgYEZMT1dfQUNUSU9OX0NTVU1gLCBhbmQgc28gb24uXG5cbldhaXQsIGlzIGBGTE9XX0FDVElPTl9QUklPUklUWWAgKmhhbmRsZWQqIGluIHRoaXMgbG9vcD8gSSBkb24ndCBzZWUgaXQhIEl0J3Mgbm90IGxpc3RlZCEgIEkgbmVlZCB0byBjaGVjayB0aGUgb3JpZ2luYWwgY29kZSB0byBzZWUgaWYgdGhlcmUgd2FzIGEgZGlmZmVyZW5jZS4gIEknbSBnb2luZyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSBoYW5kbGVzIHRoaXMuIE5vLCBpdCBpc24ndC4gU28gdGhhdCBtZWFucyB0aGF0IHRoZSB2YWx1ZSBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgdG8gMC5cblxuSWYgYHByaW9yaXR5YCAqaXMqIGFsd2F5cyB6ZXJvLCB0aGVuIGFueSBzdWJzZXF1ZW50IG9wZXJhdGlvbiBsaWtlIGBwcmlvcml0eSA9IHByaW9yaXR5ICUgQUlST0hBX05VTV9RT1NfUVVFVUVTO2AgaXMgc2ltcGxpZmllZCB0byBgMCAlIEFJUk9IQV9OVU1fUU9TX1FVRVVFU2AsIHdoaWNoIGlzIGNsZWFybHkgYWx3YXlzIHplcm8uIE9rYXksIGFuZCB0aGVuIGBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfUUlELCBwcmlvcml0eSlgIGJlY29tZXMgYEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIDApYC5cblxuTm93LCB0aGUgdGhpbmcgdGhhdCdzIGltcG9ydGFudCBoZXJlIGlzIHRoYXQgYEFJUk9IQV9GT0VfUUlEYCBpcyBhICptYXNrKi4gSSBuZWVkIHRvIGZpbmQgaXRzIHZhbHVlLiBUaGF0IHdpbGwgdGVsbCBtZSBleGFjdGx5IHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MjgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjozNjowNi4yNTgzMTU2MjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NzM3NDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFJUk9IQV9GT0VfUUlEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaD0yODY9c3RydWN0IGFpcm9oYV9mb2VfbWFjX2luZm8ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaC0zMjItI2RlZmluZSBBSVJPSEFfRk9FX0NIQU5ORUxcXHRcXHRcXHRHRU5NQVNLKDE1LCAxMSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oOjMyMzojZGVmaW5lIEFJUk9IQV9GT0VfUUlEXFx0XFx0XFx0XFx0R0VOTUFTSygxMCwgOClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oLTMyNC0jZGVmaW5lIEFJUk9IQV9GT0VfRFBJXFx0XFx0XFx0XFx0QklUKDcpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTMzMD1zdGF0aWMgaW50IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzkwLVxcdFxcdFxcdHFkYXRhIHw9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9DSEFOTkVMLCBjaGFubmVsKSB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozOTE6XFx0XFx0XFx0XFx0IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIHByaW9yaXR5KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTM5Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9NjIxPXN0YXRpYyB2b2lkIGFpcm9oYV9wcGVfZm9lX2Zsb3dfc3RhdHNfdXBkYXRlKHN0cnVjdCBhaXJvaGFfcHBlICpwcGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTY2MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjY2MTpcXHR2YWwgPSBGSUVMRF9HRVQoQUlST0hBX0ZPRV9DSEFOTkVMIHwgQUlST0hBX0ZPRV9RSUQsICpkYXRhKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTY2Mi1cXHQqZGF0YSA9ICgqZGF0YSBcXHUwMDI2IH5BSVJPSEFfRk9FX0FDVERQKSB8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjM2OjA2LjMxNzA2MDUxMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODAzOTI5ODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHByaW9yaXR5YCBBcmd1bWVudCBpbiBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAqKlxuXG5Pa2F5LCBzbyBgcHJpb3JpdHlgIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB2ZXJpZnkgd2hldGhlciB0aGF0IGFyZ3VtZW50IGlzIGJlaW5nIG1vZGlmaWVkIGluc2lkZSB0aGUgYGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2VgIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgdmFsdWUgcGFzc2VkIGlzbid0IGJlaW5nIG92ZXJ3cml0dGVuIG9yIGNoYW5nZWQuXG5cbkxldCdzIGxvb2sgYXQgdGhlIHByb3ZpZGVkIGRpZmYgZm9yIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYC4gU2Nhbm5pbmcgdGhyb3VnaCB0aGUgY29kZSwgSSBzZWUgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb246IHRoZXJlJ3MgYW4gYWRkaXRpb24gb2YgYHByaW9yaXR5YCBhcyBhbiBhcmd1bWVudCBwYXNzZWQgdG8gYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgLiBMb29raW5nIGF0IHRoZSBkaWZmLCBJIGNhbiBjb25maXJtIHRoYXQgYHByaW9yaXR5YCBpcyAqbm90KiBiZWluZyBtb2RpZmllZCB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gSXQncyBpbml0aWFsaXplZCwgYnV0IG5vdCBjaGFuZ2VkIGJlZm9yZSBiZWluZyBwYXNzZWQuXG5cbkdpdmVuIHRoaXMsIEkgaGF2ZSB0byBjb25zaWRlciB3aGV0aGVyIHRoZXJlJ3MgYW5vdGhlciByZWxhdGVkIHBhdGNoIG9yIGlmIHRoZXJlJ3Mgc29tZXRoaW5nIEknbSBtaXNzaW5nIHdpdGhpbiB0aGUgY3VycmVudCBjb2RlIGNvbnRleHQsIHN1Y2ggYXMgYSBjYWxsIHRvIGFub3RoZXIgZnVuY3Rpb24gaW4gdGhlIHBhdGNoLCBvciBpZiB0aGUgbG9naWMgZmxvdyBhZmZlY3RzIHRoYXQgYHByaW9yaXR5YCB2YWx1ZS4gSSdsbCBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2ggdG8gY29uZmlybSB0aGUgYXJndW1lbnQgaXMgYmVpbmcgdXNlZCBhcyBpbnRlbmRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcwMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjozNjoxMi4xMjA5OTMyNDNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjMyMDQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcmlvcml0eVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9MzMwPXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zMzMtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGFpcm9oYV9mbG93X2RhdGEgKmRhdGEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozMzQ6XFx0XFx0XFx0XFx0XFx0aW50IGw0cHJvdG8sIHU4IHByaW9yaXR5KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzM1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzg4LVxcdFxcdFxcdGNoYW5uZWwgPSBjaGFubmVsICUgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozODk6XFx0XFx0XFx0cHJpb3JpdHkgPSBwcmlvcml0eSAlIEFJUk9IQV9OVU1fUU9TX1FVRVVFUztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTM5MC1cXHRcXHRcXHRxZGF0YSB8PSBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfQ0hBTk5FTCwgY2hhbm5lbCkgfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MzkxOlxcdFxcdFxcdFxcdCBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfUUlELCBwcmlvcml0eSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zOTItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTEwNzY9c3RhdGljIGludCBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTEwODMtXFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICphY3Q7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxMDg0OlxcdHU4IGw0cHJvdG8gPSAwLCBwcmlvcml0eSA9IDA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMDg1LVxcdHN0cnVjdCBhaXJvaGFfZm9lX2VudHJ5IGh3ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTE4MS1cXHRlcnIgPSBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKGV0aCwgXFx1MDAyNmh3ZSwgb2Rldiwgb2ZmbG9hZF90eXBlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTE4MjpcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2ZGF0YSwgbDRwcm90bywgcHJpb3JpdHkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTE4My1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjozNjoxMi4yNTczMjA1NzNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYxMDgyMTExNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLlxuXG4qKkFuYWx5emluZyB0aGUgYGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2VgIEZ1bmN0aW9uKipcblxuSG1tLCBob2xkIG9uIGEgc2Vjb25kLi4uIGlzIGBwcmlvcml0eWAgYWN0dWFsbHkgZ2V0dGluZyBtb2RpZmllZCAqaW5zaWRlKiBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWA/IFRoYXQncyBub3Qgd2hhdCBJIGluaXRpYWxseSBleHBlY3RlZC4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGlzLiBMZXQgbWUganVzdCBxdWlja2x5IGdvIGJhY2sgYW5kIHRob3JvdWdobHkgcmV2aWV3IHRoYXQgYGZsb3dfYWN0aW9uX2Zvcl9lYWNoYCBsb29wIGFnYWluLiBJIHByb2JhYmx5IGJyZWV6ZWQgdGhyb3VnaCBpdCB0b28gcXVpY2tseSB0aGUgZmlyc3QgdGltZSBhbmQgbWlzc2VkIHNvbWV0aGluZyBzdWJ0bGUgYWJvdXQgaG93IGBwcmlvcml0eWAgaXMgYmVpbmcgaGFuZGxlZCB3aXRoaW4gdGhhdCBjb250ZXh0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZXhhY3QgZmxvdyBhbmQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBoZXJlIGJlZm9yZSBJIHByb2NlZWQgYW55IGZ1cnRoZXIuIEl0J3MgZWFzeSB0byBvdmVybG9vayB0aGluZ3MgaW4gdGhlc2Uga2luZHMgb2Ygcm91dGluZXMgaWYgeW91J3JlIG5vdCBtZXRpY3Vsb3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAzMSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjM2OjE2Ljg2ODE0ODY3N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTMxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTQwOlxcdFxcdGZsb3dfYWN0aW9uX2Zvcl9lYWNoKGksIGFjdCwgXFx1MDAyNnJ1bGUtXFx1MDAzZWFjdGlvbikge1xcbjExNDE6XFx0XFx0XFx0c3dpdGNoIChhY3QtXFx1MDAzZWlkKSB7XFxuMTE0MjpcXHRcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX01BTkdMRTpcXG4xMTQzOlxcdFxcdFxcdFxcdGlmIChvZmZsb2FkX3R5cGUgPT0gUFBFX1BLVF9UWVBFX0JSSURHRSlcXG4xMTQ0OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMTQ1OlxcdFxcbjExNDY6XFx0XFx0XFx0XFx0aWYgKGFjdC1cXHUwMDNlbWFuZ2xlLmh0eXBlID09IEZMT1dfQUNUX01BTkdMRV9IRFJfVFlQRV9FVEgpXFxuMTE0NzpcXHRcXHRcXHRcXHRcXHRhaXJvaGFfcHBlX2Zsb3dfbWFuZ2xlX2V0aChhY3QsIFxcdTAwMjZkYXRhLmV0aCk7XFxuMTE0ODpcXHRcXHRcXHRcXHRicmVhaztcXG4xMTQ5OlxcdFxcdFxcdGNhc2UgRkxPV19BQ1RJT05fUkVESVJFQ1Q6XFxuMTE1MDpcXHRcXHRcXHRcXHRvZGV2ID0gYWN0LVxcdTAwM2VkZXY7XFxuMTE1MTpcXHRcXHRcXHRcXHRicmVhaztcXG4xMTUyOlxcdFxcdFxcdGNhc2UgRkxPV19BQ1RJT05fQ1NVTTpcXG4xMTUzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjExNTQ6XFx0XFx0XFx0Y2FzZSBGTE9XX0FDVElPTl9WTEFOX1BVU0g6XFxuMTE1NTpcXHRcXHRcXHRcXHRpZiAoZGF0YS52bGFuLm51bSA9PSAyIHx8XFxuMTE1NjpcXHRcXHRcXHRcXHQgICAgYWN0LVxcdTAwM2V2bGFuLnByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSlcXG4xMTU3OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMTU4OlxcdFxcbjExNTk6XFx0XFx0XFx0XFx0ZGF0YS52bGFuLmhkcltkYXRhLnZsYW4ubnVtXS5pZCA9IGFjdC1cXHUwMDNldmxhbi52aWQ7XFxuMTE2MDpcXHRcXHRcXHRcXHRkYXRhLnZsYW4uaGRyW2RhdGEudmxhbi5udW1dLnByb3RvID0gYWN0LVxcdTAwM2V2bGFuLnByb3RvO1xcbjExNjE6XFx0XFx0XFx0XFx0ZGF0YS52bGFuLm51bSsrO1xcbjExNjI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTE2MzpcXHRcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1ZMQU5fUE9QOlxcbjExNjQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTE2NTpcXHRcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1BQUE9FX1BVU0g6XFxuMTE2NjpcXHRcXHRcXHRcXHRpZiAoZGF0YS5wcHBvZS5udW0gPT0gMSB8fCBkYXRhLnZsYW4ubnVtID09IDIpXFxuMTE2NzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTE2ODpcXHRcXG4xMTY5OlxcdFxcdFxcdFxcdGRhdGEucHBwb2Uuc2lkID0gYWN0LVxcdTAwM2VwcHBvZS5zaWQ7XFxuMTE3MDpcXHRcXHRcXHRcXHRkYXRhLnBwcG9lLm51bSsrO1xcbjExNzE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTE3MjpcXHRcXHRcXHRkZWZhdWx0OlxcbjExNzM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjExNzQ6XFx0XFx0XFx0fVxcbjExNzU6XFx0XFx0fVxcbjExNzY6XFx0XFxuMTE3NzpcXHRcXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGF0YS5ldGguaF9zb3VyY2UpIHx8XFxuMTE3ODpcXHRcXHQgICAgIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGF0YS5ldGguaF9kZXN0KSlcXG4xMTc5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjozNjoxNi44Njg2MTI3MjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU5NDI5Nzk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZsb3cgT2ZmbG9hZCBQYXRjaCoqXG5cbk9rYXksIGZpcnN0IHRob3VnaHQ6IGhvbGQgb24sIHRoZSBgcHJpb3JpdHlgIHZhcmlhYmxlIGlzbid0IGFjdHVhbGx5IGJlaW5nIG1vZGlmaWVkIHdpdGhpbiBgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZWAgaXRzZWxmLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBzb21ldGhpbmc7IGlzIGBwcmlvcml0eWAgYWx0ZXJlZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlP1xuXG5BaGEhIE5vdyBJIHNlZSBpdC4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggYXV0aG9yIG5lZ2xlY3RlZCB0byBpbmNsdWRlIGBjYXNlIEZMT1dfQUNUSU9OX1BSSU9SSVRZOiBwcmlvcml0eSA9IGFjdC1cdTAwM2Vwcmlvcml0eTsgYnJlYWs7YC4gVGhlIGRpZmYgc2VlbXMgdG8gb21pdCB0aGF0IGNydWNpYWwgcGFydCwgbWVhbmluZyBgcHJpb3JpdHlgIHdpbGwgaW52YXJpYWJseSBiZSBzZXQgdG8gemVyby5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgYHByaW9yaXR5YCBpcyBkZWNsYXJlZCwgYnV0IG5ldmVyIGFzc2lnbmVkIGEgdmFsdWUgb3RoZXIgdGhhbiB0aGUgaW5pdGlhbCB6ZXJvLCBtYWtpbmcgYEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIHByaW9yaXR5KWAgYWx3YXlzIGV2YWx1YXRlIHRvIHplcm8uXG5cbk9rYXksIGxldCdzIHJld2luZCBhbmQgc2VlIGhvdyB0aGUgYHFkYXRhYCB3YXMgaGFuZGxlZCBiZWZvcmUgdGhpcyBwYXRjaC4gSXQgc2VlbXMgdGhhdCBiZWZvcmUgdGhlIHBhdGNoLCBgQUlST0hBX0ZPRV9RSURgIHdhc24ndCBldmVuIHNldCBpbiB0aGUgYHFkYXRhYCBmaWVsZC5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIGBwcmlvcml0eWAgaXMgYWx3YXlzIHplcm8sIGFuZCBgRklFTERfUFJFUChBSVJPSEFfRk9FX1FJRCwgMClgIGlzIGFsc28gemVybywgdGhlIGBxZGF0YWAgdmFsdWUgc2hvdWxkIGJlIGlkZW50aWNhbCB0byB3aGF0IGl0IHdhcyBiZWZvcmUgdGhpcyBwYXRjaC5cblxuU28gaW4gZWZmZWN0LCB0aGUgcGF0Y2gsIGR1ZSB0byB0aGUgb21pc3Npb24sIG1ha2VzIG5vIGZ1bmN0aW9uYWwgZGlmZmVyZW5jZSBpbiBgcWRhdGFgLiBJcyB0aGVyZSBhbnkgb3RoZXIgcGxhY2Ugd2hlcmUgYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgIGlzIHVzZWQ/IFRoYXQncyB0aGUgbmV4dCBwb2ludCB0byBjb25zaWRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NDMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjozNjoyNS40NjI5MTQ0OTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTkxNTg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0zMjE9c3RhdGljIHZvaWQgYWlyb2hhX3BwZV9mb2Vfc2V0X2JyaWRnZV9hZGRycyhzdHJ1Y3QgYWlyb2hhX2ZvZV9icmlkZ2UgKmJyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zMjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozMzA6c3RhdGljIGludCBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zMzEtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGFpcm9oYV9mb2VfZW50cnkgKmh3ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9MTA3Nj1zdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTE4MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjExODE6XFx0ZXJyID0gYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShldGgsIFxcdTAwMjZod2UsIG9kZXYsIG9mZmxvYWRfdHlwZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTExODItXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmRhdGEsIGw0cHJvdG8sIHByaW9yaXR5KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MzY6MjUuNjAyODM4NjMyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwNTE0NzI5NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQUEUgRmxvdyBPZmZsb2FkIExvZ2ljKipcblxuT2theSwgc28gYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgIGlzIG9ubHkgY2FsbGVkIGZyb20gYGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2VgLiBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIEkndmUgY29uZmlybWVkLiBBbmQgdGhlIGBwcmlvcml0eWAgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQgdG8gMC4gQnV0IEkgaGFkIGEgbmFnZ2luZyBmZWVsaW5nLi4uIGRvZXMgdGhlIGBwcmlvcml0eWAgdmFsdWUgZ2V0IG1vZGlmaWVkIHdpdGhpbiB0aGUgYGZsb3dfYWN0aW9uX2Zvcl9lYWNoYCBsb29wIGluIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYD8gSSB0aG91Z2h0IEkgaGFkIGdvbmUgdGhyb3VnaCB0aGF0IHBhcnQgYWxyZWFkeSwgYnV0IGxldCdzIGRvdWJsZS1jaGVjay5cblxuTGV0IG1lIGdvIHRocm91Z2ggdGhlIGBmbG93X2FjdGlvbl9mb3JfZWFjaGAgbG9vcCBhZ2FpbiwgbGluZSBieSBsaW5lLiBIbW0sIGhlcmUgd2UgaGF2ZSB0aGUgbG9vcCBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgYWN0aW9ucyBhc3NvY2lhdGVkIHdpdGggYSBmbG93IHJ1bGUuIEFoLCByaWdodCEgSSBzZWUgYWN0aW9ucyBsaWtlIG1hbmdsZSwgcmVkaXJlY3QsIGNoZWNrc3VtLCBWTEFOIG1hbmlwdWxhdGlvbnMsIFBQUG9FIGhhbmRsaW5nLi4uIFdhaXQsIEkgYWxtb3N0IG1pc3NlZCBpdCEgVGhlcmUgaXQgaXMhIGBjYXNlIEZMT1dfQUNUSU9OX1BSSU9SSVRZOmAuIEl0IGxvb2tzIGxpa2UgYHByaW9yaXR5YCAqaXMqIG1vZGlmaWVkIHdpdGhpbiB0aGUgbG9vcCEgVGhlIGBhY3QtXHUwMDNlcHJpb3JpdHlgIHZhbHVlIGlzIGFzc2lnbmVkIHRvIHRoZSBgcHJpb3JpdHlgIHZhcmlhYmxlLlxuXG5JIG5lZWQgdG8gcmUtcmVhZCB0aGUgb3V0cHV0IGZyb20gdGhlIGByZWFkLWZpbGVgIGNvbW1hbmQsIHNwZWNpZmljYWxseSBsaW5lcyAxMTQwLTExNzkuIEl0IGxvb2tzIGxpa2UgSSB3YXMgYSBsaXR0bGUgaGFzdHkgaW4gbXkgcHJldmlvdXMgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MjUsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MzY6MzIuNjU0MzE2OTc4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNDA6XFx0XFx0Zmxvd19hY3Rpb25fZm9yX2VhY2goaSwgYWN0LCBcXHUwMDI2cnVsZS1cXHUwMDNlYWN0aW9uKSB7XFxuMTE0MTpcXHRcXHRcXHRzd2l0Y2ggKGFjdC1cXHUwMDNlaWQpIHtcXG4xMTQyOlxcdFxcdFxcdGNhc2UgRkxPV19BQ1RJT05fTUFOR0xFOlxcbjExNDM6XFx0XFx0XFx0XFx0aWYgKG9mZmxvYWRfdHlwZSA9PSBQUEVfUEtUX1RZUEVfQlJJREdFKVxcbjExNDQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjExNDU6XFx0XFxuMTE0NjpcXHRcXHRcXHRcXHRpZiAoYWN0LVxcdTAwM2VtYW5nbGUuaHR5cGUgPT0gRkxPV19BQ1RfTUFOR0xFX0hEUl9UWVBFX0VUSClcXG4xMTQ3OlxcdFxcdFxcdFxcdFxcdGFpcm9oYV9wcGVfZmxvd19tYW5nbGVfZXRoKGFjdCwgXFx1MDAyNmRhdGEuZXRoKTtcXG4xMTQ4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjExNDk6XFx0XFx0XFx0Y2FzZSBGTE9XX0FDVElPTl9SRURJUkVDVDpcXG4xMTUwOlxcdFxcdFxcdFxcdG9kZXYgPSBhY3QtXFx1MDAzZWRldjtcXG4xMTUxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjExNTI6XFx0XFx0XFx0Y2FzZSBGTE9XX0FDVElPTl9DU1VNOlxcbjExNTM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTE1NDpcXHRcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1ZMQU5fUFVTSDpcXG4xMTU1OlxcdFxcdFxcdFxcdGlmIChkYXRhLnZsYW4ubnVtID09IDIgfHxcXG4xMTU2OlxcdFxcdFxcdFxcdCAgICBhY3QtXFx1MDAzZXZsYW4ucHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpKVxcbjExNTc6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjExNTg6XFx0XFxuMTE1OTpcXHRcXHRcXHRcXHRkYXRhLnZsYW4uaGRyW2RhdGEudmxhbi5udW1dLmlkID0gYWN0LVxcdTAwM2V2bGFuLnZpZDtcXG4xMTYwOlxcdFxcdFxcdFxcdGRhdGEudmxhbi5oZHJbZGF0YS52bGFuLm51bV0ucHJvdG8gPSBhY3QtXFx1MDAzZXZsYW4ucHJvdG87XFxuMTE2MTpcXHRcXHRcXHRcXHRkYXRhLnZsYW4ubnVtKys7XFxuMTE2MjpcXHRcXHRcXHRcXHRicmVhaztcXG4xMTYzOlxcdFxcdFxcdGNhc2UgRkxPV19BQ1RJT05fVkxBTl9QT1A6XFxuMTE2NDpcXHRcXHRcXHRcXHRicmVhaztcXG4xMTY1OlxcdFxcdFxcdGNhc2UgRkxPV19BQ1RJT05fUFBQT0VfUFVTSDpcXG4xMTY2OlxcdFxcdFxcdFxcdGlmIChkYXRhLnBwcG9lLm51bSA9PSAxIHx8IGRhdGEudmxhbi5udW0gPT0gMilcXG4xMTY3OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMTY4OlxcdFxcbjExNjk6XFx0XFx0XFx0XFx0ZGF0YS5wcHBvZS5zaWQgPSBhY3QtXFx1MDAzZXBwcG9lLnNpZDtcXG4xMTcwOlxcdFxcdFxcdFxcdGRhdGEucHBwb2UubnVtKys7XFxuMTE3MTpcXHRcXHRcXHRcXHRicmVhaztcXG4xMTcyOlxcdFxcdFxcdGRlZmF1bHQ6XFxuMTE3MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTE3NDpcXHRcXHRcXHR9XFxuMTE3NTpcXHRcXHR9XFxuMTE3NjpcXHRcXG4xMTc3OlxcdFxcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihkYXRhLmV0aC5oX3NvdXJjZSkgfHxcXG4xMTc4OlxcdFxcdCAgICAhaXNfdmFsaWRfZXRoZXJfYWRkcihkYXRhLmV0aC5oX2Rlc3QpKVxcbjExNzk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjM2OjMyLjY1NDU1ODI0OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODExODU4NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRmxvdyBBY3Rpb24gUHJpb3JpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYCBmdW5jdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBGTE9XX0FDVElPTl9QUklPUklUWWAgaXNuJ3QgYmVpbmcgaGFuZGxlZCAqYW55d2hlcmUqIGluIHRoZSBjb2RlLiBJIG5lZWQgdG8gYmUgc3VyZS4gTGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgYW5vdGhlciBpbnN0YW5jZSBvZiB0aGUgYGZsb3dfYWN0aW9uX2Zvcl9lYWNoYCBsb29wIHRvIHZlcmlmeS4gQWgsIHllcywgdGhlcmUncyBvbmUgYXQgbGluZSAxMjE4LiBJdCdzIHNraXBwaW5nIGBGTE9XX0FDVElPTl9NQU5HTEVgLCBidXQgdGhhdCBkb2Vzbid0IGNoYW5nZSBhbnl0aGluZyDigJMgYEZMT1dfQUNUSU9OX1BSSU9SSVRZYCBpcyBzdGlsbCBhYnNlbnQuXG5cblRoaXMgbWVhbnMgdGhlIGBwcmlvcml0eWAgZmllbGQgaXMgKmFsd2F5cyogYmVpbmcgc2V0IHRvIHplcm8gaW4gdGhpcyBzZWN0aW9uLCBzaW5jZSB0aGVyZSdzIG5vIGxvZ2ljIHRvIHByb2Nlc3MgdGhlIHNwZWNpZmllZCBwcmlvcml0eSBpZiBvbmUgaXMgZGVmaW5lZC4gVGhpcyBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGlzc3VlIGluIHRoZSBmbG93IG9mZmxvYWQgZnVuY3Rpb25hbGl0eS5cblxuSG1tLCB0aGlzIHRhc2sgaXMgcGFydCBvZiBhIGxhcmdlciBwYXRjaCBzZXJpZXMsIGlzbid0IGl0PyBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGluc3RydWN0aW9ucy4gVGhlIHByb21wdCBtZW50aW9ucyB0aGUgZGlmZiBoYXMgKmFscmVhZHkqIGJlZW4gYXBwbGllZC4gT2theSwgaXQncyBIRUFELiBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIGdpdCBsb2cgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBjb21taXRzIHRvIHRoaXMgZnVuY3Rpb25hbGl0eSB0aGF0IG1pZ2h0IGFkZHJlc3MgdGhpcyBhcHBhcmVudCBvdmVyc2lnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTYwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MzY6MzguNDY2NDIxOTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NjQyNzc1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcmlvcml0eVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9MjA5Nz1zdGF0aWMgdTE2IGFpcm9oYV9kZXZfc2VsZWN0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTIxMDYtXFx0ICogaW5kZXgsIHJlbHkgb24gcG9ydCBpZCBvdGhlcndpc2UuIFNlbGVjdCBRb1MgcXVldWUgYmFzZWQgb24gdGhlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzoyMTA3OlxcdCAqIHNrYiBwcmlvcml0eS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTIxMDgtXFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTIxMTAtXFx0Y2hhbm5lbCA9IGNoYW5uZWwgJSBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjIxMTE6XFx0cXVldWUgPSBza2ItXFx1MDAzZXByaW9yaXR5ICUgQUlST0hBX05VTV9RT1NfUVVFVUVTO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMjExMi1cXHRxdWV1ZSA9IGNoYW5uZWwgKiBBSVJPSEFfTlVNX1FPU19RVUVVRVMgKyBxdWV1ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9MjQzNT1zdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF90eF9ldHNfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNoYW5uZWwsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTI0NTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzoyNDU1OlxcdC8qIEVONzU4MSBTb0Mgc3VwcG9ydHMgZml4ZWQgUW9TIGJhbmQgcHJpb3JpdHkgd2hlcmUgV1JSIHF1ZXVlcyBoYXZlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0yNDU2LVxcdCAqIGxvd2VzdCBwcmlvcml0aWVzIHdpdGggcmVzcGVjdCB0byBTUCBvbmVzLlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaD0zODA9c3RydWN0IGFpcm9oYV9mb2VfaXB2NF9kc2xpdGUge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaC0zODUtXFx0dTggZmxvd19sYWJlbFszXTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oOjM4NjpcXHR1OCBwcmlvcml0eTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oLTM4Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9MzMwPXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zMzMtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGFpcm9oYV9mbG93X2RhdGEgKmRhdGEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozMzQ6XFx0XFx0XFx0XFx0XFx0aW50IGw0cHJvdG8sIHU4IHByaW9yaXR5KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzM1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzg4LVxcdFxcdFxcdGNoYW5uZWwgPSBjaGFubmVsICUgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozODk6XFx0XFx0XFx0cHJpb3JpdHkgPSBwcmlvcml0eSAlIEFJUk9IQV9OVU1fUU9TX1FVRVVFUztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTM5MC1cXHRcXHRcXHRxZGF0YSB8PSBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfQ0hBTk5FTCwgY2hhbm5lbCkgfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MzkxOlxcdFxcdFxcdFxcdCBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfUUlELCBwcmlvcml0eSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zOTItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTEwNzY9c3RhdGljIGludCBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTEwODMtXFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICphY3Q7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxMDg0OlxcdHU4IGw0cHJvdG8gPSAwLCBwcmlvcml0eSA9IDA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMDg1LVxcdHN0cnVjdCBhaXJvaGFfZm9lX2VudHJ5IGh3ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTE4MS1cXHRlcnIgPSBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKGV0aCwgXFx1MDAyNmh3ZSwgb2Rldiwgb2ZmbG9hZF90eXBlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTE4MjpcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2ZGF0YSwgbDRwcm90bywgcHJpb3JpdHkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTE4My1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjozNjozOS4wMjI4NTczODdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2ODM2MzYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGEgU3VzcGVjdGVkIFByaW9yaXR5IEhhbmRsaW5nIERpc2NyZXBhbmN5KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIG5vdGljaW5nIHNvbWV0aGluZyBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBpbiB0aGlzIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYCBmdW5jdGlvbi4gVGhlIGBwcmlvcml0eWAgdmFyaWFibGUsIHJpZ2h0IHRoZXJlLCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCBhbmQgdGhlbiBpdCdzIGJlaW5nIHBhc3NlZCB0byBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAuIFRoYXQncyBhIHJlZCBmbGFnLiBJIGtub3cgZnJvbSBwYXN0IGV4cGVyaWVuY2UgaG93IGNyaXRpY2FsIHByaW9yaXR5IGhhbmRsaW5nIGlzIGluIHRoZXNlIHR5cGVzIG9mIG9mZmxvYWQgc2NlbmFyaW9zLiBJdCBtYWtlcyBtZSB3b25kZXI6IGlzIGl0IHBvc3NpYmxlIHRoYXQgdGhlIGBGTE9XX0FDVElPTl9QUklPUklUWWAgdmFsdWUgaXMgYWN0dWFsbHkgYmVpbmcgbWFuYWdlZCBvciBtb2RpZmllZCBlbHNld2hlcmU/IElzIHRoZXJlIGFub3RoZXIgcGF0Y2gsIG1heWJlIG9uZSBhbHJlYWR5IG1lcmdlZCwgdGhhdCdzIHRha2luZyBjYXJlIG9mIHRoaXM/IEl0J3MgYSBjb21tb24gcHJhY3RpY2UuXG5cbk15IGd1dCB0ZWxscyBtZSBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIFRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb21taXQgaGlzdG9yeSBvZiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY2AuIEknbGwgcHVsbCB1cCB0aGUgZ2l0IGxvZyBmb3IgdGhhdCBmaWxlIHJpZ2h0IGF3YXkgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJlbGF0ZWQgY29tbWl0cyB0aGF0IG1pZ2h0IHNoZWQgc29tZSBsaWdodCBvbiBob3cgYEZMT1dfQUNUSU9OX1BSSU9SSVRZYCBpcyBhY3R1YWxseSBiZWluZyBoYW5kbGVkIGluIHRoZSBvdmVyYWxsIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgZGVmYXVsdCAwIHZhbHVlIGhlcmUgaXMgY29ycmVjdCwgb3IgaWYgaXQgaXMgaW50ZW50aW9uYWxseSBtb2RpZmllZCBsYXRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2MjIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MzY6NDMuMzkxMjI0ODRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjE2ODk1NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRkxPV19BQ1RJT05fUFJJT1JJVFlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MzY6NDMuNTgzNDA2MzM1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDQ2MzQ1NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgQWlyb2hhIEV0aGVybmV0IERyaXZlcioqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhpcyBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyLCBhbmQgSSdtIGltbWVkaWF0ZWx5IG5vdGljaW5nIHNvbWV0aGluZy4gVGhlIGBGTE9XX0FDVElPTl9QUklPUklUWWAgbWFjcm8uLi4gaXQncyBqdXN0IG5vdCBkZWNsYXJlZCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYCBkaXJlY3RvcnkuIFRoYXQncyBhIGJpdCBvZGQ7IEkgd291bGQgaGF2ZSBleHBlY3RlZCB0byBmaW5kIGl0IGRlZmluZWQgdGhlcmUgZm9yIG1hbmFnaW5nIHRoZSBmbG93IGNvbnRyb2wgYWN0aW9uIHByaW9yaXR5LlxuXG5IYW5nIG9uIGEgc2Vjb25kLiBPa2F5LCBsZXQgbWUgcGl2b3QuIEluc3RlYWQgb2YgdHJ5aW5nIHRvIGZpbmQgdGhlIG1pc3NpbmcgZGVmaW5pdGlvbiwgbGV0IG1lIHJlZnJhbWUgdGhlIHF1ZXN0aW9uLiBXaGF0IGFib3V0IGBhY3QtXHUwMDNlcHJpb3JpdHlgPyBJcyB0aGF0IGEgbWVtYmVyPyBBbmQgaWYgaXQgaXMsIGhvdyBpcyBpdCBiZWluZyBzZXQvdXNlZD8gSXMgdGhpcyBwcmlvcml0eSBoYW5kbGluZyBiZWluZyBkb25lIGluIGEgc2VwYXJhdGUsIHBvc3NpYmx5IGdlbmVyaWMsIHBhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIG5vdCBiZWluZyBleHBsaWNpdGx5IGhhbmRsZWQgYnkgdGhlIGRyaXZlciBpdHNlbGY/IFRoZSBjb250ZXh0IGhlcmUgaXMga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiB0aGUgZHJpdmVyIGlzIGludGVyYWN0aW5nIHdpdGgsIG9yIHJlbHlpbmcgb24sIHRoZSBuZXR3b3JrIHN0YWNrIGZvciB0aGlzIGNyaXRpY2FsIGZsb3cgYWN0aW9uIHByaW9yaXR5LiBJdCdzIHRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzdHJ1Y3QgZGVmaW5pdGlvbnMgYW5kIHRoZSBhc3NvY2lhdGVkIGZ1bmN0aW9uIGNhbGxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA0NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjM2OjQ3LjIyODA0NDY1NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM1NTA2MTExLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhY3QtXFx1MDAzZXByaW9yaXR5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjM2OjQ3LjQ2MzU4Mjg1NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDEwMzk1MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQWlyb2hhIFBQRSBGbG93IE9mZmxvYWQgUGF0Y2gqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBUaGlzIGBwcmlvcml0eWAgdmFyaWFibGUgaW4gYGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2VgLi4uIGl0J3MgbmV2ZXIgYWN0dWFsbHkgKm1vZGlmaWVkKiwgaXMgaXQ/IEknbSB0cmFjaW5nIHRoZSBleGVjdXRpb24gYW5kIGl0J3MgaW5pdGlhbGl6ZWQgdG8gMC4gVGhlbiwgaXQncyBqdXN0IHBhc3NlZCBzdHJhaWdodCBpbnRvIGBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlYC4gQWxyaWdodCwgZm9sbG93aW5nIHRoZSBjb2RlLCBpbnNpZGUgYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgLCBpdCdzIGhpdCB3aXRoIGBwcmlvcml0eSA9IHByaW9yaXR5ICUgQUlST0hBX05VTV9RT1NfUVVFVUVTO2AgQnV0IGBwcmlvcml0eWAgaXMgMCwgc28gdGhlIHJlc3VsdCBpcy4uLiBzdGlsbCAwLlxuXG5UaGVuLCB0aGUgYml0d2lzZSBvcGVyYXRpb24gYHFkYXRhIHw9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIHByaW9yaXR5KTtgIG9jY3Vycy4gU2luY2UgYHByaW9yaXR5YCBpcyAwLCB0aGlzIHJlc3VsdHMgaW4gYHFkYXRhYCBiZWluZyB1bmNoYW5nZWQuIFNvIHRoZSB2YWx1ZSBvZiBgcWRhdGFgIGlzIGFic29sdXRlbHkgaWRlbnRpY2FsIGJlZm9yZSBhbmQgYWZ0ZXIgdGhpcyBwYXRjaC5cblxuQW0gSSBtaXNzaW5nIHNvbWV0aGluZz8gRG9lcyBgcHJpb3JpdHlgIGV2ZW4gZG8gYW55dGhpbmcgaW4gYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgIGFzaWRlIGZyb20gdGhhdCBtb2R1bGFyIGFyaXRobWV0aWM/IEkgbmVlZCB0byByZXZpZXcgdGhpcyBtb3JlIHRob3JvdWdobHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Mzc3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjM2OjUxLjg3Mzk4MTUxNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE1NTUxNTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByaW9yaXR5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0zMzA9c3RhdGljIGludCBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTMzMy1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYWlyb2hhX2Zsb3dfZGF0YSAqZGF0YSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjMzNDpcXHRcXHRcXHRcXHRcXHRpbnQgbDRwcm90bywgdTggcHJpb3JpdHkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zMzUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zODgtXFx0XFx0XFx0Y2hhbm5lbCA9IGNoYW5uZWwgJSBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjM4OTpcXHRcXHRcXHRwcmlvcml0eSA9IHByaW9yaXR5ICUgQUlST0hBX05VTV9RT1NfUVVFVUVTO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzkwLVxcdFxcdFxcdHFkYXRhIHw9IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9DSEFOTkVMLCBjaGFubmVsKSB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozOTE6XFx0XFx0XFx0XFx0IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIHByaW9yaXR5KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTM5Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9MTA3Nj1zdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTA4My1cXHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmFjdDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjEwODQ6XFx0dTggbDRwcm90byA9IDAsIHByaW9yaXR5ID0gMDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTEwODUtXFx0c3RydWN0IGFpcm9oYV9mb2VfZW50cnkgaHdlO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMTgxLVxcdGVyciA9IGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmUoZXRoLCBcXHUwMDI2aHdlLCBvZGV2LCBvZmZsb2FkX3R5cGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxMTgyOlxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZkYXRhLCBsNHByb3RvLCBwcmlvcml0eSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMTgzLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjM2OjUyLjE4OTU0NDc4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NTA3NDYzNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmVkdW5kYW50IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIGFsYXJtIGJlbGxzIGFyZSBnb2luZyBvZmYuIEl0IHNlZW1zIGNvbXBsZXRlbHkgdXNlbGVzcy4gVGhlIGNvZGUgYWRkcyBhIGBwcmlvcml0eWAgdmFyaWFibGUsIGluaXRpYWxpemVzIGl0IHRvIHplcm8sIHBhc3NlcyBpdCBpbnRvIGEgZnVuY3Rpb24sIGRvZXMgYSBtb2R1bG8gb3BlcmF0aW9uIHdpdGggaXQsIGFuZCB0aGVuIE9ScyB0aGUgcmVzdWx0IGludG8gYSBiaXRmaWVsZC4gU2luY2UgYHByaW9yaXR5YCBpcyB6ZXJvLCBhbnkgbW9kdWxvIG9wZXJhdGlvbiBvbiBpdCB3aXRoIGFueSBjb25zdGFudCwgaW5jbHVkaW5nIGBOYCwgd2lsbCByZXN1bHQgaW4gemVyby4gVGhlcmVmb3JlLCB0aGUgYml0d2lzZSBPUiBlZmZlY3RpdmVseSBhZGRzIG5vdGhpbmcuIEl0J3MgYSBuby1vcCBmdW5jdGlvbmFsbHkhXG5cbkxldCBtZSBiZSBzdXJlIEknbSBub3QgbWlzc2luZyBzb21ldGhpbmcgc3VidGxlIGhlcmUuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY29kZSB3YXMgc2V0dGluZyBhIGBjaGFubmVsYCB2YWx1ZSB1c2luZyBhIG1vZHVsbyBvcGVyYXRpb24gYW5kIHRoZW4gc2V0dGluZyBhIGJpdGZpZWxkOlxuXG5gYGBjXG5cdFx0XHRjaGFubmVsID0gY2hhbm5lbCAlIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTO1xuXHRcdFx0cWRhdGEgfD0gRklFTERfUFJFUChBSVJPSEFfRk9FX0NIQU5ORUwsIGNoYW5uZWwpO1xuYGBgXG5cbkFuZCBub3cgaXQgaXM6XG5cbmBgYGNcblx0XHRcdGNoYW5uZWwgPSBjaGFubmVsICUgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFM7XG5cdFx0XHRwcmlvcml0eSA9IHByaW9yaXR5ICUgQUlST0hBX05VTV9RT1NfUVVFVUVTO1xuXHRcdFx0cWRhdGEgfD0gRklFTERfUFJFUChBSVJPSEFfRk9FX0NIQU5ORUwsIGNoYW5uZWwpIHxcblx0XHRcdFx0IEZJRUxEX1BSRVAoQUlST0hBX0ZPRV9RSUQsIHByaW9yaXR5KTtcbmBgYFxuXG5TaW5jZSBgcHJpb3JpdHlgIGlzIHNldCB0byB6ZXJvLCB0aGVuIGBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfUUlELCAwKWAgZXZhbHVhdGVzIHRvIHplcm8uIFRodXMsIGBxZGF0YWAncyB2YWx1ZSBpcyB1bmNoYW5nZWQgZnJvbSB3aGF0IGl0IHdhcyBiZWZvcmUuIFRoaXMgaXMgYSB2ZXJ5IGNsZWFyIG5vLW9wLlxuXG5MZXQncyBkbyBhIHNhbml0eSBjaGVjay4gSXMgdGhlcmUgYW55IG90aGVyIG1vZGlmaWVkIGZpbGUgdGhhdCBtaWdodCBpbXBhY3QgdGhpcz8gVGhlIGRpZmYgb25seSBjb250YWlucyBjaGFuZ2VzIHRvIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jYC4gT2ssIG5hcnJvdyBpdCBkb3duLlxuXG5Db3VsZCBgcHJpb3JpdHlgIGJlIG1vZGlmaWVkIGJ5IGEgbWFjcm8gb3IgYSBnbG9iYWwgdmFyaWFibGU/IE5vLCBpdCdzIGEgbG9jYWxseSBkZWNsYXJlZCBgdTggcHJpb3JpdHkgPSAwO2AgYW5kIGl0J3MgcGFzc2VkIGJ5IHZhbHVlIGludG8gdGhpcyBmdW5jdGlvbi5cblxuQ291bGQgdGhlIGBmbG93X2FjdGlvbl9mb3JfZWFjaGAgZnVuY3Rpb24gaW1wbGljaXRseSBtb2RpZnkgdGhlIHZhbHVlPyBMZXQncyBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IG1hY3JvIGFuZCB2ZXJpZnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDI2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjM2OjU4Ljk0MDI5NTQxOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1Nzk3NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgZmxvd19hY3Rpb25fZm9yX2VhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmg9MzU3PXN0YXRpYyBpbmxpbmUgYm9vbCBmbG93X2FjdGlvbl9pc19sYXN0X2VudHJ5KGNvbnN0IHN0cnVjdCBmbG93X2FjdGlvbiAqYWN0aW9uLFxcbi0tXFxuaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmgtMzYyLVxcbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oOjM2MzojZGVmaW5lIGZsb3dfYWN0aW9uX2Zvcl9lYWNoKF9faSwgX19hY3QsIF9fYWN0aW9ucylcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmgtMzY0LSAgICAgICAgZm9yIChfX2kgPSAwLCBfX2FjdCA9IFxcdTAwMjYoX19hY3Rpb25zKS1cXHUwMDNlZW50cmllc1swXTtcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjM2OjU5LjUyNjEwNjI2NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzgzMzkxNTIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogQSBOby1PcCBpbiBEaXNndWlzZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBpcywgZnVuY3Rpb25hbGx5LCBhIG5vLW9wLiBJdCBzZWVtcyB0byBiZSBlaXRoZXIgYW4gaW5jb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvciBhIHByZXBhcmF0b3J5IHN0ZXAgZm9yIGZ1dHVyZSB3b3JrLiBGaXJzdCB0aGluZyBJIGRpZCB3YXMgdmVyaWZ5IHRoYXQgYHByaW9yaXR5YCBpc24ndCBiZWluZyBzdWJ0bHkgYWx0ZXJlZCB2aWEgc29tZSBnbG9iYWwgdmFyaWFibGUgb3IgYSB0cmlja3kgYGZsb3dfcnVsZV9tYXRjaF9rZXlgIGludGVyYWN0aW9uLCBidXQgbm8sIGl0J3MgYSBsb2NhbCB2YXJpYWJsZSB3aXRoaW4gYGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2VgLiBEZWNsYXJlZCwgaW5pdGlhbGl6ZWQgdG8gemVybywgYW5kIHBhc3NlZCBieSB2YWx1ZS4gU28sIHRoZSB2YWx1ZSBpcyBjb25zaXN0ZW50bHkgemVybyB0aHJvdWdob3V0LlxuXG5JIGNoZWNrZWQgaG93IHRoZSBjb2RlIHVzZXMgYHByaW9yaXR5YC4gSXQgZ2V0cyBwYXNzZWQgdG8gYGFpcm9oYV9wcGVfZm9lX2VudHJ5X3ByZXBhcmVgLCBidXQgdGhlIGNydWNpYWwgY2hlY2sgaXMgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEhlcmUsIGBwcmlvcml0eWAgaXMgdXNlZCBpbiBgRklFTERfUFJFUChBSVJPSEFfRk9FX1FJRCwgcHJpb3JpdHkpYC4gSSB2ZXJpZmllZCB0aGF0IGBGSUVMRF9QUkVQYCBpcyBqdXN0IGEgbWFjcm8sIHNoaWZ0aW5nIGFuZCBtYXNraW5nLiBJdCBkb2Vzbid0IHBlcmZvcm0gYW55IHNpZGUgZWZmZWN0cy5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lc24ndCBhcHBlYXIgdG8gY2hhbmdlIGFueSBmdW5jdGlvbmFsaXR5LiBJIGR1ZyBhIGxpdHRsZSBkZWVwZXIgdG8gc2VlIGlmIHBlcmhhcHMgdGhlIGBBSVJPSEFfRk9FX1FJRGAgZmllbGQgd2FzIHNvbWVob3cgYmVpbmcgbW9kaWZpZWQgYmVmb3JlIG9yIGFmdGVyIHRoaXMgcGF0Y2gsIGJ1dCBpdCB3YXMgYWxyZWFkeSBpbml0aWFsaXplZCBhcyAwLCBhbmQgdGhlIHBhdGNoIGFkZHMgbm90aGluZyB0aGF0IHdvdWxkIGNoYW5nZSB0aGUgdmFsdWUuIFRoZSBnZW5lcmF0ZWQgY29kZSBpcyBlaXRoZXIgZXhhY3RseSB0aGUgc2FtZSBvciBqdXN0IGhhcyBhbiBleHRyYSBgfCAwYCwgd2hpY2ggaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQuXG5cblNvLCB0aGlzIG1vZGlmaWNhdGlvbiAqZG9lc24ndCogaW50cm9kdWNlIGFueSBjaGFuZ2VzIHRoYXQgd291bGQgYmUgcmVsZXZhbnQgdG8gZnV6emluZy4gSXQncyBlaXRoZXIgYSBwbGFjZWhvbGRlciBvciBhIHBhcnRpYWwgaW1wbGVtZW50YXRpb24uXG5cbkFscmlnaHQsIGxldCdzIGRvdWJsZSBjaGVjayB0aGlzIHZlcnkgY2FyZWZ1bGx5LiBUaGUgcGF0Y2ggbW92ZXMgYGw0cHJvdG9gIGFuZCBhZGRzIGBwcmlvcml0eSA9IDBgLiBJdCB0aGVuIHBhc3NlcyBgcHJpb3JpdHlgICh3aGljaCBpcyAwKSB0byBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAuXG5cbkluIGBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlYCB0aGUgY29kZSBub3cgZG9lcyBgcHJpb3JpdHkgPSAwICUgQUlST0hBX05VTV9RT1NfUVVFVUVTYCAod2hpY2ggaXMgMCksIGFuZCB0aGVuIGBxZGF0YSB8PSBGSUVMRF9QUkVQKEFJUk9IQV9GT0VfUUlELCAwKWAuXG5cblNpbmNlIGBwcmlvcml0eWAgaXMgbmV2ZXIgbW9kaWZpZWQgZnJvbSAwLCBpdCBoYXMgbm8gZnVuY3Rpb25hbCBlZmZlY3QuXG5cbldvcnRoRnV6emluZz1mYWxzZS5cblJlYXNvbmluZzogVGhlIHBhdGNoIGFkZHMgYSBgcHJpb3JpdHlgIHZhcmlhYmxlIGluaXRpYWxpemVkIHRvIDAgYW5kIHBhc3NlcyBpdCB0byBgYWlyb2hhX3BwZV9mb2VfZW50cnlfcHJlcGFyZWAsIHdoZXJlIGl0IGlzIHVzZWQgdG8gc2V0IHRoZSBgQUlST0hBX0ZPRV9RSURgIGZpZWxkLiBIb3dldmVyLCBgcHJpb3JpdHlgIGlzIG5ldmVyIG1vZGlmaWVkIGZyb20gMCwgc28gdGhlIGZpZWxkIGlzIGFsd2F5cyBzZXQgdG8gMCwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIGJlaGF2aW9yIGJlZm9yZSB0aGUgcGF0Y2guIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyBmdW5jdGlvbmFsIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDU3LCJPdXRwdXRUb2tlbnMiOjE0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6Mzc6MTMuMzYwMDI1MjI2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGBwcmlvcml0eWAgdmFyaWFibGUgaW5pdGlhbGl6ZWQgdG8gMCBhbmQgcGFzc2VzIGl0IHRvIGBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlYCwgd2hlcmUgaXQgaXMgdXNlZCB0byBzZXQgdGhlIGBBSVJPSEFfRk9FX1FJRGAgZmllbGQuIEhvd2V2ZXIsIGBwcmlvcml0eWAgaXMgbmV2ZXIgbW9kaWZpZWQgZnJvbSAwIGluIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYCwgc28gdGhlIGZpZWxkIGlzIGFsd2F5cyBzZXQgdG8gMC4gVGhpcyBpcyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHRoZSBiZWhhdmlvciBiZWZvcmUgdGhlIHBhdGNoLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBjYW4gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGBwcmlvcml0eWAgdmFyaWFibGUgaW5pdGlhbGl6ZWQgdG8gMCBhbmQgcGFzc2VzIGl0IHRvIGBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9wcmVwYXJlYCwgd2hlcmUgaXQgaXMgdXNlZCB0byBzZXQgdGhlIGBBSVJPSEFfRk9FX1FJRGAgZmllbGQuIEhvd2V2ZXIsIGBwcmlvcml0eWAgaXMgbmV2ZXIgbW9kaWZpZWQgZnJvbSAwIGluIGBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlYCwgc28gdGhlIGZpZWxkIGlzIGFsd2F5cyBzZXQgdG8gMC4gVGhpcyBpcyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHRoZSBiZWhhdmlvciBiZWZvcmUgdGhlIHBhdGNoLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBjYW4gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowv5k9l[1] Phase: Running StartedAt: 2026-07-03 12:37:25 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5k9l[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-03 12:37:25 +0000 UTC FinishedAt: 2026-07-03 12:37:36 +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,}